Skip to content

fix(release): stage the iOS static archives at their real paths - #414

Merged
Peefy merged 1 commit into
mainfrom
fix/download-libs-ios-archive-path
Oct 20, 2026
Merged

Peefy merged 1 commit into
mainfrom
fix/download-libs-ios-archive-path

Conversation

@Peefy

@Peefy Peefy commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Summary

vendor-libs.yaml's iOS job fails before it can commit anything, which blocks every release under the new release-branch process.

build_ios() in hack/download-libs.sh receives the same "dir:file" destination stage() does — go/lib/ios-arm64:libkcl.a — but uses it whole as the install path. The archive therefore lands in a file literally named ios-arm64:libkcl.a sitting beside the go/lib/ios-arm64/ directory, and the job's own verification immediately fails:

fatal error: lipo: can't open input file: go/lib/ios-arm64/libkcl.a (No such file or directory)

build_ios() has never run before this: it was added in #407, after the v0.13.1 tag, so v0.13.2 is its first exercise. The release/v0.13.1 vendor run on 2026-10-13 failed for the same reason.

The fix splits dest the same way stage() does, so both functions agree on what a destination is.

What is not affected

build-libkcl-mobile.yaml stages the same two archives inline with explicit paths, so it was never affected. Only the vendor-libs.yaml path goes through build_ios().

Test plan

Run locally on a macOS arm64 host, which is what the job runs on:

./hack/download-libs.sh --version v0.13.2 ios-arm64 ios-arm64-sim
lipo -info go/lib/ios-arm64/libkcl.a
lipo -info go/lib/ios-arm64-sim/libkcl.a

Before:

==> done; KCL v0.13.2 runtime binaries are in place
$ ls go/lib/
darwin-amd64  darwin-arm64  dummy.go  ios-arm64  ios-arm64-sim  ...
$ lipo -info go/lib/ios-arm64/libkcl.a
fatal error: lipo: can't open input file: go/lib/ios-arm64/libkcl.a (No such file or directory)

After:

    staged go/lib/ios-arm64/libkcl.a ( 79M)
    staged go/lib/ios-arm64-sim/libkcl.a ( 79M)
$ lipo -info go/lib/ios-arm64/libkcl.a
Non-fat file: go/lib/ios-arm64/libkcl.a is architecture: arm64
$ lipo -info go/lib/ios-arm64-sim/libkcl.a
Non-fat file: go/lib/ios-arm64-sim/libkcl.a is architecture: arm64

ls go/lib/ shows no stray ios-arm64:libkcl.a.

🤖 Generated with Claude Code

build_ios() took the same "dir:file" destination stage() does but used it
whole as the install path, so the archive landed in a file literally named
`ios-arm64:libkcl.a` sitting beside the go/lib/ios-arm64/ directory. Nothing
downstream reads that name: the job's own `lipo -info go/lib/ios-arm64/
libkcl.a` check failed with "No such file or directory" and aborted before
the vendoring commit, which is how the first release to run this path — the
v0.13.2 branch — could not be vendored at all.

Splitting dest the way stage() does makes the two functions agree on what a
destination is.

build-libkcl-mobile.yaml stages the same two archives inline with explicit
paths, so it was never affected; only the vendor-libs path goes through here.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Peefy <xpf6677@163.com>
@Peefy
Peefy force-pushed the fix/download-libs-ios-archive-path branch from e644609 to 542e3ae Compare October 20, 2026 06:02
@Peefy
Peefy merged commit 8779a4e into main Oct 20, 2026
18 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant