Skip to content

Commit 3125622

Browse files
committed
release v0.0.1
1 parent d3bf815 commit 3125622

17 files changed

+1452
-2
lines changed

.github/workflows/ci.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
9+
jobs:
10+
rust:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- name: Set up Rust
16+
uses: dtolnay/rust-toolchain@stable
17+
18+
- name: Cache Cargo
19+
uses: Swatinem/rust-cache@v2
20+
21+
- name: Run Rust tests
22+
run: cargo test
23+
24+
- name: Run Rust serde tests
25+
run: cargo test --features serde
26+
27+
ui:
28+
runs-on: ubuntu-latest
29+
defaults:
30+
run:
31+
working-directory: web/void-control-ux
32+
steps:
33+
- uses: actions/checkout@v4
34+
35+
- name: Set up Node
36+
uses: actions/setup-node@v4
37+
with:
38+
node-version: 20
39+
cache: npm
40+
cache-dependency-path: web/void-control-ux/package-lock.json
41+
42+
- name: Install UI dependencies
43+
run: npm ci
44+
45+
- name: Build UI
46+
run: npm run build

.github/workflows/release.yml

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
verify-version:
13+
runs-on: ubuntu-latest
14+
outputs:
15+
version: ${{ steps.version.outputs.version }}
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Verify manifest versions match tag
20+
id: version
21+
run: |
22+
TAG="${GITHUB_REF_NAME#v}"
23+
CARGO_VERSION=$(python3 - <<'PY'
24+
from pathlib import Path
25+
for line in Path("Cargo.toml").read_text().splitlines():
26+
if line.startswith("version = "):
27+
print(line.split('"')[1])
28+
break
29+
PY
30+
)
31+
UI_VERSION=$(python3 - <<'PY'
32+
import json
33+
from pathlib import Path
34+
print(json.loads(Path("web/void-control-ux/package.json").read_text())["version"])
35+
PY
36+
)
37+
test "${TAG}" = "${CARGO_VERSION}"
38+
test "${TAG}" = "${UI_VERSION}"
39+
echo "version=${TAG}" >> "$GITHUB_OUTPUT"
40+
41+
rust-release:
42+
runs-on: ubuntu-latest
43+
needs: verify-version
44+
steps:
45+
- uses: actions/checkout@v4
46+
47+
- name: Set up Rust
48+
uses: dtolnay/rust-toolchain@stable
49+
50+
- name: Cache Cargo
51+
uses: Swatinem/rust-cache@v2
52+
53+
- name: Build release binaries
54+
run: |
55+
cargo test
56+
cargo test --features serde
57+
cargo build --release --features serde --bin voidctl --bin normalize_fixture
58+
59+
- name: Package voidctl
60+
run: |
61+
mkdir -p dist/voidctl
62+
cp target/release/voidctl dist/voidctl/
63+
cp README.md LICENSE dist/voidctl/
64+
tar -C dist -czf "voidctl-v${{ needs.verify-version.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz" voidctl
65+
66+
- name: Package normalize_fixture
67+
run: |
68+
mkdir -p dist/normalize_fixture
69+
cp target/release/normalize_fixture dist/normalize_fixture/
70+
cp README.md LICENSE dist/normalize_fixture/
71+
tar -C dist -czf "normalize_fixture-v${{ needs.verify-version.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz" normalize_fixture
72+
73+
- name: Upload Rust release artifacts
74+
uses: actions/upload-artifact@v4
75+
with:
76+
name: rust-release-assets
77+
path: |
78+
voidctl-v${{ needs.verify-version.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz
79+
normalize_fixture-v${{ needs.verify-version.outputs.version }}-x86_64-unknown-linux-gnu.tar.gz
80+
81+
ui-release:
82+
runs-on: ubuntu-latest
83+
needs: verify-version
84+
defaults:
85+
run:
86+
working-directory: web/void-control-ux
87+
steps:
88+
- uses: actions/checkout@v4
89+
90+
- name: Set up Node
91+
uses: actions/setup-node@v4
92+
with:
93+
node-version: 20
94+
cache: npm
95+
cache-dependency-path: web/void-control-ux/package-lock.json
96+
97+
- name: Install UI dependencies
98+
run: npm ci
99+
100+
- name: Build UI
101+
run: npm run build
102+
103+
- name: Package UI bundle
104+
run: |
105+
tar -C dist -czf "../../void-control-ux-v${{ needs.verify-version.outputs.version }}.tar.gz" .
106+
107+
- name: Upload UI release artifact
108+
uses: actions/upload-artifact@v4
109+
with:
110+
name: ui-release-asset
111+
path: void-control-ux-v${{ needs.verify-version.outputs.version }}.tar.gz
112+
113+
publish-release:
114+
runs-on: ubuntu-latest
115+
needs:
116+
- verify-version
117+
- rust-release
118+
- ui-release
119+
steps:
120+
- uses: actions/checkout@v4
121+
122+
- name: Download Rust release assets
123+
uses: actions/download-artifact@v4
124+
with:
125+
name: rust-release-assets
126+
path: release-assets
127+
128+
- name: Download UI release asset
129+
uses: actions/download-artifact@v4
130+
with:
131+
name: ui-release-asset
132+
path: release-assets
133+
134+
- name: Prepare release notes header
135+
run: |
136+
cat > .github-release-notes.md <<'EOF'
137+
First public `void-control` release.
138+
139+
Supported `void-box` baseline for this release:
140+
- `void-box` `v0.1.1` or equivalent validated production build
141+
142+
Included assets:
143+
- `voidctl` Linux x86_64 binary archive
144+
- `normalize_fixture` Linux x86_64 binary archive
145+
- `void-control-ux` production bundle archive
146+
EOF
147+
148+
- name: Publish GitHub Release
149+
uses: softprops/action-gh-release@v2
150+
with:
151+
files: release-assets/*
152+
body_path: .github-release-notes.md
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Void Box Compatibility
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
void_box_base_url:
7+
description: 'Reachable void-box daemon URL'
8+
required: true
9+
default: 'http://127.0.0.1:43100'
10+
supported_void_box_version:
11+
description: 'Validated void-box version/build label'
12+
required: true
13+
default: 'v0.1.1'
14+
15+
jobs:
16+
compatibility:
17+
runs-on: self-hosted
18+
steps:
19+
- uses: actions/checkout@v4
20+
21+
- name: Set up Rust
22+
uses: dtolnay/rust-toolchain@stable
23+
24+
- name: Cache Cargo
25+
uses: Swatinem/rust-cache@v2
26+
27+
- name: Report compatibility target
28+
run: |
29+
echo "Validating against void-box baseline: ${{ inputs.supported_void_box_version }}"
30+
echo "Daemon URL: ${{ inputs.void_box_base_url }}"
31+
32+
- name: Run compatibility gate
33+
run: scripts/release/check_void_box_compat.sh "${{ inputs.void_box_base_url }}"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ web/void-control-ux/dist/
1313
web/void-control-ux/.env
1414
web/void-control-ux/.env.local
1515
web/void-control-ux/.env.*.local
16+
web/void-control-ux/tmp_*.mjs
17+
18+
.github-release-notes.md

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "void-control"
3-
version = "0.1.0"
3+
version = "0.0.1"
44
edition = "2021"
55
license = "Apache-2.0"
66

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ Orchestration layer for `void-box` runtime execution.
44

55
![void-control hero](docs/assets/void-control-hero.png)
66

7+
## Demo
8+
9+
<video src="docs/assets/void-control-demo.mp4" controls muted playsinline width="100%"></video>
10+
11+
If the embedded player does not render in your Markdown viewer, use the direct file link: [void-control demo video](docs/assets/void-control-demo.mp4).
12+
13+
## Release
14+
15+
- First public release target: `v0.0.1`
16+
- Release artifacts are published through GitHub Releases
17+
- Supported `void-box` baseline for `v0.0.1`: `void-box` `v0.1.1` or an equivalent validated production build
18+
- Release process and compatibility gate details: [docs/release-process.md](docs/release-process.md)
19+
720
## What It Is
821

922
`void-control` is the control-plane side of the stack:

docs/assets/void-control-demo.mp4

6.79 MB
Binary file not shown.

docs/release-process.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# `void-control` Release Process
2+
3+
This repository ships as a GitHub Release.
4+
5+
## `v0.0.1` Baseline
6+
7+
- Repo tag: `v0.0.1`
8+
- Rust crate version: `0.0.1`
9+
- UI package version: `0.0.1`
10+
- Supported `void-box` baseline: `v0.1.1` or an equivalent validated production build
11+
12+
## Release Artifacts
13+
14+
- `voidctl-v<version>-x86_64-unknown-linux-gnu.tar.gz`
15+
- `normalize_fixture-v<version>-x86_64-unknown-linux-gnu.tar.gz`
16+
- `void-control-ux-v<version>.tar.gz`
17+
18+
The UI is shipped as a built artifact from `web/void-control-ux/dist/`. It is not published to npm for `v0.0.1`.
19+
20+
## Required Checks
21+
22+
Before cutting a release tag:
23+
24+
1. Rust CI passes:
25+
- `cargo test`
26+
- `cargo test --features serde`
27+
2. UI CI passes:
28+
- `cd web/void-control-ux && npm ci && npm run build`
29+
3. `void-box` compatibility gate passes against the supported daemon baseline:
30+
- `scripts/release/check_void_box_compat.sh http://127.0.0.1:43100`
31+
32+
## Tag-Driven Release
33+
34+
Releases are created by pushing a semver tag:
35+
36+
```bash
37+
git tag v0.0.1
38+
git push origin v0.0.1
39+
```
40+
41+
The release workflow will:
42+
43+
- verify that the tag matches `Cargo.toml` and `web/void-control-ux/package.json`
44+
- run Rust and UI build jobs
45+
- package Rust binaries
46+
- package the UI production bundle
47+
- publish a GitHub Release with those assets
48+
49+
## `void-box` Compatibility Gate
50+
51+
`void-control` is released independently from `void-box`, but releases must be validated against a pinned `void-box` version/build.
52+
53+
For `v0.0.1`, use:
54+
55+
- `void-box` `v0.1.1`
56+
- production kernel/initramfs path as documented in [AGENTS.md](../AGENTS.md)
57+
58+
Run compatibility manually:
59+
60+
```bash
61+
scripts/release/check_void_box_compat.sh http://127.0.0.1:43100
62+
```
63+
64+
Or via the dedicated GitHub Actions workflow on a self-hosted runner that can reach a real daemon.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
BASE_URL="${1:-${VOID_BOX_BASE_URL:-http://127.0.0.1:43100}}"
5+
6+
echo "[void-control] checking daemon health at ${BASE_URL}"
7+
curl -fsS "${BASE_URL}/v1/health" >/dev/null
8+
9+
echo "[void-control] running live daemon contract suite against ${BASE_URL}"
10+
VOID_BOX_BASE_URL="${BASE_URL}" cargo test --features serde --test void_box_contract -- --ignored --nocapture

0 commit comments

Comments
 (0)