Skip to content

Commit 3fbacd1

Browse files
Merge branch 'main' of github.com:livekit/client-sdk-cpp into feature/clang-tidy
2 parents 13e9948 + c2684b7 commit 3fbacd1

76 files changed

Lines changed: 1102 additions & 8059 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/builds.yml

Lines changed: 188 additions & 76 deletions
Large diffs are not rendered by default.
Lines changed: 363 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,363 @@
1+
name: Docker Images
2+
3+
on:
4+
push:
5+
branches: ["main"]
6+
paths:
7+
- src/**
8+
- include/**
9+
- bridge/**
10+
- client-sdk-rust/**
11+
- CMakeLists.txt
12+
- build.sh
13+
- build.cmd
14+
- build.h.in
15+
- CMakePresets.json
16+
- cmake/**
17+
- data/**
18+
- docker/Dockerfile.base
19+
- docker/Dockerfile.sdk
20+
21+
permissions:
22+
contents: read
23+
packages: write
24+
25+
jobs:
26+
detect-changes:
27+
name: Detect Docker image changes
28+
runs-on: ubuntu-latest
29+
outputs:
30+
base_changed: ${{ steps.changes.outputs.base_changed }}
31+
sdk_changed: ${{ steps.changes.outputs.sdk_changed }}
32+
base_hash: ${{ steps.hash.outputs.base_hash }}
33+
base_image: ${{ steps.refs.outputs.base_image }}
34+
sdk_image: ${{ steps.refs.outputs.sdk_image }}
35+
steps:
36+
- name: Checkout
37+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
38+
with:
39+
fetch-depth: 0
40+
41+
- name: Resolve GHCR image names
42+
id: refs
43+
shell: bash
44+
run: |
45+
set -euo pipefail
46+
owner="$(echo "${GITHUB_REPOSITORY_OWNER}" | tr '[:upper:]' '[:lower:]')"
47+
echo "base_image=ghcr.io/${owner}/client-sdk-cpp-base" >> "$GITHUB_OUTPUT"
48+
echo "sdk_image=ghcr.io/${owner}/client-sdk-cpp" >> "$GITHUB_OUTPUT"
49+
50+
- name: Hash base Dockerfile
51+
id: hash
52+
shell: bash
53+
run: |
54+
set -euo pipefail
55+
base_hash="$(shasum -a 256 docker/Dockerfile.base | awk '{print substr($1,1,12)}')"
56+
echo "base_hash=${base_hash}" >> "$GITHUB_OUTPUT"
57+
58+
- name: Detect changed inputs
59+
id: changes
60+
shell: bash
61+
run: |
62+
set -euo pipefail
63+
64+
if [[ "${{ github.event.before }}" == "0000000000000000000000000000000000000000" ]]; then
65+
changed_files="$(git ls-tree -r --name-only "${{ github.sha }}")"
66+
else
67+
changed_files="$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}")"
68+
fi
69+
70+
echo "Changed files:"
71+
if [[ -n "${changed_files}" ]]; then
72+
while IFS= read -r path; do
73+
[[ -z "${path}" ]] && continue
74+
echo " ${path}"
75+
done <<< "${changed_files}"
76+
else
77+
echo " <none>"
78+
fi
79+
80+
base_changed=false
81+
sdk_changed=false
82+
83+
while IFS= read -r path; do
84+
[[ -z "${path}" ]] && continue
85+
86+
if [[ "${path}" == "docker/Dockerfile.base" ]]; then
87+
base_changed=true
88+
sdk_changed=true
89+
fi
90+
91+
case "${path}" in
92+
docker/Dockerfile.sdk|src/*|include/*|bridge/*|client-sdk-rust/*|cmake/*|data/*|CMakeLists.txt|build.sh|build.cmd|build.h.in|CMakePresets.json)
93+
sdk_changed=true
94+
;;
95+
esac
96+
done <<< "${changed_files}"
97+
98+
echo "base_changed=${base_changed}" >> "$GITHUB_OUTPUT"
99+
echo "sdk_changed=${sdk_changed}" >> "$GITHUB_OUTPUT"
100+
101+
build-base-amd64:
102+
name: Publish base image (amd64)
103+
runs-on: ubuntu-latest
104+
needs: detect-changes
105+
if: needs.detect-changes.outputs.base_changed == 'true'
106+
107+
steps:
108+
- name: Checkout
109+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
110+
111+
- name: Free disk space
112+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
113+
with:
114+
tool-cache: false
115+
android: true
116+
dotnet: true
117+
haskell: true
118+
large-packages: true
119+
docker-images: true
120+
swap-storage: true
121+
122+
- name: Set up Docker Buildx
123+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
124+
125+
- name: Login to GHCR
126+
shell: bash
127+
env:
128+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
129+
run: |
130+
set -euo pipefail
131+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
132+
133+
- name: Build and push base image
134+
shell: bash
135+
run: |
136+
set -euxo pipefail
137+
docker buildx build \
138+
--platform linux/amd64 \
139+
--push \
140+
-t "${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-amd64" \
141+
-t "${{ needs.detect-changes.outputs.base_image }}:base-main-amd64" \
142+
-f docker/Dockerfile.base \
143+
docker
144+
145+
build-base-arm64:
146+
name: Publish base image (arm64)
147+
runs-on: ubuntu-24.04-arm
148+
needs: detect-changes
149+
if: needs.detect-changes.outputs.base_changed == 'true'
150+
151+
steps:
152+
- name: Checkout
153+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
154+
155+
- name: Free disk space
156+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
157+
with:
158+
tool-cache: false
159+
android: true
160+
dotnet: true
161+
haskell: true
162+
large-packages: true
163+
docker-images: true
164+
swap-storage: true
165+
166+
- name: Set up Docker Buildx
167+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
168+
169+
- name: Login to GHCR
170+
shell: bash
171+
env:
172+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
173+
run: |
174+
set -euo pipefail
175+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
176+
177+
- name: Build and push base image
178+
shell: bash
179+
run: |
180+
set -euxo pipefail
181+
docker buildx build \
182+
--platform linux/arm64 \
183+
--push \
184+
-t "${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-arm64" \
185+
-t "${{ needs.detect-changes.outputs.base_image }}:base-main-arm64" \
186+
-f docker/Dockerfile.base \
187+
docker
188+
189+
publish-base-manifest:
190+
name: Publish base manifest
191+
runs-on: ubuntu-latest
192+
needs:
193+
- detect-changes
194+
- build-base-amd64
195+
- build-base-arm64
196+
if: needs.detect-changes.outputs.base_changed == 'true'
197+
198+
steps:
199+
- name: Set up Docker Buildx
200+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
201+
202+
- name: Login to GHCR
203+
shell: bash
204+
env:
205+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
206+
run: |
207+
set -euo pipefail
208+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
209+
210+
- name: Publish base manifest tags
211+
shell: bash
212+
run: |
213+
set -euxo pipefail
214+
docker buildx imagetools create \
215+
-t "${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}" \
216+
-t "${{ needs.detect-changes.outputs.base_image }}:base-main" \
217+
"${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-amd64" \
218+
"${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-arm64"
219+
220+
build-sdk-amd64:
221+
name: Publish SDK image (amd64)
222+
runs-on: ubuntu-latest
223+
needs:
224+
- detect-changes
225+
- build-base-amd64
226+
if: |
227+
always() &&
228+
needs.detect-changes.outputs.sdk_changed == 'true' &&
229+
needs.build-base-amd64.result != 'failure' &&
230+
needs.build-base-amd64.result != 'cancelled'
231+
232+
steps:
233+
- name: Checkout
234+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
235+
with:
236+
submodules: recursive
237+
fetch-depth: 0
238+
239+
- name: Free disk space
240+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
241+
with:
242+
tool-cache: false
243+
android: true
244+
dotnet: true
245+
haskell: true
246+
large-packages: true
247+
docker-images: true
248+
swap-storage: true
249+
250+
- name: Set up Docker Buildx
251+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
252+
253+
- name: Login to GHCR
254+
shell: bash
255+
env:
256+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
257+
run: |
258+
set -euo pipefail
259+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
260+
261+
- name: Build and push SDK image
262+
shell: bash
263+
run: |
264+
set -euxo pipefail
265+
docker buildx build \
266+
--platform linux/amd64 \
267+
--build-arg BASE_IMAGE="${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-amd64" \
268+
--push \
269+
-t "${{ needs.detect-changes.outputs.sdk_image }}:sha-${{ github.sha }}-amd64" \
270+
-t "${{ needs.detect-changes.outputs.sdk_image }}:main-amd64" \
271+
. \
272+
-f docker/Dockerfile.sdk
273+
274+
build-sdk-arm64:
275+
name: Publish SDK image (arm64)
276+
runs-on: ubuntu-24.04-arm
277+
needs:
278+
- detect-changes
279+
- build-base-arm64
280+
if: |
281+
always() &&
282+
needs.detect-changes.outputs.sdk_changed == 'true' &&
283+
needs.build-base-arm64.result != 'failure' &&
284+
needs.build-base-arm64.result != 'cancelled'
285+
286+
steps:
287+
- name: Checkout
288+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
289+
with:
290+
submodules: recursive
291+
fetch-depth: 0
292+
293+
- name: Free disk space
294+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
295+
with:
296+
tool-cache: false
297+
android: true
298+
dotnet: true
299+
haskell: true
300+
large-packages: true
301+
docker-images: true
302+
swap-storage: true
303+
304+
- name: Set up Docker Buildx
305+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
306+
307+
- name: Login to GHCR
308+
shell: bash
309+
env:
310+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
311+
run: |
312+
set -euo pipefail
313+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
314+
315+
- name: Build and push SDK image
316+
shell: bash
317+
run: |
318+
set -euxo pipefail
319+
docker buildx build \
320+
--platform linux/arm64 \
321+
--build-arg BASE_IMAGE="${{ needs.detect-changes.outputs.base_image }}:base-${{ needs.detect-changes.outputs.base_hash }}-arm64" \
322+
--push \
323+
-t "${{ needs.detect-changes.outputs.sdk_image }}:sha-${{ github.sha }}-arm64" \
324+
-t "${{ needs.detect-changes.outputs.sdk_image }}:main-arm64" \
325+
. \
326+
-f docker/Dockerfile.sdk
327+
328+
publish-sdk-manifest:
329+
name: Publish SDK manifest
330+
runs-on: ubuntu-latest
331+
needs:
332+
- detect-changes
333+
- build-sdk-amd64
334+
- build-sdk-arm64
335+
if: |
336+
always() &&
337+
needs.detect-changes.outputs.sdk_changed == 'true' &&
338+
needs.build-sdk-amd64.result != 'failure' &&
339+
needs.build-sdk-amd64.result != 'cancelled' &&
340+
needs.build-sdk-arm64.result != 'failure' &&
341+
needs.build-sdk-arm64.result != 'cancelled'
342+
343+
steps:
344+
- name: Set up Docker Buildx
345+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
346+
347+
- name: Login to GHCR
348+
shell: bash
349+
env:
350+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
351+
run: |
352+
set -euo pipefail
353+
echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
354+
355+
- name: Publish SDK manifest tags
356+
shell: bash
357+
run: |
358+
set -euxo pipefail
359+
docker buildx imagetools create \
360+
-t "${{ needs.detect-changes.outputs.sdk_image }}:sha-${{ github.sha }}" \
361+
-t "${{ needs.detect-changes.outputs.sdk_image }}:main" \
362+
"${{ needs.detect-changes.outputs.sdk_image }}:sha-${{ github.sha }}-amd64" \
363+
"${{ needs.detect-changes.outputs.sdk_image }}:sha-${{ github.sha }}-arm64"

0 commit comments

Comments
 (0)