From kmp-forge
Configure and ship release artifacts (APK/AAB, .ipa, desktop installers, web bundle) via GitHub Releases on v* tag push for kmp-forge projects. Use when setting up release CI, debugging release uploads, or planning artifact naming.
How this skill is triggered — by the user, by Claude, or both
Slash command
/kmp-forge:github-release-artifactsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The v1 default distribution tier for kmp-forge projects. Zero infra cost. Tag push → release artifacts attached to a GitHub Release with auto-generated body.
The v1 default distribution tier for kmp-forge projects. Zero infra cost. Tag push → release artifacts attached to a GitHub Release with auto-generated body.
.github/workflows/release.yml ships with the kmp-forge overlay. Key jobs:
on:
push:
tags: ['v*']
jobs:
android: # always
ios: # if vars.IOS_ENABLED == 'true'
desktop: # if desktop opted in (TBD)
web: # if web opted in (TBD)
changelog-and-release: # creates the GH Release with artifacts
| Secret | Encoding | What it is |
|---|---|---|
ANDROID_KEYSTORE_BASE64 | base64 of release.keystore | Decoded to $RUNNER_TEMP/release.keystore |
ANDROID_KEYSTORE_PASSWORD | plain | Keystore password |
ANDROID_KEY_ALIAS | plain | Key alias inside keystore |
ANDROID_KEY_PASSWORD | plain | Key password |
Encode the keystore once locally:
base64 -i release.keystore | pbcopy
# paste into ANDROID_KEYSTORE_BASE64 secret
Set in repo Settings → Secrets and variables → Actions → Variables:
IOS_ENABLED = true — enables the iOS build leg in PR + release workflows. Default unset → false (Android-only).Default outputs:
composeApp/build/outputs/bundle/release/composeApp-release.aab + composeApp/build/outputs/apk/release/composeApp-release.apkbuild/ipa/iosApp.ipacomposeApp/build/compose/binaries/main/dmg/*.dmg (macOS) — similar for .msi, .debcomposeApp/build/distributions/<app>.zipThe release workflow uploads them as-is. Rename via gradlew renameRelease-style task if you want versioned names like myapp-0.3.0.aab — not in v0.1.0, but trivial to add.
Auto-populated from git-cliff. See git-cliff-changelog skill.
GitHub Release artifacts are great for:
Graduate when:
The opt-in Firebase App Distribution and gradle-play-publisher + App Store Connect API tiers handle that. Both are documented in docs/release.md and wired by /kmp-forge-init (currently print-note for v0.1.0; full wiring lands in v0.2).
Error: No files found: artifact upload step's glob didn't match. Check the actual output path of the Gradle task (composeApp/build/outputs/...).KEYSTORE_PATH env not set, or base64-decode produced empty file. Verify secret encoding.xcrun altool rejects the build: usually missing entitlements or invalid provisioning profile. See docs/ios-troubleshooting.md.git-cliff ran but found no matching commits since last tag. Check tag pattern + commit message format.If you need to ship without CI (rare), use gh CLI:
gh release create v0.3.0 \
--title "v0.3.0" \
--notes "$(git cliff --latest --strip header)" \
composeApp/build/outputs/bundle/release/*.aab \
composeApp/build/outputs/apk/release/*.apk
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub arthurnagy/kmp-forge --plugin kmp-forge