This project uses GitHub Actions with semantic-release to automate versioning, changelog generation, and Docker image builds.
All commits MUST follow the Conventional Commits specification:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat: New feature → Minor version bump (1.x.0)fix: Bug fix → Patch version bump (1.0.x)perf: Performance improvement → Patch version bumprefactor: Code refactoring → Patch version bumpdocs: Documentation changes → No releasechore: Maintenance tasks → No releasestyle: Code style/formatting → No releasetest: Testing changes → No releaseBreaking Changes:
Add BREAKING CHANGE: in commit footer or ! after type/scope → Major version bump (x.0.0)
Examples:
feat(sync): implement intelligent torrent matching
fix(ui): resolve tooltip not showing on mobile devices
perf(qbittorrent): optimize bulk torrent fetching
docs(readme): update installation instructions
refactor(models): extract StringSlice type to separate file
# Breaking change
feat(api)!: redesign API endpoints
BREAKING CHANGE: API endpoints have been restructured
| Branch | Purpose | Pre-release | Docker Tags |
|---|---|---|---|
main |
Production releases | No | latest, v1.2.3, 1.2, 1 |
develop |
Development builds | dev |
develop, develop-v1.2.3-dev.1 |
alpha |
Alpha releases | alpha |
alpha, alpha-v1.2.3-alpha.1 |
beta |
Beta releases | beta |
beta, beta-v1.2.3-beta.1 |
Examples:
v1.0.0 → Initial releasev1.1.0 → Added new featurev1.1.1 → Fixed bugv2.0.0 → Breaking API changeImages are pushed to GitHub Container Registry (ghcr.io):
Format: ghcr.io/{owner}/{repo}:{tag}
Tags generated:
latest (only for main branch){branch} (e.g., develop, alpha)v{version} (e.g., v1.2.3 - only for main branch){major}.{minor} (e.g., 1.2 - only for main branch){major} (e.g., 1 - only for main branch){branch}-{version} (e.g., develop-v1.2.3-dev.1){branch}-{sha} (commit tracking)Example for a release on main:
ghcr.io/carcheky/keepercheky:latest
ghcr.io/carcheky/keepercheky:main
ghcr.io/carcheky/keepercheky:v1.2.3
ghcr.io/carcheky/keepercheky:1.2
ghcr.io/carcheky/keepercheky:1
ghcr.io/carcheky/keepercheky:main-abc1234
Example for a pre-release on develop:
ghcr.io/carcheky/keepercheky:develop
ghcr.io/carcheky/keepercheky:develop-v1.2.3-dev.1
ghcr.io/carcheky/keepercheky:develop-abc1234
golangci-lint with latest rulesOnly runs on:
main, develop, alpha, betaOnly runs on:
Pull latest stable release:
docker pull ghcr.io/carcheky/keepercheky:latest
Pull specific version:
docker pull ghcr.io/carcheky/keepercheky:v1.2.3
Pull development build:
docker pull ghcr.io/carcheky/keepercheky:develop
Run container:
docker run -d \
-p 8000:8000 \
-v $(pwd)/config:/config \
-v $(pwd)/data:/data \
ghcr.io/carcheky/keepercheky:latest
Configure these in GitHub repository settings:
| Secret | Description | Required |
|---|---|---|
GITHUB_TOKEN |
Automatically provided by GitHub | ✅ (auto) |
CODECOV_TOKEN |
Token for Codecov coverage uploads | ⚠️ (optional) |
No manual Docker registry tokens needed - uses GITHUB_TOKEN for ghcr.io authentication.
The CHANGELOG.md file is automatically generated and updated on each release.
Format:
# Changelog
## [1.2.0] - 2024-01-15
### ✨ Features
- feat(sync): implement intelligent torrent matching (#123)
- feat(ui): add dark mode support (#124)
### 🐛 Bug Fixes
- fix(files): resolve hardlink detection issue (#125)
### ⚡ Performance Improvements
- perf(db): optimize media query with indexing (#126)
Automatic releases:
main, develop, alpha, or beta branchesManual release: Not needed - releases are fully automated based on commit messages.
Test commit message format:
# Install commitlint (optional)
npm install -g @commitlint/cli @commitlint/config-conventional
# Test your commit message
echo "feat(files): add new feature" | commitlint
Preview next version (dry-run):
npx semantic-release --dry-run
Last Updated: 2024-01-15
Pipeline Version: v1.0.0