• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1name: status
2on:
3  workflow_run:
4    workflows: [test]
5    types: [completed]
6
7jobs:
8  status:
9    runs-on: ubuntu-18.04
10    steps:
11      # custom statuses?
12      - uses: dawidd6/action-download-artifact@v2
13        continue-on-error: true
14        with:
15          workflow: ${{github.event.workflow_run.name}}
16          run_id: ${{github.event.workflow_run.id}}
17          name: status
18          path: status
19      - name: update-status
20        continue-on-error: true
21        run: |
22          ls status
23          for s in $(shopt -s nullglob ; echo status/*.json)
24          do
25            # parse requested status
26            export STATE="$(jq -er '.state' $s)"
27            export CONTEXT="$(jq -er '.context' $s)"
28            export DESCRIPTION="$(jq -er '.description' $s)"
29            # help lookup URL for job/steps because GitHub makes
30            # it VERY HARD to link to specific jobs
31            export TARGET_URL="$(
32              jq -er '.target_url // empty' $s || (
33                export TARGET_JOB="$(jq -er '.target_job' $s)"
34                export TARGET_STEP="$(jq -er '.target_step // ""' $s)"
35                curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \
36                  "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/runs/`
37                    `${{github.event.workflow_run.id}}/jobs" \
38                  | jq -er '.jobs[]
39                    | select(.name == env.TARGET_JOB)
40                    | .html_url
41                      + "?check_suite_focus=true"
42                      + ((.steps[]
43                        | select(.name == env.TARGET_STEP)
44                        | "#step:\(.number):0") // "")'))"
45            # update status
46            curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \
47              "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/statuses/`
48                `${{github.event.workflow_run.head_sha}}" \
49              -d "$(jq -n '{
50                state: env.STATE,
51                context: env.CONTEXT,
52                description: env.DESCRIPTION,
53                target_url: env.TARGET_URL}' \
54                | tee /dev/stderr)"
55          done
56