Skip to content

Commit 8d52f96

Browse files
committed
Merge and deduplicate build stages and update CI
1 parent 6c60f44 commit 8d52f96

2 files changed

Lines changed: 91 additions & 25 deletions

File tree

.github/workflows/build.yml

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,57 @@ jobs:
5151
cache-to: |
5252
type=registry,ref=docker.io/rubylang/all-ruby:cache-${{ matrix.target }},mode=max
5353
54-
build-final:
54+
build-merge:
5555
needs: build-group
5656
runs-on: ubuntu-latest
57+
strategy:
58+
fail-fast: false
59+
matrix:
60+
include:
61+
- target: ruby-0.x-3.1
62+
tag: ruby-0.x-3.1
63+
- target: ruby-3.2-4.0
64+
tag: ruby-3.2-4.0
65+
steps:
66+
- name: Remove unnecessary files to release disk space
67+
run: |
68+
sudo rm -rf \
69+
"$AGENT_TOOLSDIRECTORY" \
70+
/opt/ghc \
71+
/opt/google/chrome \
72+
/opt/microsoft/msedge \
73+
/opt/microsoft/powershell \
74+
/opt/pipx \
75+
/usr/lib/mono \
76+
/usr/local/julia* \
77+
/usr/local/lib/android \
78+
/usr/local/lib/node_modules \
79+
/usr/local/share/chromium \
80+
/usr/local/share/powershell \
81+
/usr/share/dotnet \
82+
/usr/share/swift
83+
84+
- uses: actions/checkout@v4
85+
86+
- uses: docker/setup-buildx-action@v3
87+
88+
- uses: docker/login-action@v3
89+
with:
90+
username: ${{ secrets.DOCKER_USER }}
91+
password: ${{ secrets.DOCKER_PASS }}
92+
93+
- name: Build and push ${{ matrix.target }}
94+
uses: docker/build-push-action@v6
95+
with:
96+
context: .
97+
file: Dockerfile.final
98+
target: ${{ matrix.target }}
99+
push: true
100+
tags: docker.io/rubylang/all-ruby:${{ matrix.tag }}
101+
102+
build-latest:
103+
needs: build-merge
104+
runs-on: ubuntu-latest
57105
steps:
58106
- name: Remove unnecessary files to release disk space
59107
run: |
@@ -82,7 +130,7 @@ jobs:
82130
username: ${{ secrets.DOCKER_USER }}
83131
password: ${{ secrets.DOCKER_PASS }}
84132

85-
- name: Build and push final image
133+
- name: Build and push latest image
86134
uses: docker/build-push-action@v6
87135
with:
88136
context: .

Dockerfile.final

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@ ARG mirror=http://deb.debian.org/debian
55
ARG system_ruby=ruby2.7
66

77
# =============================================================================
8-
# Aggregator: Combine all build outputs and deduplicate with rdfind
8+
# Merge: ruby-0.x-2.0 through ruby-3.1
99
# =============================================================================
10-
FROM ${os}:${version}${variant} AS aggregator
11-
ENV DEBIAN_FRONTEND=noninteractive
12-
13-
RUN apt-get update && apt-get install -y rdfind && rm -rf /var/lib/apt/lists/*
10+
FROM ${os}:${version}${variant} AS ruby-0.x-3.1
1411

1512
COPY --from=docker.io/rubylang/all-ruby:ruby-0.x-2.0 /build-all-ruby/ /build-all-ruby/
1613
COPY --from=docker.io/rubylang/all-ruby:ruby-1.2-1.8.7 /build-all-ruby/ /build-all-ruby/
@@ -24,15 +21,50 @@ COPY --from=docker.io/rubylang/all-ruby:ruby-2.6 /build-all-ruby/ /build-all-rub
2421
COPY --from=docker.io/rubylang/all-ruby:ruby-2.7 /build-all-ruby/ /build-all-ruby/
2522
COPY --from=docker.io/rubylang/all-ruby:ruby-3.0 /build-all-ruby/ /build-all-ruby/
2623
COPY --from=docker.io/rubylang/all-ruby:ruby-3.1 /build-all-ruby/ /build-all-ruby/
24+
25+
COPY --from=docker.io/rubylang/all-ruby:ruby-0.x-2.0 /all-ruby/ /all-ruby/
26+
COPY --from=docker.io/rubylang/all-ruby:ruby-1.2-1.8.7 /all-ruby/bin/ /all-ruby/bin/
27+
COPY --from=docker.io/rubylang/all-ruby:ruby-1.9 /all-ruby/bin/ /all-ruby/bin/
28+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.1 /all-ruby/bin/ /all-ruby/bin/
29+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.2 /all-ruby/bin/ /all-ruby/bin/
30+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.3 /all-ruby/bin/ /all-ruby/bin/
31+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.4 /all-ruby/bin/ /all-ruby/bin/
32+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.5 /all-ruby/bin/ /all-ruby/bin/
33+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.6 /all-ruby/bin/ /all-ruby/bin/
34+
COPY --from=docker.io/rubylang/all-ruby:ruby-2.7 /all-ruby/bin/ /all-ruby/bin/
35+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.0 /all-ruby/bin/ /all-ruby/bin/
36+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.1 /all-ruby/bin/ /all-ruby/bin/
37+
38+
# =============================================================================
39+
# Merge: ruby-3.2 through ruby-3.5-4.0
40+
# =============================================================================
41+
FROM ${os}:${version}${variant} AS ruby-3.2-4.0
42+
2743
COPY --from=docker.io/rubylang/all-ruby:ruby-3.2 /build-all-ruby/ /build-all-ruby/
2844
COPY --from=docker.io/rubylang/all-ruby:ruby-3.3 /build-all-ruby/ /build-all-ruby/
2945
COPY --from=docker.io/rubylang/all-ruby:ruby-3.4 /build-all-ruby/ /build-all-ruby/
3046
COPY --from=docker.io/rubylang/all-ruby:ruby-3.5-4.0 /build-all-ruby/ /build-all-ruby/
3147

48+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.2 /all-ruby/bin/ /all-ruby/bin/
49+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.3 /all-ruby/bin/ /all-ruby/bin/
50+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.4 /all-ruby/bin/ /all-ruby/bin/
51+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.5-4.0 /all-ruby/bin/ /all-ruby/bin/
52+
53+
# =============================================================================
54+
# Dedup: Combine merged images and deduplicate with rdfind
55+
# =============================================================================
56+
FROM ${os}:${version}${variant} AS dedup
57+
ENV DEBIAN_FRONTEND=noninteractive
58+
59+
RUN apt-get update && apt-get install -y rdfind && rm -rf /var/lib/apt/lists/*
60+
61+
COPY --from=docker.io/rubylang/all-ruby:ruby-0.x-3.1 /build-all-ruby/ /build-all-ruby/
62+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.2-4.0 /build-all-ruby/ /build-all-ruby/
63+
3264
RUN rdfind -makehardlinks true -makeresultsfile false /build-all-ruby
3365

3466
# =============================================================================
35-
# Final: Runtime image
67+
# Runtime image
3668
# =============================================================================
3769
FROM ${os}:${version}${variant}
3870
ENV DEBIAN_FRONTEND=noninteractive
@@ -66,23 +98,9 @@ RUN dpkg --add-architecture i386 \
6698
${system_ruby} \
6799
&& rm -rf /var/lib/apt/lists/*
68100

69-
COPY --from=aggregator /build-all-ruby/ /build-all-ruby/
70-
COPY --from=docker.io/rubylang/all-ruby:ruby-0.x-2.0 /all-ruby/ /all-ruby/
71-
COPY --from=docker.io/rubylang/all-ruby:ruby-1.2-1.8.7 /all-ruby/bin/ /all-ruby/bin/
72-
COPY --from=docker.io/rubylang/all-ruby:ruby-1.9 /all-ruby/bin/ /all-ruby/bin/
73-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.1 /all-ruby/bin/ /all-ruby/bin/
74-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.2 /all-ruby/bin/ /all-ruby/bin/
75-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.3 /all-ruby/bin/ /all-ruby/bin/
76-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.4 /all-ruby/bin/ /all-ruby/bin/
77-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.5 /all-ruby/bin/ /all-ruby/bin/
78-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.6 /all-ruby/bin/ /all-ruby/bin/
79-
COPY --from=docker.io/rubylang/all-ruby:ruby-2.7 /all-ruby/bin/ /all-ruby/bin/
80-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.0 /all-ruby/bin/ /all-ruby/bin/
81-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.1 /all-ruby/bin/ /all-ruby/bin/
82-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.2 /all-ruby/bin/ /all-ruby/bin/
83-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.3 /all-ruby/bin/ /all-ruby/bin/
84-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.4 /all-ruby/bin/ /all-ruby/bin/
85-
COPY --from=docker.io/rubylang/all-ruby:ruby-3.5-4.0 /all-ruby/bin/ /all-ruby/bin/
101+
COPY --from=dedup /build-all-ruby/ /build-all-ruby/
102+
COPY --from=docker.io/rubylang/all-ruby:ruby-0.x-3.1 /all-ruby/ /all-ruby/
103+
COPY --from=docker.io/rubylang/all-ruby:ruby-3.2-4.0 /all-ruby/bin/ /all-ruby/bin/
86104

87105
COPY lib/* /all-ruby/lib/
88106
COPY all-ruby /all-ruby/

0 commit comments

Comments
 (0)