[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 8/9] run-coverity-scan: add --check-upload-only option
From: |
Paolo Bonzini |
Subject: |
[PULL 8/9] run-coverity-scan: add --check-upload-only option |
Date: |
Fri, 8 Mar 2024 19:12:00 +0100 |
Add an option to check if upload is permitted without actually
attempting a build. This can be useful to add a third outcome
beyond success and failure---namely, a CI job can self-cancel
if the uploading quota has been reached.
There is a small change here in that a failure to do the upload
check changes the exit code from 1 to 99. 99 was chosen because
it is what Autotools and Meson use to represent a problem in the
setup (as opposed to a failure in the test).
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/coverity-scan/run-coverity-scan | 59 ++++++++++++++++++-------
1 file changed, 42 insertions(+), 17 deletions(-)
diff --git a/scripts/coverity-scan/run-coverity-scan
b/scripts/coverity-scan/run-coverity-scan
index d56c9b66776..43cf770f5e3 100755
--- a/scripts/coverity-scan/run-coverity-scan
+++ b/scripts/coverity-scan/run-coverity-scan
@@ -28,6 +28,7 @@
# project settings, if you have maintainer access there.
# Command line options:
+# --check-upload-only : return success if upload is possible
# --dry-run : run the tools, but don't actually do the upload
# --docker : create and work inside a container
# --docker-engine : specify the container engine to use (docker/podman/auto);
@@ -57,18 +58,18 @@
# putting it in a file and using --tokenfile. Everything else has
# a reasonable default if this is run from a git tree.
-check_upload_permissions() {
- # Check whether we can do an upload to the server; will exit the script
- # with status 1 if the check failed (usually a bad token);
- # will exit the script with status 0 if the check indicated that we
- # can't upload yet (ie we are at quota)
- # Assumes that COVERITY_TOKEN, PROJNAME and DRYRUN have been initialized.
+upload_permitted() {
+ # Check whether we can do an upload to the server; will exit *the script*
+ # with status 99 if the check failed (usually a bad token);
+ # will return from the function with status 1 if the check indicated
+ # that we can't upload yet (ie we are at quota)
+ # Assumes that COVERITY_TOKEN and PROJNAME have been initialized.
echo "Checking upload permissions..."
if ! up_perm="$(wget https://scan.coverity.com/api/upload_permitted
--post-data "token=$COVERITY_TOKEN&project=$PROJNAME" -q -O -)"; then
echo "Coverity Scan API access denied: bad token?"
- exit 1
+ exit 99
fi
# Really up_perm is a JSON response with either
@@ -76,25 +77,40 @@ check_upload_permissions() {
# We do some hacky string parsing instead of properly parsing it.
case "$up_perm" in
*upload_permitted*true*)
- echo "Coverity Scan: upload permitted"
+ return 0
;;
*next_upload_permitted_at*)
- if [ "$DRYRUN" = yes ]; then
- echo "Coverity Scan: upload quota reached, continuing dry run"
- else
- echo "Coverity Scan: upload quota reached; stopping here"
- # Exit success as this isn't a build error.
- exit 0
- fi
+ return 1
;;
*)
echo "Coverity Scan upload check: unexpected result $up_perm"
- exit 1
+ exit 99
;;
esac
}
+check_upload_permissions() {
+ # Check whether we can do an upload to the server; will exit the script
+ # with status 99 if the check failed (usually a bad token);
+ # will exit the script with status 0 if the check indicated that we
+ # can't upload yet (ie we are at quota)
+ # Assumes that COVERITY_TOKEN, PROJNAME and DRYRUN have been initialized.
+
+ if upload_permitted; then
+ echo "Coverity Scan: upload permitted"
+ else
+ if [ "$DRYRUN" = yes ]; then
+ echo "Coverity Scan: upload quota reached, continuing dry run"
+ else
+ echo "Coverity Scan: upload quota reached; stopping here"
+ # Exit success as this isn't a build error.
+ exit 0
+ fi
+ fi
+}
+
+
build_docker_image() {
# build docker container including the coverity-scan tools
echo "Building docker container..."
@@ -152,9 +168,14 @@ update_coverity_tools () {
DRYRUN=no
UPDATE=yes
DOCKER=no
+PROJNAME=QEMU
while [ "$#" -ge 1 ]; do
case "$1" in
+ --check-upload-only)
+ shift
+ DRYRUN=check
+ ;;
--dry-run)
shift
DRYRUN=yes
@@ -251,6 +272,11 @@ if [ -z "$COVERITY_TOKEN" ]; then
exit 1
fi
+if [ "$DRYRUN" = check ]; then
+ upload_permitted
+ exit $?
+fi
+
if [ -z "$COVERITY_BUILD_CMD" ]; then
NPROC=$(nproc)
COVERITY_BUILD_CMD="make -j$NPROC"
@@ -266,7 +292,6 @@ if [ -z "$SRCDIR" ]; then
SRCDIR="$PWD"
fi
-PROJNAME=QEMU
TARBALL=cov-int.tar.xz
if [ "$UPDATE" = only ]; then
--
2.43.2
- [PULL v2 0/9] Misc fixes and coverity CI for 2024-03-08, Paolo Bonzini, 2024/03/08
- [PULL 1/9] hw/scsi/lsi53c895a: add timer to scripts processing, Paolo Bonzini, 2024/03/08
- [PULL 2/9] system/qdev-monitor: move drain_call_rcu call under if (!dev) in qmp_device_add(), Paolo Bonzini, 2024/03/08
- [PULL 4/9] hw/scsi/lsi53c895a: stop script on phase mismatch, Paolo Bonzini, 2024/03/08
- [PULL 5/9] hw/intc/apic: fix memory leak, Paolo Bonzini, 2024/03/08
- [PULL 3/9] meson: Remove --warn-common ldflag, Paolo Bonzini, 2024/03/08
- [PULL 7/9] mips: do not list individual devices from configs/, Paolo Bonzini, 2024/03/08
- [PULL 8/9] run-coverity-scan: add --check-upload-only option,
Paolo Bonzini <=
- [PULL 9/9] gitlab-ci: add manual job to run Coverity, Paolo Bonzini, 2024/03/08
- [PULL 6/9] oslib-posix: fix memory leak in touch_all_pages, Paolo Bonzini, 2024/03/08
- Re: [PULL v2 0/9] Misc fixes and coverity CI for 2024-03-08, Peter Maydell, 2024/03/09