@@ -14,150 +14,52 @@ jobs:
1414 strategy :
1515 fail-fast : false
1616 matrix :
17- docker-file :
18- - path : 3.1/18
19- tags : " 3.1-18 3.1-hydrogen"
17+ ruby-version : [3.1, 3.2, 3.3, 3.4]
18+ node-version : [18, 20, 22]
19+ variant : [default, slim, alpine]
20+ include :
21+ - variant : default
2022 platforms : linux/amd64,linux/arm64,linux/arm/v7
21- - path : 3.1/18/slim
22- tags : " 3.1-slim-18 3.1-slim-hydrogen"
23+ - variant : slim
2324 platforms : linux/amd64,linux/arm64,linux/arm/v7
24- - path : 3.1/18/alpine
25- tags : " 3.1-alpine-18 3.1-alpine-hydrogen"
25+ - variant : alpine
2626 platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
2727
28- - path : 3.2/18
29- tags : " 3.2-18 3.2-hydrogen"
30- platforms : linux/amd64,linux/arm64,linux/arm/v7
31- - path : 3.2/18/slim
32- tags : " 3.2-slim-18 3.2-slim-hydrogen"
33- platforms : linux/amd64,linux/arm64,linux/arm/v7
34- - path : 3.2/18/alpine
35- tags : " 3.2-alpine-18 3.2-alpine-hydrogen"
36- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
37-
38- - path : 3.3/18
39- tags : " 3.3-18 3.3-hydrogen"
40- platforms : linux/amd64,linux/arm64,linux/arm/v7
41- - path : 3.3/18/slim
42- tags : " 3.3-slim-18 3.3-slim-hydrogen"
43- platforms : linux/amd64,linux/arm64,linux/arm/v7
44- - path : 3.3/18/alpine
45- tags : " 3.3-alpine-18 3.3-alpine-hydrogen"
46- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
47-
48- - path : 3.4/18
49- tags : " 3.4-18 3.4-hydrogen"
50- platforms : linux/amd64,linux/arm64,linux/arm/v7
51- - path : 3.4/18/slim
52- tags : " 3.4-slim-18 3.4-slim-hydrogen"
53- platforms : linux/amd64,linux/arm64,linux/arm/v7
54- - path : 3.4/18/alpine
55- tags : " 3.4-alpine-18 3.4-alpine-hydrogen"
56- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
57-
58- - path : 3.1/20
59- tags : " 3.1-20 3.1-iron 3.1"
60- platforms : linux/amd64,linux/arm64,linux/arm/v7
61- - path : 3.1/20/slim
62- tags : " 3.1-slim-20 3.1-slim-iron 3.1-slim"
63- platforms : linux/amd64,linux/arm64,linux/arm/v7
64- - path : 3.1/20/alpine
65- tags : " 3.1-alpine-20 3.1-alpine-iron 3.1-alpine"
66- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
67-
68- - path : 3.2/20
69- tags : " 3.2-20 3.2-iron 3.2"
70- platforms : linux/amd64,linux/arm64,linux/arm/v7
71- - path : 3.2/20/slim
72- tags : " 3.2-slim-20 3.2-slim-iron 3.2-slim"
73- platforms : linux/amd64,linux/arm64,linux/arm/v7
74- - path : 3.2/20/alpine
75- tags : " 3.2-alpine-20 3.2-alpine-iron 3.2-alpine"
76- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
77-
78- - path : 3.3/20
79- tags : " 3.3-20 3.3-iron 3.3 3 latest"
80- platforms : linux/amd64,linux/arm64,linux/arm/v7
81- - path : 3.3/20/slim
82- tags : " 3.3-slim-20 3.3-slim-iron 3.3-slim 3-slim slim"
83- platforms : linux/amd64,linux/arm64,linux/arm/v7
84- - path : 3.3/20/alpine
85- tags : " 3.3-alpine-20 3.3-alpine-iron 3.3-alpine 3-alpine alpine"
86- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
87-
88- - path : 3.4/20
89- tags : " 3.4-20 3.4-iron 3.4"
90- platforms : linux/amd64,linux/arm64,linux/arm/v7
91- - path : 3.4/20/slim
92- tags : " 3.4-slim-20 3.4-slim-iron 3.4-slim"
93- platforms : linux/amd64,linux/arm64,linux/arm/v7
94- - path : 3.4/20/alpine
95- tags : " 3.4-alpine-20 3.4-alpine-iron 3.4-alpine"
96- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
97-
98- - path : 3.1/22
99- tags : " 3.1-22 3.1-jod"
100- platforms : linux/amd64,linux/arm64,linux/arm/v7
101- - path : 3.1/22/slim
102- tags : " 3.1-slim-22 3.1-slim-jod"
103- platforms : linux/amd64,linux/arm64,linux/arm/v7
104- - path : 3.1/22/alpine
105- tags : " 3.1-alpine-22 3.1-alpine-jod"
106- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
107-
108- - path : 3.2/22
109- tags : " 3.2-22 3.2-jod"
110- platforms : linux/amd64,linux/arm64,linux/arm/v7
111- - path : 3.2/22/slim
112- tags : " 3.2-slim-22 3.2-slim-jod"
113- platforms : linux/amd64,linux/arm64,linux/arm/v7
114- - path : 3.2/22/alpine
115- tags : " 3.2-alpine-22 3.2-alpine-jod"
116- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
117-
118- - path : 3.3/22
119- tags : " 3.3-22 3.3-jod"
120- platforms : linux/amd64,linux/arm64,linux/arm/v7
121- - path : 3.3/22/slim
122- tags : " 3.3-slim-22 3.3-slim-jod"
123- platforms : linux/amd64,linux/arm64,linux/arm/v7
124- - path : 3.3/22/alpine
125- tags : " 3.3-alpine-22 3.3-alpine-jod"
126- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
127-
128- - path : 3.4/22
129- tags : " 3.4-22 3.4-jod"
130- platforms : linux/amd64,linux/arm64,linux/arm/v7
131- - path : 3.4/22/slim
132- tags : " 3.4-slim-22 3.4-slim-jod"
133- platforms : linux/amd64,linux/arm64,linux/arm/v7
134- - path : 3.4/22/alpine
135- tags : " 3.4-alpine-22 3.4-alpine-jod"
136- platforms : linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7,linux/arm/v6
13728 steps :
138- - name : Checkout
139- 29+ 14030
141- - name : Prepare
31+ - name : Set Node.js codename
32+ id : nodename
33+ run : |
34+ case "${{ matrix.node-version }}" in
35+ "18") echo "codename=hydrogen" >> $GITHUB_OUTPUT ;;
36+ "20") echo "codename=iron" >> $GITHUB_OUTPUT ;;
37+ "22") echo "codename=jod" >> $GITHUB_OUTPUT ;;
38+ "24") echo "codename=krypton" >> $GITHUB_OUTPUT ;;
39+ "26") echo "codename=lithium" >> $GITHUB_OUTPUT ;;
40+ "28") echo "codename=magnesium" >> $GITHUB_OUTPUT ;;
41+ esac
42+
43+ - name : Generate tags
14244 id : prepare
14345 run : |
14446 DOCKER_IMAGE=timbru31/ruby-node
145-
146- TEMP="${{ matrix.docker-file.tags }}"
147- TAGZ=($TEMP)
148- VERSION=${TAGZ[0]}
149-
150- for i in "${!TAGZ[@]}"; do
151- if [ "$i" -eq "0" ];
152- then
153- TAGS="${DOCKER_IMAGE}:${TAGZ[$i]}"
154- else
155- TAGS="${TAGS},${DOCKER_IMAGE}:${TAGZ[$i]}"
47+ VERSION="${{ matrix.ruby-version }}"
48+ NODE_CODENAME=${{ steps.nodename.outputs.codename }}
49+ VARIANT="${{ matrix.variant != 'default' && '-${{ matrix.variant }}' || '' }}"
50+ TAGS="${DOCKER_IMAGE}:${VERSION}${VARIANT}-${{ matrix.node-version }}"
51+ TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}${VARIANT}-${NODE_CODENAME}"
52+ if [ "${{ matrix.ruby-version }}" = "3.4" ] && [ "${{ matrix.node-version }}" = "22" ]; then
53+ if [ "${{ matrix.variant }}" = "default" ]; then
54+ TAGS="${TAGS},${DOCKER_IMAGE}:3,${DOCKER_IMAGE}:latest"
55+ elif [ "${{ matrix.variant }}" = "slim" ]; then
56+ TAGS="${TAGS},${DOCKER_IMAGE}:3-slim,${DOCKER_IMAGE}:slim"
57+ elif [ "${{ matrix.variant }}" = "alpine" ]; then
58+ TAGS="${TAGS},${DOCKER_IMAGE}:3-alpine,${DOCKER_IMAGE}:alpine"
15659 fi
157- done
158-
60+ fi
15961 echo "docker_image=${DOCKER_IMAGE}" >> $GITHUB_OUTPUT
160- echo "version=${VERSION}" >> $GITHUB_OUTPUT
62+ echo "version=${VERSION}${VARIANT}-${{ matrix.node-version }} " >> $GITHUB_OUTPUT
16163 echo "tags=${TAGS}" >> $GITHUB_OUTPUT
16264
16365 - name : Set up QEMU
@@ -169,18 +71,15 @@ jobs:
16971 with :
17072 install : true
17173
172- - name : Available platforms
173- run : echo ${{ steps.buildx.outputs.platforms }}
174-
17574 - name : Docker Buildx (build)
1767517776 if : success() && !contains(github.ref, 'master')
17877 with :
17978 push : false
180- context : ./${{ matrix.docker-file.path }}
181- file : ./${{ matrix.docker-file.path }}/Dockerfile
79+ context : ./${{ matrix.ruby-version }}/${{ matrix.node-version }}${{ matrix.variant != 'default' && '/${{ matrix.variant }}' || '' }}
80+ file : ./${{ matrix.ruby-version }}/${{ matrix.node-version }}${{ matrix.variant != 'default' && '/${{ matrix.variant }}' || '' }}/Dockerfile
18281 build-args : REFRESHED_AT=$(date +%Y-%m-%d)
183- platforms : ${{ matrix.docker-file. platforms }}
82+ platforms : ${{ matrix.platforms }}
18483 tags : ${{ steps.prepare.outputs.tags }}
18584
18685 - name : Docker Login
@@ -195,16 +94,16 @@ jobs:
19594 if : success() && github.event_name != 'pull_request' && contains(github.ref, 'master')
19695 with :
19796 push : true
198- context : ./${{ matrix.docker-file.path }}
199- file : ./${{ matrix.docker-file.path }}/Dockerfile
97+ context : ./${{ matrix.ruby-version }}/${{ matrix.node-version }}${{ matrix.variant != 'default' && '/${{ matrix.variant }}' || '' }}
98+ file : ./${{ matrix.ruby-version }}/${{ matrix.node-version }}${{ matrix.variant != 'default' && '/${{ matrix.variant }}' || '' }}/Dockerfile
20099 build-args : REFRESHED_AT=$(date +%Y-%m-%d)
201- platforms : ${{ matrix.docker-file. platforms }}
100+ platforms : ${{ matrix.platforms }}
202101 tags : ${{ steps.prepare.outputs.tags }}
203102
204103 - name : Inspect Image
205104 if : always() && github.event_name != 'pull_request' && contains(github.ref, 'master')
206105 run : |
207- docker buildx imagetools inspect ${{ steps.prepare.outputs.docker_image }}: ${{ steps.prepare.outputs.version }}
106+ docker buildx imagetools inspect $(echo " ${{ steps.prepare.outputs.tags }}" | cut -d',' -f1)
208107
209108 - name : Clear
210109 if : always() && github.event_name != 'pull_request'
0 commit comments