forked from PostgREST/postgrest
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci: Refactor get_cirrusci_freebsd script to GitHub action
This should make it more reliable and also easier to re-use, if we need to. Resolves PostgREST#2555
- Loading branch information
1 parent
5aa62d9
commit 1ca2d1f
Showing
5 changed files
with
121 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
name: Artifact from Cirrus | ||
|
||
description: Waits for a specific Cirrus CI run to complete, then downloads the artifact and uploads it to the current workflow. This will silently succeed if Cirrus CI did not schedule a task within 2 minutes. | ||
|
||
inputs: | ||
download: | ||
description: Name of Artifact to download from Cirrus CI | ||
required: true | ||
task: | ||
description: Name of Cirrus Task | ||
required: true | ||
token: | ||
description: GitHub Token | ||
required: true | ||
upload: | ||
description: Name of Artifact to upload on GitHub Actions | ||
required: true | ||
|
||
runs: | ||
using: composite | ||
steps: | ||
- shell: bash | ||
run: echo "GH_TOKEN=${{ inputs.token }}" >> "$GITHUB_ENV" | ||
- name: Wait for Check Suite to be created | ||
id: check-suite | ||
env: | ||
# GITHUB_SHA does weird things for pull request, so we roll our own: | ||
COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} | ||
shell: bash | ||
run: | | ||
get_check_runs_url() { | ||
gh api "repos/{owner}/{repo}/commits/${COMMIT}/check-suites" \ | ||
| jq -r '.check_suites[] | select(.app.slug == "cirrus-ci") | .check_runs_url' | ||
} | ||
for _ in $(seq 1 12); do | ||
check_runs_url="$(get_check_runs_url)" | ||
if [ -z "$check_runs_url" ]; then | ||
echo "Cirrus CI task has not started, yet. Waiting..." | ||
sleep 10 | ||
else | ||
echo "check_suite_found=1" >> "$GITHUB_OUTPUT" | ||
echo "check_runs_url=$check_runs_url" >> "$GITHUB_OUTPUT" | ||
exit 0 | ||
fi | ||
done | ||
>&2 echo "Cirrus CI check suite not found. Is Cirrus CI enabled for this repo?" | ||
echo "check_suite_found=0" >> "$GITHUB_OUTPUT" | ||
- name: Find task by name | ||
id: find-task | ||
if: steps.check-suite.outputs.check_suite_found | ||
shell: bash | ||
run: | | ||
get_number_of_tasks() { | ||
gh api "${{ steps.check-suite.outputs.check_runs_url }}" \ | ||
| jq -r '.check_runs | map(select(.name == "${{ inputs.task }}")) | length' | ||
} | ||
tasks="$(get_number_of_tasks)" | ||
case "$tasks" in | ||
0) | ||
echo "Task not found, assuming it's skipped intentionally..." | ||
exit 0 | ||
;; | ||
1) | ||
echo "task_found=1" >> "$GITHUB_OUTPUT" | ||
exit 0 | ||
;; | ||
*) | ||
>&2 echo "More than 1 task with the same name found. Don't know what to do..." | ||
exit 1 | ||
;; | ||
esac | ||
- name: Wait for Cirrus CI to complete task | ||
if: steps.find-task.outputs.task_found | ||
shell: bash | ||
run: | | ||
get_conclusion() { | ||
gh api "${{ steps.check-suite.outputs.check_runs_url }}" \ | ||
| jq -r '.check_runs[] | select(.name == "${{ inputs.task }}" and .status == "completed") | .conclusion' | ||
} | ||
while true; do | ||
conclusion="$(get_conclusion)" | ||
if [ -z "$conclusion" ]; then | ||
echo "Cirrus CI task has not completed, yet. Waiting..." | ||
sleep 30 | ||
else | ||
if [ "$conclusion" == "success" ]; then | ||
break | ||
else | ||
exit 1 | ||
fi | ||
fi | ||
done | ||
- name: Download artifact from Cirrus CI | ||
if: steps.find-task.outputs.task_found | ||
id: download | ||
shell: bash | ||
run: | | ||
get_external_id() { | ||
gh api "${{ steps.check-suite.outputs.check_runs_url }}" \ | ||
| jq -er '.check_runs[] | select(.name == "${{ inputs.task }}") | .external_id' | ||
} | ||
archive="$(mktemp)" | ||
artifacts="$(mktemp -d)" | ||
curl --no-progress-meter --fail -o "${archive}" \ | ||
"https://api.cirrus-ci.com/v1/artifact/task/$(get_external_id)/${{ inputs.download }}.zip" | ||
unzip "${archive}" -d "${artifacts}" | ||
echo "artifacts=${artifacts}" >> "$GITHUB_OUTPUT" | ||
- name: Save artifact to GitHub Actions | ||
if: steps.find-task.outputs.task_found | ||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 | ||
with: | ||
name: ${{ inputs.upload }} | ||
path: ${{ steps.download.outputs.artifacts }} | ||
if-no-files-found: error |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters