.env: variables: GHC_VERSION: "9.10.1" CABAL_VERSION: "3.12.1.0" STACK_VERSION: "3.1.1" HLS_VERSION: "2.9.0.1" BUILD_GHC: "true" BUILD_HLS: "false" TAG_VERSION_MAJ_MIN: "false" TAG_VERSION_MAJ: "false" .before-script-build: &before-script-build - | if [[ ! -z "$CI_BUILD_PLATFORMS" ]]; then export OS_ARCH=`echo $CI_BUILD_PLATFORMS | tr ' ' '\n' | \ sed 's|\/||2' | sed 's|\/|-|' | tr '\n' ' '` fi - | export CI_APP_REPO=${CI_APP_REPO:-$CI_REGISTRY_IMAGE} if [[ $CI_COMMIT_BRANCH == "main" ]]; then export CI_APP_TAG=${CI_APP_TAG:-latest} elif [[ $CI_COMMIT_BRANCH == "freeze-version" ]]; then export CI_APP_TAG=${CI_APP_TAG:-$GHC_VERSION} else export CI_APP_TAG=${CI_APP_TAG:-$CI_COMMIT_SHA} fi - > echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - > export VERSION_MAJ_MIN_PAT=$GHC_VERSION export VERSION_MAJ_MIN=`echo $VERSION_MAJ_MIN_PAT | sed -n "s|\([[:digit:]]\+\.[[:digit:]]\+\).*|\1|p"` export VERSION_MAJ=`echo $VERSION_MAJ_MIN_PAT | sed -n "s|\([[:digit:]]\+\).*|\1|p"` .before-script-mirror: &before-script-mirror - | if [[ ! -z "$DOCKER_HUB_REPO" ]]; then echo $DOCKER_HUB_PASSWORD | docker login -u $DOCKER_HUB_USER \ --password-stdin docker.io fi - | if [[ ! -z "$QUAY_REPO" ]]; then echo $QUAY_PASSWORD | docker login -u $QUAY_USER \ --password-stdin quay.io fi .build: image: glcr.b-data.ch/docker/docker:dind extends: .env services: - name: glcr.b-data.ch/docker/docker:dind alias: docker variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" BUILDX_NO_DEFAULT_ATTESTATIONS: "true" before_script: - *before-script-build retry: 2 .mirror: extends: .build before_script: - *before-script-build - *before-script-mirror stages: - .pre - build1 - build2 - update - mirror - test - deploy - .post build:latest-linux-amd64: extends: .build stage: build1 tags: - arch:amd64 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg CABAL_VERSION --build-arg STACK_VERSION --target test -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f latest.Dockerfile . - > docker build --build-arg GHC_VERSION --build-arg CABAL_VERSION --build-arg STACK_VERSION -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f latest.Dockerfile . - | docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64 rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ changes: - latest.Dockerfile build:latest-linux-arm64v8: extends: .build stage: build1 tags: - arch:arm64/v8 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg CABAL_VERSION --build-arg STACK_VERSION --target test -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f latest.Dockerfile . - > docker build --build-arg GHC_VERSION --build-arg CABAL_VERSION --build-arg STACK_VERSION -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f latest.Dockerfile . - | docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ changes: - latest.Dockerfile build:version-linux-amd64: extends: .build stage: build1 tags: - arch:amd64 - os:linux script: - > docker build --target test -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f prior/$GHC_VERSION.Dockerfile . - > docker build -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f prior/$GHC_VERSION.Dockerfile . - docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64 rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ changes: - prior/$GHC_VERSION.Dockerfile build:version-linux-arm64v8: extends: .build stage: build1 tags: - arch:arm64/v8 - os:linux script: - > docker build --target test -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f prior/$GHC_VERSION.Dockerfile . - > docker build -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f prior/$GHC_VERSION.Dockerfile . - docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ changes: - prior/$GHC_VERSION.Dockerfile build-manifest:latest-linux-multiarch: extends: .build stage: build1 needs: ["build:latest-linux-amd64", "build:latest-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i" done - | docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN_PAT $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN_PAT \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT - | docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN - | docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ - | docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$CI_APP_TAG rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "main" changes: - latest.Dockerfile build-manifest:version-linux-multiarch: extends: .build stage: build1 needs: ["build:version-linux-amd64", "build:version-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i" done - | docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$CI_APP_TAG - | if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN fi - | if [[ "$TAG_VERSION_MAJ" == "true" ]]; then docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ fi rules: - if: $BUILD_GHC == "true" && $CI_COMMIT_BRANCH == "freeze-version" changes: - prior/$GHC_VERSION.Dockerfile build-package-hls:latest-linux-amd64: extends: .build stage: build2 tags: - arch:amd64 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg HLS_VERSION -t $CI_APP_REPO/$GHC_VERSION/hls:$HLS_VERSION-linux-amd64 -t $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-amd64 -f packages/hls/$HLS_VERSION.Dockerfile . - | docker push $CI_APP_REPO/$GHC_VERSION/hls:$HLS_VERSION-linux-amd64 docker push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-amd64 rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ changes: - packages/hls/$HLS_VERSION.Dockerfile build-package-hls:latest-linux-arm64v8: extends: .build stage: build2 tags: - arch:arm64/v8 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg HLS_VERSION -t $CI_APP_REPO/$GHC_VERSION/hls:$HLS_VERSION-linux-arm64v8 -t $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 -f packages/hls/$HLS_VERSION.Dockerfile . - | docker push $CI_APP_REPO/$GHC_VERSION/hls:$HLS_VERSION-linux-arm64v8 docker push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ changes: - packages/hls/$HLS_VERSION.Dockerfile build-package-hls:version-linux-amd64: extends: .build stage: build2 tags: - arch:amd64 - os:linux script: - > docker build --build-arg GHC_VERSION -t $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-amd64 -f packages/hls/$HLS_VERSION.Dockerfile . - docker push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-amd64 rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ changes: - prior/$GHC_VERSION.Dockerfile build-package-hls:version-linux-arm64v8: extends: .build stage: build2 tags: - arch:arm64/v8 - os:linux script: - > docker build --build-arg GHC_VERSION -t $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 -f packages/hls/$HLS_VERSION.Dockerfile . - docker push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ changes: - prior/$GHC_VERSION.Dockerfile build-package-hls-manifest:latest-linux-multiarch: extends: .build stage: build2 needs: ["build-package-hls:latest-linux-amd64", "build-package-hls:latest-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-$i" done - | docker manifest create $CI_APP_REPO/$VERSION_MAJ_MIN_PAT/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ_MIN_PAT/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$VERSION_MAJ_MIN_PAT/hls:$HLS_VERSION - | docker manifest create $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION - | docker manifest create $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION - | docker manifest create $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION - | docker manifest create $CI_APP_REPO/$CI_APP_TAG/hls:$CI_APP_TAG $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$CI_APP_TAG/hls:$CI_APP_TAG \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$CI_APP_TAG/hls:$CI_APP_TAG rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "main" changes: - packages/hls/$HLS_VERSION.Dockerfile build-package-hls-manifest:version-linux-multiarch: extends: .build stage: build2 needs: ["build-package-hls:version-linux-amd64", "build-package-hls:version-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-$i" done - | docker manifest create $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION - | if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then docker manifest create $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$VERSION_MAJ_MIN/hls:$HLS_VERSION fi - | if [[ "$TAG_VERSION_MAJ" == "true" ]]; then docker manifest create $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION \ $CI_APP_REPO/$CI_APP_TAG/hls:$HLS_VERSION-linux-arm64v8 fi docker manifest push $CI_APP_REPO/$VERSION_MAJ/hls:$HLS_VERSION fi rules: - if: $BUILD_HLS == "true" && $CI_COMMIT_BRANCH == "freeze-version" changes: - prior/$GHC_VERSION.Dockerfile update-stack:latest-linux-amd64: extends: .build stage: update tags: - arch:amd64 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg STACK_VERSION --build-arg PREFIX -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f Stack.Dockerfile . - | docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64 rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ update-stack:latest-linux-arm64v8: extends: .build stage: update tags: - arch:arm64/v8 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg STACK_VERSION --build-arg PREFIX -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f Stack.Dockerfile . - | docker push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "main" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ update-stack:version-linux-amd64: extends: .build stage: update tags: - arch:amd64 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg STACK_VERSION --build-arg PREFIX -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -f Stack.Dockerfile . - docker push $CI_APP_REPO:$CI_APP_TAG-linux-amd64 rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/amd64)/ update-stack:version-linux-arm64v8: extends: .build stage: update tags: - arch:arm64/v8 - os:linux script: - > docker build --build-arg GHC_VERSION --build-arg STACK_VERSION --build-arg PREFIX -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -f Stack.Dockerfile . - docker push $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "freeze-version" && $CI_BUILD_PLATFORMS =~ /(linux\/arm64\/v8)/ update-stack-manifest:latest-linux-multiarch: extends: .build stage: update needs: ["update-stack:latest-linux-amd64", "update-stack:latest-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i" done - | docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN_PAT $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN_PAT \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN_PAT - | docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN - | docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ - | docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$CI_APP_TAG rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "main" update-stack-manifest:version-linux-multiarch: extends: .build stage: update needs: ["update-stack:version-linux-amd64", "update-stack:version-linux-arm64v8"] script: - | for i in $OS_ARCH; do export CI_MANIFEST_LIST="$CI_MANIFEST_LIST $CI_APP_REPO:$CI_APP_TAG-$i" done - | docker manifest create $CI_APP_REPO:$CI_APP_TAG $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$CI_APP_TAG \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$CI_APP_TAG - | if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN fi - | if [[ "$TAG_VERSION_MAJ" == "true" ]]; then docker manifest create $CI_APP_REPO:$VERSION_MAJ $CI_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ \ $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$VERSION_MAJ fi rules: - if: $UPDATE_STACK == "true" && $CI_COMMIT_BRANCH == "freeze-version" mirror:latest-linux-multiarch: extends: .mirror stage: mirror script: - | if [[ ! -z "$DOCKER_HUB_REPO" ]]; then for i in $OS_ARCH; do docker pull $CI_APP_REPO:$CI_APP_TAG-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $DOCKER_HUB_REPO:$VERSION_MAJ_MIN_PAT-$i docker push $DOCKER_HUB_REPO:$VERSION_MAJ_MIN_PAT-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $DOCKER_HUB_REPO:$CI_APP_TAG-$i docker push $DOCKER_HUB_REPO:$CI_APP_TAG-$i export DOCKER_HUB_MANIFEST_LIST="$DOCKER_HUB_MANIFEST_LIST $DOCKER_HUB_REPO:$CI_APP_TAG-$i" done docker manifest create $DOCKER_HUB_REPO:$VERSION_MAJ_MIN_PAT $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$VERSION_MAJ_MIN_PAT \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$VERSION_MAJ_MIN_PAT docker manifest create $DOCKER_HUB_REPO:$VERSION_MAJ_MIN $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$VERSION_MAJ_MIN \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$VERSION_MAJ_MIN docker manifest create $DOCKER_HUB_REPO:$VERSION_MAJ $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$VERSION_MAJ \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$VERSION_MAJ docker manifest create $DOCKER_HUB_REPO:$CI_APP_TAG $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$CI_APP_TAG \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$CI_APP_TAG fi - | if [[ ! -z "$QUAY_REPO" ]]; then for i in $OS_ARCH; do docker pull $CI_APP_REPO:$CI_APP_TAG-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $QUAY_REPO:$VERSION_MAJ_MIN_PAT-$i docker push $QUAY_REPO:$VERSION_MAJ_MIN_PAT-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $QUAY_REPO:$CI_APP_TAG-$i docker push $QUAY_REPO:$CI_APP_TAG-$i export QUAY_MANIFEST_LIST="$QUAY_MANIFEST_LIST $QUAY_REPO:$CI_APP_TAG-$i" done docker manifest create $QUAY_REPO:$VERSION_MAJ_MIN_PAT $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$VERSION_MAJ_MIN_PAT \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$VERSION_MAJ_MIN_PAT docker manifest create $QUAY_REPO:$VERSION_MAJ_MIN $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$VERSION_MAJ_MIN \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$VERSION_MAJ_MIN docker manifest create $QUAY_REPO:$VERSION_MAJ $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$VERSION_MAJ \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$VERSION_MAJ docker manifest create $QUAY_REPO:$CI_APP_TAG $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$CI_APP_TAG \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$CI_APP_TAG fi rules: - if: ($BUILD_GHC == "true" || $UPDATE_STACK == "true") && $CI_COMMIT_BRANCH == "main" changes: - latest.Dockerfile mirror:version-linux-multiarch: extends: .mirror stage: mirror script: - | if [[ ! -z "$DOCKER_HUB_REPO" ]]; then for i in $OS_ARCH; do docker pull $CI_APP_REPO:$CI_APP_TAG-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $DOCKER_HUB_REPO:$CI_APP_TAG-$i docker push $DOCKER_HUB_REPO:$CI_APP_TAG-$i export DOCKER_HUB_MANIFEST_LIST="$DOCKER_HUB_MANIFEST_LIST $DOCKER_HUB_REPO:$CI_APP_TAG-$i" done docker manifest create $DOCKER_HUB_REPO:$CI_APP_TAG $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$CI_APP_TAG \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$CI_APP_TAG if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then docker manifest create $DOCKER_HUB_REPO:$VERSION_MAJ_MIN $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$VERSION_MAJ_MIN \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$VERSION_MAJ_MIN fi if [[ "$TAG_VERSION_MAJ" == "true" ]]; then docker manifest create $DOCKER_HUB_REPO:$VERSION_MAJ $DOCKER_HUB_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $DOCKER_HUB_REPO:$VERSION_MAJ \ $DOCKER_HUB_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $DOCKER_HUB_REPO:$VERSION_MAJ fi fi - | if [[ ! -z "$QUAY_REPO" ]]; then for i in $OS_ARCH; do docker pull $CI_APP_REPO:$CI_APP_TAG-$i docker tag $CI_APP_REPO:$CI_APP_TAG-$i $QUAY_REPO:$CI_APP_TAG-$i docker push $QUAY_REPO:$CI_APP_TAG-$i export QUAY_MANIFEST_LIST="$QUAY_MANIFEST_LIST $QUAY_REPO:$CI_APP_TAG-$i" done docker manifest create $QUAY_REPO:$CI_APP_TAG $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$CI_APP_TAG \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$CI_APP_TAG if [[ "$TAG_VERSION_MAJ_MIN" == "true" ]]; then docker manifest create $QUAY_REPO:$VERSION_MAJ_MIN $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$VERSION_MAJ_MIN \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$VERSION_MAJ_MIN fi if [[ "$TAG_VERSION_MAJ" == "true" ]]; then docker manifest create $QUAY_REPO:$VERSION_MAJ $QUAY_MANIFEST_LIST if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then docker manifest annotate --variant v8 $QUAY_REPO:$VERSION_MAJ \ $QUAY_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $QUAY_REPO:$VERSION_MAJ fi fi rules: - if: ($BUILD_GHC == "true" || $UPDATE_STACK == "true") && $CI_COMMIT_BRANCH == "freeze-version" changes: - prior/$GHC_VERSION.Dockerfile