Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f4ce80b
chore(spoke): lockstep pin bump 0.8.2 → 0.9.1 (schemas/operations/con…
auto-wood Aug 6, 2026
342558f
refactor(spoke-adapter): adapt port impls + callers to spoke-operatio…
auto-wood Aug 6, 2026
6b19551
test(connect): re-baseline interop fixtures on spoke-connect 0.9.1 to…
auto-wood Aug 6, 2026
e1b2388
chore(spoke): sync spec/gate/docs to 0.9.1 async surface (T4)
auto-wood Aug 6, 2026
e92c32c
merge(plan): V1.153 P0 — spoke 0.9.1 lockstep + connect v2 adaptation
auto-wood Aug 6, 2026
b3844ef
feat(connect): N-C1 allowlist world/op scoping with fail-closed PeerS…
auto-wood Aug 6, 2026
486159b
feat(connect): N-C1 invoke dispatch — world-scoped upsert/promote/rel…
auto-wood Aug 6, 2026
b15e1e8
fix(connect): close cross-world write + mixed-payload partial-write i…
auto-wood Aug 6, 2026
21c1026
feat(connect): N-C1 manifest honesty machine-check + spec §10.6 deliv…
auto-wood Aug 6, 2026
a1a792f
fix(connect): bind dispatch to SERVED_OPS so honesty check is load-be…
auto-wood Aug 6, 2026
81a3de8
fix(connect): verify relate endpoint worlds + warn on multi-write-pee…
auto-wood Aug 6, 2026
900a36d
merge(plan): V1.153 P1 — N-C1 inbound write ops over Connect
auto-wood Aug 6, 2026
a7aa25d
feat(runtime): headless nexus-runtime bin with web-embed SPA gate + b…
auto-wood Aug 6, 2026
e8d24bc
fix(runtime): make no-HTTP smoke assertion load-bearing + orphan guar…
auto-wood Aug 6, 2026
b6d151f
ci(runtime): native 3-platform build + zip/sha256 packaging workflow …
auto-wood Aug 6, 2026
007e2b2
ci(runtime): trigger first evaluation of runtime-build.yml
auto-wood Aug 6, 2026
7a7ede2
ci(runtime): iterate via temporary pull_request trigger instead of push
auto-wood Aug 6, 2026
36c5fca
chore(ci): probe workflow — does GitHub evaluate unregistered workflo…
auto-wood Aug 6, 2026
d2af6e3
chore(ci): remove probe workflow (T2 diagnostic complete)
auto-wood Aug 6, 2026
f3e38ac
fix(ci): single-line cargo build step (pwsh breaks on bash backslash …
auto-wood Aug 6, 2026
0e47ff2
fix(local-db): gate file_lock module and consumers on unix so nexus-r…
auto-wood Aug 7, 2026
266a719
fix(local-db,daemon-runtime): un-gate portable cas + gate flock/signa…
auto-wood Aug 7, 2026
b073d63
fix(acp-host): clone agent_path in the windows kill() error closures …
auto-wood Aug 7, 2026
21286a2
fix(daemon-runtime): gate the AsRawFd import in strategy.rs on unix (…
auto-wood Aug 7, 2026
2cc1e79
fix(nexus42): restore [dependencies] section header — six deps were u…
auto-wood Aug 7, 2026
6639649
fix(nexus42): move dialoguer/tempfile/regex/base64/cron/chrono-tz out…
auto-wood Aug 7, 2026
a415ef2
ci(runtime): remove temporary iteration triggers — delivered set is w…
auto-wood Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions .github/workflows/runtime-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
name: Runtime Build

# V1.153 P2 T2 (DF-73): native multi-platform build + packaging for the
# headless `nexus-runtime` binary (spoke-connect only, no embedded SPA).
#
# Each matrix leg builds natively on its host runner:
# windows-x64 → windows-latest / x86_64-pc-windows-msvc
# macos-arm64 → macos-latest / aarch64-apple-darwin
# linux-x64 → ubuntu-latest / x86_64-unknown-linux-gnu
# with `--no-default-features --features connect-host` (web-embed OFF → no
# `apps/web/dist` bytes; connect-host ON → the P1 N-C1 invoke surface), then
# packages `nexus-runtime-<os>-<arch>.zip` + `.sha256`, uploads them, and
# smoke-tests `--version` on the runner itself.
#
# Trigger set (locked by Clarify #3): `workflow_dispatch` + tag
# `runtime-v*` ONLY. Note: `workflow_dispatch` is only offered once this
# file is on the default branch; release-channel automation polish is E2+.

on:
workflow_dispatch:
push:
tags:
- 'runtime-v*'

concurrency:
group: runtime-build-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
SQLX_OFFLINE: "true"
# Cap target/ incremental growth on ephemeral runners (same ENOSPC
# mitigation rationale as ci.yml).
CARGO_INCREMENTAL: "0"

jobs:
runtime-build:
name: ${{ matrix.slug }}
runs-on: ${{ matrix.os }}
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
include:
- slug: windows-x64
os: windows-latest
target: x86_64-pc-windows-msvc
bin: nexus-runtime.exe
- slug: macos-arm64
os: macos-latest
target: aarch64-apple-darwin
bin: nexus-runtime
- slug: linux-x64
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
bin: nexus-runtime
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

# Heavy Rust job convention (ci.yml): reclaim ubuntu disk before the
# toolchain/cache restore. Windows/macOS runners carry enough free
# space for this single-bin release graph.
- uses: ./.github/actions/free-disk-space
if: runner.os == 'Linux'

- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
# wasm32-unknown-unknown: nexus-wasm-host's build.rs compiles the
# embedded modules from source (modules/basic-combat) — it is in the
# slim runtime graph too (via nexus-orchestration / -daemon-runtime /
# -spoke-adapter). The host triple is installed by default; the
# explicit `--target` below keeps the locked triple load-bearing.
targets: wasm32-unknown-unknown

- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
shared-key: nexus-runtime
workspaces: .

- name: Build nexus-runtime (release, native ${{ matrix.target }})
# Single line on purpose: the backslash continuation is bash-only and
# breaks under the Windows runner's default pwsh shell.
run: cargo build --release --target ${{ matrix.target }} --bin nexus-runtime --no-default-features --features connect-host

- name: Smoke test --version
if: runner.os == 'Windows'
shell: pwsh
run: |
$out = & "target/${{ matrix.target }}/release/${{ matrix.bin }}" --version
Write-Output $out
if ($out -notmatch '^nexus-runtime ') {
Write-Error "unexpected --version output: $out"
exit 1
}

- name: Smoke test --version
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
out="$(./target/${{ matrix.target }}/release/${{ matrix.bin }} --version)"
echo "$out"
case "$out" in
nexus-runtime\ *) ;;
*)
echo "::error::unexpected --version output: $out"
exit 1
;;
esac

- name: Package zip + sha256 (windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$zip_name = "nexus-runtime-${{ matrix.slug }}.zip"
# Single-file Compress-Archive stores the binary at the zip root.
Compress-Archive -Path "target/${{ matrix.target }}/release/${{ matrix.bin }}" -DestinationPath $zip_name -Force
$hash = (Get-FileHash -Algorithm SHA256 -Path $zip_name).Hash.ToLower()
# sha256sum-style line: "<hash> <zip filename>"
Set-Content -Path "$zip_name.sha256" -Value "$hash $zip_name" -NoNewline -Encoding ascii
Get-Content "$zip_name.sha256"

- name: Package zip + sha256 (unix)
if: runner.os != 'Windows'
shell: bash
run: |
set -euo pipefail
zip_name="nexus-runtime-${{ matrix.slug }}.zip"
# -j (junk paths): store the binary at the zip root.
zip -j "$zip_name" "target/${{ matrix.target }}/release/${{ matrix.bin }}"
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "$zip_name" > "$zip_name.sha256"
else
shasum -a 256 "$zip_name" > "$zip_name.sha256"
fi
cat "$zip_name.sha256"

- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: nexus-runtime-${{ matrix.slug }}
path: |
nexus-runtime-${{ matrix.slug }}.zip
nexus-runtime-${{ matrix.slug }}.zip.sha256
if-no-files-found: error
Loading