Skip to content
Snippets Groups Projects
.gitlab-ci.yml 2.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jonas Leder's avatar
    Jonas Leder committed
    stages:
      - build
      - bundle
      - deploy
    
    
    Jonas Leder's avatar
    Jonas Leder committed
    Docker:
    
    Jonas Leder's avatar
    Jonas Leder committed
      # Use the official docker image.
    
    Jonas Leder's avatar
    Jonas Leder committed
      image: gitlab.jonasled.de/jonasled/buildx-docker:latest
      stage: build
      services:
        - docker:dind
      before_script:
        - docker context create build
        - docker buildx create build --use
        - docker run --privileged --rm tonistiigi/binfmt --install all
        - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    
    Jonas Leder's avatar
    Jonas Leder committed
        - apk add jq
      # Default branch leaves tagempty (= latest tag)
      # All other branches are tagged with the escaped branch name (commit ref slug)
    
    Jonas Leder's avatar
    Jonas Leder committed
      script:
        - |
          if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
            tag="latest"
          else
            tag="$CI_COMMIT_REF_SLUG"
          fi
        - docker buildx build --platform linux/arm64,linux/amd64 --push --provenance false --tag "$CI_REGISTRY_IMAGE:${tag}" .
    
    Jonas Leder's avatar
    Jonas Leder committed
        - export IMAGE_HASH=$(docker buildx imagetools inspect "$CI_REGISTRY_IMAGE:${tag}" --format "{{json .Manifest}}" | jq .digest)
        - "echo \"Image Hash: $IMAGE_HASH\""
        - echo "$IMAGE_HASH" >> image-hash.txt
      artifacts:
          paths:
              - image-hash.txt
    
    Helm:
      stage: bundle
      image: alpine:latest
      dependencies:
          - Docker
      before_script:
        - apk add curl bash openssl git
        - curl -L https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
      script:
    
    Jonas Leder's avatar
    Jonas Leder committed
          - helm repo add bitnami https://charts.bitnami.com/bitnami
    
    Jonas Leder's avatar
    Jonas Leder committed
          - helm repo update
          - helm dependency update website
          - IMAGE_HASH=$(cat image-hash.txt)
    
          - "export NEXT_PATCH_VERSION=\"$(cat website/Chart.yaml | grep ^version: | cut -d ' ' -f 2 | awk -F. '{print $1 \".\" $2 \".\" $3+1}')\""
          - "export GIT_SHORT_COMMIT=\"$(git rev-parse --short HEAD)\""
          - "sed -i \"s/^  digest: .*/  digest: $IMAGE_HASH/\" website/values.yaml"
          - helm package website --version "${NEXT_PATCH_VERSION}-rc-${GIT_SHORT_COMMIT}"
      artifacts:
          paths:
          - text2img-*.tgz
    
    Deploy Helm:
      image: curlimages/curl:latest
      stage: deploy
      script:
        - HELM_TGZ=$(ls text2img-*.tgz)
        - 'curl --request POST --user gitlab-ci-token:$CI_JOB_TOKEN --form "chart=@${HELM_TGZ}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/api/${CI_COMMIT_BRANCH}/charts"'
      dependencies:
        - Helm