This document describes how to create and deploy releases for DevPockit.
This project uses a two-branch model:
| Branch | Purpose |
|---|---|
main |
Production only — updated exclusively by release PRs from develop. Always stable and tagged. |
develop |
Active development — all feature branches merge here. |
This ensures fork users who sync main always get released, stable code. Tags always point to commits that exist in main, so they are available immediately after a fork sync.
- Development happens on feature branches merged into
develop. - When ready to release, open a PR:
develop→main, including:- Updated
package.jsonversion - Updated
CHANGELOG.md
- Updated
- Merge the PR after review and CI passes.
- Tag the merge commit on
mainand push the tag — this triggers the release workflow. - Automated: GitHub Actions builds, deploys to GitHub Pages, and creates a GitHub release.
On develop (or a dedicated release/x.y.z branch cut from develop):
-
package.json: Update the
versionfield{ "version": "0.1.0" } -
CHANGELOG.md: Add release notes for the new version
## [0.1.0] - 2026-01-05 ### Added - New features ### Changed - Changes ### Fixed - Bug fixes
-
next.config.js: Update version in environment variables (if needed)
env: { NEXT_PUBLIC_APP_VERSION: process.env.NEXT_PUBLIC_APP_VERSION || 'dev', }
# On develop (or a release/x.y.z branch)
git add package.json CHANGELOG.md
git commit -m "chore: bump version to 0.1.0"
git push origin develop # or your release branchThen open a PR on GitHub:
- Base:
main - Compare:
develop(orrelease/0.1.0) - Title:
chore: release v0.1.0
Merge the PR after review and CI passes.
git checkout main
git pull origin main
# Create annotated tag
git tag -a v0.1.0 -m "Release version 0.1.0"
# Push tag to trigger release workflow
git push origin v0.1.0Or create the tag via GitHub:
- Go to Releases → Draft a new release
- Choose Create new tag:
v0.1.0 - Target:
main(important — always tag from main) - Release title:
Release 0.1.0 - Description: Copy from CHANGELOG.md
- Click Publish release
- Go to Actions tab in GitHub
- Watch the Deploy DevPockit to GitHub Pages workflow
- Watch the Create Release workflow
- Verify deployment at https://devpockit.hypkey.com/
Follow Semantic Versioning:
- MAJOR (1.0.0): Breaking changes
- MINOR (0.1.0): New features, backward compatible
- PATCH (0.0.1): Bug fixes, backward compatible
- Alpha:
v0.1.0-alpha.1 - Beta:
v0.1.0-beta.1 - RC:
v0.1.0-rc.1
Pre-releases are marked as pre-release in GitHub but still deploy to production.
Before creating a release:
- All tests passing (
pnpm test:ci) - Type checking passes (
pnpm type-check) - Linting passes (
pnpm lint) - Build succeeds (
pnpm build) - Version updated in
package.json - CHANGELOG.md updated with release notes
- All changes committed and pushed
- Tag created and pushed
Triggers:
- Push to
mainbranch - Push of version tag (
v*)
Actions:
- Type checking
- Linting
- Building application
- Verifying build output
- Deploying to GitHub Pages
Triggers:
- Push of version tag (
v*)
Actions:
- Type checking
- Linting
- Testing
- Building application
- Generating release notes from CHANGELOG.md
- Creating GitHub release
- Uploading build artifacts
If automated workflows fail, you can manually deploy:
# Build locally
pnpm build
# Verify build
pnpm build:verify
# Deploy manually (depends on your hosting)
# For GitHub Pages: Push out/ directory
# For other platforms: Follow their deployment processIf a release has issues:
-
Revert the tag (if needed):
git tag -d v0.1.0 git push origin :refs/tags/v0.1.0
-
Redeploy previous version:
- Push the previous tag again, or
- Manually deploy from a previous commit
-
Create hotfix release:
- Fix the issue
- Create a patch version (e.g.,
v0.1.1) - Follow normal release process
Release notes are automatically generated from CHANGELOG.md. The workflow:
- Extracts the section for the version being released
- Formats it as release notes
- Adds a link to the full changelog
- Includes a link to compare changes
## [0.1.0] - 2026-01-05
### Added
- Feature 1
- Feature 2
### Changed
- Improvement 1
### Fixed
- Bug fix 1The build process uses these environment variables (if set):
NEXT_PUBLIC_APP_VERSION: Application version (defaults to package.json version)NEXT_PUBLIC_APP_NAME: Application name (defaults to "DevPockit")
These are set automatically during the release build.
- Check GitHub Actions logs
- Verify build succeeds locally:
pnpm build - Check for TypeScript errors:
pnpm type-check - Check for linting errors:
pnpm lint
- Verify tag format: Must start with
v(e.g.,v0.1.0) - Check workflow permissions
- Verify CHANGELOG.md exists and has the version section
If you see a warning that package.json version doesn't match the release tag:
-
This means: The tag was created before
package.jsonwas updated -
Solution: Update
package.jsonmanually to match the tag:# Checkout main branch git checkout main # Update package.json version to match tag (e.g., 0.1.0) # Edit package.json: "version": "0.1.0" # Commit and push (via PR if branch is protected) git add package.json git commit -m "chore: update version to 0.1.0" git push origin main # or create PR
-
Prevention: Always follow the workflow:
- Update
package.jsonfirst - Commit and merge PR
- Then create the release tag
- Update
-
Note: The workflow will continue successfully even if versions don't match (warning only), since the git tag is the source of truth for versioning.
Build artifacts are uploaded to GitHub Actions and kept for 30 days. You can download them from the workflow run.
For questions or issues with releases, please open an issue on GitHub.