DPDK CI discussions
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: Michael Santana <msantana@redhat.com>
Cc: ci@dpdk.org,  David Marchand <dmarchan@redhat.com>,
	 Thomas Monjalon <thomas@monjalon.net>,
	 Patrick Robb <probb@iol.unh.edu>,
	 Dumitru Ceara <dceara@redhat.com>
Subject: Re: [RFC v2 3/3] github: add a tool for restarting checks
Date: Fri, 17 Nov 2023 14:31:08 -0500	[thread overview]
Message-ID: <f7tfs14rxc3.fsf@redhat.com> (raw)
In-Reply-To: <CABVNPRpLqTGuyT+Z69psuthZ_xBRP8NbrhFbk4S=n5c7jWiGDA@mail.gmail.com> (Michael Santana's message of "Fri, 17 Nov 2023 11:47:50 -0500")

Michael Santana <msantana@redhat.com> writes:

> On Tue, Nov 7, 2023 at 3:32 PM Aaron Conole <aconole@redhat.com> wrote:
>>
>> The recheck framework can track specific recheck labels and track a
>> state for them.  Add a tool that will restart github workflow runs
>> and mark the git build table to check for a repoll.  This will allow
>> existing monitor tools to re-poll the workflow and report rerun
>> results.
>>
>> Signed-off-by: Aaron Conole <aconole@redhat.com>
> Acked-by: Michael Santana <msantana@redhat.com>

Thanks.

>> ---
>>  github_restart   | 141 +++++++++++++++++++++++++++++++++++++++++++++++
>>  series_db_lib.sh |  16 ++++++
>>  2 files changed, 157 insertions(+)
>>  create mode 100755 github_restart
>>
>> diff --git a/github_restart b/github_restart
>> new file mode 100755
>> index 0000000..5ba9677
>> --- /dev/null
>> +++ b/github_restart
>> @@ -0,0 +1,141 @@
>> +#!/bin/bash
>> +# SPDX-Identifier: gpl-2.0-or-later
>> +# Copyright (C) 2023, Red Hat, Inc.
>> +#
>> +# Restarts a github job run.  This can be used in conjunction with
>> +# the recheck requests to provide the ability for a user to restart
>> +# a test - in case the workflow is suspected of having a spurious run.
>> +#
>> +# Licensed under the terms of the GNU General Public License as published
>> +# by the Free Software Foundation; either version 2 of the License, or
>> +# (at your option) any later version.  You may obtain a copy of the
>> +# license at
>> +#
>> +#    https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
>> +#
>> +# Unless required by applicable law or agreed to in writing, software
>> +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
>> +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
>> +# License for the specific language governing permissions and limitations
>> +# under the License.
>> +
>> +wait_start="no"
>> +
>> +while [ "$1" != "" ]; do
>> +    if echo "$1" | grep -q -s -E ^--pw-project= ; then
>> +        pw_project=$(echo "$1" | sed s/^--pw-project=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--pw-instance= ; then
>> +        pw_instance=$(echo "$1" | sed s/^--pw-instance=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--pw-credentials= ; then
>> +        pw_credential=$(echo "$1" | sed s/^--pw-credentials=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--series-id= ; then
>> +        series_id=$(echo "$1" | sed s/^--series-id=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--wait-start ; then
>> +        wait_start="yes"
>> +        if echo "$1" | grep -q -s -E ^--wait-start= ; then
>> +            wait_start=$(echo "$1" | sed s/^--wait-start=//)
>> +        fi
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--github-token= ; then
>> +        github_token=$(echo "$1" | sed s/^--github-token=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--repository= ; then
>> +        reponame=$(echo "$1" | sed s/^--repository=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--run-id= ; then
>> +        runid=$(echo "$1" | sed s/^--repository=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--sha= ; then
>> +        sha=$(echo "$1" | sed s/^--sha=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--workflow= ; then
>> +        workflow=$(echo "$1" | sed s/^--workflow=//)
>> +        shift
>> +    elif echo "$1" | grep -q -s -E ^--help ; then
>> +        echo "github restarting script"
>> +        echo "$0: args"
>> +        echo "  --pw-project=<proj>            Project name"
>> +        echo "  --pw-instance=<inst url>       URL for pw"
>> +        echo "  --series-id=id         Series ID for reference"
>> +        echo "  --github-token=token           Token for github"
>> +        echo "  --wait-start[=yes|no]          Wait for the remote to start"
>> +        echo "  --repository=repo              Repository name (ex foo/bar)"
>> +        echo "  --run-id=id                    run ID"
>> +        echo "  --workflow=workflow            Workflow name"
>> +        echo "  --sha=commit                   Commit sha"
>> +        echo ""
>> +        exit 0
>> +    else
>> +        echo "Unknown option: '$1'" >&2
>> +        echo "Rerun with --help for details" >&2
>> +        exit 1
>> +    fi
>> +done
> This entire block makes me feel like maybe we should switch to python :)

Agreed.  We are on shell scripts for the time being, but a good effort
would be to re-do things in python and use better frameworks for
everything (for example, passing data between scripts with json rather
than the sqlite output strings directly).

>> +
>> +source $(dirname $0)/series_db_lib.sh
>> +
>> +if [ "X$wait_start" != "Xno" -a "X$wait_start" != "Xyes" ]; then
>> +    echo "Unrecognized '$wait_start' argument to --wait-start=" >&2
>> +    echo "valid values are 'yes' or 'no'." >&2
>> +    exit 1
>> +fi
>> +
>> +if [ "X$github_token" == "X" ]; then
>> +    echo "Please set a github API token." >&2
>> +    echo "Use --help for more info." >&2
>> +    exit 1
>> +fi
>> +
>> +if [ "X$reponame" == "X" ]; then
>> +    echo "Please set a repository (ie: '--repository=owner/repo')." >&2
>> +    echo "Use --help for more info." >&2
>> +    exit 1
>> +fi
>> +
>> +AUTH="Authorization: token ${github_token}"
>> +APP="Accept: application/vnd.github.v3+json"
>> +
>> +if [ "X$runid" == "X" ]; then
>> +
>> +    # lookup the runs based on the shasum
>> +
>> +    if [ "X$sha" == "X" ]; then
>> +        echo "Need a runid or shasum to key off." >&2
>> +        echo "See --help for more details." >&2
>> +        exit 1
>> +    fi
>> +
>> +    comma=""
>> +    for job in $(curl -s -S -H "${AUTH}" -H "${APP}" \
>> +
>> "https://api.github.com/repos/${reponame}/actions/runs?head_sha=${sha}"
>> | \
>> +                     jq -rc '.workflow_runs[].id')
>> +    do
>> +        runid="${comma}${job}"
>> +        comma=","
>> +    done
>> +fi
>> +
>> +echo -n "{\"results\":["
>> +comma=""
>> +for job in $(echo "$runid" | sed 's/,/ /'); do
>> +    result=$(curl -s -X POST -L -S -H "${AUTH}" -H "${APP}" \
>> +                  "https://api.github.com/repos/${reponame}/actions/runs/$job/rerun")
> Okay!
>> +    msg=$(echo "$result" | jq -rc '.message')
>> +
>> +    echo -n "$comma{\"run\":$job,\"result\":"
>> +    if [ "X$msg" == "Xnull" ]; then
>> +        echo -n "\"sent\""
>> +        if [ "X$series_id" != "X" ]; then
>> +            echo -n ",\"gap_sync\":\"reset\""
>> +            set_unsynced_for_series "$series_id" "$pw_instance" "gap_sync"
>> +        fi
>> +    else
>> +        echo -n "\"err\",\"error\":\"$msg\""
>> +    fi
>> +    echo -n "}"
>> +done
>> +echo "]}"
>> diff --git a/series_db_lib.sh b/series_db_lib.sh
>> index ca33c1f..3f052ad 100644
>> --- a/series_db_lib.sh
>> +++ b/series_db_lib.sh
>> @@ -382,6 +382,14 @@ function set_synced_for_series() {
>>      echo "update git_builds set gap_sync=1, obs_sync=1 where patchwork_instance=\"$instance\" and series_id=$series_id;" | series_db_execute
>>  }
>>
>> +function set_unsynced_for_series() {
>> +    local series_id="$1"
>> +    local instance="$2"
>> +    local ci_instance="$3"
>> +
>> +    echo "update git_builds set $ci_instance=0 where patchwork_instance=\"$instance\" and series_id=$series_id;" | series_db_execute
>> +}
>> +
>>  function insert_commit() {
>>      local series_id="$1"
>>      local patch_id="$2"
>> @@ -407,6 +415,14 @@ function get_patch_id_by_series_id_and_sha() {
>>      echo "select patch_id from git_builds where patchwork_instance=\"$instance\" and series_id=$series_id and sha=\"$sha\";" | series_db_execute
>>  }
>>
>> +function get_sha_for_series_id_and_patch() {
> Is this function being used?

Yes - but it should have appeared in 2/3 rather than here in 3/3.  I'll
fix it before applying things and I plan to send a PATCH series out with
those changes as well.

>> +    local series_id="$1"
>> +    local patch_id="$2"
>> +    local instance="$3"
>> +
>> +    echo "select sha from git_builds where patchwork_instance=\"$instance\" and series_id=\"$series_id\" and patch_id=\"$patch_id\"" | series_db_execute
>> +}
>> +
>>  function get_recheck_requests_by_project() {
>>      local recheck_instance="$1"
>>      local recheck_project="$2"
>> --
>> 2.41.0
>>


  reply	other threads:[~2023-11-17 19:31 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-07 20:31 [RFC v2 0/3] Add a recheck framework to pw-ci Aaron Conole
2023-11-07 20:31 ` [RFC v2 1/3] pw_mon: improve command line options Aaron Conole
2023-11-17 16:26   ` Michael Santana
2023-11-17 19:28     ` Aaron Conole
2023-11-07 20:31 ` [RFC v2 2/3] recheck: Add a recheck parser for patchwork comments Aaron Conole
2023-11-09 20:45   ` Dumitru Ceara
2023-11-10 14:05     ` Aaron Conole
2023-11-17 16:35   ` Michael Santana
2023-11-17 19:28     ` Aaron Conole
2023-11-07 20:31 ` [RFC v2 3/3] github: add a tool for restarting checks Aaron Conole
2023-11-17 16:47   ` Michael Santana
2023-11-17 19:31     ` Aaron Conole [this message]
2023-11-17 22:20       ` Michael Santana

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f7tfs14rxc3.fsf@redhat.com \
    --to=aconole@redhat.com \
    --cc=ci@dpdk.org \
    --cc=dceara@redhat.com \
    --cc=dmarchan@redhat.com \
    --cc=msantana@redhat.com \
    --cc=probb@iol.unh.edu \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).