Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move failure reporting to reusable workflow #103

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 9 additions & 59 deletions .github/workflows/installation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,64 +43,14 @@ jobs:
cli-version: ">=7.3.0.post1"
runtime: conda

# Surface failures via GitHub issues
failure-reporting:
report-failure:
if: ${{ always() && github.ref_name == github.event.repository.default_branch }}
runs-on: ubuntu-latest
needs: [test]
steps:
- uses: actions/checkout@v4

- name: Create or close issue
run: |
# Search for issues opened by this job.
matching_issues=$(gh issue list \
--state open \
--author '@me' \
--json 'number,title' \
--jq 'map(select(.title == "${{ env.title }}") | .number)')

# Handle the case of multiple matching issues, even though this
# shouldn't happen under normal circumstances.
if [[ $(jq length <<<"$matching_issues") -gt 1 ]]; then
echo "ERROR: Multiple matching issues found:" >&2
for issue in $(jq -r '.[]' <<<"$matching_issues"); do
echo "- https://github.com/${{ github.repository }}/issues/$issue" >&2
done
echo "This must be handled manually." >&2
exit 1
fi

existing_issue=$(jq -r '.[0] | values' <<<"$matching_issues")

if [[ "${{ needs.test.result }}" == "failure" ]]; then
if [[ -z "$existing_issue" ]]; then
echo "New failure detected. Creating issue..."
new_issue=$(gh issue create \
--title "$title" \
--body "$body")
echo "Created issue: $new_issue"
else
echo "Open issue already exists: https://github.com/${{ github.repository }}/issues/$existing_issue"
fi
fi

if [[ "${{ needs.test.result }}" == "success" ]]; then
if [[ -n "$existing_issue" ]]; then
echo "Closing issue https://github.com/${{ github.repository }}/issues/$existing_issue"
gh issue close "$existing_issue" \
--comment "Installation is successful as of https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
else
echo "No open issue to be closed."
fi
fi

env:
title: Installation failure
body: |
_Automatically created by [installation.yaml](https://github.com/${{ github.repository }}/blob/${{ github.sha }}/.github/workflows/installation.yaml)_

An installation check has failed: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}

This issue will be automatically closed upon the next successful run of the workflow.
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_NEXTSTRAIN_BOT_REPO }}
# FIXME: drop the branch tag after merging https://github.com/nextstrain/.github/pull/121
uses: nextstrain/.github/.github/workflows/report-failure.yaml@victorlin/report-failure
with:
failure: ${{ needs.test.result == 'failure' }}
success: ${{ needs.test.result == 'success' }}
title: Installation failure
secrets:
token: ${{ secrets.GH_TOKEN_NEXTSTRAIN_BOT_REPO }}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think alternatively this can be secrets.GITHUB_TOKEN with issues: write permission, which will appear managed by the github-actions app rather than @nextstrain-bot. We already do something similar for releases (e.g.).