Skip to content

Continuous Integration #585

Continuous Integration

Continuous Integration #585

Workflow file for this run

name: Continuous Integration
on:
schedule:
# Checks out main by default.
- cron: '0 0 * * *'
pull_request:
branches:
- main
merge_group:
types:
- checks_requested
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
# Declare default permissions as read only.
permissions: read-all
jobs:
quick_test:
if: github.repository_owner == 'quantumlib'
name: Misc check
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Misc
run: check/misc
packaging_test:
if: github.repository_owner == 'quantumlib'
name: Packaging test
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install dependencies
run: pip install -r dev_tools/requirements/deps/packaging.txt
- name: Run packaging test
run: ./dev_tools/packaging/packaging_test.sh
format:
if: github.repository_owner == 'quantumlib'
name: Format check
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install dependencies
run: pip install -r dev_tools/requirements/deps/format.txt
- name: Format
run: check/format-incremental
mypy:
if: github.repository_owner == 'quantumlib'
name: Type check
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install mypy
run: pip install -r dev_tools/requirements/mypy.env.txt
- name: Type check
run: check/mypy
changed_files:
if: github.repository_owner == 'quantumlib'
name: Changed files test
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install system packages
run: |
sudo apt-get update
sudo apt-get install latexmk texlive-latex-base texlive-latex-extra
- name: Install changed files test dependencies
run: dev_tools/conf/pip-install-minimal-for-pytest-changed-files.sh
- name: Changed files test
run: check/pytest-changed-files -n logical
lint:
if: github.repository_owner == 'quantumlib'
name: Lint check
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install lint tools
run: pip install -r dev_tools/requirements/lint.env.txt
- name: Display versions
run: |
ruff --version
check/pylint --version
- name: Lint with ruff
run: FORCE_COLOR=1 ruff check
- name: Lint with pylint
run: check/pylint -v
doc_test:
if: github.repository_owner == 'quantumlib'
name: Doc test
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install -r dev_tools/requirements/dev.env.txt
- name: Doc check
run: check/doctest -q
nbformat:
if: github.repository_owner == 'quantumlib'
name: Notebook formatting
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install -r dev_tools/requirements/deps/tensorflow-docs.txt
- name: Doc check
run: check/nbformat
shellcheck:
if: github.repository_owner == 'quantumlib'
name: Shell check
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Run shellcheck
run: check/shellcheck
isolated-modules:
if: github.repository_owner == 'quantumlib'
name: Isolated pytest Ubuntu
runs-on: ubuntu-22.04-x64-8-core
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install dependencies
run: pip install -r dev_tools/requirements/isolated-base.env.txt
- name: Test each module in isolation
run: pytest -n logical --enable-slow-tests dev_tools/packaging/isolated_packages_test.py
pytest:
if: github.repository_owner == 'quantumlib'
name: Pytest Ubuntu
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
runs-on: ubuntu-22.04-x64-8-core
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
cache: 'pip'
cache-dependency-path: |
**/requirements.txt
dev_tools/requirements/**/*.txt
- name: Install system packages
run: |
sudo apt-get update
sudo apt-get install latexmk texlive-latex-base texlive-latex-extra
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/dev.env.txt
- name: Pytest check
run: check/pytest -n logical --durations=20 --junit-xml=pytest-ubuntu-report.xml
- name: Persist the test report
if: github.event_name == 'merge_group' && matrix.python-version == '3.11'
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: pytest-ubuntu-report
path: pytest-ubuntu-report.xml
pip-compile:
if: github.repository_owner == 'quantumlib'
name: Check consistency of requirements
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install uv
- name: Test dependencies with uv pip compile
run: |
uv pip compile dev_tools/requirements/deps/cirq-all.txt
build_protos:
if: github.repository_owner == 'quantumlib'
name: Build protos
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: |
pip install -r dev_tools/requirements/deps/protos.txt
- name: Build protos
run: check/protos-up-to-date
coverage:
if: github.repository_owner == 'quantumlib'
name: Coverage check
runs-on: ubuntu-22.04-x64-8-core
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
cache: 'pip'
cache-dependency-path: |
**/requirements.txt
dev_tools/requirements/**/*.txt
- name: Install system packages
run: |
sudo apt-get update
sudo apt-get install latexmk texlive-latex-base texlive-latex-extra
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/dev.env.txt
- name: Coverage check
run: check/pytest-and-incremental-coverage -n logical
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
windows:
if: github.repository_owner == 'quantumlib'
name: Pytest Windows
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
runs-on: windows-2022-x64-8-core
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
cache: 'pip'
cache-dependency-path: |
**/requirements.txt
dev_tools/requirements/**/*.txt
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/no-contrib.env.txt
- name: Pytest Windows
run: |
source dev_tools/pypath
check/pytest -n logical --durations=20 --ignore=cirq-core/cirq/contrib
shell: bash
macos:
if: github.repository_owner == 'quantumlib'
name: Pytest MacOS
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
# macos-15-large is Intel; macos-15-xlarge is ARM and the one we want.
runs-on: macos-15-xlarge
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
cache: 'pip'
cache-dependency-path: |
**/requirements.txt
dev_tools/requirements/**/*.txt
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/no-contrib.env.txt
- name: Pytest check
run: check/pytest -n logical --durations=20 --ignore=cirq-core/cirq/contrib
notebooks-stable:
if: github.repository_owner == 'quantumlib'
name: Changed Notebooks Isolated Test against Cirq stable
env:
NOTEBOOK_PARTITIONS: 4
strategy:
matrix:
# partitions should be named partition-0 to partition-(NOTEBOOK_PARTITIONS-1)
partition: [partition-0, partition-1, partition-2, partition-3]
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install -r dev_tools/requirements/isolated-base.env.txt
- name: Notebook tests
run: check/pytest -n logical -m slow dev_tools/notebooks/isolated_notebook_test.py -k ${{matrix.partition}}
- name: Persist the outputs
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: failure()
with:
name: notebook-outputs-${{ matrix.partition }}
path: out
notebooks-branch:
if: github.repository_owner == 'quantumlib'
name: Notebook Tests against PR
runs-on: ubuntu-22.04-x64-8-core
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Python environment
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install -r dev_tools/requirements/notebooks.env.txt
- name: Notebook tests
run: check/pytest -n logical -m slow dev_tools/notebooks/notebook_test.py
- name: Persist the outputs
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: failure()
with:
name: notebook-outputs
path: out
ts-build:
if: github.repository_owner == 'quantumlib'
name: Bundle file consistency
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Node environment
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22.16.0'
- name: Install node dependencies
run: check/npm ci
- name: Check build matches the current
run: check/ts-build-current
ts-lint:
if: github.repository_owner == 'quantumlib'
name: Typescript lint check
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Node environment
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22.16.0'
- name: Install node dependencies
run: check/npm ci
- name: Lint Typescript files
run: check/ts-lint
ts-test:
if: github.repository_owner == 'quantumlib'
name: Typescript tests
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Node environment
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22.16.0'
- name: Install node dependencies
run: check/npm ci
- name: Run unit tests
run: check/ts-test
- name: Run end-to-end tests
run: check/ts-test-e2e
ts-coverage:
if: github.repository_owner == 'quantumlib'
name: Typescript tests coverage
runs-on: ubuntu-slim
steps:
- name: Check out source repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Set up Node environment
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22.16.0'
- name: Install node dependencies
run: check/npm ci
- name: Run coverage test
run: check/ts-coverage