From 0eac60147b8d581d5e093fcfaf97b259bb4ad178 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Thu, 16 Apr 2026 14:46:31 -0600 Subject: [PATCH] fix file reads; bump version to v0.3.2 Reading from files via e.g. `os.ReadFile` was broken due to a bug in the `wasi_snapshot_preview1` adapter _and_ another bug in my patched version of Go. The following PR and commit fix those issues: - https://github.com/bytecodealliance/wasmtime/pull/13111 - https://github.com/dicej/go/commit/1f14282c53444424c250f5e023dc7a777d897632 I've updated the adapter using a build from https://github.com/bytecodealliance/wasmtime/commit/d60f17817df1127e4968b4c0bc7e46e6614601ee and pointed the Go URL to the new release URL. I've also updated the download directory to force a new download for users which may already have the old version. Finally, I've updated the Go wrapper to point to the `v0.3.2` release (which doesn't exist yet, but will soon). Previously, we were pointing to the `canary` release on the `main` branch, but it's annoying to switch back and forth when tagging releases, so let's just leave it set to whatever the latest release is for now. --- Cargo.toml | 2 +- main.go | 7 +------ src/utils.rs | 4 ++-- src/wasi_snapshot_preview1.reactor.wasm | Bin 52573 -> 54893 bytes 4 files changed, 4 insertions(+), 9 deletions(-) mode change 100644 => 100755 src/wasi_snapshot_preview1.reactor.wasm diff --git a/Cargo.toml b/Cargo.toml index 74d6423..ca3f2dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ reqwest = { version = "0.13.1", features = ["blocking"] } tar = "0.4" [workspace.package] -version = "0.3.1" +version = "0.3.2" edition = "2024" [workspace.lints.clippy] diff --git a/main.go b/main.go index 03542f5..528379c 100644 --- a/main.go +++ b/main.go @@ -24,12 +24,7 @@ import ( // Although `componentize-go` is written in Rust, we can use this wrapper to // make it available using e.g. `go install` and/or `go tool`. func main() { - // This is hard-coded to point to the latest canary release, which is - // appropriate for the `main` branch, but should be changed to the tag - // name for each tagged release. - // - // TODO: Can we automate updating this for each release? - release := "canary" + release := "v0.3.2" directories := userdirs.ForApp( "componentize-go", diff --git a/src/utils.rs b/src/utils.rs index c6ebd76..2405e9f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -420,7 +420,7 @@ pub fn pick_go(resolve: &Resolve, world: WorldId, go_path: Option<&Path>) -> Res bad_arch => panic!("ARCH not supported: {bad_arch}"), }; - let cache_dir = &cache_dir.join("componentize-go"); + let cache_dir = &cache_dir.join("componentize-go").join("v2"); let name = &format!("go-{os}-{arch}-bootstrap"); let dir = cache_dir.join(name); let bin = dir.join("bin").join("go"); @@ -433,7 +433,7 @@ pub fn pick_go(resolve: &Resolve, world: WorldId, go_path: Option<&Path>) -> Res if !bin.exists() { let url = format!( - "https://github.com/dicej/go/releases/download/go1.25.5-wasi-on-idle/{name}.tbz" + "https://github.com/dicej/go/releases/download/go1.25.5-wasi-on-idle-v2/{name}.tbz" ); eprintln!("Downloading patched Go from {url}."); diff --git a/src/wasi_snapshot_preview1.reactor.wasm b/src/wasi_snapshot_preview1.reactor.wasm old mode 100644 new mode 100755 index ee3966926d5c32906619d0e6fc1ab3ed07a553a4..51ea76b6444e0c90a391e34d5f0da7f95eafd66c GIT binary patch delta 18895 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