jjb: coverity: fix for curl 8.4
[lttng-ci.git] / scripts / common / coverity.sh
CommitLineData
51c9c62d 1#!/bin/bash
87b23e49 2#
2c34ea14
MJ
3# SPDX-FileCopyrightText: 2015 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
4# SPDX-FileCopyrightText: 2023 Michael Jeanson <mjeanson@efficios.com>
5# SPDX-License-Identifier: GPL-2.0-or-later
87b23e49 6
51c9c62d
MJ
7set -exu
8
30c8dfac
MJ
9# Required variables
10WORKSPACE=${WORKSPACE:-}
11
87b23e49 12# Coverity settings
e8078c79 13# The project name and token have to be provided trough env variables
87b23e49
MJ
14#COVERITY_SCAN_PROJECT_NAME=""
15#COVERITY_SCAN_TOKEN=""
87b23e49
MJ
16COVERITY_SCAN_DESCRIPTION="Automated CI build"
17COVERITY_SCAN_NOTIFICATION_EMAIL="ci-notification@lists.lttng.org"
18COVERITY_SCAN_BUILD_OPTIONS=""
fa299733 19#COVERITY_SCAN_BUILD_OPTIONS=("--return-emit-failures 8" "--parse-error-threshold 85")
87b23e49 20
30c8dfac
MJ
21DEPS_INC="$WORKSPACE/deps/build/include"
22DEPS_LIB="$WORKSPACE/deps/build/lib"
23DEPS_PKGCONFIG="$DEPS_LIB/pkgconfig"
24DEPS_BIN="$WORKSPACE/deps/build/bin"
25
26export PATH="$DEPS_BIN:$PATH"
27export LD_LIBRARY_PATH="$DEPS_LIB:${LD_LIBRARY_PATH:-}"
28export PKG_CONFIG_PATH="$DEPS_PKGCONFIG"
29export CPPFLAGS="-I$DEPS_INC"
30export LDFLAGS="-L$DEPS_LIB"
31
1f4fba8c
MJ
32SRCDIR="$WORKSPACE/src/${COVERITY_SCAN_PROJECT_NAME}"
33TMPDIR="$WORKSPACE/tmp"
34
87b23e49
MJ
35NPROC=$(nproc)
36PLATFORM=$(uname)
37export CFLAGS="-O0 -g -DDEBUG"
2c34ea14 38export CXXFLAGS="-O0 -g -DDEBUG"
87b23e49 39
fa299733
MJ
40# Cache the tool installer in the home directory since we delete the workspace
41# on each build
42TOOL_ARCHIVE="$HOME/cov-analysis-${PLATFORM}.tgz"
87b23e49 43TOOL_URL=https://scan.coverity.com/download/${PLATFORM}
1f4fba8c 44TOOL_BASE="$TMPDIR/coverity-scan-analysis"
87b23e49
MJ
45
46UPLOAD_URL="https://scan.coverity.com/builds"
47SCAN_URL="https://scan.coverity.com"
48
1f4fba8c
MJ
49RESULTS_DIR_NAME="cov-int"
50RESULTS_DIR="$WORKSPACE/$RESULTS_DIR_NAME"
51RESULTS_ARCHIVE=analysis-results.tgz
87b23e49 52
1f4fba8c
MJ
53# Create tmp directory
54rm -rf "$TMPDIR"
55mkdir -p "$TMPDIR"
56
57export TMPDIR
58
59case "$COVERITY_SCAN_PROJECT_NAME" in
60babeltrace)
fa299733 61 CONF_OPTS=("--enable-python-bindings" "--enable-python-bindings-doc" "--enable-python-plugins")
e3f027ec 62 BUILD_TYPE="autotools"
1f4fba8c
MJ
63 ;;
64liburcu)
fa299733 65 CONF_OPTS=()
e3f027ec 66 BUILD_TYPE="autotools"
1f4fba8c
MJ
67 ;;
68lttng-modules)
fa299733 69 CONF_OPTS=()
e3f027ec 70 BUILD_TYPE="autotools"
1f4fba8c
MJ
71 ;;
72lttng-tools)
fa299733 73 CONF_OPTS=()
e3f027ec 74 BUILD_TYPE="autotools"
1f4fba8c
MJ
75 ;;
76lttng-ust)
fa299733 77 CONF_OPTS=("--enable-java-agent-all" "--enable-python-agent")
e3f027ec 78 BUILD_TYPE="autotools"
46823f75 79 export CLASSPATH="/usr/share/java/log4j-api.jar:/usr/share/java/log4j-core.jar:/usr/share/java/log4j-1.2.jar"
1f4fba8c 80 ;;
e3f027ec 81lttng-scope|ctf-java|libdelorean-java|jabberwocky)
fa299733 82 CONF_OPTS=()
e3f027ec 83 BUILD_TYPE="maven"
7525e08d
MJ
84 MVN_BIN="$HOME/tools/hudson.tasks.Maven_MavenInstallation/default/bin/mvn"
85 ;;
1f4fba8c
MJ
86*)
87 echo "Generic project, no configure options."
fa299733 88 CONF_OPTS=()
e3f027ec 89 BUILD_TYPE="autotools"
1f4fba8c
MJ
90 ;;
91esac
87b23e49 92
7e942863
MJ
93if [ -d "$WORKSPACE/src/linux" ]; then
94 export KERNELDIR="$WORKSPACE/src/linux"
5122da3c
JR
95fi
96
ae3ca8a0
MJ
97# Enter the source directory
98cd "$SRCDIR"
87b23e49
MJ
99
100# Verify upload is permitted
e8078c79 101set +x
fa299733 102AUTH_RES=$(curl --silent --form project="$COVERITY_SCAN_PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted)
e8078c79 103set -x
87b23e49
MJ
104if [ "$AUTH_RES" = "Access denied" ]; then
105 echo -e "\033[33;1mCoverity Scan API access denied. Check COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN.\033[0m"
106 exit 1
107else
a57a60d9 108 AUTH=$(echo "$AUTH_RES" | jq .upload_permitted)
87b23e49
MJ
109 if [ "$AUTH" = "true" ]; then
110 echo -e "\033[33;1mCoverity Scan analysis authorized per quota.\033[0m"
111 else
a57a60d9 112 WHEN=$(echo "$AUTH_RES" | jq .next_upload_permitted_at)
87b23e49
MJ
113 echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
114 exit 1
115 fi
116fi
117
118
119# Download Coverity Scan Analysis Tool
a57a60d9 120if [ ! -d "$TOOL_BASE" ]; then
9be4a494
MJ
121 echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
122 set +x
1a2329a7
MJ
123 curl --fail \
124 --location \
125 --remote-time \
126 --form project="$COVERITY_SCAN_PROJECT_NAME" \
127 --form token="$COVERITY_SCAN_TOKEN" \
128 --output "$TOOL_ARCHIVE" \
129 "$TOOL_URL" || rm -f "$TOOL_ARCHIVE"
9be4a494 130 set -x
87b23e49
MJ
131
132 # Extract Coverity Scan Analysis Tool
133 echo -e "\033[33;1mExtracting Coverity Scan Analysis Tool...\033[0m"
a57a60d9
MJ
134 mkdir -p "$TOOL_BASE"
135 cd "$TOOL_BASE" || exit 1
136 tar xzf "$TOOL_ARCHIVE"
87b23e49
MJ
137 cd -
138fi
139
a57a60d9 140TOOL_DIR=$(find "$TOOL_BASE" -type d -name 'cov-analysis*')
87b23e49 141export PATH=$TOOL_DIR/bin:$PATH
1f4fba8c 142
a57a60d9 143COVERITY_SCAN_VERSION=$(git describe --always | sed 's|-|.|g')
87b23e49 144
87b23e49
MJ
145# Build
146echo -e "\033[33;1mRunning Coverity Scan Analysis Tool...\033[0m"
e3f027ec
MJ
147case "$BUILD_TYPE" in
148maven)
7525e08d 149 cov-configure --java
fa299733 150 cov-build --dir "$RESULTS_DIR" "${COVERITY_SCAN_BUILD_OPTIONS[@]}" "$MVN_BIN" \
7525e08d
MJ
151 -s "$MVN_SETTINGS" \
152 -Dmaven.repo.local="$WORKSPACE/.repository" \
153 -Dmaven.compiler.fork=true \
154 -Dmaven.compiler.forceJavaCompilerUse=true \
155 -Dmaven.test.skip=true \
156 -DskipTests \
157 clean verify
158 ;;
e3f027ec 159autotools)
c0eca50d
MJ
160 # Prepare build dir for autotools based projects
161 if [ -f "./bootstrap" ]; then
162 ./bootstrap
fa299733 163 ./configure "${CONF_OPTS[@]}"
c0eca50d
MJ
164 fi
165
fa299733 166 cov-build --dir "$RESULTS_DIR" ${COVERITY_SCAN_BUILD_OPTIONS[@]} make -j"$NPROC" V=1
7525e08d 167 ;;
e3f027ec
MJ
168*)
169 echo "Unsupported build type: $BUILD_TYPE"
170 exit 1
171 ;;
7525e08d
MJ
172esac
173
174
175
a57a60d9 176cov-import-scm --dir "$RESULTS_DIR" --scm git --log "$RESULTS_DIR/scm_log.txt"
87b23e49 177
1f4fba8c
MJ
178cd "${WORKSPACE}"
179
87b23e49
MJ
180# Tar results
181echo -e "\033[33;1mTarring Coverity Scan Analysis results...\033[0m"
1f4fba8c 182tar czf $RESULTS_ARCHIVE $RESULTS_DIR_NAME
87b23e49
MJ
183
184# Upload results
185echo -e "\033[33;1mUploading Coverity Scan Analysis results...\033[0m"
fa299733 186response=$(curl \
732698e9 187 --write-out "\n%{http_code}\n" \
a57a60d9
MJ
188 --form project="$COVERITY_SCAN_PROJECT_NAME" \
189 --form token="$COVERITY_SCAN_TOKEN" \
190 --form email="$COVERITY_SCAN_NOTIFICATION_EMAIL" \
191 --form file=@"$RESULTS_ARCHIVE" \
192 --form version="$COVERITY_SCAN_VERSION" \
193 --form description="$COVERITY_SCAN_DESCRIPTION" \
194 "$UPLOAD_URL")
87b23e49 195status_code=$(echo "$response" | sed -n '$p')
e3449c79 196if [ "${status_code:0:1}" == "2" ]; then
7525e08d
MJ
197 echo -e "\033[33;1mCoverity Scan upload successful.\033[0m"
198else
87b23e49
MJ
199 TEXT=$(echo "$response" | sed '$d')
200 echo -e "\033[33;1mCoverity Scan upload failed: $TEXT.\033[0m"
201 exit 1
202fi
a57a60d9
MJ
203
204# EOF
This page took 0.039908 seconds and 4 git commands to generate.