diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml new file mode 100644 index 0000000..88ccf0e --- /dev/null +++ b/.github/workflows/package.yml @@ -0,0 +1,203 @@ +name: Publish package + +on: + push: + + workflow_dispatch: + inputs: + new-version: + description: New version to be published, overrides tag + required: true + type: string + + npm-tag: + description: NPM tag + required: true + default: latest + type: choice + options: + - latest + - next + +jobs: + build: + strategy: + matrix: + include: + - os: ubuntu-20.04 + arch: linux-x64-glibc + - os: macos-11 + arch: darwin-x64 + - os: macos-m1 + arch: darwin-arm64 + - os: windows-2019 + arch: win32-x64 + + name: Build for ${{ matrix.arch }} + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + cache: yarn + node-version: 20 + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-${{ matrix.arch }} + path: prebuilds/**/*.node + + build-linux-arm64-glibc: + name: Build for linux-arm64-glibc + runs-on: buildjet-2vcpu-ubuntu-2204-arm + + container: + image: node:20-bullseye + + steps: + - name: Install build deps + run: apt update -yq && apt install -yq g++ git make python3 + + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-linux-arm64-glibc + path: prebuilds/**/*.node + + build-linux-x64-musl: + name: Build for linux-x64-musl + runs-on: ubuntu-latest + + container: + image: node:20-alpine + + steps: + - name: Install build deps + run: apk add --no-cache g++ git make python3 + + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-linux-x64-musl + path: prebuilds/**/*.node + + build-linux-arm64-musl: + name: Build for linux-arm64-musl + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Prebuild + uses: uraimo/run-on-arch-action@v2 + with: + arch: aarch64 + distro: alpine_latest + dockerRunArgs: --volume "${PWD}:/repo" --workdir /repo + install: | + apk add --update make g++ python3 + apk add --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/main/ nodejs~=20 yarn + run: | + yarn install --frozen-lockfile --ignore-scripts + yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-linux-arm64-musl + path: prebuilds/**/*.node + + build-freebsd-x64: + name: Build for freebsd-x64 + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Prebuild + uses: vmactions/freebsd-vm@v1 + with: + prepare: | + pkg install -y gmake python3 yarn-node20 + run: | + yarn install --frozen-lockfile --ignore-scripts + yarn build + sync: sshfs + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: prebuild-freebsd-x64 + path: prebuilds/**/*.node + + publish: + name: Upload package artifact + runs-on: ubuntu-latest + needs: + - build + - build-freebsd-x64 + - build-linux-arm64-glibc + - build-linux-arm64-musl + - build-linux-x64-musl + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Download prebuild artifacts + id: download-artifact + uses: actions/download-artifact@v4 + + - name: Move prebuild artifacts + run: mkdir prebuilds && cp --recursive prebuild-*/* prebuilds/ + + - name: Pack package + run: yarn pack + + - name: Upload package artifact + uses: actions/upload-artifact@v4 + with: + path: '*.tgz'