status.yml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. name: status
  2. on:
  3. workflow_run:
  4. workflows: [test]
  5. types: [completed]
  6. jobs:
  7. status:
  8. runs-on: ubuntu-latest
  9. continue-on-error: true
  10. steps:
  11. - run: echo "${{toJSON(github.event.workflow_run)}}"
  12. # custom statuses?
  13. - uses: dawidd6/action-download-artifact@v2
  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. run: |
  21. # TODO remove this
  22. ls status
  23. for f in status/*.json
  24. do
  25. cat $f
  26. done
  27. shopt -s nullglob
  28. for s in status/*.json
  29. do
  30. # parse requested status
  31. export STATE="$(jq -er '.state' $s)"
  32. export CONTEXT="$(jq -er '.context' $s)"
  33. export DESCRIPTION="$(jq -er '.description' $s)"
  34. # help lookup URL for job/steps because GitHub makes
  35. # it VERY HARD to link to specific jobs
  36. export TARGET_URL="$(
  37. jq -er '.target_url // empty' $s || (
  38. export TARGET_JOB="$(jq -er '.target_job' $s)"
  39. export TARGET_STEP="$(jq -er '.target_step // ""' $s)"
  40. curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \
  41. "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/runs/`
  42. `${{github.event.workflow_run.id}}/jobs" \
  43. | jq -er '.jobs[]
  44. | select(.name == env.TARGET_JOB)
  45. | .html_url
  46. + "?check_suite_focus=true"
  47. + ((.steps[]
  48. | select(.name == env.TARGET_STEP)
  49. | "#step:\(.number):0") // "")'))"
  50. # TODO remove this
  51. # print for debugging
  52. echo "$(jq -nc '{
  53. state: env.STATE,
  54. context: env.CONTEXT,
  55. description: env.DESCRIPTION,
  56. target_url: env.TARGET_URL}')"
  57. # update status
  58. curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \
  59. -X POST "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/statuses/`
  60. `${{github.event.workflow_run.head_sha}}" \
  61. -d "$(jq -nc '{
  62. state: env.STATE,
  63. context: env.CONTEXT,
  64. description: env.DESCRIPTION,
  65. target_url: env.TARGET_URL}')"
  66. #if jq -er '.target_url' $s
  67. #then
  68. # export TARGET_URL="$(jq -er '.target_url' $s)"
  69. #elif jq -er '.target_job' $s
  70. #then
  71. #
  72. #fi
  73. done
  74. # - id: status
  75. # run: |
  76. # echo "::set-output name=description::$(cat statuses/x86_64.txt | tr '\n' ' ')"
  77. # - uses: octokit/request-action@v2.x
  78. # with:
  79. # route: POST /repos/{repo}/status/{sha}
  80. # repo: ${{github.repository}}
  81. # sha: ${{github.event.status.sha}}
  82. # context: ${{github.event.status.context}}
  83. # state: ${{github.event.status.state}}
  84. # description: ${{steps.status.outputs.description}}
  85. # target_url: ${{github.event.status.target_url}}
  86. #