image: docker
services:
  - docker:dind

stages:
  - build
  - manifest
  - readme
  - test
  - linktests

variables:
  DOCKER_AUTH_CONFIG: ${_DOCKER_AUTH_CONFIG}

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_ubuntu_bionic:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-bionic-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-ubuntu-bionic-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-bionic:$SANITIZED_BRANCH -t ${ORG_NAME}/core-ubuntu-bionic:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="ubuntu:18.04" --build-arg BG_IMG=bg_bionic.png -f dockerfile-kasm-core .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_ubuntu_focal:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-focal-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-ubuntu-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-focal:$SANITIZED_BRANCH -t ${ORG_NAME}/core-ubuntu-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="ubuntu:20.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_focal.png -f dockerfile-kasm-core .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_ubuntu_jammy:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-jammy-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-ubuntu-jammy-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-jammy:$SANITIZED_BRANCH -t ${ORG_NAME}/core-ubuntu-jammy:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="ubuntu:22.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_jammy.png -f dockerfile-kasm-core .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_cuda_focal:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_BRANCH -t ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-cuda-focal:$SANITIZED_BRANCH -t ${ORG_NAME}/core-cuda-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="nvidia/cuda:11.6.0-devel-ubuntu20.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_focal.png  -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-cuda-focal:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-cuda-focal:$SANITIZED_ROLLING_BRANCH
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules

build_remnux_bionic:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_BRANCH -t ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-remnux-bionic:$SANITIZED_BRANCH -t ${ORG_NAME}/core-remnux-bionic:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="remnux/remnux-distro:bionic" --build-arg START_XFCE4=1  --build-arg BG_IMG=bg_remnux.png --build-arg EXTRA_SH=remnux.sh  -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-remnux-bionic:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-remnux-bionic:$SANITIZED_ROLLING_BRANCH
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_remnux_focal:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_BRANCH -t ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-remnux-focal:$SANITIZED_BRANCH -t ${ORG_NAME}/core-remnux-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="remnux/remnux-distro:focal" --build-arg START_XFCE4=1  --build-arg BG_IMG=bg_remnux.png --build-arg EXTRA_SH=remnux.sh  -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-remnux-focal:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-remnux-focal:$SANITIZED_ROLLING_BRANCH
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale


build_kali_rolling:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-kali-rolling-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-kali-rolling-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-kali-rolling:$SANITIZED_BRANCH -t ${ORG_NAME}/core-kali-rolling:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="kalilinux/kali-rolling:latest" --build-arg START_PULSEAUDIO="1" --build-arg EXTRA_SH="kali.sh"  --build-arg DISTRO="kali"  --build-arg LANG="" --build-arg LANGUAGE=""  --build-arg LC_ALL=""   -f dockerfile-kasm-core .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags: 
    - aws-autoscale

build_centos:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-centos-7-private:$SANITIZED_BRANCH -t ${ORG_NAME}/core-centos-7-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-centos-7:$SANITIZED_BRANCH -t ${ORG_NAME}/core-centos-7:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="centos:centos7" --build-arg START_PULSEAUDIO="1" --build-arg START_XFCE4=1 --build-arg DISTRO="centos" --build-arg LANG="" --build-arg LANGUAGE="" --build-arg LC_ALL=""  -f dockerfile-kasm-core-centos .
    - docker push ${ORG_NAME}/core-centos-7-private:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-centos-7-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-centos-7:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-centos-7:$SANITIZED_ROLLING_BRANCH
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules

build_oracle_7:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-oracle-7-private:$SANITIZED_BRANCH -t ${ORG_NAME}/core-oracle-7-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-oracle-7:$SANITIZED_BRANCH -t ${ORG_NAME}/core-oracle-7:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="oraclelinux:7" --build-arg START_PULSEAUDIO="1" --build-arg START_XFCE4="1" --build-arg DISTRO="oracle7" --build-arg LANG="" --build-arg LANGUAGE="" --build-arg LC_ALL=""  -f dockerfile-kasm-core-oracle .
    - docker push ${ORG_NAME}/core-oracle-7-private:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-oracle-7-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-oracle-7:$SANITIZED_BRANCH
    - docker push ${ORG_NAME}/core-oracle-7:$SANITIZED_ROLLING_BRANCH
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_oracle_8:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-oracle-8-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-oracle-8-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-oracle-8:$SANITIZED_BRANCH -t ${ORG_NAME}/core-oracle-8:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg START_XFCE4=1 --build-arg BASE_IMAGE="oraclelinux:8" --build-arg DISTRO="oracle8" -f dockerfile-kasm-core-oracle .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

build_opensuse_15:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-opensuse-15-private:$SANITIZED_BRANCH -t  ${ORG_NAME}/core-opensuse-15-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-opensuse-15:$SANITIZED_BRANCH -t ${ORG_NAME}/core-opensuse-15:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg START_XFCE4=1 --build-arg BASE_IMAGE="opensuse/leap:15.3" --build-arg DISTRO="opensuse" -f dockerfile-kasm-core-suse .
  only:
    - develop
    - /^release\/.*$/
  except:
    - schedules
  tags:
    - aws-autoscale

# 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_ubuntu_bionic_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-ubuntu-bionic-private:$(arch)-$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg START_XFCE4=1 
        --build-arg BASE_IMAGE="ubuntu:18.04"
        --build-arg BG_IMG=bg_bionic.png
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-ubuntu-bionic-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

build_ubuntu_focal_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-ubuntu-focal-private:$(arch)-$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg BASE_IMAGE="ubuntu:20.04"
        --build-arg START_XFCE4=1
        --build-arg BG_IMG=bg_focal.png
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-ubuntu-focal-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

build_ubuntu_jammy_dev:
  stage: build
  script:
    - >
        docker build
        -t ${ORG_NAME}/core-ubuntu-jammy-private:$(arch)-$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg BASE_IMAGE="ubuntu:22.04"
        --build-arg START_XFCE4=1
        --build-arg BG_IMG=bg_jammy.png
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-ubuntu-jammy-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

build_cuda_focal_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg BASE_IMAGE="nvidia/cuda:11.6.0-devel-ubuntu20.04"
        --build-arg START_XFCE4=1
        --build-arg BG_IMG=bg_focal.png
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale

build_remnux_bionic_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_BRANCH
        --build-arg BASE_IMAGE="remnux/remnux-distro:bionic"
        --build-arg START_PULSEAUDIO=1
        --build-arg START_XFCE4=1
        --build-arg BG_IMG=bg_remnux.png
        --build-arg EXTRA_SH=remnux.sh
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale

build_remnux_focal_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg BASE_IMAGE="remnux/remnux-distro:focal"
        --build-arg START_XFCE4=1
        --build-arg BG_IMG=bg_remnux.png
        --build-arg EXTRA_SH=remnux.sh
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale

build_kali_rolling_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-kali-rolling-private:$(arch)-$SANITIZED_BRANCH
        --build-arg BASE_IMAGE="kalilinux/kali-rolling:latest"
        --build-arg START_PULSEAUDIO="1"
        --build-arg EXTRA_SH="kali.sh"
        --build-arg DISTRO="kali"
        --build-arg LANG=""
        --build-arg LANGUAGE=""
        --build-arg LC_ALL=""
        -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-kali-rolling-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

build_centos_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-centos-7-private:$SANITIZED_BRANCH
        --build-arg BASE_IMAGE="centos:centos7"
        --build-arg START_PULSEAUDIO="1"
        --build-arg START_XFCE4=1
        --build-arg DISTRO="centos"
        --build-arg LANG=""
        --build-arg LANGUAGE=""
        --build-arg LC_ALL=""
        -f dockerfile-kasm-core-centos .
    - docker push ${ORG_NAME}/core-centos-7-private:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale

build_oracle_7_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-oracle-7-private:$SANITIZED_BRANCH
        --build-arg BASE_IMAGE="oraclelinux:7"
        --build-arg START_PULSEAUDIO="1"
        --build-arg START_XFCE4="1"
        --build-arg DISTRO="oracle7"
        --build-arg LANG=""
        --build-arg LANGUAGE=""
        --build-arg LC_ALL=""
        -f dockerfile-kasm-core-oracle .
    - docker push ${ORG_NAME}/core-oracle-7-private:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale

build_oracle_8_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-oracle-8-private:$(arch)-$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg START_XFCE4=1
        --build-arg BASE_IMAGE="oraclelinux:8"
        --build-arg DISTRO="oracle8"
        -f dockerfile-kasm-core-oracle .
    - docker push ${ORG_NAME}/core-oracle-8-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

build_opensuse_15_dev:
  stage: build
  script:
    - >
        docker build 
        -t ${ORG_NAME}/core-opensuse-15-private:$(arch)-$SANITIZED_BRANCH
        --build-arg START_PULSEAUDIO=1
        --build-arg START_XFCE4=1
        --build-arg BASE_IMAGE="opensuse/leap:15.3"
        --build-arg DISTRO="opensuse"
        -f dockerfile-kasm-core-suse .
    - docker push ${ORG_NAME}/core-opensuse-15-private:$(arch)-$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]

test_multi_arch_dev:
  stage: test
  script:
    - docker pull ${ORG_NAME}/kasm-tester:1.10.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}:$(arch)-$SANITIZED_BRANCH"
        -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-core-images
        ${ORG_NAME}/kasm-tester:1.10.0
  except:
    - develop
    - /^release\/.*$/
  tags:
    - ${TAG}
  parallel:
    matrix:
      - TAG: [ aws-autoscale, aws-autoscale-arm64 ]
        KASM_IMAGE:
          - core-ubuntu-bionic-private
          - core-ubuntu-focal-private
          - core-kali-rolling-private
          - core-oracle-8-private
          - core-opensuse-15-private
          - core-ubuntu-jammy-private

test_single_arch_dev:
  stage: test
  script:
    - docker pull ${ORG_NAME}/kasm-tester:1.10.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}:$SANITIZED_BRANCH"
        -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-core-images
        ${ORG_NAME}/kasm-tester:1.10.0
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale
  parallel:
    matrix:
      - KASM_IMAGE:
          - core-cuda-focal-private
          - core-remnux-bionic-private
          - core-remnux-focal-private
          - core-centos-7-private
          - core-oracle-7-private

manifest_dev:
  stage: manifest
  script:
    - docker pull ${ORG_NAME}/${KASM_IMAGE}:x86_64-$SANITIZED_BRANCH
    - docker pull ${ORG_NAME}/${KASM_IMAGE}:aarch64-$SANITIZED_BRANCH
    - "docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}:$SANITIZED_BRANCH || :"
    - docker manifest create ${ORG_NAME}/${KASM_IMAGE}:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}:x86_64-$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}:aarch64-$SANITIZED_BRANCH
    - docker manifest annotate ${ORG_NAME}/${KASM_IMAGE}:$SANITIZED_BRANCH ${ORG_NAME}/${KASM_IMAGE}:aarch64-$SANITIZED_BRANCH --os linux --arch arm64 --variant v8
    - docker manifest push --purge ${ORG_NAME}/${KASM_IMAGE}:$SANITIZED_BRANCH
  except:
    - develop
    - /^release\/.*$/
  tags:
    - aws-autoscale
  parallel:
    matrix:
      - KASM_IMAGE:
          - core-ubuntu-bionic-private
          - core-ubuntu-focal-private
          - core-kali-rolling-private
          - core-oracle-8-private
          - core-opensuse-15-private
          - core-ubuntu-jammy-private

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}/${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}_x86_64&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/x86_64/kasmweb/${KASM_IMAGE}/${SANITIZED_BRANCH}/index.html"
  parallel:
    matrix:
      - KASM_IMAGE:
          - core-cuda-focal-private
          - core-remnux-bionic-private
          - core-remnux-focal-private
          - core-centos-7-private
          - core-oracle-7-private

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}/${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}_${ARCH}&target_url=https://kasm-ci.s3.amazonaws.com/${CI_COMMIT_SHA}/${ARCH}/kasmweb/${KASM_IMAGE}/${ARCH}-${SANITIZED_BRANCH}/index.html"
  parallel:
    matrix:
      - ARCH: [ aarch64, x86_64 ]
        KASM_IMAGE:
          - core-ubuntu-bionic-private
          - core-ubuntu-focal-private
          - core-kali-rolling-private
          - core-oracle-8-private
          - core-opensuse-15-private
          - core-ubuntu-jammy-private

# 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_ubuntu_bionic_scheduled:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-bionic-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-bionic:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="ubuntu:18.04" --build-arg BG_IMG=bg_bionic.png -f dockerfile-kasm-core .
  only:
    - schedules
  tags:
    - aws-autoscale

build_ubuntu_focal_scheduled:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="ubuntu:20.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_focal.png -f dockerfile-kasm-core .
  only:
    - schedules
  tags:
    - aws-autoscale

build_ubuntu_jammy_scheduled:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-ubuntu-jammy-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-ubuntu-jammy:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="ubuntu:22.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_jammy.png -f dockerfile-kasm-core .
  only:
    - schedules
  tags:
    - aws-autoscale

build_cuda_focal_schedules:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-cuda-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="nvidia/cuda:11.6.0-devel-ubuntu20.04" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_focal.png  -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-cuda-focal-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-cuda-focal:$SANITIZED_ROLLING_BRANCH
  only:
    - schedules

build_remnux_bionic_schedules:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-remnux-bionic:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="remnux/remnux-distro:bionic" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_remnux.png --build-arg EXTRA_SH=remnux.sh -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-bionic-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-remnux-bionic:$SANITIZED_ROLLING_BRANCH
  only:
    - schedules
  tags:
    - aws-autoscale

build_remnux_focal_schedules:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-remnux-focal:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg BASE_IMAGE="remnux/remnux-distro:focal" --build-arg START_XFCE4=1 --build-arg BG_IMG=bg_remnux.png --build-arg EXTRA_SH=remnux.sh -f dockerfile-kasm-core .
    - docker push ${ORG_NAME}/core-remnux-focal-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-remnux-focal:$SANITIZED_ROLLING_BRANCH
  tags:
    - aws-autoscale
  only:
    - schedules

build_kali_rolling_schedules:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-kali-rolling-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-kali-rolling:$SANITIZED_ROLLING_BRANCH  --build-arg BASE_IMAGE="kalilinux/kali-rolling:latest" --build-arg START_PULSEAUDIO="1" --build-arg EXTRA_SH="kali.sh"  --build-arg DISTRO="kali"  --build-arg LANG="" --build-arg LANGUAGE="" --build-arg LC_ALL=""  -f dockerfile-kasm-core .
  only:
    - schedules
  tags: 
    - aws-autoscale

build_centos_schedules:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-centos-7-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-centos-7:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="centos:centos7" --build-arg START_PULSEAUDIO="1" --build-arg START_XFCE4=1 --build-arg DISTRO="centos"  --build-arg LANG="" --build-arg LANGUAGE="" --build-arg LC_ALL=""  -f dockerfile-kasm-core-centos .
    - docker push ${ORG_NAME}/core-centos-7-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-centos-7:$SANITIZED_ROLLING_BRANCH
  only:
    - schedules

build_oracle_7_schedules:
  stage: build
  script:
    - docker build -t ${ORG_NAME}/core-oracle-7-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-oracle-7:$SANITIZED_ROLLING_BRANCH --build-arg BASE_IMAGE="oraclelinux:7" --build-arg START_PULSEAUDIO="1" --build-arg START_XFCE4="1" --build-arg DISTRO="oracle7"  --build-arg LANG="" --build-arg LANGUAGE="" --build-arg LC_ALL=""  -f dockerfile-kasm-core-oracle .
    - docker push ${ORG_NAME}/core-oracle-7-private:$SANITIZED_ROLLING_BRANCH
    - docker push ${ORG_NAME}/core-oracle-7:$SANITIZED_ROLLING_BRANCH
  only:
    - schedules
  tags:
    - aws-autoscale

build_oracle_8_scheduled:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-oracle-8-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-oracle-8:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg START_XFCE4=1 --build-arg BASE_IMAGE="oraclelinux:8" --build-arg DISTRO="oracle8" -f dockerfile-kasm-core-oracle .
  only:
    - schedules
  tags:
    - aws-autoscale

build_opensuse_15_scheduled:
  stage: build
  image: ${ORG_NAME}/docker-buildx-private:develop
  variables:
    BUILD_PLATFORMS: "linux/amd64,linux/arm64"
  script:
    # get qemu ready
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # prep the buildx env
    - docker buildx create --use
    # build for multiple architectures
    - docker buildx build --push --platform $BUILD_PLATFORMS -t ${ORG_NAME}/core-opensuse-15-private:$SANITIZED_ROLLING_BRANCH -t ${ORG_NAME}/core-opensuse-15:$SANITIZED_ROLLING_BRANCH --build-arg START_PULSEAUDIO=1 --build-arg START_XFCE4=1 --build-arg BASE_IMAGE="opensuse/leap:15.3" --build-arg DISTRO="opensuse" -f dockerfile-kasm-core-suse .
  only:
    - schedules
  tags:
    - aws-autoscale

update_readmes:
  stage: readme
  script:
    - apk add git
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@${README_TEMPLATE_REPO}
    - sed -e "/{about}/r docs/$KASM_IMAGE/README.md" -e "/{about}/d" dockerhub-readme-template/TEMPLATE.md > docs/$KASM_IMAGE/FULL_README.md
    - cat docs/$KASM_IMAGE/FULL_README.md
    - >
        docker run -v $PWD:/workspace
        -e DOCKER_USERNAME="$README_USERNAME"
        -e DOCKER_PASSWORD="$README_PASSWORD"
        -e DOCKERHUB_REPOSITORY="${ORG_NAME}/$KASM_IMAGE-private"
        -e README_FILEPATH="/workspace/docs/$KASM_IMAGE/FULL_README.md"
        -e DESCRIPTION_FILEPATH="/workspace/docs/$KASM_IMAGE/description.txt" 
        ${ORG_NAME}/dockerhub-updater:latest
    - >
        docker run -v $PWD:/workspace
        -e DOCKER_USERNAME="$README_USERNAME"
        -e DOCKER_PASSWORD="$README_PASSWORD"
        -e DOCKERHUB_REPOSITORY="${ORG_NAME}/$KASM_IMAGE"
        -e README_FILEPATH="/workspace/docs/$KASM_IMAGE/FULL_README.md"
        -e DESCRIPTION_FILEPATH="/workspace/docs/$KASM_IMAGE/description.txt"
        ${ORG_NAME}/dockerhub-updater:latest

  only:
    variables:
      - $README_USERNAME
      - $README_PASSWORD
  parallel:
    matrix:
      - KASM_IMAGE: 
          - core-centos-7
          - core-oracle-7
          - core-oracle-8
          - core-opensuse-15
          - core-kali-rolling
          - core-remnux-bionic
          - core-remnux-focal
          - core-cuda-focal
          - core-ubuntu-bionic
          - core-ubuntu-focal
          - core-ubuntu-jammy
