diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index eba517b4..3b441e0c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -6,7 +6,7 @@ ARG PYTHON_VERSION=3.12 # Dev image is used for development and cicd. ######################################################################################## -FROM python:${PYTHON_VERSION} as dev +FROM python:${PYTHON_VERSION} AS dev # NOTE: python docker image has env `PYTHON_VERSION` but with patch version. # ARG is used here for temporary override without changing the original env. @@ -67,7 +67,7 @@ WORKDIR /workspace # Build image is an intermediate image used for building the project. ######################################################################################## -FROM dev as build +FROM dev AS build # Install dependencies and project into the local packages directory. ARG SCM_VERSION @@ -81,7 +81,7 @@ RUN --mount=source=README.md,target=README.md \ # Prod image is used for deployment and distribution. ######################################################################################## -FROM python:${PYTHON_VERSION}-slim as prod +FROM python:${PYTHON_VERSION}-slim AS prod # NOTE: python docker image has env `PYTHON_VERSION` but with patch version. # ARG is used here for temporary override without changing the original env. diff --git a/.gitlab/workflows/devcontainer.yml b/.gitlab/workflows/devcontainer.yml index a249191c..218df8e3 100644 --- a/.gitlab/workflows/devcontainer.yml +++ b/.gitlab/workflows/devcontainer.yml @@ -44,11 +44,21 @@ dev-container-publish: - | docker buildx build . \ --build-arg PYTHON_VERSION=${PYTHON_VERSION} \ - --cache-to type=registry,ref=${CI_REGISTRY_IMAGE}/dev-cache:py${PYTHON_VERSION},mode=max \ --file .devcontainer/Dockerfile \ - --push \ - --tag ${CI_REGISTRY_IMAGE}/dev:py${PYTHON_VERSION} \ - --target dev + --load \ + --tag ${CI_REGISTRY_IMAGE}:py${PYTHON_VERSION} \ + --target prod + - docker run --rm ${CI_REGISTRY_IMAGE}:py${PYTHON_VERSION} + - | + if [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then + docker buildx build . \ + --build-arg PYTHON_VERSION=${PYTHON_VERSION} \ + --cache-to type=registry,ref=${CI_REGISTRY_IMAGE}/dev-cache:py${PYTHON_VERSION},mode=max \ + --file .devcontainer/Dockerfile \ + --push \ + --tag ${CI_REGISTRY_IMAGE}/dev:py${PYTHON_VERSION} \ + --target dev + fi services: - docker:27.3.1@sha256:bec82cb05983f12a14d8f169b00748f4ded8573f4da5f1d15d375b6a2470289f stage: build diff --git a/template/.devcontainer/Dockerfile.jinja b/template/.devcontainer/Dockerfile.jinja index 958187d6..30fbdbee 100644 --- a/template/.devcontainer/Dockerfile.jinja +++ b/template/.devcontainer/Dockerfile.jinja @@ -6,7 +6,7 @@ ARG PYTHON_VERSION={{ default_py }} # Dev image is used for development and cicd. ######################################################################################## -FROM python:${PYTHON_VERSION} as dev +FROM python:${PYTHON_VERSION} AS dev # NOTE: python docker image has env `PYTHON_VERSION` but with patch version. # ARG is used here for temporary override without changing the original env. @@ -67,7 +67,7 @@ WORKDIR /workspace # Build image is an intermediate image used for building the project. ######################################################################################## -FROM dev as build +FROM dev AS build # Install dependencies and project into the local packages directory. ARG SCM_VERSION @@ -81,7 +81,7 @@ RUN --mount=source=README.md,target=README.md \ # Prod image is used for deployment and distribution. ######################################################################################## -FROM python:${PYTHON_VERSION}-slim as prod +FROM python:${PYTHON_VERSION}-slim AS prod # NOTE: python docker image has env `PYTHON_VERSION` but with patch version. # ARG is used here for temporary override without changing the original env. diff --git a/template/[% if repo_platform == 'gitlab' or repo_platform == 'gitlab-self-managed' %].gitlab[% endif %]/workflows/devcontainer.yml.jinja b/template/[% if repo_platform == 'gitlab' or repo_platform == 'gitlab-self-managed' %].gitlab[% endif %]/workflows/devcontainer.yml.jinja index abe36fb8..e7bd13ca 100644 --- a/template/[% if repo_platform == 'gitlab' or repo_platform == 'gitlab-self-managed' %].gitlab[% endif %]/workflows/devcontainer.yml.jinja +++ b/template/[% if repo_platform == 'gitlab' or repo_platform == 'gitlab-self-managed' %].gitlab[% endif %]/workflows/devcontainer.yml.jinja @@ -55,11 +55,21 @@ dev-container-publish: - | docker buildx build . \ --build-arg PYTHON_VERSION=${PYTHON_VERSION} \ - --cache-to type=registry,ref=${CI_REGISTRY_IMAGE}/dev-cache:py${PYTHON_VERSION},mode=max \ --file .devcontainer/Dockerfile \ - --push \ - --tag ${CI_REGISTRY_IMAGE}/dev:py${PYTHON_VERSION} \ - --target dev + --load \ + --tag ${CI_REGISTRY_IMAGE}:py${PYTHON_VERSION} \ + --target prod + - docker run --rm ${CI_REGISTRY_IMAGE}:py${PYTHON_VERSION} + - | + if [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then + docker buildx build . \ + --build-arg PYTHON_VERSION=${PYTHON_VERSION} \ + --cache-to type=registry,ref=${CI_REGISTRY_IMAGE}/dev-cache:py${PYTHON_VERSION},mode=max \ + --file .devcontainer/Dockerfile \ + --push \ + --tag ${CI_REGISTRY_IMAGE}/dev:py${PYTHON_VERSION} \ + --target dev + fi services: - docker:27.3.1@sha256:bec82cb05983f12a14d8f169b00748f4ded8573f4da5f1d15d375b6a2470289f stage: build