Build and release manager for ARW CLI package. Handles local development, testing, building, documentation, version tagging, and publishing to npm and crates.io...
Build, test, and release orchestration for the ARW (Agent-Ready Web) CLI package supporting multiple build targets and publishing to npm and crates.io.
The ARW CLI supports three distinct build targets:
| Target | Command | Output | Use Case |
|---|---|---|---|
| napi-rs | npm run build |
arw-cli.darwin-arm64.node |
Node.js native addon (require in JS) |
| Standalone CLI | cargo build --release --features native |
target/release/arw |
Executable binary |
| WASM | npm run build:wasm |
wasm-pkg/ |
Browser/bundler usage |
cargo install wasm-packFor publishing only:
# Build napi-rs native addon (Node.js bindings)
npm install && npm run build
# Build standalone CLI binary
cargo build --release --features native
./target/release/arw --version
# Run tests
npm test && npm run test:wasm && cargo test
# 1. Verify, test, and build (dry run)
./scripts/quick-publish.sh --dry-run
# 2. If checks pass, publish
./scripts/quick-publish.sh
This builds a native Node.js addon using napi-rs. The result is a .node file that can be require()'d from JavaScript.
npm run build # Release build
npm run build:debug # Debug build (faster)
# Test the module
node -e "const cli = require('./index.js'); console.log(cli.getVersionInfo());"
Exports: validateManifest, checkCompatibility, generateManifest, getVersionInfo
This builds a standalone executable that can be run directly from the command line.
cargo build --release --features native
# Run directly
./target/release/arw --version
./target/release/arw --help
./target/release/arw validate path/to/manifest.json
./target/release/arw init
./target/release/arw generate
CLI Commands: init, generate, sitemap, validate, serve, scan, policy, robots, watch, actions, build
For browser and bundler usage.
npm run build:wasm # Node.js target
npm run build:wasm:web # Browser target
npm run build:wasm:bundler # Bundler target
# Test WASM
npm run test:wasm
# Install dependencies
npm install
# Build native addon (napi-rs)
npm run build # Release
npm run build:debug # Debug (faster iteration)
# Test module loading
node -e "const {validateManifest, getVersionInfo} = require('./index.js'); console.log(getVersionInfo());"
# Link for testing in other projects
npm link
# Debug build (fast compilation)
cargo build --features native
# Run without installing
cargo run --features native -- --version
cargo run --features native -- --help
cargo run --features native -- validate ./test-manifest.json
# Release build
cargo build --release --features native
./target/release/arw --version
# Install globally
cargo install --path . --features native
arw --version
# Watch mode (requires cargo-watch)
cargo install cargo-watch
cargo watch -x "run --features native -- --help"
# Build WASM
npm run build:wasm
# Run WASM tests
npm run test:wasm
src/cargo test / npm run test:wasmnpm run buildcargo build --release --features nativenpm run build:wasm# Run Node.js native tests
npm test
# Run WASM-specific tests
npm run test:wasm
# Format check
cargo fmt --check
# Linting with clippy
cargo clippy -- -D warnings
# Run all tests
cargo test
# Run with output visible
cargo test -- --nocapture
# All checks
cargo fmt --check && cargo clippy -- -D warnings && cargo test
# Release build (optimized)
npm run build
# Debug build (faster compilation)
npm run build:debug
Output: arw-cli.<platform>.node + index.js + index.d.ts
# Debug build
cargo build --features native
# Release build (optimized)
cargo build --release --features native
Output: target/release/arw or target/debug/arw
# Node.js WASM
npm run build:wasm
# Browser WASM
npm run build:wasm:web
# Bundler WASM
npm run build:wasm:bundler
Output: wasm-pkg/nodejs/, wasm-pkg/web/, wasm-pkg/bundler/
cargo build --release --features native --target x86_64-unknown-linux-gnu
cargo build --release --features native --target x86_64-apple-darwin
cargo build --release --features native --target aarch64-apple-darwin
cargo build --release --features native --target x86_64-pc-windows-msvc
Run before any release:
./scripts/verify-package.sh
This checks:
| Change Type | Version Bump | Example |
|---|---|---|
| Breaking changes | MAJOR | 1.0.0 → 2.0.0 |
| New features (backwards compatible) | MINOR | 1.0.0 → 1.1.0 |
| Bug fixes | PATCH | 1.0.0 → 1.0.1 |
# TypeScript - auto-bump in package.json
npm version patch --no-git-tag-version # or minor/major
# Rust - manual edit Cargo.toml
# Change: version = "x.y.z"
Use Keep a Changelog format. See resources/templates/CHANGELOG.template.md.
# Generate commit log since last tag
git log $(git describe --tags --abbrev=0)..HEAD --oneline
# Check login
npm whoami
# Preview package contents
npm pack --dry-run
# Dry run publish
npm publish --dry-run --access public
# Publish for real
npm publish --access public
# Verify
npm view arw-cli
# Login (one-time setup)
cargo login
# Dry run
cargo publish --dry-run
# Publish
cargo publish
# Verify
cargo search arw-cli
| Script | Purpose |
|---|---|
scripts/build-all.sh |
Build all packages |
scripts/build-all.sh --dev |
Development build only |
scripts/build-all.sh --release |
Production release build |
scripts/verify-package.sh |
Pre-release validation |
scripts/quick-publish.sh --dry-run |
Preview release |
scripts/quick-publish.sh |
Full release workflow |
scripts/quick-publish.sh --skip-tests |
Release without tests |
scripts/quick-publish.sh --npm-only |
Publish to npm only |
scripts/quick-publish.sh --cargo-only |
Publish to crates.io only |
npm whoami - must be logged in--access public for scoped packagesnpm config set prefix ~/.npm-globalsudo (not recommended)cargo login with API token from crates.io~/.cargo/credentials.tomlgit stash or git add -A && git commitgit tag -d v1.0.0 && git tag v1.0.0See docs/ADVANCED.md for:
resources/templates/docs/ADVANCED.md