Skip to content

Commit bee9265

Browse files
committed
ci: add dockerfile for building on Alpine Musl
1 parent 2402a5d commit bee9265

File tree

4 files changed

+84
-28
lines changed

4 files changed

+84
-28
lines changed

.dockerignore

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
docker/*.dockerfile
2+
.dockerignore
3+
.git/
4+
build
5+
docs
6+
lib
7+
tmp
8+
**/node_modules
9+
**/yarn.lock
10+
**/yarn-error.log
11+
**/package-lock.json
12+
**/lib/binary/*.node
13+
**/lib/binary/napi-v*/*.node
14+
**/build-tmp-napi-v*
15+
prebuilds
16+
**/test.js
17+
**/.cache/
18+
**/test/typings-compatibility/
19+
script/*.d.ts
20+
script/*.d.*ts
21+
script/*js.map
22+
**/tsconfig.tsbuildinfo
23+
**/tsconfig.*.tsbuildinfo
24+
doc-unminified
25+
**/.DS_Store
26+
**/.idea
27+
staging
28+
!lib/load-addon.js
29+
!lib/load-addon.js.map
30+
31+
**/compile_commands.json
32+
33+
smoke-test-*
34+
*.tgz
35+

.github/workflows/CI.yml

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ jobs:
1919
- x64
2020
cpp_arch:
2121
- x64
22-
docker:
23-
- ""
24-
docker_cmd:
22+
dockerfile:
2523
- ""
2624

2725
include:
@@ -44,12 +42,7 @@ jobs:
4442

4543
# Alpine
4644
- os: ubuntu-22.04
47-
docker: node:18-alpine
48-
docker_cmd:
49-
apk add --no-cache bash build-base curl git g++ make ninja-build
50-
pkgconfig unzip zip python3 tar cmake ninja musl-dev && cp
51-
/usr/lib/ninja-build/bin/ninja /usr/bin/ninja && npm i -g pnpm &&
52-
pnpm install && pnpm run build
45+
dockerfile: docker/alpine.dockerfile
5346
node_arch: x64
5447
cpp_arch: x64
5548

@@ -82,7 +75,7 @@ jobs:
8275
shell: bash
8376

8477
- name: Setup Cpp
85-
if: ${{ !matrix.docker }}
78+
if: ${{ !matrix.dockerfile }}
8679
uses: aminya/setup-cpp@v1
8780
with:
8881
vcvarsall: ${{ contains(matrix.os, 'windows') }}
@@ -98,34 +91,34 @@ jobs:
9891
brew install gnutls autoconf automake libtool
9992
10093
- uses: pnpm/action-setup@v4
101-
if: ${{ !matrix.docker }}
94+
if: ${{ !matrix.dockerfile }}
10295
with:
10396
version: 9
10497

10598
- name: Install Node 20
106-
if: ${{ !matrix.docker }}
99+
if: ${{ !matrix.dockerfile }}
107100
uses: actions/setup-node@v4
108101
with:
109102
node-version: 20
110103
architecture: ${{ env.setup_node_arch }}
111104

112105
- name: Install and Build Native
113-
if: ${{ !matrix.docker }}
106+
if: ${{ !matrix.dockerfile }}
114107
run: pnpm install
115108

116109
- name: Build JavaScript
117-
if: ${{ !matrix.docker }}
110+
if: ${{ !matrix.dockerfile }}
118111
run: pnpm run build.js
119112

120113
- name: Install Node 10
121-
if: ${{ !matrix.docker && matrix.os != 'macos-14' }}
114+
if: ${{ !matrix.dockerfile && matrix.os != 'macos-14' }}
122115
uses: actions/setup-node@v4
123116
with:
124117
node-version: 10
125118
architecture: ${{ env.setup_node_arch }}
126119

127120
- name: Build Native
128-
if: ${{ !matrix.docker && matrix.node_arch != 'ia32' }}
121+
if: ${{ !matrix.dockerfile && matrix.node_arch != 'ia32' }}
129122
run: npm run build.native
130123

131124
- name: Build Native Windows 32
@@ -135,19 +128,19 @@ jobs:
135128
windows-x86
136129

137130
- name: Use Node 20
138-
if: ${{ !matrix.docker }}
131+
if: ${{ !matrix.dockerfile }}
139132
uses: actions/setup-node@v4
140133
with:
141134
node-version: 20
142135
architecture: ${{ env.setup_node_arch }}
143136

144137
- name: Prebuild Docker
145-
if: ${{ matrix.docker }}
138+
if: ${{ matrix.dockerfile }}
146139
run: |
147-
docker login -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} ghcr.io
148-
docker pull ${{ matrix.docker }}
149-
docker tag ${{ matrix.docker }} builder
150-
docker run --volume ${{ github.workspace }}:/app --workdir /app --privileged builder sh -c "${{ matrix.docker_cmd }}"
140+
docker build -t zeromq -f ${{ matrix.dockerfile }} .
141+
docker create --name zeromq-temp zeromq
142+
docker cp zeromq-temp:/app/build ./build
143+
docker rm -f zeromq-temp
151144
152145
- name: Upload build
153146
uses: actions/upload-artifact@v4
@@ -157,11 +150,11 @@ jobs:
157150
overwrite: true
158151

159152
- name: Lint
160-
if: "${{ contains(matrix.os, 'ubuntu') && !matrix.docker }}"
153+
if: "${{ contains(matrix.os, 'ubuntu') && !matrix.dockerfile }}"
161154
run: pnpm run lint-test
162155

163156
- name: Test
164-
if: ${{ !matrix.docker }}
157+
if: ${{ !matrix.dockerfile }}
165158
uses: nick-fields/retry@v3
166159
with:
167160
timeout_minutes: 5
@@ -175,7 +168,7 @@ jobs:
175168
shell: bash
176169

177170
- name: Test Compatibility
178-
if: ${{ !matrix.docker }}
171+
if: ${{ !matrix.dockerfile }}
179172
uses: nick-fields/retry@v3
180173
with:
181174
timeout_minutes: 5
@@ -189,7 +182,7 @@ jobs:
189182
shell: bash
190183

191184
- name: Test Electron Windows/MacOS
192-
if: "${{ !matrix.docker }}"
185+
if: "${{ !matrix.dockerfile }}"
193186
uses: nick-fields/retry@v3
194187
with:
195188
timeout_minutes: 5
@@ -199,7 +192,7 @@ jobs:
199192
continue-on-error: true
200193

201194
- name: Test Electron Linux
202-
if: "${{ contains(matrix.os, 'ubuntu') && !matrix.docker }}"
195+
if: "${{ contains(matrix.os, 'ubuntu') && !matrix.dockerfile }}"
203196
uses: nick-fields/retry@v3
204197
with:
205198
timeout_minutes: 5

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ zmq_curve="true"
125125
zmq_sodium="true"
126126
```
127127

128-
Building libsodium requires running `brew install autoconf automake libtool`
128+
Building libsodium requires these dependencies on Linux/MacOS: `autoconf automake libtool`, which can be installed via `apt-get` or `brew`, etc.
129129

130130
#### Draft support
131131

docker/alpine.dockerfile

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FROM node:18-alpine
2+
3+
WORKDIR /app
4+
COPY ./ ./
5+
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
6+
RUN apk add --no-cache \
7+
bash \
8+
build-base \
9+
curl \
10+
git \
11+
g++ \
12+
make \
13+
ninja-build \
14+
pkgconfig \
15+
unzip \
16+
zip \
17+
python3 \
18+
tar \
19+
cmake \
20+
ninja \
21+
musl-dev \
22+
automake \
23+
autoconf \
24+
libtool && \
25+
cp /usr/lib/ninja-build/bin/ninja /usr/bin/ninja && \
26+
npm i -g pnpm && \
27+
pnpm install && \
28+
pnpm run build

0 commit comments

Comments
 (0)