Live video on the AT Protocol
1include: ".ci/dockerfile-hash.yaml"
2
3variables:
4 DOCKER_REPO: "us-central1-docker.pkg.dev/aquareum-tv/streamplace/build"
5
6build-bunny:
7 stage: build
8 interruptible: true
9 image:
10 name: gcr.io/kaniko-project/executor:v1.14.0-debug
11 entrypoint: [""]
12 timeout: 2 hours
13 script:
14 - mkdir -p /kaniko/.docker
15 - cp "$DOCKER_AUTH_CONFIG" /kaniko/.docker/config.json
16 - /kaniko/executor
17 --context "${CI_PROJECT_DIR}/docker"
18 --dockerfile "${CI_PROJECT_DIR}/docker/bunny.Dockerfile"
19 --destination "$DOCKER_REPO:bunny"
20
21builder:
22 stage: build
23 interruptible: true
24 allow_failure: true
25 image:
26 name: gcr.io/kaniko-project/executor:v1.14.0-debug
27 entrypoint: [""]
28 variables:
29 FQ_IMAGE_NAME: "$DOCKER_REPO:builder-$DOCKERFILE_HASH"
30 TARGET: builder
31 timeout: 2 hours
32 script:
33 - mkdir -p /kaniko/.docker
34 - cp "$DOCKER_AUTH_CONFIG" /kaniko/.docker/config.json
35 - /kaniko/executor
36 --build-arg TARGETARCH=amd64
37 --build-arg DOCKERFILE_HASH=$DOCKERFILE_HASH
38 --cache=true
39 --context "${CI_PROJECT_DIR}"
40 --dockerfile "${CI_PROJECT_DIR}/docker/build.Dockerfile"
41 --destination "$FQ_IMAGE_NAME"
42 --target "$TARGET"
43
44builder-rebuild:
45 tags:
46 - tiny-job
47 stage: build
48 allow_failure: true
49 interruptible: true
50 image:
51 name: curlimages/curl:latest
52 entrypoint: [""]
53 needs:
54 - job: builder
55 timeout: 2 hours
56 script:
57 - echo "CI_PIPELINE_ID=$CI_PIPELINE_ID"
58 - echo "CI_PIPELINE_ID=$CI_PIPELINE_IID"
59 - echo "CI_PROJECT_ID=$CI_PROJECT_ID"
60 - >
61 curl
62 --data-raw '{"project_id": "'$CI_PROJECT_ID'", "pipeline_id": "'$CI_PIPELINE_ID'", "job_token": "'$CI_JOB_TOKEN'"}'
63 --fail-with-body
64 https://retry-gitlab.iameli.workers.dev/
65
66.build:
67 stage: build
68 interruptible: true
69 image: "$DOCKER_REPO:builder-$DOCKERFILE_HASH"
70 timeout: 2 hours
71 script:
72 - rm -rf /usr/x86_64-w64-mingw32/include/d3dcompiler.h /usr/share/mingw-w64/include/d3dcompiler.h /usr/lib/gcc/x86_64-w64-mingw32/10-posix/libssp.dll.a /usr/lib/gcc/x86_64-w64-mingw32/10-posix/libssp-0.dll /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp-0.dll /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp.dll.a
73 - git fetch --unshallow || echo 'already unshallow'
74 - bash -c "make version && make app && make $TARGET && make desktop-$TARGET && make ci-upload-node-$TARGET -j$(nproc)"
75 artifacts:
76 reports:
77 dotenv: .ci/build.env
78
79build-linux-amd64:
80 extends:
81 - .build
82 variables:
83 TARGET: linux-amd64
84
85build-linux-arm64:
86 extends:
87 - .build
88 variables:
89 TARGET: linux-arm64
90
91build-windows-amd64:
92 extends:
93 - .build
94 variables:
95 TARGET: windows-amd64
96
97build-darwin-arm64:
98 extends:
99 - .build
100 variables:
101 TARGET: darwin-arm64
102
103build-darwin-amd64:
104 extends:
105 - .build
106 variables:
107 TARGET: darwin-amd64
108
109leak-test-viewers:
110 stage: build
111 interruptible: true
112 needs:
113 - job: build-linux-amd64
114 artifacts: true
115 - job: build-bunny
116 image:
117 name: "$DOCKER_REPO:bunny"
118 variables:
119 SP_WIDE_OPEN: "true"
120 SP_NO_FIREHOSE: "true"
121 SP_WHIP_TEST: "--file=/bunny.mp4 --count=1 --viewers=50 --duration=5m"
122 KUBERNETES_MEMORY_REQUEST: "2Gi"
123 KUBERNETES_MEMORY_LIMIT: "2Gi"
124 GOGC: "20"
125 GOMEMLIMIT: "2GiB"
126 timeout: "10 minutes"
127 allow_failure: true
128 script:
129 - /bunny.sh
130
131leak-test-streamers:
132 stage: build
133 interruptible: true
134 needs:
135 - job: build-linux-amd64
136 artifacts: true
137 - job: build-bunny
138 image:
139 name: "$DOCKER_REPO:bunny"
140 variables:
141 SP_WIDE_OPEN: "true"
142 SP_NO_FIREHOSE: "true"
143 SP_WHIP_TEST: "--file=/bunny.mp4 --count=10 --duration=5m"
144 KUBERNETES_MEMORY_REQUEST: "2Gi"
145 KUBERNETES_MEMORY_LIMIT: "2Gi"
146 GOGC: "20"
147 GOMEMLIMIT: "2GiB"
148 timeout: "10 minutes"
149 allow_failure: true
150 script:
151 - /bunny.sh
152
153test:
154 stage: build
155 interruptible: true
156 image: "$DOCKER_REPO:builder-$DOCKERFILE_HASH"
157 timeout: 2 hours
158 variables:
159 STREAMPLACE_TEST_COUNT: "1"
160 script:
161 - git fetch --unshallow || echo 'already unshallow'
162 - make dev-setup && make dev-test && make ci-lexicons
163
164build-docker-mistserver:
165 stage: build
166 interruptible: true
167 needs:
168 - job: build-linux-amd64
169 artifacts: true
170 image:
171 name: gcr.io/kaniko-project/executor:v1.14.0-debug
172 entrypoint: [""]
173 timeout: 2 hours
174 script:
175 - mkdir -p /kaniko/.docker
176 - cp "$DOCKER_AUTH_CONFIG" /kaniko/.docker/config.json
177 - /kaniko/executor
178 --build-arg TARGETARCH=amd64
179 --build-arg STREAMPLACE_URL=$STREAMPLACE_URL_LINUX_AMD64
180 --context "${CI_PROJECT_DIR}"
181 --dockerfile "${CI_PROJECT_DIR}/docker/mistserver.Dockerfile"
182 --destination "$DOCKER_REPO:$STREAMPLACE_BRANCH-mistserver"
183 --destination "$DOCKER_REPO:$STREAMPLACE_VERSION-mistserver"
184
185build-docker-amd64:
186 stage: build
187 interruptible: true
188 needs:
189 - job: build-linux-amd64
190 artifacts: true
191 image:
192 name: gcr.io/kaniko-project/executor:v1.14.0-debug
193 entrypoint: [""]
194 timeout: 2 hours
195 script:
196 - mkdir -p /kaniko/.docker
197 - cp "$DOCKER_AUTH_CONFIG" /kaniko/.docker/config.json
198 - /kaniko/executor
199 --build-arg TARGETARCH=amd64
200 --build-arg STREAMPLACE_URL=$STREAMPLACE_URL_LINUX_AMD64
201 --context "${CI_PROJECT_DIR}"
202 --dockerfile "${CI_PROJECT_DIR}/docker/release.Dockerfile"
203 --destination "$CI_REGISTRY_IMAGE:$STREAMPLACE_BRANCH-amd64"
204 --destination "$CI_REGISTRY_IMAGE:$STREAMPLACE_VERSION-amd64"
205 --destination "$DOCKER_REPO:$STREAMPLACE_BRANCH-amd64"
206 --destination "$DOCKER_REPO:$STREAMPLACE_VERSION-amd64"
207
208build-docker-arm64:
209 stage: build
210 interruptible: true
211 tags:
212 - linux
213 - arm64
214 needs:
215 - job: build-linux-arm64
216 artifacts: true
217 image:
218 name: gcr.io/kaniko-project/executor:v1.14.0-debug
219 entrypoint: [""]
220 timeout: 2 hours
221 script:
222 - mkdir -p /kaniko/.docker
223 - cp "$DOCKER_AUTH_CONFIG" /kaniko/.docker/config.json
224 - /kaniko/executor
225 --build-arg TARGETARCH=arm64
226 --build-arg STREAMPLACE_URL=$STREAMPLACE_URL_LINUX_ARM64
227 --context "${CI_PROJECT_DIR}"
228 --dockerfile "${CI_PROJECT_DIR}/docker/release.Dockerfile"
229 --destination "$CI_REGISTRY_IMAGE:$STREAMPLACE_BRANCH-arm64"
230 --destination "$CI_REGISTRY_IMAGE:$STREAMPLACE_VERSION-arm64"
231 --destination "$DOCKER_REPO:$STREAMPLACE_BRANCH-arm64"
232 --destination "$DOCKER_REPO:$STREAMPLACE_VERSION-arm64"
233 --customPlatform=linux/arm64
234
235build-docker-manifest:
236 stage: build
237 interruptible: true
238 image:
239 name: curlimages/curl:latest
240 entrypoint: [""]
241 needs:
242 - job: build-docker-arm64
243 - job: build-docker-amd64
244 - job: build-linux-amd64 # just for the environment variables
245 artifacts: true
246 before_script:
247 - curl -s -L https://github.com/estesp/manifest-tool/releases/download/v2.1.7/binaries-manifest-tool-2.1.7.tar.gz | tar xvz
248 - mv manifest-tool-linux-amd64 ./manifest-tool
249 - chmod +x ./manifest-tool
250 timeout: 2 hours
251 script:
252 - ./manifest-tool --username "${CI_REGISTRY_USER}" --password "${CI_REGISTRY_PASSWORD}" push from-args
253 --platforms linux/amd64,linux/arm64
254 --template $CI_REGISTRY_IMAGE:$STREAMPLACE_VERSION-ARCH
255 --tags $STREAMPLACE_BRANCH
256 --target $CI_REGISTRY_IMAGE:$STREAMPLACE_VERSION
257
258.build-android:
259 stage: build
260 interruptible: true
261 image: "$DOCKER_REPO:builder-$DOCKERFILE_HASH"
262 timeout: 2 hours
263 script:
264 - git fetch --unshallow || echo 'already unshallow'
265 - make $TARGET -j$(nproc)
266
267build-android-debug:
268 extends:
269 - .build-android
270 variables:
271 TARGET: ci-android-debug
272
273build-android-release:
274 extends:
275 - .build-android
276 variables:
277 TARGET: ci-android-release
278
279.build-on-mac:
280 stage: build
281 interruptible: true
282 image: macos-sonoma-xcode-big
283 tags:
284 - tart-installed
285 variables:
286 STREAMPLACE_TEST_COUNT: "1"
287 NODE_OPTIONS: "--max_old_space_size=4096"
288 timeout: 2 hours
289 script:
290 # workaround for https://gitlab.com/gitlab-org/gitlab/-/issues/501457
291 # which is a workaround for ios builds failing due to /tmp vs /private/tmp weirdness
292 - cd ..
293 - mv streamplace /Users/admin/streamplace
294 - cd /Users/admin/streamplace
295 - git fetch --unshallow || echo 'already unshallow'
296 - brew install ninja go openssl@3 && go version
297 - export PATH="/opt/homebrew/opt/node@22/bin:$PATH"
298 - brew install node@22
299 - node --version
300 - npm install -g corepack@latest --force
301 - corepack enable
302 - sudo gem uninstall xcodeproj -x --ignore-dependencies
303 - sudo gem install xcodeproj -v 1.25.1
304 - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && bash rustup.sh -y && rm rustup.sh
305 - export PATH="$PATH:$HOME/.cargo/bin"
306 - echo $PATH
307 - 'echo "which xcodeproj: $(which xcodeproj)"'
308 - 'echo "xcodeproj --version: $(xcodeproj --version)"'
309 - "$(which xcodeproj) --version"
310 - >
311 export GOTOOLCHAIN=go1.24.2
312 && python3 -m pip install virtualenv
313 && python3 -m virtualenv ~/venv
314 && source ~/venv/bin/activate
315 && python3 -m pip install meson
316 && ${=COMMAND}
317 # ^^ zsh-ism for running command with spaces
318
319build-ios:
320 extends:
321 - .build-on-mac
322 variables:
323 COMMAND: make ci-ios -j16
324
325build-desktop-darwin:
326 extends:
327 - .build-on-mac
328 needs:
329 - build-darwin-amd64
330 - build-darwin-arm64
331 variables:
332 COMMAND: make ci-desktop-darwin
333
334windows-selftest:
335 interruptible: true
336 stage: build
337 # for the moment...
338 tags:
339 - windows
340 timeout: 2 hours
341 needs:
342 - job: build-windows-amd64
343 artifacts: true
344 variables:
345 MSYSTEM: "MINGW32"
346 CHERE_INVOKING: "yes"
347 script:
348 - C:\msys64\usr\bin\bash -lc "bash -x ./util/windows-selftest.sh $STREAMPLACE_DESKTOP_URL_WINDOWS_AMD64"
349
350.release-template:
351 stage: build
352 interruptible: true
353 image: "$DOCKER_REPO:builder-$DOCKERFILE_HASH"
354 needs:
355 - build-darwin-amd64
356 - build-darwin-arm64
357 - build-android-debug
358 - build-android-release
359 - build-docker-amd64
360 - build-docker-arm64
361 - build-docker-manifest
362 - build-desktop-darwin
363 - test
364 rules:
365 - if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
366 timeout: 2 hours
367
368npm-release:
369 extends:
370 - .release-template
371 script:
372 - make ci-npm-release
373
374release:
375 extends:
376 - .release-template
377 script:
378 - make ci-release
379
380.report-status:
381 tags:
382 - tiny-job
383 interruptible: true
384 image:
385 name: curlimages/curl
386 entrypoint: [""]
387 variables:
388 STATUS_PROJECT: streamplace/streamplace
389 STATUS_NAME: git.stream.place
390 script:
391 # For complete details on the GitHub API please see:
392 # https://developer.github.com/v3/repos/statuses
393 - >
394 set -eu && curl -L
395 --fail-with-body
396 --silent
397 -X POST
398 -H "Accept: application/vnd.github+json"
399 -H "Authorization: Bearer $GITHUB_TOKEN"
400 -H "X-GitHub-Api-Version: 2022-11-28"
401 https://api.github.com/repos/${STATUS_PROJECT}/statuses/${CI_COMMIT_SHA}
402 -d '{"state":"'${CI_JOB_NAME}'","target_url":"'${CI_PIPELINE_URL}'","description":"'${STATUS_NAME}'","context":"'${STATUS_NAME}'"}'
403 environment:
404 name: reporting-github
405 dependencies: []
406
407pending:
408 stage: .pre
409 extends:
410 - .report-status
411
412success:
413 stage: .post
414 extends:
415 - .report-status
416
417failure:
418 stage: .post
419 extends:
420 - .report-status
421 rules:
422 - when: on_failure