KasmVNC/.gitlab-ci.yml
2025-08-15 15:08:08 +12:00

277 lines
8.2 KiB
YAML

image: docker
services:
- docker:dind
variables:
DEBUG: true
KASMVNC_COMMIT_ID: $CI_COMMIT_SHA
GITLAB_SHARED_DIND_DIR: /builds/$CI_PROJECT_PATH/shared
GIT_SUBMODULE_STRATEGY: recursive
GIT_SUBMODULE_FORCE_HTTPS: "true"
GIT_FETCH_EXTRA_FLAGS: --tags --force
# For example, BUILD_DISTROS_REGEX: "jammy|focal".
# "BUILD_DISTROS_REGEX: none" won't build any distros, nor www.
# "BUILD_DISTROS_REGEX: all" would build all distros.
# Make sure you quote any whitespace characters you use.
# E.g. BUILD_DISTROS_REGEX: "jammy|\ focal".
BUILD_DISTROS_REGEX: all
# To debug upload stage, you can limit BUILD_DISTROS_REGEX to jammy and allow
# run_test distros to fail, by setting ALLOW_RUN_TESTS_TO_FAIL to true.
ALLOW_RUN_TESTS_TO_FAIL: false
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
workflow:
rules:
# Disable tag builds.
- if: $CI_COMMIT_TAG != $CI_COMMIT_REF_NAME && $CI_PIPELINE_SOURCE != "merge_request_event"
stages:
- www
- build
- functional_test
- run_test
- test
- upload
.prepare_build: &prepare_build
- pwd
- mkdir -p "$GITLAB_SHARED_DIND_DIR" && chmod 777 "$GITLAB_SHARED_DIND_DIR"
- apt-get update && apt-get install -y docker.io
- docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
.prepare_www: &prepare_www
- tar -zxf output/www/kasm_www.tar.gz -C builder/
.prepare_artfacts: &prepare_artfacts
- cp -r builder/build/* output/
- rm output/*.tar.gz
.enable_core_dumps: &enable_core_dumps
- echo core > /proc/sys/kernel/core_pattern
default:
tags:
- oci-fixed-amd
functional_test:
stage: functional_test
image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- . .ci/helpers.sh
script:
- prepare_to_run_functional_tests
- set +e; ./functional-test; exit_code=$?; set -e
- upload_report_to_s3
- put_report_into_ci_pipeline "$exit_code"
- exit "$exit_code"
dependencies:
- build_amd64
artifacts:
paths:
- kasmvnc-functional-tests/output/
reports:
junit:
- kasmvnc-functional-tests/report/*.xml
build_www:
stage: www
allow_failure: false
tags:
- oci-fixed-amd
before_script:
- *prepare_build
script:
- webpacked_www=$PWD/builder/www
- src_www=kasmweb
- docker build -t kasmweb/www -f builder/dockerfile.www.build .
- docker run --rm -v $PWD/builder/www:/build kasmweb/www:latest
- mkdir -p output/www
- cd builder
- echo $PWD
- ls -l
- ls -l ../output
- tar -zcvf ../output/www/kasm_www.tar.gz www
only:
variables:
- $BUILD_DISTROS_REGEX !~ /^none$/
artifacts:
paths:
- output/
build_amd64:
stage: build
allow_failure: true
image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- *prepare_build
- *prepare_www
- . .ci/helpers.sh
after_script:
- *prepare_artfacts
script:
- set -e
- is_build_this_distro "$DISTRO" && builder/build-package $DISTRO
artifacts:
paths:
- output/
parallel:
matrix:
- DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
build_arm64:
stage: build
allow_failure: true
image: debian:bookworm-slim
tags:
- oci-fixed-arm
before_script:
- *prepare_build
- *prepare_www
- . .ci/helpers.sh
after_script:
- *prepare_artfacts
script:
- set -e
- is_build_this_distro "$DISTRO" && builder/build-package $DISTRO
artifacts:
paths:
- output/
parallel:
matrix:
- DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
run_test_amd64:
stage: run_test
image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- *prepare_build
- *enable_core_dumps
- . .ci/helpers.sh
script:
- set -e
- is_build_this_distro "$DISTRO" && builder/test-barebones --run-test $DISTRO
rules:
- if: $ALLOW_RUN_TESTS_TO_FAIL == "false"
- if: $ALLOW_RUN_TESTS_TO_FAIL == "true"
allow_failure: true
dependencies:
- build_amd64
artifacts:
when: always
paths:
- run_test/core_dumps/*/core
reports:
junit:
- run_test/*.xml
parallel:
matrix:
- DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
run_test_arm64:
stage: run_test
image: debian:bookworm-slim
tags:
- oci-fixed-arm
before_script:
- *prepare_build
- *enable_core_dumps
- . .ci/helpers.sh
script:
- set -e
- is_build_this_distro "$DISTRO" && builder/test-barebones --run-test $DISTRO
rules:
- if: $ALLOW_RUN_TESTS_TO_FAIL == "false"
- if: $ALLOW_RUN_TESTS_TO_FAIL == "true"
allow_failure: true
dependencies:
- build_arm64
artifacts:
artifacts:
when: always
paths:
- run_test/core_dumps/*/core
reports:
junit:
- run_test/*.xml
parallel:
matrix:
- DISTRO: [ 'ubuntu focal', 'ubuntu jammy', 'ubuntu noble', 'debian bullseye', 'debian bookworm', 'debian trixie', 'kali kali-rolling', 'oracle 8', 'oracle 9', 'opensuse 15', 'fedora forty', 'fedora fortyone', 'alpine 318', 'alpine 319', 'alpine 320', 'alpine 321' ]
spec_test:
stage: test
image: debian:bookworm-slim
tags:
- kasmvnc-x86
before_script:
- *prepare_build
artifacts:
reports:
junit:
- SelfBench.xml
- Benchmark.xml
script:
- builder/test-vncserver
upload:
stage: upload
image: debian:bookworm-slim
tags:
- oci-fixed-amd
artifacts:
paths:
- output/
before_script:
- . .ci/helpers.sh
script:
- prepare_to_run_scripts_and_s3_uploads
- S3_CRASHPAD_BUILD_DIRECTORY="kasmvnc/crashpad/${CI_COMMIT_SHA}"
- for dbgsym_package in `find output/ -type f -name '*dbgsym*deb'`; do
deb_package=$(find_deb_package "$dbgsym_package");
xvnc_md5sum=$(fetch_xvnc_md5sum "$deb_package");
upload_filename="${S3_CRASHPAD_BUILD_DIRECTORY}/${xvnc_md5sum}/kasmvncserver-dbgsym.deb";
echo;
echo "File to upload $upload_filename";
upload_to_s3 "$dbgsym_package" "$upload_filename" "$S3_BUCKET";
rm "$dbgsym_package";
done
- export S3_BUILD_DIRECTORY="kasmvnc/${CI_COMMIT_SHA}"
- export RELEASE_VERSION=$(.ci/next_release_version "$CI_COMMIT_REF_NAME")
- uploaded_files=()
- for package in `find output/ -type f -name '*.deb' -or -name '*.rpm' -or -name '*.apk'`; do
prepare_upload_filename "$package";
upload_filename="${S3_BUILD_DIRECTORY}/$upload_filename";
echo;
echo "File to upload $upload_filename";
upload_to_s3 "$package" "$upload_filename" "$S3_BUCKET";
UPLOAD_NAME=$(basename $upload_filename | sed 's#kasmvncserver_##' | sed -r 's#_([0-9]{1,3}\.){2}[0-9]{1,2}_\S+?([a-f0-9]{6})##' | sed -r 's#\.(deb|rpm|tgz)##');
curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=${UPLOAD_NAME}&target_url=${S3_URL}";
uploaded_files+=("$upload_filename");
done
- make_index_html "${uploaded_files[@]}" > output/index.html;
upload_build_preview:
stage: upload
needs: ["upload"]
dependencies: ["upload"]
image: debian:bookworm-slim
tags:
- oci-fixed-amd
before_script:
- . .ci/helpers.sh
resource_group: upload_build_preview
only:
variables:
- $CI_COMMIT_BRANCH == 'master'
script:
- prepare_to_run_scripts_and_s3_uploads
- preview_builds_dir=kasmvnc/preview-builds
- upload_to_s3 "output/index.html" "$preview_builds_dir/index.html" "$S3_BUCKET"
- curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=success&name=index.html&target_url=${S3_URL}";