Files
Krow-workspace/RELEASE_WORKFLOW.md
Achintha Isuru 085445e730 feat: add comprehensive release process documentation and version file references
- Introduced RELEASE_VISUAL_GUIDE.md for a visual overview of the release pipeline, including development, staging, and production phases.
- Created RELEASE_WORKFLOW.md detailing step-by-step release procedures for single and multi-product releases, including hotfix processes.
- Added VERSION_FILES_REFERENCE.md to outline all necessary version file updates for each product during releases, ensuring consistency and completeness.
2026-03-05 10:49:09 -05:00

383 lines
8.4 KiB
Markdown

# Release Workflow Guide
Quick reference for executing releases in the KROW Workforce monorepo.
## 🚀 Quick Start Release (for a single product)
### Example: Release Staff Mobile v0.2.0
```bash
# 1. Start from main branch
git checkout main
git pull origin main
# 2. Create release branch
git checkout -b release/staff-mobile-v0.2.0
# 3. Update version numbers
# File: apps/mobile/apps/staff_app/pubspec.yaml
# Change: version: 0.1.0+5 → version: 0.2.0+6
# 4. Update CHANGELOG.md
nano CHANGELOG.md
# Add entry at top:
# | 2026-03-05 | Staff Mobile 0.2.0 | [Feature/fix descriptions] |
# 5. Commit changes
git add .
git commit -m "chore(staff-mobile): bump version to 0.2.0"
# 6. Push release branch
git push origin release/staff-mobile-v0.2.0
# 7. Create pull request on GitHub
# (GitHub CLI: gh pr create --title "Release: Staff Mobile v0.2.0" --body "See RELEASE_STRATEGY.md")
# 8. Merge to main after approval
git checkout main
git pull origin main
git merge --ff-only release/staff-mobile-v0.2.0
# 9. Create git tag
git tag -a staff-mobile/dev-v0.2.0 -m "Staff Mobile v0.2.0 - [Feature description]"
# 10. Push tag
git push origin staff-mobile/dev-v0.2.0
# 11. Create GitHub Release
# - Go to Releases → Draft a new release
# - Tag: staff-mobile/dev-v0.2.0
# - Title: "Staff Mobile v0.2.0"
# - Description: Copy from CHANGELOG
# - Attach APK/AAB if available
# - Publish
```
---
## 🔄 Multi-Product Coordinated Release
### Step-by-Step for v1.0.0 Release (all products)
#### Phase 1: Preparation (48 hours before)
```bash
# Check all tests pass
make test
make test-backend
make test-web
# Verify builds
make build-mobile-dev
make build-web
# No lint errors
make lint
```
#### Phase 2: Version Bumping
**File locations to update:**
1. **Mobile Apps**: `apps/mobile/apps/staff_app/pubspec.yaml` (and client_app)
```yaml
version: 1.0.0+1 # Increment build number
```
2. **Web Dashboard**: `apps/web/package.json`
```json
"version": "1.0.0"
```
3. **Command API**: `backend/command-api/package.json`
```json
"version": "1.0.0"
```
4. **Core API**: `backend/core-api/package.json`
```json
"version": "1.0.0"
```
5. **CodeMagic**: `codemagic.yaml`
```yaml
build_version: "1.0.0"
```
6. **CHANGELOG.md**: Add entry at top
```markdown
| 2026-03-15 | 1.0.0 | Full feature v1.0.0 release [all products] |
```
```bash
# Commit all version bumps
git add -A
git commit -m "chore: bump all products to v1.0.0"
```
#### Phase 3: Staging Release
```bash
# Create release branch
git checkout -b release/v1.0.0-staging
# Push and merge (or direct commit to release branch)
git push origin release/v1.0.0-staging
# Tag all products with staging
git tag -a web-dashboard/staging-v1.0.0 -m "v1.0.0 staging release"
git tag -a command-api/staging-v1.0.0 -m "v1.0.0 staging release"
git tag -a core-api/staging-v1.0.0 -m "v1.0.0 staging release"
git tag -a staff-mobile/staging-v1.0.0 -m "v1.0.0 staging release"
git tag -a client-mobile/staging-v1.0.0 -m "v1.0.0 staging release"
# Push all staging tags
git push origin --tags
# Deploy to staging environment
./scripts/deploy-staging.sh # (create if needed)
```
#### Phase 4: QA & Testing
- [ ] Smoke test all features
- [ ] Performance tests
- [ ] Security scan
- [ ] API contract verification
#### Phase 5: Production Release
```bash
# Create production tags (after staging approval)
git tag -a web-dashboard/prod-v1.0.0 -m "v1.0.0 production release"
git tag -a command-api/prod-v1.0.0 -m "v1.0.0 production release"
git tag -a core-api/prod-v1.0.0 -m "v1.0.0 production release"
git tag -a staff-mobile/prod-v1.0.0 -m "v1.0.0 production release"
git tag -a client-mobile/prod-v1.0.0 -m "v1.0.0 production release"
# Push tags
git push origin --tags
# Deploy in dependency order
./scripts/deploy-prod-dataconnect.sh
./scripts/deploy-prod-backend.sh
./scripts/deploy-prod-web.sh
./scripts/deploy-prod-mobile.sh
```
---
## 🔥 Hotfix Release (Emergency Production Fix)
### Example: Critical bug in Staff Mobile v1.0.0 → v1.0.1
```bash
# 1. Create hotfix branch from production tag
git checkout -b hotfix/staff-mobile-v1.0.1 staff-mobile/prod-v1.0.0
# 2. Fix the bug
git add <fixed-files>
git commit -m "fix: [critical bug description]"
# 3. Update version (PATCH bump only)
# apps/mobile/apps/staff_app/pubspec.yaml
# Change: 1.0.0+1 → 1.0.1+2
# 4. Update CHANGELOG
nano CHANGELOG.md
# Add: | 2026-03-15 | Staff Mobile 1.0.1 | Hotfix: [bug description] |
# 5. Push hotfix branch
git push origin hotfix/staff-mobile-v1.0.1
# 6. Create PR for review (expedited)
gh pr create --title "Hotfix: Staff Mobile v1.0.1" \
--body "EMERGENCY: Critical issue fix\n\nSee CHANGELOG.md for details"
# 7. Merge to main (fast-track approval)
git checkout main
git pull origin main
git merge --ff-only hotfix/staff-mobile-v1.0.1
# 8. Tag production immediately
git tag -a staff-mobile/prod-v1.0.1 -m "Hotfix: [description]"
git push origin staff-mobile/prod-v1.0.1
# 9. Deploy to production
./scripts/deploy-prod-mobile-staff.sh
# 10. Create GitHub Release with "HOTFIX" in title
```
---
## 📊 Useful Git Commands
### View all tags for a product
```bash
git tag -l "staff-mobile/*" --sort=-version:refname
git tag -l "*/prod-v*" --sort=-version:refname
```
### View tag details
```bash
git show staff-mobile/prod-v1.0.0
git log staff-mobile/prod-v1.0.0...staff-mobile/prod-v0.9.0 # Changes between versions
```
### List tags created in last week
```bash
git log --oneline --decorate --tags --since="1 week ago"
```
### See all commits since last tag
```bash
git log <last-tag>..HEAD --oneline
```
### Delete a tag (if mistake)
```bash
# Local
git tag -d staff-mobile/dev-v0.1.0
# Remote
git push origin --delete staff-mobile/dev-v0.1.0
```
### Create lightweight tag (simpler, no message)
```bash
git tag staff-mobile/dev-v0.1.0
```
---
## 🤖 Automation Scripts (Create These)
### Create: `scripts/tag-all-products.sh`
```bash
#!/bin/bash
# Usage: ./scripts/tag-all-products.sh prod 1.0.0
ENV=$1 # dev, staging, prod
VERSION=$2 # e.g., 1.0.0
if [ -z "$ENV" ] || [ -z "$VERSION" ]; then
echo "Usage: $0 <env> <version>"
echo "Example: $0 prod 1.0.0"
exit 1
fi
PRODUCTS=(
"staff-mobile"
"client-mobile"
"web-dashboard"
"command-api"
"core-api"
)
for product in "${PRODUCTS[@]}"; do
TAG="${product}/${ENV}-v${VERSION}"
echo "Creating tag: $TAG"
git tag -a "$TAG" -m "$product v$VERSION - $ENV release"
done
echo "Pushing all tags..."
git push origin --tags
echo "✅ All products tagged for $ENV-v$VERSION"
```
### Create: `scripts/show-version-matrix.sh`
```bash
#!/bin/bash
# Show version matrix of all products
echo "📦 KROW Workforce Version Matrix"
echo "================================"
echo ""
PRODUCTS=(
"staff-mobile"
"client-mobile"
"web-dashboard"
"command-api"
"core-api"
)
ENVS=("dev" "staging" "prod")
for env in "${ENVS[@]}"; do
echo "=== $ENV Environment ==="
for product in "${PRODUCTS[@]}"; do
TAGS=$(git tag -l "${product}/${env}-v*" --sort=-version:refname | head -1)
if [ -z "$TAGS" ]; then
echo " $product: (no tags)"
else
echo " $product: $TAGS"
fi
done
echo ""
done
```
---
## ✅ Release Checklist Template
Copy this for each release:
```markdown
## Release: [Product] v[Version]
**Release Date**: [Date]
**Release Manager**: [Name]
### Pre-Release (48h before)
- [ ] All PRs merged and reviewed
- [ ] Tests passing (unit + integration)
- [ ] No lint/type errors
- [ ] Mobile builds succeed on CodeMagic
- [ ] Performance benchmarks acceptable
- [ ] Security scan passed
- [ ] CHANGELOG.md updated
- [ ] Documentation updated
### Release Day
- [ ] Create release branch: `release/[product]-v[version]`
- [ ] Bump version numbers in all files
- [ ] Commit: `chore: bump [product] to v[version]`
- [ ] Create tag: `[product]/staging-v[version]`
- [ ] Deploy to staging
- [ ] Smoke tests passed
- [ ] Create GitHub Release page
### Post-Release (24h after)
- [ ] Monitor error logs
- [ ] Verify features work end-to-end
- [ ] Create production tag (if approved)
- [ ] Deploy to production
- [ ] Final verification
- [ ] Notify users
### Rollback Plan (if needed)
- [ ] Identified issue
- [ ] Created hotfix branch
- [ ] Tagged hotfix version
- [ ] Deployed rollback
- [ ] Post-mortem created
```
---
## 🔗 Related Files
- [RELEASE_STRATEGY.md](./RELEASE_STRATEGY.md) - Full strategy document
- [CHANGELOG.md](./CHANGELOG.md) - Version history
- [codemagic.yaml](./codemagic.yaml) - CI/CD configuration
---
**Last Updated**: 2026-03-05