CI modernization #1
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| branches: [ main, ci-testing ] | |
| pull_request: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| name: Code Formatting Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| cache: 'pip' | |
| - name: Install yapf | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install yapf==0.32.0 | |
| pip install toml | |
| - name: Check format with YAPF | |
| run: | | |
| yapf --style=google -d -r . | |
| test: | |
| name: Test Python ${{ matrix.python-version }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e . pytest pytest-cov pytest-xdist | |
| - name: Run tests | |
| run: | | |
| pytest -rA -n auto --cov=pysa --cov-report=xml --cov-report=term tests/ | |
| - name: Upload coverage to artifact | |
| if: matrix.python-version == '3.11' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-report | |
| path: coverage.xml | |
| retention-days: 7 | |
| coverage: | |
| name: Upload Coverage | |
| needs: test | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' || github.ref == 'refs/heads/main' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download coverage report | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: coverage-report | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| file: ./coverage.xml | |
| flags: unittests | |
| name: codecov-umbrella | |
| fail_ci_if_error: false | |
| continue-on-error: true | |
| examples: | |
| name: Examples Python ${{ matrix.python-version }} | |
| runs-on: ubuntu-latest | |
| needs: test | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.9", "3.11"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e . termplotlib | |
| - name: Run examples | |
| run: | | |
| python examples/example_ising.py | |
| python examples/example_qubo.py | |
| python examples/example_ais.py | |
| tutorials: | |
| name: Tutorials Python ${{ matrix.python-version }} | |
| runs-on: ubuntu-latest | |
| needs: test | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.9", "3.11"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e . papermill matplotlib plotly jupyter hyperopt torch torchvision | |
| - name: Run tutorials | |
| run: | | |
| cd tutorials/ | |
| papermill example_ising.ipynb output_example_ising.ipynb || true | |
| papermill hpo_demo.ipynb output_hpo_demo.ipynb || true | |
| papermill ising_tutorial.ipynb output_ising_tutorial.ipynb || true | |
| papermill RBM_tutorial.ipynb output_RBM_tutorial.ipynb || true | |
| - name: Upload tutorial outputs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: tutorial-outputs-py${{ matrix.python-version }} | |
| path: tutorials/output_*.ipynb | |
| retention-days: 7 | |
| continue-on-error: true | |
| all-checks-passed: | |
| name: All Checks Passed | |
| needs: [lint, test, examples, tutorials] | |
| runs-on: ubuntu-latest | |
| if: always() | |
| steps: | |
| - name: Check if all jobs passed | |
| run: | | |
| if [[ "${{ needs.lint.result }}" != "success" ]] || \ | |
| [[ "${{ needs.test.result }}" != "success" ]] || \ | |
| [[ "${{ needs.examples.result }}" != "success" ]] || \ | |
| [[ "${{ needs.tutorials.result }}" != "success" ]]; then | |
| echo "One or more jobs failed" | |
| exit 1 | |
| fi | |
| echo "All checks passed successfully!" |