Skip to content

ci: build linux binaries in Docker #719

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 41 additions & 51 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,17 @@ jobs:
if: ${{ !contains(github.event.head_commit.message, '[skip build]') }}
runs-on: ${{ matrix.os }}
# prettier-ignore
name: ${{ matrix.os }}-${{ matrix.node_arch }}-${{ matrix.dockerfile }}-${{ matrix.distro }}-${{ matrix.base_image }}
name: ${{ matrix.os }}-${{ matrix.node_arch }}-${{ matrix.distro }}-${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-20.04
- ubuntu-24.04
- windows-2019
node_arch:
- x64
cpp_arch:
- x64
dockerfile:
- ""
distro:
- ""
native:
Expand All @@ -49,27 +47,36 @@ jobs:
cpp_arch: amd64_arm64
native: true

# Musl Alpine
# Ubuntu x64
- os: ubuntu-24.04
dockerfile: docker/alpine.dockerfile
distro: ubuntu
platform: linux/amd64
node_arch: x64
cpp_arch: x64
native: false

# Debian Arm
- os: ubuntu-24.04
# Ubuntu Arm
- os: ubuntu-24.04-arm
distro: ubuntu
platform: linux/arm64
node_arch: arm64
cpp_arch: amd64_arm64
distro: none
base_image: aminya/setup-cpp-ubuntu-gcc:20.04-1.3.0
cpp_arch: arm64
native: false

# Musl Alpine Arm
# Musl Alpine
- os: ubuntu-24.04
distro: alpine
platform: linux/amd64
node_arch: x64
cpp_arch: x64
native: false

# Musl Alpine Arm
- os: ubuntu-24.04-arm
distro: alpine
platform: linux/arm64
node_arch: arm64
cpp_arch: amd64_arm64
distro: none
base_image: aminya/setup-cpp-alpine-gcc:3.21-1.4.0-arm64
cpp_arch: arm64
native: false

env:
Expand Down Expand Up @@ -154,47 +161,27 @@ jobs:
node-version: 20
architecture: ${{ env.setup_node_arch }}

- name: Prebuild Docker
if: ${{ matrix.dockerfile }}
- name: Build Docker
if: ${{ matrix.distro }}
id: build_base
uses: docker/build-push-action@v6
with:
context: .
file: ./docker/${{ matrix.distro }}.dockerfile
push: false
load: true
provenance: false
platforms: ${{ matrix.platform }}
tags: zeromq:${{ matrix.distro }}-${{ matrix.node_arch }}

- name: Copy Build
if: ${{ matrix.distro }}
run: |
docker build -t zeromq -f ${{ matrix.dockerfile }} .
docker create --name zeromq-temp zeromq
docker create --name zeromq-temp zeromq:${{ matrix.distro }}-${{ matrix.node_arch }}
mkdir -p ./build
docker cp zeromq-temp:/app/build ./
docker rm -f zeromq-temp

- name: Read Installer Script
if: ${{ matrix.distro }}
id: read-installer-script
run: |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "install_deps<<$EOF" >> $GITHUB_OUTPUT
cat ./script/install-deps.sh >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT

- name: Build Linux Arm64
if: ${{ matrix.distro }}
uses: uraimo/[email protected]
with:
arch: aarch64
distro: ${{ matrix.distro }}
base_image: ${{ matrix.base_image }}
githubToken: ${{ github.token }}
setup: |
mkdir -p "${PWD}/build"
dockerRunArgs: |
--volume "${PWD}/build:/build"
shell: /bin/bash
env: |
VCPKG_FORCE_SYSTEM_BINARIES: 1
install: |
${{ steps.read-installer-script.outputs.install_deps }}

run: |
(test -f $HOME/.cpprc && . $HOME/.cpprc || true) && \
pnpm install && \
pnpm run build

- name: Upload build
uses: actions/upload-artifact@v4
with:
Expand Down Expand Up @@ -283,6 +270,9 @@ jobs:
matrix:
os:
- ubuntu-24.04
- ubuntu-22.04
- ubuntu-22.04-arm
- ubuntu-24.04-arm
- windows-2022
- macos-13
node-version:
Expand Down
19 changes: 9 additions & 10 deletions docker/alpine.dockerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
FROM aminya/setup-cpp-alpine-gcc:3.21-1.4.0-amd64 AS builder
FROM aminya/setup-cpp-alpine-gcc:3.21 AS base
# system dependencies
RUN apk add --no-cache \
automake \
autoconf \
libtool

FROM base AS builder
WORKDIR /app
COPY ./ ./
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
RUN \
# system dependencies
apk add --no-cache \
automake \
autoconf \
libtool && \
# build
npm i -g pnpm && \
# build
RUN npm i -g pnpm && \
pnpm install && \
pnpm run build

Expand Down
37 changes: 0 additions & 37 deletions docker/debian.dockerfile

This file was deleted.

30 changes: 30 additions & 0 deletions docker/ubuntu.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
FROM aminya/setup-cpp-ubuntu-gcc:20.04 AS base

# system dependencies
RUN apt-get update -q -y \
&& apt-get install --no-install-recommends -y \
automake \
autoconf \
libtool && \
apt-get clean autoclean && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /tmp/*

FROM base AS builder
WORKDIR /app
COPY ./ ./

# build
RUN npm i -g pnpm && \
pnpm install && \
pnpm run build

FROM node:22-bookworm
WORKDIR /app

COPY ./ ./
COPY --from=builder /app/build ./build
COPY --from=builder /app/node_modules ./node_modules


Loading