[BREAKING CHANGE] Move the url recovery part to be a getter #61
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: Build & Test & publich node package "@miniben90/x-win" | |
env: | |
DEBUG: napi:* | |
APP_NAME: x-win | |
MACOSX_DEPLOYMENT_TARGET: '10.13' | |
on: | |
push: | |
branches: | |
- main | |
tags-ignore: | |
- '**' | |
paths-ignore: | |
- '**/*.md' | |
- LICENSE | |
- '**/*.gitignore' | |
- .editorconfig | |
- docs/** | |
pull_request: null | |
release: | |
types: [published] | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [20] | |
settings: | |
# Build matrix for MacOS (x64) | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
yarn build --target x86_64-apple-darwin | |
strip -x *.node | |
# Build matrix for MacOS (arm64) | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
build: | | |
yarn build --target aarch64-apple-darwin | |
strip -x *.node | |
# Build matrix for Windows (x64) | |
- host: windows-latest | |
target: x86_64-pc-windows-msvc | |
build: yarn build | |
# Build matrix for Windows (x32) | |
- host: windows-latest | |
target: i686-pc-windows-msvc | |
build: yarn build --target i686-pc-windows-msvc | |
architecture: 'x86' | |
# Build matrix for Windows (arm64) | |
- host: windows-latest | |
target: aarch64-pc-windows-msvc | |
build: yarn build --target aarch64-pc-windows-msvc | |
# Build for linux (using Ubuntu) (x64) | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-zig | |
build: |- | |
set -e && | |
sh /usr/local/dokcer-install-deps.sh && | |
cp -r /usr/lib/x86_64-linux-gnu/*xcb* /usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot/usr/lib/ && | |
cp -r /usr/include/xcb /usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot/usr/include/ && | |
cp -r /usr/lib/x86_64-linux-gnu/*xcb* /usr/local/rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/ && | |
cp -r /usr/include/xcb /usr/local/rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/include/ && | |
yarn && | |
yarn build --target x86_64-unknown-linux-gnu --zig --zig-abi-suffix=2.18 && | |
strip *.node | |
# Build for linux (using Ubuntu) (x64) | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
build: |- | |
set -e && | |
sh /usr/local/dokcer-install-deps.sh && | |
rustup target add x86_64-unknown-linux-musl && | |
yarn && | |
yarn build --target x86_64-unknown-linux-musl && | |
strip *.node | |
# Disabled problem with lxcb | |
# # Build for linux (using Ubuntu) (arm64) | |
# - host: ubuntu-latest | |
# target: aarch64-unknown-linux-gnu | |
# docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
# build: |- | |
# set -e && | |
# sudo echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main" > /etc/apt/sources.list.d/arm64-ports.list && | |
# sudo apt-get update && | |
# sudo apt-get upgrade -y --fix-missing && | |
# sudo apt-get install -y --fix-missing --no-install-recommends gcc make gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu && | |
# sudo apt-get install -y --fix-missing --no-install-recommends libx11-dev libx11-dev:arm64 libx11-xcb-dev libx11-xcb-dev:arm64 libxcb1-dev libxcb1-dev:arm64 libxcb-ewmh-dev libxcb-ewmh-dev:arm64 libxcb-randr0-dev libxcb-randr0-dev:arm64 && | |
# yarn install && | |
# yarn build --target aarch64-unknown-linux-gnu && | |
# aarch64-unknown-linux-gnu-strip *.node | |
name: stable - ${{ matrix.settings.target }} - node@${{ matrix.node-version }} | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
# Install lib dev required for compilation of the project | |
- name: (Linux) Install libx11 & libxcb for building | |
if: ${{ matrix.settings.host == 'ubuntu-latest' }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libx11-dev libxcb-ewmh-dev libxcb-randr0-dev | |
# Add actions/checkout | |
- uses: actions/checkout@v4 | |
# Setup node version from matrix.node and install deps | |
- name: Setup node | |
if: ${{ !matrix.settings.docker }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
check-latest: true | |
cache: yarn | |
architecture: ${{ matrix.settings.architecture || '' }} | |
# Setup yarn with ia32 for windows x86 | |
- name: Setup node x86 | |
if: ${{ matrix.settings.target == 'i686-pc-windows-msvc' }} | |
run: yarn config set supportedArchitectures.cpu "ia32" | |
shell: bash | |
# Install Rust version | |
- name: Install Rust | |
if: ${{ !matrix.settings.docker }} | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: stable | |
targets: ${{ matrix.settings.target }} | |
# Set Cache cargo | |
- name: Cache cargo | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
.cargo-cache | |
target/ | |
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | |
# Install deps | |
- name: Install dependencies | |
if: ${{ !matrix.settings.docker }} | |
run: yarn install | |
# Lint Rust code | |
- name: Ceheck lint Rust | |
run: cargo fmt -- --check | |
# Check clippy code | |
- name: Check clippy code | |
run: cargo clippy -- -D warnings | |
# Build the project | |
- name: Build | |
if: ${{ !matrix.settings.docker }} | |
run: ${{ matrix.settings.build }} | |
shell: bash | |
# Build docker | |
- name: Build (Docker) | |
if: ${{ matrix.settings.docker }} | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: ${{ matrix.settings.docker }} | |
options: '--user 0:0 -v ${{ github.workspace }}/.github/dokcer-install-deps.sh:/usr/local/dokcer-install-deps.sh -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' | |
run: ${{ matrix.settings.build }} | |
# Upload artifact for the next steps (macos and test) | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: ${{ github.workspace }}/${{ env.APP_NAME }}.*.node | |
if-no-files-found: error | |
test: | |
name: Test bindings on ${{ matrix.settings.target }} (${{ matrix.settings.host }}) - node@${{ matrix.node-version }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: windows-latest | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
target: i686-pc-windows-msvc | |
architecture: 'x86' | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
architecture: 'x64' | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
image: miniben90/ubuntu-dummy-desktop:latest | |
node-version: [18, 20] | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
# Setup yarn to run as x86_64 for darwin arm64 | |
- name: Setup node x86_64 | |
if: ${{ matrix.settings.target == 'x86_64-apple-darwin' }} | |
run: arch -x86_64 zsh | |
# Setup node version from matrix.node and install deps | |
- name: Setup node | |
if: ${{ !matrix.settings.image }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
check-latest: true | |
cache: yarn | |
architecture: ${{ matrix.settings.architecture || '' }} | |
# Setup yarn with ia32 for windows x86 | |
- name: Setup node x86 | |
if: ${{ matrix.settings.target == 'i686-pc-windows-msvc' }} | |
run: yarn config set supportedArchitectures.cpu "ia32" | |
shell: bash | |
# Install deps | |
- name: Install dependencies | |
run: yarn install | |
# Download artifacts | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: . | |
- name: Open finder to have an active window (MacOS) | |
if: ${{ matrix.settings.host == 'macos-latest' }} | |
run: open . | |
- name: Open explorer to have an active window (windows) | |
if: ${{ matrix.settings.host == 'windows-latest' }} | |
run: explorer . | |
- name: Test bindings | |
if: ${{ !matrix.settings.image }} | |
run: yarn test | |
- name: Test bindings on docker | |
if: ${{ matrix.settings.image }} | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: ${{ matrix.settings.image }} | |
options: --user 0:0 -v ${{ github.workspace }}/.github/docker-ubuntu-install.sh:/usr/local/docker-ubuntu-install.sh -v ${{ github.workspace }}:/work -w /work | |
run: | | |
Xvfb :0 & | |
sleep 1 | |
gpg-agent --daemon | |
sleep 1 | |
xfce4-session & | |
sleep 1 | |
sh /usr/local/docker-ubuntu-install.sh ${{ matrix.node-version }} | |
cd /work | |
yarn test | |
universal-macOS: | |
name: Build universal macOS binary | |
needs: | |
- build | |
- test | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
check-latest: true | |
cache: yarn | |
- name: Install dependencies | |
run: yarn install | |
- name: Download macOS x64 artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-x86_64-apple-darwin | |
path: artifacts | |
- name: Download macOS arm64 artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-aarch64-apple-darwin | |
path: artifacts | |
- name: Combine binaries | |
run: yarn universal | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: bindings-universal-apple-darwin | |
path: ${{ github.workspace }}/${{ env.APP_NAME }}.*.node | |
if-no-files-found: error | |
publish: | |
if: ${{ github.event_name == 'release' && github.ref_type == 'tag' }} | |
name: Publish ${{ github.ref_name }} (${{ github.ref }}) | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
TAG: ${{ github.ref_name }} | |
needs: | |
- build | |
- test | |
- universal-macOS | |
steps: | |
- uses: actions/checkout@v4 | |
# Setup node for publishing on npmjs | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
check-latest: true | |
cache: yarn | |
registry-url: 'https://registry.npmjs.org' | |
scope: '@miniben90' | |
# Install dependencies | |
- name: Install dependencies | |
run: yarn install | |
# Update package.json and Cargo.toml version | |
- name: Set version to package.json | |
run: node .scripts/before-publish.cjs | |
# Cleanup package.json before publishing it | |
- name: Cleanup package.json before publishing | |
run: node .scripts/cleanup-package.cjs | |
# Download artifacts from build part | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
# Move artifacts at there places | |
- name: Run napi artifacts to struct deps | |
run: ./node_modules/.bin/napi artifacts | |
# Run prepublish to update sub deps to patch version on it | |
- name: Run napi prepublish to update deps. version & add optionnal deps | |
run: ./node_modules/.bin/napi prepublish -t npm | |
# Publish packages on npmjs | |
- name: Publish packages | |
run: npm publish --access public |