txcript 0.13.0

Convert coding-agent session transcripts between harness formats.
Documentation
name: ci

# The quality gate: every push and PR runs the same checks the publish tags
# assume. Formatting, the full clippy deny set, tests across all features,
# the wasm32 build, the declared MSRV, and the packaging steps the release
# performs: crate dry-run, npm bundle, and a release build of the CLI.
on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read

env:
  RUSTFLAGS: -D warnings

jobs:
  lint-test:
    name: Lint and test (stable)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo fmt --all --check
      - run: cargo clippy --workspace --all-targets --all-features
      - run: cargo clippy -p txcript --lib --no-default-features
      - run: cargo test --workspace --all-features

  windows:
    name: Lint and test (windows)
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo clippy --workspace --all-targets --all-features
      - run: cargo test --workspace --all-features

  wasm:
    name: wasm32 build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo check -p txcript --lib --target wasm32-unknown-unknown --no-default-features --features wasm
      - run: cargo check -p txcript --lib --target wasm32-unknown-unknown --no-default-features --features wasm,search

  msrv:
    name: MSRV (1.96)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.96
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo check --workspace --all-features

  # Publish readiness. Every merged head must be releasable as-is, so the
  # packaging steps the release runs are proven here, on the PR.
  crate-package:
    name: crates.io package (dry-run)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo publish --dry-run --locked -p txcript

  npm-package:
    name: npm package (dry-run)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - uses: taiki-e/install-action@v2
        with:
          tool: wasm-bindgen-cli@0.2.126
      - uses: oven-sh/setup-bun@v2
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - run: bun run build
      - run: npm pack --dry-run --ignore-scripts

  cli-release-build:
    name: CLI release build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - run: cargo build --release --locked -p txcript-cli
      - run: ./target/release/txcript --version