Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
eb5f36d
feat(wasix): integrate bundled Windows V8 engine and native caches
f0rr0 Oct 6, 2026
71cd603
fix(release): plan embedded engine payloads before source acquisition
f0rr0 Oct 6, 2026
6566e2d
fix(ci): qualify Windows engine contracts before cache production
f0rr0 Oct 6, 2026
eab3c42
test(wasix): qualify the frozen Windows engine package closure
f0rr0 Oct 6, 2026
489fc83
fix(wasix): remove LLVM inputs from Windows runtime qualification
f0rr0 Oct 6, 2026
7060390
fix(packaging): close transitive path dependency test sources
f0rr0 Oct 6, 2026
9047556
test(wasix): run installed Windows SDK against frozen AOT carriers
f0rr0 Oct 6, 2026
1998462
test(wasix): qualify the full extension lifecycle on Windows V8
f0rr0 Oct 6, 2026
b88f7d8
refactor(wasix): keep one Windows cache producer helper
f0rr0 Oct 6, 2026
39ce90e
refactor(wasix): name native value ownership explicitly
f0rr0 Oct 6, 2026
d94c7c5
refactor(wasix): align engine qualification and producer conventions
f0rr0 Oct 6, 2026
0bdab72
fix(ci): prepare WASIX engine toolchains and lifecycle sources
f0rr0 Oct 6, 2026
5683951
fix(ci): execute selected WASIX engine tasks without base lookup
f0rr0 Oct 6, 2026
5e36955
fix(wasix): extract Windows engine archive with a local path
f0rr0 Oct 6, 2026
ed5fa47
fix(wasix): close installed engine qualification dependencies
f0rr0 Oct 6, 2026
edb935f
fix(packaging): normalize native Windows Cargo file listings
f0rr0 Oct 7, 2026
99e1189
fix(wasix): keep dependency resolution in native qualification
f0rr0 Oct 7, 2026
2cf9116
fix(ci): serialize WASIX server executable consumers
f0rr0 Oct 7, 2026
8db3bd8
fix(wasix): split oversized Windows AOT Cargo payloads
f0rr0 Oct 7, 2026
8fddaa6
fix(wasix): align qualification and maintainer workflows
f0rr0 Oct 8, 2026
794a2a9
perf(packaging): reuse validated Windows payload archives
f0rr0 Oct 8, 2026
d684f94
fix(wasix): align engine patches and qualification inputs
f0rr0 Oct 8, 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
24 changes: 15 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ jobs:
extension-artifacts-native-android:
name: Native Extensions (Android Packaging)
needs: [affected, extension-artifacts-native-android-static, extension-artifacts-native-linux]
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native-android-static.result == 'success' && needs.extension-artifacts-native-linux.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.extension-artifacts-native-android-static.result == 'success' && needs.extension-artifacts-native-linux.result == 'success' && fromJson(needs.affected.outputs.extension_artifacts_native_matrix_android).include[0] != null }}
uses: ./.github/workflows/extension-artifacts-native.yml
with:
phase: android-package
Expand Down Expand Up @@ -591,7 +591,7 @@ jobs:
needs:
- affected
- liboliphaunt-wasix-runtime
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-wasix') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'extension-artifacts-wasix') }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.extension_artifacts_wasix_matrix) }}
Expand Down Expand Up @@ -704,7 +704,7 @@ jobs:
mobile-extension-packages-android:
name: Extension Packages (Android)
needs: [affected, extension-artifacts-native-android]
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native-android.result == 'success' && needs.affected.outputs.mobile_extension_package_native_targets_android_csv != '' }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.extension-artifacts-native-android.result == 'success' && needs.affected.outputs.mobile_extension_package_native_targets_android_csv != '' }}
uses: ./.github/workflows/mobile-extension-packages.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand All @@ -716,7 +716,7 @@ jobs:
mobile-extension-packages-ios:
name: Extension Packages (iOS)
needs: [affected, extension-artifacts-native-ios]
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.extension-artifacts-native-ios.result == 'success' && needs.affected.outputs.mobile_extension_package_native_targets_ios_csv != '' }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.extension-artifacts-native-ios.result == 'success' && needs.affected.outputs.mobile_extension_package_native_targets_ios_csv != '' }}
uses: ./.github/workflows/mobile-extension-packages.yml
with:
cache-save-if: ${{ needs.affected.outputs.cache_save_if == 'true' }}
Expand Down Expand Up @@ -1102,7 +1102,7 @@ jobs:
- liboliphaunt-native-desktop
- liboliphaunt-native-ios
- liboliphaunt-native-ios-abi
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-native-android.result == 'success' && needs.liboliphaunt-native-android-abi.result == 'success' && needs.liboliphaunt-native-desktop.result == 'success' && needs.liboliphaunt-native-ios.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.liboliphaunt-native-android.result == 'success' && needs.liboliphaunt-native-android-abi.result == 'success' && needs.liboliphaunt-native-desktop.result == 'success' && needs.liboliphaunt-native-ios.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-native-release-assets') }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -1515,7 +1515,7 @@ jobs:
- affected
- liboliphaunt-native-ios-abi
- swift-bindings
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && needs.swift-bindings.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && needs.swift-bindings.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'swift-sdk-package') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
Expand Down Expand Up @@ -2274,7 +2274,7 @@ jobs:
- affected
- liboliphaunt-wasix-runtime
- liboliphaunt-wasix-aot
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && needs.liboliphaunt-wasix-aot.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-release-assets') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.liboliphaunt-wasix-runtime.result == 'success' && needs.liboliphaunt-wasix-aot.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'liboliphaunt-wasix-release-assets') && (github.event_name != 'workflow_dispatch' || inputs.wasm_target == 'all') }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
Expand Down Expand Up @@ -2327,6 +2327,12 @@ jobs:
rsync -a "$raw_target_dir/" "$destination/"
done

- name: Download qualified Windows engine
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-wasix-windows-engine
path: .

- name: Package WASIX release assets
env:
OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable", "liboliphaunt-wasix:runtime-aot"]'
Expand Down Expand Up @@ -3018,7 +3024,7 @@ jobs:
- liboliphaunt-native-ios-abi
- react-native-sdk-package
- swift-sdk-package
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.js-sdk-package.result == 'success' && needs.mobile-extension-packages-ios.result == 'success' && needs.liboliphaunt-native-ios.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && needs.react-native-sdk-package.result == 'success' && needs.swift-sdk-package.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.js-sdk-package.result == 'success' && needs.mobile-extension-packages-ios.result == 'success' && needs.liboliphaunt-native-ios.result == 'success' && needs.liboliphaunt-native-ios-abi.result == 'success' && needs.react-native-sdk-package.result == 'success' && needs.swift-sdk-package.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
runs-on: macos-26
timeout-minutes: 180
env:
Expand Down Expand Up @@ -3344,7 +3350,7 @@ jobs:
needs:
- affected
- mobile-build-ios
if: ${{ !cancelled() && needs.affected.result == 'success' && needs.mobile-build-ios.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
if: ${{ !cancelled() && !failure() && needs.affected.result == 'success' && needs.mobile-build-ios.result == 'success' && contains(fromJson(needs.affected.outputs.jobs), 'mobile-build-ios') }}
runs-on: macos-26
timeout-minutes: 45
steps:
Expand Down
120 changes: 113 additions & 7 deletions .github/workflows/wasix-host.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,95 @@ defaults:
run:
shell: bash
jobs:
windows-engine:
name: WASIX Windows engine
if: ${{ contains(inputs.matrix, 'windows-x64-msvc') }}
runs-on: windows-2025-vs2026
timeout-minutes: 40
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: ./.github/actions/setup-moon
with:
cache-partition: wasix-windows-engine
- uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ inputs.cache-save-if }}
tools: cargo-nextest@0.9.137
- uses: ./.github/actions/setup-msvc
- name: Produce and test pinned Windows engine
run: .github/scripts/run-moon-targets.sh liboliphaunt-wasix:engine-test
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-wasix-windows-engine
include-hidden-files: true
path: |
target/oliphaunt-wasix/engine/windows-x64-msvc/oliphaunt_wee8.dll
target/oliphaunt-wasix/engine/windows-x64-msvc/cache-producer.exe
target/oliphaunt-wasix/engine/windows-x64-msvc/source.json
target/oliphaunt-wasix/engine/windows-x64-msvc/LICENSE.v8
src/wasix/runtime/engine/crates/*/upstream/**
src/wasix/runtime/engine/crates/wasmer/prebuilt/embedded_bindings.rs
if-no-files-found: error
windows-caches:
name: WASIX Windows baseline caches
needs: windows-engine
if: ${{ contains(inputs.matrix, 'windows-x64-msvc') }}
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: ./.github/actions/setup-moon
with:
cache-partition: wasix-windows-caches
- uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ inputs.cache-save-if }}
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-wasix-windows-engine
path: .
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-wasix-runtime-portable
path: .
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
if: ${{ contains(fromJson(inputs.job-targets)['liboliphaunt-wasix-aot'], 'postgres-tools-wasix:build-aot') }}
with:
name: postgres-tools-wasix-compiler-output
path: target/postgres-tools/wasix/assets
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
if: ${{ contains(fromJson(inputs.job-targets)['liboliphaunt-wasix-aot'], 'extension-artifacts-wasix:build-aot') }}
with:
name: extensions-wasix-compiler-output
path: target/extensions/wasix/assets
- name: Set up CPU profile producer
run: sudo apt-get update && sudo apt-get install --no-install-recommends -y wine64 libz-mingw-w64 qemu-user
- name: Produce and read genuine SSE4.1 native caches
env:
BUILD_TOOLS: ${{ contains(fromJson(inputs.job-targets)['liboliphaunt-wasix-aot'], 'postgres-tools-wasix:build-aot') }}
BUILD_EXTENSIONS: ${{ contains(fromJson(inputs.job-targets)['liboliphaunt-wasix-aot'], 'extension-artifacts-wasix:build-aot') }}
run: |
products=(runtime)
if [ "$BUILD_TOOLS" = true ]; then products+=(tools); fi
if [ "$BUILD_EXTENSIONS" = true ]; then products+=(extensions); fi
bun src/wasix/runtime/engine/windows/build-caches.mts "${products[@]}"
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: liboliphaunt-wasix-windows-baseline-caches
path: target/oliphaunt-wasix/engine/windows-x64-msvc/cache/sse41
if-no-files-found: error
build:
name: WASIX host (${{ matrix.target_id }})
runs-on: ${{ matrix.os }}
needs: [windows-engine, windows-caches]
# Linux/macOS must still run when Windows producers are skipped or fail.
if: ${{ !cancelled() }}
timeout-minutes: 240
strategy:
fail-fast: false
Expand All @@ -52,11 +138,34 @@ jobs:
uses: ./.github/actions/setup-rust
with:
cache-save-if: ${{ inputs.cache-save-if }}
tools: ${{ runner.os == 'Windows' && 'cargo-nextest@0.9.137' || '' }}

- name: Set up MSVC
if: ${{ runner.os == 'Windows' }}
uses: ./.github/actions/setup-msvc

- name: Download same-run Windows engine
if: ${{ runner.os == 'Windows' }}
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-wasix-windows-engine
path: .
- name: Download same-run Windows baseline caches
if: ${{ runner.os == 'Windows' }}
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: liboliphaunt-wasix-windows-baseline-caches
path: target/oliphaunt-wasix/engine/windows-x64-msvc/cache/sse41
- name: Set up macOS acquisition and smoke timeout
if: ${{ runner.os == 'macOS' }}
run: |
command -v bash
bash --version
brew list coreutils >/dev/null 2>&1 || HOMEBREW_NO_AUTO_UPDATE=1 brew install coreutils

- name: Prepare engine source
run: .github/scripts/run-moon-targets.sh liboliphaunt-wasix:engine-sources

- name: Download portable WASIX build outputs
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
Expand All @@ -78,6 +187,7 @@ jobs:
path: target/extensions/wasix/assets

- name: Install Wasmer LLVM 22.1 for AOT generation
if: ${{ runner.os != 'Windows' }}
uses: ./.github/actions/setup-wasmer-llvm
with:
cache-save-if: ${{ inputs.cache-save-if }}
Expand All @@ -89,7 +199,8 @@ jobs:
- name: Build, validate, and smoke target AOT artifacts
env:
AOT_TARGET: ${{ matrix.target }}
OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable", "postgres-tools-wasix:compiler-output", "extension-artifacts-wasix:compiler-output"]'
# The uploaded engine already passed engine-test in its producer job.
OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:runtime-portable", "postgres-tools-wasix:compiler-output", "extension-artifacts-wasix:compiler-output", "liboliphaunt-wasix:engine-test", "liboliphaunt-wasix:engine-build"]'
run: .github/scripts/run-planned-moon-job.sh liboliphaunt-wasix-aot

- name: Upload target PostgreSQL WASIX tools
Expand Down Expand Up @@ -150,11 +261,6 @@ jobs:
path: target/extensions/wasix/release-assets
merge-multiple: true

- name: Set up macOS smoke timeout
if: ${{ contains(fromJson(inputs.napi-targets), matrix.target_id) && runner.os == 'macOS' }}
shell: bash
run: brew list coreutils >/dev/null 2>&1 || HOMEBREW_NO_AUTO_UPDATE=1 brew install coreutils

- name: Build WASIX Node-API release assets
if: ${{ contains(fromJson(inputs.napi-targets), matrix.target_id) }}
shell: bash
Expand All @@ -165,7 +271,7 @@ jobs:
OLIPHAUNT_WASIX_EXTENSION_ARTIFACT_ROOT: ${{ github.workspace }}/target/extension-artifacts
OLIPHAUNT_WASIX_GENERATED_ASSETS_DIR: ${{ github.workspace }}/target/oliphaunt-wasix/assets
OLIPHAUNT_WASIX_NAPI_ARTIFACT_SOURCE_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["extension-artifacts-wasix:build-target", "extension-artifacts-wasix:build-aot", "liboliphaunt-wasix:runtime-aot"]'
OLIPHAUNT_MOON_TRANSFERRED_DEPS_JSON: '["liboliphaunt-wasix:engine-build", "extension-artifacts-wasix:build-target", "extension-artifacts-wasix:build-aot", "liboliphaunt-wasix:runtime-aot"]'
run: .github/scripts/run-planned-moon-job.sh wasix-napi

- name: Upload WASIX Node-API release assets
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ node_modules/
/src/docs/out/
/src/wasix/runtime/crates/assets/assets/
/src/wasix/runtime/crates/aot/*/artifacts/
/src/wasix/runtime/engine/crates/*/upstream/
/src/wasix/runtime/engine/crates/*/.prepared.json
/src/wasix/runtime/engine/crates/*/prebuilt/
/src/native/sdks/react-native/ios/vendor/oliphaunt-swift/
/src/native/sdks/react-native/ios/vendor/liboliphaunt.xcframework/
**/.DS_Store
Expand Down
4 changes: 4 additions & 0 deletions .moon/tasks/inputs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ fileGroups:
- "/src/third-party/postgres/COPYRIGHT"
- "/src/third-party/icu/LICENSE"
- "/src/third-party/openssl/LICENSE.txt"
- "/src/wasix/runtime/engine/licenses/Wasmer-LICENSE"
- "/src/wasix/runtime/engine/licenses/V8-LICENSES.txt"
packaging-source:
- "/tools/packaging/*.{mjs,mts,sh}"
- "!/tools/packaging/*.test.{mjs,mts,sh}"
Expand All @@ -42,6 +44,8 @@ fileGroups:
- "/src/extensions/contrib/*.toml"
- "/src/extensions/external/**/{recipe,source}.toml"
- "/src/third-party/postgres/source.toml"
- "/src/wasix/runtime/engine/source.toml"
- "/src/wasix/runtime/engine/contract.mts"
- "/tools/release/release-graph.mts"
- "/tools/release/release-history.mts"
- "/src/extensions/artifacts/packages/tools/contrib-carriers.mts"
Expand Down
Loading
Loading