-
Notifications
You must be signed in to change notification settings - Fork 40
129 lines (110 loc) · 5.03 KB
/
Copy pathcpp-tools.yml
File metadata and controls
129 lines (110 loc) · 5.03 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
name: C++ Tools
# Called by top-level ci.yml
on:
workflow_call: {}
workflow_dispatch: {}
permissions:
contents: read
jobs:
clang-format:
name: clang-format
runs-on: ubuntu-latest
continue-on-error: false
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# Initialize only cpp-tools below; formatting still scans project C++ paths.
fetch-depth: 1
- name: Initialize cpp-tools
run: git submodule update --init cpp-tools
- name: Install shared clang-format configuration
run: ./cpp-tools/install.sh clang-format --repo-root "$GITHUB_WORKSPACE"
- name: Install clang-format 22
run: |
set -eux
# Pin clang-format 22 to match the current macOS Homebrew LLVM
# Ubuntu 24.04's default clang-format ships with LLVM 18
sudo install -m 0755 -d /etc/apt/keyrings
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo tee /etc/apt/keyrings/llvm.asc >/dev/null
sudo chmod a+r /etc/apt/keyrings/llvm.asc
codename=$(lsb_release -cs)
echo "deb [signed-by=/etc/apt/keyrings/llvm.asc] http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-22 main" \
| sudo tee /etc/apt/sources.list.d/llvm-22.list >/dev/null
sudo apt-get update
sudo apt-get install -y clang-format-22
sudo ln -sf /usr/bin/clang-format-22 /usr/local/bin/clang-format
clang-format --version
- name: Run clang-format
env:
FORMAT_BLOB_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: ./scripts/clang-format.sh
clang-tidy:
name: clang-tidy
runs-on: ubuntu-latest
continue-on-error: false
timeout-minutes: 45
steps:
- name: Checkout (with submodules)
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
submodules: recursive
fetch-depth: 1
- name: Install shared clang-tidy configuration
run: ./cpp-tools/install.sh clang-tidy --repo-root "$GITHUB_WORKSPACE"
- name: Install dependencies
run: |
set -eux
sudo apt-get update
sudo apt-get install -y \
build-essential cmake ninja-build pkg-config \
llvm-dev libclang-dev clang \
libglib2.0-dev libssl-dev libcurl4-openssl-dev \
wget ca-certificates gnupg
- name: Install clang-tidy 19 and clang 21
run: |
set -eux
# Ubuntu 24.04 apt ships clang-tidy 18, which doesn't understand
# ExcludeHeaderFilterRegex (added in 19). Pull clang-tidy 19 from
# the upstream LLVM apt repository. libwebrtc requires clang 21+.
sudo install -m 0755 -d /etc/apt/keyrings
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo tee /etc/apt/keyrings/llvm.asc >/dev/null
sudo chmod a+r /etc/apt/keyrings/llvm.asc
codename=$(lsb_release -cs)
echo "deb [signed-by=/etc/apt/keyrings/llvm.asc] http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-19 main" \
| sudo tee /etc/apt/sources.list.d/llvm-19.list >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/llvm.asc] http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}-21 main" \
| sudo tee /etc/apt/sources.list.d/llvm-21.list >/dev/null
sudo apt-get update
sudo apt-get install -y clang-tidy-19 clang-tools-19 clang-21 libclang-21-dev
sudo ln -sf /usr/bin/clang-tidy-19 /usr/local/bin/clang-tidy
sudo ln -sf /usr/bin/run-clang-tidy-19 /usr/local/bin/run-clang-tidy
clang-tidy --version
run-clang-tidy --help >/dev/null
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772
with:
toolchain: stable
- name: Set Linux build environment
run: |
echo "CXXFLAGS=-Wno-deprecated-declarations" >> "$GITHUB_ENV"
echo "CFLAGS=-Wno-deprecated-declarations" >> "$GITHUB_ENV"
echo "CC=/usr/bin/clang-21" >> "$GITHUB_ENV"
echo "CXX=/usr/bin/clang++-21" >> "$GITHUB_ENV"
echo "LIBCLANG_PATH=/usr/lib/llvm-21/lib" >> "$GITHUB_ENV"
- name: Configure compilation database
run: cmake --preset linux-release
- name: Generate protobuf headers
run: cmake --build build-release --target livekit_proto
- name: Generate UniFFI C++ bindings
run: cmake --build build-release --target generate_livekit_ffi_uniffi_cpp
- name: Run clang-tidy
env:
TIDY_BLOB_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
# This script is intended to be run locally and in CI. It will auto-detect
# the GHA environment and add PR annotations and a run summary.
# As of writing all warnings are treateded as errors to avoid tech debt build up
run: ./scripts/clang-tidy.sh --fail-on-warning