d707ad2cefe5a07f647359192a7b2f030dc30e0b
[lttng-ci.git] / scripts / common / coverity.sh
1 #!/bin/bash
2 #
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
6
7 set -exu
8
9 # Required variables
10 WORKSPACE=${WORKSPACE:-}
11
12 # Coverity settings
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")
20
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"
25
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"
31
32 SRCDIR="$WORKSPACE/src/${COVERITY_SCAN_PROJECT_NAME}"
33 TMPDIR="$WORKSPACE/tmp"
34
35 NPROC=$(nproc)
36 PLATFORM=$(uname)
37 export CFLAGS="-O0 -g -DDEBUG"
38 export CXXFLAGS="-O0 -g -DDEBUG"
39
40 # Cache the tool installer in the home directory since we delete the workspace
41 # on each build
42 TOOL_ARCHIVE="$HOME/cov-analysis-${PLATFORM}.tgz"
43 TOOL_URL=https://scan.coverity.com/download/${PLATFORM}
44 TOOL_BASE="$TMPDIR/coverity-scan-analysis"
45
46 UPLOAD_URL="https://scan.coverity.com/builds"
47 SCAN_URL="https://scan.coverity.com"
48
49 RESULTS_DIR_NAME="cov-int"
50 RESULTS_DIR="$WORKSPACE/$RESULTS_DIR_NAME"
51 RESULTS_ARCHIVE=analysis-results.tgz
52
53 # Create tmp directory
54 rm -rf "$TMPDIR"
55 mkdir -p "$TMPDIR"
56
57 export TMPDIR
58
59 case "$COVERITY_SCAN_PROJECT_NAME" in
60 babeltrace)
61 CONF_OPTS=("--enable-python-bindings" "--enable-python-bindings-doc" "--enable-python-plugins")
62 BUILD_TYPE="autotools"
63 ;;
64 liburcu)
65 CONF_OPTS=()
66 BUILD_TYPE="autotools"
67 ;;
68 lttng-modules)
69 CONF_OPTS=()
70 BUILD_TYPE="autotools"
71 ;;
72 lttng-tools)
73 CONF_OPTS=()
74 BUILD_TYPE="autotools"
75 ;;
76 lttng-ust)
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"
80 ;;
81 lttng-scope|ctf-java|libdelorean-java|jabberwocky)
82 CONF_OPTS=()
83 BUILD_TYPE="maven"
84 MVN_BIN="$HOME/tools/hudson.tasks.Maven_MavenInstallation/default/bin/mvn"
85 ;;
86 *)
87 echo "Generic project, no configure options."
88 CONF_OPTS=()
89 BUILD_TYPE="autotools"
90 ;;
91 esac
92
93 if [ -d "$WORKSPACE/src/linux" ]; then
94 export KERNELDIR="$WORKSPACE/src/linux"
95 fi
96
97 # Enter the source directory
98 cd "$SRCDIR"
99
100 # Verify upload is permitted
101 set +x
102 AUTH_RES=$(curl --silent --form project="$COVERITY_SCAN_PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted)
103 set -x
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"
106 exit 1
107 else
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"
111 else
112 WHEN=$(echo "$AUTH_RES" | jq .next_upload_permitted_at)
113 echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
114 exit 1
115 fi
116 fi
117
118
119 # Download Coverity Scan Analysis Tool
120 if [ ! -d "$TOOL_BASE" ]; then
121 echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
122 set +x
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"
124 set -x
125
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"
131 cd -
132 fi
133
134 TOOL_DIR=$(find "$TOOL_BASE" -type d -name 'cov-analysis*')
135 export PATH=$TOOL_DIR/bin:$PATH
136
137 COVERITY_SCAN_VERSION=$(git describe --always | sed 's|-|.|g')
138
139 # Build
140 echo -e "\033[33;1mRunning Coverity Scan Analysis Tool...\033[0m"
141 case "$BUILD_TYPE" in
142 maven)
143 cov-configure --java
144 cov-build --dir "$RESULTS_DIR" "${COVERITY_SCAN_BUILD_OPTIONS[@]}" "$MVN_BIN" \
145 -s "$MVN_SETTINGS" \
146 -Dmaven.repo.local="$WORKSPACE/.repository" \
147 -Dmaven.compiler.fork=true \
148 -Dmaven.compiler.forceJavaCompilerUse=true \
149 -Dmaven.test.skip=true \
150 -DskipTests \
151 clean verify
152 ;;
153 autotools)
154 # Prepare build dir for autotools based projects
155 if [ -f "./bootstrap" ]; then
156 ./bootstrap
157 ./configure "${CONF_OPTS[@]}"
158 fi
159
160 cov-build --dir "$RESULTS_DIR" ${COVERITY_SCAN_BUILD_OPTIONS[@]} make -j"$NPROC" V=1
161 ;;
162 *)
163 echo "Unsupported build type: $BUILD_TYPE"
164 exit 1
165 ;;
166 esac
167
168
169
170 cov-import-scm --dir "$RESULTS_DIR" --scm git --log "$RESULTS_DIR/scm_log.txt"
171
172 cd "${WORKSPACE}"
173
174 # Tar results
175 echo -e "\033[33;1mTarring Coverity Scan Analysis results...\033[0m"
176 tar czf $RESULTS_ARCHIVE $RESULTS_DIR_NAME
177
178 # Upload results
179 echo -e "\033[33;1mUploading Coverity Scan Analysis results...\033[0m"
180 set +x
181 response=$(curl \
182 --silent --write-out "\n%{http_code}\n" \
183 --form project="$COVERITY_SCAN_PROJECT_NAME" \
184 --form token="$COVERITY_SCAN_TOKEN" \
185 --form email="$COVERITY_SCAN_NOTIFICATION_EMAIL" \
186 --form file=@"$RESULTS_ARCHIVE" \
187 --form version="$COVERITY_SCAN_VERSION" \
188 --form description="$COVERITY_SCAN_DESCRIPTION" \
189 "$UPLOAD_URL")
190 set -x
191 status_code=$(echo "$response" | sed -n '$p')
192 if [ "${status_code:0:1}" == "2" ]; then
193 echo -e "\033[33;1mCoverity Scan upload successful.\033[0m"
194 else
195 TEXT=$(echo "$response" | sed '$d')
196 echo -e "\033[33;1mCoverity Scan upload failed: $TEXT.\033[0m"
197 exit 1
198 fi
199
200 # EOF
This page took 0.035322 seconds and 3 git commands to generate.