Publish to NPM #118
Workflow file for this run
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: Publish to NPM | |
on: | |
workflow_dispatch: | |
inputs: | |
dry_run: | |
description: "Just build, don't publish" | |
default: false | |
required: false | |
type: boolean | |
npm_tag: | |
description: 'NPM tag' | |
required: true | |
default: 'latest' | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
build: | |
name: Build | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [windows-latest, macos-latest] | |
include: | |
- os: macos-latest | |
rust-cross-target: x86_64-apple-darwin | |
- os: windows-latest | |
rust-cross-target: aarch64-pc-windows-msvc | |
# Ubuntu binaries are built using Docker, below | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
submodules: recursive | |
- name: Checking run eligibility | |
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | |
with: | |
script: | | |
const dryRun = ${{ inputs.dry_run }}; | |
const refType = '${{ github.ref_type }}'; | |
const refName = '${{ github.ref_name }}'; | |
console.log(dryRun | |
? `Running in 'dry run' mode on '${refName}' ${refType}` | |
: `Running on '${refName}' ${refType}`); | |
if (refType !== 'tag' && !dryRun) { | |
core.setFailed("the action should either be launched on a tag or with a 'dry run' switch"); | |
} | |
- run: rustup toolchain install $(cat rust-toolchain) --profile minimal --target ${{ matrix.rust-cross-target }} | |
# install nasm compiler for boring | |
- name: (Windows) Install nasm | |
if: startsWith(matrix.os, 'windows') | |
run: choco install nasm | |
shell: cmd | |
- run: choco install protoc | |
if: startsWith(matrix.os, 'windows') | |
- run: brew install protobuf | |
if: startsWith(matrix.os, 'macos') | |
- run: cargo +stable install dump_syms --no-default-features --features cli | |
- name: Get Node version from .nvmrc | |
id: get-nvm-version | |
shell: bash | |
run: echo "node-version=$(cat .nvmrc)" >> $GITHUB_OUTPUT | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.24 | |
with: | |
node-version-file: '.nvmrc' | |
- run: npm ci | |
working-directory: node | |
- name: Build for arm64 | |
run: npx prebuildify --napi -t ${{ steps.get-nvm-version.outputs.node-version }} --arch arm64 | |
working-directory: node | |
- name: Save arm64 debug info | |
run: mv build/Release/*-debuginfo.* . | |
working-directory: node | |
shell: bash | |
- name: Build for x64 | |
run: npx prebuildify --napi -t ${{ steps.get-nvm-version.outputs.node-version }} --arch x64 | |
working-directory: node | |
- name: Save x64 debug info | |
run: mv build/Release/*-debuginfo.* . | |
working-directory: node | |
shell: bash | |
- name: Upload library | |
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: libsignal_client (${{matrix.os}}) | |
path: node/prebuilds/* | |
- name: Upload debug info | |
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: Debug info (${{matrix.os}}) | |
path: | | |
node/*-debuginfo.* | |
!node/*.sha256 | |
build-docker: | |
name: Build (Ubuntu via Docker) | |
runs-on: ubuntu-latest | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
submodules: recursive | |
- run: node/docker-prebuildify.sh | |
- name: Upload library | |
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: libsignal_client (ubuntu-docker) | |
path: node/prebuilds/* | |
- name: Upload debug info | |
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: Debug info (ubuntu-docker) | |
path: | | |
node/*-debuginfo.* | |
!node/*.sha256 | |
verify-rust: | |
name: Verify Node bindings | |
runs-on: ubuntu-latest | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
submodules: recursive | |
- run: rustup toolchain install $(cat rust-toolchain) --profile minimal | |
- run: sudo apt-get update && sudo apt-get install protobuf-compiler | |
- name: Verify that the Node bindings are up to date | |
run: rust/bridge/node/bin/gen_ts_decl.py --verify | |
publish: | |
name: Publish | |
permissions: | |
# Needed for ncipollo/release-action. | |
contents: 'write' | |
runs-on: ubuntu-latest | |
needs: [build, build-docker, verify-rust] | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
submodules: recursive | |
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 | |
with: | |
node-version-file: '.nvmrc' | |
registry-url: 'https://registry.npmjs.org/' | |
- name: Download built libraries | |
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 | |
with: | |
pattern: libsignal_client* | |
path: node/prebuilds | |
merge-multiple: true | |
- name: Download debug info | |
uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 | |
with: | |
pattern: Debug info* | |
path: debuginfo | |
merge-multiple: true | |
- run: npm ci | |
working-directory: node | |
- run: npm run tsc | |
working-directory: node | |
- run: npm run lint | |
working-directory: node | |
- run: npm run format -c | |
working-directory: node | |
- run: npm run test | |
working-directory: node | |
env: | |
PREBUILDS_ONLY: 1 | |
- run: npm publish --tag ${{ github.event.inputs.npm_tag }} --access public ${{ inputs.dry_run && '--dry-run' || ''}} | |
working-directory: node | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
# This step is expected to fail if not run on a tag. | |
- name: Upload debug info to release | |
uses: ncipollo/release-action@66b1844f0b7ef940787c9d128846d5ac09b3881f # v1.14 | |
if: ${{ !inputs.dry_run }} | |
with: | |
allowUpdates: true | |
artifactErrorsFailBuild: true | |
artifacts: debuginfo/*-debuginfo.* |