18 KiB
name, description
| name | description |
|---|---|
| krow-mobile-release | KROW mobile app release process including versioning strategy, CHANGELOG management, GitHub Actions workflows, APK signing, Git tagging, and hotfix procedures. Use this when preparing mobile releases, updating CHANGELOGs, triggering release workflows, creating hotfix branches, troubleshooting release issues, or documenting release features. Covers both staff (worker) and client mobile products across dev/stage/prod environments. |
KROW Mobile Release Process
This skill defines the comprehensive release process for KROW mobile applications (staff and client). It covers versioning, changelog management, GitHub Actions automation, and hotfix procedures.
When to Use This Skill
- Preparing for a mobile app release
- Updating CHANGELOG files with new features
- Triggering GitHub Actions release workflows
- Creating hotfix branches for production issues
- Understanding version numbering strategy
- Setting up APK signing secrets
- Troubleshooting release workflow failures
- Documenting release notes
- Managing release cadence (dev → stage → prod)
Quick Reference
Release Workflows
- Product Release: GitHub Actions - Product Release
- Hotfix Creation: GitHub Actions - Product Hotfix
Key Files
- Staff CHANGELOG:
apps/mobile/apps/staff/CHANGELOG.md - Client CHANGELOG:
apps/mobile/apps/client/CHANGELOG.md - Staff Version:
apps/mobile/apps/staff/pubspec.yaml - Client Version:
apps/mobile/apps/client/pubspec.yaml
Comprehensive Documentation
For complete details, see: docs/RELEASE/mobile-releases.md (900+ lines)
1. Versioning Strategy
Format
v{major}.{minor}.{patch}-{milestone}
Examples:
v0.0.1-m4- Milestone 4 releasev0.1.0-m5- Minor version bump for Milestone 5v1.0.0- First production release (no milestone suffix)
Semantic Versioning Rules
Major (X.0.0):
- Breaking changes
- Complete architecture overhaul
- Incompatible API changes
Minor (0.X.0):
- New features
- Backwards-compatible additions
- Milestone completions
Patch (0.0.X):
- Bug fixes
- Security patches
- Performance improvements
Milestone Suffix:
-m1,-m2,-m3,-m4, etc.- Indicates pre-production milestone phase
- Removed for production releases
Version Location
Versions are defined in pubspec.yaml:
Staff App:
# apps/mobile/apps/staff/pubspec.yaml
name: krow_staff_app
version: 0.0.1-m4+1 # version+build_number
Client App:
# apps/mobile/apps/client/pubspec.yaml
name: krow_client_app
version: 0.0.1-m4+1
Format: version+build
version: Semantic version with milestone (e.g.,0.0.1-m4)build: Build number (increments with each build, e.g.,+1,+2)
2. CHANGELOG Management
Format
Each app maintains a separate CHANGELOG following Keep a Changelog format.
Structure:
# Changelog
All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- New feature descriptions
### Changed
- Modified feature descriptions
### Fixed
- Bug fix descriptions
### Removed
- Removed feature descriptions
## [0.0.1-m4] - Milestone 4 - 2026-03-05
### Added
- Profile management with 13 subsections
- Documents & certificates management
- Benefits overview section
- Camera/gallery support for attire verification
### Changed
- Enhanced session management with auto token refresh
### Fixed
- Navigation fallback to home on invalid routes
Section Guidelines
[Unreleased]
- Work in progress
- Features merged to dev but not released
- Updated continuously during development
[Version] - Milestone X - Date
- Released version
- Format:
[X.Y.Z-mN] - Milestone N - YYYY-MM-DD - Organized by change type (Added/Changed/Fixed/Removed)
Change Type Definitions
Added:
- New features
- New UI screens
- New API integrations
- New user-facing capabilities
Changed:
- Modifications to existing features
- UI/UX improvements
- Performance enhancements
- Refactored code (if user-facing impact)
Fixed:
- Bug fixes
- Error handling improvements
- Crash fixes
- UI/UX issues resolved
Removed:
- Deprecated features
- Removed screens or capabilities
- Discontinued integrations
Writing Guidelines
✅ GOOD:
### Added
- Profile management with 13 subsections organized into onboarding, compliance, finances, and support categories
- Documents & certificates management with upload, status tracking, and expiry dates
- Camera and gallery support for attire verification with photo capture
- Benefits overview section displaying perks and company information
❌ BAD:
### Added
- New stuff
- Fixed things
- Updated code
Key Principles:
- Be specific and descriptive
- Focus on user-facing changes
- Mention UI screens, features, or capabilities
- Avoid technical jargon users won't understand
- Group related changes together
Updating CHANGELOG Workflow
Step 1: During development, add to [Unreleased]:
## [Unreleased]
### Added
- New shift calendar view with month/week toggle
- Shift acceptance confirmation dialog
### Fixed
- Navigation crash when popping empty stack
Step 2: Before release, move to version section:
## [0.1.0-m5] - Milestone 5 - 2026-03-15
### Added
- New shift calendar view with month/week toggle
- Shift acceptance confirmation dialog
### Fixed
- Navigation crash when popping empty stack
## [Unreleased]
<!-- Empty for next development cycle -->
Step 3: Update version in pubspec.yaml:
version: 0.1.0-m5+1
3. Git Tagging Strategy
Tag Format
krow-withus-<app>-mobile/<env>-vX.Y.Z
Components:
<app>:worker(staff) orclient<env>:dev,stage, orprodvX.Y.Z: Semantic version (from pubspec.yaml)
Examples:
krow-withus-worker-mobile/dev-v0.0.1-m4
krow-withus-worker-mobile/stage-v0.0.1-m4
krow-withus-worker-mobile/prod-v0.0.1-m4
krow-withus-client-mobile/dev-v0.0.1-m4
Tag Creation
Tags are created automatically by GitHub Actions workflows. Manual tagging:
# Staff app - dev environment
git tag krow-withus-worker-mobile/dev-v0.0.1-m4
git push origin krow-withus-worker-mobile/dev-v0.0.1-m4
# Client app - prod environment
git tag krow-withus-client-mobile/prod-v1.0.0
git push origin krow-withus-client-mobile/prod-v1.0.0
Tag Listing
# List all mobile tags
git tag -l "krow-withus-*-mobile/*"
# List staff app tags
git tag -l "krow-withus-worker-mobile/*"
# List production tags
git tag -l "krow-withus-*-mobile/prod-*"
4. GitHub Actions Workflows
4.1 Product Release Workflow
File: .github/workflows/product-release.yml
Purpose: Automated production releases with APK signing
Trigger: Manual dispatch via GitHub UI
Inputs:
app: Selectworker(staff) orclientenvironment: Selectdev,stage, orprod
Process:
- ✅ Extracts version from
pubspec.yamlautomatically - ✅ Builds signed APKs for selected app
- ✅ Creates GitHub release with CHANGELOG notes
- ✅ Tags release (e.g.,
krow-withus-worker-mobile/dev-v0.0.1-m4) - ✅ Uploads APKs as release assets
- ✅ Generates step summary with emojis
Key Features:
- No manual version input - reads from pubspec.yaml
- APK signing - uses GitHub Secrets for keystore
- CHANGELOG extraction - pulls release notes automatically
- Visual feedback - emojis in all steps
Usage:
1. Go to: GitHub Actions → "📦 Product Release"
2. Click "Run workflow"
3. Select app (worker/client)
4. Select environment (dev/stage/prod)
5. Click "Run workflow"
6. Wait for completion (~5-10 minutes)
Release Naming:
Krow With Us - Worker Product - DEV - v0.0.1-m4
Krow With Us - Client Product - PROD - v1.0.0
4.2 Product Hotfix Workflow
File: .github/workflows/hotfix-branch-creation.yml
Purpose: Emergency production fix automation
Trigger: Manual dispatch with version input
Inputs:
current_version: Current production version (e.g.,0.0.1-m4)issue_description: Brief description of the hotfix
Process:
- ✅ Creates
hotfix/<version>branch from latest production tag - ✅ Auto-increments PATCH version (e.g.,
0.0.1-m4→0.0.2-m4) - ✅ Updates
pubspec.yamlwith new version - ✅ Updates
CHANGELOG.mdwith hotfix section - ✅ Creates PR back to main branch
- ✅ Includes hotfix instructions in PR description
Usage:
1. Go to: GitHub Actions → "🚨 Product Hotfix - Create Branch"
2. Click "Run workflow"
3. Enter current production version (e.g., 0.0.1-m4)
4. Enter issue description (e.g., "critical crash on login")
5. Click "Run workflow"
6. Workflow creates branch and PR
7. Fix bug on hotfix branch
8. Merge PR to main
9. Use Product Release workflow to deploy
Hotfix Branch Naming:
hotfix/0.0.2-m4-critical-crash-on-login
4.3 Helper Scripts
Location: .github/scripts/
Available Scripts:
- extract-version.sh - Extract version from pubspec.yaml
- generate-tag-name.sh - Generate standardized tag names
- extract-release-notes.sh - Extract CHANGELOG sections
- create-release-summary.sh - Generate GitHub Step Summary with emojis
Script Permissions:
chmod +x .github/scripts/*.sh
Usage Example:
# Extract version from staff app
.github/scripts/extract-version.sh apps/mobile/apps/staff/pubspec.yaml
# Generate tag name
.github/scripts/generate-tag-name.sh worker dev 0.0.1-m4
# Extract release notes for version
.github/scripts/extract-release-notes.sh apps/mobile/apps/staff/CHANGELOG.md 0.0.1-m4
5. APK Signing Setup
Required GitHub Secrets (24 Total)
Per App (12 secrets each):
Staff (Worker) App:
STAFF_UPLOAD_KEYSTORE_BASE64 # Base64-encoded keystore file
STAFF_UPLOAD_STORE_PASSWORD # Keystore password
STAFF_UPLOAD_KEY_ALIAS # Key alias
STAFF_UPLOAD_KEY_PASSWORD # Key password
STAFF_KEYSTORE_PROPERTIES_BASE64 # Base64-encoded key.properties file
Client App:
CLIENT_UPLOAD_KEYSTORE_BASE64
CLIENT_UPLOAD_STORE_PASSWORD
CLIENT_UPLOAD_KEY_ALIAS
CLIENT_UPLOAD_KEY_PASSWORD
CLIENT_KEYSTORE_PROPERTIES_BASE64
Generating Secrets
Step 1: Create Keystore
# For staff app
keytool -genkey -v \
-keystore staff-upload-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias staff-upload
# For client app
keytool -genkey -v \
-keystore client-upload-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias client-upload
Step 2: Base64 Encode
# Encode keystore
base64 -i staff-upload-keystore.jks | tr -d '\n' > staff-keystore.txt
# Encode key.properties
base64 -i key.properties | tr -d '\n' > key-props.txt
Step 3: Add to GitHub Secrets
Repository → Settings → Secrets and variables → Actions → New repository secret
Add each secret:
- Name:
STAFF_UPLOAD_KEYSTORE_BASE64 - Value: Contents of
staff-keystore.txt
Repeat for all 24 secrets.
key.properties Format
storePassword=your_store_password
keyPassword=your_key_password
keyAlias=staff-upload
storeFile=../staff-upload-keystore.jks
6. Release Process (Step-by-Step)
Standard Release (Dev/Stage/Prod)
Step 1: Prepare CHANGELOG
Update CHANGELOG.md with all changes since last release:
## [0.1.0-m5] - Milestone 5 - 2026-03-15
### Added
- Shift calendar with month/week views
- Enhanced navigation with typed routes
- Profile completion wizard
### Fixed
- Session token refresh timing
- Navigation fallback logic
Step 2: Update Version
Edit pubspec.yaml:
version: 0.1.0-m5+1 # Changed from 0.0.1-m4+1
Step 3: Commit and Push
git add apps/mobile/apps/staff/CHANGELOG.md
git add apps/mobile/apps/staff/pubspec.yaml
git commit -m "chore(staff): prepare v0.1.0-m5 release"
git push origin dev
Step 4: Trigger Workflow
- Go to GitHub Actions → "📦 Product Release"
- Click "Run workflow"
- Select branch:
dev - Select app:
worker(orclient) - Select environment:
dev(orstage,prod) - Click "Run workflow"
Step 5: Monitor Progress
Watch workflow execution:
- ⏳ Version extraction
- ⏳ APK building
- ⏳ APK signing
- ⏳ GitHub Release creation
- ⏳ Tag creation
- ⏳ Asset upload
Step 6: Verify Release
- Check GitHub Releases page
- Download APK to verify
- Install on test device
- Verify version in app
Hotfix Release
Step 1: Identify Production Issue
- Critical bug in production
- User-reported crash
- Security vulnerability
Step 2: Trigger Hotfix Workflow
- Go to GitHub Actions → "🚨 Product Hotfix - Create Branch"
- Click "Run workflow"
- Enter current version:
0.0.1-m4 - Enter description:
Critical crash on login screen - Click "Run workflow"
Step 3: Review Created Branch
Workflow creates:
- Branch:
hotfix/0.0.2-m4-critical-crash-on-login - PR to
mainbranch - Updated
pubspec.yaml:0.0.2-m4+1 - Updated
CHANGELOG.mdwith hotfix section
Step 4: Fix Bug
git checkout hotfix/0.0.2-m4-critical-crash-on-login
# Make fixes
# ... code changes ...
git add .
git commit -m "fix(auth): resolve crash on login screen"
git push origin hotfix/0.0.2-m4-critical-crash-on-login
Step 5: Merge PR
- Review PR on GitHub
- Approve and merge to
main - Delete hotfix branch
Step 6: Release to Production
- Use Product Release workflow
- Select
mainbranch - Select
prodenvironment - Deploy hotfix
7. Release Cadence
Development (dev)
- Frequency: Multiple times per day
- Purpose: Testing features in dev environment
- Branch:
dev - Audience: Internal development team
- Approval: Not required
Staging (stage)
- Frequency: 1-2 times per week
- Purpose: QA testing, stakeholder demos
- Branch:
main - Audience: QA team, stakeholders
- Approval: Tech lead approval
Production (prod)
- Frequency: Every 2-3 weeks (milestone completion)
- Purpose: End-user releases
- Branch:
main - Audience: All users
- Approval: Product owner + tech lead approval
Milestone Releases
- Frequency: Every 2-4 weeks
- Version Bump: Minor version (e.g.,
0.1.0-m5→0.2.0-m6) - Process:
- Complete all milestone features
- Update CHANGELOG with comprehensive release notes
- Deploy to stage for final QA
- After approval, deploy to prod
- Create GitHub release with milestone summary
8. Troubleshooting
Workflow Fails: Version Extraction
Error: "Could not extract version from pubspec.yaml"
Solutions:
- Verify
pubspec.yamlexists at expected path - Check version format:
version: X.Y.Z-mN+B - Ensure no extra spaces or tabs
- Verify file is committed and pushed
Workflow Fails: APK Signing
Error: "Keystore password incorrect"
Solutions:
- Verify GitHub Secrets are set correctly
- Re-generate and re-encode keystore
- Check key.properties format
- Ensure passwords don't contain special characters that need escaping
Workflow Fails: CHANGELOG Extraction
Error: "Could not find version in CHANGELOG"
Solutions:
- Verify CHANGELOG format matches:
## [X.Y.Z-mN] - Milestone N - YYYY-MM-DD - Check square brackets are present
- Ensure version matches pubspec.yaml
- Add version section if missing
Tag Already Exists
Error: "tag already exists"
Solutions:
- Delete existing tag locally and remotely:
git tag -d krow-withus-worker-mobile/dev-v0.0.1-m4
git push origin :refs/tags/krow-withus-worker-mobile/dev-v0.0.1-m4
- Re-run workflow
Build Fails: Flutter Errors
Error: "flutter build failed"
Solutions:
- Test build locally first:
cd apps/mobile/apps/staff
flutter build apk --release
- Fix any analyzer errors
- Ensure all dependencies are compatible
- Clear build cache:
flutter clean
flutter pub get
9. Local Testing
Before triggering workflows, test builds locally:
Building APKs Locally
Staff App:
cd apps/mobile/apps/staff
flutter clean
flutter pub get
flutter build apk --release
Client App:
cd apps/mobile/apps/client
flutter clean
flutter pub get
flutter build apk --release
Testing Release Notes
Extract CHANGELOG section:
.github/scripts/extract-release-notes.sh \
apps/mobile/apps/staff/CHANGELOG.md \
0.0.1-m4
Verifying Version
Extract version from pubspec:
.github/scripts/extract-version.sh \
apps/mobile/apps/staff/pubspec.yaml
10. Best Practices
CHANGELOG
- ✅ Update continuously during development
- ✅ Be specific and user-focused
- ✅ Group related changes
- ✅ Include UI/UX changes
- ❌ Don't include technical debt or refactoring (unless user-facing)
- ❌ Don't use vague descriptions
Versioning
- ✅ Use semantic versioning strictly
- ✅ Increment patch for bug fixes
- ✅ Increment minor for new features
- ✅ Keep milestone suffix until production
- ❌ Don't skip versions
- ❌ Don't use arbitrary version numbers
Git Tags
- ✅ Follow standard format
- ✅ Let workflow create tags automatically
- ✅ Keep tags synced with releases
- ❌ Don't create tags manually unless necessary
- ❌ Don't reuse deleted tags
Workflows
- ✅ Test builds locally first
- ✅ Monitor workflow execution
- ✅ Verify release assets
- ✅ Test APK on device before announcing
- ❌ Don't trigger multiple workflows simultaneously
- ❌ Don't bypass approval process
Summary
Release Process Overview:
- Update CHANGELOG with changes
- Update version in pubspec.yaml
- Commit and push to appropriate branch
- Trigger Product Release workflow
- Monitor execution and verify release
- Test APK on device
- Announce to team/users
Key Files:
apps/mobile/apps/staff/CHANGELOG.mdapps/mobile/apps/client/CHANGELOG.mdapps/mobile/apps/staff/pubspec.yamlapps/mobile/apps/client/pubspec.yaml
Key Workflows:
- Product Release (standard releases)
- Product Hotfix (emergency fixes)
For Complete Details:
See docs/RELEASE/mobile-releases.md - 900+ line comprehensive guide with:
- Detailed APK signing setup
- Complete troubleshooting guide
- All helper scripts documentation
- Release checklist
- Security best practices
When in doubt, refer to the comprehensive documentation or ask for clarification before releasing to production.