status.yml 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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.GITHUB_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 + ((.steps[]
  46. | select(.name == env.TARGET_STEP)
  47. | "#step:\(.number):0") // "")'
  48. )
  49. )"
  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.GITHUB_TOKEN}}" \
  59. -X POST \
  60. "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/statuses/`
  61. `${{github.event.workflow_run.head_sha}}" \
  62. -d "$(jq -nc '{
  63. state: env.STATE,
  64. context: env.CONTEXT,
  65. description: env.DESCRIPTION,
  66. target_url: env.TARGET_URL}')"
  67. #if jq -er '.target_url' $s
  68. #then
  69. # export TARGET_URL="$(jq -er '.target_url' $s)"
  70. #elif jq -er '.target_job' $s
  71. #then
  72. #
  73. #fi
  74. done
  75. # - id: status
  76. # run: |
  77. # echo "::set-output name=description::$(cat statuses/x86_64.txt | tr '\n' ' ')"
  78. # - uses: octokit/request-action@v2.x
  79. # with:
  80. # route: POST /repos/{repo}/status/{sha}
  81. # repo: ${{github.repository}}
  82. # sha: ${{github.event.status.sha}}
  83. # context: ${{github.event.status.context}}
  84. # state: ${{github.event.status.state}}
  85. # description: ${{steps.status.outputs.description}}
  86. # target_url: ${{github.event.status.target_url}}
  87. #