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