Skip to content

Rebase to TK2 via TK2 rather than CX #3991

Rebase to TK2 via TK2 rather than CX

Rebase to TK2 via TK2 rather than CX #3991

Workflow file for this run

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