Skip to content

Continuous Integration #18536

Continuous Integration

Continuous Integration #18536

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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.11'
architecture: 'x64'
- 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 auto
lint:
if: github.repository_owner == 'quantumlib'
name: Lint check
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
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
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 auto --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']
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 libffi7
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/dev.env.txt
- name: Run Quil dependencies
run: docker compose -f cirq-rigetti/docker-compose.test.yaml up -d
- name: Pytest check
run: check/pytest -n auto --durations=20 --ignore=cirq-core/cirq/contrib --rigetti-integration
- name: Stop Quil dependencies
run: docker compose -f cirq-rigetti/docker-compose.test.yaml down
# TODO(#6706) remove after we start using NumPy 2.0 in regular pytest
pytest-numpy-2:
if: github.repository_owner == 'quantumlib'
name: Pytest Ubuntu with NumPy-2
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 libffi7
- name: Install requirements
run: |
pip install wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/dev-np2.env.txt
- name: Pytest check
run: check/pytest -n auto --durations=20 --ignore=cirq-rigetti
pip-compile:
if: github.repository_owner == 'quantumlib'
name: Check consistency of requirements
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.11'
architecture: 'x64'
- name: Install requirements
run: pip install pip-tools
- name: Test dependencies with pip-compile
run: |
pip-compile --resolver=backtracking dev_tools/requirements/deps/cirq-all.txt -o-
build_protos:
if: github.repository_owner == 'quantumlib'
name: Build protos
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.11'
architecture: 'x64'
cache: 'pip'
cache-dependency-path: |
**/requirements.txt
dev_tools/requirements/**/*.txt
- name: Install system requirements
run: |
sudo apt-get update
sudo apt-get install libffi7
- name: Install requirements
run: |
pip install --upgrade setuptools wheel
pip install --upgrade --upgrade-strategy eager -r dev_tools/requirements/dev.env.txt
- name: Run Quil dependencies
run: docker compose -f cirq-rigetti/docker-compose.test.yaml up -d
- name: Coverage check
run: check/pytest-and-incremental-coverage -n auto --rigetti-integration
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- name: Stop Quil dependencies
run: docker compose -f cirq-rigetti/docker-compose.test.yaml down
windows:
if: github.repository_owner == 'quantumlib'
name: Pytest Windows
strategy:
matrix:
python-version: ['3.11', '3.12']
runs-on: windows-2019
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 auto --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']
runs-on: macos-13
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 auto --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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 auto -m slow dev_tools/notebooks/isolated_notebook_test.py -k ${{matrix.partition}}
- name: Persist the outputs
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
if: failure()
with:
name: notebook-outputs
path: out
notebooks-branch:
if: github.repository_owner == 'quantumlib'
name: Notebook Tests against PR
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Python environment
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
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 auto -m slow dev_tools/notebooks/notebook_test.py
- name: Persist the outputs
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
if: failure()
with:
name: notebook-outputs
path: out
ts-build:
if: github.repository_owner == 'quantumlib'
name: Bundle file consistency
runs-on: ubuntu-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Node environment
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20.17.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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Node environment
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20.17.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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Node environment
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20.17.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-22.04
steps:
- name: Check out source repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Set up Node environment
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20.17.0'
- name: Install node dependencies
run: check/npm ci
- name: Run coverage test
run: check/ts-coverage