Skip to content

Commit 7f76269

Browse files
authored
Merge pull request #719 from zeromq/linux-arm
ci: build linux binaries in Docker
2 parents 18828f8 + b3a7090 commit 7f76269

File tree

4 files changed

+80
-98
lines changed

4 files changed

+80
-98
lines changed

.github/workflows/CI.yml

Lines changed: 41 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,17 @@ jobs:
1010
if: ${{ !contains(github.event.head_commit.message, '[skip build]') }}
1111
runs-on: ${{ matrix.os }}
1212
# prettier-ignore
13-
name: ${{ matrix.os }}-${{ matrix.node_arch }}-${{ matrix.dockerfile }}-${{ matrix.distro }}-${{ matrix.base_image }}
13+
name: ${{ matrix.os }}-${{ matrix.node_arch }}-${{ matrix.distro }}-${{ matrix.platform }}
1414
strategy:
1515
fail-fast: false
1616
matrix:
1717
os:
18-
- ubuntu-20.04
18+
- ubuntu-24.04
1919
- windows-2019
2020
node_arch:
2121
- x64
2222
cpp_arch:
2323
- x64
24-
dockerfile:
25-
- ""
2624
distro:
2725
- ""
2826
native:
@@ -49,27 +47,36 @@ jobs:
4947
cpp_arch: amd64_arm64
5048
native: true
5149

52-
# Musl Alpine
50+
# Ubuntu x64
5351
- os: ubuntu-24.04
54-
dockerfile: docker/alpine.dockerfile
52+
distro: ubuntu
53+
platform: linux/amd64
5554
node_arch: x64
5655
cpp_arch: x64
5756
native: false
5857

59-
# Debian Arm
60-
- os: ubuntu-24.04
58+
# Ubuntu Arm
59+
- os: ubuntu-24.04-arm
60+
distro: ubuntu
61+
platform: linux/arm64
6162
node_arch: arm64
62-
cpp_arch: amd64_arm64
63-
distro: none
64-
base_image: aminya/setup-cpp-ubuntu-gcc:20.04-1.3.0
63+
cpp_arch: arm64
6564
native: false
6665

67-
# Musl Alpine Arm
66+
# Musl Alpine
6867
- os: ubuntu-24.04
68+
distro: alpine
69+
platform: linux/amd64
70+
node_arch: x64
71+
cpp_arch: x64
72+
native: false
73+
74+
# Musl Alpine Arm
75+
- os: ubuntu-24.04-arm
76+
distro: alpine
77+
platform: linux/arm64
6978
node_arch: arm64
70-
cpp_arch: amd64_arm64
71-
distro: none
72-
base_image: aminya/setup-cpp-alpine-gcc:3.21-1.4.0-arm64
79+
cpp_arch: arm64
7380
native: false
7481

7582
env:
@@ -154,47 +161,27 @@ jobs:
154161
node-version: 20
155162
architecture: ${{ env.setup_node_arch }}
156163

157-
- name: Prebuild Docker
158-
if: ${{ matrix.dockerfile }}
164+
- name: Build Docker
165+
if: ${{ matrix.distro }}
166+
id: build_base
167+
uses: docker/build-push-action@v6
168+
with:
169+
context: .
170+
file: ./docker/${{ matrix.distro }}.dockerfile
171+
push: false
172+
load: true
173+
provenance: false
174+
platforms: ${{ matrix.platform }}
175+
tags: zeromq:${{ matrix.distro }}-${{ matrix.node_arch }}
176+
177+
- name: Copy Build
178+
if: ${{ matrix.distro }}
159179
run: |
160-
docker build -t zeromq -f ${{ matrix.dockerfile }} .
161-
docker create --name zeromq-temp zeromq
180+
docker create --name zeromq-temp zeromq:${{ matrix.distro }}-${{ matrix.node_arch }}
162181
mkdir -p ./build
163182
docker cp zeromq-temp:/app/build ./
164183
docker rm -f zeromq-temp
165184
166-
- name: Read Installer Script
167-
if: ${{ matrix.distro }}
168-
id: read-installer-script
169-
run: |
170-
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
171-
echo "install_deps<<$EOF" >> $GITHUB_OUTPUT
172-
cat ./script/install-deps.sh >> $GITHUB_OUTPUT
173-
echo "$EOF" >> $GITHUB_OUTPUT
174-
175-
- name: Build Linux Arm64
176-
if: ${{ matrix.distro }}
177-
uses: uraimo/[email protected]
178-
with:
179-
arch: aarch64
180-
distro: ${{ matrix.distro }}
181-
base_image: ${{ matrix.base_image }}
182-
githubToken: ${{ github.token }}
183-
setup: |
184-
mkdir -p "${PWD}/build"
185-
dockerRunArgs: |
186-
--volume "${PWD}/build:/build"
187-
shell: /bin/bash
188-
env: |
189-
VCPKG_FORCE_SYSTEM_BINARIES: 1
190-
install: |
191-
${{ steps.read-installer-script.outputs.install_deps }}
192-
193-
run: |
194-
(test -f $HOME/.cpprc && . $HOME/.cpprc || true) && \
195-
pnpm install && \
196-
pnpm run build
197-
198185
- name: Upload build
199186
uses: actions/upload-artifact@v4
200187
with:
@@ -283,6 +270,9 @@ jobs:
283270
matrix:
284271
os:
285272
- ubuntu-24.04
273+
- ubuntu-22.04
274+
- ubuntu-22.04-arm
275+
- ubuntu-24.04-arm
286276
- windows-2022
287277
- macos-13
288278
node-version:

docker/alpine.dockerfile

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
FROM aminya/setup-cpp-alpine-gcc:3.21-1.4.0-amd64 AS builder
1+
FROM aminya/setup-cpp-alpine-gcc:3.21 AS base
2+
# system dependencies
3+
RUN apk add --no-cache \
4+
automake \
5+
autoconf \
6+
libtool
27

8+
FROM base AS builder
39
WORKDIR /app
410
COPY ./ ./
5-
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
6-
RUN \
7-
# system dependencies
8-
apk add --no-cache \
9-
automake \
10-
autoconf \
11-
libtool && \
12-
# build
13-
npm i -g pnpm && \
11+
# build
12+
RUN npm i -g pnpm && \
1413
pnpm install && \
1514
pnpm run build
1615

docker/debian.dockerfile

Lines changed: 0 additions & 37 deletions
This file was deleted.

docker/ubuntu.dockerfile

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM aminya/setup-cpp-ubuntu-gcc:20.04 AS base
2+
3+
# system dependencies
4+
RUN apt-get update -q -y \
5+
&& apt-get install --no-install-recommends -y \
6+
automake \
7+
autoconf \
8+
libtool && \
9+
apt-get clean autoclean && \
10+
apt-get autoremove -y && \
11+
rm -rf /var/lib/apt/lists/* && \
12+
rm -rf /tmp/*
13+
14+
FROM base AS builder
15+
WORKDIR /app
16+
COPY ./ ./
17+
18+
# build
19+
RUN npm i -g pnpm && \
20+
pnpm install && \
21+
pnpm run build
22+
23+
FROM node:22-bookworm
24+
WORKDIR /app
25+
26+
COPY ./ ./
27+
COPY --from=builder /app/build ./build
28+
COPY --from=builder /app/node_modules ./node_modules
29+
30+

0 commit comments

Comments
 (0)