From 58345395d27a5aacf3db6b6ef4c502488490a75d Mon Sep 17 00:00:00 2001 From: Tim Brust Date: Wed, 15 Jan 2025 21:55:30 +0100 Subject: [PATCH 1/5] feat: adds initial support for Node.js 22, refactor CI pipeline --- .github/workflows/dockerimage.yml | 110 ++++++++---------------------- 11/jdk/22/Dockerfile | 26 +++++++ 11/jdk/22/alpine/Dockerfile | 15 ++++ 11/jre/22/Dockerfile | 26 +++++++ 11/jre/22/alpine/Dockerfile | 15 ++++ 17/jdk/22/Dockerfile | 26 +++++++ 17/jdk/22/alpine/Dockerfile | 15 ++++ 17/jre/22/Dockerfile | 26 +++++++ 17/jre/22/alpine/Dockerfile | 15 ++++ 21/jdk/22/Dockerfile | 26 +++++++ 21/jdk/22/alpine/Dockerfile | 15 ++++ 21/jre/22/Dockerfile | 26 +++++++ 21/jre/22/alpine/Dockerfile | 15 ++++ 8/jdk/22/Dockerfile | 26 +++++++ 8/jdk/22/alpine/Dockerfile | 15 ++++ 8/jre/22/Dockerfile | 26 +++++++ 8/jre/22/alpine/Dockerfile | 15 ++++ 17 files changed, 357 insertions(+), 81 deletions(-) create mode 100644 11/jdk/22/Dockerfile create mode 100644 11/jdk/22/alpine/Dockerfile create mode 100644 11/jre/22/Dockerfile create mode 100644 11/jre/22/alpine/Dockerfile create mode 100644 17/jdk/22/Dockerfile create mode 100644 17/jdk/22/alpine/Dockerfile create mode 100644 17/jre/22/Dockerfile create mode 100644 17/jre/22/alpine/Dockerfile create mode 100644 21/jdk/22/Dockerfile create mode 100644 21/jdk/22/alpine/Dockerfile create mode 100644 21/jre/22/Dockerfile create mode 100644 21/jre/22/alpine/Dockerfile create mode 100644 8/jdk/22/Dockerfile create mode 100644 8/jdk/22/alpine/Dockerfile create mode 100644 8/jre/22/Dockerfile create mode 100644 8/jre/22/alpine/Dockerfile diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index b87cb706..2d6e12a6 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -10,95 +10,43 @@ on: jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + java-version: [8, 11, 17, 21] + java-type: [jdk, jre] + node-version: [18, 20, 22] + variant: [default, alpine] steps: - uses: actions/checkout@v4.2.2 - - name: Build the Docker image + - name: Build and test Docker image run: | - printf "\n\nJDK8 with Node.js 18\n" - docker run -i $(docker build -q 8/jdk/18) /bin/sh -c "java -version && node --version" - printf "\n\nJDK8 alpine with Node.js 18\n" - docker run -i $(docker build -q 8/jdk/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK8 with Node.js 20\n" - docker run -i $(docker build -q 8/jdk/20) /bin/sh -c "java -version && node --version" - printf "\n\nJDK8 alpine with Node.js 20\n" - docker run -i $(docker build -q 8/jdk/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE8 with Node.js 18\n" - docker run -i $(docker build -q 8/jre/18) /bin/sh -c "java -version && node --version" - printf "\n\nJRE8 alpine with Node.js 18\n" - docker run -i $(docker build -q 8/jre/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE8 with Node.js 20\n" - docker run -i $(docker build -q 8/jre/20) /bin/sh -c "java -version && node --version" - printf "\n\nJRE8 alpine with Node.js 20\n" - docker run -i $(docker build -q 8/jre/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK11 with Node.js 18\n" - docker run -i $(docker build -q 11/jdk/18) /bin/sh -c "java -version && node --version" - printf "\n\nJDK11 alpine with Node.js 18\n" - docker run -i $(docker build -q 11/jdk/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK11 with Node.js 20\n" - docker run -i $(docker build -q 11/jdk/20) /bin/sh -c "java -version && node --version" - printf "\n\nJDK11 alpine with Node.js 20\n" - docker run -i $(docker build -q 11/jdk/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE11 with Node.js 18\n" - docker run -i $(docker build -q 11/jre/18) /bin/sh -c "java -version && node --version" - printf "\n\nJRE11 alpine with Node.js 18\n" - docker run -i $(docker build -q 11/jre/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE11 with Node.js 20\n" - docker run -i $(docker build -q 11/jre/20) /bin/sh -c "java -version && node --version" - printf "\n\nJRE11 alpine with Node.js 20\n" - docker run -i $(docker build -q 11/jre/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK17 with Node.js 18\n" - docker run -i $(docker build -q 17/jdk/18) /bin/sh -c "java -version && node --version" - printf "\n\nJDK17 alpine with Node.js 18\n" - docker run -i $(docker build -q 17/jdk/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK17 with Node.js 20\n" - docker run -i $(docker build -q 17/jdk/20) /bin/sh -c "java -version && node --version" - printf "\n\nJDK17 alpine with Node.js 20\n" - docker run -i $(docker build -q 17/jdk/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE17 with Node.js 18\n" - docker run -i $(docker build -q 17/jre/18) /bin/sh -c "java -version && node --version" - printf "\n\nJRE17 alpine with Node.js 18\n" - docker run -i $(docker build -q 17/jre/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE17 with Node.js 20\n" - docker run -i $(docker build -q 17/jre/20) /bin/sh -c "java -version && node --version" - printf "\n\nJRE17 alpine with Node.js 20\n" - docker run -i $(docker build -q 17/jre/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK21 with Node.js 18\n" - docker run -i $(docker build -q 21/jdk/18) /bin/sh -c "java -version && node --version" - printf "\n\nJDK21 alpine with Node.js 18\n" - docker run -i $(docker build -q 21/jdk/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJDK21 with Node.js 20\n" - docker run -i $(docker build -q 21/jdk/20) /bin/sh -c "java -version && node --version" - printf "\n\nJDK21 alpine with Node.js 20\n" - docker run -i $(docker build -q 21/jdk/20/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE21 with Node.js 18\n" - docker run -i $(docker build -q 21/jre/18) /bin/sh -c "java -version && node --version" - printf "\n\nJRE21 alpine with Node.js 18\n" - docker run -i $(docker build -q 21/jre/18/alpine) /bin/sh -c "java -version && node --version" - - printf "\n\nJRE21 with Node.js 20\n" - docker run -i $(docker build -q 21/jre/20) /bin/sh -c "java -version && node --version" - printf "\n\nJRE21 alpine with Node.js 20\n" - docker run -i $(docker build -q 21/jre/20/alpine) /bin/sh -c "java -version && node --version" + VARIANT_PATH="${{ matrix.variant == 'alpine' && '/alpine' || '' }}" + IMAGE_PATH="${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${VARIANT_PATH}" + + VARIANT_LABEL="${{ matrix.variant == 'alpine' && ' alpine' || '' }}" + printf "\n\n${{ matrix.java-type | upper }}${{ matrix.java-version }} with Node.js ${{ matrix.node-version }}${VARIANT_LABEL}\n" + + # Run container and capture version outputs + VERSIONS=$(docker run -i $(docker build -q ${IMAGE_PATH}) /bin/sh -c "java -version 2>&1 && node --version") + + # Check Java version + if ! echo "$VERSIONS" | grep -q "version \"${{ matrix.java-version }}"; then + echo "::error::Expected Java ${{ matrix.java-version }} but got different version" + exit 1 + fi + + # Check Node version + if ! echo "$VERSIONS" | grep -q "v${{ matrix.node-version }}"; then + echo "::error::Expected Node.js ${{ matrix.node-version }} but got different version" + exit 1 + fi + + echo "$VERSIONS" auto-merge: runs-on: ubuntu-latest needs: build - permissions: pull-requests: write contents: write diff --git a/11/jdk/22/Dockerfile b/11/jdk/22/Dockerfile new file mode 100644 index 00000000..a7e82f36 --- /dev/null +++ b/11/jdk/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:11-jdk +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/11/jdk/22/alpine/Dockerfile b/11/jdk/22/alpine/Dockerfile new file mode 100644 index 00000000..e273994d --- /dev/null +++ b/11/jdk/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:11-jdk-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/11/jre/22/Dockerfile b/11/jre/22/Dockerfile new file mode 100644 index 00000000..dc7dfc11 --- /dev/null +++ b/11/jre/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:11-jre +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/11/jre/22/alpine/Dockerfile b/11/jre/22/alpine/Dockerfile new file mode 100644 index 00000000..f0a02c31 --- /dev/null +++ b/11/jre/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:11-jre-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/17/jdk/22/Dockerfile b/17/jdk/22/Dockerfile new file mode 100644 index 00000000..0d6cd4bd --- /dev/null +++ b/17/jdk/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:17-jdk +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/17/jdk/22/alpine/Dockerfile b/17/jdk/22/alpine/Dockerfile new file mode 100644 index 00000000..af93902c --- /dev/null +++ b/17/jdk/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:17-jdk-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/17/jre/22/Dockerfile b/17/jre/22/Dockerfile new file mode 100644 index 00000000..a3bacb33 --- /dev/null +++ b/17/jre/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:17-jre +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/17/jre/22/alpine/Dockerfile b/17/jre/22/alpine/Dockerfile new file mode 100644 index 00000000..00d827a9 --- /dev/null +++ b/17/jre/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:17-jre-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/21/jdk/22/Dockerfile b/21/jdk/22/Dockerfile new file mode 100644 index 00000000..9adc79b4 --- /dev/null +++ b/21/jdk/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:21-jdk +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/21/jdk/22/alpine/Dockerfile b/21/jdk/22/alpine/Dockerfile new file mode 100644 index 00000000..9906ad50 --- /dev/null +++ b/21/jdk/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:21-jdk-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/21/jre/22/Dockerfile b/21/jre/22/Dockerfile new file mode 100644 index 00000000..ec04df26 --- /dev/null +++ b/21/jre/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:21-jre +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/21/jre/22/alpine/Dockerfile b/21/jre/22/alpine/Dockerfile new file mode 100644 index 00000000..cb9a263c --- /dev/null +++ b/21/jre/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:21-jre-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/8/jdk/22/Dockerfile b/8/jdk/22/Dockerfile new file mode 100644 index 00000000..2dca5e3b --- /dev/null +++ b/8/jdk/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:8-jdk +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/8/jdk/22/alpine/Dockerfile b/8/jdk/22/alpine/Dockerfile new file mode 100644 index 00000000..cbba7bb8 --- /dev/null +++ b/8/jdk/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:8-jdk-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git diff --git a/8/jre/22/Dockerfile b/8/jre/22/Dockerfile new file mode 100644 index 00000000..a2e358cc --- /dev/null +++ b/8/jre/22/Dockerfile @@ -0,0 +1,26 @@ +FROM eclipse-temurin:8-jre +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT +ARG NODE_MAJOR=22 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \ + && mkdir -p /etc/apt/keyrings \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + gpg \ + gpg-agent \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update -qq \ + && apt-get install -qq --no-install-recommends \ + nodejs \ + yarn \ + git \ + && apt-get upgrade -qq \ + && rm -rf /var/lib/apt/lists/* diff --git a/8/jre/22/alpine/Dockerfile b/8/jre/22/alpine/Dockerfile new file mode 100644 index 00000000..58fe2e28 --- /dev/null +++ b/8/jre/22/alpine/Dockerfile @@ -0,0 +1,15 @@ +FROM eclipse-temurin:8-jre-alpine +LABEL maintainer "Tim Brust " + +ARG REFRESHED_AT +ENV REFRESHED_AT $REFRESHED_AT + +RUN echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/community >> /etc/apk/repositories \ + && echo @new-stable https://dl-cdn.alpinelinux.org/alpine/v3.21/main >> /etc/apk/repositories \ + && apk -U upgrade \ + && apk add --no-cache \ + nodejs@new-stable \ + npm@new-stable \ + yarn \ + curl \ + git From 28e8dee0567ac216496088a1c95d8e4ba3d7bad6 Mon Sep 17 00:00:00 2001 From: Tim Brust Date: Wed, 15 Jan 2025 22:04:46 +0100 Subject: [PATCH 2/5] fix: bad actions workflow --- .github/workflows/dockerimage.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 2d6e12a6..7fb0c7d8 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -1,12 +1,5 @@ name: Test Docker image -on: - push: - branches: - - master - pull_request: - workflow_dispatch: - jobs: build: runs-on: ubuntu-latest @@ -23,9 +16,9 @@ jobs: run: | VARIANT_PATH="${{ matrix.variant == 'alpine' && '/alpine' || '' }}" IMAGE_PATH="${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${VARIANT_PATH}" - VARIANT_LABEL="${{ matrix.variant == 'alpine' && ' alpine' || '' }}" - printf "\n\n${{ matrix.java-type | upper }}${{ matrix.java-version }} with Node.js ${{ matrix.node-version }}${VARIANT_LABEL}\n" + JAVA_TYPE=$(echo "${{ matrix.java-type }}" | tr '[:lower:]' '[:upper:]') + printf "\n\n${JAVA_TYPE}${{ matrix.java-version }} with Node.js ${{ matrix.node-version }}${VARIANT_LABEL}\n" # Run container and capture version outputs VERSIONS=$(docker run -i $(docker build -q ${IMAGE_PATH}) /bin/sh -c "java -version 2>&1 && node --version") From ed89eeaa1f1fbcf8ee2bf5428a454b2ab98f5968 Mon Sep 17 00:00:00 2001 From: Tim Brust Date: Wed, 15 Jan 2025 22:06:02 +0100 Subject: [PATCH 3/5] fix: missing runs on --- .github/workflows/dockerimage.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 7fb0c7d8..452570b6 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -1,5 +1,12 @@ name: Test Docker image +on: + push: + branches: + - master + pull_request: + workflow_dispatch: + jobs: build: runs-on: ubuntu-latest From 35d41253f52dc5083888793bccc50ab5083b4830 Mon Sep 17 00:00:00 2001 From: Tim Brust Date: Wed, 15 Jan 2025 22:20:21 +0100 Subject: [PATCH 4/5] fix: simplify buildx, add Node.js 22 support, too --- .github/workflows/buildx.yml | 202 +++++++----------------------- .github/workflows/dockerimage.yml | 8 +- 2 files changed, 50 insertions(+), 160 deletions(-) diff --git a/.github/workflows/buildx.yml b/.github/workflows/buildx.yml index 20750326..063a1a3f 100644 --- a/.github/workflows/buildx.yml +++ b/.github/workflows/buildx.yml @@ -14,161 +14,54 @@ jobs: strategy: fail-fast: false matrix: - docker-file: - - path: 8/jdk/18 - tags: "8-jdk-18 8-jdk-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 8/jdk/18/alpine - tags: "8-alpine-jdk-18 8-alpine-jdk-hydrogen" - platforms: linux/amd64 - - - path: 8/jdk/20 - tags: "8-jdk-20 8-jdk-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 8/jdk/20/alpine - tags: "8-alpine-jdk-20 8-alpine-jdk-iron" - platforms: linux/amd64 - - - path: 8/jre/18 - tags: "8-jre-18 8-jre-hydrogen 8-18 8-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 8/jre/18/alpine - tags: "8-alpine-18 8-alpine-hydrogen 8-alpine-jre-18 8-alpine-jre-hydrogen" - platforms: linux/amd64 - - - path: 8/jre/20 - tags: "8-jre-20 8-jre-iron 8-20 8-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 8/jre/20/alpine - tags: "8-alpine-20 8-alpine-iron 8-alpine-jre-20 8-alpine-jre-iron" - platforms: linux/amd64 - - - path: 11/jdk/18 - tags: "11-jdk-18 11-jdk-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 11/jdk/18/alpine - tags: "11-alpine-jdk-18 11-alpine-jdk-hydrogen" - platforms: linux/amd64 - - - path: 11/jdk/20 - tags: "11-jdk-20 11-jdk-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 11/jdk/20/alpine - tags: "11-alpine-jdk-20 11-alpine-jdk-iron" - platforms: linux/amd64 - - - path: 11/jre/18 - tags: "11-18 11-hydrogen 11-jre-18 11-jre-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 11/jre/18/alpine - tags: "11-alpine-18 11-alpine-hydrogen 11-alpine-jre-18 11-alpine-jre-hydrogen" - platforms: linux/amd64 - - - path: 11/jre/20 - tags: "11-20 11-iron 11-jre-20 11-jre-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 11/jre/20/alpine - tags: "11-alpine-20 11-alpine-iron 11-alpine-jre-20 11-alpine-jre-iron" - platforms: linux/amd64 - - - path: 17/jdk/18 - tags: "17-jdk-18 17-jdk-hydrogen jdk-18 jdk-18-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 17/jdk/18/alpine - tags: "alpine-jdk-18 alpine-jdk-hydrogen 17-alpine-jdk-18 17-alpine-jdk-hydrogen" - platforms: linux/amd64 - - - path: 17/jdk/20 - tags: "17-jdk-20 17-jdk-iron jdk-20 jdk-20-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 17/jdk/20/alpine - tags: "17-alpine-jdk-20 17-alpine-jdk-iron" - platforms: linux/amd64 - - - path: 17/jre/18 - tags: "17-18 17-hydrogen 17-jre-18 17-jre-hydrogen" + java-version: [8, 11, 17, 21] + java-type: [jdk, jre] + node-version: [18, 20, 22, 24, 26, 28] + variant: [default, alpine] + platforms: + - linux/amd64,linux/arm64,linux/ppc64le + include: + - variant: alpine + platforms: linux/amd64 + - java-version: 11 + variant: default platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - path: 17/jre/18/alpine - tags: "17-alpine-18 17-alpine-hydrogen 17-alpine-jre-18 17-alpine-jre-hydrogen" - platforms: linux/amd64 - - - path: 17/jre/20 - tags: "17-20 17-iron 17-jre-20 17-jre-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7 - - - path: 17/jre/20/alpine - tags: "17-alpine-20 17-alpine-iron 17-alpine-jre-20 17-alpine-jre-iron" - platforms: linux/amd64 - - - path: 21/jdk/18 - tags: "21-jdk-18 21-jdk-hydrogen jdk-18 jdk-18-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 21/jdk/18/alpine - tags: "alpine-jdk-18 alpine-jdk-hydrogen 21-alpine-jdk-18 21-alpine-jdk-hydrogen" - platforms: linux/amd64 - - - path: 21/jdk/20 - tags: "21-jdk-20 21-jdk-iron jdk-20 jdk-20-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 21/jdk/20/alpine - tags: "alpine-jdk-20 alpine-jdk-iron 21-alpine-jdk-20 21-alpine-jdk-iron" - platforms: linux/amd64 - - - path: 21/jre/18 - tags: "21-18 21-hydrogen 21-jre-18 21-jre-hydrogen" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 21/jre/18/alpine - tags: "21-alpine-18 21-alpine-hydrogen 21-alpine-jre-18 21-alpine-jre-hydrogen alpine-18 alpine-hydrogen alpine-jre-18 alpine-jre-hydrogen" - platforms: linux/amd64 - - - path: 21/jre/20 - tags: "21-20 21-iron 21-jre-20 21-jre-iron" - platforms: linux/amd64,linux/arm64,linux/ppc64le - - - path: 21/jre/20/alpine - tags: "21-alpine-20 21-alpine-iron 21-alpine-jre-20 21-alpine-jre-iron alpine-20 alpine-iron alpine-jre-20 alpine-jre-iron" - platforms: linux/amd64 steps: - - name: Checkout - uses: actions/checkout@v4.2.2 + - uses: actions/checkout@v4.2.2 - - name: Workaround Docker bug in runner + - name: Set Node.js codename + id: nodename run: | - sudo rm /etc/docker/daemon.json - sudo systemctl restart docker - - - name: Prepare + case "${{ matrix.node-version }}" in + "18") echo "codename=hydrogen" >> $GITHUB_OUTPUT ;; + "20") echo "codename=iron" >> $GITHUB_OUTPUT ;; + "22") echo "codename=jod" >> $GITHUB_OUTPUT ;; + "24") echo "codename=krypton" >> $GITHUB_OUTPUT ;; + "26") echo "codename=lithium" >> $GITHUB_OUTPUT ;; + "28") echo "codename=magnesium" >> $GITHUB_OUTPUT ;; + esac + + - name: Generate tags id: prepare run: | DOCKER_IMAGE=timbru31/java-node - - TEMP="${{ matrix.docker-file.tags }}" - TAGZ=($TEMP) - VERSION=${TAGZ[0]} - - for i in "${!TAGZ[@]}"; do - if [ "$i" -eq "0" ]; - then - TAGS="${DOCKER_IMAGE}:${TAGZ[$i]}" - else - TAGS="${TAGS},${DOCKER_IMAGE}:${TAGZ[$i]}" - fi - done - + VERSION="${{ matrix.java-version }}" + NODE_CODENAME=${{ steps.nodename.outputs.codename }} + VARIANT="${{ matrix.variant == 'alpine' && '-alpine' || '' }}" + TYPE="${{ matrix.java-type }}" + + # Generate tag combinations + if [ "$TYPE" = "jdk" ]; then + TAGS="${DOCKER_IMAGE}:${VERSION}${VARIANT}-jdk-${{ matrix.node-version }}" + TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jdk-${NODE_CODENAME}" + else + TAGS="${DOCKER_IMAGE}:${VERSION}${VARIANT}-${{ matrix.node-version }}" + TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-${NODE_CODENAME}" + TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jre-${{ matrix.node-version }}" + TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jre-${NODE_CODENAME}" + fi + echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "tags=${TAGS}" >> $GITHUB_OUTPUT @@ -182,18 +75,15 @@ jobs: with: install: true - - name: Available platforms - run: echo ${{ steps.buildx.outputs.platforms }} - - name: Docker Buildx (build) uses: docker/build-push-action@v6.9.0 if: success() && !contains(github.ref, 'master') with: push: false - context: ./${{ matrix.docker-file.path }} - file: ./${{ matrix.docker-file.path }}/Dockerfile + context: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }} + file: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}/Dockerfile build-args: REFRESHED_AT=$(date +%Y-%m-%d) - platforms: ${{ matrix.docker-file.platforms }} + platforms: ${{ matrix.platforms }} tags: ${{ steps.prepare.outputs.tags }} - name: Docker Login @@ -208,10 +98,10 @@ jobs: if: success() && github.event_name != 'pull_request' && contains(github.ref, 'master') with: push: true - context: ./${{ matrix.docker-file.path }} - file: ./${{ matrix.docker-file.path }}/Dockerfile + context: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }} + file: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}/Dockerfile build-args: REFRESHED_AT=$(date +%Y-%m-%d) - platforms: ${{ matrix.docker-file.platforms }} + platforms: ${{ matrix.platforms }} tags: ${{ steps.prepare.outputs.tags }} - name: Inspect Image diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 452570b6..07deb020 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -11,6 +11,7 @@ jobs: build: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: java-version: [8, 11, 17, 21] java-type: [jdk, jre] @@ -29,20 +30,19 @@ jobs: # Run container and capture version outputs VERSIONS=$(docker run -i $(docker build -q ${IMAGE_PATH}) /bin/sh -c "java -version 2>&1 && node --version") - + echo "$VERSIONS" + # Check Java version if ! echo "$VERSIONS" | grep -q "version \"${{ matrix.java-version }}"; then echo "::error::Expected Java ${{ matrix.java-version }} but got different version" exit 1 fi - + # Check Node version if ! echo "$VERSIONS" | grep -q "v${{ matrix.node-version }}"; then echo "::error::Expected Node.js ${{ matrix.node-version }} but got different version" exit 1 fi - - echo "$VERSIONS" auto-merge: runs-on: ubuntu-latest From a22e804a0a7dcb3073cf2f56289908f0821cc4a6 Mon Sep 17 00:00:00 2001 From: Tim Brust Date: Wed, 15 Jan 2025 22:32:38 +0100 Subject: [PATCH 5/5] fix: JDK8 version check, buildx matrix --- .github/workflows/buildx.yml | 6 +++--- .github/workflows/dockerimage.yml | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/buildx.yml b/.github/workflows/buildx.yml index ce665ca5..6a6b2035 100644 --- a/.github/workflows/buildx.yml +++ b/.github/workflows/buildx.yml @@ -16,11 +16,11 @@ jobs: matrix: java-version: [8, 11, 17, 21] java-type: [jdk, jre] - node-version: [18, 20, 22, 24, 26, 28] + node-version: [18, 20, 22] variant: [default, alpine] - platforms: - - linux/amd64,linux/arm64,linux/ppc64le include: + - variant: default + platforms: linux/amd64,linux/arm64,linux/ppc64le - variant: alpine platforms: linux/amd64 - java-version: 11 diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 07deb020..572a06b8 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -33,9 +33,16 @@ jobs: echo "$VERSIONS" # Check Java version - if ! echo "$VERSIONS" | grep -q "version \"${{ matrix.java-version }}"; then - echo "::error::Expected Java ${{ matrix.java-version }} but got different version" - exit 1 + if [ "${{ matrix.java-version }}" = "8" ]; then + if ! echo "$VERSIONS" | grep -q "version \"1.8.0"; then + echo "::error::Expected Java 8 but got different version" + exit 1 + fi + else + if ! echo "$VERSIONS" | grep -q "version \"${{ matrix.java-version }}"; then + echo "::error::Expected Java ${{ matrix.java-version }} but got different version" + exit 1 + fi fi # Check Node version