release version 1.0.6
CI / test (push) Successful in 9m23s
CI / docker (push) Successful in 3m14s
CI / release (push) Skipped

This commit is contained in:
zwitschi committed 2026-08-05 17:09:03 +02:00
1 parent 9a06dc389d
commit 69df0e51b8
10 files changed
+146 -16

No files matched your search

+119 -2
View File
@@ -20,8 +20,8 @@ Thank you for considering contributing to Linear Void!
## Code Style
- Go: Use standard formatting (`go fmt`).
- TypeScript: ESLint and Prettier.
- Tailwind: Follow the utility-first approach.
- TypeScript: `tsc --noEmit` for type-checking (see `frontend/package.json`).
- CSS: Design-token system via CSS custom properties in `frontend/src/style.css`. No utility framework.
## Pull Requests
@@ -30,4 +30,121 @@ Thank you for considering contributing to Linear Void!
- Ensure all tests pass and documentation is updated.
- The CI workflow will validate normalization, linting, and Docker builds.
## Versioning and Releases
### Version Scheme
Linear Void follows **Semantic Versioning** ([SemVer](https://semver.org)): `MAJOR.MINOR.PATCH`.
- **MAJOR** — breaking changes to the viewer, API, or deployment model.
- **MINOR** — new features (endpoints, admin tabs, UI capabilities) that are backward-compatible.
- **PATCH** — bug fixes, optimizations, documentation polish.
Git tags use a `v` prefix: `1.0.2`, `1.1.0`, `v2.0.0`.
### Where Versions Are Declared
| File | Token | Example |
| ------------------------------ | -------------- | ------------------------- |
| `frontend/package.json` | `"version"` | `"1.0.2"` |
| `CHANGELOG.md` | `## [X.Y.Z]` | `## [1.0.2] - 2026-08-05` |
| `README.md` | Version badge | `version-1.0.2-blue` |
| `.github/instructions/TODO.md` | Section header | `## Version 1.0.2` |
### Tag Triggers
| Tag Pattern | Workflow | What Happens |
| ------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `v*` (e.g. `1.0.2`) | `release.yml` | Builds all 3 images, pushes to registry with semver tags (`1.0.2`, `1.0`, `latest`), creates Gitea Release via API |
| Push to `main` | `ci.yml` → `cd.yml` | CI builds + pushes images with `main`/`latest` tags, CD deploys to production |
### Full Release Procedure
#### Step 1: Bump version numbers
Update these files to the new version (replace `X.Y.Z`):
- [frontend/package.json](frontend/package.json)
- [CHANGELOG.md](CHANGELOG.md) — add new section at top
- [README.md](README.md) — version badge
```bash
# frontend/package.json
"version": "X.Y.Z"
# CHANGELOG.md — add new section at top
## [X.Y.Z] - YYYY-MM-DD
# README.md — version badge
version-X.Y.Z-blue
```
#### Step 2: Write changelog
Add entries under `## [X.Y.Z]` in `CHANGELOG.md` following [Keep a Changelog](https://keepachangelog.com) format (`Added`, `Changed`, `Fixed`, `Removed`).
#### Step 3: Commit and tag
```bash
# Stage all version bumps + changelog
git add frontend/package.json CHANGELOG.md README.md .github/instructions/TODO.md
# Commit
git commit -m "chore: bump version to X.Y.Z"
# Create annotated tag
git tag -a X.Y.Z -m "Release X.Y.Z"
# Push commit and tag
git push origin main
git push origin X.Y.Z
```
#### Step 4: Verify CI/CD
- CI workflow (`ci.yml`) runs on push to `main` → builds & pushes `main`/`latest` images.
- Release workflow (`release.yml`) triggers on `X.Y.Z` tag → builds images with semver tags (`X.Y.Z`, `X.Y`, `latest`), creates Gitea Release.
- CD workflow (`cd.yml`) triggers after CI completes → deploys to production.
Monitor at: [git.allucanget.biz/zwitschi/linearvoid/actions](https://git.allucanget.biz/zwitschi/linearvoid/actions)
#### Step 5: Verify release
Check the Gitea Releases page for the new tag:
[git.allucanget.biz/zwitschi/linearvoid/releases](https://git.allucanget.biz/zwitschi/linearvoid/releases)
### Manual Release (workflow_dispatch)
If a tag push fails or a re-release is needed:
1. Go to [Actions → Release workflow](https://git.allucanget.biz/zwitschi/linearvoid/actions?workflow=release.yml)
2. Click "Run workflow"
3. Enter version (e.g. `1.0.2`)
4. The workflow builds images, pushes semver tags, and creates the Gitea Release
### Docker Image Tags
Every release produces these tags in the Gitea Container Registry:
| Image | Tags |
| --------- | ------------------------ |
| `playout` | `X.Y.Z`, `X.Y`, `latest` |
| `chat` | `X.Y.Z`, `X.Y`, `latest` |
| `nginx` | `X.Y.Z`, `X.Y`, `latest` |
Example for `1.0.2`:
```text
git.allucanget.biz/zwitschi/linearvoid/chat:1.0.2
git.allucanget.biz/zwitschi/linearvoid/chat:1.0
git.allucanget.biz/zwitschi/linearvoid/chat:latest
git.allucanget.biz/zwitschi/linearvoid/playout:1.0.2
git.allucanget.biz/zwitschi/linearvoid/playout:1.0
git.allucanget.biz/zwitschi/linearvoid/playout:latest
```
### Moving Completed Tasks
After release, move completed sections from `TODO.md` to `DONE.md` and update `CHANGELOG.md` if needed. The `DONE.md` file serves as the historical record linking tasks to releases.
See the ADRs for architectural decisions and `docs/architecture/README.md` for the big picture. Thank you for contributing!