chore: add project-level yayacal-release skill
This commit is contained in:
parent
fae7654452
commit
db31b9eaed
74
.agents/skills/yayacal-release/SKILL.md
Normal file
74
.agents/skills/yayacal-release/SKILL.md
Normal file
@ -0,0 +1,74 @@
|
||||
---
|
||||
name: yayacal-release
|
||||
description: Use when the user asks to release a new version of the yayacal Android calendar app
|
||||
---
|
||||
|
||||
# YaYa Release
|
||||
|
||||
## Overview
|
||||
|
||||
One-shot local release workflow for the yayacal Android app. All steps run on the developer machine using `gh` CLI.
|
||||
|
||||
## When to Use
|
||||
|
||||
- User says something like "发布 1.2.0", "release v1.3.0", "发一个新版本".
|
||||
- Working in `/Users/issuser/Developer/xfy/yayacal`.
|
||||
|
||||
## Release Steps
|
||||
|
||||
1. **Confirm version number** with the user if not provided.
|
||||
2. **Update version numbers**:
|
||||
- `gradle.properties`: `app.version.base=x.y.z`
|
||||
- `app/build.gradle.kts`: increment `versionCode` by 1
|
||||
3. **Update `CHANGELOG.md`**:
|
||||
- Compare commits since the last tag: `git log <last-tag>..HEAD --pretty=format:"%s"`
|
||||
- Group into Added / Changed / Fixed
|
||||
- Insert `## [x.y.z] - YYYY-MM-DD` below `## [Unreleased]`
|
||||
- Append `[x.y.z]: https://github.com/xfy/yayacal/releases/tag/vx.y.z` at the bottom
|
||||
4. **Commit** with the exact message:
|
||||
```bash
|
||||
git add CHANGELOG.md gradle.properties app/build.gradle.kts
|
||||
git commit -m "release: vx.y.z"
|
||||
```
|
||||
5. **Tag and push** (lightweight tag, matching previous releases):
|
||||
```bash
|
||||
git tag vx.y.z
|
||||
git push origin main --tags
|
||||
```
|
||||
6. **Build release APK**:
|
||||
```bash
|
||||
./gradlew :app:assembleRelease
|
||||
```
|
||||
7. **Create GitHub Release** with the current version's CHANGELOG as body:
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
import re
|
||||
content = open('CHANGELOG.md').read()
|
||||
m = re.search(r'## \[x.y.z\] - .*?\n(.*?)\n## \[', content, re.DOTALL)
|
||||
open('/tmp/vx.y.z-notes.md', 'w').write(m.group(1).strip())
|
||||
PY
|
||||
gh release create vx.y.z \
|
||||
app/build/outputs/apk/release/app-release.apk \
|
||||
--title "YaYa vx.y.z" \
|
||||
--notes-file /tmp/vx.y.z-notes.md
|
||||
```
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| Version base | `gradle.properties` → `app.version.base` |
|
||||
| Version code | `app/build.gradle.kts` → `versionCode` |
|
||||
| APK path | `app/build/outputs/apk/release/app-release.apk` |
|
||||
| Commit message | `release: vx.y.z` |
|
||||
| Tag format | lightweight `vx.y.z` |
|
||||
| Release title | `YaYa vx.y.z` |
|
||||
| Signing | Keep existing debug signing; do **not** add release keystore logic |
|
||||
|
||||
## Common Mistakes
|
||||
|
||||
- **Wrong commit message**: Do not use `chore(release): ...` or `build: ...`. Use exactly `release: vx.y.z`.
|
||||
- **Annotated tag**: Previous releases use lightweight tags; do not add `-a`.
|
||||
- **Empty release body**: Always extract the current version's CHANGELOG section and pass it to `--notes-file`.
|
||||
- **Releasing from a dirty tree**: Run `git status` first; only release from a clean `main` branch.
|
||||
- **Forgetting to push the tag**: `git push origin main --tags` is required.
|
||||
Loading…
x
Reference in New Issue
Block a user