ワンクリックで
release-engineering
// Release engineering tasks for RakuRaku IME — version bumping, building release APKs, tagging, and creating GitHub releases. Use when the user asks to prepare a release, bump version, tag, or build for distribution.
// Release engineering tasks for RakuRaku IME — version bumping, building release APKs, tagging, and creating GitHub releases. Use when the user asks to prepare a release, bump version, tag, or build for distribution.
| name | release-engineering |
| description | Release engineering tasks for RakuRaku IME — version bumping, building release APKs, tagging, and creating GitHub releases. Use when the user asks to prepare a release, bump version, tag, or build for distribution. |
| argument-hint | task description |
You are performing release engineering tasks for RakuRaku IME (輕鬆輸入法).
MAJOR.MINOR.PATCH (e.g. 1.0.4).app/build.gradle.kts under defaultConfig.Bump manually by editing app/build.gradle.kts. No bumpPatchVersion Gradle task exists in this repo — do not invoke one.
Ensure all changes are committed on main.
Bump version — edit app/build.gradle.kts:
versionCode by 1.versionName per the change's scope (patch / minor / major).Update docs if needed — README.md, TODOs.md.
Run verification before committing:
./gradlew :app:lint
./gradlew :app:testDebugUnitTest # if unit tests exist
./gradlew :app:assembleDebug
./gradlew :app:assembleRelease # release build (minification per build.gradle.kts)
Create release commit — subject: Release <versionName>. This must happen before signing.
Tag the release — lightweight tag matching versionName (e.g. 1.0.4), no v prefix:
git tag <versionName>
Build signed APKs from the tagged release commit. Signing requires a keystore passphrase — do not run the signed build automatically. Before prompting the user, explicitly remind them:
⚠️ Build the signed APKs from the
<versionName>commit (git rev-parse <versionName>). The APK embeds a VCS-info block with the commit SHA; if you sign from a dirty or pre-commit working tree, F-Droid's reproducible build will produce a different checksum than the binary attached to the GitHub release, and theAllowedAPKSigningKeysmatch will fail downstream.
Confirm git status is clean and git rev-parse HEAD matches the tag before asking the user to sign. The artifacts land in app/release/*.apk and app/debug/*.apk, with matching .asc signature files.
Push commit and tag after the user confirms (user's standing preference: push without pausing for confirmation when a release is fully prepared):
git push origin main
git push origin <versionName>
Create the GitHub Release with gh once signed APKs are ready. Write a short human-readable summary; do not rely solely on --generate-notes.
gh release create <versionName> \
--title "<versionName>" \
--notes "$(cat <<'EOF'
<short human-readable summary>
**Full Changelog**: https://github.com/hiroshiyui/RakuRakuIME/compare/<previous-tag>...<versionName>
EOF
)" \
app/release/org.ghostsinthelab.app.rakurakuime-<versionName>-release.apk \
app/release/org.ghostsinthelab.app.rakurakuime-<versionName>-release.apk.asc \
app/debug/org.ghostsinthelab.app.rakurakuime-<versionName>-debug.apk \
app/debug/org.ghostsinthelab.app.rakurakuime-<versionName>-debug.apk.asc
Attach both release and debug APKs plus their .asc signatures (established pattern from 1.0.3 / 1.0.4).
Nothing to do here. The app is published on F-Droid and the
fdroiddata metadata file
(/home/yhh/MyProjects/fdroiddata/metadata/org.ghostsinthelab.app.rakurakuime.yml)
is refreshed automatically by F-Droid's AutoUpdateMode: Version +
UpdateCheckMode: Tags, picking up each new Builds: entry from
the tagged release. Do not edit that file by hand, and do not
reintroduce the old in-repo fdroid.yml reference copy — it was
removed once F-Droid took over as the source of truth.
Fastlane per-locale changelogs must be refreshed for every versionCode that ships publicly:
fastlane/metadata/android/en-US/changelogs/<versionCode>.txtfastlane/metadata/android/zh-TW/changelogs/<versionCode>.txtNotes:
<versionCode>.txt, not <versionName>.txt. So 1.0.4 (versionCode 6) lands at 6.txt.fastlane/metadata/android/{en-US,zh-TW}/images/phoneScreenshots/ are updated by the separate /take-and-update-screenshots skill — don't regenerate them here unless the UI changed visibly in this release../gradlew :app:assembleDebug # Debug build
./gradlew :app:assembleRelease # Release build
./gradlew :app:lint
./gradlew :app:testDebugUnitTest # Unit tests (if present)
./gradlew :app:connectedDebugAndroidTest # Instrumented tests (needs device/emulator)
./gradlew :app:clean
origin → git@github.com:hiroshiyui/RakuRakuIME.git. No mirror.main is never done without explicit user authorisation.gh release create. Fastlane changelogs land inside the bump commit (changelogs/<versionCode>.txt); F-Droid's fdroiddata entry updates automatically off the new tag.Builds: and compares checksums against the binary on the GitHub release. Signing from a dirty or pre-commit working tree silently breaks that match because the APK's VCS-info block embeds the HEAD SHA. Always sign AFTER the release commit+tag is in place.Capture the four RakuRaku showcase screenshots on a connected device and refresh the fastlane metadata. Use when the user asks to take, update, or regenerate screenshots.
Commit code changes and push via Git. Use when the user asks to commit, push, or save their work to the repository.
Review code for quality, correctness, and security vulnerabilities. Use when the user asks to review code, audit for security issues, or check for bugs and anti-patterns.
Writing/updating project documentation for RakuRaku IME (README, TODOs, LICENSE notices, AI-assistant guide files). Use when the user asks to update docs or rewrite user-facing text.