From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A4A5543355; Fri, 17 Nov 2023 17:48:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9C7DF402EA; Fri, 17 Nov 2023 17:48:09 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 9617B40285 for ; Fri, 17 Nov 2023 17:48:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1700239688; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Vh1e1KIeCbV45e6S4Qb2UWW/uopvW6cFFkPPExZWWfQ=; b=asWO4vMKEa3ojfUBF66gs7jF8rYBlKTB6wu68hdv8u2F3A0/xzMTKhIy/M6x9G1UzOSILc 8eZ1pu9oRVqB0t/lj/Y/yMr+DPADsKysany1feI/MOpBxJvnEgBKE8q5uh8uLWE8Ojyb/S oMugTWnhqFmR0ybFqW7H2hvtiVAJVl8= Received: from mail-lf1-f69.google.com (mail-lf1-f69.google.com [209.85.167.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-522-O3fd2aVUP72b-BESeI4JBQ-1; Fri, 17 Nov 2023 11:48:04 -0500 X-MC-Unique: O3fd2aVUP72b-BESeI4JBQ-1 Received: by mail-lf1-f69.google.com with SMTP id 2adb3069b0e04-5079a3362afso2158619e87.3 for ; Fri, 17 Nov 2023 08:48:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700239682; x=1700844482; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vh1e1KIeCbV45e6S4Qb2UWW/uopvW6cFFkPPExZWWfQ=; b=p+c4DfFd7ptmUZ1waBjs3ksWYIoQ8n14ng4ODKjLWnPnUArFY58FB6NM71KZHo17yP KLDabk7++CwrIjk7252Au1/ZzsVQ6XalJ50/hjCqxGE3wWDO3RSabNqcX/LvuQxQE1MV J0kjj77lWIDeIYge0vwpFnVK1jQsC+slHanblODsK8/22Uc94D9ObzicdN2CkcAECFpI Rq9l7HxwAwnVo3htAUhlKW7ZG2KFSWcGMGwFsxqey2c05UWRl9uo1HOreYEw+v7H9pRM 2YfAcv4KVv3YDeWP6VZVkRe91AhcVfTG+XJRMHPI0blFrfO8x9NAPHQBmlQ+oj59ZQP2 5g3w== X-Gm-Message-State: AOJu0YxJln0pqtIjsEYDmHshJUlJh6eXn2QRGCq8T0bWvZhtsVyx+/8z yBZ6crFXo2e6mY+MRu+oV9b/I/l6Ctw+AC6hekg3lbuwVH3nz8/HD/nC1P/rwWiXLJmGkngbjjS +8jOUXPaPR+2nX0w9Pg== X-Received: by 2002:a05:6512:503:b0:507:cb61:2054 with SMTP id o3-20020a056512050300b00507cb612054mr71836lfb.49.1700239682667; Fri, 17 Nov 2023 08:48:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IGxft8qyt89jT1OIiF4p8dNgvsEtnVna9ywKZkOVl/5uzl70HBVg/VAeuXxweoKoy0c+wWtLn40K1fM1yvq1UA= X-Received: by 2002:a05:6512:503:b0:507:cb61:2054 with SMTP id o3-20020a056512050300b00507cb612054mr71819lfb.49.1700239682267; Fri, 17 Nov 2023 08:48:02 -0800 (PST) MIME-Version: 1.0 References: <20231107203158.1261199-1-aconole@redhat.com> <20231107203158.1261199-4-aconole@redhat.com> In-Reply-To: <20231107203158.1261199-4-aconole@redhat.com> From: Michael Santana Date: Fri, 17 Nov 2023 11:47:50 -0500 Message-ID: Subject: Re: [RFC v2 3/3] github: add a tool for restarting checks To: Aaron Conole Cc: ci@dpdk.org, David Marchand , Thomas Monjalon , Patrick Robb , Dumitru Ceara X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: ci@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK CI discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ci-bounces@dpdk.org On Tue, Nov 7, 2023 at 3:32=E2=80=AFPM Aaron Conole wr= ote: > > 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 Acked-by: Michael Santana > --- > 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 publishe= d > +# 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, WITH= OUT > +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See t= he > +# License for the specific language governing permissions and limitation= s > +# under the License. > + > +wait_start=3D"no" > + > +while [ "$1" !=3D "" ]; do > + if echo "$1" | grep -q -s -E ^--pw-project=3D ; then > + pw_project=3D$(echo "$1" | sed s/^--pw-project=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--pw-instance=3D ; then > + pw_instance=3D$(echo "$1" | sed s/^--pw-instance=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--pw-credentials=3D ; then > + pw_credential=3D$(echo "$1" | sed s/^--pw-credentials=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--series-id=3D ; then > + series_id=3D$(echo "$1" | sed s/^--series-id=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--wait-start ; then > + wait_start=3D"yes" > + if echo "$1" | grep -q -s -E ^--wait-start=3D ; then > + wait_start=3D$(echo "$1" | sed s/^--wait-start=3D//) > + fi > + shift > + elif echo "$1" | grep -q -s -E ^--github-token=3D ; then > + github_token=3D$(echo "$1" | sed s/^--github-token=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--repository=3D ; then > + reponame=3D$(echo "$1" | sed s/^--repository=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--run-id=3D ; then > + runid=3D$(echo "$1" | sed s/^--repository=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--sha=3D ; then > + sha=3D$(echo "$1" | sed s/^--sha=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--workflow=3D ; then > + workflow=3D$(echo "$1" | sed s/^--workflow=3D//) > + shift > + elif echo "$1" | grep -q -s -E ^--help ; then > + echo "github restarting script" > + echo "$0: args" > + echo " --pw-project=3D Project name" > + echo " --pw-instance=3D URL for pw" > + echo " --series-id=3Did Series ID for reference" > + echo " --github-token=3Dtoken Token for github" > + echo " --wait-start[=3Dyes|no] Wait for the remote to = start" > + echo " --repository=3Drepo Repository name (ex foo= /bar)" > + echo " --run-id=3Did run ID" > + echo " --workflow=3Dworkflow Workflow name" > + echo " --sha=3Dcommit 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 :) > + > +source $(dirname $0)/series_db_lib.sh > + > +if [ "X$wait_start" !=3D "Xno" -a "X$wait_start" !=3D "Xyes" ]; then > + echo "Unrecognized '$wait_start' argument to --wait-start=3D" >&2 > + echo "valid values are 'yes' or 'no'." >&2 > + exit 1 > +fi > + > +if [ "X$github_token" =3D=3D "X" ]; then > + echo "Please set a github API token." >&2 > + echo "Use --help for more info." >&2 > + exit 1 > +fi > + > +if [ "X$reponame" =3D=3D "X" ]; then > + echo "Please set a repository (ie: '--repository=3Downer/repo')." >&= 2 > + echo "Use --help for more info." >&2 > + exit 1 > +fi > + > +AUTH=3D"Authorization: token ${github_token}" > +APP=3D"Accept: application/vnd.github.v3+json" > + > +if [ "X$runid" =3D=3D "X" ]; then > + > + # lookup the runs based on the shasum > + > + if [ "X$sha" =3D=3D "X" ]; then > + echo "Need a runid or shasum to key off." >&2 > + echo "See --help for more details." >&2 > + exit 1 > + fi > + > + comma=3D"" > + for job in $(curl -s -S -H "${AUTH}" -H "${APP}" \ > + "https://api.github.com/repos/${reponame}/actions/= runs?head_sha=3D${sha}" | \ > + jq -rc '.workflow_runs[].id') > + do > + runid=3D"${comma}${job}" > + comma=3D"," > + done > +fi > + > +echo -n "{\"results\":[" > +comma=3D"" > +for job in $(echo "$runid" | sed 's/,/ /'); do > + result=3D$(curl -s -X POST -L -S -H "${AUTH}" -H "${APP}" \ > + "https://api.github.com/repos/${reponame}/actions/runs= /$job/rerun") Okay! > + msg=3D$(echo "$result" | jq -rc '.message') > + > + echo -n "$comma{\"run\":$job,\"result\":" > + if [ "X$msg" =3D=3D "Xnull" ]; then > + echo -n "\"sent\"" > + if [ "X$series_id" !=3D "X" ]; then > + echo -n ",\"gap_sync\":\"reset\"" > + set_unsynced_for_series "$series_id" "$pw_instance" "gap_syn= c" > + 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=3D1, obs_sync=3D1 where patchwo= rk_instance=3D\"$instance\" and series_id=3D$series_id;" | series_db_execut= e > } > > +function set_unsynced_for_series() { > + local series_id=3D"$1" > + local instance=3D"$2" > + local ci_instance=3D"$3" > + > + echo "update git_builds set $ci_instance=3D0 where patchwork_instanc= e=3D\"$instance\" and series_id=3D$series_id;" | series_db_execute > +} > + > function insert_commit() { > local series_id=3D"$1" > local patch_id=3D"$2" > @@ -407,6 +415,14 @@ function get_patch_id_by_series_id_and_sha() { > echo "select patch_id from git_builds where patchwork_instance=3D\"$= instance\" and series_id=3D$series_id and sha=3D\"$sha\";" | series_db_exec= ute > } > > +function get_sha_for_series_id_and_patch() { Is this function being used? > + local series_id=3D"$1" > + local patch_id=3D"$2" > + local instance=3D"$3" > + > + echo "select sha from git_builds where patchwork_instance=3D\"$insta= nce\" and series_id=3D\"$series_id\" and patch_id=3D\"$patch_id\"" | series= _db_execute > +} > + > function get_recheck_requests_by_project() { > local recheck_instance=3D"$1" > local recheck_project=3D"$2" > -- > 2.41.0 >