mirror of
git://git.yoctoproject.org/yocto-autobuilder-helper.git
synced 2025-07-19 20:59:02 +02:00
126 lines
2.9 KiB
Bash
Executable File
126 lines
2.9 KiB
Bash
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
|
|
if ! git -C $METRICSDIR pull --rebase; then
|
|
echo "Aborting push, metrics repo has updated and cannot rebase cleanly"
|
|
exit 1
|
|
fi
|
|
git -C $METRICSDIR push
|
|
fi
|
|
|
|
#
|
|
# Update the results
|
|
#
|
|
|
|
if [ ! -d $RESULTSDIR ]; then
|
|
mkdir -p $RESULTSDIR
|
|
fi
|
|
|
|
$OURDIR/patchmetrics-generate-chartdata --json $METRICSDIR/patch-status.json --outputdir $RESULTSDIR
|
|
cp $METRICSDIR/patch-status.json $RESULTSDIR
|
|
cp -r $METRICSDIR/patch-status/* $RESULTSDIR
|