Skip to content

GitHub CI: Update the OS matrix and rename YAML file #1

GitHub CI: Update the OS matrix and rename YAML file

GitHub CI: Update the OS matrix and rename YAML file #1

Workflow file for this run

name: CI
# Trigger the workflow on push or pull request
on: [ push, pull_request ]
jobs:
build-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ]
fail-fast: false
name: "Build ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Download bsc
uses: B-Lang-org/download-bsc@v1
with:
os: ${{ matrix.os }}
path: ../
- name: Build
run: |
export PATH=$PWD/../bsc/bin:$PATH
make install
tar czf inst.tar.gz inst
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }} build
path: inst.tar.gz
build-macOS:
strategy:
matrix:
os: [ macos-12, macos-13, macos-14 ]
fail-fast: false
name: "Build ${{ matrix.os }}"
runs-on: ${{ matrix. os }}
steps:
- uses: actions/checkout@v4
- name: Download bsc
uses: B-Lang-org/download-bsc@v1
with:
os: ${{ matrix.os }}
path: ../
- name: Build
run: |
export PATH=$PWD/../bsc/bin:$PATH
make install
tar czf inst.tar.gz inst
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }} build
path: inst.tar.gz
build-doc-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ]
fail-fast: false
name: "Build doc: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies
shell: bash
run: "sudo .github/workflows/install_dependencies_doc_ubuntu.sh"
- name: Build
run: |
make install-doc
tar czf inst.tar.gz inst
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }} build doc
path: inst.tar.gz
build-doc-macOS:
strategy:
matrix:
os: [ macos-12, macos-13, macos-14 ]
fail-fast: false
name: "Build doc: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies
shell: bash
run: ".github/workflows/install_dependencies_doc_macos.sh"
- name: Build
run: |
# Brew install of mactex doesn't update the path until a new shell is opened
export PATH=/Library/TeX/texbin/:$PATH
make install-doc
tar czf inst.tar.gz inst
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }} build doc
path: inst.tar.gz
test-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ]
fail-fast: false
name: "Test ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-ubuntu
steps:
- uses: actions/checkout@v4
- name: Install dependencies
shell: bash
run: "sudo .github/workflows/install_dependencies_testsuite_ubuntu.sh"
# Can this be cached from the previous job?
- name: Download bsc
id: download
uses: B-Lang-org/download-bsc@v1
with:
os: ${{ matrix.os }}
path: ../
# Checkout the testsuite at the same version
- name: Download testsuite
run: |
git clone -n https://github.com/B-Lang-org/bsc ../bsc-testsuite
cd ../bsc-testsuite
git checkout ${{ steps.download.outputs.commit }}
- name: Add bdw tests to testsuite
run: |
cp -r testing/bsc.bdw ../bsc-testsuite/testsuite/
- name: Download bdw
uses: actions/download-artifact@v4
with:
name: ${{ matrix.os }} build
- name: Install bdw
run: "tar xzf inst.tar.gz"
# Restore previous ccache cache of compiled object files. Use a SHA
# in the key so that a new cache file is generated after every
# successful build, and have the restore-key use the most recent.
- name: CCache cache files
uses: actions/cache@v4
with:
path: ${{ GITHUB.WORKSPACE }}/ccache
key: ${{ matrix.os }}-ccache-${{ github.sha }}
restore-keys: |
${{ matrix.os }}-ccache-
- name: Run testsuite
env:
CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache
run: |
# Use ccache to avoid recompiling generated .cxx every run.
ccache --zero-stats --max-size 500M
export PATH=/usr/lib/ccache:$PATH
# Use the LLVM linker as the C++ linker
# for a moderate build-time speedup over ld.bfd
export LINKER=lld
export LDFLAGS="-Wl,-fuse-ld=$LINKER"
# Always archive logs, even if make fails (and terminates this script
# because it's invoked with :set -eo pipefile)
trap ./archive_logs.sh EXIT
# Use -O0 for significantly faster C++ compiles (which more
# than make up for slower simulations)
export CXXFLAGS="-O0"
cd ../bsc-testsuite/testsuite
export TEST_RELEASE=$PWD/../../bsc
export TEST_CONTRIB=
export BDW=$PWD/../../bdw/inst/bin/bdw
xvfb-run -a make -C bsc.bdw check
# Show ccache stats so we can see what the hit-rate is like.
- name: CCache stats
env:
CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache
run: ccache --show-stats
# Move the test logs to GITHUB.WORKSPACE
# because upload-artifact doesn't support relative paths
- name: Move test logs
if: failure()
run: mv ../bsc-testsuite/testsuite/logs.tar.gz .
# Save test logs on failure so we can diagnose
- name: Archive test logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-logs-${{ matrix.os }}
path: logs.tar.gz
test-macOS:
strategy:
matrix:
os: [ macos-12, macos-13, macos-14 ]
fail-fast: false
name: "Test ${{ matrix.os }}"
runs-on: ${{ matrix. os }}
needs: build-macos
steps:
- uses: actions/checkout@v4
- name: Install dependencies
shell: bash
run: ".github/workflows/install_dependencies_testsuite_macos.sh"
# Can this be cached from the previous job?
- name: Download bsc
id: download
uses: B-Lang-org/download-bsc@v1
with:
os: ${{ matrix.os }}
path: ../
# Checkout the testsuite at the same version
- name: Download testsuite
run: |
git clone -n https://github.com/B-Lang-org/bsc ../bsc-testsuite
cd ../bsc-testsuite
git checkout ${{ steps.download.outputs.commit }}
- name: Add bdw tests to testsuite
run: |
cp -r testing/bsc.bdw ../bsc-testsuite/testsuite/
- name: Download bdw
uses: actions/download-artifact@v4
with:
name: ${{ matrix.os }} build
- name: Install bdw
run: "tar xzf inst.tar.gz"
# Restore previous ccache cache of compiled object files. Use a SHA
# in the key so that a new cache file is generated after every
# successful build, and have the restore-key use the most recent.
- name: CCache cache files
uses: actions/cache@v4
with:
path: ${{ GITHUB.WORKSPACE }}/ccache
key: ${{ matrix.os }}-ccache-${{ github.sha }}
restore-keys: |
${{ matrix.os }}-ccache-
- name: Run testsuite
env:
CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache
run: |
# Use ccache to avoid recompiling generated .cxx every run.
ccache --zero-stats --max-size 500M
export PATH=$(brew --prefix)/opt/local/ccache/libexec:$PATH
# Always archive logs, even if make fails (and terminates this script
# because it's invoked with :set -eo pipefile)
trap ./archive_logs.sh EXIT
# Use -O0 for significantly faster C++ compiles (which more
# than make up for slower simulations)
export CXXFLAGS="-O0"
cd ../bsc-testsuite/testsuite
export TEST_RELEASE=$PWD/../../bsc
export TEST_CONTRIB=
export BDW=$PWD/../../bdw/inst/bin/bdw
# Without a DISPLAY, this doesn't run all tests
make -C bsc.bdw check
# Show ccache stats so we can see what the hit-rate is like.
- name: CCache stats
env:
CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache
run: ccache --show-stats
# Move the test logs to GITHUB.WORKSPACE
# because upload-artifact doesn't support relative paths
- name: Move test logs
if: failure()
run: mv ../bsc-testsuite/testsuite/logs.tar.gz .
# Save test logs on failure so we can diagnose
- name: Archive test logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-logs-${{ matrix.os }}
path: logs.tar.gz