diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f969a39..3feb311 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,28 +21,37 @@ before_script: ####################### template: stage: template + rules: + - when: always script: - apk add py3-jinja2 py3-yaml - cd ci-scripts - python3 template-gitlab.py tags: - - oci-fixed-amd + - oci-amd-scheduled artifacts: paths: - gitlab-ci.yml + pipeline: stage: run - except: - variables: - - $README_USERNAME_RUN - - $README_PASSWORD_RUN - - $QUAY_API_KEY_RUN - - $DOCKERHUB_REVERT_RUN - - $REVERT_IS_ROLLING_RUN + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - when: on_success + variables: + PARENT_PIPELINE_SOURCE: "$CI_PIPELINE_SOURCE" + RUN_SET: "$RUN_SET" trigger: include: - artifact: gitlab-ci.yml job: template + pipeline_readme: stage: run only: @@ -56,6 +65,7 @@ pipeline_readme: include: - artifact: gitlab-ci.yml job: template + pipeline_readme_quay: stage: run only: @@ -67,6 +77,7 @@ pipeline_readme_quay: include: - artifact: gitlab-ci.yml job: template + pipeline_revert: stage: run only: diff --git a/ci-scripts/gitlab-ci.template b/ci-scripts/gitlab-ci.template index d0507b7..9c0ec57 100644 --- a/ci-scripts/gitlab-ci.template +++ b/ci-scripts/gitlab-ci.template @@ -23,7 +23,6 @@ before_script: - if [ "$CI_COMMIT_REF_PROTECTED" == "true" ]; then docker login --username $QUAY_USERNAME --password $QUAY_PASSWORD quay.io; fi - if [ "$CI_COMMIT_REF_PROTECTED" == "true" ]; then docker login --username $GHCR_USERNAME --password $GHCR_PASSWORD ghcr.io; fi - export SANITIZED_BRANCH="$(echo $CI_COMMIT_REF_NAME | sed -r 's#^release/##' | sed 's/\//_/g')" - - export BASE_TAG="{{ BASE_TAG }}" ############################################### # Build Containers and push to cache endpoint # @@ -31,49 +30,55 @@ before_script: {% for IMAGE in multiImages %} build_{{ IMAGE.name }}: stage: build - script: - - apk add bash - - bash ci-scripts/build.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" - {% if FILE_LIMITS %}only: - changes: + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + {% if FILE_LIMITS %}- changes: {% for FILE in files %}- {{ FILE }} {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + - when: on_success + script: + - apk add bash + - bash ci-scripts/build.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" tags: - ${TAG} retry: 1 parallel: matrix: - - TAG: [ oci-fixed-amd, oci-fixed-arm ] + - TAG: [ oci-amd-scheduled, oci-arm-scheduled ] {% endfor %} {% for IMAGE in singleImages %} build_{{ IMAGE.name }}: stage: build - script: - - apk add bash - - bash ci-scripts/build.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" - {% if FILE_LIMITS %}only: - changes: + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + {% if FILE_LIMITS %}- changes: {% for FILE in files %}- {{ FILE }} {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + - when: on_success + script: + - apk add bash + - bash ci-scripts/build.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" tags: - - oci-fixed-amd + - oci-amd-scheduled retry: 1 {% endfor %} @@ -83,27 +88,28 @@ build_{{ IMAGE.name }}: {% for IMAGE in multiImages %} test_{{ IMAGE.name }}: stage: test - when: always - script: - - apk add bash - - bash ci-scripts/test.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" "${ARCH}" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" - {% if FILE_LIMITS %}only: - changes: + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + {% if FILE_LIMITS %}- changes: {% for FILE in files %}- {{ FILE }} {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - when: on_success + script: + - apk add bash + - bash ci-scripts/test.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" "${ARCH}" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" needs: - build_{{ IMAGE.name }} - when: on_success tags: - - oci-fixed-amd + - oci-amd-scheduled retry: 1 parallel: matrix: @@ -113,27 +119,28 @@ test_{{ IMAGE.name }}: {% for IMAGE in singleImages %} test_{{ IMAGE.name }}: stage: test - when: always - script: - - apk add bash - - bash ci-scripts/test.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" "x86_64" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" - {% if FILE_LIMITS %}only: - changes: + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + {% if FILE_LIMITS %}- changes: {% for FILE in files %}- {{ FILE }} {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - when: on_success + script: + - apk add bash + - bash ci-scripts/test.sh "{{ IMAGE.name }}" "{{ IMAGE.base }}" "{{ IMAGE.dockerfile }}" "x86_64" "${EC2_LAUNCHER_ID}" "${EC2_LAUNCHER_SECRET}" needs: - build_{{ IMAGE.name }} - when: on_success tags: - - oci-fixed-amd + - oci-amd-scheduled retry: 1 {% endfor %} @@ -143,63 +150,117 @@ test_{{ IMAGE.name }}: {% for IMAGE in multiImages %} manifest_{{ IMAGE.name }}: stage: manifest - when: always + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + {% if FILE_LIMITS %}- changes: + {% for FILE in files %}- {{ FILE }} + {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} + {% endfor %}{% endif %} + - when: on_success variables: SCHEDULED: "{{ SCHEDULED }}" SCHEDULE_NAME: "{{ SCHEDULE_NAME }}" script: - apk add bash tar - - bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "multi"{% if IMAGE.singleapp %} - - bash ci-scripts/app-layer.sh "{{ IMAGE.name }}" "multi" "{{ IMAGE.base }}"{% endif %} - {% if FILE_LIMITS %}only: - changes: - {% for FILE in files %}- {{ FILE }} - {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} - {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "multi" + # Disabling app layer build due to feature not being used + #{% if IMAGE.singleapp %} + #- bash ci-scripts/app-layer.sh "{{ IMAGE.name }}" "multi" "{{ IMAGE.base }}"{% endif %} needs: - test_{{ IMAGE.name }} - when: on_success retry: 1 tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} {% for IMAGE in singleImages %} manifest_{{ IMAGE.name }}: stage: manifest - when: always + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET != "{{ IMAGE.runset }}" + when: never + {% if FILE_LIMITS %}- changes: + {% for FILE in files %}- {{ FILE }} + {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} + {% endfor %}{% endif %} + - when: on_success variables: SCHEDULED: "{{ SCHEDULED }}" SCHEDULE_NAME: "{{ SCHEDULE_NAME }}" script: - apk add bash tar - - bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "single"{% if IMAGE.singleapp %} - - bash ci-scripts/app-layer.sh "{{ IMAGE.name }}" "single" "{{ IMAGE.base }}"{% endif %} - {% if FILE_LIMITS %}only: - changes: - {% for FILE in files %}- {{ FILE }} - {% endfor %}{% for FILE in IMAGE.changeFiles %}- {{ FILE }} - {% endfor %}{% endif %} - except: - variables: - - $README_USERNAME - - $README_PASSWORD - - $QUAY_API_KEY - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING + - bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "single" + # Disabling app layer build due to feature not being used + #{% if IMAGE.singleapp %} + #- bash ci-scripts/app-layer.sh "{{ IMAGE.name }}" "single" "{{ IMAGE.base }}"{% endif %} needs: - test_{{ IMAGE.name }} - when: on_success retry: 1 tags: - - oci-fixed-amd + - oci-amd-scheduled +{% endfor %} + +############################# +# Manifest for Weekly Build # +############################# + +{% for IMAGE in multiImages %} +weekly_manifest_{{ IMAGE.name }}: + stage: manifest + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET == "schedule" + when: always + - when: never + script: + - apk add bash tar + - bash ci-scripts/weekly-manifest.sh "{{ IMAGE.name }}" "multi" + retry: 1 + tags: + - oci-amd-scheduled +{% endfor %} + +{% for IMAGE in singleImages %} +weekly_manifest_{{ IMAGE.name }}: + stage: manifest + rules: + - if: > + $README_USERNAME || + $README_PASSWORD || + $QUAY_API_KEY || + $DOCKERHUB_REVERT || + $REVERT_IS_ROLLING + when: never + - if: $PARENT_PIPELINE_SOURCE == "schedule" && $RUN_SET == "schedule" + when: always + - when: never + script: + - apk add bash tar + - bash ci-scripts/weekly-manifest.sh "{{ IMAGE.name }}" "single" + retry: 1 + tags: + - oci-amd-scheduled {% endfor %} #################### @@ -210,81 +271,85 @@ manifest_{{ IMAGE.name }}: {% for IMAGE in multiImages %} update_readmes_{{ IMAGE.name }}: stage: readme + rules: + - if: > + $README_USERNAME && + $README_PASSWORD + when: always script: - apk add bash - bash ci-scripts/readme.sh "{{ IMAGE.name }}" - only: - variables: - - $README_USERNAME - - $README_PASSWORD tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} {% for IMAGE in singleImages %} update_readmes_{{ IMAGE.name }}: stage: readme + rules: + - if: > + $README_USERNAME && + $README_PASSWORD + when: always script: - apk add bash - bash ci-scripts/readme.sh "{{ IMAGE.name }}" - only: - variables: - - $README_USERNAME - - $README_PASSWORD tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} ## Update Quay Readmes ## {% for IMAGE in multiImages %} update_quay_readmes_{{ IMAGE.name }}: stage: readme + rules: + - if: $QUAY_API_KEY + when: always script: - apk add bash - bash ci-scripts/quay_readme.sh "{{ IMAGE.name }}" - only: - variables: - - $QUAY_API_KEY tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} {% for IMAGE in singleImages %} update_quay_readmes_{{ IMAGE.name }}: stage: readme + rules: + - if: $QUAY_API_KEY + when: always script: - apk add bash - bash ci-scripts/quay_readme.sh "{{ IMAGE.name }}" - only: - variables: - - $QUAY_API_KEY tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} ## Revert Images to specific build id ## {% for IMAGE in multiImages %} dockerhub_revert_{{ IMAGE.name }}: stage: revert + rules: + - if: > + $DOCKERHUB_REVERT && + $REVERT_IS_ROLLING + when: always script: - /bin/bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "multi" "${DOCKERHUB_REVERT}" "${REVERT_IS_ROLLING}" - only: - variables: - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} {% for IMAGE in singleImages %} dockerhub_revert_{{ IMAGE.name }}: stage: revert + rules: + - if: > + $DOCKERHUB_REVERT && + $REVERT_IS_ROLLING + when: always script: - /bin/bash ci-scripts/manifest.sh "{{ IMAGE.name }}" "single" "${DOCKERHUB_REVERT}" "${REVERT_IS_ROLLING}" - only: - variables: - - $DOCKERHUB_REVERT - - $REVERT_IS_ROLLING tags: - - oci-fixed-amd + - oci-amd-scheduled {% endfor %} diff --git a/ci-scripts/template-vars.yaml b/ci-scripts/template-vars.yaml index 6ce7a4a..c0686cf 100644 --- a/ci-scripts/template-vars.yaml +++ b/ci-scripts/template-vars.yaml @@ -6,6 +6,7 @@ files: &UNIVERSAL_CHANGE_FILES multiImages: - name: audacity singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-audacity changeFiles: @@ -13,6 +14,7 @@ multiImages: - src/ubuntu/install/audacity/** - name: chromium singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-chromium changeFiles: @@ -22,6 +24,7 @@ multiImages: - src/ubuntu/install/certificates/** - name: deluge singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-deluge changeFiles: @@ -29,6 +32,7 @@ multiImages: - src/ubuntu/install/deluge/** - name: doom singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-doom changeFiles: @@ -36,6 +40,7 @@ multiImages: - src/ubuntu/install/doom/** - name: filezilla singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-filezilla changeFiles: @@ -43,6 +48,7 @@ multiImages: - src/ubuntu/install/filezilla/** - name: firefox singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-firefox changeFiles: @@ -52,6 +58,7 @@ multiImages: - src/ubuntu/install/certificates/** - name: gimp singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-gimp changeFiles: @@ -59,6 +66,7 @@ multiImages: - src/ubuntu/install/gimp/** - name: inkscape singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-inkscape changeFiles: @@ -66,6 +74,7 @@ multiImages: - src/ubuntu/install/inkscape/** - name: java-dev singleapp: false + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-java-dev changeFiles: @@ -80,6 +89,7 @@ multiImages: - src/ubuntu/install/eclipse/** - name: kasmos-desktop singleapp: false + runset: set-b base: core-kasmos dockerfile: dockerfile-kasmos-desktop changeFiles: @@ -100,6 +110,7 @@ multiImages: - src/ubuntu/install/cleanup/** - name: libre-office singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-libre-office changeFiles: @@ -107,6 +118,7 @@ multiImages: - src/ubuntu/install/libre_office/** - name: nessus singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-nessus changeFiles: @@ -116,6 +128,7 @@ multiImages: - src/ubuntu/install/cleanup/** - name: opensuse-15-desktop singleapp: false + runset: set-a base: core-opensuse-15 dockerfile: dockerfile-kasm-opensuse-15-desktop changeFiles: @@ -132,6 +145,7 @@ multiImages: - src/opensuse/install/** - name: oracle-8-desktop singleapp: false + runset: set-b base: core-oracle-8 dockerfile: dockerfile-kasm-oracle-8-desktop changeFiles: @@ -146,6 +160,7 @@ multiImages: - src/ubuntu/install/slack/** - name: pinta singleapp: true + runset: set-a base: core-ubuntu-noble dockerfile: dockerfile-kasm-pinta changeFiles: @@ -153,6 +168,7 @@ multiImages: - src/ubuntu/install/pinta/** - name: qbittorrent singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-qbittorrent changeFiles: @@ -160,6 +176,7 @@ multiImages: - src/ubuntu/install/qbittorrent/** - name: redroid singleapp: false + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-redroid changeFiles: @@ -175,6 +192,7 @@ multiImages: - src/ubuntu/install/cleanup/** - name: remmina singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-remmina changeFiles: @@ -182,6 +200,7 @@ multiImages: - src/ubuntu/install/remmina/** - name: spiderfoot singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-spiderfoot changeFiles: @@ -192,6 +211,7 @@ multiImages: - src/ubuntu/install/cleanup/** - name: sublime-text singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-sublime-text changeFiles: @@ -199,6 +219,7 @@ multiImages: - src/ubuntu/install/sublime_text/** - name: telegram singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-telegram changeFiles: @@ -207,6 +228,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: terminal singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-terminal changeFiles: @@ -216,6 +238,7 @@ multiImages: - src/ubuntu/install/terminal/** - name: thunderbird singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-thunderbird changeFiles: @@ -223,6 +246,7 @@ multiImages: - src/ubuntu/install/thunderbird/** - name: tor-browser singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-tor-browser changeFiles: @@ -231,6 +255,7 @@ multiImages: - src/ubuntu/install/torbrowser/** - name: ubuntu-jammy-desktop singleapp: false + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-ubuntu-jammy-desktop changeFiles: @@ -258,6 +283,7 @@ multiImages: - src/ubuntu/install/slack/** - name: ubuntu-jammy-desktop-vpn singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-ubuntu-jammy-desktop-vpn changeFiles: @@ -286,6 +312,7 @@ multiImages: - src/ubuntu/install/vpn/** - name: ubuntu-noble-desktop singleapp: false + runset: set-a base: core-ubuntu-noble dockerfile: dockerfile-kasm-ubuntu-noble-desktop changeFiles: @@ -313,6 +340,7 @@ multiImages: - src/ubuntu/install/slack/** - name: vlc singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-vlc changeFiles: @@ -320,6 +348,7 @@ multiImages: - src/ubuntu/install/vlc/** - name: vs-code singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-vs-code changeFiles: @@ -328,6 +357,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: almalinux-8-desktop singleapp: false + runset: set-b base: core-almalinux-8 dockerfile: dockerfile-kasm-almalinux-8-desktop changeFiles: @@ -342,6 +372,7 @@ multiImages: - src/ubuntu/install/slack/** - name: almalinux-9-desktop singleapp: false + runset: set-a base: core-almalinux-9 dockerfile: dockerfile-kasm-almalinux-9-desktop changeFiles: @@ -355,6 +386,7 @@ multiImages: - src/ubuntu/install/slack/** - name: alpine-319-desktop singleapp: false + runset: set-b base: core-alpine-319 dockerfile: dockerfile-kasm-alpine-319-desktop changeFiles: @@ -364,6 +396,7 @@ multiImages: - src/alpine/install/** - name: alpine-320-desktop singleapp: false + runset: set-a base: core-alpine-320 dockerfile: dockerfile-kasm-alpine-320-desktop changeFiles: @@ -373,6 +406,7 @@ multiImages: - src/alpine/install/** - name: alpine-321-desktop singleapp: false + runset: set-b base: core-alpine-321 dockerfile: dockerfile-kasm-alpine-321-desktop changeFiles: @@ -382,6 +416,7 @@ multiImages: - src/alpine/install/** - name: brave singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-brave changeFiles: @@ -390,6 +425,7 @@ multiImages: - src/ubuntu/install/brave/** - name: debian-bullseye-desktop singleapp: false + runset: set-b base: core-debian-bullseye dockerfile: dockerfile-kasm-debian-bullseye-desktop changeFiles: @@ -415,6 +451,7 @@ multiImages: - src/ubuntu/install/slack/** - name: debian-bookworm-desktop singleapp: false + runset: set-a base: core-debian-bookworm dockerfile: dockerfile-kasm-debian-bookworm-desktop changeFiles: @@ -440,6 +477,7 @@ multiImages: - src/ubuntu/install/slack/** - name: fedora-39-desktop singleapp: false + runset: set-b base: core-fedora-39 dockerfile: dockerfile-kasm-fedora-39-desktop changeFiles: @@ -453,6 +491,7 @@ multiImages: - src/ubuntu/install/slack/** - name: fedora-40-desktop singleapp: false + runset: set-a base: core-fedora-40 dockerfile: dockerfile-kasm-fedora-40-desktop changeFiles: @@ -466,6 +505,7 @@ multiImages: - src/ubuntu/install/slack/** - name: kali-rolling-desktop singleapp: false + runset: set-b base: core-kali-rolling dockerfile: dockerfile-kasm-kali-rolling-desktop changeFiles: @@ -475,6 +515,7 @@ multiImages: - src/ubuntu/install/chromium/** - name: maltego singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-maltego changeFiles: @@ -483,6 +524,7 @@ multiImages: - src/ubuntu/install/firefox/** - name: minetest singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-minetest changeFiles: @@ -490,6 +532,7 @@ multiImages: - src/ubuntu/install/minetest/** - name: oracle-9-desktop singleapp: false + runset: set-a base: core-oracle-9 dockerfile: dockerfile-kasm-oracle-9-desktop changeFiles: @@ -503,6 +546,7 @@ multiImages: - src/ubuntu/install/slack/** - name: rhel-9-desktop singleapp: false + runset: set-b base: core-rhel-9 dockerfile: dockerfile-kasm-rhel-9-desktop changeFiles: @@ -516,6 +560,7 @@ multiImages: - src/ubuntu/install/slack/** - name: parrotos-6-desktop singleapp: false + runset: set-a base: core-parrotos-6 dockerfile: dockerfile-kasm-parrotos-6-desktop changeFiles: @@ -526,6 +571,7 @@ multiImages: - src/ubuntu/install/chromium/** - name: retroarch singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-retroarch changeFiles: @@ -533,6 +579,7 @@ multiImages: - src/ubuntu/install/retroarch/** - name: rockylinux-8-desktop singleapp: false + runset: set-a base: core-rockylinux-8 dockerfile: dockerfile-kasm-rockylinux-8-desktop changeFiles: @@ -547,6 +594,7 @@ multiImages: - src/ubuntu/install/slack/** - name: rockylinux-9-desktop singleapp: false + runset: set-b base: core-rockylinux-9 dockerfile: dockerfile-kasm-rockylinux-9-desktop changeFiles: @@ -560,6 +608,7 @@ multiImages: - src/ubuntu/install/slack/** - name: super-tux-kart singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-super-tux-kart changeFiles: @@ -567,6 +616,7 @@ multiImages: - src/ubuntu/install/super_tux_kart/** - name: ubuntu-jammy-dind singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-ubuntu-jammy-dind changeFiles: @@ -581,6 +631,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: ubuntu-jammy-dind-rootless singleapp: false + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-ubuntu-jammy-dind-rootless changeFiles: @@ -596,6 +647,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: ubuntu-noble-dind singleapp: false + runset: set-b base: core-ubuntu-noble dockerfile: dockerfile-kasm-ubuntu-noble-dind changeFiles: @@ -610,6 +662,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: ubuntu-noble-dind-rootless singleapp: false + runset: set-a base: core-ubuntu-noble dockerfile: dockerfile-kasm-ubuntu-noble-dind-rootless changeFiles: @@ -625,6 +678,7 @@ multiImages: - src/ubuntu/install/chrome/** - name: vivaldi singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-vivaldi changeFiles: @@ -635,6 +689,7 @@ multiImages: singleImages: - name: blender singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-blender changeFiles: @@ -642,6 +697,7 @@ singleImages: - src/ubuntu/install/blender/** - name: chrome singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-chrome changeFiles: @@ -651,6 +707,7 @@ singleImages: - src/ubuntu/install/chrome/** - name: desktop singleapp: false + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-desktop changeFiles: @@ -660,6 +717,7 @@ singleImages: - src/ubuntu/install/chrome/** - name: desktop-deluxe singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-desktop-deluxe changeFiles: @@ -683,6 +741,7 @@ singleImages: - src/ubuntu/install/chrome/** - name: discord singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-discord changeFiles: @@ -690,6 +749,7 @@ singleImages: - src/ubuntu/install/discord/** - name: edge singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-edge changeFiles: @@ -698,6 +758,7 @@ singleImages: - src/ubuntu/install/edge/** - name: hunchly singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-hunchly changeFiles: @@ -706,6 +767,7 @@ singleImages: - src/ubuntu/install/hunchly/** - name: insomnia singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-insomnia changeFiles: @@ -713,12 +775,14 @@ singleImages: - src/ubuntu/install/insomnia/** - name: only-office singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-only-office changeFiles: - dockerfile-kasm-only-office - name: postman singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-postman changeFiles: @@ -727,6 +791,7 @@ singleImages: - src/ubuntu/install/postman/** - name: signal singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-signal changeFiles: @@ -734,6 +799,7 @@ singleImages: - src/ubuntu/install/signal/** - name: slack singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-slack changeFiles: @@ -744,6 +810,7 @@ singleImages: - src/ubuntu/install/cleanup/** - name: steam singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-steam changeFiles: @@ -751,6 +818,7 @@ singleImages: - src/ubuntu/install/steam/** - name: tracelabs singleapp: false + runset: set-b base: core-kali-rolling dockerfile: dockerfile-kasm-tracelabs changeFiles: @@ -760,6 +828,7 @@ singleImages: - src/ubuntu/install/tracelabs/** - name: unityhub singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-unityhub changeFiles: @@ -769,6 +838,7 @@ singleImages: - src/ubuntu/install/unityhub/** - name: zoom singleapp: true + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-zoom changeFiles: @@ -777,6 +847,7 @@ singleImages: - src/ubuntu/install/chrome/** - name: zsnes singleapp: true + runset: set-a base: core-ubuntu-jammy dockerfile: dockerfile-kasm-zsnes changeFiles: @@ -784,6 +855,7 @@ singleImages: - src/ubuntu/install/zsnes/** - name: forensic-osint singleapp: false + runset: set-b base: core-ubuntu-jammy dockerfile: dockerfile-kasm-forensic-osint changeFiles: diff --git a/ci-scripts/weekly-manifest.sh b/ci-scripts/weekly-manifest.sh new file mode 100644 index 0000000..4190637 --- /dev/null +++ b/ci-scripts/weekly-manifest.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +REGISTRY_MIRRORS=("quay.io" "ghcr.io") +NAME=$1 +TYPE=$2 +BASE=$3 +APPS="kasm-apps" +SANITIZED_BRANCH_DAILY=${SANITIZED_BRANCH}-rolling-daily +SANITIZED_BRANCH=${SANITIZED_BRANCH}-rolling-weekly + +tagImage() { + docker pull "$1" + docker tag "$1" "$2" + docker push "$2" +} + +manifest() { + docker manifest push --purge "$1" || : + docker manifest create "$1" "$2":x86_64-"$3" "$2":aarch64-"$3" + docker manifest annotate "$1" "$2":aarch64-"$3" --os linux --arch arm64 --variant v8 + docker manifest push --purge "$1" +} + +# Manifest for multi pull and push for single arch +# Will pull the daily rolling images and retag them to weekly +if [[ "${TYPE}" == "multi" ]]; then + # Pulling and retagging daily image + tagImage "${ORG_NAME}/${NAME}:x86_64-${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${NAME}:x86_64-${SANITIZED_BRANCH}" + tagImage "${ORG_NAME}/${NAME}:aarch64-${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${NAME}:aarch64-${SANITIZED_BRANCH}" + + # Manifest tag + manifest "${ORG_NAME}/${NAME}:${SANITIZED_BRANCH}" "${ORG_NAME}/${NAME}" "${SANITIZED_BRANCH}" + + for MIRROR in "${REGISTRY_MIRRORS[@]}"; do + tagImage "${ORG_NAME}/${NAME}:x86_64-${SANITIZED_BRANCH_DAILY}" "${MIRROR}/${MIRROR_ORG_NAME}/${NAME}:x86_64-${SANITIZED_BRANCH}" + tagImage "${ORG_NAME}/${NAME}:aarch64-${SANITIZED_BRANCH_DAILY}" "${MIRROR}/${MIRROR_ORG_NAME}/${NAME}:aarch64-${SANITIZED_BRANCH}" + + manifest "${MIRROR}/${MIRROR_ORG_NAME}/${NAME}:${SANITIZED_BRANCH}" "${MIRROR}/${MIRROR_ORG_NAME}/${NAME}" "${SANITIZED_BRANCH}" + done + + # Single App Layer Images + # Disabling Single App Layer due to functionality not being used currently + # if [ ! -z "${BASE}" ];then + # tagImage "${ORG_NAME}/${APPS}:x86_64-${BASE}-${NAME}-${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${APPS}:x86_64-${BASE}-${NAME}-${SANITIZED_BRANCH}" + # tagImage "${ORG_NAME}/${APPS}:aarch64-${BASE}-${NAME}-${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${APPS}:aarch64-${BASE}-${NAME}-${SANITIZED_BRANCH}" + + # manifest "${ORG_NAME}/${APPS}:${BASE}-${NAME}-${SANITIZED_BRANCH}" "${ORG_NAME}/${APPS}" "${BASE}-${NAME}-${SANITIZED_BRANCH}" + # fi +# Single arch image just pull and push +else + tagImage "${ORG_NAME}/${NAME}:${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${NAME}:${SANITIZED_BRANCH}" + + for MIRROR in "${REGISTRY_MIRRORS[@]}"; do + tagImage "${ORG_NAME}/${NAME}:${SANITIZED_BRANCH_DAILY}" "${MIRROR}/${MIRROR_ORG_NAME}/${NAME}:${SANITIZED_BRANCH}" + done + + # Single App Layer Images + # Disabling Single App Layer due to functionality not being used currently + # if [ ! -z "${BASE}" ];then + # tagImage "${ORG_NAME}/${APPS}:${BASE}-${NAME}-${SANITIZED_BRANCH_DAILY}" "${ORG_NAME}/${APPS}:x86_64-${BASE}-${NAME}-${SANITIZED_BRANCH}" + # fi +fi \ No newline at end of file