(fix): new keep alive workflow #235
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: ["mudata", "spatialdata", "scirpy", "muon", "scanpy", "squidpy", "scvi-tools"] | |
| 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 }} | |
| fetch-depth: 0 | |
| filter: blob:none | |
| path: ${{ matrix.package }} | |
| - 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 + test dep | |
| run: | | |
| uv pip install --compile --system ".[test]" git+https://github.com/scverse/anndata -c ../integration-testing/constraints.txt -v | |
| working-directory: ${{ matrix.package }} | |
| - name: Set failure type for install | |
| if: failure() | |
| run: | | |
| echo "Installation failed for ${{ matrix.package }}" | |
| echo "failure_type=install" >> $GITHUB_ENV | |
| - name: Env list | |
| run: uv pip freeze | |
| - name: Run test | |
| run: | | |
| pytest | |
| working-directory: ${{ matrix.package }} | |
| - name: Set failure type for test | |
| if: failure() && env.failure_type != 'install' | |
| run: | | |
| echo "Test failed for ${{ matrix.package }}" | |
| 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 }} --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 }} failed. Please go to [the logs of the integration testing repo](${RUN_URL}) to review. @scverse/anndata" | |
| gh issue create --repo scverse/${{ matrix.package }} --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" |