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

+4 -2
View File
@@ -34,12 +34,14 @@ jobs:
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
go-version: "1.22" go-version: "1.25"
cache: true cache: true
cache-dependency-path: backend/chat/go.sum cache-dependency-path: backend/chat/go.sum
env:
GOTOOLCHAIN: local
- name: Download Go modules - name: Download Go modules
run: cd backend/chat && go mod download run: cd backend/chat && GOTOOLCHAIN=local go mod download
- name: Run Tests - name: Run Tests
run: echo "Tests will be added in future CI steps (per TODO.md)" run: echo "Tests will be added in future CI steps (per TODO.md)"
+5 -3
View File
@@ -30,13 +30,15 @@ jobs:
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
go-version: "1.22" go-version: "1.25"
cache: true cache: true
env:
GOTOOLCHAIN: local
- name: Update Go Dependencies - name: Update Go Dependencies
run: | run: |
cd backend/playout && go get -u ./... && go mod tidy cd backend/playout && GOTOOLCHAIN=local go get -u ./... && go mod tidy
cd ../chat && go get -u ./... && go mod tidy cd ../chat && GOTOOLCHAIN=local go get -u ./... && go mod tidy
- name: Commit and push changes - name: Commit and push changes
run: | run: |
+2 -2
View File
@@ -3,11 +3,11 @@ name: Release
on: on:
push: push:
tags: tags:
- "v*" - "*.*.*" # Trigger on any semantic version tag (e.g., 1.0.0, 2.1.3)
workflow_dispatch: workflow_dispatch:
inputs: inputs:
version: version:
description: "Version to release (e.g., v1.0.0)" description: "Version to release (e.g., 1.0.0)"
required: true required: true
type: string type: string
+7 -2
View File
@@ -2,7 +2,7 @@
<!-- markdownlint-disable MD024 --> <!-- markdownlint-disable MD024 -->
## [1.0.5] - 2026-08-05 ## [1.0.6] - 2026-08-05
### Added ### Added
@@ -23,13 +23,18 @@
- Rebuilt viewer, admin, and admin-login pages around custom semantic class structures with accessibility-focused landmarks, tab semantics, and keyboard-focus behavior. - Rebuilt viewer, admin, and admin-login pages around custom semantic class structures with accessibility-focused landmarks, tab semantics, and keyboard-focus behavior.
- Replaced legacy and Tailwind-based stylesheet rules with a custom design-token CSS system covering responsive layouts, forms, tables, and reduced-motion behavior. - Replaced legacy and Tailwind-based stylesheet rules with a custom design-token CSS system covering responsive layouts, forms, tables, and reduced-motion behavior.
- Switched frontend theme to dark-mode-first token defaults with light-scheme override. - Switched frontend theme to dark-mode-first token defaults with light-scheme override.
- Applied new color palette (`#32292f` dark, `#b4c4ae` light, `#587792` brand, `#2ebfa5` focus, `#04650d` ok) across all 22 CSS custom properties in dark and light themes.
- Replaced hardcoded admin sidebar and tab-trigger colors with CSS custom properties.
- Optimized CI pipeline: removed duplicate `docker compose build --no-cache` from test job, removed broken playlist validation step, fixed Go module cache path, added Docker Buildx registry cache to docker/release jobs.
- Bumped chat healthcheck `start_period` from 10s to 30s in `docker-compose.prod.yml`. - Bumped chat healthcheck `start_period` from 10s to 30s in `docker-compose.prod.yml`.
- CD workflow now verifies nginx (port 8080) + chat (3000) + playout (8081); dumps container logs for all failing services. - CD workflow now verifies nginx (port 8080) + chat (3000) + playout (8081); dumps container logs for all failing services.
- Updated Prometheus scrape targets and Grafana dashboard queries to use live chat metrics. - Updated Prometheus scrape targets and Grafana dashboard queries to use live chat metrics.
### Fixed ### Fixed
- Go module cache in CI now correctly references `backend/playout/go.sum` and `backend/chat/go.sum`. - Go module cache in CI now correctly references only `backend/chat/go.sum` (playout go.sum did not exist); added `go mod download` step to seed cache.
- Removed broken playlist validation step (`go run src/playlist.go` without go.mod) from CI test job.
- Converted nginx CI build from custom shell `docker buildx` to `docker/build-push-action@v5` for cache consistency.
- Enforced 2GB upload ceiling plus server-side media file type/size validation for admin uploads. - Enforced 2GB upload ceiling plus server-side media file type/size validation for admin uploads.
- Increased nginx `client_max_body_size` to allow resumable admin upload chunks without 413 errors. - Increased nginx `client_max_body_size` to allow resumable admin upload chunks without 413 errors.
- Removed unused `data-admin-*` Vite env var attributes from admin HTML template. - Removed unused `data-admin-*` Vite env var attributes from admin HTML template.
+119 -2
View File
@@ -20,8 +20,8 @@ Thank you for considering contributing to Linear Void!
## Code Style ## Code Style
- Go: Use standard formatting (`go fmt`). - Go: Use standard formatting (`go fmt`).
- TypeScript: ESLint and Prettier. - TypeScript: `tsc --noEmit` for type-checking (see `frontend/package.json`).
- Tailwind: Follow the utility-first approach. - CSS: Design-token system via CSS custom properties in `frontend/src/style.css`. No utility framework.
## Pull Requests ## Pull Requests
@@ -30,4 +30,121 @@ Thank you for considering contributing to Linear Void!
- Ensure all tests pass and documentation is updated. - Ensure all tests pass and documentation is updated.
- The CI workflow will validate normalization, linting, and Docker builds. - 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! See the ADRs for architectural decisions and `docs/architecture/README.md` for the big picture. Thank you for contributing!
+4
View File
@@ -38,6 +38,10 @@ See .env.example and SETUP.md for full variable reference.
## Pull-and-Run Deployment ## Pull-and-Run Deployment
Images are built and pushed automatically by the CI and release workflows (see [CONTRIBUTING.md](CONTRIBUTING.md#versioning-and-releases) for the release procedure).
Every push to `main` produces `:main` and `:latest` tags. Semantic version tags (`v*`) produce `:X.Y.Z`, `:X.Y`, and `:latest` tags.
From repository root: From repository root:
```bash ```bash
+2 -2
View File
@@ -7,7 +7,7 @@
[![Build Status](https://git.allucanget.biz/zwitschi/linearvoid/actions/workflows/ci.yml/badge.svg)](https://git.allucanget.biz/zwitschi/linearvoid/actions) [![Build Status](https://git.allucanget.biz/zwitschi/linearvoid/actions/workflows/ci.yml/badge.svg)](https://git.allucanget.biz/zwitschi/linearvoid/actions)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Gitea](https://img.shields.io/badge/Gitea-1.27.1-blue)](https://git.allucanget.biz) [![Gitea](https://img.shields.io/badge/Gitea-1.27.1-blue)](https://git.allucanget.biz)
[![Version](https://img.shields.io/badge/version-1.0.5-blue)](https://git.allucanget.biz/zwitschi/linearvoid/releases) [![Version](https://img.shields.io/badge/version-1.0.6-blue)](https://git.allucanget.biz/zwitschi/linearvoid/releases)
[![Release Notes](https://img.shields.io/badge/release-notes-green)](CHANGELOG.md) [![Release Notes](https://img.shields.io/badge/release-notes-green)](CHANGELOG.md)
## Architecture ## Architecture
@@ -224,7 +224,7 @@ Contributions are welcome! See [`CONTRIBUTING.md`](CONTRIBUTING.md) for guidelin
3. Open PRs on [Gitea](https://git.allucanget.biz/zwitschi/linearvoid). 3. Open PRs on [Gitea](https://git.allucanget.biz/zwitschi/linearvoid).
4. CI validates builds and tests automatically. 4. CI validates builds and tests automatically.
Since this a linear project, we also rely on a linear development and release model: Only main branch is used for releases, and all features are merged into main after review and CI validation. Releases are tagged with semantic versioning (v1.0.3, v1.0.4, etc.) and automatically built/pushed to the container registry. Since this a linear project, we also rely on a linear development and release model: Only main branch is used for releases, and all features are merged into main after review and CI validation. Releases are tagged with semantic versioning (1.0.3, 1.0.4, etc.) and automatically built/pushed to the container registry.
[MIT License](LICENSE) [MIT License](LICENSE)
+1 -1
View File
@@ -1,4 +1,4 @@
FROM golang:1.23-alpine AS builder FROM golang:1.25-alpine AS builder
RUN apk add --no-cache gcc musl-dev RUN apk add --no-cache gcc musl-dev
+1 -1
View File
@@ -1,6 +1,6 @@
module chat module chat
go 1.23.0 go 1.25.0
require ( require (
github.com/gorilla/websocket v1.5.3 github.com/gorilla/websocket v1.5.3
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "frontend", "name": "frontend",
"private": true, "private": true,
"version": "1.0.5", "version": "1.0.6",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",