GitHub CI: Turn on fail-fast for macOS and doc matrix jobs #15
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 ] | |
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-11, macos-12, macos-13 ] | |
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 ] | |
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-11, macos-12, macos-13 ] | |
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 ] | |
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-11, macos-12, macos-13 ] | |
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 |