Skip to content

Commit e11a910

Browse files
authored
OPSEXP-2692 Build arm64 deb packages (#92)
1 parent f2ff96e commit e11a910

11 files changed

+119
-75
lines changed

.github/workflows/build.yml

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
echo "matrix_test=$(jq -c 'del(.include[] | select(.target_arch == "aarch64"))' < rpms/config.json)" >> $GITHUB_OUTPUT
2828
2929
build_rpms:
30-
name: Build on ${{ matrix.base_image }} for ${{ matrix.target_arch }}
30+
name: Build ${{ matrix.base_image }} ${{ matrix.target_arch }}
3131
runs-on: ubuntu-latest
3232
needs:
3333
- configure
@@ -65,7 +65,7 @@ jobs:
6565
path: RPMS/${{ matrix.target_arch }}/*.rpm
6666

6767
test_rpms:
68-
name: Test on ${{ matrix.base_image }} for ${{ matrix.target_arch }}
68+
name: Test ${{ matrix.base_image }} ${{ matrix.target_arch }}
6969
runs-on: ubuntu-latest
7070
needs:
7171
- configure
@@ -101,7 +101,7 @@ jobs:
101101
run: docker run --name buildtest testenv ${{ steps.variables.outputs.imagemagick_version }} ${{ matrix.target_arch }}
102102

103103
deploy_rpms:
104-
name: Deploy ${{ matrix.base_image }} for ${{ matrix.target_arch }}
104+
name: Deploy ${{ matrix.base_image }} ${{ matrix.target_arch }}
105105
runs-on: ubuntu-latest
106106
needs:
107107
- configure
@@ -147,9 +147,9 @@ jobs:
147147
maven-username: ${{ secrets.NEXUS_USERNAME }}
148148
maven-password: ${{ secrets.NEXUS_PASSWORD }}
149149

150-
build_ubuntu:
151-
name: Build on ubuntu:${{ matrix.image_tag }} for x86_64
152-
runs-on: ubuntu-latest
150+
build_deb:
151+
name: Build ${{ matrix.base_image }} ${{ matrix.target_arch }}
152+
runs-on: ${{ matrix.target_arch == 'aarch64' && 'ubuntu-latest-arm64' || 'ubuntu-latest' }}
153153
needs:
154154
- configure
155155
strategy:
@@ -166,35 +166,43 @@ jobs:
166166
echo "imagemagick_version=$(cat ./imagemagick-version)" >> $GITHUB_OUTPUT
167167
echo "imagemagick_release=$(cat ./release-version)" >> $GITHUB_OUTPUT
168168
169+
- name: Setup Docker Engine
170+
if: matrix.target_arch == 'aarch64'
171+
uses: Alfresco/alfresco-build-tools/.github/actions/setup-docker@9558268b491821a4cfce1f11d4c8f6e56adc8496 # v5.30.0
172+
169173
- name: Prepare image
170-
run: docker build . -t buildenv --build-arg IMAGE_TAG=${{ matrix.image_tag }}
174+
run: docker build . -t buildenv --build-arg BASE_IMAGE=${{ matrix.base_image }}
171175
working-directory: debs
172176

173177
- name: Build and Install
174-
run: docker run --name build buildenv ${{ steps.variables.outputs.imagemagick_version }}
178+
run: docker run --name build buildenv ${{ steps.variables.outputs.imagemagick_version }} ${{ matrix.target_arch }}
175179

176180
- name: Retrieve built packages
177181
env:
178182
IMAGEMAGICK_VERSION: ${{ steps.variables.outputs.imagemagick_version }}
183+
PKG_ARCH: ${{ matrix.target_arch == 'aarch64' && 'arm64' || 'amd64' }}
179184
run: |
180-
docker cp build:/build/imagemagick-alfresco_${IMAGEMAGICK_VERSION}_amd64.deb .
181-
docker cp build:/build/imagemagick-alfresco-dev_${IMAGEMAGICK_VERSION}_amd64.deb .
185+
docker cp build:/build/imagemagick-alfresco_${IMAGEMAGICK_VERSION}_${PKG_ARCH}.deb .
186+
docker cp build:/build/imagemagick-alfresco-dev_${IMAGEMAGICK_VERSION}_${PKG_ARCH}.deb .
182187
183188
- uses: actions/upload-artifact@v4
184189
with:
185-
name: ubuntu${{ matrix.image_tag }}-deb
190+
name: ${{ matrix.nexus_classifier }}-deb
186191
path: "*.deb"
187192

188-
test_ubuntu:
189-
name: Test on ubuntu:${{ matrix.image_tag }} for x86_64
190-
runs-on: ubuntu-latest
193+
test_deb:
194+
name: Test ${{ matrix.base_image }} ${{ matrix.target_arch }}
195+
runs-on: ${{ matrix.target_arch == 'aarch64' && 'ubuntu-latest-arm64' || 'ubuntu-latest' }}
191196
needs:
192197
- configure
193-
- build_ubuntu
198+
- build_deb
194199
strategy:
195200
matrix: ${{ fromJson(needs.configure.outputs.matrix_debs) }}
196201
fail-fast: false
197202

203+
env:
204+
PKG_ARCH: ${{ matrix.target_arch == 'aarch64' && 'arm64' || 'amd64' }}
205+
198206
steps:
199207
- name: Checkout
200208
uses: actions/checkout@v4
@@ -205,34 +213,41 @@ jobs:
205213
echo "imagemagick_version=$(cat ./imagemagick-version)" >> $GITHUB_OUTPUT
206214
echo "imagemagick_release=$(cat ./release-version)" >> $GITHUB_OUTPUT
207215
216+
- name: Setup Docker Engine
217+
if: matrix.target_arch == 'aarch64'
218+
uses: Alfresco/alfresco-build-tools/.github/actions/setup-docker@9558268b491821a4cfce1f11d4c8f6e56adc8496 # v5.30.0
219+
208220
- name: Download DEBs
209221
uses: actions/download-artifact@v4
210222
with:
211-
name: ubuntu${{ matrix.image_tag }}-deb
223+
name: ${{ matrix.nexus_classifier }}-deb
212224
path: debs/tests/
213225

214226
- name: List Debs
215227
run: ls -R debs/tests/*.deb
216228

217229
- name: Prepare test image
218-
run: docker build . -t testenv --build-arg IMAGE_TAG=${{ matrix.image_tag }}
230+
run: docker build . -t testenv --build-arg BASE_IMAGE=${{ matrix.base_image }}
219231
working-directory: debs/tests/
220232

221233
- name: Install & Test Packages
222-
run: docker run --name buildtest testenv ${{ steps.variables.outputs.imagemagick_version }}
234+
run: docker run --name buildtest testenv ${{ steps.variables.outputs.imagemagick_version }} ${{ env.PKG_ARCH }}
223235

224-
deploy_ubuntu:
225-
name: Deploy on ubuntu:${{ matrix.image_tag }} for x86_64
236+
deploy_deb:
237+
name: Deploy ${{ matrix.base_image }} ${{ matrix.target_arch }}
226238
runs-on: ubuntu-latest
227239
needs:
228240
- configure
229-
- build_ubuntu
230-
- test_ubuntu
241+
- build_deb
242+
- test_deb
231243
strategy:
232244
matrix: ${{ fromJson(needs.configure.outputs.matrix_debs) }}
233245
fail-fast: false
234246
max-parallel: 1
235247

248+
env:
249+
PKG_ARCH: ${{ matrix.target_arch == 'aarch64' && 'arm64' || 'amd64' }}
250+
236251
steps:
237252
- name: Checkout
238253
uses: actions/checkout@v4
@@ -246,7 +261,7 @@ jobs:
246261
- name: Download DEBs
247262
uses: actions/download-artifact@v4
248263
with:
249-
name: ubuntu${{ matrix.image_tag }}-deb
264+
name: ${{ matrix.nexus_classifier }}-deb
250265

251266
- name: List Debs
252267
run: ls -R *.deb
@@ -260,10 +275,10 @@ jobs:
260275
repository-url: https://nexus.alfresco.com/nexus/content/repositories/thirdparty/
261276
version: ${{ steps.variables.outputs.imagemagick_version }}-ci-${{ steps.variables.outputs.imagemagick_release }}
262277
generate-pom: false
263-
file: imagemagick-alfresco_${{ steps.variables.outputs.imagemagick_version }}_amd64.deb
264-
classifier: ubuntu-${{ matrix.image_tag }}
265-
files: imagemagick-alfresco-dev_${{ steps.variables.outputs.imagemagick_version }}_amd64.deb
266-
classifiers: ubuntu-${{ matrix.image_tag }}-dev
278+
file: imagemagick-alfresco_${{ steps.variables.outputs.imagemagick_version }}_${{ env.PKG_ARCH }}.deb
279+
classifier: ${{ matrix.nexus_classifier }}
280+
files: imagemagick-alfresco-dev_${{ steps.variables.outputs.imagemagick_version }}_${{ env.PKG_ARCH }}.deb
281+
classifiers: ${{ matrix.nexus_classifier }}-dev
267282
types: deb
268283
maven-username: ${{ secrets.NEXUS_USERNAME }}
269284
maven-password: ${{ secrets.NEXUS_PASSWORD }}

debs/Dockerfile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
ARG IMAGE_TAG
2-
FROM ubuntu:$IMAGE_TAG
1+
ARG BASE_IMAGE
32

4-
ARG IMAGE_TAG
3+
FROM ${BASE_IMAGE}
4+
5+
ARG BASE_IMAGE
6+
ENV BASE_IMAGE=${BASE_IMAGE}
57
ENV DEBIAN_FRONTEND=noninteractive
68
ENV DEBIAN_PRIORITY=critical
79
ENV DEBCONF_NOWARNINGS=yes
8-
ENV IMAGE_TAG=$IMAGE_TAG
910
ENV LOGNAME=root
1011

1112
RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/99yes

debs/config.json

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
11
{
22
"include": [
3-
{
4-
"image_tag": "22.04"
5-
},
6-
{
7-
"image_tag": "20.04"
8-
},
9-
{
10-
"image_tag": "18.04"
11-
}
3+
{
4+
"base_image": "ubuntu:22.04",
5+
"target_arch": "x86_64",
6+
"nexus_classifier": "ub2204-amd64"
7+
},
8+
{
9+
"base_image": "ubuntu:22.04",
10+
"target_arch": "aarch64",
11+
"nexus_classifier": "ub2204-arm64"
12+
},
13+
{
14+
"base_image": "ubuntu:20.04",
15+
"target_arch": "x86_64",
16+
"nexus_classifier": "ub2004-amd64"
17+
},
18+
{
19+
"base_image": "ubuntu:20.04",
20+
"target_arch": "aarch64",
21+
"nexus_classifier": "ub2004-arm64"
22+
},
23+
{
24+
"base_image": "ubuntu:18.04",
25+
"target_arch": "x86_64",
26+
"nexus_classifier": "ub1804-amd64"
27+
},
28+
{
29+
"base_image": "ubuntu:18.04",
30+
"target_arch": "aarch64",
31+
"nexus_classifier": "ub1804-arm64"
32+
}
1233
]
13-
}
34+
}

debs/debian/control

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
Source: imagemagick-alfresco
22
Section: graphics
33
Priority: optional
4-
Maintainer: Saurabh Lohe <saurabh.lohe@globallogic.com>
5-
Build-Depends: autotools-dev, ghostscript, gsfonts, libjbig-dev:amd64,
6-
libsm6:amd64, libfftw3-dev:amd64, liblcms2-dev:amd64, gawk, zlib1g-dev:amd64,
7-
libglib2.0-dev:amd64, libzip-dev:amd64, libfribidi-dev:amd64, mime-support,
8-
libxdmcp-dev:amd64, liblzma-dev:amd64, libjpeg-turbo8:amd64, libpng-dev:amd64,
9-
libsigsegv2:amd64, libfontconfig1-dev:amd64,
10-
libpixman-1-dev:amd64, libxext-dev:amd64,
11-
libxrender-dev:amd64, libthai-dev:amd64, locales, libraqm-dev:amd64,
12-
libbz2-dev:amd64, libdatrie-dev:amd64, libmagic-mgc, libffi-dev:amd64,
13-
libxcb1:amd64, libwebp7:amd64, libxcb1-dev:amd64, libxdmcp6:amd64,
14-
libtiff-dev:amd64, x11proto-dev, uuid-dev:amd64, libglib2.0-0:amd64,
15-
libxext6:amd64, libtiff5:amd64, libmagic1:amd64,
16-
pkg-config, libice6:amd64, libwebp-dev:amd64, libopenjp2-7-dev,
17-
file, libx11-dev:amd64, libgraphite2-dev:amd64, libxau-dev:amd64,
18-
libjbig0:amd64, libcairo2-dev:amd64,
19-
libexpat1-dev:amd64, liblqr-1-0-dev:amd64, libraw-dev:amd64, libbsd0:amd64,
20-
libopenexr-dev, libx11-6:amd64, libpango1.0-dev:amd64, libxau6:amd64
4+
Maintainer: Alfresco Ops Readiness <alfresco-build@hyland.com>
5+
Build-Depends: autotools-dev, ghostscript, gsfonts, libjbig-dev,
6+
libsm6, libfftw3-dev, liblcms2-dev, gawk, zlib1g-dev,
7+
libglib2.0-dev, libzip-dev, libfribidi-dev, mime-support,
8+
libxdmcp-dev, liblzma-dev, libjpeg-turbo8, libpng-dev,
9+
libsigsegv2, libfontconfig1-dev,
10+
libpixman-1-dev, libxext-dev,
11+
libxrender-dev, libthai-dev, locales, libraqm-dev,
12+
libbz2-dev, libdatrie-dev, libmagic-mgc, libffi-dev,
13+
libxcb1, libwebp7, libxcb1-dev, libxdmcp6,
14+
libtiff-dev, x11proto-dev, uuid-dev, libglib2.0-0,
15+
libxext6, libtiff5, libmagic1,
16+
pkg-config, libice6, libwebp-dev, libopenjp2-7-dev,
17+
file, libx11-dev, libgraphite2-dev, libxau-dev,
18+
libjbig0, libcairo2-dev,
19+
libexpat1-dev, liblqr-1-0-dev, libraw-dev, libbsd0,
20+
libopenexr-dev, libx11-6, libpango1.0-dev, libxau6
2121
Standards-Version: 4.4.1
2222
Homepage: https://imagemagick.org
2323

2424
Package: imagemagick-alfresco
25-
Architecture: amd64
25+
Architecture: any
2626
Depends: ${misc:Depends}, ${shlibs:Depends}
2727
Description: ImageMagick 7 for Alfresco Transformation service
2828
This is the vanilla ImageMagick 7 software packaged for automated
@@ -33,4 +33,4 @@ Package: imagemagick-alfresco-dev
3333
Architecture: any
3434
Description: ImageMagick 7 headers files
3535
This is the vanilla ImageMagick 7 software.
36-
All credit goes to ImageMagick Studio LLC, their contributors and community.
36+
All credit goes to ImageMagick Studio LLC, their contributors and community.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
opt/imagemagick-7/include
2-
opt/imagemagick-7/lib/x86_64-linux-gnu/pkgconfig
2+
opt/imagemagick-7/lib/*-linux-gnu/pkgconfig

debs/entrypoint.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
#!/bin/bash
22
set -e -o pipefail -x
33

4-
if [ -z "$IMAGE_TAG" ]; then
5-
echo "IMAGE_TAG env needs to be set"
4+
if [ -z "$BASE_IMAGE" ]; then
5+
echo "BASE_IMAGE env needs to be set"
66
exit 1
77
fi
88

99
if [ -z "$1" ]; then
10-
echo "first argument needs to be set - IMAGEMAGICK_VERSION"
10+
echo "first argument must be provided: IMAGEMAGICK_VERSION"
1111
exit 1
1212
fi
1313

1414
IMAGEMAGICK_VERSION=$1
1515

16-
git clone --depth 1 -b $IMAGEMAGICK_VERSION https://github.com/ImageMagick/ImageMagick.git
16+
git clone --depth 1 -b "$IMAGEMAGICK_VERSION" https://github.com/ImageMagick/ImageMagick.git
1717

1818
mv debian ImageMagick/
1919

2020
cd ImageMagick
2121

22-
AFTER_CHECKOUT_HOOK_SCRIPT="../after-checkout-$IMAGE_TAG-$IMAGEMAGICK_VERSION.sh"
22+
AFTER_CHECKOUT_HOOK_SCRIPT="../after-checkout-${BASE_IMAGE//[:.]/}-$IMAGEMAGICK_VERSION.sh"
2323
if [ -x "$AFTER_CHECKOUT_HOOK_SCRIPT" ]; then
2424
"$AFTER_CHECKOUT_HOOK_SCRIPT"
2525
fi

debs/tests/Dockerfile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
ARG IMAGE_TAG
2-
FROM ubuntu:$IMAGE_TAG
1+
ARG BASE_IMAGE
32

4-
ARG IMAGE_TAG
5-
ENV IMAGE_TAG=$IMAGE_TAG
3+
FROM ${BASE_IMAGE}
4+
5+
ARG BASE_IMAGE
6+
ENV BASE_IMAGE=${BASE_IMAGE}
67

78
RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/99yes
89
RUN apt-get update

debs/tests/entrypoint.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
#!/bin/bash
22
set -e -o pipefail -x
33

4-
if [ -z "$IMAGE_TAG" ]; then
5-
echo "IMAGE_TAG env needs to be set"
4+
if [ -z "$BASE_IMAGE" ]; then
5+
echo "BASE_IMAGE env needs to be set"
66
exit 1
77
fi
88

99
if [ -z "$1" ]; then
10-
echo "first argument needs to be set - IMAGEMAGICK_VERSION"
10+
echo "first argument must be provided: IMAGEMAGICK_VERSION"
11+
exit 1
12+
fi
13+
14+
if [ -z "$2" ]; then
15+
echo "second argument must be provided: PKG_ARCH"
1116
exit 1
1217
fi
1318

1419
IMAGEMAGICK_VERSION=$1
20+
PKG_ARCH=$2
1521

1622
echo "Installing package"
17-
dpkg -i --force-depends imagemagick-alfresco_${IMAGEMAGICK_VERSION}_amd64.deb
23+
dpkg -i --force-depends "imagemagick-alfresco_${IMAGEMAGICK_VERSION}_${PKG_ARCH}.deb"
1824
apt-get -f install
1925

2026
echo "Exporting the path of the package"

release-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8
1+
9

0 commit comments

Comments
 (0)