[pw-ci] [PATCH] github: alternate url requests
Aaron Conole
aconole at redhat.com
Thu Apr 14 12:46:22 UTC 2022
Michael Santana <msantana at redhat.com> writes:
> Hi Aaron,
> Thanks for working on this. See comments below
>
> On Tue, Apr 12, 2022 at 5:13 PM Aaron Conole <aconole at redhat.com> wrote:
>>
>> Github is currently broken when requesting filtered results for the
>> github actions runs. While this stays broken, apply the following which
>> works around the issue by filtering on the client side.
>>
>> Plan is to remove when
>> https://github.community/t/no-longer-able-to-list-in-progress-builds-via-the-api/244175/3
>> and
>> https://github.community/t/workflow-call-has-an-inconsistent-status-in-github-rest-api/244164/2
>> are resolved.
>>
>> Signed-off-by: Aaron Conole <aconole at redhat.com>
>> ---
>> diff --git a/github_get_logs.sh b/github_get_logs.sh
>> index a646b47..9f44840 100755
>> --- a/github_get_logs.sh
>> +++ b/github_get_logs.sh
>> @@ -68,7 +68,7 @@ print_errored_logs_for_commit () {
>> # Get run metadata
>> select="select(.head_branch==\"series_${series_id}\") |
>> select(.head_sha==\"${sha}\") | select(.name==\"${test_name}\")"
>> headers="{id, logs_url}"
>> - run_meta="$(echo "$runs" | jq ".workflow_runs[] | $select | $headers")"
>> + run_meta="$(echo "$runs" | jq "$select | $headers")"
>>
>> redirect_url="$(echo "$run_meta" | jq -r ".logs_url")"
>> run_id="$(echo "$run_meta" | jq -r ".id")"
>> @@ -88,7 +88,7 @@ print_errored_logs_for_commit () {
>>
>> length="$(echo "$jobs_results" | jq -r "length")"
>>
>> - if [ "$length" -eq "0" ]; then
>> + if [ "X$length" == "X" -o "X$length" == "X0" ]; then
> is the original not working?
>> echo "No build failures detected for series_${series_id}/${sha}. Exiting" 1>&2
>> return 0
>> fi
>> @@ -134,8 +134,9 @@ print_errored_logs_for_commit () {
>> repo_name=$(echo "$repo_name" | sed -e 's@%2F@/@g' -e 's,%40,@,g')
>>
>> # Get GHA runs
>> -tmp_url="$GITHUB_API/repos/$repo_name/actions/runs?branch=series_$series_id&per_page=100"
>> -runs="$(curl -s -S -H "${AUTH}" -H "${APP}" "${tmp_url}")"
>> +tmp_url="$GITHUB_API/repos/$repo_name/actions/runs?per_page=9000"
> So at the time this was written I thought I had read that the max per
> page you could request was 100. Is this not the case anymore? You can
> instruct jq to print the size of the array/struct you get back to find
> out
That isn't the case now - additionally, if we don't specify the per_page
value, we get a significantly reduced set in worker_runs[] array and are
unable to find all the series we need.
> I guess in reality it doesnt matter much. We probably dont have more
> than 100 runs going on at the same time. Going over 100 would really
> only be useful we want to go back to get the status on old builds past
> 100. Maybe it has been changed? let me know
This gives the total runs associated with the system, so I don't know
about 'simultaneously' or 'parallel' anything.
>> +all_runs="$(curl -s -S -H "${AUTH}" -H "${APP}" "${tmp_url}")"
>> +runs=$(echo $all_runs | jq -rc ".workflow_runs[] | select(.head_branch == \"series_$series_id\")")
> I would add quotes. I need to practice my quoting on nested shell
> scripts. According to shellcheck I have been doing them wrong this
> entire time
Why? There are probably quotes where they don't need to exist, tbh.
> just quotes around all_runs is fine
ACK
>> not_found="$(echo "$runs" | jq -rc ".message")"
>> if [ "$not_found" == "Not Found" ]; then
>> echo "\"$tmp_url\" could not be reached." 1>&2
>> diff --git a/github_mon b/github_mon
>> index 42478be..8670ce8 100755
>> --- a/github_mon
>> +++ b/github_mon
>> @@ -60,12 +60,12 @@ make_result_for_series () {
>> repo_name="$6"
>>
>> # Get the name of each respective workflow
>> - workflows="$(echo "$runs" | jq -r ".workflow_runs[].name" | sort -u)"
>> + workflows="$(echo "$runs" | jq -r ".name" | sort -u)"
>>
>> # Check that workflows have all completed
>> select="select(.head_branch==\"series_${series_id}\") | select(.head_sha==\"${sha}\")"
>> headers="{status, conclusion, html_url}"
>> - run_meta="$(echo "$runs" | jq ".workflow_runs[] | $select | $headers")"
>> + run_meta="$(echo "$runs" | jq "$select | $headers")"
>>
>> if [ "$(echo "$run_meta" | jq -r ".status" | sort -u)" != "completed" ]; then
>> echo "patch_id=$patch_id belonging to series_id=$series_id not completed. Skipping" 1>&2
>> @@ -78,7 +78,7 @@ make_result_for_series () {
>> # Get run metadata
>> select="select(.head_branch==\"series_${series_id}\") | select(.head_sha==\"${sha}\") | select(.name==\"${WORKFLOWNAME}\")"
>> headers="{status, conclusion, html_url}"
>> - run_meta="$(echo "$runs" | jq ".workflow_runs[] | $select | $headers")"
>> + run_meta="$(echo "$runs" | jq "$select | $headers")"
>>
>> # success/failure?
>> result="$(echo "$run_meta" | jq -r ".conclusion")"
>> @@ -100,6 +100,9 @@ make_result_for_series () {
>>
>> prev_series=""
>>
>> +prev_url=""
>> +all_runs=""
>> +
>> get_unsynced_series "$pw_instance" "$ci_instance" | \
>> while IFS="|" read -r series_id patch_id patch_url patch_name sha patchwork_instance patchwork_project repo_name gap_sync; do
>>
>> @@ -111,8 +114,13 @@ while IFS="|" read -r series_id patch_id patch_url patch_name sha patchwork_inst
>> prev_series="$series_id"
>>
>> # Get GHA runs
>> - tmp_url="$GITHUB_API/repos/$repo_name/actions/runs?branch=series_$series_id&per_page=100"
>> - runs="$(curl -s -S -H "${AUTH}" -H "${APP}" "${tmp_url}")"
>> + tmp_url="$GITHUB_API/repos/$repo_name/actions/runs?per_page=9000"
>> + if [ "$tmp_url" != "$prev_url" ]; then
>> + prev_url="$tmp_url"
>> + all_runs="$(curl -s -S -H "${AUTH}" -H "${APP}" "${tmp_url}")"
>> + fi
>> +
>> + runs=$(echo "$all_runs" | jq -rc ".workflow_runs[] | select(.head_branch == \"series_$series_id\")")
>> not_found="$(echo "$runs" | jq -rc ".message")"
>> fi
>>
>> ---
>> 2.31.1
>>
More information about the Pwci
mailing list