Skip to content

Commit 71a82ca

Browse files
authored
Merge pull request #5598 from duncdrum/backport-multi-arch-5533
Backport multi arch 5533
2 parents 56551ac + 95c16de commit 71a82ca

File tree

4 files changed

+83
-51
lines changed

4 files changed

+83
-51
lines changed

.github/workflows/ci-deploy.yml

+16-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ jobs:
55
name: Build and Test Images
66
runs-on: ubuntu-latest
77
# NOTE (DP): Publish on develop and master, test on PRs against these
8-
if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master' || github.base_ref == 'develop' || github.base_ref == 'master'
8+
# TODO(DP) Reinstate CRONed release builds to update stock apps regularly
9+
if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/develop-6.x.x' || github.ref == 'refs/heads/master'|| github.base_ref == 'develop' || github.base_ref == 'develop-6.x.x' || github.base_ref == 'master'
910
steps:
1011
- uses: actions/checkout@v4
1112
with:
@@ -15,6 +16,10 @@ jobs:
1516
with:
1617
distribution: liberica
1718
java-version: '8'
19+
- name: Set up QEMU
20+
uses: docker/setup-qemu-action@v3
21+
with:
22+
platforms: linux/amd64,linux/arm64
1823
- name: Make buildkit default
1924
uses: docker/setup-buildx-action@v3
2025
id: buildx
@@ -51,6 +56,14 @@ jobs:
5156
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
5257
run: mvn -q -Ddocker.tag=latest -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD docker:build docker:push
5358
working-directory: ./exist-docker
59+
- name: Publish dev6 images
60+
if: github.ref == 'refs/heads/develop-6.x.x'
61+
env:
62+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
63+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
64+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
65+
run: mvn -q -Ddocker.tag=dev6 -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD docker:build docker:push
66+
working-directory: ./exist-docker
5467
- name: Publish release images
5568
if: github.ref == 'refs/heads/master'
5669
env:
@@ -61,11 +74,11 @@ jobs:
6174
working-directory: ./exist-docker
6275
# NOTE (DP): This is for debugging, publishes an experimental image from inside PRs against develop
6376
# - name: Publish experimental images
64-
# if: github.base_ref == 'develop'
77+
# if: github.base_ref == 'develop-6.x.x'
6578
# env:
6679
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6780
# DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
6881
# DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
69-
# run: mvn -q -Ddocker.tag=experimental -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD docker:build docker:push
82+
# run: mvn -q -Ddocker.tag=experimental6 -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD docker:build docker:push
7083
# working-directory: ./exist-docker
7184

exist-docker/pom.xml

+43-13
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2323
2424
-->
25-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
25+
<project xmlns="http://maven.apache.org/POM/4.0.0"
26+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
27+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
2628
<modelVersion>4.0.0</modelVersion>
2729

2830
<parent>
@@ -42,14 +44,15 @@
4244
<connection>scm:git:https://github.com/exist-db/exist.git</connection>
4345
<developerConnection>scm:git:https://github.com/exist-db/exist.git</developerConnection>
4446
<url>scm:git:https://github.com/exist-db/exist.git</url>
45-
<tag>HEAD</tag>
46-
</scm>
47+
<tag>HEAD</tag>
48+
</scm>
4749

4850
<properties>
4951
<assemble.dir>${project.build.directory}/exist-docker-${project.version}-docker-dir</assemble.dir>
5052
<exist.uber.jar.filename>exist.uber.jar</exist.uber.jar.filename>
5153
<docker.tag>latest</docker.tag>
5254
<docker.debug.tag>debug</docker.debug.tag>
55+
<docker.platforms>linux/amd64, linux/arm64</docker.platforms>
5356
</properties>
5457

5558
<dependencies>
@@ -106,7 +109,9 @@
106109
<configuration>
107110
<failOnWarning>true</failOnWarning>
108111
<ignoredUnusedDeclaredDependencies>
109-
<ignoredUnusedDeclaredDependency>${project.groupId}:exist-distribution:pom:${project.version}</ignoredUnusedDeclaredDependency> <!-- needed at runtime to support lucene query syntax -->
112+
<ignoredUnusedDeclaredDependency>
113+
${project.groupId}:exist-distribution:pom:${project.version}</ignoredUnusedDeclaredDependency> <!--
114+
needed at runtime to support lucene query syntax -->
110115
</ignoredUnusedDeclaredDependencies>
111116
</configuration>
112117
</execution>
@@ -124,7 +129,8 @@
124129
<goal>single</goal>
125130
</goals>
126131
<configuration>
127-
<archiveBaseDirectory>${project.basedir}/../exist-distribution/target/exist-distribution-${project.version}-dir</archiveBaseDirectory>
132+
<archiveBaseDirectory>
133+
${project.basedir}/../exist-distribution/target/exist-distribution-${project.version}-dir</archiveBaseDirectory>
128134
<attach>false</attach>
129135
<descriptors>
130136
<descriptor>src/assembly/dist-assembly-docker.xml</descriptor>
@@ -183,17 +189,28 @@
183189
</filter>
184190
</filters>
185191
<transformers>
186-
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
187-
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
192+
<transformer
193+
implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
194+
<transformer
195+
implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
188196
<addHeader>false</addHeader>
189197
</transformer>
190-
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
198+
<transformer
199+
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
191200
<resource>META-INF/mailcap</resource>
192201
</transformer>
193-
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
202+
<transformer
203+
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
194204
<resource>META-INF/mailcap.default</resource>
195205
</transformer>
196-
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
206+
<transformer
207+
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
208+
<transformer
209+
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
210+
<manifestEntries>
211+
<Multi-Release>true</Multi-Release>
212+
</manifestEntries>
213+
</transformer>
197214
</transformers>
198215
</configuration>
199216
</execution>
@@ -203,14 +220,21 @@
203220
<plugin>
204221
<groupId>io.fabric8</groupId>
205222
<artifactId>docker-maven-plugin</artifactId>
206-
<version>0.40.3</version>
223+
<version>0.45.1</version>
207224
<configuration>
208-
<verbose>true</verbose>
225+
<verbose>true</verbose>
226+
<pushRegistry>registry.hub.docker.com</pushRegistry>
209227
<images>
210228
<image>
211229
<name>existdb/existdb:%v</name>
230+
<registry>registry.hub.docker.com</registry>
212231
<alias>exist</alias>
213232
<build>
233+
<buildx>
234+
<platforms>
235+
<platform>${docker.platforms}</platform>
236+
</platforms>
237+
</buildx>
214238
<tags>
215239
<tag>${docker.tag}</tag>
216240
</tags>
@@ -220,8 +244,14 @@
220244
</image>
221245
<image>
222246
<name>existdb/existdb:%v-DEBUG</name>
247+
<registry>registry.hub.docker.com</registry>
223248
<alias>exist-debug</alias>
224249
<build>
250+
<buildx>
251+
<platforms>
252+
<platform>${docker.platforms}</platform>
253+
</platforms>
254+
</buildx>
225255
<tags>
226256
<tag>${docker.debug.tag}</tag>
227257
</tags>
@@ -251,4 +281,4 @@
251281

252282
</plugins>
253283
</build>
254-
</project>
284+
</project>

exist-docker/src/main/resources-filtered/Dockerfile

+14-26
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,20 @@
2020
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2121
#
2222

23-
# Install latest JRE 8 in Debian Stretch (which is the base of gcr.io/distroless/java:8)
24-
FROM debian:stretch-slim as updated-jre
25-
RUN echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list
26-
RUN echo "deb http://archive.debian.org/debian stretch-backports main" >> /etc/apt/sources.list
27-
RUN apt-get update && apt-get -y dist-upgrade
28-
RUN apt-get install -y openjdk-8-jre-headless
29-
RUN apt-get install -y expat fontconfig # Install tools required by FOP
23+
# Install latest JRE 8 in Debian bookworm (which is the base of gcr.io/distroless/java)
24+
# FROM maven:3-eclipse-temurin-8 as updated-jre
3025

31-
FROM gcr.io/distroless/java:8
26+
# RUN apt-get update && apt-get -y dist-upgrade
27+
# RUN apt install -y wget apt-transport-https gpg
28+
# RUN wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
29+
# RUN echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
30+
# RUN apt-get update && apt-get install -y temurin-8-jre
3231

33-
# Copy over updated JRE from Debian Stretch
34-
COPY --from=updated-jre /etc/java-8-openjdk /etc/java-8-openjdk
35-
COPY --from=updated-jre /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-8-openjdk-amd64
36-
COPY --from=updated-jre /usr/share/gdb/auto-load/usr/lib/jvm/java-8-openjdk-amd64 /usr/share/gdb/auto-load/usr/lib/jvm/java-8-openjdk-amd64
32+
FROM gcr.io/distroless/java-base-debian12
3733

38-
# Copy over dependencies for Apache FOP, missing from GCR's JRE
39-
COPY --from=updated-jre /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/lib/x86_64-linux-gnu/libfreetype.so.6
40-
COPY --from=updated-jre /usr/lib/x86_64-linux-gnu/liblcms2.so.2 /usr/lib/x86_64-linux-gnu/liblcms2.so.2
41-
COPY --from=updated-jre /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng16.so.16
42-
COPY --from=updated-jre /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1
43-
44-
# Copy dependencies for Apache Batik (used by Apache FOP to handle SVG rendering)
45-
COPY --from=updated-jre /etc/fonts /etc/fonts
46-
COPY --from=updated-jre /lib/x86_64-linux-gnu/libexpat.so.1 /lib/x86_64-linux-gnu/libexpat.so.1
47-
COPY --from=updated-jre /usr/share/fontconfig /usr/share/fontconfig
48-
COPY --from=updated-jre /usr/share/fonts/truetype/dejavu /usr/share/fonts/truetype/dejavu
34+
ENV JAVA_HOME=/opt/java/openjdk
35+
COPY --from=eclipse-temurin:8-jre $JAVA_HOME $JAVA_HOME
36+
ENV PATH $JAVA_HOME/bin:$PATH
4937

5038
# Copy eXist-db
5139
COPY LICENSE /exist/LICENSE
@@ -73,10 +61,10 @@ ARG CACHE_MEM
7361
ARG MAX_BROKER
7462
ARG JVM_MAX_RAM_PERCENTAGE
7563

76-
ENV EXIST_HOME "/exist"
64+
ENV EXIST_HOME=/exist
7765
ENV CLASSPATH=/exist/lib/${exist.uber.jar.filename}
7866

79-
ENV JAVA_TOOL_OPTIONS \
67+
ENV JAVA_TOOL_OPTIONS="\
8068
-Dfile.encoding=UTF8 \
8169
-Dsun.jnu.encoding=UTF-8 \
8270
-Djava.awt.headless=true \
@@ -91,7 +79,7 @@ ENV JAVA_TOOL_OPTIONS \
9179
-XX:+UseStringDeduplication \
9280
-XX:+UseContainerSupport \
9381
-XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} \
94-
-XX:+ExitOnOutOfMemoryError
82+
-XX:+ExitOnOutOfMemoryError"
9583

9684
HEALTHCHECK CMD [ "java", \
9785
"org.exist.start.Main", "client", \

exist-docker/src/main/resources-filtered/Dockerfile-DEBUG

+10-9
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2121
#
2222

23-
# Use JDK 8 in Debian Stretch (as our production image gcr.io/distroless/java:8 is based on Debian Stretch with just a JRE)
24-
FROM debian:stretch-slim
25-
RUN echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list
26-
RUN echo "deb http://archive.debian.org/debian stretch-backports main" >> /etc/apt/sources.list
23+
# Use JDK 8 in Debian (as our production image gcr.io/distroless/ is based on Debian with just a JRE)
24+
FROM debian:bookworm-slim as updated-jre
25+
2726
RUN apt-get update && apt-get -y dist-upgrade
28-
RUN apt-get install -y openjdk-8-jdk-headless
29-
RUN apt-get install -y expat fontconfig # Install tools required by FOP
27+
RUN apt install -y wget apt-transport-https gpg
28+
RUN wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
29+
RUN echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
30+
RUN apt-get update && apt-get install -y temurin-8-jdk
3031

3132
# Copy eXist-db
3233
COPY LICENSE /exist/LICENSE
@@ -54,10 +55,10 @@ ARG MAX_BROKER
5455
ARG JVM_MAX_RAM_PERCENTAGE
5556
ARG JVM_JDWP_SUSPEND
5657

57-
ENV EXIST_HOME "/exist"
58+
ENV EXIST_HOME=/exist
5859
ENV CLASSPATH=/exist/lib/${exist.uber.jar.filename}
5960

60-
ENV JAVA_TOOL_OPTIONS \
61+
ENV JAVA_TOOL_OPTIONS="\
6162
-Dfile.encoding=UTF8 \
6263
-Dsun.jnu.encoding=UTF-8 \
6364
-Djava.awt.headless=true \
@@ -73,7 +74,7 @@ ENV JAVA_TOOL_OPTIONS \
7374
-XX:+UseContainerSupport \
7475
-XX:MaxRAMPercentage=${JVM_MAX_RAM_PERCENTAGE:-75.0} \
7576
-XX:+ExitOnOutOfMemoryError \
76-
-agentlib:jdwp=transport=dt_socket,server=y,suspend=${JVM_JDWP_SUSPEND:-n},address=5005
77+
-agentlib:jdwp=transport=dt_socket,server=y,suspend=${JVM_JDWP_SUSPEND:-n},address=5005"
7778

7879
HEALTHCHECK CMD [ "java", \
7980
"org.exist.start.Main", "client", \

0 commit comments

Comments
 (0)