a659c02bbd
The littlefs CI is actually in a nice state that generates a lot of information about PRs (code/stack/struct changes, line/branch coverage changes, benchmark changes), but GitHub's UI has changed overtime to make CI statuses harder to find for some reason. This bot comment should hopefully make this information easy to find without creating too much noise in the discussion. If not, this can always be changed later.
101 lines
3.5 KiB
YAML
101 lines
3.5 KiB
YAML
name: status
|
|
on:
|
|
workflow_run:
|
|
workflows: [test]
|
|
types: [completed]
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash -euv -o pipefail {0}
|
|
|
|
jobs:
|
|
# forward custom statuses
|
|
status:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: dawidd6/action-download-artifact@v2
|
|
continue-on-error: true
|
|
with:
|
|
workflow: ${{github.event.workflow_run.name}}
|
|
run_id: ${{github.event.workflow_run.id}}
|
|
name: status
|
|
path: status
|
|
- name: update-status
|
|
continue-on-error: true
|
|
run: |
|
|
ls status
|
|
for s in $(shopt -s nullglob ; echo status/*.json)
|
|
do
|
|
# parse requested status
|
|
export STATE="$(jq -er '.state' $s)"
|
|
export CONTEXT="$(jq -er '.context' $s)"
|
|
export DESCRIPTION="$(jq -er '.description' $s)"
|
|
# help lookup URL for job/steps because GitHub makes
|
|
# it VERY HARD to link to specific jobs
|
|
export TARGET_URL="$(
|
|
jq -er '.target_url // empty' $s || (
|
|
export TARGET_JOB="$(jq -er '.target_job' $s)"
|
|
export TARGET_STEP="$(jq -er '.target_step // ""' $s)"
|
|
curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \
|
|
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/runs/`
|
|
`${{github.event.workflow_run.id}}/jobs" \
|
|
| jq -er '.jobs[]
|
|
| select(.name == env.TARGET_JOB)
|
|
| .html_url
|
|
+ "?check_suite_focus=true"
|
|
+ ((.steps[]
|
|
| select(.name == env.TARGET_STEP)
|
|
| "#step:\(.number):0") // "")'))"
|
|
# update status
|
|
curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \
|
|
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/statuses/`
|
|
`${{github.event.workflow_run.head_sha}}" \
|
|
-d "$(jq -n '{
|
|
state: env.STATE,
|
|
context: env.CONTEXT,
|
|
description: env.DESCRIPTION,
|
|
target_url: env.TARGET_URL,
|
|
}' | tee /dev/stderr)"
|
|
done
|
|
|
|
# forward custom pr-comments
|
|
comment:
|
|
runs-on: ubuntu-22.04
|
|
|
|
# only run on success (we don't want garbage comments!)
|
|
if: ${{github.event.workflow_run.conclusion == 'success'}}
|
|
|
|
steps:
|
|
# generated comment?
|
|
- uses: dawidd6/action-download-artifact@v2
|
|
continue-on-error: true
|
|
with:
|
|
workflow: ${{github.event.workflow_run.name}}
|
|
run_id: ${{github.event.workflow_run.id}}
|
|
name: comment
|
|
path: comment
|
|
- name: update-comment
|
|
continue-on-error: true
|
|
run: |
|
|
ls comment
|
|
for s in $(shopt -s nullglob ; echo comment/*.json)
|
|
do
|
|
export NUMBER="$(jq -er '.number' $s)"
|
|
export BODY="$(jq -er '.body' $s)"
|
|
|
|
# check that the comment was from the most recent commit on the
|
|
# pull request
|
|
[ "$(curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \
|
|
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/pulls/$NUMBER" \
|
|
| jq -er '.head.sha')" \
|
|
== ${{github.event.workflow_run.head_sha}} ] || continue
|
|
|
|
# update comment
|
|
curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \
|
|
"$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/issues/`
|
|
`$NUMBER/comments" \
|
|
-d "$(jq -n '{
|
|
body: env.BODY,
|
|
}' | tee /dev/stderr)"
|
|
done
|