Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
5cfcee1
feat: add local registry flow and desktop examples
f0rr0 Jun 24, 2026
c9f76cd
feat: install native extensions from registry packages
f0rr0 Jun 24, 2026
2d5ab9e
fix(wasix): package extension assets from registry
f0rr0 Jun 25, 2026
c77b3fe
fix(wasix): suffix extension artifact crates
f0rr0 Jun 25, 2026
f6b10fc
fix(examples): resolve oliphaunt packages from local registries
f0rr0 Jun 25, 2026
033e094
fix(release): split oversized native extension crates
f0rr0 Jun 25, 2026
26a787f
fix(release): discard split extension probe crates
f0rr0 Jun 25, 2026
d23cdab
fix(release): strip native release artifacts
f0rr0 Jun 25, 2026
fc13dea
fix(release): align wasix cargo artifact crates
f0rr0 Jun 25, 2026
4247b8c
fix: optimize native runtime artifact payloads
f0rr0 Jun 25, 2026
9f8a39c
fix: split runtime tools into artifact crates
f0rr0 Jun 25, 2026
3cea532
fix: split native tools package surfaces
f0rr0 Jun 25, 2026
4c480d3
fix: split wasix runtime tools artifacts
f0rr0 Jun 25, 2026
cb9845d
fix: package runtime tools separately
f0rr0 Jun 25, 2026
3bf731e
fix: split wasix tools behind feature
f0rr0 Jun 25, 2026
bfc3a1f
test: add tauri example webdriver smoke
f0rr0 Jun 25, 2026
17fc36b
fix: validate local registry examples
f0rr0 Jun 26, 2026
302d3d6
chore: sync release derived files
f0rr0 Jun 26, 2026
80f12ca
fix: clarify deno native extension handling
f0rr0 Jun 26, 2026
db875c7
fix: split wasix root tools payload
f0rr0 Jun 26, 2026
9f6fefb
test: validate registry backed examples
f0rr0 Jun 26, 2026
c109e99
fix: stage wasix sdk registry dependencies
f0rr0 Jun 26, 2026
b4892e5
fix: make extension maven packages explicit
f0rr0 Jun 26, 2026
433a52d
fix: derive release artifact downloads from targets
f0rr0 Jun 26, 2026
56e6cc8
fix: remove unused release tag probes
f0rr0 Jun 26, 2026
57b7619
fix: derive js optional runtime packages
f0rr0 Jun 26, 2026
8bd5110
fix: derive runtime registry package checks
f0rr0 Jun 26, 2026
32f4456
fix: validate android extension runtime files
f0rr0 Jun 26, 2026
763f5e2
fix: pass mobile shared preload libraries
f0rr0 Jun 26, 2026
44c42f2
fix: preflight split wasix tools
f0rr0 Jun 26, 2026
d568c0f
test: enforce android extension artifact validation
f0rr0 Jun 26, 2026
1913ed7
test: derive wasix cargo package checks
f0rr0 Jun 26, 2026
54857b0
test: validate wasix runtime tool split
f0rr0 Jun 26, 2026
f049800
ci: derive sdk package artifact handoff
f0rr0 Jun 26, 2026
c1601e2
fix: enforce split runtime tools packages
f0rr0 Jun 26, 2026
122be6c
fix: invalidate local cargo registry cache
f0rr0 Jun 26, 2026
123397e
fix: enforce native tools crate split
f0rr0 Jun 26, 2026
c5c0b87
fix: derive local publish artifact preset
f0rr0 Jun 26, 2026
b118e70
fix: enforce runtime tools crate split
f0rr0 Jun 26, 2026
3762f33
fix: harden mobile extension validation
f0rr0 Jun 26, 2026
f72c987
fix: generate local cargo artifacts from release assets
f0rr0 Jun 26, 2026
ac37f5b
fix: publish native icu in local registry
f0rr0 Jun 26, 2026
037349a
fix: derive release publish metadata
f0rr0 Jun 26, 2026
39b051a
fix: align split runtime registry validation
f0rr0 Jun 26, 2026
55740b3
fix: derive maven runtime artifacts
f0rr0 Jun 26, 2026
fe12ea9
fix: derive local publish artifacts
f0rr0 Jun 26, 2026
87ce618
fix: track rust sdk macro surface
f0rr0 Jun 26, 2026
0bf8965
fix: track sdk artifact resolution parity
f0rr0 Jun 26, 2026
e1cc9e5
fix: package wasix sdk crate with bun
f0rr0 Jun 26, 2026
1aedd68
fix: write release checksums with bun
f0rr0 Jun 26, 2026
29b4898
fix: check publish environment with bun
f0rr0 Jun 26, 2026
64a8144
fix: verify product tags with bun
f0rr0 Jun 26, 2026
4ad2e6b
fix: check release please config with bun
f0rr0 Jun 26, 2026
db79533
fix: archive release directories with bun
f0rr0 Jun 26, 2026
e405eb1
fix: sync example lockfiles with bun
f0rr0 Jun 26, 2026
ca15d85
docs: record local example e2e validation
f0rr0 Jun 26, 2026
97bfbc5
fix: harden sdk runtime metadata resolution
f0rr0 Jun 26, 2026
c896d0c
chore: remove affected planner wrapper
f0rr0 Jun 26, 2026
ad4c069
chore: port graph cache witness to bun
f0rr0 Jun 26, 2026
eb1d370
chore: remove inline python from github workflows
f0rr0 Jun 26, 2026
9769221
chore: list cargo packages with bun
f0rr0 Jun 26, 2026
2ab433b
chore: merge artifact checksums with bun
f0rr0 Jun 26, 2026
1c149d2
chore: validate coverage baseline with bun
f0rr0 Jun 26, 2026
89e3dce
chore: validate wasix dependency invariants with bun
f0rr0 Jun 26, 2026
4560a0c
fix: resolve split native tools in deno
f0rr0 Jun 26, 2026
abb0b14
fix: align deno server native package resolution
f0rr0 Jun 26, 2026
5bf85a7
chore: remove python from tool launchers
f0rr0 Jun 26, 2026
787a37e
chore: remove python from tool bootstrap
f0rr0 Jun 26, 2026
6a6f604
chore: remove inline python from node direct packaging
f0rr0 Jun 26, 2026
6aa36b3
fix: harden wasix tools artifact split
f0rr0 Jun 26, 2026
e47be6f
fix: tighten split tools sdk validation
f0rr0 Jun 26, 2026
674b682
docs: record package surface verification
f0rr0 Jun 26, 2026
d06c909
fix: align react native open mode surface
f0rr0 Jun 26, 2026
4e342a7
fix: validate wasix tools aot manifests
f0rr0 Jun 26, 2026
edcdc0e
fix: exercise wasix example tool smoke
f0rr0 Jun 26, 2026
6912d9c
fix: align release checksum tooling
f0rr0 Jun 26, 2026
241373b
chore: port extension contract check to bun
f0rr0 Jun 26, 2026
23b2797
chore: port extension tree checker to bun
f0rr0 Jun 26, 2026
223cd07
fix: install example deps from local registries
f0rr0 Jun 26, 2026
cb2980d
test: guard split tool runtime artifacts
f0rr0 Jun 26, 2026
db9dfb0
test: compile wasix split tools feature
f0rr0 Jun 26, 2026
1a11a9b
chore: guard python tooling inventory
f0rr0 Jun 26, 2026
5485530
docs: record rust tooling inventory
f0rr0 Jun 26, 2026
49a0397
chore: port release fixture generators to bun
f0rr0 Jun 26, 2026
289d5b4
chore: port helper asset validators to bun
f0rr0 Jun 26, 2026
0e49ced
chore: port shared fixture matrix checker to bun
f0rr0 Jun 26, 2026
8de11ba
chore: port release pr coverage check to bun
f0rr0 Jun 26, 2026
83d190f
chore: port native boundary policy to bun
f0rr0 Jun 26, 2026
3cd9156
chore: port wasm preflight manifest check to bun
f0rr0 Jun 26, 2026
5c2ad65
chore: port rust sdk artifact patch helper to bun
f0rr0 Jun 26, 2026
9927fef
chore: port sdk crate filename helper to bun
f0rr0 Jun 26, 2026
a20f25f
fix: split native client tools into release assets
f0rr0 Jun 26, 2026
85ae3e9
fix: harden split tool package validation
f0rr0 Jun 26, 2026
9d2c90c
fix: derive wasix package validation from manifest
f0rr0 Jun 26, 2026
08e388d
fix: align sdk artifact validation semantics
f0rr0 Jun 26, 2026
aed770b
fix: exercise wasix tools in release check
f0rr0 Jun 26, 2026
6ced470
fix: keep wasix tools out of root crates
f0rr0 Jun 26, 2026
d41d97a
fix: validate explicit mobile runtime extensions
f0rr0 Jun 26, 2026
3b1bf38
docs: record split tools validation
f0rr0 Jun 26, 2026
bf63ee5
fix: derive sdk artifact handoff from release metadata
f0rr0 Jun 26, 2026
88cffc7
fix: tighten wasix tools artifact guards
f0rr0 Jun 26, 2026
0acb1c7
fix: validate js extensions against catalog
f0rr0 Jun 26, 2026
17ff3b8
fix: validate react native extensions against catalog
f0rr0 Jun 26, 2026
91e2d41
chore: move react native extension path lookup to bun
f0rr0 Jun 26, 2026
33d3347
chore: expose rust release source preparation cli
f0rr0 Jun 26, 2026
960c8b5
chore: move wasix third-party toml reads to bun
f0rr0 Jun 26, 2026
38bfb8d
chore: move wasix extension asset packaging to bun
f0rr0 Jun 26, 2026
76155de
chore: move github release asset uploads to bun
f0rr0 Jun 26, 2026
5ba51ec
chore: move native binary stripping to bun
f0rr0 Jun 26, 2026
bd3717a
chore: move broker cargo artifact packaging to bun
f0rr0 Jun 26, 2026
a3476e2
chore: move product version reads to bun
f0rr0 Jun 26, 2026
895ed8d
chore: move moon affected helper to bun
f0rr0 Jun 26, 2026
ec5df2a
docs: record fresh example e2e validation
f0rr0 Jun 26, 2026
c549de2
test: enforce native tools package split
f0rr0 Jun 26, 2026
1f35982
chore: port source architecture check to bun
f0rr0 Jun 26, 2026
82c1051
chore: port coverage tooling to bun
f0rr0 Jun 26, 2026
df03354
test: cover js registry asset resolution
f0rr0 Jun 26, 2026
0b4a83e
test: validate js extension payloads
f0rr0 Jun 26, 2026
de33332
fix: publish js runtime caches atomically
f0rr0 Jun 26, 2026
2cd7e18
test: cover mobile runtime feature validation
f0rr0 Jun 26, 2026
cdd08a6
test: enforce split tools parity checks
f0rr0 Jun 26, 2026
1abb7aa
fix: harden local cargo registry artifact shape
f0rr0 Jun 26, 2026
80ffd09
fix: validate js explicit extension runtimes
f0rr0 Jun 26, 2026
466a4fa
chore: port swiftpm tag publisher to bun
f0rr0 Jun 26, 2026
7f02906
chore: port maven artifact manifest to bun
f0rr0 Jun 26, 2026
4a8b43b
chore: port swiftpm renderer to bun
f0rr0 Jun 26, 2026
a2372a1
docs: record split tool crate contract
f0rr0 Jun 26, 2026
d0fa271
chore: port release attestation verifier to bun
f0rr0 Jun 26, 2026
489580d
chore: port native runtime lock to bun
f0rr0 Jun 26, 2026
219b722
chore: port registry publication checks to bun
f0rr0 Jun 26, 2026
fad1fc7
chore: port github release asset check to bun
f0rr0 Jun 26, 2026
084ba72
chore: port native payload optimizer to bun
f0rr0 Jun 26, 2026
a45efae
chore: port release version check to bun
f0rr0 Jun 26, 2026
941bbeb
chore: share bun release graph planner
f0rr0 Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 2 additions & 8 deletions .github/actions/setup-deno/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,8 @@ runs:
--connect-timeout 20 \
--output "$tmp/deno.zip" \
"$url"
python3 - "$tmp/deno.zip" "$DENO_CACHE_DIR" <<'PY'
import sys
import zipfile

archive, output = sys.argv[1], sys.argv[2]
with zipfile.ZipFile(archive) as zip_file:
zip_file.extractall(output)
PY
mkdir -p "$DENO_CACHE_DIR"
unzip -oq "$tmp/deno.zip" -d "$DENO_CACHE_DIR"
chmod +x "$DENO_BINARY"
echo "$DENO_CACHE_DIR" >> "$GITHUB_PATH"

Expand Down
50 changes: 1 addition & 49 deletions .github/scripts/download-build-artifacts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,55 +58,7 @@ artifact_present() {
merge_checksum_manifest() {
local existing="$1"
local incoming="$2"
python3 - "$existing" "$incoming" <<'PY'
from __future__ import annotations

import sys
import tempfile
from pathlib import Path

existing = Path(sys.argv[1])
incoming = Path(sys.argv[2])
entries: dict[str, str] = {}


def read_manifest(path: Path) -> None:
with path.open("r", encoding="utf-8") as handle:
for line_number, line in enumerate(handle, 1):
stripped = line.strip()
if not stripped:
continue
parts = stripped.split(None, 1)
if len(parts) != 2:
raise SystemExit(f"{path}: invalid checksum line {line_number}: {line.rstrip()}")
digest, raw_name = parts[0], parts[1].strip()
if len(digest) != 64 or any(char not in "0123456789abcdef" for char in digest):
raise SystemExit(f"{path}: invalid checksum digest on line {line_number}: {digest}")
name = raw_name.removeprefix("./")
if not name or "/" in name:
raise SystemExit(f"{path}: invalid checksum asset name on line {line_number}: {raw_name}")
previous = entries.get(name)
if previous is not None and previous != digest:
raise SystemExit(
f"{path}: conflicting checksum for {name}: {previous} vs {digest}"
)
entries[name] = digest


read_manifest(existing)
read_manifest(incoming)
with tempfile.NamedTemporaryFile(
"w",
encoding="utf-8",
newline="\n",
dir=str(existing.parent),
delete=False,
) as handle:
temp_path = Path(handle.name)
for name in sorted(entries):
handle.write(f"{entries[name]} ./{name}\n")
temp_path.replace(existing)
PY
bun .github/scripts/merge-checksum-manifest.mjs "$existing" "$incoming"
}

merge_downloaded_artifact() {
Expand Down
57 changes: 57 additions & 0 deletions .github/scripts/merge-checksum-manifest.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env bun
import { mkdtempSync, renameSync, rmSync, writeFileSync } from 'node:fs';
import { readFile } from 'node:fs/promises';
import { dirname, join } from 'node:path';

function fail(message) {
console.error(`merge-checksum-manifest.mjs: ${message}`);
process.exit(1);
}

function parseManifest(path, text, entries) {
for (const [index, line] of text.split(/\r?\n/).entries()) {
const lineNumber = index + 1;
const stripped = line.trim();
if (stripped.length === 0) {
continue;
}
const match = /^([0-9a-f]{64})\s+(.+)$/.exec(stripped);
if (match === null) {
fail(`${path}: invalid checksum line ${lineNumber}: ${line}`);
}
const digest = match[1];
const rawName = match[2].trim();
const name = rawName.startsWith('./') ? rawName.slice(2) : rawName;
if (name.length === 0 || name.includes('/')) {
fail(`${path}: invalid checksum asset name on line ${lineNumber}: ${rawName}`);
}
const previous = entries.get(name);
if (previous !== undefined && previous !== digest) {
fail(`${path}: conflicting checksum for ${name}: ${previous} vs ${digest}`);
}
entries.set(name, digest);
}
}

const [existing, incoming] = process.argv.slice(2);
if (existing === undefined || incoming === undefined) {
fail('usage: merge-checksum-manifest.mjs <existing> <incoming>');
}

const entries = new Map();
parseManifest(existing, await readFile(existing, 'utf8'), entries);
parseManifest(incoming, await readFile(incoming, 'utf8'), entries);

const merged = [...entries]
.sort(([left], [right]) => left.localeCompare(right))
.map(([name, digest]) => `${digest} ./${name}\n`)
.join('');

const tempDir = mkdtempSync(join(dirname(existing), '.oliphaunt-checksums-'));
const tempPath = join(tempDir, 'checksums.sha256');
try {
writeFileSync(tempPath, merged, { encoding: 'utf8' });
renameSync(tempPath, existing);
} finally {
rmSync(tempDir, { force: true, recursive: true });
}
17 changes: 0 additions & 17 deletions .github/scripts/plan-affected.py

This file was deleted.

45 changes: 45 additions & 0 deletions .github/scripts/resolve-release-please-pr.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env bun

function candidateObjectsFromEnv(name) {
const raw = process.env[name]?.trim();
if (!raw) {
return [];
}
let value;
try {
value = JSON.parse(raw);
} catch {
return [];
}
if (Array.isArray(value)) {
return value.filter((item) => item !== null && typeof item === 'object');
}
if (value !== null && typeof value === 'object') {
return [value];
}
return [];
}

function pullRequestNumber(item) {
const value = item.number ?? item.pullRequestNumber;
if (typeof value === 'number' && Number.isInteger(value) && value > 0) {
return String(value);
}
if (typeof value === 'string' && value.trim().length > 0) {
return value.trim();
}
return undefined;
}

const candidates = [
...candidateObjectsFromEnv('RELEASE_PLEASE_PR'),
...candidateObjectsFromEnv('RELEASE_PLEASE_PRS'),
];

for (const item of candidates) {
const number = pullRequestNumber(item);
if (number !== undefined) {
console.log(number);
process.exit(0);
}
}
17 changes: 16 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ jobs:
WASM_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.wasm_target || 'all' }}
NATIVE_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.native_target || 'all' }}
MOBILE_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.mobile_target || 'all' }}
run: python3 .github/scripts/plan-affected.py
run: python3 tools/graph/ci_plan.py

- name: Plan check and test jobs
id: target-matrices
Expand Down Expand Up @@ -484,6 +484,7 @@ jobs:
- affected
- extension-artifacts-native
- extension-artifacts-wasix
- liboliphaunt-wasix-aot
if: ${{ contains(fromJson(needs.affected.outputs.jobs), 'extension-packages') }}
runs-on: ubuntu-latest
timeout-minutes: 30
Expand Down Expand Up @@ -517,6 +518,13 @@ jobs:
path: target/extensions/wasix/release-assets
merge-multiple: true

- name: Download WASIX exact-extension AOT artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
pattern: liboliphaunt-wasix-extension-aot-*
path: target/extensions/wasix/aot-artifacts
merge-multiple: true

- name: Build exact-extension product packages
env:
OLIPHAUNT_EXTENSION_PACKAGE_PRODUCTS: ${{ needs.affected.outputs.extension_package_products_csv }}
Expand Down Expand Up @@ -1441,6 +1449,13 @@ jobs:
target/oliphaunt-wasix/aot-upload/**
if-no-files-found: error

- name: Upload target extension AOT artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-wasix-extension-aot-${{ matrix.target_id }}
path: target/extensions/wasix/aot-artifacts
if-no-files-found: error

liboliphaunt-wasix-release-assets:
name: Builds / liboliphaunt-wasix-release-assets
needs:
Expand Down
Loading
Loading