• v3.0.0 db3f9ca8c2

    ship.zone runner v3.0.0
    CI / Build & Test (push) Successful in 3m40s
    Release / build-and-release (push) Successful in 4m25s
    Stable

    jkunz released this 2026-10-15 15:41:55 +00:00 | 1 commits to main since this release

    Breaking Changes

    • run on Node.js 26.1 or later instead of Deno (runtime)
      • The package compiles to dist_ts/ with @git.zone/tsbuild; deno.json, deno.lock, mod.ts
        and the jsr:@std/* imports are gone, and every module dependency goes through ts/plugins.ts.
      • Subprocesses run through node:child_process with an explicit environment and SIGTERM-then-SIGKILL
        termination; staging capacity reads fs.statfs with the fragment size frsize (Node.js 26.1+)
        instead of running /usr/bin/stat.
      • Streamed artifact and cache uploads use the global fetch half-duplex (duplex: 'half'), as
        Node.js requires for a stream request body.
      • The CLI entry is ts/cli-entry.ts; its usage text names the ship-zone-runner executable.
    • one runner per state directory (state)
      • The runner takes an exclusive kernel flock on <state>/.runner-owner.lock through its own helper
        (runnerworkspace own-state) before it touches the state directory; a second runner on the same
        directory stops at once with RunnerStateOwnedElsewhereError (helper exit code 3), and losing the
        helper stops the runner with RunnerStateOwnershipLostError. Many runners per host remain supported.
      • OciExecutor, AttemptStateStore, RegistrationStateStore, scavengeRunnerStaging and
        ShipRunner (stateOwner dependency) take a RunnerStateOwner; registerRunnerDurably requires
        its stateStore.
      • The 2.x advisory .workspace-helper.lock file is removed and no longer used.
      • Staging is scavenged first, right after ownership is taken and before runtime verification.
    • ITransferArchiveFileOperations uses Node.js shapes: openRead returns a FileHandle,
      makeTempFile/remove take IMakeTempOptions/IRemoveOptions (transfer)
    • the npm bin ship-zone-runner runs dist_ts/cli-entry.js with Node.js instead of the Deno bundle
      dist_npm/mod.js (cli)
      • pnpm build checks that the entry is built and starts with #!/usr/bin/env node
        (scripts/verify-npm-entrypoint.ts).
    • the package exports only . (dist_ts/index.js, types dist_ts/index.d.ts); the ./mod.js
      subpath and the dist_npm/ bundle are removed (exports)

    Features

    • ship the runner as Node.js 26.11.1 single executables for Linux x64 and arm64 (release)
      • pnpm run build:binary bundles ts/cli-entry.ts with @git.zone/tsbundle and builds
        ship-zone-runner-linux-x64 and ship-zone-runner-linux-arm64 with @git.zone/tssea; each
        embeds the static workspace helper of its architecture as the sidecar runnerworkspace, which
        the runner reads through @push.rocks/smartsea, and comes with its third-party notices.
      • A v* tag runs .gitea/workflows/release.yml, which uploads the executables, their notices,
        install.sh and SHA256SUMS.txt as release assets.
      • curl -fsSL https://code.foss.global/ship.zone/runner/releases/download/latest/install.sh | sudo bash
        installs the executable to /opt/ship-zone-runner and links /usr/local/bin/ship-zone-runner;
        it leaves configuration and state where the runner keeps them.
      • ship-zone-runner --version prints the version, like version.

    Maintenance

    • tooling: @git.zone/tsrust 4.6, pnpm 12.10.1
    • generated native notices replace the hand-kept legal files (legal)
      • tsrust notices writes native-notices/ (Rust crates, jemalloc, the Rust standard library,
        musl, libunwind and the GCC runtime), which the package ships and every build checks;
        third-party-licenses.md and musl-copyright.md are removed.
      • rust-toolchain.toml pins Rust 1.95.0 with rust-src and both musl targets, and the aarch64
        musl linker is aarch64-linux-musl-gcc.
    • CI builds, type checks and tests on Node.js 26 in ht-docker-node (ci)
    • tests run on @git.zone/tstest 8 as test/test.*.node.ts; the build uses @git.zone/tsbuild 6 with @types/node 26
    Downloads