diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 9697dbe..a7dbd01 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -51,6 +51,11 @@ jobs: name: Build service if: ${{ !contains(github.event.head_commit.message, 'skip build') }} runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + node: [ 20 ] + debian: [ 'bookworm' ] steps: - name: Checkout repo uses: actions/checkout@v4 @@ -65,4 +70,4 @@ jobs: - name: Build service env: SOPS_AGE_KEY: ${{ secrets.SOPS_AGE_KEY }} - run: bash ./scripts/build_service.sh -p -r ${{ github.job }} + run: bash ./scripts/build_service.sh -p -r ${{ github.job }} -n ${{ matrix.node }} -d ${{ matrix.debian }} diff --git a/dockerfile b/dockerfile index 71325f7..576499a 100644 --- a/dockerfile +++ b/dockerfile @@ -1,12 +1,15 @@ +ARG DEBIAN_VERSION=bookworm +ARG NODE_VERSION=20 + # Build -FROM node:16.17-bullseye-slim AS builder +FROM node:${NODE_VERSION}-${DEBIAN_VERSION}-slim AS builder ENV HOME /k2 COPY . ${HOME} WORKDIR ${HOME} RUN yarn # Copy to slim image -FROM node:16.17-bullseye-slim +FROM node:${NODE_VERSION}-${DEBIAN_VERSION}-slim LABEL maintainer "" # In case you use an apt proxy somewhere diff --git a/scripts/build_service.sh b/scripts/build_service.sh index 2ccb836..7a1c31a 100755 --- a/scripts/build_service.sh +++ b/scripts/build_service.sh @@ -12,10 +12,20 @@ WORKSPACE_DIR="$(dirname "$ROOT_DIR")" ## Parse options ## +DEFAULT_NODE_VER=20 +DEFAULT_DEBIAN_VER=bookworm +NODE_VER=$DEFAULT_NODE_VER +DEBIAN_VER=$DEFAULT_DEBIAN_VER PUBLISH=false CI_STEP_NAME="Build service" -while getopts "pr:" option; do +while getopts "d:n:pr:" option; do case $option in + d) # defines debian version + DEBIAN_VER=$OPTARG + ;; + n) # defines node version + NODE_VER=$OPTARG + ;; p) # publish app PUBLISH=true ;; @@ -50,23 +60,31 @@ load_value_files "$WORKSPACE_DIR/development/common/KALISIO_DOCKERHUB_PASSWORD.e ## IMAGE_NAME="$KALISIO_DOCKERHUB_URL/kalisio/$NAME" -IMAGE_TAG=latest +IMAGE_SHORT_TAG=latest if [[ -n "$GIT_TAG" ]]; then - IMAGE_TAG=$VERSION + IMAGE_SHORT_TAG=$VERSION fi +IMAGE_TAG="$IMAGE_SHORT_TAG-node$NODE_VER-$DEBIAN_VER" + begin_group "Building container $IMAGE_NAME:$IMAGE_TAG ..." docker login --username "$KALISIO_DOCKERHUB_USERNAME" --password-stdin "$KALISIO_DOCKERHUB_URL" < "$KALISIO_DOCKERHUB_PASSWORD" # DOCKER_BUILDKIT is here to be able to use Dockerfile specific dockerginore (app.Dockerfile.dockerignore) DOCKER_BUILDKIT=1 docker build \ + --build-arg NODE_VERSION="$NODE_VER" \ + --build-arg DEBIAN_VERSION="$DEBIAN_VER" \ -f Dockerfile \ -t "$IMAGE_NAME:$IMAGE_TAG" \ "$ROOT_DIR" if [ "$PUBLISH" = true ]; then docker push "$IMAGE_NAME:$IMAGE_TAG" + if [ "$NODE_VER" = "$DEFAULT_NODE_VER" ] && [ "$DEBIAN_VER" = "$DEFAULT_DEBIAN_VER" ]; then + docker tag "$IMAGE_NAME:$IMAGE_TAG" "$IMAGE_NAME:$IMAGE_SHORT_TAG" + docker push "$IMAGE_NAME:$IMAGE_SHORT_TAG" + fi fi docker logout "$KALISIO_DOCKERHUB_URL"