Integration test #327
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: Integration test | |
| on: | |
| schedule: | |
| - cron: "0 0 * * *" # Run daily at midnight UTC | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: ["3.11", "3.12"] | |
| package: | |
| # extras should be a comma seperated list of strings, like `extras: "lazy,accelerated"` | |
| # The 'test' extra is always installed | |
| - {name: "mudata", extras: ""} | |
| - {name: "spatialdata", extras: ""} | |
| - {name: "scirpy", extras: ""} | |
| - {name: "muon", extras: ""} | |
| - {name: "scanpy", extras: ""} | |
| - {name: "squidpy", extras: ""} | |
| - {name: "scvi-tools", extras: ""} | |
| - {name: "pertpy", extras: "de"} | |
| - {name: "decoupler", extras: ""} | |
| defaults: | |
| run: | |
| shell: bash -el {0} | |
| runs-on: ubuntu-latest | |
| env: | |
| # This env variable is used by the `gh` CLI | |
| GH_TOKEN: ${{ secrets.TOKEN_FOR_ISSUE_WRITE }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| filter: blob:none | |
| path: integration-testing | |
| - uses: actions/checkout@v4 | |
| with: | |
| repository: scverse/${{ matrix.package.name }} | |
| fetch-depth: 0 | |
| filter: blob:none | |
| path: ${{ matrix.package.name }} | |
| - name: Install Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Install UV | |
| uses: hynek/setup-cached-uv@v2 | |
| - name: Install AnnData and scverse package | |
| run: | | |
| EXTRAS="test" | |
| if [ -n "${{ matrix.package.extras }}" ]; then | |
| EXTRAS="$EXTRAS,${{ matrix.package.extras }}" | |
| fi | |
| uv pip install --compile --system ".[$EXTRAS]" git+https://github.com/scverse/anndata -c ../integration-testing/constraints.txt -v | |
| working-directory: ${{ matrix.package.name }} | |
| - name: Set failure type for install | |
| if: failure() | |
| run: | | |
| echo "Installation failed for ${{ matrix.package.name }}" | |
| echo "failure_type=install" >> $GITHUB_ENV | |
| - name: Env list | |
| run: uv pip freeze | |
| - name: Run test | |
| run: | | |
| pytest | |
| working-directory: ${{ matrix.package.name }} | |
| - name: Set failure type for test | |
| if: failure() && env.failure_type != 'install' | |
| run: | | |
| echo "Test failed for ${{ matrix.package.name }}" | |
| echo "failure_type=test" >> $GITHUB_ENV | |
| - name: Check for open failure issue | |
| if: failure() && github.event_name == 'schedule' | |
| id: find_issue | |
| run: | | |
| ISSUE_TITLE="Integration Testing CI ${failure_type^} Failure on python ${{ matrix.python }}" | |
| echo "Checking for existing issue: $ISSUE_TITLE" | |
| ISSUE_COUNT=$(gh issue list --repo scverse/${{ matrix.package.name }} --state open --search "${ISSUE_TITLE}" --json number --jq 'length') | |
| if [[ "$ISSUE_COUNT" -gt 0 ]]; then | |
| echo "${failure_type^} failure issue already exists for today." | |
| echo "issue_exists=true" >> $GITHUB_ENV | |
| else | |
| echo "issue_exists=false" >> $GITHUB_ENV | |
| echo "issue_title=$ISSUE_TITLE" >> $GITHUB_ENV | |
| fi | |
| - name: Report failure issue | |
| if: failure() && env.issue_exists == 'false' && github.event_name == 'schedule' | |
| run: | | |
| RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
| ISSUE_BODY="The daily CI failed on ${failure_type} for ${{ matrix.package.name }} failed. Please go to [the logs of the integration testing repo](${RUN_URL}) to review. @scverse/anndata" | |
| gh issue create --repo scverse/${{ matrix.package.name }} --title "${{ env.issue_title }}" --body "${ISSUE_BODY}" | |
| keepalive-job: | |
| name: Keepalive Workflow | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| steps: | |
| - name: Re-enable workflow | |
| env: | |
| GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN || github.token }} | |
| shell: sh | |
| run: | | |
| gh api --verbose -X PUT "repos/${GITHUB_REPOSITORY}/actions/workflows/integration-test.yml/enable" |