Rebase to TK2 via TK2 rather than CX #3991
Workflow file for this run
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: test libraries | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: {} | |
env: | |
ALL_LIBS: '["tklog", "tkassert", "tkrng", "tktokenswap", "tkwsm"]' | |
jobs: | |
changes: | |
runs-on: ubuntu-24.04 | |
outputs: | |
tklog: ${{ steps.filter.outputs.tklog }} | |
tkassert: ${{ steps.filter.outputs.tkassert }} | |
tkrng: ${{ steps.filter.outputs.tkrng }} | |
libs: ${{ steps.filter.outputs.changes }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dorny/[email protected] | |
id: filter | |
with: | |
base: ${{ github.ref }} | |
filters: | | |
tklog: | |
- 'libs/tklog/**' | |
tkassert: | |
- 'libs/tkassert/**' | |
tkrng: | |
- 'libs/tkrng/**' | |
tktokenswap: | |
- 'libs/tktokenswap/**' | |
tkwsm: | |
- 'libs/tkwsm/**' | |
gh_actions: | |
- '.github/workflows/test_libs.yml' | |
set_libs_matrix: | |
name: Set the libs strategy matrix | |
needs: changes | |
runs-on: ubuntu-24.04 | |
outputs: | |
libs: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Set LIBS_TO_TEST to all the libraries | |
# Test all libraries if the test_libs.yml file was modified | |
if: ${{ contains(needs.changes.outputs.libs, 'gh_actions') }} | |
run: | | |
echo "LIBS_TO_TEST=${{ toJSON(env.ALL_LIBS) }}" >> $GITHUB_ENV | |
- name: Set LIBS_TO_TEST to the modified libraries only | |
if: ${{ ! contains(needs.changes.outputs.libs, 'gh_actions') }} | |
run: | | |
echo "LIBS_TO_TEST=${{ toJSON(needs.changes.outputs.libs) }}" >> $GITHUB_ENV | |
- name: Set libs matrix | |
id: set-matrix | |
run: echo "matrix=${LIBS_TO_TEST}" >> $GITHUB_OUTPUT | |
test_libraries: | |
name: test library | |
needs: set_libs_matrix | |
if: ${{ needs.set_libs_matrix.outputs.libs != '[]' && needs.set_libs_matrix.outputs.libs != '' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['ubuntu-24.04', 'macos-13', 'macos-15', 'windows-2022'] | |
lib: ${{ fromJson(needs.set_libs_matrix.outputs.libs) }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Select Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Install conan | |
uses: turtlebrowser/[email protected] | |
- name: Set up conan | |
shell: bash | |
run: | | |
conan profile detect | |
DEFAULT_PROFILE_PATH=`conan profile path default` | |
PROFILE_PATH=./conan-profiles/${{ matrix.os }} | |
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true | |
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH} | |
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0 | |
- name: build ${{ matrix.lib }} | |
run: conan create libs/${{ matrix.lib }} -o boost/*:header_only=True --build=missing | |
- name: build ${{ matrix.lib }} tests | |
run: conan create -o boost/*:header_only=True libs/${{ matrix.lib }}/test --build=missing --format json > test-${{ matrix.lib }}.json | |
- name: run ${{ matrix.lib }} tests | |
shell: bash | |
run: | | |
PKGPATH=`./rootpath test-${{ matrix.lib }}.json test-${{ matrix.lib }}` | |
cd ${PKGPATH}/bin | |
./test-${{ matrix.lib }} | |
generate_coverage: | |
name: Generate coverage report | |
needs: set_libs_matrix | |
if: ${{ needs.set_libs_matrix.outputs.libs != '[]' && needs.set_libs_matrix.outputs.libs != '' }} | |
strategy: | |
matrix: | |
lib: ${{ fromJson(needs.set_libs_matrix.outputs.libs) }} | |
runs-on: 'ubuntu-24.04' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Select Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Install conan | |
uses: turtlebrowser/[email protected] | |
- name: Set up conan | |
run: | | |
conan profile detect | |
DEFAULT_PROFILE_PATH=`conan profile path default` | |
PROFILE_PATH=./conan-profiles/ubuntu-24.04 | |
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true | |
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH} | |
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0 | |
- name: build ${{ matrix.lib }} | |
run: | | |
conan build libs/${{ matrix.lib }} -s build_type=Debug --build=missing -o boost/*:header_only=True -o ${{ matrix.lib }}/*:profile_coverage=True -of build/${{ matrix.lib }} | |
conan export-pkg libs/${{ matrix.lib }} -s build_type=Debug -o boost/*:header_only=True -o ${{ matrix.lib }}/*:profile_coverage=True -of build/${{ matrix.lib }} -tf "" | |
- name: build ${{ matrix.lib }} tests | |
run: | | |
conan build libs/${{ matrix.lib }}/test -s build_type=Debug --build=missing -o boost/*:header_only=True -o test-${{ matrix.lib }}/*:with_coverage=True -of build/${{ matrix.lib }}-tests | |
- name: run ${{ matrix.lib }} tests | |
working-directory: ./build/${{ matrix.lib }}-tests/build/Debug | |
run: ./test-${{ matrix.lib }} | |
- name: install gcovr | |
run: pip install gcovr~=6.0 | |
- name: build coverage report | |
run: | | |
mkdir ${{ matrix.lib }}-coverage | |
gcovr --print-summary --html --html-details -r ${GITHUB_WORKSPACE}/libs/${{ matrix.lib }} --exclude-lines-by-pattern '.*\bTKET_ASSERT\(.*\);' --object-directory ${GITHUB_WORKSPACE}/build/${{ matrix.lib }}/build/Debug/CMakeFiles/${{ matrix.lib }}.dir/src -o ${{ matrix.lib }}-coverage/index.html --decisions > ${{ matrix.lib }}-coverage/summary.txt | |
cat ${{ matrix.lib }}-coverage/summary.txt | |
- name: upload artefact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.lib }}_coverage | |
path: ${{ matrix.lib }}-coverage/ | |
- name: check coverage against latest published data from main | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
run: | | |
# File may not exist if this is the very first time, so don't error. | |
wget https://cqcl.github.io/tket/${{ matrix.lib }}/test-coverage/summary.txt || true | |
if [[ -f summary.txt ]] ; then | |
./.github/workflows/compare-coverage summary.txt ${{ matrix.lib }}-coverage/summary.txt | |
fi | |
publish_coverage: | |
name: Publish coverage | |
needs: [set_libs_matrix, generate_coverage] | |
if: ${{ github.event_name == 'push' && needs.set_libs_matrix.outputs.libs != '[]' && needs.set_libs_matrix.outputs.libs != '' }} | |
strategy: | |
matrix: | |
lib: ${{ fromJson(needs.set_libs_matrix.outputs.libs) }} | |
concurrency: gh_pages | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
- name: download artefact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ matrix.lib }}_coverage | |
path: ${{ matrix.lib }}-coverage/ | |
- name: configure git | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "«$GITHUB_WORKFLOW» github action" | |
- name: pull latest | |
run: git pull | |
- name: remove old report | |
run: git rm -r docs/${{ matrix.lib }}/test-coverage | |
- name: add report to repository | |
run: | | |
mkdir -p docs/${{ matrix.lib }} | |
mv ${{ matrix.lib }}-coverage docs/${{ matrix.lib }}/test-coverage | |
git add -f docs/${{ matrix.lib }}/test-coverage | |
git commit --allow-empty -m "Add generated coverage report." | |
- name: publish report | |
run: git push origin gh-pages:gh-pages |