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: ¶llel_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 318' GROUP: 13 - DISTRO: 'alpine 319' GROUP: 14 - DISTRO: 'alpine 320' GROUP: 15 - DISTRO: 'alpine 321' GROUP: 16 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: 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}";