Release
Build a signed release APK and publish it to GitHub from the release/apk branch.
Usage: /release <version> (e.g., /release 1.0.2)
Prerequisites
- •
signing.propertiesandrelease.jksin the parent directory (../) - •
ghCLI installed and authenticated
Branch strategy
- •
release/apk-- branch used for GitHub APK releases (this skill) - •
release-- separate branch for Play Store releases (not managed here)
Steps
- •
Update docs and skills -- before building, review and update based on changes since the last release:
- •
skill-engine/src/main/assets/skills/about-oneclaw/SKILL.md-- the LLM's knowledge base about OneClaw; update to reflect any new modules, tools, architecture changes, data flow updates, or config changes - •
README.md-- ensure feature list, install instructions, and screenshots reflect the current state - •
docs/index.md-- landing page (install instructions, provider list, screenshots, doc links) - •
docs/reference.md-- plugin & skill reference (add new plugins/tools, update counts, fix categories) - •
docs/memory.md-- memory system (character limits, search algorithm, flush behavior) - •
docs/skill-loading.md-- skill loading architecture (frontmatter fields, filtering, XML format) - •Commit any doc changes on
mainbefore proceeding to the release branch.
- •
- •
Prepare the
release/apkbranch:- •If the branch does not exist yet, create it from
main:bashgit checkout -b release/apk main
- •If it already exists, check it out and merge
maininto it:bashgit checkout release/apk git merge main
- •If the branch does not exist yet, create it from
- •
Copy signing files from parent directory into project root (they are gitignored):
bashcp ../signing.properties signing.properties cp ../release.jks release.jks
- •
Preflight checks -- abort if any fail:
- •Current branch is
release/apk - •Working tree is clean (
git status --porcelainis empty) - •
signing.propertiesexists in project root - •
release.jksexists in project root - •
gh auth statussucceeds - •Tag
v<VERSION>does not already exist
- •Current branch is
- •
Build the release APK:
bash./gradlew assembleRelease
Verify
app/build/outputs/apk/release/app-release.apkexists, then rename it:bashcp app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/oneclaw-<VERSION>.apk
- •
Generate release notes from commits since the previous tag:
bashPREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null) git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" | grep -v "^- chore:" - •
Show the user the version, commit list, and generated notes. Ask for confirmation before proceeding.
- •
Tag and push:
bashgit tag v<VERSION> git push origin release/apk git push origin v<VERSION>
- •
Create the GitHub release with the APK attached:
bashgh release create v<VERSION> \ app/build/outputs/apk/release/oneclaw-<VERSION>.apk \ --title "v<VERSION>" \ --notes "<NOTES>"
- •
Print the release URL.
- •
Return to main:
bashgit checkout main
Release notes rules
- •Always include a
## What's Newheading followed by bullet points. - •Pull bullets from
git logbetween the previous tag and HEAD. - •Filter out
chore:commits -- they are not user-facing. - •NEVER use the auto-generated "Full Changelog" link as the sole description.
Arguments
$ARGUMENTS