diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f939828..f368bc8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,1049 +1,355 @@ +############ +# Settings # +############ image: docker services: - docker:dind -variables: - KASM_RELEASE: "1.13.0" - DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG} - PLATFORM: "linux/amd64" - ARM_BUILDS: ",chromium,firefox,gimp,remmina,terminal,ubuntu-bionic-desktop,ubuntu-focal-desktop,ubuntu-jammy-desktop,vlc,vs-code,doom,sublime-text,tor-browser,java-dev,telegram,opensuse-15-desktop,oracle-8-desktop,libre-office,thunderbird,audacity,deluge,filezilla,inkscape,pinta,qbittorrent,vivaldi,minetest,retroarch,super-tux-kart,ubuntu-focal-dind,ubuntu-focal-dind-rootless,ubuntu-jammy-dind,ubuntu-jammy-dind-rootless,almalinux-8-desktop,almalinux-9-desktop,alpine-317-desktop,debian-bullseye-desktop,fedora-37-desktop,kali-rolling-desktop,oracle-9-desktop,parrotos-5-desktop,rockylinux-8-desktop,rockylinux-9-desktop,brave," - CORE_IMAGE_TAG: "develop" - CORE_IMAGE: "core-ubuntu-focal" - USE_PRIVATE_IMAGES: 0 - -###################### -# YAML level anchors # -###################### -.MULTI_ARCH_BUILDS: &MULTI_ARCH_BUILDS - - audacity - - chromium - - deluge - - doom - - filezilla - - firefox - - gimp - - inkscape - - java-dev - - libre-office - - opensuse-15-desktop - - oracle-8-desktop - - pinta - - qbittorrent - - remmina - - sublime-text - - telegram - - terminal - - thunderbird - - tor-browser - - ubuntu-focal-desktop - - ubuntu-jammy-desktop - - vlc - - vs-code - -.MULTI_ARCH_BUILDS2: &MULTI_ARCH_BUILDS2 - - almalinux-8-desktop - - almalinux-9-desktop - - alpine-317-desktop - - brave - - debian-bullseye-desktop - - fedora-37-desktop - - kali-rolling-desktop - - minetest - - oracle-9-desktop - - parrotos-5-desktop - - retroarch - - rockylinux-8-desktop - - rockylinux-9-desktop - - super-tux-kart - - ubuntu-focal-dind - - ubuntu-focal-dind-rootless - - ubuntu-jammy-dind - - ubuntu-jammy-dind-rootless - - vivaldi - -.SINGLE_ARCH_BUILDS: &SINGLE_ARCH_BUILDS - - atom - - blender - - centos-7-desktop - - chrome - - desktop - - desktop-deluxe - - discord - - edge - - hunchly - - insomnia - - maltego - - only-office - - oracle-7-desktop - - postman - - remnux-focal-desktop - - signal - - steam - - tracelabs - - unityhub - - zoom - - zsnes - -.BROWSER_IMAGES: &BROWSER_IMAGES - - brave - - chrome - - chromium - - edge - - firefox - - tor-browser - - vivaldi - -.APP_IMAGES: &APP_IMAGES - - atom - - audacity - - blender - - deluge - - discord - - filezilla - - gimp - - hunchly - - inkscape - - insomnia - - java-dev - - libre-office - - maltego - - only-office - - pinta - - postman - - qbittorrent - - remmina - - signal - - steam - - sublime-text - - telegram - - terminal - - thunderbird - - unityhub - - vlc - - vs-code - - zoom - - zsnes - -.UBUNTU_IMAGES: &UBUNTU_IMAGES - - desktop - - desktop-deluxe - - remnux-focal-desktop - - ubuntu-focal-desktop - - ubuntu-jammy-desktop - - ubuntu-focal-dind - - ubuntu-focal-dind-rootless - - ubuntu-jammy-dind - - ubuntu-jammy-dind-rootless - -.NON_UBUNTU_IMAGES: &NON_UBUNTU_IMAGES - - almalinux-8-desktop - - almalinux-9-desktop - - alpine-317-desktop - - centos-7-desktop - - debian-bullseye-desktop - - kali-rolling-desktop - - opensuse-15-desktop - - oracle-7-desktop - - oracle-8-desktop - - oracle-9-desktop - - parrotos-5-desktop - - rockylinux-8-desktop - - rockylinux-9-desktop - - tracelabs - -.GAME_IMAGES: &GAME_IMAGES - - doom - - minetest - - retroarch - - super-tux-kart - stages: - readme + - revert - build - - manifest - test - - linktests - + - manifest +variables: + BASE_TAG: "develop" + USE_PRIVATE_IMAGES: 0 + KASM_RELEASE: "1.14.0" + DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG} + TEST_INSTALLER: "https://kasmweb-build-artifacts.s3.amazonaws.com/kasm_backend/642f6a032aacc41decd1d782262d1b59cec216c5/kasm_workspaces_develop_1.13.0.642f6a.tar.gz" before_script: - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD - export SANITIZED_BRANCH="$(echo $CI_COMMIT_REF_NAME | sed -r 's#^release/##' | sed 's/\//_/g')" - - export SANITIZED_ROLLING_BRANCH=${SANITIZED_BRANCH}-rolling -############################################################################################### -# Jobs for the develop and release branches. They should push to the private and public repos # -############################################################################################### -build_browser_images: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} based on ${CORE_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - only: - - develop - - /^release\/.*$/ - except: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *BROWSER_IMAGES +################ +# YAML anchors # +################ -build_app_images: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} based on ${CORE_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - only: - - develop - - /^release\/.*$/ - except: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *APP_IMAGES +# Metadata format - name|baseimage|dockerfile +.MULTI_ARCH_BUILDS: &MULTI_ARCH_BUILDS + - "audacity|core-ubuntu-focal|dockerfile-kasm-audacity" + - "chromium|core-ubuntu-focal|dockerfile-kasm-chromium" + - "deluge|core-ubuntu-focal|dockerfile-kasm-deluge" + - "doom|core-ubuntu-focal|dockerfile-kasm-doom" + - "filezilla|core-ubuntu-focal|dockerfile-kasm-filezilla" + - "firefox|core-ubuntu-focal|dockerfile-kasm-firefox" + - "gimp|core-ubuntu-focal|dockerfile-kasm-gimp" + - "inkscape|core-ubuntu-focal|dockerfile-kasm-inkscape" + - "java-dev|core-ubuntu-focal|dockerfile-kasm-java-dev" + - "libre-office|core-ubuntu-focal|dockerfile-kasm-libre-office" + - "opensuse-15-desktop|core-opensuse-15|dockerfile-kasm-opensuse-15-desktop" + - "oracle-8-desktop|core-oracle-8|dockerfile-kasm-oracle-8-desktop" + - "pinta|core-ubuntu-focal|dockerfile-kasm-pinta" + - "qbittorrent|core-ubuntu-focal|dockerfile-kasm-qbittorrent" + - "remmina|core-ubuntu-focal|dockerfile-kasm-remmina" + - "sublime-text|core-ubuntu-focal|dockerfile-kasm-sublime-text" + - "telegram|core-ubuntu-focal|dockerfile-kasm-telegram" + - "terminal|core-ubuntu-focal|dockerfile-kasm-terminal" + - "thunderbird|core-ubuntu-focal|dockerfile-kasm-thunderbird" + - "tor-browser|core-ubuntu-focal|dockerfile-kasm-tor-browser" + - "ubuntu-focal-desktop|core-ubuntu-focal|dockerfile-kasm-ubuntu-focal-desktop" + - "ubuntu-jammy-desktop|core-ubuntu-jammy|dockerfile-kasm-ubuntu-jammy-desktop" + - "vlc|core-ubuntu-focal|dockerfile-kasm-vlc" + - "vs-code|core-ubuntu-focal|dockerfile-kasm-vs-code" +.MULTI_ARCH_BUILDS2: &MULTI_ARCH_BUILDS2 + - "almalinux-8-desktop|core-almalinux-8|dockerfile-kasm-almalinux-8-desktop" + - "almalinux-9-desktop|core-almalinux-9|dockerfile-kasm-almalinux-9-desktop" + - "alpine-317-desktop|core-alpine-317|dockerfile-kasm-alpine-317-desktop" + - "alpine-318-desktop|core-alpine-318|dockerfile-kasm-alpine-318-desktop" + - "brave|core-ubuntu-focal|dockerfile-kasm-brave" + - "debian-bullseye-desktop|core-debian-bullseye|dockerfile-kasm-debian-bullseye-desktop" + - "debian-bookworm-desktop|core-debian-bookworm|dockerfile-kasm-debian-bookworm-desktop" + - "fedora-37-desktop|core-fedora-37|dockerfile-kasm-fedora-37-dekstop" + - "fedora-38-desktop|core-fedora-38|dockerfile-kasm-fedora-38-dekstop" + - "kali-rolling-desktop|core-kali-rolling|dockerfile-kasm-kali-rolling-desktop" + - "minetest|core-ubuntu-focal|dockerfile-kasm-minetest" + - "oracle-9-desktop|core-oracle-9|dockerfile-kasm-oracle-9-desktop" + - "parrotos-5-desktop|core-parrotos-5|dockerfile-kasm-parrotos-5-desktop" + - "retroarch|core-ubuntu-focal|dockerfile-kasm-retroarch" + - "rockylinux-8-desktop|core-rockylinux-8|dockerfile-kasm-rockylinux-8-desktop" + - "rockylinux-9-desktop|core-rockylinux-9|dockerfile-kasm-rockylinux-9-desktop" + - "super-tux-kart|core-ubuntu-focal|dockerfile-kasm-super-tux-kart" + - "ubuntu-focal-dind|core-ubuntu-focal|dockerfile-kasm-ubuntu-focal-dind" + - "ubuntu-focal-dind-rootless|core-ubuntu-focal|dockerfile-kasm-ubuntu-focal-dind-rootless" + - "ubuntu-jammy-dind|core-ubuntu-jammy|dockerfile-kasm-ubuntu-jammy-dind" + - "ubuntu-jammy-dind-rootless|core-ubuntu-jammy|dockerfile-kasm-ubuntu-jammy-dind-rootless" + - "vivaldi|core-ubuntu-focal|dockerfile-kasm-vivaldi" +.SINGLE_ARCH_BUILDS: &SINGLE_ARCH_BUILDS + - "atom|core-ubuntu-focal|dockerfile-kasm-atom" + - "blender|core-ubuntu-focal|dockerfile-kasm-blender" + - "centos-7-desktop|core-centos-7|dockerfile-kasm-centos-7-desktop" + - "chrome|core-ubuntu-focal|dockerfile-kasm-chrome" + - "desktop|core-ubuntu-focal|dockerfile-kasm-desktop" + - "desktop-deluxe|core-ubuntu-focal|dockerfile-kasm-desktop-deluxe" + - "discord|core-ubuntu-focal|dockerfile-kasm-discord" + - "edge|core-ubuntu-focal|dockerfile-kasm-edge" + - "hunchly|core-ubuntu-focal|dockerfile-kasm-hunchly" + - "insomnia|core-ubuntu-focal|dockerfile-kasm-insomnia" + - "maltego|core-ubuntu-focal|dockerfile-kasm-maltego" + - "only-office|core-ubuntu-focal|dockerfile-kasm-only-office" + - "oracle-7-desktop|core-oracle-7|dockerfile-kasm-oracle-7-desktop" + - "postman|core-ubuntu-focal|dockerfile-kasm-postman" + - "signal|core-ubuntu-focal|dockerfile-kasm-signal" + - "steam|core-ubuntu-focal|dockerfile-kasm-steam" + - "tracelabs|core-kali-rolling|dockerfile-kasm-tracelabs" + - "unityhub|core-ubuntu-focal|dockerfile-kasm-unityhub" + - "zoom|core-ubuntu-focal|dockerfile-kasm-zoom" + - "zsnes|core-ubuntu-focal|dockerfile-kasm-zsnes" -build_ubuntu_desktop_images: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - only: - - develop - - /^release\/.*$/ - except: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *UBUNTU_IMAGES - -build_non_ubuntu: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set base image based on kasm_image variable - - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi - - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi - - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi - - if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi - - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi - - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi - - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi - - if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi - - if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi - - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi - - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi - - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - only: - - develop - - /^release\/.*$/ - except: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *NON_UBUNTU_IMAGES - -build_fedora_37: +############################################### +# Build Containers and push to cache endpoint # +############################################### +build_multi_containers: stage: build script: - - > - docker build - -t ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_BRANCH - -f dockerfile-kasm-fedora-37-desktop . - - docker push ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_BRANCH - only: - - develop - - /^release\/.*$/ + - apk add bash + - bash ci-scripts/build.sh "${BUILD_META}" except: - - schedules + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - ${TAG} parallel: matrix: - TAG: [ aws-autoscale, aws-autoscale-arm64 ] + BUILD_META: *MULTI_ARCH_BUILDS -manifest_fedora_37: - stage: manifest - script: - - docker pull ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_BRANCH - - docker pull ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH - - "docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH || :" - - docker manifest create ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH - - docker manifest annotate ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_BRANCH --os linux --arch arm64 --variant v8 - - docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_BRANCH - only: - - develop - - /^release\/.*$/ - except: - - schedules - needs: [ build_fedora_37 ] - tags: - - aws-autoscale - -build_games: +build_multi_containers2: stage: build - image: ${ORG_NAME}/docker-buildx-private:develop script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - only: - - develop - - /^release\/.*$/ + - apk add bash + - bash ci-scripts/build.sh "${BUILD_META}" except: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *GAME_IMAGES - -################################################################################################################################################################ -# These jobs should run on the feature/bugfix branches - anything that is not the develop or release branches. It should only push images to the private repos # -################################################################################################################################################################ -build_multi_arch_dev: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set core image names - - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi - - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi - - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi - - if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi - - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi - - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi - - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi - - if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi - - if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi - - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi - - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi - - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker build - -t ${ORG_NAME}/$KASM_IMAGE-private:$(arch)-$SANITIZED_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - - docker push ${ORG_NAME}/$KASM_IMAGE-private:$(arch)-$SANITIZED_BRANCH - except: - - develop - - /^release\/.*$/ + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - ${TAG} parallel: matrix: - TAG: [ aws-autoscale, aws-autoscale-arm64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS + BUILD_META: *MULTI_ARCH_BUILDS2 -build_multi_arch_dev2: +build_single_containers: stage: build - image: ${ORG_NAME}/docker-buildx-private:develop script: - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set core image names - - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi - - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi - - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi - - if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi - - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi - - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi - - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi - - if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi - - if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi - - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi - - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi - - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker build - -t ${ORG_NAME}/$KASM_IMAGE-private:$(arch)-$SANITIZED_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - - docker push ${ORG_NAME}/$KASM_IMAGE-private:$(arch)-$SANITIZED_BRANCH + - apk add bash + - bash ci-scripts/build.sh "${BUILD_META}" except: - - develop - - /^release\/.*$/ - tags: - - ${TAG} - parallel: - matrix: - - TAG: [ aws-autoscale, aws-autoscale-arm64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS2 - -build_single_arch_dev: - stage: build - image: ${ORG_NAME}/docker-buildx-private:develop - script: - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set core image names - - if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi - - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi - - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - - > - docker build - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG=$CORE_IMAGE_TAG - -f dockerfile-kasm-$KASM_IMAGE . - - docker push ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_BRANCH - except: - - develop - - /^release\/.*$/ + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - aws-autoscale parallel: matrix: - - KASM_IMAGE: *SINGLE_ARCH_BUILDS + - BUILD_META: *SINGLE_ARCH_BUILDS -test_multi_arch_dev: +###################################### +# Test containers and upload results # +###################################### +test_multi: stage: test + when: always script: - - docker pull kasmweb/kasm-tester:1.13.0 - - > - docker run --rm --privileged - -e KASM_PORT=443 - -e KASM_PATH=/opt/kasm - -e KASM_PASSWORD=password123 - -e PUID=1000 - -e DOCKERUSER=$DOCKER_HUB_USERNAME - -e DOCKERPASS=$DOCKER_HUB_PASSWORD - -e TEST_IMAGE="${ORG_NAME}/${KASM_IMAGE}-private:$(arch)-$SANITIZED_BRANCH" - -e TEST_WEBFILTER="false" - -e AWS_KEY=${KASM_TEST_AWS_KEY} - -e AWS_SECRET="${KASM_TEST_AWS_SECRET}" - -e SLACK_TOKEN=${SLACK_TOKEN} - -e S3_BUCKET=kasm-ci - -e COMMIT=${CI_COMMIT_SHA} - -e REPO=workspaces-images - kasmweb/kasm-tester:1.13.0 + - apk add bash + - bash ci-scripts/test.sh "${BUILD_META}" "${ARCH}" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" except: - - develop - - /^release\/.*$/ - needs: [ manifest_dev ] + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - ${TAG} + - aws-autoscale-nano parallel: matrix: - - TAG: [ aws-autoscale, aws-autoscale-arm64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS + - ARCH: [ "x86_64", "aarch64" ] + BUILD_META: *MULTI_ARCH_BUILDS -test_multi_arch_dev2: +test_multi2: stage: test + when: always script: - - docker pull kasmweb/kasm-tester:1.13.0 - - > - docker run --rm --privileged - -e KASM_PORT=443 - -e KASM_PATH=/opt/kasm - -e KASM_PASSWORD=password123 - -e PUID=1000 - -e DOCKERUSER=$DOCKER_HUB_USERNAME - -e DOCKERPASS=$DOCKER_HUB_PASSWORD - -e TEST_IMAGE="${ORG_NAME}/${KASM_IMAGE}-private:$(arch)-$SANITIZED_BRANCH" - -e TEST_WEBFILTER="false" - -e AWS_KEY=${KASM_TEST_AWS_KEY} - -e AWS_SECRET="${KASM_TEST_AWS_SECRET}" - -e SLACK_TOKEN=${SLACK_TOKEN} - -e S3_BUCKET=kasm-ci - -e COMMIT=${CI_COMMIT_SHA} - -e REPO=workspaces-images - kasmweb/kasm-tester:1.13.0 + - apk add bash + - bash ci-scripts/test.sh "${BUILD_META}" "${ARCH}" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" except: - - develop - - /^release\/.*$/ - needs: [ manifest_dev2 ] + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - ${TAG} + - aws-autoscale-nano parallel: matrix: - - TAG: [ aws-autoscale, aws-autoscale-arm64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS2 + - ARCH: [ "x86_64", "aarch64" ] + BUILD_META: *MULTI_ARCH_BUILDS2 -test_single_arch_dev: +test_single: stage: test + when: always script: - - docker pull kasmweb/kasm-tester:1.13.0 - - > - docker run --rm --privileged - -e KASM_PORT=443 - -e KASM_PATH=/opt/kasm - -e KASM_PASSWORD=password123 - -e PUID=1000 - -e DOCKERUSER=$DOCKER_HUB_USERNAME - -e DOCKERPASS=$DOCKER_HUB_PASSWORD - -e TEST_IMAGE="${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH" - -e TEST_WEBFILTER="false" - -e AWS_KEY=${KASM_TEST_AWS_KEY} - -e AWS_SECRET="${KASM_TEST_AWS_SECRET}" - -e SLACK_TOKEN=${SLACK_TOKEN} - -e S3_BUCKET=kasm-ci - -e COMMIT=${CI_COMMIT_SHA} - -e REPO=workspaces-images - kasmweb/kasm-tester:1.13.0 + - apk add bash + - bash ci-scripts/test.sh "${BUILD_META}" "x86_64" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" except: - - develop - - /^release\/.*$/ - needs: [ build_single_arch_dev ] + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: *SINGLE_ARCH_BUILDS + - BUILD_META: *SINGLE_ARCH_BUILDS -manifest_dev: +############################################ +# Manifest Containers if their test passed # +############################################ +manifest_multi: stage: manifest + when: always script: - - docker pull ${ORG_NAME}/${KASM_IMAGE}-private:x86_64-$SANITIZED_BRANCH - - docker pull ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH - - "docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH || :" - - docker manifest create ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:x86_64-$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH - - docker manifest annotate ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH --os linux --arch arm64 --variant v8 - - docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH + - apk add bash + - bash ci-scripts/manifest.sh "${BUILD_META}" "multi" except: - - develop - - /^release\/.*$/ - needs: [ build_multi_arch_dev ] + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: *MULTI_ARCH_BUILDS + - BUILD_META: *MULTI_ARCH_BUILDS -manifest_dev2: +manifest_multi2: stage: manifest + when: always script: - - docker pull ${ORG_NAME}/${KASM_IMAGE}-private:x86_64-$SANITIZED_BRANCH - - docker pull ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH - - "docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH || :" - - docker manifest create ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:x86_64-$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH - - docker manifest annotate ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}-private:aarch64-$SANITIZED_BRANCH --os linux --arch arm64 --variant v8 - - docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}-private:$SANITIZED_BRANCH + - apk add bash + - bash ci-scripts/manifest.sh "${BUILD_META}" "multi" except: - - develop - - /^release\/.*$/ - needs: [ build_multi_arch_dev2 ] + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: *MULTI_ARCH_BUILDS2 + - BUILD_META: *MULTI_ARCH_BUILDS2 -link_tests_single_arch_dev: - stage: linktests - script: - - apk add curl - - STATUS=$(curl -sL https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/x86_64/kasmweb/${KASM_IMAGE}-private/${SANITIZED_BRANCH}/ci-status.yml | awk -F'"' '{print $2}') - - if [ "${STATUS}" == "PASS" ]; then STATE=success; else STATE=failed; fi; - - curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=${STATE}&name=${KASM_IMAGE}-private_x86_64&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/x86_64/kasmweb/${KASM_IMAGE}-private/${SANITIZED_BRANCH}/index.html" - except: - - develop - - /^release\/.*$/ - needs: [ test_single_arch_dev ] - parallel: - matrix: - - KASM_IMAGE: *SINGLE_ARCH_BUILDS - -link_tests_multi_arch_dev: - stage: linktests - script: - - apk add curl - - STATUS=$(curl -sL https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/${KASM_IMAGE}-private/${ARCH}-${SANITIZED_BRANCH}/ci-status.yml | awk -F'"' '{print $2}') - - if [ "${STATUS}" == "PASS" ]; then STATE=success; else STATE=failed; fi; - - curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=${STATE}&name=${KASM_IMAGE}-private_${ARCH}&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/${KASM_IMAGE}-private/${ARCH}-${SANITIZED_BRANCH}/index.html" - except: - - develop - - /^release\/.*$/ - needs: [ test_multi_arch_dev ] - parallel: - matrix: - - ARCH: [ aarch64, x86_64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS - -link_tests_multi_arch_dev2: - stage: linktests - script: - - apk add curl - - STATUS=$(curl -sL https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/${KASM_IMAGE}-private/${ARCH}-${SANITIZED_BRANCH}/ci-status.yml | awk -F'"' '{print $2}') - - if [ "${STATUS}" == "PASS" ]; then STATE=success; else STATE=failed; fi; - - curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=${STATE}&name=${KASM_IMAGE}-private_${ARCH}&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/${KASM_IMAGE}-private/${ARCH}-${SANITIZED_BRANCH}/index.html" - except: - - develop - - /^release\/.*$/ - needs: [ test_multi_arch_dev2 ] - parallel: - matrix: - - ARCH: [ aarch64, x86_64 ] - KASM_IMAGE: *MULTI_ARCH_BUILDS2 - -######################################################################################################################################### -# These jobs are for the "rolling" release of the images. They should only run for scheduled jobs and should only push the rolling tags # -######################################################################################################################################### -build_schedules_browser_images: - image: ${ORG_NAME}/docker-buildx-private:develop - stage: build - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} based on ${CORE_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE-IMAGE-private; fi; - # Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64. - # The only way to push multiple architectures to the same tag is to use buildx. - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" - -f dockerfile-kasm-$KASM_IMAGE . - only: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *BROWSER_IMAGES - -build_schedules_app_images: - image: ${ORG_NAME}/docker-buildx-private:develop - stage: build - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} based on ${CORE_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - # Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64. - # The only way to push multiple architectures to the same tag is to use buildx. - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" - -f dockerfile-kasm-$KASM_IMAGE . - only: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *APP_IMAGES - -build_schedules_ubuntu_desktop_images: - image: ${ORG_NAME}/docker-buildx-private:develop - stage: build - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set base image based on kasm_image variable - - if [[ $KASM_IMAGE =~ 'remnux-focal-desktop' ]]; then CORE_IMAGE=core-remnux-focal; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-desktop' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - - if [[ $KASM_IMAGE =~ 'ubuntu-jammy-dind-rootless' ]]; then CORE_IMAGE=core-ubuntu-jammy; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - # Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64. - # The only way to push multiple architectures to the same tag is to use buildx. - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" - -f dockerfile-kasm-$KASM_IMAGE . - only: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *UBUNTU_IMAGES - -build_schedules_non_ubuntu: - image: ${ORG_NAME}/docker-buildx-private:develop - stage: build - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Set base image based on kasm_image variable - - if [[ $KASM_IMAGE =~ 'almalinux-8-desktop' ]]; then CORE_IMAGE=core-almalinux-8; fi - - if [[ $KASM_IMAGE =~ 'almalinux-9-desktop' ]]; then CORE_IMAGE=core-almalinux-9; fi - - if [[ $KASM_IMAGE =~ 'alpine-317-desktop' ]]; then CORE_IMAGE=core-alpine-317; fi - - if [[ $KASM_IMAGE =~ 'centos-7-desktop' ]]; then CORE_IMAGE=core-centos-7; fi - - if [[ $KASM_IMAGE =~ 'debian-bullseye-desktop' ]]; then CORE_IMAGE=core-debian-bullseye; fi - - if [[ $KASM_IMAGE =~ 'fedora-37-desktop' ]]; then CORE_IMAGE=core-fedora-37; fi - - if [[ $KASM_IMAGE =~ 'kali-rolling-desktop' ]]; then CORE_IMAGE=core-kali-rolling; fi - - if [[ $KASM_IMAGE =~ 'opensuse-15-desktop' ]]; then CORE_IMAGE=core-opensuse-15; fi - - if [[ $KASM_IMAGE =~ 'oracle-7-desktop' ]]; then CORE_IMAGE=core-oracle-7; fi - - if [[ $KASM_IMAGE =~ 'oracle-8-desktop' ]]; then CORE_IMAGE=core-oracle-8; fi - - if [[ $KASM_IMAGE =~ 'oracle-9-desktop' ]]; then CORE_IMAGE=core-oracle-9; fi - - if [[ $KASM_IMAGE =~ 'parrotos-5-desktop' ]]; then CORE_IMAGE=core-parrotos-5; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-8-desktop' ]]; then CORE_IMAGE=core-rockylinux-8; fi - - if [[ $KASM_IMAGE =~ 'rockylinux-9-desktop' ]]; then CORE_IMAGE=core-rockylinux-9; fi - - if [[ $KASM_IMAGE =~ 'tracelabs' ]]; then CORE_IMAGE=core-kali-rolling; fi - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - # Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64. - # The only way to push multiple architectures to the same tag is to use buildx. - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" - -f dockerfile-kasm-$KASM_IMAGE . - only: - - schedules - tags: - - aws-autoscale - parallel: - matrix: - - KASM_IMAGE: *NON_UBUNTU_IMAGES - -build_fedora_37_schedules: - stage: build - script: - - > - docker build - -t ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_ROLLING_BRANCH - -f dockerfile-kasm-fedora-37-desktop . - - docker push ${ORG_NAME}/fedora-37-desktop:$(arch)-$SANITIZED_ROLLING_BRANCH - only: - - schedules - tags: - - ${TAG} - parallel: - matrix: - - TAG: [ aws-autoscale, aws-autoscale-arm64 ] - -manifest_fedora_37_schedules: +manifest_single: stage: manifest + when: always script: - - docker pull ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_ROLLING_BRANCH - - docker pull ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH - - "docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH || :" - - docker manifest create ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:x86_64-$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH - - docker manifest annotate ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH ${ORG_NAME}/fedora-37-desktop:aarch64-$SANITIZED_ROLLING_BRANCH --os linux --arch arm64 --variant v8 - - docker manifest push --purge ${ORG_NAME}/fedora-37-desktop:$SANITIZED_ROLLING_BRANCH - only: - - schedules - needs: [ build_fedora_37_schedules ] + - apk add bash + - bash ci-scripts/manifest.sh "${BUILD_META}" "single" + except: + variables: + - $README_USERNAME + - $README_PASSWORD + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING tags: - - aws-autoscale - -build_schedules_games: - image: ${ORG_NAME}/docker-buildx-private:develop - stage: build - script: - - BUILD_PLATFORM=$PLATFORM - - if [[ "${ARM_BUILDS}" == *",${KASM_IMAGE},"* ]]; then BUILD_PLATFORM="linux/amd64,linux/arm64"; fi; - - echo "Building ${KASM_IMAGE} for platforms ${BUILD_PLATFORM}" - # to get qemu ready - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - # to prepare the buildx env - - docker buildx create --use - # Ensure readme and description files are present - - ls docs/$KASM_IMAGE/README.md - - ls docs/$KASM_IMAGE/description.txt - # Check for private variable to build against private core images - - if [[ $USE_PRIVATE_IMAGES -eq 1 ]]; then CORE_IMAGE=$CORE_IMAGE-private; fi; - # Equivalent to docker build and docker push. Builds amd64 natively uses qemu for arm64. - # The only way to push multiple architectures to the same tag is to use buildx. - - > - docker buildx build --push - --platform $BUILD_PLATFORM - -t ${ORG_NAME}/$KASM_IMAGE:$SANITIZED_ROLLING_BRANCH - -t ${ORG_NAME}/$KASM_IMAGE-private:$SANITIZED_ROLLING_BRANCH - --build-arg BASE_IMAGE=$CORE_IMAGE - --build-arg BASE_TAG="$SANITIZED_ROLLING_BRANCH" - -f dockerfile-kasm-$KASM_IMAGE . - only: - - schedules - tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: *GAME_IMAGES + - BUILD_META: *SINGLE_ARCH_BUILDS -############################### -# Readme Updates in Dockerhub # -############################### -update_readmes: +#################### +# Helper Functions # +#################### + +## Update Readmes ## +update_readmes_multi: stage: readme script: - - > - docker run -v $PWD/docs:/docs - -e RELEASE="$KASM_RELEASE" - -e DOCKER_USERNAME="$README_USERNAME" - -e DOCKER_PASSWORD="$README_PASSWORD" - -e DOCKERHUB_REPOSITORY="${ORG_NAME}/${KASM_IMAGE}" - kasmweb/dockerhub-updater:develop + - apk add bash + - bash ci-scripts/readme.sh "${BUILD_META}" only: variables: - $README_USERNAME - $README_PASSWORD tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: - - almalinux-8-desktop - - almalinux-9-desktop - - alpine-317-desktop - - atom - - audacity - - blender - - brave - - centos-7-desktop - - chrome - - chromium - - debian-bullseye-desktop - - deluge - - desktop - - desktop-deluxe - - discord - - doom - - edge - - fedora-37-desktop - - filezilla - - firefox - - gimp - - hunchly - - inkscape - - insomnia - - java-dev - - kali-rolling-desktop - - libre-office - - maltego - - minetest - - only-office - - opensuse-15-desktop - - oracle-7-desktop - - oracle-8-desktop - - oracle-9-desktop - - parrotos-5-desktop - - pinta - - postman - - qbittorrent - - remmina - - retroarch - - rockylinux-8-desktop - - rockylinux-9-desktop - - signal - - steam - - sublime-text - - super-tux-kart - - teams - - telegram - - terminal - - thunderbird + - BUILD_META: *MULTI_ARCH_BUILDS -update_readmes2: +update_readmes_multi2: stage: readme script: - - > - docker run -v $PWD/docs:/docs - -e RELEASE="$KASM_RELEASE" - -e DOCKER_USERNAME="$README_USERNAME" - -e DOCKER_PASSWORD="$README_PASSWORD" - -e DOCKERHUB_REPOSITORY="${ORG_NAME}/${KASM_IMAGE}" - kasmweb/dockerhub-updater:develop + - apk add bash + - bash ci-scripts/readme.sh "${BUILD_META}" only: variables: - $README_USERNAME - $README_PASSWORD tags: - - aws-autoscale + - aws-autoscale-nano parallel: matrix: - - KASM_IMAGE: - - tor-browser - - tracelabs - - ubuntu-focal-desktop - - ubuntu-focal-dind - - ubuntu-focal-dind-rootless - - ubuntu-jammy-desktop - - ubuntu-jammy-dind - - ubuntu-jammy-dind-rootless - - unityhub - - vivaldi - - vlc - - vs-code - - zoom + - BUILD_META: *MULTI_ARCH_BUILDS2 + +update_readmes_single: + stage: readme + script: + - apk add bash + - bash ci-scripts/readme.sh "${BUILD_META}" + only: + variables: + - $README_USERNAME + - $README_PASSWORD + tags: + - aws-autoscale-nano + parallel: + matrix: + - BUILD_META: *SINGLE_ARCH_BUILDS + +## Revert Images to specific build id ## +dockerhub_revert_multi: + stage: revert + script: + - /bin/bash ci-scripts/manifest.sh "${BUILD_META}" "multi" "${DOCKERHUB_REVERT}" "${REVERT_IS_ROLLING}" + only: + variables: + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING + parallel: + matrix: + - BUILD_META: *MULTI_ARCH_BUILDS + +dockerhub_revert_multi2: + stage: revert + script: + - /bin/bash ci-scripts/manifest.sh "${BUILD_META}" "multi" "${DOCKERHUB_REVERT}" "${REVERT_IS_ROLLING}" + only: + variables: + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING + parallel: + matrix: + - BUILD_META: *MULTI_ARCH_BUILDS + +dockerhub_revert_single: + stage: revert + script: + - /bin/bash ci-scripts/manifest.sh "${BUILD_META}" "single" "${DOCKERHUB_REVERT}" "${REVERT_IS_ROLLING}" + only: + variables: + - $DOCKERHUB_REVERT + - $REVERT_IS_ROLLING + parallel: + matrix: + - BUILD_META: *SINGLE_ARCH_BUILDS diff --git a/ci-scripts/build.sh b/ci-scripts/build.sh new file mode 100755 index 0000000..9da220e --- /dev/null +++ b/ci-scripts/build.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +## Parse input ## +NAME=$(echo $1| awk -F'|' '{print $1}') +BASE=$(echo $1| awk -F'|' '{print $2}') +DOCKERFILE=$(echo $1| awk -F'|' '{print $3}') + +## Build/Push image to cache endpoint by pipeline ID ## +docker build \ + -t ${ORG_NAME}/image-cache-private:$(arch)-${NAME}-${SANITIZED_BRANCH}-${CI_PIPELINE_ID} \ + --build-arg BASE_IMAGE="${BASE}" \ + --build-arg BASE_TAG="${BASE_TAG}" \ + -f ${DOCKERFILE} . +docker push ${ORG_NAME}/image-cache-private:$(arch)-${NAME}-${SANITIZED_BRANCH}-${CI_PIPELINE_ID} diff --git a/ci-scripts/manifest.sh b/ci-scripts/manifest.sh new file mode 100755 index 0000000..b821774 --- /dev/null +++ b/ci-scripts/manifest.sh @@ -0,0 +1,104 @@ +#! /bin/bash + +# Globals +FAILED="false" + +# Ingest cli variables +## Parse input ## +NAME=$(echo $1| awk -F'|' '{print $1}') +TYPE=$2 +REVERT_PIPELINE_ID=$3 +IS_ROLLING=$4 +PULL_BRANCH=${SANITIZED_BRANCH} + +# Determine if this is a private or public build +if [[ "${CI_COMMIT_REF_NAME}" == release/* ]] || [[ "${CI_COMMIT_REF_NAME}" == "develop" ]]; then + ENDPOINT="${NAME}" +else + ENDPOINT="${NAME}-private" +fi + +# Determine if this is a rolling build +if [ "${CI_PIPELINE_SOURCE}" == "schedule" ]; then + SANITIZED_BRANCH=${SANITIZED_BRANCH}-rolling +fi + +# Determine if we are doing a reversion +if [ ! -z "${REVERT_PIPELINE_ID}" ]; then + # If we are reverting modify the pipeline ID to the one passed + CI_PIPELINE_ID=${REVERT_PIPELINE_ID} + if [ "${IS_ROLLING}" == "true" ]; then + SANITIZED_BRANCH=${SANITIZED_BRANCH}-rolling + fi +fi + +# Check test output +if [ -z "${REVERT_PIPELINE_ID}" ]; then + apk add curl + if [ "${TYPE}" == "multi" ]; then + ARCHES=("x86_64" "aarch64") + else + ARCHES=("x86_64") + fi + for ARCH in "${ARCHES[@]}"; do + + # Determine test status + STATUS=$(curl -sL https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/image-cache-private/${ARCH}-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID}/ci-status.yml | awk -F'"' '{print $2}') + if [ "${STATUS}" == "PASS" ]; then + STATE=success + else + STATE=failed + FAILED="true" + fi + + # Ping gitlab api with link output + curl --request POST --header "PRIVATE-TOKEN:${GITLAB_API_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/statuses/${CI_COMMIT_SHA}?state=${STATE}&name=${NAME}_${ARCH}&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/image-cache-private/${ARCH}-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID}/index.html" + + done +fi + +# Fail job and go no further if tests did not pass +if [ "${FAILED}" == "true" ]; then + exit 1 +fi + +# Manifest for multi pull and push for single arch +if [ "${TYPE}" == "multi" ]; then + + # Pull images from cache repo + docker pull ${ORG_NAME}/image-cache-private:x86_64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} + docker pull ${ORG_NAME}/image-cache-private:aarch64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} + + # Tag images to live repo + docker tag \ + ${ORG_NAME}/image-cache-private:x86_64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} \ + ${ORG_NAME}/${ENDPOINT}:x86_64-${SANITIZED_BRANCH} + docker tag \ + ${ORG_NAME}/image-cache-private:aarch64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} \ + ${ORG_NAME}/${ENDPOINT}:aarch64-${SANITIZED_BRANCH} + + # Push arches to live repo + docker push ${ORG_NAME}/${ENDPOINT}:x86_64-${SANITIZED_BRANCH} + docker push ${ORG_NAME}/${ENDPOINT}:aarch64-${SANITIZED_BRANCH} + + # Manifest to meta tag + docker manifest push --purge ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} || : + docker manifest create ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} ${ORG_NAME}/${ENDPOINT}:x86_64-${SANITIZED_BRANCH} ${ORG_NAME}/${ENDPOINT}:aarch64-${SANITIZED_BRANCH} + docker manifest annotate ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} ${ORG_NAME}/${ENDPOINT}:aarch64-${SANITIZED_BRANCH} --os linux --arch arm64 --variant v8 + docker manifest push --purge ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} + +# Single arch image just pull and push +else + + # Pull image + docker pull ${ORG_NAME}/image-cache-private:x86_64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} + + # Tage image + docker tag \ + ${ORG_NAME}/image-cache-private:x86_64-${NAME}-${PULL_BRANCH}-${CI_PIPELINE_ID} \ + ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} + + # Push image + docker push ${ORG_NAME}/${ENDPOINT}:${SANITIZED_BRANCH} + +fi diff --git a/ci-scripts/readme.sh b/ci-scripts/readme.sh new file mode 100755 index 0000000..9dc1678 --- /dev/null +++ b/ci-scripts/readme.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +## Parse input ## +NAME=$(echo $1| awk -F'|' '{print $1}') + +## Run readme updater ## +docker run -v $PWD/docs:/docs \ + -e RELEASE="$KASM_RELEASE" \ + -e DOCKER_USERNAME="$README_USERNAME" \ + -e DOCKER_PASSWORD="$README_PASSWORD" \ + -e DOCKERHUB_REPOSITORY="${ORG_NAME}/${NAME}" \ + kasmweb/dockerhub-updater:develop diff --git a/ci-scripts/test.sh b/ci-scripts/test.sh new file mode 100755 index 0000000..efe2a0e --- /dev/null +++ b/ci-scripts/test.sh @@ -0,0 +1,217 @@ +#!/bin/bash +set -e + +## Parse input ## +NAME=$(echo $1| awk -F'|' '{print $1}') +BASE=$(echo $1| awk -F'|' '{print $2}') +DOCKERFILE=$(echo $1| awk -F'|' '{print $3}') +ARCH=$2 +AWS_ID=$3 +AWS_KEY=$4 + +# Setup aws cli +export AWS_ACCESS_KEY_ID="${AWS_ID}" +export AWS_SECRET_ACCESS_KEY="${AWS_KEY}" +export AWS_DEFAULT_REGION=us-east-1 + +# Install tools for testing +apk add \ + aws-cli \ + curl \ + jq \ + openssh-client + +## Functions ## +# Ami locater +getami () { +aws ec2 describe-images --filters \ + "Name=name,Values=$1*" \ + "Name=owner-id,Values=$2" \ + "Name=state,Values=available" \ + "Name=architecture,Values=$3" \ + "Name=virtualization-type,Values=hvm" \ + "Name=root-device-type,Values=ebs" \ + "Name=image-type,Values=machine" \ + --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \ + --output 'text' \ + --region us-east-1 +} +# Make sure deployment is ready +function ready_check() { + while :; do + sleep 2 + CHECK=$(curl --max-time 5 -sLk https://${IPS[0]}/api/__healthcheck || :) + if [[ "${CHECK}" =~ .*"true".* ]]; then + echo "Workspaces at "${IPS[0]}" ready for testing" + break + else + echo "Waiting for Workspaces at "${IPS[0]}" to be ready" + fi + done + sleep 30 +} + +# Determine deployment based on arch +if [[ "${ARCH}" == "x86_64" ]]; then + AMI=$(getami "ubuntu/images/hvm-ssd/ubuntu-jammy-22.04" 099720109477 x86_64) + TYPE=c5.large + USER=ubuntu +else + AMI=$(getami "ubuntu/images/hvm-ssd/ubuntu-jammy-22.04" 099720109477 arm64) + TYPE=c6g.large + USER=ubuntu +fi + +# Setup SSH Key +mkdir -p /root/.ssh +RAND=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c36) +SSH_KEY=$(aws ec2 create-key-pair --key-name ${RAND} | jq -r '.KeyMaterial') +cat >/root/.ssh/id_rsa </root/user-data < /tmp/instance.json +INSTANCE=$(cat /tmp/instance.json | jq -r " .Instances[0].InstanceId") +INSTANCES+=("${INSTANCE}") +for INSTANCE_ID in "${INSTANCES[@]}"; do + echo $INSTANCE_ID +done + +# Determine IPs of instances +IPS=() +for INSTANCE_ID in "${INSTANCES[@]}"; do + while :; do + sleep 2 + IP=$(aws ec2 describe-instances \ + --instance-id ${INSTANCE_ID} \ + | jq -r '.Reservations[0].Instances[0].PublicIpAddress') + if [ "${IP}" == 'null' ]; then + echo "Waiting for Pub IP from instance ${INSTANCE_ID}" + else + echo "Instance ${INSTANCE_ID} IP=${IP}" + IPS+=("${IP}") + break + fi + done +done + +# Shutdown Instances function and trap +function turnoff() { + for IP in "${IPS[@]}"; do + ssh \ + -oConnectTimeout=4 \ + -oStrictHostKeyChecking=no \ + ${USER}@${IP} \ + "sudo poweroff" || : + done + aws ec2 delete-key-pair --key-name ${RAND} +} +trap turnoff ERR + +# Make sure the instance is up +for IP in "${IPS[@]}"; do + while :; do + sleep 2 + UPTIME=$(ssh \ + -oConnectTimeout=4 \ + -oStrictHostKeyChecking=no \ + ${USER}@${IP} \ + 'uptime'|| :) + if [ -z "${UPTIME}" ]; then + echo "Waiting for ${IP} to be up" + else + echo "${IP} up ${UPTIME}" + break + fi + done +done + +# Sleep here to ensure subsequent connections don't fail +sleep 30 + +# Double check we are up +for IP in "${IPS[@]}"; do + while :; do + sleep 2 + UPTIME=$(ssh \ + -oConnectTimeout=4 \ + -oStrictHostKeyChecking=no \ + ${USER}@${IP} \ + 'uptime'|| :) + if [ -z "${UPTIME}" ]; then + echo "Waiting for ${IP} to be up" + else + echo "${IP} up ${UPTIME}" + break + fi + done +done + +# Copy over docker auth +for IP in "${IPS[@]}"; do + scp \ + -oStrictHostKeyChecking=no \ + /root/.docker/config.json \ + ${USER}@${IP}:/tmp/ + ssh \ + -oConnectTimeout=10 \ + -oStrictHostKeyChecking=no \ + ${USER}@${IP} \ + "sudo mkdir -p /root/.docker && sudo mv /tmp/config.json /root/.docker/ && sudo chown root:root /root/.docker/config.json" +done + +# Install Kasm workspaces +ssh \ + -oConnectTimeout=4 \ + -oStrictHostKeyChecking=no \ + ${USER}@"${IPS[0]}" \ + "curl -L -o /tmp/installer.tar.gz ${TEST_INSTALLER} && cd /tmp && tar xf installer.tar.gz && sudo bash kasm_release/install.sh -H -u -I -e -P ${RAND} -U ${RAND}" + +# Ensure install is up and running +ready_check + +# Pull tester image +docker pull ${ORG_NAME}/kasm-tester:1.14.0 + +# Run test +cp /root/.ssh/id_rsa $(dirname ${CI_PROJECT_DIR})/sshkey +chmod 777 $(dirname ${CI_PROJECT_DIR})/sshkey +docker pull kasmweb/kasm-tester:1.14.0 +docker run --rm \ + -e TZ=US/Pacific \ + -e KASM_HOST=${IPS[0]} \ + -e KASM_PORT=443 \ + -e KASM_PASSWORD="${RAND}" \ + -e SSH_USER=$USER \ + -e DOCKERUSER=$DOCKER_HUB_USERNAME \ + -e DOCKERPASS=$DOCKER_HUB_PASSWORD \ + -e TEST_IMAGE="${ORG_NAME}/image-cache-private:${ARCH}-${NAME}-${SANITIZED_BRANCH}-${CI_PIPELINE_ID}" \ + -e AWS_KEY=${KASM_TEST_AWS_KEY} \ + -e AWS_SECRET="${KASM_TEST_AWS_SECRET}" \ + -e SLACK_TOKEN=${SLACK_TOKEN} \ + -e S3_BUCKET=kasm-ci \ + -e COMMIT=${CI_COMMIT_SHA} \ + -e REPO=workspaces-images \ + -e AUTOMATED=true \ + -v $(dirname ${CI_PROJECT_DIR})/sshkey:/sshkey:ro ${SLIM_FLAG} \ + kasmweb/kasm-tester:1.14.0 + +# Shutdown Instances +turnoff diff --git a/dockerfile-kasm-alpine-318-desktop b/dockerfile-kasm-alpine-318-desktop new file mode 100644 index 0000000..561560f --- /dev/null +++ b/dockerfile-kasm-alpine-318-desktop @@ -0,0 +1,55 @@ +ARG BASE_TAG="develop" +ARG BASE_IMAGE="core-alpine-318" +FROM kasmweb/$BASE_IMAGE:$BASE_TAG + +USER root + +ENV DISTRO=alpine318 +ENV HOME /home/kasm-default-profile +ENV STARTUPDIR /dockerstartup +WORKDIR $HOME + +### Envrionment config +ENV SKIP_CLEAN=true \ + INST_DIR=$STARTUPDIR/install \ + INST_SCRIPTS="/alpine/install/tools/install_tools_deluxe.sh \ + /alpine/install/misc/install_tools.sh \ + /alpine/install/chromium/install_chromium.sh \ + /alpine/install/firefox/install_firefox.sh \ + /alpine/install/remmina/install_remmina.sh \ + /alpine/install/gimp/gimp/install_gimp.sh \ + /alpine/install/ansible/install_ansible.sh \ + /alpine/install/terraform/install_terraform.sh \ + /alpine/install/thunderbird/install_thunderbird.sh \ + /alpine/install/audacity/install_audacity.sh \ + /alpine/install/blender/install_blender.sh \ + /alpine/install/geany/install_geany.sh \ + /alpine/install/inkscape/install_inkscape.sh \ + /alpine/install/libre_office/install_libre_office.sh \ + /alpine/install/pinta/install_pinta.sh \ + /alpine/install/obs/install_obs.sh \ + /alpine/install/filezilla/install_filezilla.sh \ + /ubuntu/install/langpacks/install_langpacks.sh \ + /ubuntu/install/cleanup/cleanup.sh" + +# Copy install scripts +COPY ./src/ $INST_DIR + +# Run installations +RUN \ + for SCRIPT in $INST_SCRIPTS; do \ + bash ${INST_DIR}${SCRIPT}; \ + done && \ + $STARTUPDIR/set_user_permission.sh $HOME && \ + rm -f /etc/X11/xinit/Xclients && \ + chown 1000:0 $HOME && \ + mkdir -p /home/kasm-user && \ + chown -R 1000:0 /home/kasm-user && \ + rm -Rf ${INST_DIR} + +# Userspace Runtime +ENV HOME /home/kasm-user +WORKDIR $HOME +USER 1000 + +CMD ["--tail-log"] diff --git a/dockerfile-kasm-debian-bookworm-desktop b/dockerfile-kasm-debian-bookworm-desktop new file mode 100644 index 0000000..76b0b2b --- /dev/null +++ b/dockerfile-kasm-debian-bookworm-desktop @@ -0,0 +1,57 @@ +ARG BASE_TAG="develop" +ARG BASE_IMAGE="core-debian-bookworm" +FROM kasmweb/$BASE_IMAGE:$BASE_TAG + +USER root + +ENV HOME /home/kasm-default-profile +ENV STARTUPDIR /dockerstartup +WORKDIR $HOME + +### Envrionment config +ENV DEBIAN_FRONTEND=noninteractive \ + SKIP_CLEAN=true \ + KASM_RX_HOME=$STARTUPDIR/kasmrx \ + DONT_PROMPT_WSL_INSTALL="No_Prompt_please" \ + INST_DIR=$STARTUPDIR/install \ + INST_SCRIPTS="/ubuntu/install/tools/install_tools_deluxe.sh \ + /ubuntu/install/misc/install_tools.sh \ + /ubuntu/install/chrome/install_chrome.sh \ + /ubuntu/install/chromium/install_chromium.sh \ + /ubuntu/install/firefox/install_firefox.sh \ + /ubuntu/install/sublime_text/install_sublime_text.sh \ + /ubuntu/install/vs_code/install_vs_code.sh \ + /ubuntu/install/remmina/install_remmina.sh \ + /ubuntu/install/only_office/install_only_office.sh \ + /ubuntu/install/signal/install_signal.sh \ + /ubuntu/install/gimp/install_gimp.sh \ + /ubuntu/install/zoom/install_zoom.sh \ + /ubuntu/install/obs/install_obs.sh \ + /ubuntu/install/ansible/install_ansible.sh \ + /ubuntu/install/terraform/install_terraform.sh \ + /ubuntu/install/telegram/install_telegram.sh \ + /ubuntu/install/thunderbird/install_thunderbird.sh \ + /ubuntu/install/gamepad_utils/install_gamepad_utils.sh \ + /ubuntu/install/cleanup/cleanup.sh" + +# Copy install scripts +COPY ./src/ $INST_DIR + +# Run installations +RUN \ + for SCRIPT in $INST_SCRIPTS; do \ + bash ${INST_DIR}${SCRIPT}; \ + done && \ + $STARTUPDIR/set_user_permission.sh $HOME && \ + rm -f /etc/X11/xinit/Xclients && \ + chown 1000:0 $HOME && \ + mkdir -p /home/kasm-user && \ + chown -R 1000:0 /home/kasm-user && \ + rm -Rf ${INST_DIR} + +# Userspace Runtime +ENV HOME /home/kasm-user +WORKDIR $HOME +USER 1000 + +CMD ["--tail-log"] diff --git a/dockerfile-kasm-fedora-38-desktop b/dockerfile-kasm-fedora-38-desktop new file mode 100644 index 0000000..4f54be1 --- /dev/null +++ b/dockerfile-kasm-fedora-38-desktop @@ -0,0 +1,53 @@ +ARG BASE_TAG="develop" +ARG BASE_IMAGE="core-fedora-38" +FROM kasmweb/$BASE_IMAGE:$BASE_TAG + +USER root + +ENV DISTRO=fedora37 +ENV HOME /home/kasm-default-profile +ENV STARTUPDIR /dockerstartup +WORKDIR $HOME + +### Envrionment config +ENV SKIP_CLEAN=true \ + KASM_RX_HOME=$STARTUPDIR/kasmrx \ + DONT_PROMPT_WSL_INSTALL="No_Prompt_please" \ + INST_DIR=$STARTUPDIR/install \ + INST_SCRIPTS="/oracle/install/tools/install_tools_deluxe.sh \ + /oracle/install/misc/install_tools.sh \ + /ubuntu/install/chromium/install_chromium.sh \ + /ubuntu/install/firefox/install_firefox.sh \ + /oracle/install/sublime_text/install_sublime_text.sh \ + /oracle/install/vs_code/install_vs_code.sh \ + /ubuntu/install/remmina/install_remmina.sh \ + /oracle/install/only_office/install_only_office.sh \ + /oracle/install/gimp/install_gimp.sh \ + /oracle/install/zoom/install_zoom.sh \ + /oracle/install/ansible/install_ansible.sh \ + /oracle/install/terraform/install_terraform.sh \ + /oracle/install/telegram/install_telegram.sh \ + /ubuntu/install/thunderbird/install_thunderbird.sh \ + /ubuntu/install/cleanup/cleanup.sh" + +# Copy install scripts +COPY ./src/ $INST_DIR + +# Run installations +RUN \ + for SCRIPT in $INST_SCRIPTS; do \ + bash ${INST_DIR}${SCRIPT}; \ + done && \ + $STARTUPDIR/set_user_permission.sh $HOME && \ + rm -f /etc/X11/xinit/Xclients && \ + chown 1000:0 $HOME && \ + mkdir -p /home/kasm-user && \ + chown -R 1000:0 /home/kasm-user && \ + rm -Rf ${INST_DIR} + +# Userspace Runtime +ENV HOME /home/kasm-user +WORKDIR $HOME +USER 1000 + +CMD ["--tail-log"] diff --git a/docs/alpine-318-desktop/README.md b/docs/alpine-318-desktop/README.md new file mode 100644 index 0000000..0f3ea16 --- /dev/null +++ b/docs/alpine-318-desktop/README.md @@ -0,0 +1,7 @@ +# About This Image + +This Image contains a browser-accessible Alpine 3.18 Desktop with various productivity and development apps installed. + +![Screenshot][Image_Screenshot] + +[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/alpine-317-desktop.png "Image Screenshot" diff --git a/docs/alpine-318-desktop/demo.txt b/docs/alpine-318-desktop/demo.txt new file mode 100644 index 0000000..0b606c7 --- /dev/null +++ b/docs/alpine-318-desktop/demo.txt @@ -0,0 +1,9 @@ +# Live Demo + + + +**Launch a real-time demo in a new browser window:** Live Demo. + + + +∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.* diff --git a/docs/alpine-318-desktop/description.txt b/docs/alpine-318-desktop/description.txt new file mode 100644 index 0000000..b8b4a14 --- /dev/null +++ b/docs/alpine-318-desktop/description.txt @@ -0,0 +1 @@ +Alpine 3.18 desktop for Kasm Workspaces diff --git a/docs/debian-bookworm-desktop/README.md b/docs/debian-bookworm-desktop/README.md new file mode 100644 index 0000000..fde7e66 --- /dev/null +++ b/docs/debian-bookworm-desktop/README.md @@ -0,0 +1,7 @@ +# About This Image + +This Image contains a browser-accessible Debian Bookworm Desktop with various productivity and development apps installed. + +![Screenshot][Image_Screenshot] + +[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/debian-bullseye-desktop.png "Image Screenshot" diff --git a/docs/debian-bookworm-desktop/demo.txt b/docs/debian-bookworm-desktop/demo.txt new file mode 100644 index 0000000..0b606c7 --- /dev/null +++ b/docs/debian-bookworm-desktop/demo.txt @@ -0,0 +1,9 @@ +# Live Demo + + + +**Launch a real-time demo in a new browser window:** Live Demo. + + + +∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.* diff --git a/docs/debian-bookworm-desktop/description.txt b/docs/debian-bookworm-desktop/description.txt new file mode 100644 index 0000000..eaf38af --- /dev/null +++ b/docs/debian-bookworm-desktop/description.txt @@ -0,0 +1 @@ +Debian Bookworm desktop for Kasm Workspaces diff --git a/docs/fedora-38-desktop/README.md b/docs/fedora-38-desktop/README.md new file mode 100644 index 0000000..927ef38 --- /dev/null +++ b/docs/fedora-38-desktop/README.md @@ -0,0 +1,7 @@ +# About This Image + +This Image contains a browser-accessible Fedora 38 Desktop with various productivity and development apps installed. + +![Screenshot][Image_Screenshot] + +[Image_Screenshot]: https://info.kasmweb.com/hubfs/dockerhub/image-screenshots/fedora-37-desktop.png "Image Screenshot" diff --git a/docs/fedora-38-desktop/demo.txt b/docs/fedora-38-desktop/demo.txt new file mode 100644 index 0000000..0b606c7 --- /dev/null +++ b/docs/fedora-38-desktop/demo.txt @@ -0,0 +1,9 @@ +# Live Demo + + + +**Launch a real-time demo in a new browser window:** Live Demo. + + + +∗*Note: Demo is limited to 3 minutes and has upload/downloads restricted for security purposes.* diff --git a/docs/fedora-38-desktop/description.txt b/docs/fedora-38-desktop/description.txt new file mode 100644 index 0000000..e73fd2d --- /dev/null +++ b/docs/fedora-38-desktop/description.txt @@ -0,0 +1 @@ +Fedora 38 desktop for Kasm Workspaces diff --git a/src/oracle/install/ansible/install_ansible.sh b/src/oracle/install/ansible/install_ansible.sh index c7e450f..cc6f992 100644 --- a/src/oracle/install/ansible/install_ansible.sh +++ b/src/oracle/install/ansible/install_ansible.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -ex -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf install -y ansible if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/oracle/install/gimp/install_gimp.sh b/src/oracle/install/gimp/install_gimp.sh index ad2af9e..5a83349 100644 --- a/src/oracle/install/gimp/install_gimp.sh +++ b/src/oracle/install/gimp/install_gimp.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -ex -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf install -y gimp if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/oracle/install/libre_office/install_libre_office.sh b/src/oracle/install/libre_office/install_libre_office.sh index c21fa67..3cc5e58 100644 --- a/src/oracle/install/libre_office/install_libre_office.sh +++ b/src/oracle/install/libre_office/install_libre_office.sh @@ -7,7 +7,7 @@ if [ "$ARCH" == "amd64" ] ; then exit 0 fi -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf install -y \ libreoffice-core \ libreoffice-writer \ diff --git a/src/oracle/install/only_office/install_only_office.sh b/src/oracle/install/only_office/install_only_office.sh index 03df6ed..73e20a0 100644 --- a/src/oracle/install/only_office/install_only_office.sh +++ b/src/oracle/install/only_office/install_only_office.sh @@ -8,7 +8,7 @@ if [ "$ARCH" == "arm64" ] ; then fi curl -L -o only_office.rpm "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors.$(arch).rpm" -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf localinstall -y only_office.rpm if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/oracle/install/slack/install_slack.sh b/src/oracle/install/slack/install_slack.sh index 38382d1..09e5ab4 100644 --- a/src/oracle/install/slack/install_slack.sh +++ b/src/oracle/install/slack/install_slack.sh @@ -21,7 +21,7 @@ version=4.12.2 # This path may not be accurate once arm64 support arrives. Specifically I don't know if it will still be under x64 wget -q https://downloads.slack-edge.com/releases/linux/${version}/prod/x64/slack-${version}-0.1.fc21.x86_64.rpm -O slack.rpm -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf localinstall -y slack.rpm if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/oracle/install/sublime_text/install_sublime_text.sh b/src/oracle/install/sublime_text/install_sublime_text.sh index f9b5df4..3e76aa8 100644 --- a/src/oracle/install/sublime_text/install_sublime_text.sh +++ b/src/oracle/install/sublime_text/install_sublime_text.sh @@ -8,7 +8,7 @@ fi rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf config-manager --add-repo https://download.sublimetext.com/rpm/stable/$(arch)/sublime-text.repo dnf install -y sublime-text if [ -z ${SKIP_CLEAN+x} ]; then diff --git a/src/oracle/install/terraform/install_terraform.sh b/src/oracle/install/terraform/install_terraform.sh index 88ff331..3008849 100644 --- a/src/oracle/install/terraform/install_terraform.sh +++ b/src/oracle/install/terraform/install_terraform.sh @@ -14,7 +14,7 @@ if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almali if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all fi -elif [ "${DISTRO}" == "fedora37" ]; then +elif [[ "${DISTRO}" == @(fedora37|fedora38) ]]; then dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo dnf install -y terraform if [ -z ${SKIP_CLEAN+x} ]; then diff --git a/src/oracle/install/vs_code/install_vs_code.sh b/src/oracle/install/vs_code/install_vs_code.sh index ce3b504..61a478d 100644 --- a/src/oracle/install/vs_code/install_vs_code.sh +++ b/src/oracle/install/vs_code/install_vs_code.sh @@ -3,7 +3,7 @@ set -ex ARCH=$(arch | sed 's/aarch64/arm64/g' | sed 's/x86_64/x64/g') wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then wget -q https://update.code.visualstudio.com/latest/linux-rpm-${ARCH}/stable -O vs_code.rpm dnf localinstall -y vs_code.rpm else @@ -20,7 +20,7 @@ chown 1000:1000 $HOME/Desktop/code.desktop rm vs_code.rpm # Conveniences for python development -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf install -y python3-setuptools python3-virtualenv if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/oracle/install/zoom/install_zoom.sh b/src/oracle/install/zoom/install_zoom.sh index acdc0ce..ec0b52a 100644 --- a/src/oracle/install/zoom/install_zoom.sh +++ b/src/oracle/install/zoom/install_zoom.sh @@ -8,7 +8,7 @@ fi wget -q https://zoom.us/client/latest/zoom_$(arch).rpm -if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf localinstall -y zoom_$(arch).rpm if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all diff --git a/src/ubuntu/install/chromium/install_chromium.sh b/src/ubuntu/install/chromium/install_chromium.sh index d7b6ada..8741376 100644 --- a/src/ubuntu/install/chromium/install_chromium.sh +++ b/src/ubuntu/install/chromium/install_chromium.sh @@ -9,8 +9,8 @@ if [[ "${DISTRO}" == @(debian|opensuse|ubuntu) ]] && [ ${ARCH} = 'amd64' ] && [ exit 0 fi -if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then - if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37) ]]; then +if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then + if [[ "${DISTRO}" == @(oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|fedora37|fedora38) ]]; then dnf install -y chromium if [ -z ${SKIP_CLEAN+x} ]; then dnf clean all @@ -121,7 +121,7 @@ if [ "${DISTRO}" != "opensuse" ] && ! grep -q "ID=debian" /etc/os-release && ! g cp /usr/bin/chromium-browser /usr/bin/chromium fi -if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|opensuse|fedora37) ]]; then +if [[ "${DISTRO}" == @(centos|oracle8|rockylinux9|rockylinux8|oracle9|almalinux9|almalinux8|opensuse|fedora37|fedora38) ]]; then cat >> $HOME/.config/mimeapps.list <>$HOME/.mozilla/firefox/profiles.ini <>$HOME/.mozilla/firefox/profiles.ini <