ci: add support for arm64 Linux #527
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- master | |
jobs: | |
Build: | |
if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }} | |
runs-on: ${{ matrix.os }} | |
# prettier-ignore | |
name: ${{ matrix.os }}-${{ matrix.node_arch }}-${{ matrix.dockerfile }}-${{ matrix.distro }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-20.04 | |
- windows-2019 | |
node_arch: | |
- x64 | |
cpp_arch: | |
- x64 | |
dockerfile: | |
- "" | |
distro: | |
- "" | |
native: | |
- true | |
include: | |
- os: windows-2019 | |
node_arch: ia32 | |
cpp_arch: amd64_x86 | |
native: true | |
# - os: windows-2022 | |
# node_arch: x64 | |
# arch: arm64 | |
# cpp_arch: amd64_arm64 | |
- os: macos-13 | |
node_arch: x64 | |
cpp_arch: x64 | |
native: true | |
- os: macos-14 | |
node_arch: arm64 | |
cpp_arch: amd64_arm64 | |
native: true | |
# Musl Alpine | |
- os: ubuntu-24.04 | |
dockerfile: docker/alpine.dockerfile | |
node_arch: x64 | |
cpp_arch: x64 | |
native: false | |
# Debian Arm | |
- os: ubuntu-24.04 | |
node_arch: arm64 | |
cpp_arch: amd64_arm64 | |
distro: bullseye | |
native: false | |
# Musl Alpine Arm | |
- os: ubuntu-24.04 | |
node_arch: arm64 | |
cpp_arch: amd64_arm64 | |
distro: alpine_latest | |
native: false | |
env: | |
npm_config_arch: ${{ matrix.node_arch }} | |
npm_config_target_arch: ${{ matrix.node_arch }} | |
setup_node_arch: ${{ matrix.node_arch }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
./node_modules/ | |
~/vcpkg | |
# prettier-ignore | |
key: "cache-OS:${{ matrix.os }}-arch:${{ matrix.node_arch}}-${{hashFiles('./pnpm-lock.yaml', './vcpkg.json', './CMakeLists.txt') }}" | |
restore-keys: | | |
"cache-OS:${{ matrix.os }}-arch:${{ matrix.node_arch }}-" | |
- name: Env map | |
run: | | |
if [ "${{ matrix.node_arch }}" = "ia32" ]; then | |
echo "setup_node_arch=x86" > $GITHUB_ENV | |
fi | |
shell: bash | |
- name: Setup Cpp | |
if: ${{ matrix.native }} | |
uses: aminya/setup-cpp@v1 | |
with: | |
vcvarsall: ${{ contains(matrix.os, 'windows') }} | |
cmake: true | |
ninja: true | |
python: true | |
vcpkg: true | |
architecture: ${{ matrix.cpp_arch }} | |
- name: Install Mac-OS Dependencies | |
if: ${{ contains(matrix.os, 'macos') }} | |
run: | | |
brew install gnutls autoconf automake libtool | |
- uses: pnpm/action-setup@v4 | |
if: ${{ matrix.native }} | |
with: | |
version: 9 | |
- name: Install Node 20 | |
if: ${{ matrix.native }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
architecture: ${{ env.setup_node_arch }} | |
- name: Install and Build Native | |
if: ${{ matrix.native }} | |
run: pnpm install | |
- name: Build JavaScript | |
if: ${{ matrix.native }} | |
run: pnpm run build.js | |
- name: Install Node 10 | |
if: ${{ matrix.native && matrix.os != 'macos-14' }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 10 | |
architecture: ${{ env.setup_node_arch }} | |
- name: Build Native | |
if: ${{ matrix.native && matrix.node_arch != 'ia32' }} | |
run: npm run build.native | |
- name: Build Native Windows 32 | |
if: ${{ matrix.os == 'windows-2019' && matrix.node_arch == 'ia32' }} | |
run: | |
node ./node_modules/@aminya/cmake-ts/build/main.js named-configs | |
windows-x86 | |
- name: Use Node 20 | |
if: ${{ matrix.native }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
architecture: ${{ env.setup_node_arch }} | |
- name: Prebuild Docker | |
if: ${{ matrix.dockerfile }} | |
run: | | |
docker build -t zeromq -f ${{ matrix.dockerfile }} . | |
docker create --name zeromq-temp zeromq | |
mkdir -p ./build | |
docker cp zeromq-temp:/app/build ./ | |
docker rm -f zeromq-temp | |
- name: Build Linux Arm64 | |
if: ${{ matrix.distro }} | |
uses: uraimo/[email protected] | |
with: | |
arch: aarch64 | |
distro: ${{ matrix.distro }} | |
githubToken: ${{ github.token }} | |
setup: | | |
mkdir -p "${PWD}/build" | |
dockerRunArgs: | | |
--volume "${PWD}/build:/build" | |
env: | | |
VCPKG_FORCE_SYSTEM_BINARIES: 1 | |
install: | | |
case "${{ matrix.distro }}" in | |
ubuntu*|jessie|stretch|buster|bullseye) | |
apt-get update -q -y | |
apt-get install --no-install-recommends -y \ | |
bash \ | |
build-essential \ | |
curl \ | |
git \ | |
g++ \ | |
make \ | |
ninja-build \ | |
pkg-config \ | |
unzip \ | |
zip \ | |
python3 \ | |
tar \ | |
cmake \ | |
ninja-build \ | |
automake \ | |
autoconf \ | |
libtool \ | |
nodejs | |
;; | |
fedora*) | |
dnf update -q -y | |
dnf install -y \ | |
bash \ | |
build-essential \ | |
curl \ | |
git \ | |
g++ \ | |
make \ | |
ninja-build \ | |
pkg-config \ | |
unzip \ | |
zip \ | |
python3 \ | |
tar \ | |
cmake \ | |
ninja-build \ | |
automake \ | |
autoconf \ | |
libtool \ | |
nodejs | |
;; | |
alpine*) | |
apk add --no-cache \ | |
bash \ | |
build-base \ | |
curl \ | |
git \ | |
g++ \ | |
make \ | |
ninja-build \ | |
pkgconfig \ | |
unzip \ | |
zip \ | |
python3 \ | |
tar \ | |
cmake \ | |
ninja \ | |
musl-dev \ | |
automake \ | |
autoconf \ | |
libtool \ | |
nodejs && \ | |
cp /usr/lib/ninja-build/bin/ninja /usr/bin/ninja | |
;; | |
esac | |
run: | | |
npm i -g pnpm && \ | |
pnpm install && \ | |
pnpm run build | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./build | |
name: build-${{ strategy.job-index }} | |
overwrite: true | |
- name: Lint | |
if: "${{ contains(matrix.os, 'ubuntu') && matrix.native }}" | |
run: pnpm run lint-test | |
- name: Test | |
if: ${{ matrix.native }} | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 3 | |
shell: bash | |
command: | | |
pnpm run test.unit || (rm -rf ./tmp && mkdir -p ./tmp && exit 1) | |
rm -rf ./tmp && mkdir -p ./tmp | |
- name: Test Electron Windows/MacOS | |
if: "${{ !contains(matrix.os, 'ubuntu') && matrix.native }}" | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 1 | |
command: | | |
pnpm run test.electron.main | |
continue-on-error: true | |
- name: Test Electron Linux | |
if: "${{ contains(matrix.os, 'ubuntu') && matrix.native }}" | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 1 | |
command: | | |
sudo apt-get install xvfb | |
xvfb-run --auto-servernum pnpm run test.electron.main | |
continue-on-error: true | |
Package: | |
runs-on: ubuntu-latest | |
needs: Build | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: build | |
pattern: build-* | |
delete-merged: true | |
- uses: actions/checkout@v4 | |
- name: Place build | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: ./build | |
- name: Install Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: "./.nvmrc" | |
- name: Install Pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9 | |
- name: Pack Zeromq | |
run: | | |
pnpm install | |
pnpm pack | |
- name: Upload Pack | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./*.tgz | |
name: pack | |
overwrite: true | |
SmokeTest: | |
runs-on: ${{ matrix.os }} | |
needs: Package | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-24.04 | |
- windows-2022 | |
- macos-13 | |
node-version: | |
- 10 | |
- 22 | |
include: | |
- os: macos-14 | |
node-version: 22 | |
steps: | |
- name: Install Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Install Yarn 1 | |
if: matrix.node-version == 10 | |
run: | | |
npm i -g yarn@^1 | |
- name: Install Yarn Latest | |
if: matrix.node-version == 22 | |
run: | | |
npm i -g yarn@latest | |
- name: Install Pnpm 5 | |
if: matrix.node-version == 10 | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 5 | |
- name: Install Pnpm 9 | |
if: matrix.node-version == 22 | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9 | |
- uses: actions/checkout@v4 | |
- name: Download Pack | |
uses: actions/download-artifact@v4 | |
with: | |
name: pack | |
- name: Smoke Test | |
run: bash ./script/smoke-test.bash |