Skip to content

Build the SDKs' native assets once, and publish them as a release - #2

Merged
wf9a5m75 merged 4 commits into
mainfrom
ci/release-artifacts
Oct 25, 2026
Merged

wf9a5m75 merged 4 commits into
mainfrom
ci/release-artifacts

Conversation

@wf9a5m75

Copy link
Copy Markdown
Contributor

Stacked on the feature/split-layer-bindings PR. It needs that branch's style and PNG encoder bindings.

The SDKs each carry a copy of this repo's build output, copied in by scripts/sync-sdk.sh from a local build. Nothing records which commit a copy came from. In react-sdk the web dist/ is also gitignored, so it cannot build from a clean checkout. This adds a release that the SDKs can pin and verify instead.

release.yml

Job Runner Builds
Check versions ubuntu Checks that the Cargo workspace, bindings/js and bindings/js-style versions match, and on a tag, that they match the tag
Web ubuntu npm run build in bindings/js and bindings/js-style
iOS macos build-ios.sh, build-ios-style.sh, build-ios-core-png.sh
Android ubuntu (runner's NDK) build-android.sh, build-android-style.sh, build-android-core-png.sh
Publish macos SHA256SUMS, plus release notes with the commit and the toolchain; on a v* tag, runs gh release create
  • Pull requests that touch the build (the workflow, scripts/build-*.sh, scripts/package-release.sh) run everything except the publish. A broken build shows up before a tag is pushed.
  • Tool installs follow test.yml: wasm-pack is installed with cargo install, with no third-party actions beyond the existing ones.

Assets (scripts/package-release.sh)

Platform Assets
web vectortile-web.tgz, vectorstyle-web.tgz (pkg/ without wasm-pack's .gitignore, dist/, package.json)
ios MvtRender.xcframework.zip, MvtStyle.xcframework.zip, TilePng.xcframework.zip (top entry is the .xcframework, as binaryTarget(url:checksum:) expects), ios-sources.tgz (the Swift/C glue)
android android-{vectortile,vectorstyle,core}-jniLibs.zip, android-sources.tgz (the Kotlin glue)

Each platform's assets carry what sync-sdk.sh copies for it.

bindings/js-style gains a package-lock.json, so CI can npm ci it.

Checked

  • package-release.sh was run locally on all three platforms against existing builds. Asset layout was confirmed with tar -t and unzip -l.
  • swift package compute-checksum accepts the iOS zips.
  • The workflow itself first runs on this PR.

Not changed

  • Android vectortile ABIs: build-android.sh still builds only arm64-v8a for the renderer. The style compiler and PNG encoder have three ABIs.
  • Rust toolchain: stable, as in test.yml. The version used is written into the release notes.

The SDKs have each carried a copy of this repo's build output, made by
scripts/sync-sdk.sh from whatever was built locally. Nothing records
which commit a copy came from, and react-sdk cannot even build from a
clean checkout because the web dist is gitignored there.

release.yml builds web (wasm), iOS (xcframework) and Android (jniLibs)
on CI and, on a v* tag, publishes them with SHA256SUMS so an SDK can pin
a tag and verify what it fetched. Pull requests that touch the build run
everything but the publish.

scripts/package-release.sh packs each platform's products into the
assets; it carries what sync-sdk.sh copies, so a release can replace a
local build. bindings/js-style gains a lockfile so CI can npm ci it.
Base automatically changed from feature/split-layer-bindings to main October 25, 2026 06:51
@wf9a5m75
wf9a5m75 merged commit e87e8ad into main Oct 25, 2026
6 checks passed
@wf9a5m75
wf9a5m75 deleted the ci/release-artifacts branch October 25, 2026 06:51
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