diff --git a/.github/workflows/switch-artifact-comment.yml b/.github/workflows/switch-artifact-comment.yml new file mode 100644 index 00000000..388eb8b5 --- /dev/null +++ b/.github/workflows/switch-artifact-comment.yml @@ -0,0 +1,61 @@ +name: Switch artifact comment + +on: + workflow_run: + workflows: [ci] + types: [completed] + +permissions: + contents: read + issues: write + pull-requests: write + +jobs: + comment: + if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - id: artifact + env: + GH_TOKEN: ${{ github.token }} + RUN_ID: ${{ github.event.workflow_run.id }} + HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }} + HEAD_REPOSITORY: ${{ github.event.workflow_run.head_repository.full_name }} + run: | + artifact_id="$(gh api "repos/$GITHUB_REPOSITORY/actions/runs/$RUN_ID/artifacts" --jq '.artifacts[] | select(.name == "gen1recomp-switch-nro") | .id')" + [ -n "$artifact_id" ] || exit 0 + head_owner="${HEAD_REPOSITORY%%/*}" + pr_number="$(gh api "repos/$GITHUB_REPOSITORY/pulls?state=open&head=$head_owner:$HEAD_BRANCH" --jq '.[0].number // empty')" + [ -n "$pr_number" ] || exit 0 + echo "artifact_url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$RUN_ID/artifacts/$artifact_id" >> "$GITHUB_OUTPUT" + echo "pr_number=$pr_number" >> "$GITHUB_OUTPUT" + - name: Delete existing comment + if: steps.artifact.outputs.pr_number != '' + uses: izhangzhihao/delete-comment@master + with: + github_token: ${{ github.token }} + delete_user_name: github-actions[bot] + issue_number: ${{ steps.artifact.outputs.pr_number }} + - name: Get build info + id: build-info + env: + HEAD_SHA: ${{ github.event.workflow_run.head_sha }} + run: | + commit_hash="$(printf '%s' "$HEAD_SHA" | cut -c1-7)" + build_time="$(date "+%Y-%m-%d %H:%M:%S")" + echo "hash=$commit_hash" >> "$GITHUB_OUTPUT" + echo "time=$build_time" >> "$GITHUB_OUTPUT" + - name: comment Switch artifact + if: steps.artifact.outputs.pr_number != '' + uses: thollander/actions-comment-pull-request@v3 + with: + message: | + [gen1recomp-switch.nro](${{ steps.artifact.outputs.artifact_url }}) + + **Commit**: [#${{ steps.build-info.outputs.hash }}](https://github.com/${{ github.event.workflow_run.head_repository.full_name }}/commit/${{ github.event.workflow_run.head_sha }}) + **Build Time**: `${{ steps.build-info.outputs.time }}` + + This comment was automatically generated. [View workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}) + pr-number: ${{ steps.artifact.outputs.pr_number }} + comment-tag: switch-build-result + github-token: ${{ github.token }} diff --git a/tests/switch_ci_workflows_test.lua b/tests/switch_ci_workflows_test.lua index 0de74a5b..2fa2a42a 100644 --- a/tests/switch_ci_workflows_test.lua +++ b/tests/switch_ci_workflows_test.lua @@ -28,6 +28,7 @@ local SWITCH_PATH_REGEX = local ci = read(".github/workflows/ci.yml") local release = read(".github/workflows/release.yml") +local comment_wf = read(".github/workflows/switch-artifact-comment.yml") -- --- SWCI-01: path detector --- mustContain(ci, "switch-changes:", "ci.yml") @@ -84,6 +85,19 @@ do "switch-build requires changed=true AND canonical repository") end +-- --- SWCI-06 / SWCI-07: PR artifact comment workflow --- +mustContain(comment_wf, "workflows: [ci]", "switch-artifact-comment") +mustContain(comment_wf, "gen1recomp-switch-nro", "switch-artifact-comment") +mustContain(comment_wf, "comment-tag: switch-build-result", "switch-artifact-comment") +mustContain(comment_wf, "pull_request", "switch-artifact-comment") +mustContain(comment_wf, "conclusion == 'success'", "switch-artifact-comment") +mustContain(comment_wf, 'exit 0', "switch-artifact-comment no-op") +mustContain(comment_wf, "**Commit**:", "switch-artifact-comment") +mustContain(comment_wf, "**Build Time**:", "switch-artifact-comment") +mustContain(comment_wf, "View workflow run", "switch-artifact-comment") +mustContain(comment_wf, "izhangzhihao/delete-comment@master", "switch-artifact-comment") +mustContain(comment_wf, "thollander/actions-comment-pull-request@v3", "switch-artifact-comment") + -- --- SWCI-08: release Switch hard-fail (no continue-on-error on build/stage) --- do local start = release:find("- name: Build Switch", 1, true)