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
10 WORKSPACE
=${WORKSPACE:-}
13 # The project name and token have to be provided trough env variables
14 #COVERITY_SCAN_PROJECT_NAME=""
15 #COVERITY_SCAN_TOKEN=""
16 COVERITY_SCAN_DESCRIPTION
="Automated CI build"
17 COVERITY_SCAN_NOTIFICATION_EMAIL
="ci-notification@lists.lttng.org"
18 COVERITY_SCAN_BUILD_OPTIONS
=""
19 #COVERITY_SCAN_BUILD_OPTIONS=("--return-emit-failures 8" "--parse-error-threshold 85")
21 DEPS_INC
="$WORKSPACE/deps/build/include"
22 DEPS_LIB
="$WORKSPACE/deps/build/lib"
23 DEPS_PKGCONFIG
="$DEPS_LIB/pkgconfig"
24 DEPS_BIN
="$WORKSPACE/deps/build/bin"
26 export PATH
="$DEPS_BIN:$PATH"
27 export LD_LIBRARY_PATH
="$DEPS_LIB:${LD_LIBRARY_PATH:-}"
28 export PKG_CONFIG_PATH
="$DEPS_PKGCONFIG"
29 export CPPFLAGS
="-I$DEPS_INC"
30 export LDFLAGS
="-L$DEPS_LIB"
32 SRCDIR
="$WORKSPACE/src/${COVERITY_SCAN_PROJECT_NAME}"
33 TMPDIR
="$WORKSPACE/tmp"
37 export CFLAGS
="-O0 -g -DDEBUG"
38 export CXXFLAGS
="-O0 -g -DDEBUG"
40 # Cache the tool installer in the home directory since we delete the workspace
42 TOOL_ARCHIVE
="$HOME/cov-analysis-${PLATFORM}.tgz"
43 TOOL_URL
=https
://scan.coverity.com
/download
/${PLATFORM}
44 TOOL_BASE
="$TMPDIR/coverity-scan-analysis"
46 UPLOAD_URL
="https://scan.coverity.com/builds"
47 SCAN_URL
="https://scan.coverity.com"
49 RESULTS_DIR_NAME
="cov-int"
50 RESULTS_DIR
="$WORKSPACE/$RESULTS_DIR_NAME"
51 RESULTS_ARCHIVE
=analysis-results.tgz
53 # Create tmp directory
59 case "$COVERITY_SCAN_PROJECT_NAME" in
61 CONF_OPTS
=("--enable-python-bindings" "--enable-python-bindings-doc" "--enable-python-plugins")
62 BUILD_TYPE
="autotools"
66 BUILD_TYPE
="autotools"
70 BUILD_TYPE
="autotools"
74 BUILD_TYPE
="autotools"
77 CONF_OPTS
=("--enable-java-agent-all" "--enable-python-agent")
78 BUILD_TYPE
="autotools"
79 export CLASSPATH
="/usr/share/java/log4j-api.jar:/usr/share/java/log4j-core.jar:/usr/share/java/log4j-1.2.jar"
81 lttng-scope|ctf-java|libdelorean-java|jabberwocky
)
84 MVN_BIN
="$HOME/tools/hudson.tasks.Maven_MavenInstallation/default/bin/mvn"
87 echo "Generic project, no configure options."
89 BUILD_TYPE
="autotools"
93 if [ -d "$WORKSPACE/src/linux" ]; then
94 export KERNELDIR
="$WORKSPACE/src/linux"
97 # Enter the source directory
100 # Verify upload is permitted
102 AUTH_RES
=$
(curl
--silent --form project
="$COVERITY_SCAN_PROJECT_NAME" --form token
="$COVERITY_SCAN_TOKEN" $SCAN_URL/api
/upload_permitted
)
104 if [ "$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"
108 AUTH
=$
(echo "$AUTH_RES" | jq .upload_permitted
)
109 if [ "$AUTH" = "true" ]; then
110 echo -e "\033[33;1mCoverity Scan analysis authorized per quota.\033[0m"
112 WHEN
=$
(echo "$AUTH_RES" | jq .next_upload_permitted_at
)
113 echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
119 # Download Coverity Scan Analysis Tool
120 if [ ! -d "$TOOL_BASE" ]; then
121 echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
123 curl
--fail --remote-time --continue-at - --form project
="$COVERITY_SCAN_PROJECT_NAME" --form token
="$COVERITY_SCAN_TOKEN" --output "$TOOL_ARCHIVE" --time-cond "$TOOL_ARCHIVE" "$TOOL_URL"
126 # Extract Coverity Scan Analysis Tool
127 echo -e "\033[33;1mExtracting Coverity Scan Analysis Tool...\033[0m"
128 mkdir
-p "$TOOL_BASE"
129 cd "$TOOL_BASE" ||
exit 1
130 tar xzf
"$TOOL_ARCHIVE"
134 TOOL_DIR
=$
(find "$TOOL_BASE" -type d
-name 'cov-analysis*')
135 export PATH
=$TOOL_DIR/bin
:$PATH
137 COVERITY_SCAN_VERSION
=$
(git describe
--always |
sed 's|-|.|g')
140 echo -e "\033[33;1mRunning Coverity Scan Analysis Tool...\033[0m"
141 case "$BUILD_TYPE" in
144 cov-build
--dir "$RESULTS_DIR" "${COVERITY_SCAN_BUILD_OPTIONS[@]}" "$MVN_BIN" \
146 -Dmaven.repo.
local="$WORKSPACE/.repository" \
147 -Dmaven.compiler.fork
=true \
148 -Dmaven.compiler.forceJavaCompilerUse
=true \
149 -Dmaven.
test.skip
=true \
154 # Prepare build dir for autotools based projects
155 if [ -f "./bootstrap" ]; then
157 .
/configure
"${CONF_OPTS[@]}"
160 cov-build
--dir "$RESULTS_DIR" ${COVERITY_SCAN_BUILD_OPTIONS[@]} make -j"$NPROC" V
=1
163 echo "Unsupported build type: $BUILD_TYPE"
170 cov-import-scm
--dir "$RESULTS_DIR" --scm git
--log "$RESULTS_DIR/scm_log.txt"
175 echo -e "\033[33;1mTarring Coverity Scan Analysis results...\033[0m"
176 tar czf
$RESULTS_ARCHIVE $RESULTS_DIR_NAME
179 echo -e "\033[33;1mUploading Coverity Scan Analysis results...\033[0m"
181 --write-out "\n%{http_code}\n" \
182 --form project
="$COVERITY_SCAN_PROJECT_NAME" \
183 --form token
="$COVERITY_SCAN_TOKEN" \
184 --form email
="$COVERITY_SCAN_NOTIFICATION_EMAIL" \
185 --form file=@
"$RESULTS_ARCHIVE" \
186 --form version
="$COVERITY_SCAN_VERSION" \
187 --form description
="$COVERITY_SCAN_DESCRIPTION" \
189 status_code
=$
(echo "$response" |
sed -n '$p')
190 if [ "${status_code:0:1}" == "2" ]; then
191 echo -e "\033[33;1mCoverity Scan upload successful.\033[0m"
193 TEXT
=$
(echo "$response" |
sed '$d')
194 echo -e "\033[33;1mCoverity Scan upload failed: $TEXT.\033[0m"