From e0c0c4ab7252981fb21d8ece1cd279e1a120e933 Mon Sep 17 00:00:00 2001 From: JairusSW Date: Thu, 10 Sep 2026 22:36:41 -0400 Subject: [PATCH 1/2] Add Windows support and conformance coverage --- .github/workflows/ci.yml | 36 +++++++++++++++++++ README.md | 5 +++ conformance_test.go | 17 ++++++++- plugin.go | 3 +- testdata/conformance/README.md | 4 +++ .../conformance/wasmtime/xfail_windows.json | 4 +++ testdata/conformance/xfail_windows.json | 4 +++ wago.json | 3 +- wago.providers.json | 12 +++++-- 9 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 testdata/conformance/wasmtime/xfail_windows.json create mode 100644 testdata/conformance/xfail_windows.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ba4f4e..fd34b5c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,3 +32,39 @@ jobs: run: go build ./... - name: Test with race detector and coverage run: go test -race -covermode=atomic -coverprofile=coverage.out ./... + + windows: + name: Windows amd64 + runs-on: windows-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 + with: + go-version-file: go.mod + cache: true + - name: Format + shell: bash + run: test -z "$(gofmt -l .)" + - name: Vet + run: go vet ./... + - name: Build + run: go build ./... + - name: Test + run: go test -timeout 20m ./... + + windows-arm64: + name: Windows arm64 + runs-on: windows-11-arm + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + - uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 + with: + go-version-file: go.mod + cache: true + - name: Vet + run: go vet ./... + - name: Build + run: go build ./... + - name: Test + run: go test -timeout 20m ./... diff --git a/README.md b/README.md index 4ef5722..a2d3efd 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,11 @@ Malformed component encodings, invalid type relationships, out-of-bounds memory access, bad resource ownership transfers, missing imports, and unsupported behavior return errors or named guest traps. +The provider supports Wago on `linux/amd64`, `linux/arm64`, `darwin/amd64`, +`darwin/arm64`, `windows/amd64`, and `windows/arm64`. Component graphs that +require a Core WebAssembly feature unavailable on the selected Wago backend +fail closed during compilation. + ## Test ```sh diff --git a/conformance_test.go b/conformance_test.go index 98fea09..f117d4c 100644 --- a/conformance_test.go +++ b/conformance_test.go @@ -8,6 +8,7 @@ import ( "fmt" "math" "reflect" + "runtime" "strconv" "strings" "testing" @@ -17,7 +18,7 @@ import ( "github.com/wago-org/component-model/internal/binary" ) -//go:embed testdata/conformance/manifest.json testdata/conformance/xfail.json testdata/conformance/generated/*.wasm testdata/conformance/wasmtime/manifest.json testdata/conformance/wasmtime/xfail.json testdata/conformance/wasmtime/generated/*.wasm +//go:embed testdata/conformance/manifest.json testdata/conformance/xfail.json testdata/conformance/xfail_windows.json testdata/conformance/generated/*.wasm testdata/conformance/wasmtime/manifest.json testdata/conformance/wasmtime/xfail.json testdata/conformance/wasmtime/xfail_windows.json testdata/conformance/wasmtime/generated/*.wasm var conformanceFixtures embed.FS type conformanceManifest struct { @@ -167,6 +168,20 @@ func readConformanceXfails(t *testing.T, path string) map[string]string { if err := json.Unmarshal(data, &xfails); err != nil { t.Fatal(err) } + if runtime.GOOS == "windows" { + platformPath := strings.TrimSuffix(path, ".json") + "_windows.json" + data, err := conformanceFixtures.ReadFile(platformPath) + if err != nil { + t.Fatal(err) + } + var platform map[string]string + if err := json.Unmarshal(data, &platform); err != nil { + t.Fatal(err) + } + for id, reason := range platform { + xfails[id] = reason + } + } return xfails } diff --git a/plugin.go b/plugin.go index 24048e7..dc16cbd 100644 --- a/plugin.go +++ b/plugin.go @@ -53,7 +53,8 @@ func Definition() wago.PluginDefinition { Description: "WebAssembly Component Model execution and Canonical ABI linking for Wago.", Stability: wago.Experimental, Compatibility: wago.Compatibility{ - Engines: map[string]string{"wago": ">=0.1.0"}, + Engines: map[string]string{"wago": ">=0.1.0"}, + Platforms: []string{"darwin/amd64", "darwin/arm64", "linux/amd64", "linux/arm64", "windows/amd64", "windows/arm64"}, }, Provenance: wago.PluginProvenance{ Homepage: "https://github.com/wago-org/component-model#readme", diff --git a/testdata/conformance/README.md b/testdata/conformance/README.md index e8c9db3..5d8e30b 100644 --- a/testdata/conformance/README.md +++ b/testdata/conformance/README.md @@ -39,3 +39,7 @@ failure ledgers in `xfail.json`; an expected failure that starts passing fails the suite until its ledger entry is removed. Unsupported parent instances are still represented in the manifest, so their child assertions become runnable without another fixture import once the parent feature lands. + +Platform-specific backend gaps use adjacent `xfail_.json` ledgers. These +have the same unexpected-pass behavior as the shared ledger and must only +describe failures caused by the selected Wago platform backend. diff --git a/testdata/conformance/wasmtime/xfail_windows.json b/testdata/conformance/wasmtime/xfail_windows.json new file mode 100644 index 0000000..75f55c5 --- /dev/null +++ b/testdata/conformance/wasmtime/xfail_windows.json @@ -0,0 +1,4 @@ +{ + "async__intra-streams__0004__L118": "Wago's Windows backend does not yet implement core multi-memory", + "async__intra-streams__0006__L179": "Wago's Windows backend does not yet implement core multi-memory" +} diff --git a/testdata/conformance/xfail_windows.json b/testdata/conformance/xfail_windows.json new file mode 100644 index 0000000..bc60810 --- /dev/null +++ b/testdata/conformance/xfail_windows.json @@ -0,0 +1,4 @@ +{ + "linking__unit__0036__L261": "Wago's Windows backend does not yet implement core multi-memory", + "linking__unit__0054__L355": "Wago's Windows backend does not yet implement core multi-memory" +} diff --git a/wago.json b/wago.json index ff81c88..b37487e 100644 --- a/wago.json +++ b/wago.json @@ -12,6 +12,7 @@ "category": "runtime", "tags": ["webassembly", "component-model", "canonical-abi", "runtime"], "authors": [{"name": "Jairus Tanaka", "github": "JairusSW"}], - "engines": {"wago": ">=0.1.0"} + "engines": {"wago": ">=0.1.0"}, + "platforms": ["darwin/amd64", "darwin/arm64", "linux/amd64", "linux/arm64", "windows/amd64", "windows/arm64"] } } diff --git a/wago.providers.json b/wago.providers.json index 3a326e6..1c03c60 100644 --- a/wago.providers.json +++ b/wago.providers.json @@ -12,7 +12,15 @@ "compatibility": { "engines": { "wago": "\u003e=0.1.0" - } + }, + "platforms": [ + "darwin/amd64", + "darwin/arm64", + "linux/amd64", + "linux/arm64", + "windows/amd64", + "windows/arm64" + ] }, "provenance": { "homepage": "https://github.com/wago-org/component-model#readme", @@ -57,7 +65,7 @@ } ] }, - "definitionDigest": "sha256:e5a10f39c613b58e12e5b59d2cdbda1d5a95eff9b247e15eb3063c532c8dca4c" + "definitionDigest": "sha256:d2c00c06100f562cb1fe1ac1289c1d9d09ef2c31a5e15d47a48a4c0a39eb0fd3" } ] } From 81b403e7b56faff652189ca3b72415922cdc9861 Mon Sep 17 00:00:00 2001 From: JairusSW Date: Thu, 10 Sep 2026 22:42:27 -0400 Subject: [PATCH 2/2] Keep Windows checkouts canonical --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..472c4a2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.go text eol=lf +*.json text eol=lf +*.yml text eol=lf