yocto-autobuilder-helper/scripts/run-patchmetrics
Ross Burton 8c4df34c80 scripts/run-patchmetrics: pull before updating metrics
Do another git-pull in the metrics repository before updating the
metrics, in case other metrics jobs running in parallel have updated the
repositories since they were cloned.  There will always be possibility
of racing metrics jobs, but this should reduce the chance of it
happening.

An alternative would be to commit and then rebase before pushing, but I
fear that a git-merge could produce invalid JSON and we'd have to
manually fix up the repository.  In my opinion, a wasted metrics run is
preferable to potentially corrupted repositories.

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-11-03 15:06:35 +00:00

2.7 KiB
Executable File

#!/bin/bash

SPDX-License-Identifier: GPL-2.0-only

set -eu

ARGS=$(getopt -o '' --long 'poky:,metrics:,repo:,layer:,branch:,results:,push' -n 'run-patchmetrics' -- "$@") if [ $? -ne 0 ]; then echo 'Cannot parse arguments...' >&2 exit 1 fi eval set -- "$ARGS" unset ARGS

Location of the yocto-autobuilder-helper scripts

OURDIR=$(dirname $0)

Where Poky is (for patchreview.py)

POKYDIR=""

The metrics repository to use

METRICSDIR=""

Where to copy results to

RESULTSDIR=""

The branch we're building

BRANCH=""

The layer/repository to scan

LAYERDIR=""

Whether to push the metrics

PUSH=0

while true; do case "$1" in '--poky') POKYDIR=$(realpath $2) shift 2 continue ;; '--metrics') METRICSDIR=$(realpath $2) shift 2 continue ;; '--layer') LAYERDIR=$(realpath $2) shift 2 continue ;; '--repo') REPODIR=$(realpath $2) shift 2 continue ;; '--branch') BRANCH=$2 shift 2 continue ;; '--results') RESULTSDIR=$(realpath -m $2) shift 2 continue ;; '--push') PUSH=1 shift continue ;; '--') shift break ;; *) echo "Unexpected value $1" >&2 exit 1 ;; esac done

if ! test "$POKYDIR" -a "$METRICSDIR" -a "$REPODIR" -a "$LAYERDIR" -a "$BRANCH" -a "$RESULTSDIR"; then echo "Not all required options specified" exit 1 fi

We only monitor patch metrics on the master branch

if [ "$BRANCH" != "master" ]; then echo "Skipping, $BRANCH is not master" exit 0 fi

Do another pull to make sure we're as up to date as possible. This is

preferable to committing and rebasing before pushing as it would be better to

waste some time repeating work than commit potentially corrupted files from a

git merge gone wrong.

git -C $METRICSDIR pull

Patch Metrics

set -x $OURDIR/patchmetrics-update --patchscript $POKYDIR/scripts/contrib/patchreview.py --json $METRICSDIR/patch-status.json --repo $REPODIR --layer $LAYERDIR set +x

Allow the commit to fail if there is nothing to commit

git -C $METRICSDIR commit -asm "Autobuilder adding new patch stats" || true

if [ "$PUSH" = "1" ]; then git -C $METRICSDIR push fi

Update the results

if [ ! -d $RESULTSDIR ]; then mkdir $RESULTSDIR fi

$OURDIR/patchmetrics-generate-chartdata --json $METRICSDIR/patch-status.json --outputdir $RESULTSDIR cp $METRICSDIR/patch-status.json $RESULTSDIR cp $METRICSDIR/patch-status/* $RESULTSDIR