diff --git a/.github/workflows/ci-base-image.yml b/.github/workflows/ci-base-image.yml index f2143b10..d23ff8ee 100644 --- a/.github/workflows/ci-base-image.yml +++ b/.github/workflows/ci-base-image.yml @@ -2,6 +2,11 @@ name: CI - Build base image on: workflow_dispatch: + inputs: + version: + description: 'Version tag for base image (e.g., v1.0.0, latest)' + required: true + default: 'latest' jobs: build-base: @@ -20,8 +25,17 @@ jobs: docker build . \ --file docker/Dockerfile \ --target emfos-base \ - -t ${{ vars.DOCKER_USERNAME }}/emfos-base:latest - docker push ${{ vars.DOCKER_USERNAME}}/emfos-base:latest + -t ${{ vars.DOCKER_USERNAME }}/emfos-base:${{ github.event.inputs.version }} + docker push ${{ vars.DOCKER_USERNAME }}/emfos-base:${{ github.event.inputs.version }} + + - name: Conditionally push as latest + shell: bash + run: | + if [[ "${{ github.event.inputs.version }}" == v* ]]; then + docker tag ${{ vars.DOCKER_USERNAME }}/emfos-base:${{ github.event.inputs.version }} \ + ${{ vars.DOCKER_USERNAME }}/emfos-base:latest + docker push ${{ vars.DOCKER_USERNAME }}/emfos-base:latest + fi - name: Display Success Message - run: echo "emfos-base image has been built and pushed manually." + run: echo "emfos-base:${{ github.event.inputs.version }} image has been built and pushed manually." diff --git a/.github/workflows/ci-workers.yml b/.github/workflows/ci-workers.yml index de320ae0..6c789bf8 100644 --- a/.github/workflows/ci-workers.yml +++ b/.github/workflows/ci-workers.yml @@ -16,6 +16,10 @@ on: version: description: 'Version tag for the release (e.g., v1.0.0)' required: true + base_image_tag: + description: 'Base image tag to use (e.g., latest, v1.0.0)' + required: true + default: 'latest' jobs: build_workers: @@ -41,6 +45,7 @@ jobs: # echo "IMAGE_TAG=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV echo "IMAGE_NAME=${{ vars.DOCKER_USERNAME }}/${{ matrix.worker }}" >> $GITHUB_ENV echo "LATEST_TAG=latest" >> $GITHUB_ENV + echo "BASE_IMAGE_TAG=${{ github.event.inputs.base_image_tag || 'latest' }}" >> $GITHUB_ENV - name: Compute IMAGE_TAG id: meta @@ -58,33 +63,26 @@ jobs: fi echo "IMAGE_TAG=$TAG" >> "$GITHUB_ENV" - echo "Computed IMAGE_TAG=$TAG" + echo "Computed IMAGE_TAG=$TAG with base image tag=${{ env.BASE_IMAGE_TAG }}" - - name: Pull base image or fallback to build - run: | - docker pull ${{ vars.DOCKER_USERNAME }}/emfos-base:latest || \ - docker build . \ - --file docker/Dockerfile \ - --target emfos-base \ - -t ${{ vars.DOCKER_USERNAME }}/emfos-base:main + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ vars.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - - name: Build worker image + - name: Build worker image with specified base image run: | docker build . \ --file docker/Dockerfile \ --target ${{ env.WORKER_NAME }} \ + --build-arg BASE_IMAGE=${{ vars.DOCKER_USERNAME }}/emfos-base:${{ env.BASE_IMAGE_TAG }} \ -t ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - name: Tag image as latest run: | docker tag ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} ${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }} - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ vars.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Push versioned image run: | docker push ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} diff --git a/docker/Dockerfile b/docker/Dockerfile index 470b11a2..2797f3f3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,3 +1,6 @@ +# Global argument for base image for workers, can be overridden when building with --build-arg +ARG BASE_IMAGE=balticrcc/emfos-base:latest + # Define base container image (platform has to be defined if using with ARM64 architecture) FROM python:3.11-slim as emfos-base #FROM --platform=linux/amd64 python:3.11-slim as emfos-base @@ -23,7 +26,7 @@ COPY licenses/ /licenses/ # Set to use interpreter from venv (if venv is used) #ENV PATH="/.venv/bin:$PATH" -FROM balticrcc/emfos-base:latest as emfos-model-retriever +FROM ${BASE_IMAGE} as emfos-model-retriever # Set working directory WORKDIR /src @@ -38,7 +41,7 @@ ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/model_retriever/opdm_worker.py"] #ENTRYPOINT ["/bin/bash"] -FROM balticrcc/emfos-base:latest as emfos-local-model-retriever +FROM ${BASE_IMAGE} as emfos-local-model-retriever # Set working directory WORKDIR /src @@ -52,7 +55,7 @@ COPY config/ ./config/ ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/model_retriever/local_worker.py"] -FROM balticrcc/emfos-base:latest as emfos-model-validator +FROM ${BASE_IMAGE} as emfos-model-validator # Set working directory WORKDIR /src @@ -67,7 +70,7 @@ ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/model_validator/worker.py"] #ENTRYPOINT ["/bin/bash"] -FROM balticrcc/emfos-base:latest as emfos-model-merger +FROM ${BASE_IMAGE} as emfos-model-merger # Set working directory WORKDIR /src @@ -82,7 +85,7 @@ ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/model_merger/worker.py"] #ENTRYPOINT ["/bin/bash"] -FROM balticrcc/emfos-base:latest as emfos-task-generator +FROM ${BASE_IMAGE} as emfos-task-generator # Set working directory WORKDIR /src @@ -97,14 +100,16 @@ ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/task_generator/worker.py"] #ENTRYPOINT ["/bin/bash"] -# Model Quality image -FROM balticrcc/emfos-base:latest as emfos-model-quality +FROM ${BASE_IMAGE} as emfos-model-quality +# Set working directory WORKDIR /src +# Copy files to container COPY emf/model_quality/ ./emf/model_quality/ COPY emf/common/ ./emf/common/ COPY config/ ./config/ +# Start process ENV PYTHONPATH="${PYTHONPATH}:/src" ENTRYPOINT ["python", "emf/model_quality/worker.py"]