KasmVNC/.gitlab-ci.yml
2026-05-08 18:22:13 +00:00

322 lines
8.6 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
DEBIAN_STABLE_IMAGE: debian:trixie-slim
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG}
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
- echo "$DOCKER_HUB_PASSWORD" | docker login --username $DOCKER_HUB_USERNAME --password-stdin
.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
.parallel_matrix: &parallel_matrix
matrix:
- DISTRO: 'ubuntu focal'
GROUP: 0
- DISTRO: 'ubuntu jammy'
GROUP: 1
- DISTRO: 'ubuntu noble'
GROUP: 2
- DISTRO: 'debian bullseye'
GROUP: 3
- DISTRO: 'debian bookworm'
GROUP: 4
- DISTRO: 'debian trixie'
GROUP: 5
- DISTRO: 'kali kali-rolling'
GROUP: 6
- DISTRO: 'oracle 8'
GROUP: 7
- DISTRO: 'oracle 9'
GROUP: 8
- DISTRO: 'opensuse 15'
GROUP: 9
- DISTRO: 'opensuse 16'
GROUP: 10
- DISTRO: 'fedora 42'
GROUP: 11
- DISTRO: 'fedora 43'
GROUP: 12
- DISTRO: 'alpine 321'
GROUP: 13
- DISTRO: 'alpine 322'
GROUP: 14
- DISTRO: 'alpine 323'
GROUP: 15
default:
retry: 2
tags:
- oci-fixed-amd
# functional_test:
# stage: functional_test
# image: $DEBIAN_STABLE_IMAGE
# tags:
# - oci-fixed-amd
# before_script:
# - *prepare_build
# - . .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
# rules:
# # Allow functional tests to fail on feature branches.
# - if: '$CI_COMMIT_REF_NAME =~ /^feature\//'
# allow_failure: true
# when: on_success
#
# # Fail pipeline on all other branches, if functional tests fail.
# - when: on_success
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_STABLE_IMAGE
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/
resource_group: "concurrent_$GROUP"
parallel:
*parallel_matrix
build_arm64:
stage: build
allow_failure: true
image: $DEBIAN_STABLE_IMAGE
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/
resource_group: "concurrent_$GROUP"
parallel:
*parallel_matrix
# run_test_amd64:
# stage: run_test
# image: $DEBIAN_STABLE_IMAGE
# 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:
# *parallel_matrix
#
# run_test_arm64:
# stage: run_test
# image: $DEBIAN_STABLE_IMAGE
# 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:
# when: always
# paths:
# - run_test/core_dumps/*/core
# reports:
# junit:
# - run_test/*.xml
# parallel:
# *parallel_matrix
# spec_test:
# stage: test
# image: $DEBIAN_STABLE_IMAGE
# tags:
# - kasmvnc-x86
# before_script:
# - *prepare_build
# artifacts:
# reports:
# junit:
# - SelfBench.xml
# - Benchmark.xml
# script:
# - builder/test-vncserver
upload:
stage: upload
image: $DEBIAN_STABLE_IMAGE
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_STABLE_IMAGE
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}";