Add multi_thread_greedy_pauli_optimisation
#6172
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: Build and test | |
on: | |
pull_request: | |
branches: | |
- main | |
push: | |
branches: | |
- main | |
schedule: | |
# 03:00 every Saturday morning | |
- cron: '0 3 * * 6' | |
workflow_dispatch: {} | |
concurrency: | |
group: ${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
check_changes: | |
name: Check tket library version | |
runs-on: ubuntu-24.04 | |
outputs: | |
tket_or_workflow_changed: ${{ steps.filter.outputs.tket_or_workflow }} | |
tket_changed: ${{ steps.filter.outputs.tket }} | |
doxyfile_or_workflow_changed: ${{ steps.filter.outputs.doxyfile_or_workflow }} | |
pytket_or_workflow_changed: ${{ steps.filter.outputs.pytket_or_workflow }} | |
tket_ver: ${{ steps.tket_ver.outputs.tket_ver }} | |
tket_package_exists: ${{ steps.tket_package_exists.outputs.tket_package_exists }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Select Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- uses: dorny/[email protected] | |
id: filter | |
with: | |
base: ${{ github.ref }} | |
filters: | | |
tket: | |
- '{tket/src/**,tket/include/**,tket/conanfile.py,tket/CMakeLists.txt,tket/cmake/**,tket/test/**,tket/proptest/**}' | |
tket_or_workflow: | |
- '{tket/src/**,tket/include/**,tket/conanfile.py,tket/CMakeLists.txt,tket/cmake/**,tket/test/**,tket/proptest/**}' | |
- '.github/workflows/build_and_test.yml' | |
doxyfile_or_workflow: | |
- '{tket/Doxyfile}' | |
- '.github/workflows/build_and_test.yml' | |
pytket_or_workflow: | |
- 'pytket/**' | |
- '.github/workflows/build_and_test.yml' | |
- name: Install conan | |
uses: turtlebrowser/[email protected] | |
- name: parse version from conanfile | |
id: tket_ver | |
run: | | |
tket_ver=$(conan inspect tket/conanfile.py | grep "^version: " | awk '{print $2}') | |
echo "tket_ver=${tket_ver}" >> $GITHUB_OUTPUT | |
- name: See if version exists on remote | |
id: test_package_exists | |
run: | | |
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0 | |
tket_package_exists=`conan search -r tket-libs "tket/${{ steps.tket_ver.outputs.tket_ver }}@tket/stable" | grep "not found" > /dev/null 2>&1 && echo false || echo true` | |
echo "tket_package_exists=${tket_package_exists}" >> $GITHUB_OUTPUT | |
- name: Check tket version bump | |
if: github.event_name == 'pull_request' && steps.filter.outputs.tket == 'true' && steps.test_package_exists.outputs.tket_package_exists == 'true' | |
run: exit 1 | |
check_docs_tket: | |
name: Check documentation build | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.doxyfile_or_workflow_changed == 'true' | |
runs-on: 'ubuntu-24.04' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check doxygen | |
run: | | |
sudo apt install -y doxygen graphviz | |
cd tket && doxygen | |
check_format_tket: | |
name: Check C++ code formatting | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' | |
runs-on: 'macos-15' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check C++ code formatting | |
run: | | |
brew update | |
brew install clang-format@19 | |
git ls-files "*.cpp" "*.hpp" | xargs clang-format -style=file -i | |
git diff --exit-code | |
build_test_tket: | |
name: Build and test (tket) | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' | |
strategy: | |
matrix: | |
os: ['ubuntu-24.04', 'macos-13', 'macos-15'] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: apt update | |
if: matrix.os == 'ubuntu-24.04' | |
run: sudo apt update | |
- 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/${{ 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: Install runtime test requirements | |
if: matrix.os == 'ubuntu-24.04' && github.event_name == 'schedule' | |
run: | | |
sudo apt install texlive texlive-latex-extra latexmk | |
mkdir -p ~/texmf/tex/latex | |
wget http://mirrors.ctan.org/graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex -P ~/texmf/tex/latex | |
- name: ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: tket-static-${{ matrix.os }} | |
- name: further ccache config | |
run: | | |
ccache --set-config base_dir=${HOME} | |
ccache --set-config compiler_check=content | |
ccache --set-config namespace=WITH_TESTS | |
ccache -p | |
- name: Build tket | |
run: conan create tket -s build_type=Release --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True | |
- name: Upload package | |
if: github.event_name == 'push' | |
run: | | |
ccache --set-config namespace=WITHOUT_TESTS | |
conan create tket --user=tket --channel=stable -o boost/*:header_only=True | |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }} | |
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs | |
build_test_tket_windows: | |
name: Build and test (tket) | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' | |
strategy: | |
matrix: | |
os: ['windows-2022'] | |
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: normalize line endings in conanfile and src directory | |
# This is necessary to ensure consistent revisions across platforms. | |
# Conan's revision hash is composed of hashes of all the exported files, | |
# so we must normalize the line endings in these. | |
run: | | |
$tket_files = Get-ChildItem "tket" -File -Recurse | |
foreach ($f in $tket_files) { | |
$normalized_file = [IO.File]::ReadAllText($f) -replace "`r`n", "`n" | |
[IO.File]::WriteAllText($f, $normalized_file) | |
} | |
- name: ninja ccache setup | |
# This is what hendrikmuhs/ccache-action does, but for windows (theirs is buggy on windows) | |
id: ninja-ccache-setup | |
run: | | |
choco upgrade ccache ninja | |
$ccache_dir = ccache --get-config cache_dir | |
echo ccache_dir=$ccache_dir >> $env:GITHUB_OUTPUT | |
ccache --set-config=max_size='500M' | |
ccache --set-config=compression=true | |
ccache --set-config compiler_check=content | |
ccache --set-config namespace=WITH_TESTS | |
ccache -p | |
- name: Get current time | |
uses: josStorer/[email protected] | |
id: current_time | |
with: | |
format: YYYYMMDDHHmmss | |
- name: ccache windows | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.ninja-ccache-setup.outputs.ccache_dir }} | |
key: tket-static-${{ matrix.os }}-${{ steps.current_time.outputs.formattedTime }} | |
restore-keys: | | |
tket-static-${{ matrix.os }}- | |
- name: Build tket | |
# On windows use build + export-pkg so build directory is consistent across runs (i.e. don't build from conan cache) | |
# Necessary because setting ccache base_dir doesn't currently work on windows | |
run: | | |
conan build tket --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True -c tools.cmake.cmaketoolchain:generator=Ninja | |
conan export-pkg tket --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True -c tools.cmake.cmaketoolchain:generator=Ninja | |
- name: Upload package | |
if: github.event_name == 'push' | |
run: | | |
ccache --set-config namespace=WITHOUT_TESTS | |
conan build tket --user=tket --channel=stable -o boost/*:header_only=True | |
conan export-pkg tket --user=tket --channel=stable -o boost/*:header_only=True | |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }} | |
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs | |
- name: ccache stats | |
run: | | |
ccache -s #show stats | |
ccache -z #show stats | |
build_test_pytket_ubuntu: | |
name: Build and test pytket (ubuntu) | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true' | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- 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: ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: tket-dynamic-ubuntu-24.04 | |
- name: further ccache config | |
run: | | |
ccache --set-config base_dir=${HOME} | |
ccache --set-config compiler_check=content | |
ccache -p | |
- name: Build tket | |
if: needs.check_changes.outputs.tket_changed == 'true' | |
run: conan create tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf "" | |
- name: Install tket | |
if: needs.check_changes.outputs.tket_changed != 'true' | |
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: check that version is consistent | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }} | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: Set up Python (pull request) | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Set up Python (push) | |
if: github.event_name == 'push' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Set up Python (schedule) | |
if: github.event_name == 'schedule' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Build pytket | |
run: | | |
cd pytket | |
if python --version | grep -q '3.13' ; then | |
pip install -e . -v | |
else | |
pip install -e .[ZX] -v | |
fi | |
- name: Run doctests | |
run: | | |
cd pytket | |
pip install pytest | |
pytest --doctest-modules pytket | |
- name: Test pytket with coverage | |
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' | |
run: | | |
cd pytket/tests | |
pip install -r requirements.txt | |
pytest --ignore=simulator/ --hypothesis-seed=1 --cov=../pytket --cov-branch --cov-report=html --cov-report=xml:htmlcov/cov.xml | |
- name: Test pytket | |
if: github.event_name != 'pull_request' || github.event_name == 'workflow_dispatch' | |
run: | | |
cd pytket/tests | |
pip install -r requirements.txt | |
pytest --ignore=simulator/ | |
- name: Test building docs | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
timeout-minutes: 20 | |
run: | | |
pip install poetry>=1.8.1 | |
poetry config virtualenvs.create false | |
cd pytket/docs | |
poetry install | |
bash ./build-docs.sh | |
- name: Upload artifact | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytket_docs | |
path: pytket/docs/build/ | |
- name: Upload pytket coverage artefact | |
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytket_test_coverage | |
path: pytket/tests/htmlcov | |
- name: Upload package | |
if: github.event_name == 'push' && needs.check_changes.outputs.tket_changed == 'true' | |
run: | | |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }} | |
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs | |
build_test_pytket_macos: | |
name: Build and test pytket (macos) | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true' | |
strategy: | |
matrix: | |
os: ['macos-13', 'macos-15'] | |
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 | |
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: ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: tket-dynamic-macos | |
- name: further ccache config | |
run: | | |
ccache --set-config base_dir=${HOME} | |
ccache --set-config compiler_check=content | |
ccache -p | |
- name: Build tket | |
if: needs.check_changes.outputs.tket_changed == 'true' | |
run: conan create tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf "" | |
- name: Install tket | |
if: needs.check_changes.outputs.tket_changed != 'true' | |
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: check that version is consistent | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }} | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: Set up Python (pull request) | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Set up Python (push) | |
if: github.event_name == 'push' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Set up Python (schedule) | |
if: github.event_name == 'schedule' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Build pytket | |
run: | | |
cd pytket | |
if python --version | grep -q '3.13' ; then | |
pip install -e . -v | |
else | |
pip install -e .[ZX] -v | |
fi | |
- name: Run doctests | |
run: | | |
cd pytket | |
python -m pip install pytest | |
python -m pytest --doctest-modules pytket | |
- name: Test pytket | |
run: | | |
cd pytket/tests | |
python -m pip install -r requirements.txt | |
python -m pytest --ignore=simulator/ | |
- name: Check type stubs are up-to-date and run mypy | |
if: matrix.os == 'macos-15' && (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch') | |
run: | | |
python -m pip install -U mypy pybind11-stubgen | |
cd pytket | |
./stub_generation/regenerate_stubs | |
git diff pytket/_tket && echo "Stubs are up-to-date" || exit 1 # fail if stubs change after regeneration | |
python -m mypy --config-file=mypy.ini --no-incremental -p pytket -p tests | |
- name: Upload package | |
if: github.event_name == 'push' && needs.check_changes.outputs.tket_changed == 'true' | |
run: | | |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }} | |
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs | |
build_test_pytket_windows: | |
name: Build and test pytket (windows) | |
needs: check_changes | |
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true' | |
runs-on: windows-2022 | |
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/windows-2022 | |
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: normalize line endings in conanfile and src directory | |
# This is necessary to ensure consistent revisions across platforms. | |
# Conan's revision hash is composed of hashes of all the exported files, | |
# so we must normalize the line endings in these. | |
run: | | |
$tket_files = Get-ChildItem "tket" -File -Recurse | |
foreach ($f in $tket_files) { | |
$normalized_file = [IO.File]::ReadAllText($f) -replace "`r`n", "`n" | |
[IO.File]::WriteAllText($f, $normalized_file) | |
} | |
- name: ccache setup | |
# This is what hendrikmuhs/ccache-action does, but for windows (theirs is buggy on windows) | |
id: ccache-setup | |
run: | | |
choco upgrade ccache | |
$ccache_dir = ccache --get-config cache_dir | |
echo ccache_dir=$ccache_dir >> $env:GITHUB_OUTPUT | |
ccache --set-config=max_size='500M' | |
ccache --set-config=compression=true | |
ccache --set-config compiler_check=content | |
ccache --set-config namespace=WITH_TESTS | |
ccache -p | |
- name: Get current time | |
uses: josStorer/[email protected] | |
id: current_time | |
with: | |
format: YYYYMMDDHHmmss | |
- name: ccache windows | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.ccache-setup.outputs.ccache_dir }} | |
key: tket-dynamic-visual-studio-windows-2022-${{ steps.current_time.outputs.formattedTime }} | |
restore-keys: | | |
tket-dynamic-visual-studio-windows-2022 | |
- name: get ccache path | |
id: ccache-path | |
shell: bash | |
run: | | |
ccache --shimgen-noop > ccache-info.txt || true | |
a=$(cat ccache-info.txt | grep executable) | |
# strip off the initial " path to executable: " | |
b=${a:22} | |
echo "ccache_path=${b}" >> $GITHUB_OUTPUT | |
- name: Build tket | |
if: needs.check_changes.outputs.tket_changed == 'true' | |
run: | | |
$env:TKET_VSGEN_CCACHE_EXE = '${{ steps.ccache-path.outputs.ccache_path }}' | |
conan build tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True | |
conan export-pkg tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf "" | |
- name: Install tket | |
if: needs.check_changes.outputs.tket_changed != 'true' | |
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: check that version is consistent | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }} | |
- name: Install pytket requirements | |
run: | | |
conan create recipes/pybind11 | |
conan create recipes/pybind11_json/all --version 0.2.14 | |
- name: Set up Python 3.10 | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Set up Python 3.11 | |
if: github.event_name == 'push' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Set up Python 3.12 | |
if: github.event_name == 'schedule' | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Build pytket | |
shell: bash | |
run: | | |
cd pytket | |
if python --version | grep -q '3.13' ; then | |
pip install -e . -v | |
else | |
pip install -e .[ZX] -v | |
fi | |
- name: Run doctests | |
run: | | |
cd pytket | |
pip install pytest | |
pytest --doctest-modules pytket | |
- name: Test pytket | |
run: | | |
cd pytket/tests | |
pip install -r requirements.txt | |
pytest --ignore=simulator/ | |
- name: Upload package | |
if: github.event_name == 'push' && needs.check_changes.outputs.tket_changed == 'true' | |
run: | | |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }} | |
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs | |
- name: ccache stats | |
run: | | |
ccache -s #show stats | |
ccache -z #show stats | |
publish_pytket_coverage: | |
name: Publish pytket coverage | |
needs: build_test_pytket_ubuntu | |
concurrency: gh_pages | |
if: github.event_name == 'push' | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
- name: Download artefact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pytket_test_coverage | |
path: htmlcov/ | |
- name: Configure git | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "«$GITHUB_WORKFLOW» github action" | |
- name: Remove old report | |
run: git rm -r docs/pytket/test-coverage | |
- name: Add report to repository | |
run: | | |
mv htmlcov docs/pytket/test-coverage | |
git add -f docs/pytket/test-coverage | |
git commit --allow-empty -m "Add generated pytket coverage report." | |
- name: Publish report | |
run: git push origin gh-pages:gh-pages | |
check_pytket_coverage: | |
name: Check pytket line and branch coverage | |
needs: build_test_pytket_ubuntu | |
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download artefact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pytket_test_coverage | |
path: pytket-test-coverage/ | |
- name: Compare with latest report from main | |
run: | | |
wget https://cqcl.github.io/tket/pytket/test-coverage/cov.xml -O oldcov.xml | |
./.github/workflows/compare-pytket-coverage oldcov.xml pytket-test-coverage/cov.xml | |
check_all_build_and_test_jobs_successful: | |
name: All build and test jobs successful (or skipped) | |
needs: | |
- check_changes | |
- check_docs_tket | |
- check_format_tket | |
- build_test_tket | |
- build_test_tket_windows | |
- publish_pytket_coverage | |
- build_test_pytket_macos | |
- build_test_pytket_ubuntu | |
- build_test_pytket_windows | |
- publish_pytket_coverage | |
- check_pytket_coverage | |
if: always() | |
runs-on: ubuntu-24.04 | |
steps: | |
- shell: python | |
name: Check job results | |
run: | | |
results = [ | |
"${{ needs.check_changes.result }}", | |
"${{ needs.check_docs_tket.result }}", | |
"${{ needs.check_format_tket.result }}", | |
"${{ needs.build_test_tket.result }}", | |
"${{ needs.build_test_tket_windows.result }}", | |
"${{ needs.publish_pytket_coverage.result }}", | |
"${{ needs.build_test_pytket_macos.result }}", | |
"${{ needs.build_test_pytket_ubuntu.result }}", | |
"${{ needs.build_test_pytket_windows.result }}" | |
"${{ needs.publish_pytket_coverage.result }}", | |
"${{ needs.check_pytket_coverage.result }}", | |
] | |
if "failure" in results or "cancelled" in results: | |
raise Exception |