Skip to content

Build Binaries

Build Binaries #14

Workflow file for this run

name: Build Binaries
defaults:
run:
shell: bash
on:
workflow_dispatch:
inputs:
release_tag:
description: 'Release tag/version to build. Defaults to package.json version.'
required: false
type: string
permissions:
contents: write
id-token: write
attestations: write
jobs:
create_release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Fetch Repository
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: 24.13.0
cache: 'npm'
- name: Get Package Version
id: package-version
run: |
release_tag="${{ inputs.release_tag }}"
if [ -z "$release_tag" ]; then
release_tag="$(node -p "require('./package').version")"
fi
echo "version=$release_tag" >> "$GITHUB_OUTPUT"
- name: Create Release
uses: softprops/action-gh-release@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.package-version.outputs.version }}
name: Release ${{ steps.package-version.outputs.version }}
build:
name: Build (${{ matrix.target }})
needs: create_release
strategy:
fail-fast: false
matrix:
include:
- target: windows-x64
os: windows-2022
node_arch: x64
build_platform: x64
- target: windows-arm64
os: windows-11-arm
node_arch: arm64
build_platform: ARM64
- target: linux-x64
os: ubuntu-22.04
node_arch: x64
- target: linux-arm64
os: ubuntu-22.04-arm
node_arch: arm64
- target: darwin-x64
os: macos-26
node_arch: x64
cmake_args: -DCMAKE_OSX_ARCHITECTURES=x86_64
- target: darwin-arm64
os: macos-26
node_arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Fetch Repository
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Install Node.js
uses: actions/setup-node@v6
with:
node-version: 24.13.0
architecture: ${{ matrix.node_arch }}
cache: 'npm'
- name: Print Native Target
run: |
echo "runner=$(uname -s)-$(uname -m)"
node -p "'node=' + process.version + ' platform=' + process.platform + ' arch=' + process.arch"
npm config get arch
- name: Install Modules
run: npm ci --ignore-scripts
- name: Add msbuild to PATH
if: startsWith(matrix.target, 'windows-')
uses: microsoft/setup-msbuild@v3
with:
msbuild-architecture: ${{ matrix.node_arch }}
vs-prerelease: false
- name: Build Pre Step
run: chmod +x src/extract.sh && src/extract.sh
- name: Build Unix Binaries
if: ${{ !startsWith(matrix.target, 'windows-') }}
run: node src/build-unix
env:
CMAKE_ARGS: ${{ matrix.cmake_args || '' }}
- name: Build Windows Binaries
if: startsWith(matrix.target, 'windows-')
run: src/windows.sh
env:
BUILD_PLATFORM: ${{ matrix.build_platform }}
- name: Stage Built Binaries
run: node src/build-post
- name: Get Package Version
id: package-version
shell: bash
run: |
release_tag="${{ inputs.release_tag }}"
if [ -z "$release_tag" ]; then
release_tag="$(node -p "require('./package').version")"
fi
echo "version=$release_tag" >> "$GITHUB_OUTPUT"
- name: Pack Files
id: pack-files
run: node -e "import('@node-3d/addon-tools').then((m) => m.actionPack())" >> $GITHUB_OUTPUT
- name: Attest Binary
uses: actions/attest@v4
with:
subject-path: ${{ steps.pack-files.outputs.pack }}
- name: Store Binaries
uses: softprops/action-gh-release@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.package-version.outputs.version }}
name: Release ${{ steps.package-version.outputs.version }}
files: ${{ steps.pack-files.outputs.pack }}