|
| 1 | +variables: |
| 2 | + DOCKER_IMAGE_TAG: $CI_COMMIT_SHA |
| 3 | + DOCKER_IMAGE_NAME: $CI_PROJECT_NAME |
| 4 | + DOCKER_IMAGE_FULL_TAG: $CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG |
| 5 | + DOCKER_VERSION: 27.4 |
| 6 | + |
| 7 | +.docker-gitlab-login: &docker-gitlab-login |
| 8 | + - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY |
| 9 | + |
| 10 | +# Build Docker image for test |
| 11 | +# TODO: Sign image using Cosign |
| 12 | +.build-and-push-gitlab: |
| 13 | + image: docker:$DOCKER_VERSION |
| 14 | + services: |
| 15 | + - docker:$DOCKER_VERSION-dind |
| 16 | + variables: |
| 17 | + DOCKER_BUILDKIT: 1 |
| 18 | + DOCKER_PLATFORM: "" |
| 19 | + DOCKER_TARGET: "" |
| 20 | + DOCKER_CACHE_FULL_TAG: $CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME:cache |
| 21 | + before_script: |
| 22 | + - apk add --no-cache bash git |
| 23 | + script: |
| 24 | + - docker buildx create --use |
| 25 | + - docker buildx inspect --bootstrap |
| 26 | + - *docker-gitlab-login |
| 27 | + - echo "Building $DOCKER_IMAGE_FULL_TAG - Cache from $DOCKER_CACHE_FULL_TAG" |
| 28 | + - if [[ -n "$DOCKER_TARGET" ]]; then export TARGET_ARG="--target $DOCKER_TARGET"; fi; |
| 29 | + - if [[ -n "$DOCKER_PLATFORM" ]]; then export PLATFORM_ARG="--platform $DOCKER_PLATFORM"; fi; |
| 30 | + - if [[ -n "$DOCKER_PLATFORM" ]]; then export PLATFORM_SUFFIX="-$(echo $DOCKER_PLATFORM | sed 's/\///')"; fi; |
| 31 | + # remove \ from platform variable |
| 32 | + - export SUFFIX=$(echo $DOCKER_PLATFORM | sed 's/\///') |
| 33 | + - docker buildx build --push |
| 34 | + $TARGET_ARG |
| 35 | + --tag $DOCKER_IMAGE_FULL_TAG$PLATFORM_SUFFIX |
| 36 | + $PLATFORM_ARG |
| 37 | + --cache-from type=registry,ref=$DOCKER_CACHE_FULL_TAG |
| 38 | + --cache-to type=registry,ref=$DOCKER_CACHE_FULL_TAG |
| 39 | + . |
| 40 | + |
| 41 | +# Architectures are hardcoded for multiarch, need to make this better |
| 42 | +.multiarch-manifest-gitlab: |
| 43 | + image: docker:$DOCKER_VERSION |
| 44 | + services: |
| 45 | + - docker:$DOCKER_VERSION-dind |
| 46 | + script: |
| 47 | + - *docker-gitlab-login |
| 48 | + - echo "Building $DOCKER_IMAGE_FULL_TAG multiarch manifest" |
| 49 | + - docker buildx imagetools create |
| 50 | + --tag $DOCKER_IMAGE_FULL_TAG |
| 51 | + $DOCKER_IMAGE_FULL_TAG-linuxamd64 |
| 52 | + $DOCKER_IMAGE_FULL_TAG-linuxarm64 |
| 53 | + |
| 54 | +.promote-image: |
| 55 | + image: docker:$DOCKER_VERSION |
| 56 | + variables: |
| 57 | + PROMOTED_ENVIRONMENT: "dev" |
| 58 | + DOCKER_BUILDKIT: 1 |
| 59 | + services: |
| 60 | + - docker:$DOCKER_VERSION-dind |
| 61 | + script: |
| 62 | + - *docker-gitlab-login |
| 63 | + # Remove the UTC offset, not supported by `date` in docker image (busybox) |
| 64 | + - export CLEAN_DATETIME=$(echo "$CI_JOB_STARTED_AT" | sed 's/+00:00//' | sed 's/Z//') |
| 65 | + # Transform in unix timestamp |
| 66 | + - export UNIX_TIMESTAMP=$(date -d "$CLEAN_DATETIME" -D "%Y-%m-%dT%H:%M:%S" +%s) |
| 67 | + - echo "Unix timestamp - $UNIX_TIMESTAMP" |
| 68 | + - echo "Tagging $CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME:$PROMOTED_ENVIRONMENT-$UNIX_TIMESTAMP from $DOCKER_IMAGE_FULL_TAG" |
| 69 | + - docker buildx imagetools create |
| 70 | + --annotation index:org.opencontainers.image.version=$CI_COMMIT_SHORT_SHA |
| 71 | + --annotation index:org.opencontainers.image.revision=$CI_COMMIT_SHA |
| 72 | + --annotation index:org.opencontainers.image.source=$CI_PROJECT_URL |
| 73 | + --annotation index:org.opencontainers.image.created=$CI_JOB_STARTED_AT |
| 74 | + --tag $CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME:$PROMOTED_ENVIRONMENT-$UNIX_TIMESTAMP |
| 75 | + $DOCKER_IMAGE_FULL_TAG |
| 76 | + |
| 77 | +.python-typing: |
| 78 | + image: $DOCKER_IMAGE_FULL_TAG |
| 79 | + script: |
| 80 | + - make typing |
| 81 | + |
| 82 | +.python-lint: |
| 83 | + image: $DOCKER_IMAGE_FULL_TAG |
| 84 | + script: |
| 85 | + - make lint |
| 86 | + |
| 87 | +.python-format: |
| 88 | + image: $DOCKER_IMAGE_FULL_TAG |
| 89 | + script: |
| 90 | + - make format |
| 91 | + |
| 92 | +.python-tests: |
| 93 | + image: $DOCKER_IMAGE_FULL_TAG |
| 94 | + script: |
| 95 | + - make test |
| 96 | + |
0 commit comments