From patchwork Tue Nov 28 21:01:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Conole X-Patchwork-Id: 134679 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9F48C433FA; Tue, 28 Nov 2023 22:02:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4867742E26; Tue, 28 Nov 2023 22:02:03 +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 323B742E16 for ; Tue, 28 Nov 2023 22:02:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1701205321; 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=7EOd/pwjTSOQGd5TenwVC7QzAIKoTMwKg1AXO++jN74=; b=eiDswsm4W1hpMEV/aMTl8EQDPW0QCfbAkoVdisuTJX9LNAHuucwc9+3apGGr8xn2+/D6LD i42XkKlN7TmXfBHPkVUr5hBvdDBYuMyPF64gdiKOQHRiHRhTmNTVK7bEv+dyUFRxchDFJf uXScRqfj4XMdz48DV+Q+Es41CGteKzc= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-516-ZIC6XNVmNt2edZNUvzVgNw-1; Tue, 28 Nov 2023 16:01:58 -0500 X-MC-Unique: ZIC6XNVmNt2edZNUvzVgNw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0EC50811E8D; Tue, 28 Nov 2023 21:01:58 +0000 (UTC) Received: from RHTPC1VM0NT.lan (unknown [10.22.32.221]) by smtp.corp.redhat.com (Postfix) with ESMTP id A8B0140C6E83; Tue, 28 Nov 2023 21:01:57 +0000 (UTC) From: Aaron Conole To: ci@dpdk.org Cc: Michael Santana , David Marchand , Thomas Monjalon , Patrick Robb , Dumitru Ceara Subject: [PATCH v3 3/3] github: add a tool for restarting checks Date: Tue, 28 Nov 2023 16:01:54 -0500 Message-ID: <20231128210155.1388785-4-aconole@redhat.com> In-Reply-To: <20231128210155.1388785-1-aconole@redhat.com> References: <20231128210155.1388785-1-aconole@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com 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 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. Acked-by: Michael Santana Signed-off-by: Aaron Conole --- github_restart | 145 +++++++++++++++++++++++++++++++++++++++++++++++ series_db_lib.sh | 8 +++ 2 files changed, 153 insertions(+) create mode 100755 github_restart diff --git a/github_restart b/github_restart new file mode 100755 index 0000000..d5d63b9 --- /dev/null +++ b/github_restart @@ -0,0 +1,145 @@ +#!/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= Project name" + echo " --pw-instance= 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 + +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 + + if [ "X$workflow" != "X" ]; then + workflow_select=" | select(.name == \"${workflow}\")" + 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[] ${workflow_select} .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") + 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 e03a02e..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"