mirror of
https://github.com/gorules/zen.git
synced 2026-10-04 00:02:18 +00:00
chore: improve release pipeline (#451)
* chore: improve release pipeline * fix pipelines * fix sccache * update workflows * fix workflow * update workflow * remove sccache and cross * bring back sccache * fix pipelines * fix nodejs build * fix pipelines * move python to abi3 for future proofing * fix workflow ordering bug * gate releases via environment - configure go via release * set release as 1.0.0-beta
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
name: 'Setup Rust caching'
|
||||
description: 'Swatinem/rust-cache + sccache.'
|
||||
|
||||
inputs:
|
||||
shared-key:
|
||||
description: 'Swatinem/rust-cache shared-key.'
|
||||
required: false
|
||||
default: ''
|
||||
key:
|
||||
description: 'Swatinem/rust-cache key.'
|
||||
required: false
|
||||
default: ''
|
||||
workspaces:
|
||||
description: 'Swatinem/rust-cache workspaces.'
|
||||
required: false
|
||||
default: '. -> target'
|
||||
sccache:
|
||||
description: 'Enable sccache as RUSTC_WRAPPER.'
|
||||
required: false
|
||||
default: 'true'
|
||||
zig:
|
||||
description: 'Install ziglang + cargo-zigbuild.'
|
||||
required: false
|
||||
default: 'false'
|
||||
zig-version:
|
||||
description: 'Zig version for mlugg/setup-zig.'
|
||||
required: false
|
||||
default: '0.16.0'
|
||||
glibc-version:
|
||||
description: 'Target glibc for cargo-zigbuild, exported as GLIBC_VERSION.'
|
||||
required: false
|
||||
default: '2.17'
|
||||
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Exclude workspace from Windows Defender
|
||||
if: ${{ runner.os == 'Windows' }}
|
||||
shell: pwsh
|
||||
run: Add-MpPreference -ExclusionPath "${{ github.workspace }}"
|
||||
|
||||
- name: Fast profile on PRs (no LTO)
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "CARGO_PROFILE_RELEASE_LTO=false" >> "$GITHUB_ENV"
|
||||
echo "CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Install sccache
|
||||
if: ${{ inputs.sccache == 'true' }}
|
||||
uses: mozilla-actions/sccache-action@v0.0.10
|
||||
|
||||
- name: Enable sccache
|
||||
if: ${{ inputs.sccache == 'true' }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
|
||||
echo "RUSTC_WRAPPER=sccache" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Rust cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
shared-key: ${{ inputs.shared-key }}
|
||||
key: ${{ inputs.key }}
|
||||
workspaces: ${{ inputs.workspaces }}
|
||||
|
||||
- name: Install zig
|
||||
if: ${{ inputs.zig == 'true' }}
|
||||
uses: mlugg/setup-zig@v2
|
||||
with:
|
||||
version: ${{ inputs.zig-version }}
|
||||
|
||||
- name: Install cargo-zigbuild
|
||||
if: ${{ inputs.zig == 'true' }}
|
||||
uses: taiki-e/install-action@v2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
with:
|
||||
tool: cargo-zigbuild
|
||||
|
||||
- name: Export target glibc version
|
||||
if: ${{ inputs.zig == 'true' }}
|
||||
shell: bash
|
||||
run: echo "GLIBC_VERSION=${{ inputs.glibc-version }}" >> "$GITHUB_ENV"
|
||||
@@ -1,41 +0,0 @@
|
||||
name: "Release: Core"
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Version'
|
||||
required: true
|
||||
default: 'patch'
|
||||
type: choice
|
||||
options:
|
||||
- patch
|
||||
- minor
|
||||
- major
|
||||
|
||||
jobs:
|
||||
cargo_version_test:
|
||||
runs-on: ubuntu-latest
|
||||
name: A job to test cargo version action
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set Git author
|
||||
run: |
|
||||
git config user.name "Bot"
|
||||
git config user.email "bot@gorules.io"
|
||||
|
||||
- name: Cargo version
|
||||
uses: ./actions/cargo-version-action
|
||||
id: semver
|
||||
with:
|
||||
version: ${{ github.event.inputs.version }}
|
||||
tag-prefix: core-v
|
||||
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
with:
|
||||
github_token: ${{ secrets.PAT }}
|
||||
@@ -4,7 +4,24 @@ env:
|
||||
MACOSX_DEPLOYMENT_TARGET: '10.13'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
tags-ignore:
|
||||
- '**'
|
||||
paths:
|
||||
- 'bindings/c/**'
|
||||
- 'core/**'
|
||||
- 'test-data/**'
|
||||
- '.github/workflows/go.yaml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'bindings/c/**'
|
||||
- 'core/**'
|
||||
- 'test-data/**'
|
||||
- '.github/workflows/go.yaml'
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions: write-all
|
||||
|
||||
@@ -39,9 +56,19 @@ jobs:
|
||||
toolchain: stable
|
||||
override: true
|
||||
target: ${{ matrix.settings.target }}
|
||||
- uses: marcopolo/cargo@master
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: go-${{ matrix.settings.target }}
|
||||
zig: ${{ matrix.settings.host == 'ubuntu-latest' }}
|
||||
|
||||
- name: Build (zig, linux)
|
||||
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
|
||||
working-directory: bindings/c
|
||||
run: cargo zigbuild --release --all-features --target ${{ matrix.settings.target }}.${{ env.GLIBC_VERSION }} --locked
|
||||
- name: Build (native)
|
||||
if: ${{ matrix.settings.host != 'ubuntu-latest' }}
|
||||
uses: marcopolo/cargo@master
|
||||
with:
|
||||
use-cross: true
|
||||
working-directory: bindings/c
|
||||
args: --release --all-features --target=${{ matrix.settings.target }} --locked
|
||||
command: build
|
||||
@@ -84,6 +111,8 @@ jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'go-v')"
|
||||
needs:
|
||||
- build
|
||||
- copy-common
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Miri
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
RUSTUP_MAX_RETRIES: 10
|
||||
|
||||
jobs:
|
||||
miri:
|
||||
name: cargo miri test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Rust
|
||||
run: rustup toolchain install nightly --component miri && rustup default nightly
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: rust-miri
|
||||
sccache: 'false'
|
||||
- run: cargo miri test --workspace --all-features
|
||||
env:
|
||||
MIRIFLAGS: -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation
|
||||
RUSTFLAGS: ${{ env.RUSTFLAGS }} -Z randomize-layout
|
||||
@@ -1,60 +0,0 @@
|
||||
name: "Release: NodeJS"
|
||||
|
||||
env:
|
||||
WORKING_DIRECTORY: bindings/nodejs
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Version'
|
||||
required: true
|
||||
default: 'patch'
|
||||
type: choice
|
||||
options:
|
||||
- patch
|
||||
- minor
|
||||
- major
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Version
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set Git author
|
||||
run: |
|
||||
git config user.name "Bot"
|
||||
git config user.email "bot@gorules.io"
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 22
|
||||
check-latest: true
|
||||
cache: yarn
|
||||
cache-dependency-path: 'bindings/nodejs/yarn.lock'
|
||||
|
||||
- name: 'Install dependencies'
|
||||
run: yarn install --immutable --mode=skip-build
|
||||
|
||||
- name: Lerna version
|
||||
run: yarn lerna version ${{ github.event.inputs.version }} --tag-version-prefix="nodejs-" --no-push --yes
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
with:
|
||||
github_token: ${{ secrets.PAT}}
|
||||
+71
-287
@@ -24,14 +24,18 @@ on:
|
||||
- 'core/**'
|
||||
- 'test-data/**'
|
||||
- '.github/workflows/node.yaml'
|
||||
# Stable publish is driven by the GitHub Release that release-please creates
|
||||
# for the `nodejs` component (tag `nodejs-v<version>`).
|
||||
release:
|
||||
types: [ published ]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: "!contains(github.event.head_commit.message, 'skip ci')"
|
||||
|
||||
# On release events, only build for this component's tag.
|
||||
if: "(github.event_name != 'release' || startsWith(github.event.release.tag_name, 'nodejs-v')) && !contains(github.event.head_commit.message, 'skip ci')"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -59,56 +63,45 @@ jobs:
|
||||
yarn build --target aarch64-apple-darwin
|
||||
strip -x ./*.node
|
||||
|
||||
- host: ubuntu-22.04
|
||||
- host: ubuntu-latest
|
||||
target: 'x86_64-unknown-linux-gnu'
|
||||
zig: true
|
||||
build: |
|
||||
set -e
|
||||
rustup install 1.88.0
|
||||
rustup default 1.88.0
|
||||
rustup target add x86_64-unknown-linux-gnu
|
||||
yarn build --target x86_64-unknown-linux-gnu
|
||||
strip ./*.node
|
||||
mkdir -p ../../target
|
||||
ln -sfn x86_64-unknown-linux-gnu ../../target/x86_64-unknown-linux-gnu.$GLIBC_VERSION
|
||||
yarn build --target x86_64-unknown-linux-gnu.$GLIBC_VERSION --cross-compile
|
||||
mv -f zen-engine.linux-x64-gnu.$GLIBC_VERSION.node zen-engine.linux-x64-gnu.node
|
||||
strip zen-engine.linux-x64-gnu.node
|
||||
|
||||
- host: ubuntu-22.04-arm
|
||||
- host: ubuntu-latest
|
||||
target: 'aarch64-unknown-linux-gnu'
|
||||
zig: true
|
||||
build: |
|
||||
set -e
|
||||
rustup install 1.88.0
|
||||
rustup default 1.88.0
|
||||
rustup target add aarch64-unknown-linux-gnu
|
||||
yarn build --target aarch64-unknown-linux-gnu
|
||||
strip ./*.node
|
||||
mkdir -p ../../target
|
||||
ln -sfn aarch64-unknown-linux-gnu ../../target/aarch64-unknown-linux-gnu.$GLIBC_VERSION
|
||||
yarn build --target aarch64-unknown-linux-gnu.$GLIBC_VERSION --cross-compile
|
||||
mv -f zen-engine.linux-arm64-gnu.$GLIBC_VERSION.node zen-engine.linux-arm64-gnu.node
|
||||
|
||||
- host: ubuntu-latest
|
||||
target: 'x86_64-unknown-linux-musl'
|
||||
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
||||
zig: true
|
||||
build: |
|
||||
set -e
|
||||
apk add --no-cache gcc musl-dev libgcc linux-headers
|
||||
cd bindings/nodejs
|
||||
export CC_x86_64_unknown_linux_musl=gcc
|
||||
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=gcc
|
||||
rustup install 1.88.0
|
||||
rustup default 1.88.0
|
||||
rustup target add x86_64-unknown-linux-musl
|
||||
yarn build --target x86_64-unknown-linux-musl
|
||||
yarn build --target x86_64-unknown-linux-musl --cross-compile
|
||||
strip ./*.node
|
||||
|
||||
- host: ubuntu-latest
|
||||
target: 'aarch64-unknown-linux-musl'
|
||||
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
|
||||
zig: true
|
||||
build: |
|
||||
set -e
|
||||
apk add --no-cache gcc musl-dev libgcc linux-headers
|
||||
cd bindings/nodejs
|
||||
# Set environment variables for the Rust toolchain
|
||||
export CC_aarch64_unknown_linux_musl=aarch64-linux-musl-gcc
|
||||
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc
|
||||
rustup install 1.88.0
|
||||
rustup default 1.88.0
|
||||
rustup target add aarch64-unknown-linux-musl
|
||||
yarn build --target aarch64-unknown-linux-musl
|
||||
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node
|
||||
yarn build --target aarch64-unknown-linux-musl --cross-compile
|
||||
|
||||
- host: ubuntu-latest
|
||||
target: 'wasm32-wasip1-threads'
|
||||
@@ -117,9 +110,6 @@ jobs:
|
||||
tar -xvf wasi-sdk-27.0-x86_64-linux.tar.gz
|
||||
build: |
|
||||
set -e
|
||||
rustup install 1.88.0
|
||||
rustup default 1.88.0
|
||||
rustup target add wasm32-wasip1-threads
|
||||
export WASI_SDK_PATH="$(pwd)/wasi-sdk-27.0-x86_64-linux"
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=2
|
||||
export TARGET_CXXFLAGS="--target=wasm32-wasi-threads --sysroot=$(pwd)/wasi-sdk-27.0-x86_64-linux/share/wasi-sysroot -pthread -mllvm -wasm-enable-sjlj -lsetjmp"
|
||||
@@ -137,7 +127,6 @@ jobs:
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
if: ${{ !matrix.settings.docker }}
|
||||
with:
|
||||
node-version: 22
|
||||
check-latest: true
|
||||
@@ -146,20 +135,16 @@ jobs:
|
||||
|
||||
- name: Install
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
if: ${{ !matrix.settings.docker }}
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: ${{ matrix.settings.target }}
|
||||
|
||||
- name: Cache cargo registry
|
||||
uses: actions/cache@v3
|
||||
- name: Rust cache + sccache (+ zig for linux legs)
|
||||
uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
target
|
||||
.cargo-cache
|
||||
key: ${{ matrix.settings.host }}-${{ matrix.settings.target }}-cargo-registry-v2
|
||||
shared-key: nodejs-${{ matrix.settings.target }}
|
||||
key: ${{ matrix.settings.target }}
|
||||
zig: ${{ matrix.settings.zig }}
|
||||
|
||||
- name: Setup toolchain
|
||||
run: ${{ matrix.settings.setup }}
|
||||
@@ -169,22 +154,13 @@ jobs:
|
||||
- name: 'Install dependencies'
|
||||
run: yarn install --immutable --mode=skip-build
|
||||
|
||||
- name: Build in docker
|
||||
uses: stefan-gorules/docker-run-action@v1
|
||||
if: ${{ matrix.settings.docker }}
|
||||
with:
|
||||
image: ${{ matrix.settings.docker }}
|
||||
options: --user 0:0 -v ${{ github.workspace }}/.cargo-cache/.cargo/git:/usr/local/cargo/git -v ${{ github.workspace }}/.cargo-cache/.cargo/registry:/usr/local/cargo/registry -v ${{ github.workspace }}:/build -w /build
|
||||
run: ${{ matrix.settings.build }}
|
||||
|
||||
- name: 'Build'
|
||||
run: ${{ matrix.settings.build }}
|
||||
if: ${{ !matrix.settings.docker }}
|
||||
shell: bash
|
||||
|
||||
- name: 'Check'
|
||||
if: ${{ matrix.settings.target != 'x86_64-pc-windows-msvc' }}
|
||||
run: ls -la
|
||||
shell: bash
|
||||
|
||||
- name: Upload artifact ${{ matrix.settings.target }}
|
||||
if: ${{ matrix.settings.target != 'wasm32-wasip1-threads' }}
|
||||
@@ -205,8 +181,8 @@ jobs:
|
||||
bindings/nodejs/zen-engine.wasi*
|
||||
bindings/nodejs/wasi-worker*
|
||||
|
||||
test-macOS-windows-binding:
|
||||
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
|
||||
test:
|
||||
name: Test ${{ matrix.settings.target }} - node@${{ matrix.node }}
|
||||
needs:
|
||||
- build
|
||||
defaults:
|
||||
@@ -215,14 +191,26 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: [ '20', '22' ]
|
||||
settings:
|
||||
# Native runners
|
||||
- host: macos-15-intel
|
||||
target: 'x86_64-apple-darwin'
|
||||
- host: macos-latest
|
||||
target: 'aarch64-apple-darwin'
|
||||
- host: windows-latest
|
||||
target: 'x86_64-pc-windows-msvc'
|
||||
node: [ '20', '22' ]
|
||||
# Linux: run inside the matching libc container; arm adds QEMU
|
||||
- host: ubuntu-latest
|
||||
target: 'x86_64-unknown-linux-gnu'
|
||||
image: 'node:{0}-slim'
|
||||
- host: ubuntu-latest
|
||||
target: 'x86_64-unknown-linux-musl'
|
||||
image: 'node:{0}-alpine'
|
||||
- host: ubuntu-latest
|
||||
target: 'aarch64-unknown-linux-musl'
|
||||
image: 'node:{0}-alpine'
|
||||
arm: true
|
||||
runs-on: ${{ matrix.settings.host }}
|
||||
|
||||
steps:
|
||||
@@ -238,7 +226,22 @@ jobs:
|
||||
cache: yarn
|
||||
cache-dependency-path: 'bindings/nodejs/yarn.lock'
|
||||
|
||||
- name: Set up QEMU
|
||||
if: ${{ matrix.settings.arm }}
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: arm64
|
||||
- if: ${{ matrix.settings.arm }}
|
||||
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
|
||||
- name: Install dependencies (arm64/musl)
|
||||
if: ${{ matrix.settings.arm }}
|
||||
run: |
|
||||
yarn config set supportedArchitectures.cpu "arm64"
|
||||
yarn config set supportedArchitectures.libc "musl"
|
||||
yarn install --immutable --mode=skip-build
|
||||
- name: Install dependencies
|
||||
if: ${{ !matrix.settings.arm }}
|
||||
run: yarn install --immutable --mode=skip-build
|
||||
|
||||
- name: Download artifacts
|
||||
@@ -255,254 +258,35 @@ jobs:
|
||||
run: yarn artifacts
|
||||
shell: bash
|
||||
|
||||
- name: Test bindings
|
||||
- name: Test bindings (native)
|
||||
if: ${{ !matrix.settings.image }}
|
||||
run: |
|
||||
yarn install
|
||||
yarn link
|
||||
yarn test
|
||||
test-linux-x64-gnu-binding:
|
||||
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
|
||||
needs:
|
||||
- build
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: [ '20', '22' ]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
check-latest: true
|
||||
cache: yarn
|
||||
cache-dependency-path: 'bindings/nodejs/yarn.lock'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install --immutable --mode=skip-build
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: bindings-x86_64-unknown-linux-gnu
|
||||
path: artifacts
|
||||
|
||||
- name: List artifacts
|
||||
run: |
|
||||
ls -la ../../artifacts
|
||||
shell: bash
|
||||
|
||||
- name: Create dirs
|
||||
run: yarn createNpmDirs
|
||||
shell: bash
|
||||
|
||||
- name: Move artifacts
|
||||
run: yarn artifacts
|
||||
shell: bash
|
||||
|
||||
- name: List folder
|
||||
run: ls ./
|
||||
shell: bash
|
||||
|
||||
- name: Test bindings
|
||||
- name: Test bindings (docker)
|
||||
if: ${{ matrix.settings.image }}
|
||||
uses: stefan-gorules/docker-run-action@v1
|
||||
with:
|
||||
image: node:${{ matrix.node }}-slim
|
||||
options: -v ${{ github.workspace }}:/workspace
|
||||
image: ${{ format(matrix.settings.image, matrix.node) }}
|
||||
options: ${{ matrix.settings.arm && format('--platform linux/arm64 -v {0}:/workspace', github.workspace) || format('-v {0}:/workspace', github.workspace) }}
|
||||
run: |
|
||||
cd workspace/bindings/nodejs
|
||||
yarn install
|
||||
yarn link
|
||||
yarn test
|
||||
test-linux-x64-musl-binding:
|
||||
name: Test bindings on Linux-x64-musl - node@${{ matrix.node }}
|
||||
needs:
|
||||
- build
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: [ '20', '22' ]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
check-latest: true
|
||||
cache: yarn
|
||||
cache-dependency-path: 'bindings/nodejs/yarn.lock'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install --immutable --mode=skip-build
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: bindings-x86_64-unknown-linux-musl
|
||||
path: artifacts
|
||||
|
||||
- name: Create dirs
|
||||
run: yarn createNpmDirs
|
||||
shell: bash
|
||||
|
||||
- name: Move artifacts
|
||||
run: yarn artifacts
|
||||
shell: bash
|
||||
|
||||
- name: List folder
|
||||
run: ls ./
|
||||
shell: bash
|
||||
|
||||
- name: Test bindings
|
||||
uses: stefan-gorules/docker-run-action@v1
|
||||
with:
|
||||
image: node:${{ matrix.node }}-alpine
|
||||
options: -v ${{ github.workspace }}:/workspace
|
||||
run: |
|
||||
cd workspace/bindings/nodejs
|
||||
yarn install
|
||||
yarn link
|
||||
yarn test
|
||||
test-linux-aarch64-musl-binding:
|
||||
name: Test bindings on Linux-aarch64-musl - node@${{ matrix.node }}
|
||||
needs:
|
||||
- build
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node: [ '20', '22' ]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
check-latest: true
|
||||
cache: yarn
|
||||
cache-dependency-path: 'bindings/nodejs/yarn.lock'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
yarn config set supportedArchitectures.cpu "arm64"
|
||||
yarn config set supportedArchitectures.libc "musl"
|
||||
yarn install --immutable --mode=skip-build
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
platforms: arm64
|
||||
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: bindings-aarch64-unknown-linux-musl
|
||||
path: artifacts
|
||||
|
||||
- name: Create dirs
|
||||
run: yarn createNpmDirs
|
||||
shell: bash
|
||||
|
||||
- name: Move artifacts
|
||||
run: yarn artifacts
|
||||
shell: bash
|
||||
|
||||
- name: List folder
|
||||
run: ls ./
|
||||
shell: bash
|
||||
|
||||
- name: Test bindings
|
||||
uses: stefan-gorules/docker-run-action@v1
|
||||
with:
|
||||
options: --platform linux/arm64 -v ${{ github.workspace }}:/workspace
|
||||
image: node:${{ matrix.node }}-alpine
|
||||
run: |
|
||||
cd workspace/bindings/nodejs
|
||||
yarn install
|
||||
yarn link
|
||||
yarn test
|
||||
# test-linux-aarch64-gnu-binding:
|
||||
# name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }}
|
||||
# needs:
|
||||
# - build
|
||||
# defaults:
|
||||
# run:
|
||||
# working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
# strategy:
|
||||
# fail-fast: false
|
||||
# matrix:
|
||||
# node: ['14', '16', '18']
|
||||
# runs-on: ubuntu-latest
|
||||
#
|
||||
# steps:
|
||||
# - uses: actions/checkout@v3
|
||||
# - run: docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||
# - name: List directory
|
||||
# run: |
|
||||
# ls -la &&
|
||||
# pwd
|
||||
#
|
||||
# - name: Download artifacts
|
||||
# uses: actions/download-artifact@v4
|
||||
# with:
|
||||
# name: bindings-aarch64-unknown-linux-gnu
|
||||
# path: artifacts
|
||||
#
|
||||
# - name: Install dependencies
|
||||
# run: |
|
||||
# yarn config set supportedArchitectures.cpu "arm64"
|
||||
# yarn config set supportedArchitectures.libc "glibc"
|
||||
# yarn install --immutable --mode=skip-build
|
||||
# - name: Move artifacts
|
||||
# run: yarn artifacts
|
||||
# shell: bash
|
||||
#
|
||||
# - name: List folder
|
||||
# run: ls ./
|
||||
# shell: bash
|
||||
#
|
||||
# - name: Setup and run tests
|
||||
# uses: stefan-gorules/docker-run-action@v1
|
||||
# with:
|
||||
# image: ghcr.io/napi-rs/napi-rs/nodejs:aarch64-${{ matrix.node }}
|
||||
# options: -v ${{ github.workspace }}:/workspace -w /workspace
|
||||
# run: |
|
||||
# ls -la
|
||||
# cd bindings/nodejs
|
||||
# yarn install
|
||||
# yarn link
|
||||
# yarn test
|
||||
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
# Publishes only on the release-please GitHub Release for the nodejs component.
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'nodejs-v')"
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
needs:
|
||||
- test-linux-x64-gnu-binding
|
||||
# - test-linux-x64-centos-7
|
||||
- test-linux-x64-musl-binding
|
||||
# - test-linux-aarch64-gnu-binding
|
||||
# - test-linux-arm-gnueabihf-binding
|
||||
- test-macOS-windows-binding
|
||||
- test-linux-aarch64-musl-binding
|
||||
- test
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
@@ -543,8 +327,8 @@ jobs:
|
||||
shell: bash
|
||||
|
||||
- name: Lerna publish
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish nodejs')"
|
||||
run: yarn lerna publish from-package --no-verify-access --yes
|
||||
# Prereleases (release-please beta window) go to the `next` dist-tag, not `latest`.
|
||||
run: yarn lerna publish from-package --dist-tag ${{ github.event.release.prerelease && 'next' || 'latest' }} --no-verify-access --yes
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
name: "Release: Python"
|
||||
|
||||
env:
|
||||
WORKING_DIRECTORY: bindings/python
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Version'
|
||||
required: true
|
||||
default: 'patch'
|
||||
type: choice
|
||||
options:
|
||||
- patch
|
||||
- minor
|
||||
- major
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Version
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set Git author
|
||||
run: |
|
||||
git config user.name "Bot"
|
||||
git config user.email "bot@gorules.io"
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: 'Install dependencies'
|
||||
run: pip install --upgrade bump2version
|
||||
|
||||
- name: Bumpversion
|
||||
run: bumpversion ${{ github.event.inputs.version }} --allow-dirty --tag-name "python-v{new_version}"
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
with:
|
||||
github_token: ${{ secrets.PAT}}
|
||||
@@ -19,100 +19,71 @@ on:
|
||||
- 'core/**'
|
||||
- 'test-data/**'
|
||||
- '.github/workflows/python.yaml'
|
||||
# Stable publish is driven by the GitHub Release that release-please creates
|
||||
# for the `python` component (tag `python-v<version>`).
|
||||
release:
|
||||
types: [ published ]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
linux:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
# The build jobs skip on release events for other components (release-please fires
|
||||
# one `release` event per component; only `python-v*` should build/publish here).
|
||||
wheels:
|
||||
if: "github.event_name != 'release' || startsWith(github.event.release.tag_name, 'python-v')"
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [ x86_64, aarch64 ]
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
platform: linux
|
||||
target: x86_64
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml --zig --compatibility manylinux_2_28
|
||||
manylinux: auto
|
||||
- os: ubuntu-latest
|
||||
platform: linux
|
||||
target: aarch64
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml --zig --compatibility manylinux_2_28
|
||||
manylinux: auto
|
||||
- os: windows-latest
|
||||
platform: windows
|
||||
target: x64
|
||||
architecture: x64
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
- os: macos-latest
|
||||
platform: macos
|
||||
target: x86_64
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
- os: macos-latest
|
||||
platform: macos
|
||||
target: aarch64
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.13'
|
||||
architecture: ${{ matrix.architecture }}
|
||||
|
||||
- name: Build wheels
|
||||
uses: PyO3/maturin-action@v1
|
||||
with:
|
||||
target: ${{ matrix.target }}
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
manylinux: 2_28
|
||||
before-script-linux: |
|
||||
if command -v dnf > /dev/null; then
|
||||
dnf install -y patch
|
||||
elif command -v apt-get > /dev/null; then
|
||||
apt-get update && apt-get install -y patch
|
||||
fi
|
||||
|
||||
- name: Upload wheels
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: wheels-linux-${{ matrix.target }}
|
||||
path: dist
|
||||
|
||||
windows:
|
||||
runs-on: windows-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
strategy:
|
||||
matrix:
|
||||
target: [ x64 ]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.13'
|
||||
architecture: ${{ matrix.target }}
|
||||
- name: Build wheels
|
||||
uses: PyO3/maturin-action@v1
|
||||
with:
|
||||
target: ${{ matrix.target }}
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
args: ${{ matrix.args }}
|
||||
manylinux: ${{ matrix.manylinux || 'auto' }}
|
||||
sccache: 'true'
|
||||
- name: Upload wheels
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: wheels-windows-${{ matrix.target }}
|
||||
path: dist
|
||||
|
||||
macos:
|
||||
runs-on: macos-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
strategy:
|
||||
matrix:
|
||||
target: [ x86_64, aarch64 ]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.13'
|
||||
- name: Build wheels
|
||||
uses: PyO3/maturin-action@v1
|
||||
with:
|
||||
target: ${{ matrix.target }}
|
||||
args: --release --out dist --find-interpreter -m bindings/python/Cargo.toml
|
||||
sccache: 'true'
|
||||
- name: Upload wheels
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: wheels-macos-${{ matrix.target }}
|
||||
name: wheels-${{ matrix.platform }}-${{ matrix.target }}
|
||||
path: dist
|
||||
|
||||
sdist:
|
||||
if: "github.event_name != 'release' || startsWith(github.event.release.tag_name, 'python-v')"
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
@@ -133,10 +104,10 @@ jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
needs: [ linux, windows, macos, sdist ]
|
||||
environment: release
|
||||
# Publishes only on the release-please GitHub Release for the python component.
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'python-v')"
|
||||
needs: [ wheels, sdist ]
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
@@ -144,7 +115,6 @@ jobs:
|
||||
merge-multiple: true
|
||||
|
||||
- name: Publish to PyPI
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish python')"
|
||||
uses: PyO3/maturin-action@v1
|
||||
env:
|
||||
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
name: Release Please
|
||||
|
||||
# Single source of truth for STABLE version bumps + changelogs + tags.
|
||||
#
|
||||
# On every push to master it maintains one "Release PR" per component
|
||||
# (separate-pull-requests). Merging a Release PR:
|
||||
# * bumps the version(s) in the relevant Cargo.toml / package.json,
|
||||
# * updates the CHANGELOG,
|
||||
# * creates a git tag + GitHub Release for that component.
|
||||
#
|
||||
# The GitHub Release is what triggers the matching publish workflow
|
||||
# (node.yaml / python.yaml / rust.yaml / uniffi.yaml) via its
|
||||
# `on: release` trigger. We use a PAT (not GITHUB_TOKEN) so the created
|
||||
# release is allowed to trigger those downstream workflows.
|
||||
#
|
||||
# Tags (include-component-in-tag + tag-separator "-"):
|
||||
# core -> zen-engine-v<ver> (+ the 5 linked core crates), python -> python-v<ver>,
|
||||
# nodejs -> nodejs-v<ver>, uniffi -> uniffi-v<ver>
|
||||
#
|
||||
# Betas use this SAME flow: during a prerelease window set `prerelease: true`
|
||||
# + `prerelease-type: "beta"` on the components in release-please-config.json,
|
||||
# and merges cut X.Y.Z-beta.N for every component (incl. uniffi). The publish
|
||||
# workflows pick npm/dist-tag behaviour from `github.event.release.prerelease`.
|
||||
# (One-time per-component `release-as: 1.0.0-beta.0` bootstraps the v1 base.)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
release-please:
|
||||
name: Release Please
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: googleapis/release-please-action@v4
|
||||
with:
|
||||
token: ${{ secrets.PAT }}
|
||||
config-file: release-please-config.json
|
||||
manifest-file: .release-please-manifest.json
|
||||
+12
-50
@@ -9,9 +9,7 @@ on:
|
||||
- 'bindings/**'
|
||||
- 'examples/**'
|
||||
- '.github/workflows/python.yaml'
|
||||
- '.github/workflows/python-version-bump.yaml'
|
||||
- '.github/workflows/node.yaml'
|
||||
- '.github/workflows/node-version-bump.yaml'
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
@@ -21,9 +19,11 @@ on:
|
||||
- 'bindings/**'
|
||||
- 'examples/**'
|
||||
- '.github/workflows/python.yaml'
|
||||
- '.github/workflows/python-version-bump.yaml'
|
||||
- '.github/workflows/node.yaml'
|
||||
- '.github/workflows/node-version-bump.yaml'
|
||||
# Crates.io publish is driven by the GitHub Release that release-please
|
||||
# creates for the linked `core` group (anchored on tag `zen-engine-v<version>`).
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
@@ -34,7 +34,7 @@ defaults:
|
||||
shell: bash
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
@@ -51,50 +51,13 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Rust
|
||||
run: rustup install 1.80
|
||||
run: rustup update stable
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: rust-test-${{ matrix.os }}
|
||||
- run: cargo test --workspace --all-features --exclude zen-ffi --exclude zen-nodejs --exclude zen-python
|
||||
- run: cargo test --workspace --all-features --exclude zen-ffi --exclude zen-nodejs --exclude zen-python --release
|
||||
- name: Test without arbitrary_precision
|
||||
run: cargo test --workspace --exclude zen-ffi --exclude zen-nodejs --exclude zen-python
|
||||
- name: Test without arbitrary_precision (release)
|
||||
run: cargo test --workspace --exclude zen-ffi --exclude zen-nodejs --exclude zen-python --release
|
||||
|
||||
build:
|
||||
name: cargo +${{ matrix.rust }} build
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
rust:
|
||||
- stable
|
||||
- beta
|
||||
- nightly
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Rust
|
||||
run: rustup update ${{ matrix.rust }} && rustup default ${{ matrix.rust }}
|
||||
- run: cargo build --tests
|
||||
|
||||
bench:
|
||||
name: cargo bench
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Rust
|
||||
run: rustup update stable
|
||||
- run: cargo bench --workspace
|
||||
|
||||
miri:
|
||||
name: cargo miri test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install Rust
|
||||
run: rustup toolchain install nightly-2025-05-08 --component miri && rustup default nightly-2025-05-08
|
||||
- run: cargo miri test --workspace --all-features
|
||||
env:
|
||||
MIRIFLAGS: -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation
|
||||
RUSTFLAGS: ${{ env.RUSTFLAGS }} -Z randomize-layout
|
||||
|
||||
fmt:
|
||||
name: Cargo FMT
|
||||
@@ -108,12 +71,11 @@ jobs:
|
||||
release:
|
||||
name: Cargo Release
|
||||
runs-on: ubuntu-latest
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish core')"
|
||||
environment: release
|
||||
# Publishes only on the release-please GitHub Release for the core group.
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'zen-engine-v')"
|
||||
needs:
|
||||
- test
|
||||
- build
|
||||
- bench
|
||||
- miri
|
||||
- fmt
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
name: "Release: Uniffi"
|
||||
|
||||
env:
|
||||
WORKING_DIRECTORY: bindings/uniffi
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Version'
|
||||
required: true
|
||||
default: 'patch'
|
||||
type: choice
|
||||
options:
|
||||
- patch
|
||||
- minor
|
||||
- major
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Version
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.WORKING_DIRECTORY }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set Git author
|
||||
run: |
|
||||
git config user.name "Bot"
|
||||
git config user.email "bot@gorules.io"
|
||||
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: 'Install dependencies'
|
||||
run: pip install --upgrade bump2version
|
||||
|
||||
- name: Bumpversion
|
||||
run: bumpversion ${{ github.event.inputs.version }} --allow-dirty --tag-name "uniffi-v{new_version}"
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
with:
|
||||
github_token: ${{ secrets.PAT}}
|
||||
@@ -19,6 +19,10 @@ on:
|
||||
- 'core/**'
|
||||
- 'test-data/**'
|
||||
- '.github/workflows/uniffi.yaml'
|
||||
# Stable publish is driven by the GitHub Release that release-please creates
|
||||
# for the `uniffi` component (tag `uniffi-v<version>`).
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -67,7 +71,18 @@ jobs:
|
||||
with:
|
||||
target: ${{ matrix.settings.target }}
|
||||
|
||||
- name: Build
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-${{ matrix.settings.target }}
|
||||
zig: ${{ matrix.settings.host == 'ubuntu-latest' }}
|
||||
|
||||
# Linux targets (incl. s390x) build on the host via zig; mac/windows build natively.
|
||||
- name: Build (zig, linux)
|
||||
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
|
||||
working-directory: ${{ env.UNIFFI_DIRECTORY }}
|
||||
run: cargo zigbuild --lib --release --target ${{ matrix.settings.target }}.${{ env.GLIBC_VERSION }} ${{ matrix.settings.extra_args }}
|
||||
- name: Build (native)
|
||||
if: ${{ matrix.settings.host != 'ubuntu-latest' }}
|
||||
uses: houseabsolute/actions-rust-cross@v1
|
||||
with:
|
||||
working-directory: ${{ env.UNIFFI_DIRECTORY }}
|
||||
@@ -83,8 +98,9 @@ jobs:
|
||||
|
||||
release-java-kotlin:
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
needs: [ build ]
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.UNIFFI_DIRECTORY }}
|
||||
@@ -100,6 +116,10 @@ jobs:
|
||||
- name: Setup Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-java-kotlin
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
@@ -152,10 +172,11 @@ jobs:
|
||||
|
||||
release-csharp:
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
needs: [ build ]
|
||||
permissions:
|
||||
id-token: write # Required for OIDC
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.UNIFFI_DIRECTORY }}
|
||||
@@ -171,6 +192,10 @@ jobs:
|
||||
- name: Setup Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-csharp
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
@@ -260,6 +285,10 @@ jobs:
|
||||
with:
|
||||
target: ${{ matrix.settings.target }}
|
||||
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-ios-${{ matrix.settings.target }}
|
||||
|
||||
- name: Build iOS
|
||||
run: |
|
||||
if [ "${{ matrix.settings.target }}" = "aarch64-apple-ios-sim" ]; then
|
||||
@@ -282,6 +311,13 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-swift
|
||||
|
||||
- name: Download iOS artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
@@ -297,9 +333,6 @@ jobs:
|
||||
cp target-ios/ios-x86-64/libzen_uniffi.a target/x86_64-apple-ios/release/
|
||||
cp target-ios/ios-aarch64-sim/libzen_uniffi.a target/aarch64-apple-ios-sim/release/
|
||||
|
||||
- name: Setup Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Generate Swift bindings
|
||||
run: |
|
||||
cargo run --bin uniffi-bindgen -- generate \
|
||||
@@ -366,8 +399,9 @@ jobs:
|
||||
release-ios:
|
||||
name: Release iOS
|
||||
runs-on: macos-latest
|
||||
environment: release
|
||||
needs: [ create-xcframework ]
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
|
||||
steps:
|
||||
- name: Checkout zen-ios
|
||||
@@ -455,6 +489,10 @@ jobs:
|
||||
- name: Setup Rust Toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- uses: ./.github/actions/setup-rust
|
||||
with:
|
||||
shared-key: uniffi-android
|
||||
|
||||
- name: Install cargo-ndk
|
||||
run: cargo install cargo-ndk
|
||||
|
||||
@@ -466,7 +504,7 @@ jobs:
|
||||
add-to-path: true
|
||||
|
||||
- name: Add Rust Android targets (all)
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
run: |
|
||||
rustup target add aarch64-linux-android
|
||||
rustup target add armv7-linux-androideabi
|
||||
@@ -474,12 +512,12 @@ jobs:
|
||||
rustup target add x86_64-linux-android
|
||||
|
||||
- name: Add Rust Android targets (arm64 only)
|
||||
if: "!startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name != 'release' || !startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
run: |
|
||||
rustup target add aarch64-linux-android
|
||||
|
||||
- name: Build for Android (all targets)
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
env:
|
||||
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
@@ -489,7 +527,7 @@ jobs:
|
||||
build -p zen-uniffi --release --features bindgen
|
||||
|
||||
- name: Build for Android (arm64 only)
|
||||
if: "!startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name != 'release' || !startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
env:
|
||||
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||
run: |
|
||||
@@ -643,8 +681,9 @@ jobs:
|
||||
|
||||
release-android:
|
||||
runs-on: ubuntu-latest
|
||||
environment: release
|
||||
needs: [ package-android-aar ]
|
||||
if: "startsWith(github.event.head_commit.message, 'chore(release): publish uniffi')"
|
||||
if: "github.event_name == 'release' && startsWith(github.event.release.tag_name, 'uniffi-v')"
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ${{ env.UNIFFI_DIRECTORY }}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"core/engine": "0.55.1",
|
||||
"core/expression": "0.55.1",
|
||||
"core/types": "0.55.1",
|
||||
"core/template": "0.55.1",
|
||||
"core/macros": "0.55.1",
|
||||
"core/expression_repl": "0.55.1",
|
||||
"bindings/nodejs": "0.54.0",
|
||||
"bindings/python": "0.53.0",
|
||||
"bindings/uniffi": "0.7.2",
|
||||
"bindings/c": "0.20.0"
|
||||
}
|
||||
Generated
+1
-1
@@ -5007,7 +5007,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zen-ffi"
|
||||
version = "0.1.0"
|
||||
version = "0.20.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cbindgen",
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"extends": ["plugin:@typescript-eslint/recommended"],
|
||||
"parserOptions": { "ecmaVersion": 2018, "sourceType": "module" },
|
||||
"rules": {}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
# Ignore artifacts:
|
||||
dist
|
||||
node_modules
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": true,
|
||||
"printWidth": 120,
|
||||
"tabWidth": 2
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
# Zen Cargo action
|
||||
|
||||
This action bumps the Cargo version of the core Engine.
|
||||
|
||||
## Inputs
|
||||
|
||||
### `version`
|
||||
|
||||
**Required** The bump of the version, one of `"patch"`, `"minor"`, `"major"`. Default `"patch"`.
|
||||
|
||||
### `tag-prefix`
|
||||
|
||||
**Optional** The prefix of the tag. Default `"v"`.
|
||||
|
||||
## Outputs
|
||||
|
||||
### `version`
|
||||
|
||||
The new version in the form of `x.x.x`.
|
||||
|
||||
## Developmentw
|
||||
```bash
|
||||
npm i
|
||||
#dev
|
||||
npm run dev
|
||||
|
||||
#build
|
||||
npm run build
|
||||
```
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
name: 'Zen Cargo Action'
|
||||
description: 'Bump Zen Engine version'
|
||||
inputs:
|
||||
version:
|
||||
description: 'One of patch | minor | major'
|
||||
required: true
|
||||
default: 'patch'
|
||||
commit-message:
|
||||
description: 'Commit message'
|
||||
required: true
|
||||
default: 'chore(release): publish core'
|
||||
tag-prefix:
|
||||
description: 'Prefix of the tag'
|
||||
required: true
|
||||
default: 'v'
|
||||
outputs:
|
||||
version:
|
||||
description: 'Output version'
|
||||
tag:
|
||||
description: 'Output tag'
|
||||
runs:
|
||||
using: 'node16'
|
||||
main: 'dist/index.js'
|
||||
-34142
File diff suppressed because one or more lines are too long
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
||||
module.exports = {
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'node',
|
||||
testMatch: ["**/?(*.)+(spec|test).ts?(x)"],
|
||||
extensionsToTreatAsEsm: []
|
||||
};
|
||||
-5491
File diff suppressed because it is too large
Load Diff
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"name": "cargo-version-action",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "dist/index.js",
|
||||
"author": "GoRules <hi@gorules.io> (https://gorules.io)",
|
||||
"homepage": "https://github.com/gorules/zen",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "ncc run src/index.ts",
|
||||
"build": "ncc build src/index.ts -o dist",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"test": "jest",
|
||||
"format": "npx prettier --write src/**/*.ts"
|
||||
},
|
||||
"keywords": [],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.11.1",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/github": "^6.0.0",
|
||||
"semver": "^7.7.1",
|
||||
"toml": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "^29.7.0",
|
||||
"@types/node": "^22.14.1",
|
||||
"@types/semver": "^7.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.30.1",
|
||||
"@typescript-eslint/parser": "^8.30.1",
|
||||
"@vercel/ncc": "^0.38.3",
|
||||
"eslint": "^9.24.0",
|
||||
"jest": "^29.7.0",
|
||||
"prettier": "^3.5.3",
|
||||
"ts-jest": "^29.3.2",
|
||||
"typescript": "^5.8.3"
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
import * as toml from 'toml';
|
||||
|
||||
type UpdateCargoOptions = {
|
||||
version: string;
|
||||
};
|
||||
|
||||
const versionRegex = /version = "[0-9]+\.[0-9]+\.[0-9]+"$/im;
|
||||
const zenDepLine = /^.*zen-(?:expression|tmpl|macros|types)\s*=\s*\{.*}.*$/gim;
|
||||
const depVersionRegex = /version\s*=\s*"[0-9]+\.[0-9]+\.[0-9]+"/;
|
||||
|
||||
export const updateCargoContents = (contents: string, { version }: UpdateCargoOptions): string => {
|
||||
return contents
|
||||
.replace(versionRegex, `version = "${version}"`)
|
||||
.replace(zenDepLine, (line) => line.replace(depVersionRegex, `version = "${version}"`));
|
||||
};
|
||||
|
||||
export const getCargoVersion = (contents: string): string => {
|
||||
const t = toml.parse(contents);
|
||||
return t?.package?.version;
|
||||
};
|
||||
@@ -1,91 +0,0 @@
|
||||
import { describe } from 'node:test';
|
||||
import { expect, test } from '@jest/globals';
|
||||
import { getCargoVersion, updateCargoContents } from './cargo';
|
||||
import { inc, ReleaseType } from 'semver';
|
||||
import * as fs from 'fs/promises';
|
||||
import * as path from 'path';
|
||||
|
||||
// language=Toml
|
||||
const makeToml = ({ version }): string => `
|
||||
[package]
|
||||
authors = ["GoRules Team <bot@gorules.io>"]
|
||||
description = "Business rules engine"
|
||||
name = "zen-engine"
|
||||
license = "MIT"
|
||||
version = "${version}"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/gorules/zen.git"
|
||||
|
||||
[dependencies]
|
||||
async-recursion = "1.0.4"
|
||||
anyhow = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
async-trait = { workspace = true }
|
||||
serde_json = { workspace = true, features = ["arbitrary_precision"] }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_v8 = { version = "0.88.0" }
|
||||
once_cell = { version = "1.17.1" }
|
||||
futures = "0.3.27"
|
||||
v8 = { version = "0.66.0" }
|
||||
zen-expression = { path = "../expression", version = "${version}" }
|
||||
zen-tmpl = { path = "../template", version = "${version}" }
|
||||
`;
|
||||
|
||||
describe('GitHub Action', () => {
|
||||
test('Bumps package', () => {
|
||||
const version = '0.2.0';
|
||||
const initialToml = makeToml({ version });
|
||||
|
||||
const releases: ReleaseType[] = ['major', 'minor', 'patch'];
|
||||
for (const release of releases) {
|
||||
const newVersion = inc(version, release);
|
||||
const expectedToml = makeToml({ version: newVersion });
|
||||
|
||||
expect(updateCargoContents(initialToml, { version: newVersion })).toEqual(expectedToml);
|
||||
}
|
||||
});
|
||||
|
||||
test('Extracts package version', () => {
|
||||
const versions = ['0.1.0', '0.2.0', '0.3.0'];
|
||||
for (const version of versions) {
|
||||
const versionedToml = makeToml({ version });
|
||||
expect(getCargoVersion(versionedToml)).toEqual(version);
|
||||
}
|
||||
});
|
||||
|
||||
test('Preserves default-features and features flags', () => {
|
||||
const tomlWithFlags = `
|
||||
[package]
|
||||
name = "zen-engine"
|
||||
version = "0.53.0"
|
||||
|
||||
[dependencies]
|
||||
zen-types = { path = "../types", version = "0.53.0", default-features = false }
|
||||
zen-expression = { path = "../expression", version = "0.53.0", default-features = false }
|
||||
zen-tmpl = { path = "../template", version = "0.53.0", default-features = false }
|
||||
zen-macros = { path = "../macros", version = "0.53.0" }
|
||||
`;
|
||||
|
||||
const expected = `
|
||||
[package]
|
||||
name = "zen-engine"
|
||||
version = "1.0.0"
|
||||
|
||||
[dependencies]
|
||||
zen-types = { path = "../types", version = "1.0.0", default-features = false }
|
||||
zen-expression = { path = "../expression", version = "1.0.0", default-features = false }
|
||||
zen-tmpl = { path = "../template", version = "1.0.0", default-features = false }
|
||||
zen-macros = { path = "../macros", version = "1.0.0" }
|
||||
`;
|
||||
|
||||
expect(updateCargoContents(tomlWithFlags, { version: '1.0.0' })).toEqual(expected);
|
||||
});
|
||||
|
||||
test('Points to right directory', async () => {
|
||||
const escapeDir = (count: number) => '../'.repeat(count);
|
||||
const coreDirectory = path.join(__dirname, escapeDir(3), 'core');
|
||||
|
||||
const folders = await fs.readdir(coreDirectory);
|
||||
expect(folders).toEqual(expect.arrayContaining(['engine', 'expression']));
|
||||
});
|
||||
});
|
||||
@@ -1,60 +0,0 @@
|
||||
import * as core from '@actions/core';
|
||||
import * as exec from '@actions/exec';
|
||||
|
||||
import * as fs from 'fs/promises';
|
||||
import * as path from 'path';
|
||||
import { inc, ReleaseType } from 'semver';
|
||||
import { getCargoVersion, updateCargoContents } from './cargo';
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
const versionBump = core.getInput('version') || 'patch';
|
||||
const tagPrefix = core.getInput('tag-prefix') || 'v';
|
||||
const commitMessage = core.getInput('commit-message') || 'chore(release): publish core';
|
||||
|
||||
const workspace = (process?.env?.GITHUB_WORKSPACE as string) || '../../';
|
||||
const project = 'engine';
|
||||
const projectsFolder = 'core';
|
||||
|
||||
const directory = await fs.readdir(path.join(...[workspace, projectsFolder]), { withFileTypes: true });
|
||||
const folders = directory.filter((dirent) => dirent.isDirectory()).map((dirent) => dirent.name);
|
||||
|
||||
const cargoFilePath = path.join(...[workspace, projectsFolder, project, 'Cargo.toml']);
|
||||
const cargoFile = await fs.readFile(cargoFilePath, 'utf-8');
|
||||
const currentVersion = getCargoVersion(cargoFile);
|
||||
console.log(`Reading current version ${currentVersion}, from ${cargoFilePath}`);
|
||||
|
||||
const version = inc(currentVersion, versionBump as ReleaseType);
|
||||
console.log(`New version: ${version}`);
|
||||
|
||||
await Promise.all(
|
||||
folders.map(async (folder) => {
|
||||
const cargoFilePath = path.join(...[workspace, projectsFolder, folder, 'Cargo.toml']);
|
||||
const cargoFile = await fs.readFile(cargoFilePath, 'utf-8');
|
||||
const updatedCargoFile = updateCargoContents(cargoFile, { version });
|
||||
|
||||
console.log(`Writing new version to: ${cargoFilePath}`);
|
||||
await fs.writeFile(cargoFilePath, updatedCargoFile);
|
||||
}),
|
||||
);
|
||||
|
||||
const tag = `${tagPrefix}${version}`;
|
||||
const tagArgs = ['tag', '-a', tag];
|
||||
if (commitMessage) {
|
||||
tagArgs.push('-m');
|
||||
tagArgs.push(commitMessage);
|
||||
}
|
||||
|
||||
await exec.exec('git', tagArgs);
|
||||
await exec.exec('git', ['add', '.']);
|
||||
await exec.exec('git', ['commit', '-m', commitMessage]);
|
||||
console.log(`New tag ${tag}`);
|
||||
|
||||
core.setOutput('version', version);
|
||||
core.setOutput('tag', tag);
|
||||
} catch (error) {
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2015",
|
||||
"moduleResolution": "node"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "zen-ffi"
|
||||
version = "0.1.0"
|
||||
version = "0.20.0"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
publish = false
|
||||
|
||||
@@ -12,7 +12,7 @@ crate-type = ["cdylib"]
|
||||
[dependencies]
|
||||
anyhow = { workspace = true }
|
||||
either = "1"
|
||||
pyo3 = { version = "0.25", features = ["anyhow", "serde", "either"] }
|
||||
pyo3 = { version = "0.25", features = ["anyhow", "serde", "either", "abi3-py38"] }
|
||||
pyo3-async-runtimes = { version = "0.25", features = ["tokio-runtime", "attributes"] }
|
||||
pythonize = "0.25"
|
||||
json_dotpath = { workspace = true }
|
||||
|
||||
@@ -35,8 +35,8 @@ impl<'py> FromPyObject<'py> for PyZenDecisionContentJson {
|
||||
}
|
||||
|
||||
if let Ok(b) = ob.downcast::<PyString>() {
|
||||
let str = b.to_str()?;
|
||||
let content = serde_json::from_str(str).context("Invalid JSON")?;
|
||||
let str = b.to_cow()?;
|
||||
let content = serde_json::from_str(&str).context("Invalid JSON")?;
|
||||
|
||||
return Ok(Self(PyZenDecisionContent(Arc::new(content))));
|
||||
}
|
||||
|
||||
@@ -52,9 +52,9 @@ impl<'py> IntoPyObject<'py> for PyValue {
|
||||
impl<'py> FromPyObject<'py> for PyValue {
|
||||
fn extract_bound(ob: &Bound<'py, PyAny>) -> PyResult<Self> {
|
||||
if let Ok(s) = ob.downcast::<PyString>() {
|
||||
let str_slice = s.to_str()?;
|
||||
let str_slice = s.to_cow()?;
|
||||
|
||||
let var = serde_json::from_str(str_slice).context("Invalid JSON")?;
|
||||
let var = serde_json::from_str(&str_slice).context("Invalid JSON")?;
|
||||
return Ok(PyValue(var));
|
||||
}
|
||||
|
||||
|
||||
@@ -62,9 +62,9 @@ impl<'py> IntoPyObject<'py> for PyVariable {
|
||||
impl<'py> FromPyObject<'py> for PyVariable {
|
||||
fn extract_bound(ob: &Bound<'py, PyAny>) -> PyResult<Self> {
|
||||
if let Ok(s) = ob.downcast::<PyString>() {
|
||||
let str_slice = s.to_str()?;
|
||||
let str_slice = s.to_cow()?;
|
||||
|
||||
let var = serde_json::from_str(str_slice).context("Invalid JSON")?;
|
||||
let var = serde_json::from_str(&str_slice).context("Invalid JSON")?;
|
||||
return Ok(PyVariable(var));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
|
||||
"separate-pull-requests": true,
|
||||
"include-component-in-tag": true,
|
||||
"tag-separator": "-",
|
||||
"pull-request-title-pattern": "chore(release): ${component} ${version}",
|
||||
"release-as": "1.0.0-beta.0",
|
||||
"prerelease": true,
|
||||
"prerelease-type": "beta",
|
||||
"versioning": "prerelease",
|
||||
"changelog-sections": [
|
||||
{ "type": "feat", "section": "Features" },
|
||||
{ "type": "fix", "section": "Bug Fixes" },
|
||||
{ "type": "perf", "section": "Performance" },
|
||||
{ "type": "deps", "section": "Dependencies" },
|
||||
{ "type": "chore", "section": "Miscellaneous", "hidden": true }
|
||||
],
|
||||
"plugins": [
|
||||
{ "type": "cargo-workspace", "merge": false },
|
||||
{
|
||||
"type": "linked-versions",
|
||||
"groupName": "core",
|
||||
"components": [
|
||||
"zen-engine",
|
||||
"zen-expression",
|
||||
"zen-types",
|
||||
"zen-tmpl",
|
||||
"zen-macros",
|
||||
"expression_repl"
|
||||
]
|
||||
}
|
||||
],
|
||||
"packages": {
|
||||
"core/engine": { "release-type": "rust", "component": "zen-engine" },
|
||||
"core/expression": { "release-type": "rust", "component": "zen-expression" },
|
||||
"core/types": { "release-type": "rust", "component": "zen-types" },
|
||||
"core/template": { "release-type": "rust", "component": "zen-tmpl" },
|
||||
"core/macros": { "release-type": "rust", "component": "zen-macros" },
|
||||
"core/expression_repl": { "release-type": "rust", "component": "expression_repl" },
|
||||
"bindings/nodejs": { "release-type": "node", "component": "nodejs" },
|
||||
"bindings/python": { "release-type": "rust", "component": "python", "package-name": "zen-engine-python" },
|
||||
"bindings/uniffi": { "release-type": "rust", "component": "uniffi" },
|
||||
"bindings/c": { "release-type": "rust", "component": "go" }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user