Skip to content

Release

Release #38

Workflow file for this run

name: "Release"
on:
workflow_dispatch:
inputs:
dryrun:
description: 'Add --dry-run flag to npm publish'
default: true
type: boolean
jobs:
prebuild:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
name: [
alpine-x86_64,
alpine-arm32v6,
alpine-arm64v8,
debian-x86_64,
debian-i386,
debian-arm32v6,
debian-arm64v8,
darwin-x86_64,
darwin-arm64,
windows-x86_64,
]
include:
- name: alpine-x86_64
os: ubuntu-latest
BASE_IMAGE: library/node:16-alpine
DOCKERFILE: Dockerfile.alpine
QEMU_ARCH: x86_64
- name: alpine-arm32v6
os: ubuntu-latest
BASE_IMAGE: arm32v6/node:16-alpine
DOCKERFILE: Dockerfile.alpine
QEMU_ARCH: arm
- name: alpine-arm64v8
os: ubuntu-latest
BASE_IMAGE: arm64v8/node:16-alpine
DOCKERFILE: Dockerfile.alpine
QEMU_ARCH: aarch64
- name: debian-x86_64
os: ubuntu-latest
BASE_IMAGE: library/debian:11.7-slim
DOCKERFILE: Dockerfile.debian
QEMU_ARCH: x86_64
- name: debian-i386
os: ubuntu-latest
BASE_IMAGE: i386/debian:11.7-slim
DOCKERFILE: Dockerfile.debian
QEMU_ARCH: i386
- name: debian-arm32v6
os: ubuntu-latest
BASE_IMAGE: balenalib/raspberry-pi-debian:bullseye
DOCKERFILE: Dockerfile.debian
QEMU_ARCH: arm
- name: debian-arm64v8
os: ubuntu-latest
BASE_IMAGE: arm64v8/debian:11.7-slim
DOCKERFILE: Dockerfile.debian
QEMU_ARCH: aarch64
- name: darwin-x86_64
os: macOS-latest
- name: darwin-arm64
# xlarge is arm64
# https://docs.github.com/en/actions/using-github-hosted-runners/about-larger-runners/about-larger-runners#about-macos-larger-runners
os: macos-13-xlarge
- name: windows-x86_64
os: windows-2022
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 #4.1.0
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c #v3.6.0
with:
node-version: 20.x
- name: Linux - Setup Dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get --yes --no-install-recommends install binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static:register --reset
- name: Linux - Build Docker Image
if: runner.os == 'Linux'
run: |
docker build -f .prebuild/${{ matrix.DOCKERFILE }} --build-arg BASE_IMAGE=${{ matrix.BASE_IMAGE }} --build-arg QEMU_ARCH=${{ matrix.QEMU_ARCH }} -t multiarch-build .
- name: Linux - Prebuild Binaries
if: runner.os == 'Linux'
run: |
docker run --rm -v $(pwd):/node-pty multiarch-build
- name: macOS - Setup Python
if: runner.os == 'macOS'
uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 #v4.7.1
with:
python-version: '3.11'
architecture: x64
- name: macOS - Prebuild Binaries
if: runner.os == 'macOS'
run: |
corepack enable # we use yarn
yarn install --ignore-scripts
node .prebuild/buildify.js
- name: Windows - Prebuild Binaries
if: runner.os == 'Windows'
shell: bash
run: |
yarn install --ignore-scripts
node .prebuild/buildify-windows.js
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 #3.1.3
with:
name: prebuilds
path: prebuilds
release:
runs-on: ubuntu-latest
needs:
- prebuild
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 #4.1.0
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c #v3.6.0
with:
node-version: 20.x
registry-url: "https://registry.npmjs.org" # required to use auth
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
- uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a #3.0.2
with:
name: prebuilds
path: prebuilds
- run: tree prebuilds
- run: yarn
- run: yarn lint
- run: yarn build
- run: yarn test
- name: Simulate Publishing to NPM
if: ${{ inputs.dryrun }}
run: npm publish --access public --dry-run
- name: Publish to NPM
if: ${{ !inputs.dryrun }}
run: npm publish --access public