|
name: CI |
|
env: |
|
DEBUG: napi:* |
|
APP_NAME: keyring |
|
MACOSX_DEPLOYMENT_TARGET: '10.13' |
|
'on': |
|
push: |
|
branches: |
|
- main |
|
tags-ignore: |
|
- '**' |
|
paths-ignore: |
|
- '**/*.md' |
|
- LICENSE |
|
- '**/*.gitignore' |
|
- .editorconfig |
|
- docs/** |
|
pull_request: null |
|
concurrency: |
|
group: ${{ github.workflow }}-${{ github.ref }} |
|
cancel-in-progress: true |
|
jobs: |
|
lint: |
|
name: Lint |
|
runs-on: ubuntu-latest |
|
steps: |
|
- uses: actions/checkout@v7 |
|
- name: Setup node |
|
uses: actions/setup-node@v7 |
|
with: |
|
node-version: 22 |
|
cache: 'yarn' |
|
|
|
- name: Install |
|
uses: dtolnay/rust-toolchain@stable |
|
with: |
|
components: clippy, rustfmt |
|
|
|
- name: Install dependencies |
|
run: yarn install |
|
|
|
- name: ESLint |
|
run: yarn lint |
|
|
|
- name: Cargo fmt |
|
run: cargo fmt -- --check |
|
|
|
- name: Clippy |
|
run: cargo clippy |
|
build: |
|
strategy: |
|
fail-fast: false |
|
matrix: |
|
settings: |
|
- host: macos-latest |
|
target: x86_64-apple-darwin |
|
build: yarn build --target x86_64-apple-darwin |
|
- host: windows-latest |
|
build: yarn build --target x86_64-pc-windows-msvc |
|
target: x86_64-pc-windows-msvc |
|
- host: windows-latest |
|
build: yarn build --target i686-pc-windows-msvc |
|
target: i686-pc-windows-msvc |
|
- host: ubuntu-24.04-arm |
|
target: x86_64-unknown-linux-gnu |
|
build: yarn build --target x86_64-unknown-linux-gnu --use-napi-cross |
|
- host: ubuntu-latest |
|
target: x86_64-unknown-linux-musl |
|
build: yarn build --target x86_64-unknown-linux-musl -x |
|
- host: macos-latest |
|
target: aarch64-apple-darwin |
|
build: yarn build --target aarch64-apple-darwin |
|
- host: ubuntu-latest |
|
target: aarch64-unknown-linux-gnu |
|
build: yarn build --target aarch64-unknown-linux-gnu --use-napi-cross |
|
- host: ubuntu-latest |
|
target: armv7-unknown-linux-gnueabihf |
|
build: yarn build --target armv7-unknown-linux-gnueabihf --use-napi-cross |
|
- host: ubuntu-latest |
|
target: aarch64-unknown-linux-musl |
|
build: yarn build --target aarch64-unknown-linux-musl -x |
|
- host: windows-latest |
|
target: aarch64-pc-windows-msvc |
|
build: yarn build --target aarch64-pc-windows-msvc |
|
- host: ubuntu-latest |
|
target: riscv64gc-unknown-linux-gnu |
|
setup: | |
|
sudo apt-get update |
|
sudo apt-get install gcc-riscv64-linux-gnu -y |
|
build: yarn build --platform --target riscv64gc-unknown-linux-gnu |
|
name: stable - ${{ matrix.settings.target }} - node@22 |
|
runs-on: ${{ matrix.settings.host }} |
|
steps: |
|
- uses: actions/checkout@v7 |
|
- name: Setup node |
|
uses: actions/setup-node@v7 |
|
with: |
|
node-version: 22 |
|
cache: yarn |
|
- name: Install |
|
uses: dtolnay/rust-toolchain@stable |
|
if: ${{ !matrix.settings.docker }} |
|
with: |
|
toolchain: stable |
|
targets: ${{ matrix.settings.target }} |
|
- name: Cache cargo |
|
uses: actions/cache@v6 |
|
with: |
|
path: | |
|
~/.cargo/registry/index/ |
|
~/.cargo/registry/cache/ |
|
~/.cargo/git/db/ |
|
~/.napi-rs |
|
.cargo-cache |
|
target/ |
|
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} |
|
- uses: goto-bus-stop/setup-zig@v2 |
|
if: ${{ contains(matrix.settings.target, 'musl') }} |
|
with: |
|
version: 0.15.1 |
|
- name: Install cargo-zigbuild |
|
uses: taiki-e/install-action@v2 |
|
if: ${{ contains(matrix.settings.target, 'musl') }} |
|
env: |
|
GITHUB_TOKEN: ${{ github.token }} |
|
with: |
|
tool: cargo-zigbuild |
|
- name: Setup toolchain |
|
run: ${{ matrix.settings.setup }} |
|
if: ${{ matrix.settings.setup }} |
|
shell: bash |
|
- name: Setup node x86 |
|
if: matrix.settings.target == 'i686-pc-windows-msvc' |
|
run: yarn config set supportedArchitectures.cpu "ia32" |
|
shell: bash |
|
- name: Install dependencies |
|
run: yarn install |
|
- name: Setup node x86 |
|
uses: actions/setup-node@v7 |
|
if: matrix.settings.target == 'i686-pc-windows-msvc' |
|
with: |
|
node-version: 22 |
|
architecture: x86 |
|
- name: Build |
|
run: ${{ matrix.settings.build }} |
|
shell: bash |
|
- name: Upload artifact |
|
uses: actions/upload-artifact@v7 |
|
with: |
|
name: bindings-${{ matrix.settings.target }} |
|
path: ${{ env.APP_NAME }}.*.node |
|
if-no-files-found: error |
|
build-freebsd: |
|
runs-on: ubuntu-latest |
|
name: Build FreeBSD |
|
steps: |
|
- uses: actions/checkout@v7 |
|
- name: Build |
|
id: build |
|
uses: cross-platform-actions/action@v1.4.0 |
|
env: |
|
DEBUG: napi:* |
|
RUSTUP_IO_THREADS: 1 |
|
with: |
|
operating_system: freebsd |
|
version: '15.0' |
|
memory: 8G |
|
cpu_count: 3 |
|
environment_variables: 'DEBUG RUSTUP_IO_THREADS' |
|
shell: bash |
|
run: | |
|
sudo pkg install -y -f curl www/node www/npm libnghttp2 cmake dbus pkgconf |
|
sudo npm install --location=global --ignore-scripts yarn |
|
curl https://sh.rustup.rs -sSf --output rustup.sh |
|
sh rustup.sh -y --profile minimal --default-toolchain beta |
|
source "$HOME/.cargo/env" |
|
echo "~~~~ rustc --version ~~~~" |
|
rustc --version |
|
echo "~~~~ node -v ~~~~" |
|
node -v |
|
echo "~~~~ yarn --version ~~~~" |
|
yarn --version |
|
pwd |
|
ls -lah |
|
whoami |
|
env |
|
freebsd-version |
|
yarn install |
|
yarn build |
|
rm -rf node_modules |
|
rm -rf target |
|
rm -rf .yarn/cache |
|
- name: Upload artifact |
|
uses: actions/upload-artifact@v7 |
|
with: |
|
name: bindings-freebsd |
|
path: ${{ env.APP_NAME }}.*.node |
|
if-no-files-found: error |
|
test: |
|
name: Test bindings on ${{ matrix.settings.host }} - node@${{ matrix.node }} |
|
needs: |
|
- build |
|
strategy: |
|
fail-fast: false |
|
matrix: |
|
node: ['22', '24'] |
|
settings: |
|
- host: macos-latest |
|
target: 'aarch64-apple-darwin' |
|
- host: windows-latest |
|
target: 'x86_64-pc-windows-msvc' |
|
- host: ubuntu-latest |
|
target: 'x86_64-unknown-linux-gnu' |
|
runs-on: ${{ matrix.settings.host }} |
|
steps: |
|
- uses: actions/checkout@v7 |
|
- name: Setup node |
|
uses: actions/setup-node@v7 |
|
with: |
|
node-version: ${{ matrix.node }} |
|
cache: yarn |
|
- name: Download artifacts |
|
uses: actions/download-artifact@v8 |
|
with: |
|
name: bindings-${{ matrix.settings.target }} |
|
path: . |
|
- name: List packages |
|
run: ls -R . |
|
shell: bash |
|
- name: Install dependencies |
|
run: yarn install |
|
- name: Install system components |
|
if: matrix.settings.host == 'ubuntu-latest' |
|
run: | |
|
sudo apt-get update -y |
|
sudo apt-get install -y gnome-keyring dbus dbus-x11 |
|
- name: Test bindings |
|
if: matrix.settings.host == 'ubuntu-latest' |
|
run: | |
|
dbus-run-session -- bash -c "rm -f $HOME/.local/share/keyrings/* && echo -n "test" | gnome-keyring-daemon --unlock && yarn test" |
|
- name: Test bindings |
|
if: matrix.settings.host != 'ubuntu-latest' |
|
run: yarn test |
|
|
|
publish: |
|
name: Publish |
|
runs-on: ubuntu-latest |
|
needs: |
|
- lint |
|
- test |
|
- build-freebsd |
|
permissions: |
|
contents: write |
|
id-token: write |
|
steps: |
|
- uses: actions/checkout@v7 |
|
- name: Setup node |
|
uses: actions/setup-node@v7 |
|
with: |
|
node-version: 24 |
|
cache: yarn |
|
- name: Install dependencies |
|
run: yarn install |
|
- name: Download all artifacts |
|
uses: actions/download-artifact@v8 |
|
with: |
|
path: artifacts |
|
- name: Create npm dirs |
|
run: yarn napi create-npm-dirs |
|
- name: Move artifacts |
|
run: yarn artifacts |
|
- name: List packages |
|
run: ls -R ./npm |
|
shell: bash |
|
- name: Publish |
|
run: | |
|
npm install -g npm |
|
if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; |
|
then |
|
npm publish --access public |
|
elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; |
|
then |
|
npm publish --tag next --access public |
|
else |
|
echo "Not a release, skipping publish" |
|
fi |
|
env: |
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |