status.yml 2.1 KB

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