Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions RELEASE_CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Release Checklist

This checklist covers the common steps for creating a Photofield release.

## Prerequisites

- [ ] You are on the `main` branch
- [ ] Working directory is clean (no uncommitted changes)
- [ ] All planned features/fixes are merged
- [ ] CI is passing on main branch

## Pre-Release

### Documentation & README

- [ ] Update `docs/` with any new features or configuration changes
- [ ] Update `README.md` if there are significant changes
- Features list
- Installation instructions
- Screenshots/demos if UI changed
- [ ] Update `defaults.yaml` documentation comments if config changed

### Testing & Changelog

- [ ] Document all changes using changie
- Use `task added` for new features
- Use `task fixed` for bug fixes
- Use `task breaking` for breaking changes
- Use `task deprecated` for deprecations
- Use `task removed` for removed features
- Use `task security` for security updates
- [ ] Test locally with embedded build: `task run:embed`
- [ ] Run tests: `task test`
- [ ] Run e2e tests: `task e2e:ci`

## Creating the Release

- [ ] Run `task release`
- Batches changelog entries into a version file
- Opens the version file in your editor for review/editing
- Merges changes into CHANGELOG.md
- Commits with "Release vX.Y.Z" message
- Creates git tag
Comment on lines +40 to +43
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

task release currently runs code --wait .changes/$(changie latest).md (Taskfile.yml:92). This checklist says it “opens the version file in your editor”, but in practice it specifically requires the VS Code code CLI to be installed/in PATH (or the task will fail). Please adjust the wording to match the actual behavior and/or document an alternative flow for users without code (e.g., manually edit the file then run the remaining changie/git steps).

Suggested change
- Opens the version file in your editor for review/editing
- Merges changes into CHANGELOG.md
- Commits with "Release vX.Y.Z" message
- Creates git tag
- Opens the version file in VS Code via the `code` CLI (`code --wait ...`) for review/editing
- Merges changes into CHANGELOG.md
- Commits with "Release vX.Y.Z" message
- Creates git tag
- If you don't have the VS Code `code` CLI installed/in `PATH`, manually open the latest `.changes/<version>.md` file in your editor, edit it as needed, then run the remaining changie/git steps from the release task manually.

Copilot uses AI. Check for mistakes.

- [ ] Review the release commit: `git show HEAD`
- [ ] Verify the changelog looks good: `task release:changelog`

## Publishing

- [ ] Push the release: `task release:push`

- [ ] **While CI is running**, update external listings:
- [ ] Update feature list at https://github.com/meichthys/foss_photo_libraries (issue #95)
- [ ] Announce on Discord: https://discord.gg/qjMxfCMVqM

- [ ] Wait for CI to complete: https://github.com/SmilyOrg/photofield/actions

- [ ] Review the GitHub Release draft
- Edit release notes if needed
- Add screenshots/GIFs if applicable (for UI changes or new features)
- Check attached artifacts are present
- **Publish the release**

## Post-Release Verification

- [ ] Test Docker image: `docker pull ghcr.io/smilyorg/photofield:latest`
- [ ] Verify Docker tags created at https://github.com/SmilyOrg/photofield/pkgs/container/photofield
- [ ] Monitor for issues
- GitHub issues
- Discord feedback

## If Something Goes Wrong

### Before pushing to GitHub

- [ ] Undo the release locally: `task release:undo`
- Removes the tag and commit
- Make fixes and try again

### After pushing to GitHub

- [ ] Delete the tag locally: `git tag -d vX.Y.Z`
- [ ] Delete the tag remotely: `git push origin :refs/tags/vX.Y.Z`
- [ ] Delete the release commit locally: `git reset --hard HEAD~1`
- [ ] Force push: `git push -f origin main`
- [ ] Delete GitHub Release draft if created
Comment on lines +84 to +86
Copy link

Copilot AI Jan 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “After pushing to GitHub” rollback procedure recommends git reset --hard HEAD~1 followed by git push -f origin main. Force-pushing main rewrites shared history and can disrupt other contributors (and any branch protections may block it). Consider updating this section to prefer safer recovery options (e.g., reverting the release commit and cutting a follow-up release), or add clear guidance to coordinate and ensure no intervening commits before rewriting history.

Copilot uses AI. Check for mistakes.
- [ ] Make fixes and create a new release

## Release Types

### Semantic Versioning (at version 0.x)

- **Patch** (0.X.Y+1): Bug fixes, security patches
- Use `task fixed` or `task security`
- **Minor** (0.X+1.0): New features, breaking changes (pre-1.0), removals
- Use `task added`, `task breaking`, `task removed`, or `task deprecated`
- **Major** (1.0.0+): Reserved for 1.0 stable release

Changie automatically determines version bump based on change types.

## Useful Commands

- `task release:version` - Show current/next version
- `task release:changelog` - Preview changelog for latest release
- `task release:title` - Get the release title
- `changie latest` - Get latest version string
- `git describe --tags` - Show current version with git info
- `task check` - Verify dependencies and generated files are up to date
- `task package` - Build all platform binaries locally (for testing)
- `task release:local` - Build and test Docker image locally

## Notes

- Release artifacts include binaries for:
- Linux (amd64, arm, arm64, 386, loong64, ppc64le, riscv64, s390x)
- macOS (amd64, arm64)
- Windows (amd64, arm64, 386)
- OpenBSD (amd64, arm64)

- Docker images are multi-arch (amd64, arm64)

- CI automatically skips duplicate builds on release commits to main branch

- All releases are created as drafts first, allowing final review before publishing

- Build artifacts are attested for supply chain security
Loading