From 69df0e51b8e6a127f1a7a1159649b778fafc3d2b Mon Sep 17 00:00:00 2001 From: zwitschi Date: Wed, 5 Aug 2026 17:09:03 +0200 Subject: [PATCH] release version 1.0.6 --- .gitea/workflows/ci.yml | 6 +- .gitea/workflows/dependency-updates.yml | 8 +- .gitea/workflows/release.yml | 4 +- CHANGELOG.md | 9 +- CONTRIBUTING.md | 121 +++++++++++++++++++++++- DEPLOYMENT.md | 4 + README.md | 4 +- backend/chat/Dockerfile | 2 +- backend/chat/go.mod | 2 +- frontend/package.json | 2 +- 10 files changed, 146 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 3607bda..ddd2637 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -34,12 +34,14 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: "1.22" + go-version: "1.25" cache: true cache-dependency-path: backend/chat/go.sum + env: + GOTOOLCHAIN: local - name: Download Go modules - run: cd backend/chat && go mod download + run: cd backend/chat && GOTOOLCHAIN=local go mod download - name: Run Tests run: echo "Tests will be added in future CI steps (per TODO.md)" diff --git a/.gitea/workflows/dependency-updates.yml b/.gitea/workflows/dependency-updates.yml index 751a386..b2f6317 100644 --- a/.gitea/workflows/dependency-updates.yml +++ b/.gitea/workflows/dependency-updates.yml @@ -30,13 +30,15 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: "1.22" + go-version: "1.25" cache: true + env: + GOTOOLCHAIN: local - name: Update Go Dependencies run: | - cd backend/playout && go get -u ./... && go mod tidy - cd ../chat && go get -u ./... && go mod tidy + cd backend/playout && GOTOOLCHAIN=local go get -u ./... && go mod tidy + cd ../chat && GOTOOLCHAIN=local go get -u ./... && go mod tidy - name: Commit and push changes run: | diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 0bf6815..d7bbb9f 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -3,11 +3,11 @@ name: Release on: push: tags: - - "v*" + - "*.*.*" # Trigger on any semantic version tag (e.g., 1.0.0, 2.1.3) workflow_dispatch: inputs: version: - description: "Version to release (e.g., v1.0.0)" + description: "Version to release (e.g., 1.0.0)" required: true type: string diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e19075..b95ac8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ -## [1.0.5] - 2026-08-05 +## [1.0.6] - 2026-08-05 ### 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. - 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. +- 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`. - 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. ### 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. - 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. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f7fc003..11a409c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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! diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index b8089ae..eb1d701 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -38,6 +38,10 @@ See .env.example and SETUP.md for full variable reference. ## 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: ```bash diff --git a/README.md b/README.md index c7ba9f8..f2bfea8 100644 --- a/README.md +++ b/README.md @@ -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) [![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) -[![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) ## 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). 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) diff --git a/backend/chat/Dockerfile b/backend/chat/Dockerfile index 8c66c6a..71fdbe0 100644 --- a/backend/chat/Dockerfile +++ b/backend/chat/Dockerfile @@ -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 diff --git a/backend/chat/go.mod b/backend/chat/go.mod index 5284f9d..5268bc1 100644 --- a/backend/chat/go.mod +++ b/backend/chat/go.mod @@ -1,6 +1,6 @@ module chat -go 1.23.0 +go 1.25.0 require ( github.com/gorilla/websocket v1.5.3 diff --git a/frontend/package.json b/frontend/package.json index e3c0388..ef84a76 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "1.0.5", + "version": "1.0.6", "type": "module", "scripts": { "dev": "vite",