-
Notifications
You must be signed in to change notification settings - Fork 87
132 lines (118 loc) · 4.97 KB
/
Copy pathci-linux-coverity.yml
File metadata and controls
132 lines (118 loc) · 4.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: CI Linux Coverity
on:
push:
branches:
- master
paths:
- 'include/sys/*'
- 'src/common/*'
- 'src/linux/*'
- 'test/*'
- '.github/workflows/ci-linux-coverity.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
linux-build-and-test:
if: github.repository == 'mheily/libkqueue'
timeout-minutes: 10
strategy:
fail-fast: false
runs-on: ubuntu-24.04
name: "ci-linux-coverity"
steps:
- uses: actions/checkout@v5
- name: Install build deps
run: |
sudo apt-get install -y \
build-essential \
devscripts \
fakeroot \
gridsite-clients
- name: Set environment
run: |
sudo apt-get install -y --no-install-recommends curl gpg lsb-release
MYREL="`lsb_release -c | grep ^Codename | awk '{print $2}'`"
echo "CLANG_VER=20" >> ${GITHUB_ENV}
echo "MYREL=${MYREL}" >> ${GITHUB_ENV}
- name: Add llvm source
uses: myci-actions/add-deb-repo@10
with:
repo: deb http://apt.llvm.org/${{ env.MYREL }}/ llvm-toolchain-${{ env.MYREL }}-${{ env.CLANG_VER }} main
repo-name: llvm-toolchain
keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key
# Coverity's download endpoint 404s when the project is unpublished or
# the token is missing/rotated. Treat that as "scan unavailable" and
# skip the rest of the job (it stays green) instead of failing the run.
- name: Download coverity tool MD5
id: coverity-md5
run: |
if wget https://scan.coverity.com/download/linux64 \
--post-data "token=${TOKEN}&project=`urlencode ${GITHUB_REPOSITORY}`&md5=1" \
-O coverity_tool.tar.gz.md5 && [ -s coverity_tool.tar.gz.md5 ]; then
echo "available=true" >> "$GITHUB_OUTPUT"
else
echo "available=false" >> "$GITHUB_OUTPUT"
echo "::warning::Coverity tool download failed; skipping scan"
fi
env:
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
- name: Cache coverity tool
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
uses: actions/cache@v4
id: cache-coverity
with:
path: coverity_tool.tar.gz
key: coverity-tool-cache-${{ hashFiles('coverity_tool.tar.gz.md5') }}
- name: Download coverity tool
if: ${{ steps.coverity-md5.outputs.available == 'true' && steps.cache-coverity.outputs.cache-hit != 'true' }}
run: |
wget https://scan.coverity.com/download/linux64 \
--post-data "token=${TOKEN}&project=`urlencode ${GITHUB_REPOSITORY}`" \
-O coverity_tool.tar.gz
env:
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
- name: Extract coverity tool
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
mkdir coverity_tool
tar xzf coverity_tool.tar.gz --strip 1 -C coverity_tool
- name: Install LLVM ${{ env.CLANG_VER }}
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
sudo apt-get install -y --no-install-recommends clang-${{ env.CLANG_VER }} llvm-${{ env.CLANG_VER }} libclang-rt-${{ env.CLANG_VER }}-dev
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ env.CLANG_VER }} 60 && sudo update-alternatives --set clang /usr/bin/clang-${{ env.CLANG_VER }}
sudo update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${{ env.CLANG_VER }} 60 && sudo update-alternatives --set llvm-symbolizer /usr/bin/llvm-symbolizer-${{ env.CLANG_VER }}
- name: Configure build system
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
cmake . -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="/usr" \
-DCMAKE_INSTALL_LIBDIR="lib" \
-DCMAKE_VERBOSE_MAKEFILE:BOOL="ON" \
-DENABLE_TESTING="YES" \
-DCMAKE_BUILD_TYPE="Debug"
- name: Build libkqueue
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
export PATH=`pwd`/coverity_tool/bin:$PATH
export CC=clang
cov-configure --template --compiler clang --comptype clangcc
cov-build --dir cov-int make
- name: Display build result
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
cat /home/runner/work/libkqueue/libkqueue/cov-int/build-log.txt
- name: Submit result
if: ${{ steps.coverity-md5.outputs.available == 'true' }}
run: |
tar czf cov-int.tar.gz cov-int
curl \
--form token="$TOKEN" \
--form email="a.cudbardb@freeradius.org" \
--form file=@cov-int.tar.gz \
--form version="`grep LIBKQUEUE_VERSION_STRING version.h | cut -w -f 3 | sed -e 's/"//g'`" \
--form description="${GITHUB_REPOSITORY}" \
https://scan.coverity.com/builds?project=`urlencode ${GITHUB_REPOSITORY}`
env:
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}