Skip to content

Commit 4738e30

Browse files
authored
feat: reopen issue after a week + autoclose (#33)
* feat: reopen issue after a week * feat: close resolved failure issues * fix: gpu * fix: always generate token so I can see if this works * splti check from closure
1 parent a3388fd commit 4738e30

1 file changed

Lines changed: 47 additions & 9 deletions

File tree

.github/workflows/integration-test.yml

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ jobs:
130130
131131
- name: Generate tokens
132132
id: app-token
133-
if: failure()
133+
if: always()
134134
uses: actions/create-github-app-token@v2
135135
with:
136136
app-id: ${{ vars.ISSUE_CREATOR_APP_ID }}
137137
private-key: ${{ secrets.ISSUE_CREATOR_PRIVATE_KEY }}
138-
138+
139139
# https://github.com/scverse/gpu-ci-config/issues/4
140140
- name: Install GitHub CLI
141141
if: failure() && matrix.package.gpu
@@ -150,25 +150,63 @@ jobs:
150150
GH_TOKEN: ${{ steps.app-token.outputs.token }}
151151
run: |
152152
ISSUE_TITLE="Integration Testing CI ${failure_type^} Failure on python ${{ matrix.python }}${{matrix.is_pre && ' with prerelease dependencies' || ''}}"
153+
echo "issue_title=$ISSUE_TITLE" >> $GITHUB_ENV
153154
echo "Checking for existing issue: $ISSUE_TITLE"
154-
ISSUE_COUNT=$(gh issue list --repo scverse/${{ matrix.package.name }} --state open --search "${ISSUE_TITLE}" --json number --jq 'length')
155-
if [[ "$ISSUE_COUNT" -gt 0 ]]; then
156-
echo "${failure_type^} failure issue already exists for today."
157-
echo "issue_exists=true" >> $GITHUB_ENV
155+
ISSUE=$(gh issue list --repo scverse/${{ matrix.package.name }} --state open --search "${ISSUE_TITLE}" --json number,createdAt --jq '.[0] // empty')
156+
if [[ -n "$ISSUE" ]]; then
157+
ISSUE_NUMBER=$(echo "$ISSUE" | jq -r '.number')
158+
CREATED_AT=$(echo "$ISSUE" | jq -r '.createdAt')
159+
CREATED_EPOCH=$(date -d "$CREATED_AT" +%s)
160+
NOW_EPOCH=$(date +%s)
161+
AGE_DAYS=$(( (NOW_EPOCH - CREATED_EPOCH) / 86400 ))
162+
echo "Found issue #$ISSUE_NUMBER, age: $AGE_DAYS days."
163+
echo "issue_exists=true" >> $GITHUB_OUTPUT
164+
echo "issue_number=$ISSUE_NUMBER" >> $GITHUB_OUTPUT
165+
echo "issue_age_days=$AGE_DAYS" >> $GITHUB_OUTPUT
158166
else
159-
echo "issue_exists=false" >> $GITHUB_ENV
160-
echo "issue_title=$ISSUE_TITLE" >> $GITHUB_ENV
167+
echo "No open failure issue found."
168+
echo "issue_exists=false" >> $GITHUB_OUTPUT
169+
fi
170+
171+
- name: Close stale failure issue
172+
if: failure() && steps.find_issue.outputs.issue_exists == 'true' && !matrix.is_pre && github.event_name == 'schedule'
173+
id: close_stale
174+
env:
175+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
176+
run: |
177+
if [[ "${{ steps.find_issue.outputs.issue_age_days }}" -gt 7 ]]; then
178+
echo "Issue #${{ steps.find_issue.outputs.issue_number }} is ${{ steps.find_issue.outputs.issue_age_days }} days old, closing it to open a fresh one."
179+
gh issue close "${{ steps.find_issue.outputs.issue_number }}" --repo scverse/${{ matrix.package.name }} --comment "Closing stale issue after ${{ steps.find_issue.outputs.issue_age_days }} days. A fresh issue will be opened."
180+
echo "issue_closed=true" >> $GITHUB_OUTPUT
181+
else
182+
echo "Issue #${{ steps.find_issue.outputs.issue_number }} is less than a week old, leaving it open."
183+
echo "issue_closed=false" >> $GITHUB_OUTPUT
161184
fi
162185
163186
- name: Report failure issue
164-
if: failure() && env.issue_exists == 'false' && github.event_name == 'schedule'
187+
if: failure() && (steps.find_issue.outputs.issue_exists == 'false' || steps.close_stale.outputs.issue_closed == 'true') && github.event_name == 'schedule'
165188
env:
166189
GH_TOKEN: ${{ steps.app-token.outputs.token }}
167190
run: |
168191
RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
169192
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"
170193
gh issue create --repo scverse/${{ matrix.package.name }} --title "${{ env.issue_title }}" --body "${ISSUE_BODY}"
171194
195+
- name: Close resolved failure issue
196+
if: success() && github.event_name == 'schedule'
197+
env:
198+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
199+
run: |
200+
for FAILURE_TYPE in install test; do
201+
ISSUE_TITLE="Integration Testing CI ${FAILURE_TYPE^} Failure on python ${{ matrix.python }}${{matrix.is_pre && ' with prerelease dependencies' || ''}}"
202+
ISSUE=$(gh issue list --repo scverse/${{ matrix.package.name }} --state open --search "${ISSUE_TITLE}" --json number --jq '.[0] // empty')
203+
if [[ -n "$ISSUE" ]]; then
204+
ISSUE_NUMBER=$(echo "$ISSUE" | jq -r '.number')
205+
echo "Tests passing — closing issue #$ISSUE_NUMBER: $ISSUE_TITLE"
206+
gh issue close "$ISSUE_NUMBER" --repo scverse/${{ matrix.package.name }} --comment "Closing issue as tests are now passing."
207+
fi
208+
done
209+
172210
keepalive-job:
173211
name: Keepalive Workflow
174212
runs-on: ubuntu-latest

0 commit comments

Comments
 (0)