mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-25 12:04:21 +01:00
This PR introduces separate `package.browser.json` file for `*-browser` npm packages (`@tursodatabase/sync-browser` and `@tursodatabase/database-browser`). The packages are nearly identical and the only change is `package.json` content (browser package mentions only WASM optional dependency which shouldn't confuse NPM and force it to download WASM dep package instead of native one). Due to that, innocent "hack" is implemented which swap `package.json` with `package.browser.json` before publish of `browser` package. Closes #2906
191 lines
6.4 KiB
YAML
191 lines
6.4 KiB
YAML
name: Build & publish @tursodatabase/sync
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
tags:
|
|
- v*
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
DEBUG: napi:*
|
|
APP_NAME: turso-sync-js
|
|
MACOSX_DEPLOYMENT_TARGET: "10.13"
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: sync/javascript
|
|
|
|
jobs:
|
|
build:
|
|
timeout-minutes: 20
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
settings:
|
|
- host: windows-latest
|
|
build: |
|
|
yarn build --target x86_64-pc-windows-msvc
|
|
yarn test
|
|
target: x86_64-pc-windows-msvc
|
|
- host: ubuntu-latest
|
|
target: x86_64-unknown-linux-gnu
|
|
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
|
|
build: yarn build --target x86_64-unknown-linux-gnu
|
|
- host: macos-latest
|
|
target: aarch64-apple-darwin
|
|
build: yarn build --target aarch64-apple-darwin
|
|
- host: blacksmith-2vcpu-ubuntu-2404-arm
|
|
target: aarch64-unknown-linux-gnu
|
|
build: yarn build --target aarch64-unknown-linux-gnu
|
|
- host: ubuntu-latest
|
|
target: wasm32-wasip1-threads
|
|
setup: |
|
|
rustup target add wasm32-wasip1-threads
|
|
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-25/wasi-sdk-25.0-x86_64-linux.tar.gz
|
|
tar -xvf wasi-sdk-25.0-x86_64-linux.tar.gz
|
|
build: |
|
|
export WASI_SDK_PATH="$(pwd)/wasi-sdk-25.0-x86_64-linux"
|
|
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
|
|
export TARGET_CXXFLAGS="--target=wasm32-wasi-threads --sysroot=$(pwd)/wasi-sdk-25.0-x86_64-linux/share/wasi-sysroot -pthread -mllvm -wasm-enable-sjlj -lsetjmp"
|
|
export TARGET_CFLAGS="$TARGET_CXXFLAGS"
|
|
yarn build --target wasm32-wasip1-threads
|
|
name: stable - ${{ matrix.settings.target }} - node@20
|
|
runs-on: ${{ matrix.settings.host }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup node
|
|
uses: actions/setup-node@v4
|
|
if: ${{ !matrix.settings.docker }}
|
|
with:
|
|
node-version: 20
|
|
- name: Install
|
|
uses: dtolnay/rust-toolchain@stable
|
|
if: ${{ !matrix.settings.docker }}
|
|
with:
|
|
toolchain: stable
|
|
targets: ${{ matrix.settings.target }}
|
|
- name: Cache cargo
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
.cargo-cache
|
|
target/
|
|
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
|
|
- uses: goto-bus-stop/setup-zig@v2
|
|
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' || matrix.settings.target == 'armv7-unknown-linux-musleabihf' }}
|
|
with:
|
|
version: 0.13.0
|
|
- name: Setup toolchain
|
|
run: ${{ matrix.settings.setup }}
|
|
if: ${{ matrix.settings.setup }}
|
|
shell: bash
|
|
- name: Install dependencies
|
|
run: yarn install
|
|
- name: Setup node x86
|
|
uses: actions/setup-node@v4
|
|
if: matrix.settings.target == 'x86_64-pc-windows-msvc'
|
|
with:
|
|
node-version: 20
|
|
architecture: x64
|
|
- name: Build in docker
|
|
uses: addnab/docker-run-action@v3
|
|
if: ${{ matrix.settings.docker }}
|
|
with:
|
|
image: ${{ matrix.settings.docker }}
|
|
options: "--user 0:0 -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/sync/javascript"
|
|
run: ${{ matrix.settings.build }}
|
|
- name: Build
|
|
run: ${{ matrix.settings.build }}
|
|
if: ${{ !matrix.settings.docker }}
|
|
shell: bash
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: turso-sync-js-${{ matrix.settings.target }}
|
|
path: |
|
|
sync/javascript/${{ env.APP_NAME }}.*.node
|
|
sync/javascript/${{ env.APP_NAME }}.*.wasm
|
|
if-no-files-found: error
|
|
test-linux-x64-gnu-binding:
|
|
name: Test turso-sync-js on Linux-x64-gnu - node@${{ matrix.node }}
|
|
needs:
|
|
- build
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
node:
|
|
- "20"
|
|
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup node
|
|
uses: useblacksmith/setup-node@v5
|
|
with:
|
|
node-version: ${{ matrix.node }}
|
|
- name: Install dependencies
|
|
run: yarn install
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: turso-sync-js-x86_64-unknown-linux-gnu
|
|
path: sync/javascript
|
|
- name: List packages
|
|
run: ls -R .
|
|
shell: bash
|
|
- name: Test turso-sync-js
|
|
run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test
|
|
publish:
|
|
name: Publish
|
|
runs-on: ubuntu-latest
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
needs:
|
|
- test-linux-x64-gnu-binding
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Setup node
|
|
uses: useblacksmith/setup-node@v5
|
|
with:
|
|
node-version: 20
|
|
- name: Install dependencies
|
|
run: yarn install
|
|
- name: create npm dirs
|
|
run: yarn napi create-npm-dirs
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: sync/javascript/artifacts
|
|
- name: Move artifacts
|
|
run: yarn artifacts
|
|
- name: List packages
|
|
run: ls -R ./npm
|
|
shell: bash
|
|
- name: Publish
|
|
run: |
|
|
npm config set provenance true
|
|
if git log -1 --pretty=%B | grep "^Turso [0-9]\+\.[0-9]\+\.[0-9]\+$";
|
|
then
|
|
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
|
|
make publish-native
|
|
make publish-browser
|
|
elif git log -1 --pretty=%B | grep "^Turso [0-9]\+\.[0-9]\+\.[0-9]\+";
|
|
then
|
|
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
|
|
make publish-native-next
|
|
make publish-browser-next
|
|
else
|
|
echo "Not a release, skipping publish"
|
|
fi
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|