Skip to content

Commit 4430557

Browse files
authored
feat: adds support for Node.js 22, refactor CI pipeline (#666)
1 parent 0a2b64f commit 4430557

File tree

18 files changed

+408
-230
lines changed

18 files changed

+408
-230
lines changed

.github/workflows/buildx.yml

Lines changed: 44 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -14,156 +14,54 @@ jobs:
1414
strategy:
1515
fail-fast: false
1616
matrix:
17-
docker-file:
18-
- path: 8/jdk/18
19-
tags: "8-jdk-18 8-jdk-hydrogen"
17+
java-version: [8, 11, 17, 21]
18+
java-type: [jdk, jre]
19+
node-version: [18, 20, 22]
20+
variant: [default, alpine]
21+
include:
22+
- variant: default
2023
platforms: linux/amd64,linux/arm64,linux/ppc64le
21-
22-
- path: 8/jdk/18/alpine
23-
tags: "8-alpine-jdk-18 8-alpine-jdk-hydrogen"
24-
platforms: linux/amd64
25-
26-
- path: 8/jdk/20
27-
tags: "8-jdk-20 8-jdk-iron"
28-
platforms: linux/amd64,linux/arm64,linux/ppc64le
29-
30-
- path: 8/jdk/20/alpine
31-
tags: "8-alpine-jdk-20 8-alpine-jdk-iron"
32-
platforms: linux/amd64
33-
34-
- path: 8/jre/18
35-
tags: "8-jre-18 8-jre-hydrogen 8-18 8-hydrogen"
36-
platforms: linux/amd64,linux/arm64,linux/ppc64le
37-
38-
- path: 8/jre/18/alpine
39-
tags: "8-alpine-18 8-alpine-hydrogen 8-alpine-jre-18 8-alpine-jre-hydrogen"
24+
- variant: alpine
4025
platforms: linux/amd64
41-
42-
- path: 8/jre/20
43-
tags: "8-jre-20 8-jre-iron 8-20 8-iron"
44-
platforms: linux/amd64,linux/arm64,linux/ppc64le
45-
46-
- path: 8/jre/20/alpine
47-
tags: "8-alpine-20 8-alpine-iron 8-alpine-jre-20 8-alpine-jre-iron"
48-
platforms: linux/amd64
49-
50-
- path: 11/jdk/18
51-
tags: "11-jdk-18 11-jdk-hydrogen"
26+
- java-version: 11
27+
variant: default
5228
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
5329

54-
- path: 11/jdk/18/alpine
55-
tags: "11-alpine-jdk-18 11-alpine-jdk-hydrogen"
56-
platforms: linux/amd64
57-
58-
- path: 11/jdk/20
59-
tags: "11-jdk-20 11-jdk-iron"
60-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
61-
62-
- path: 11/jdk/20/alpine
63-
tags: "11-alpine-jdk-20 11-alpine-jdk-iron"
64-
platforms: linux/amd64
65-
66-
- path: 11/jre/18
67-
tags: "11-18 11-hydrogen 11-jre-18 11-jre-hydrogen"
68-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
69-
70-
- path: 11/jre/18/alpine
71-
tags: "11-alpine-18 11-alpine-hydrogen 11-alpine-jre-18 11-alpine-jre-hydrogen"
72-
platforms: linux/amd64
73-
74-
- path: 11/jre/20
75-
tags: "11-20 11-iron 11-jre-20 11-jre-iron"
76-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
77-
78-
- path: 11/jre/20/alpine
79-
tags: "11-alpine-20 11-alpine-iron 11-alpine-jre-20 11-alpine-jre-iron"
80-
platforms: linux/amd64
81-
82-
- path: 17/jdk/18
83-
tags: "17-jdk-18 17-jdk-hydrogen jdk-18 jdk-18-hydrogen"
84-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
85-
86-
- path: 17/jdk/18/alpine
87-
tags: "alpine-jdk-18 alpine-jdk-hydrogen 17-alpine-jdk-18 17-alpine-jdk-hydrogen"
88-
platforms: linux/amd64
89-
90-
- path: 17/jdk/20
91-
tags: "17-jdk-20 17-jdk-iron jdk-20 jdk-20-iron"
92-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
93-
94-
- path: 17/jdk/20/alpine
95-
tags: "17-alpine-jdk-20 17-alpine-jdk-iron"
96-
platforms: linux/amd64
97-
98-
- path: 17/jre/18
99-
tags: "17-18 17-hydrogen 17-jre-18 17-jre-hydrogen"
100-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
101-
102-
- path: 17/jre/18/alpine
103-
tags: "17-alpine-18 17-alpine-hydrogen 17-alpine-jre-18 17-alpine-jre-hydrogen"
104-
platforms: linux/amd64
105-
106-
- path: 17/jre/20
107-
tags: "17-20 17-iron 17-jre-20 17-jre-iron"
108-
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7
109-
110-
- path: 17/jre/20/alpine
111-
tags: "17-alpine-20 17-alpine-iron 17-alpine-jre-20 17-alpine-jre-iron"
112-
platforms: linux/amd64
113-
114-
- path: 21/jdk/18
115-
tags: "21-jdk-18 21-jdk-hydrogen jdk-18 jdk-18-hydrogen"
116-
platforms: linux/amd64,linux/arm64,linux/ppc64le
117-
118-
- path: 21/jdk/18/alpine
119-
tags: "alpine-jdk-18 alpine-jdk-hydrogen 21-alpine-jdk-18 21-alpine-jdk-hydrogen"
120-
platforms: linux/amd64
121-
122-
- path: 21/jdk/20
123-
tags: "21-jdk-20 21-jdk-iron jdk-20 jdk-20-iron"
124-
platforms: linux/amd64,linux/arm64,linux/ppc64le
125-
126-
- path: 21/jdk/20/alpine
127-
tags: "alpine-jdk-20 alpine-jdk-iron 21-alpine-jdk-20 21-alpine-jdk-iron"
128-
platforms: linux/amd64
129-
130-
- path: 21/jre/18
131-
tags: "21-18 21-hydrogen 21-jre-18 21-jre-hydrogen"
132-
platforms: linux/amd64,linux/arm64,linux/ppc64le
133-
134-
- path: 21/jre/18/alpine
135-
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"
136-
platforms: linux/amd64
137-
138-
- path: 21/jre/20
139-
tags: "21-20 21-iron 21-jre-20 21-jre-iron"
140-
platforms: linux/amd64,linux/arm64,linux/ppc64le
141-
142-
- path: 21/jre/20/alpine
143-
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"
144-
platforms: linux/amd64
14530
steps:
146-
- name: Checkout
147-
uses: actions/[email protected]
31+
- uses: actions/[email protected]
32+
33+
- name: Set Node.js codename
34+
id: nodename
35+
run: |
36+
case "${{ matrix.node-version }}" in
37+
"18") echo "codename=hydrogen" >> $GITHUB_OUTPUT ;;
38+
"20") echo "codename=iron" >> $GITHUB_OUTPUT ;;
39+
"22") echo "codename=jod" >> $GITHUB_OUTPUT ;;
40+
"24") echo "codename=krypton" >> $GITHUB_OUTPUT ;;
41+
"26") echo "codename=lithium" >> $GITHUB_OUTPUT ;;
42+
"28") echo "codename=magnesium" >> $GITHUB_OUTPUT ;;
43+
esac
14844
14945
- name: Prepare
15046
id: prepare
15147
run: |
15248
DOCKER_IMAGE=timbru31/java-node
153-
154-
TEMP="${{ matrix.docker-file.tags }}"
155-
TAGZ=($TEMP)
156-
VERSION=${TAGZ[0]}
157-
158-
for i in "${!TAGZ[@]}"; do
159-
if [ "$i" -eq "0" ];
160-
then
161-
TAGS="${DOCKER_IMAGE}:${TAGZ[$i]}"
162-
else
163-
TAGS="${TAGS},${DOCKER_IMAGE}:${TAGZ[$i]}"
164-
fi
165-
done
166-
49+
VERSION="${{ matrix.java-version }}"
50+
NODE_CODENAME=${{ steps.nodename.outputs.codename }}
51+
VARIANT="${{ matrix.variant == 'alpine' && '-alpine' || '' }}"
52+
TYPE="${{ matrix.java-type }}"
53+
54+
# Generate tag combinations
55+
if [ "$TYPE" = "jdk" ]; then
56+
TAGS="${DOCKER_IMAGE}:${VERSION}${VARIANT}-jdk-${{ matrix.node-version }}"
57+
TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jdk-${NODE_CODENAME}"
58+
else
59+
TAGS="${DOCKER_IMAGE}:${VERSION}${VARIANT}-${{ matrix.node-version }}"
60+
TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-${NODE_CODENAME}"
61+
TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jre-${{ matrix.node-version }}"
62+
TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-jre-${NODE_CODENAME}"
63+
fi
64+
16765
echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT
16866
echo "version=${VERSION}" >> $GITHUB_OUTPUT
16967
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
@@ -177,18 +75,15 @@ jobs:
17775
with:
17876
install: true
17977

180-
- name: Available platforms
181-
run: echo ${{ steps.buildx.outputs.platforms }}
182-
18378
- name: Docker Buildx (build)
18479
uses: docker/[email protected]
18580
if: success() && !contains(github.ref, 'master')
18681
with:
18782
push: false
188-
context: ./${{ matrix.docker-file.path }}
189-
file: ./${{ matrix.docker-file.path }}/Dockerfile
83+
context: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}
84+
file: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}/Dockerfile
19085
build-args: REFRESHED_AT=$(date +%Y-%m-%d)
191-
platforms: ${{ matrix.docker-file.platforms }}
86+
platforms: ${{ matrix.platforms }}
19287
tags: ${{ steps.prepare.outputs.tags }}
19388

19489
- name: Docker Login
@@ -203,10 +98,10 @@ jobs:
20398
if: success() && github.event_name != 'pull_request' && contains(github.ref, 'master')
20499
with:
205100
push: true
206-
context: ./${{ matrix.docker-file.path }}
207-
file: ./${{ matrix.docker-file.path }}/Dockerfile
101+
context: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}
102+
file: ./${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${{ matrix.variant == 'alpine' && '/alpine' || '' }}/Dockerfile
208103
build-args: REFRESHED_AT=$(date +%Y-%m-%d)
209-
platforms: ${{ matrix.docker-file.platforms }}
104+
platforms: ${{ matrix.platforms }}
210105
tags: ${{ steps.prepare.outputs.tags }}
211106

212107
- name: Inspect Image

.github/workflows/dockerimage.yml

Lines changed: 36 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -10,95 +10,50 @@ on:
1010
jobs:
1111
build:
1212
runs-on: ubuntu-latest
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
java-version: [8, 11, 17, 21]
17+
java-type: [jdk, jre]
18+
node-version: [18, 20, 22]
19+
variant: [default, alpine]
1320
steps:
1421
- uses: actions/[email protected]
1522

16-
- name: Build the Docker image
23+
- name: Build and test Docker image
1724
run: |
18-
printf "\n\nJDK8 with Node.js 18\n"
19-
docker run -i $(docker build -q 8/jdk/18) /bin/sh -c "java -version && node --version"
20-
printf "\n\nJDK8 alpine with Node.js 18\n"
21-
docker run -i $(docker build -q 8/jdk/18/alpine) /bin/sh -c "java -version && node --version"
22-
23-
printf "\n\nJDK8 with Node.js 20\n"
24-
docker run -i $(docker build -q 8/jdk/20) /bin/sh -c "java -version && node --version"
25-
printf "\n\nJDK8 alpine with Node.js 20\n"
26-
docker run -i $(docker build -q 8/jdk/20/alpine) /bin/sh -c "java -version && node --version"
27-
28-
printf "\n\nJRE8 with Node.js 18\n"
29-
docker run -i $(docker build -q 8/jre/18) /bin/sh -c "java -version && node --version"
30-
printf "\n\nJRE8 alpine with Node.js 18\n"
31-
docker run -i $(docker build -q 8/jre/18/alpine) /bin/sh -c "java -version && node --version"
32-
33-
printf "\n\nJRE8 with Node.js 20\n"
34-
docker run -i $(docker build -q 8/jre/20) /bin/sh -c "java -version && node --version"
35-
printf "\n\nJRE8 alpine with Node.js 20\n"
36-
docker run -i $(docker build -q 8/jre/20/alpine) /bin/sh -c "java -version && node --version"
37-
38-
printf "\n\nJDK11 with Node.js 18\n"
39-
docker run -i $(docker build -q 11/jdk/18) /bin/sh -c "java -version && node --version"
40-
printf "\n\nJDK11 alpine with Node.js 18\n"
41-
docker run -i $(docker build -q 11/jdk/18/alpine) /bin/sh -c "java -version && node --version"
42-
43-
printf "\n\nJDK11 with Node.js 20\n"
44-
docker run -i $(docker build -q 11/jdk/20) /bin/sh -c "java -version && node --version"
45-
printf "\n\nJDK11 alpine with Node.js 20\n"
46-
docker run -i $(docker build -q 11/jdk/20/alpine) /bin/sh -c "java -version && node --version"
47-
48-
printf "\n\nJRE11 with Node.js 18\n"
49-
docker run -i $(docker build -q 11/jre/18) /bin/sh -c "java -version && node --version"
50-
printf "\n\nJRE11 alpine with Node.js 18\n"
51-
docker run -i $(docker build -q 11/jre/18/alpine) /bin/sh -c "java -version && node --version"
52-
53-
printf "\n\nJRE11 with Node.js 20\n"
54-
docker run -i $(docker build -q 11/jre/20) /bin/sh -c "java -version && node --version"
55-
printf "\n\nJRE11 alpine with Node.js 20\n"
56-
docker run -i $(docker build -q 11/jre/20/alpine) /bin/sh -c "java -version && node --version"
57-
58-
printf "\n\nJDK17 with Node.js 18\n"
59-
docker run -i $(docker build -q 17/jdk/18) /bin/sh -c "java -version && node --version"
60-
printf "\n\nJDK17 alpine with Node.js 18\n"
61-
docker run -i $(docker build -q 17/jdk/18/alpine) /bin/sh -c "java -version && node --version"
62-
63-
printf "\n\nJDK17 with Node.js 20\n"
64-
docker run -i $(docker build -q 17/jdk/20) /bin/sh -c "java -version && node --version"
65-
printf "\n\nJDK17 alpine with Node.js 20\n"
66-
docker run -i $(docker build -q 17/jdk/20/alpine) /bin/sh -c "java -version && node --version"
67-
68-
printf "\n\nJRE17 with Node.js 18\n"
69-
docker run -i $(docker build -q 17/jre/18) /bin/sh -c "java -version && node --version"
70-
printf "\n\nJRE17 alpine with Node.js 18\n"
71-
docker run -i $(docker build -q 17/jre/18/alpine) /bin/sh -c "java -version && node --version"
72-
73-
printf "\n\nJRE17 with Node.js 20\n"
74-
docker run -i $(docker build -q 17/jre/20) /bin/sh -c "java -version && node --version"
75-
printf "\n\nJRE17 alpine with Node.js 20\n"
76-
docker run -i $(docker build -q 17/jre/20/alpine) /bin/sh -c "java -version && node --version"
77-
78-
printf "\n\nJDK21 with Node.js 18\n"
79-
docker run -i $(docker build -q 21/jdk/18) /bin/sh -c "java -version && node --version"
80-
printf "\n\nJDK21 alpine with Node.js 18\n"
81-
docker run -i $(docker build -q 21/jdk/18/alpine) /bin/sh -c "java -version && node --version"
82-
83-
printf "\n\nJDK21 with Node.js 20\n"
84-
docker run -i $(docker build -q 21/jdk/20) /bin/sh -c "java -version && node --version"
85-
printf "\n\nJDK21 alpine with Node.js 20\n"
86-
docker run -i $(docker build -q 21/jdk/20/alpine) /bin/sh -c "java -version && node --version"
87-
88-
printf "\n\nJRE21 with Node.js 18\n"
89-
docker run -i $(docker build -q 21/jre/18) /bin/sh -c "java -version && node --version"
90-
printf "\n\nJRE21 alpine with Node.js 18\n"
91-
docker run -i $(docker build -q 21/jre/18/alpine) /bin/sh -c "java -version && node --version"
92-
93-
printf "\n\nJRE21 with Node.js 20\n"
94-
docker run -i $(docker build -q 21/jre/20) /bin/sh -c "java -version && node --version"
95-
printf "\n\nJRE21 alpine with Node.js 20\n"
96-
docker run -i $(docker build -q 21/jre/20/alpine) /bin/sh -c "java -version && node --version"
25+
VARIANT_PATH="${{ matrix.variant == 'alpine' && '/alpine' || '' }}"
26+
IMAGE_PATH="${{ matrix.java-version }}/${{ matrix.java-type }}/${{ matrix.node-version }}${VARIANT_PATH}"
27+
VARIANT_LABEL="${{ matrix.variant == 'alpine' && ' alpine' || '' }}"
28+
JAVA_TYPE=$(echo "${{ matrix.java-type }}" | tr '[:lower:]' '[:upper:]')
29+
printf "\n\n${JAVA_TYPE}${{ matrix.java-version }} with Node.js ${{ matrix.node-version }}${VARIANT_LABEL}\n"
30+
31+
# Run container and capture version outputs
32+
VERSIONS=$(docker run -i $(docker build -q ${IMAGE_PATH}) /bin/sh -c "java -version 2>&1 && node --version")
33+
echo "$VERSIONS"
34+
35+
# Check Java version
36+
if [ "${{ matrix.java-version }}" = "8" ]; then
37+
if ! echo "$VERSIONS" | grep -q "version \"1.8.0"; then
38+
echo "::error::Expected Java 8 but got different version"
39+
exit 1
40+
fi
41+
else
42+
if ! echo "$VERSIONS" | grep -q "version \"${{ matrix.java-version }}"; then
43+
echo "::error::Expected Java ${{ matrix.java-version }} but got different version"
44+
exit 1
45+
fi
46+
fi
47+
48+
# Check Node version
49+
if ! echo "$VERSIONS" | grep -q "v${{ matrix.node-version }}"; then
50+
echo "::error::Expected Node.js ${{ matrix.node-version }} but got different version"
51+
exit 1
52+
fi
9753
9854
auto-merge:
9955
runs-on: ubuntu-latest
10056
needs: build
101-
10257
permissions:
10358
pull-requests: write
10459
contents: write

11/jdk/22/Dockerfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
FROM eclipse-temurin:11-jdk
2+
LABEL maintainer "Tim Brust <[email protected]>"
3+
4+
ARG REFRESHED_AT
5+
ENV REFRESHED_AT $REFRESHED_AT
6+
ARG NODE_MAJOR=22
7+
8+
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
9+
10+
RUN printf 'Package: nodejs\nPin: origin deb.nodesource.com\nPin-Priority: 1001' > /etc/apt/preferences.d/nodesource \
11+
&& mkdir -p /etc/apt/keyrings \
12+
&& apt-get update -qq \
13+
&& apt-get install -qq --no-install-recommends \
14+
gpg \
15+
gpg-agent \
16+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
17+
&& 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 \
18+
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
19+
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
20+
&& apt-get update -qq \
21+
&& apt-get install -qq --no-install-recommends \
22+
nodejs \
23+
yarn \
24+
git \
25+
&& apt-get upgrade -qq \
26+
&& rm -rf /var/lib/apt/lists/*

0 commit comments

Comments
 (0)