Skip to content

(fix): new keep alive workflow #235

(fix): new keep alive workflow

(fix): new keep alive workflow #235

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"