From d385e68b3172780ef6f8be321d215098c9efb517 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Fri, 2 Oct 2026 10:54:29 +1000 Subject: [PATCH] Release 2.3.0.0202: version-tagged images, changelog - Drone: an image-tags step writes .tags (latest, commit SHA, changelog version) for the master publish, so each release can be pulled and rolled back by version. The master publish step no longer hardcodes tags. - Version 2.2.0.0201 -> 2.3.0.0202 in xteve.go and changelog-beta.md, with a changelog entry covering the improvements branch. - README / README-DEV describe the version tag. --- .drone.yml | 19 ++++++++++++++++--- README-DEV.md | 2 +- README.md | 2 +- changelog-beta.md | 17 +++++++++++++++++ tasks/todo.md | 2 +- xteve.go | 2 +- 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index d34cf48..0046870 100644 --- a/.drone.yml +++ b/.drone.yml @@ -51,6 +51,22 @@ steps: event: - pull_request + # plugins/docker reads its tag list from a .tags file when no "tags" + # setting is given. Master images get latest, the commit SHA and the + # release version from changelog-beta.md, so a release can be pulled by name. + - name: image-tags + image: cache.coadcorp.com/library/golang:1.27.1 + commands: + - XTEVE_VERSION="$(grep -m1 '^#### ' changelog-beta.md | cut -d' ' -f2 | sed 's/-beta$//')" + - test -n "$XTEVE_VERSION" + - printf '%s' "latest,${DRONE_COMMIT_SHA},$XTEVE_VERSION" > .tags + - cat .tags + when: + event: + - push + branch: + - master + - name: docker-publish image: plugins/docker environment: @@ -63,9 +79,6 @@ steps: username: nathan password: from_secret: registry_password - tags: - - latest - - ${DRONE_COMMIT_SHA} build_args: - TARGETOS=linux - TARGETARCH=amd64 diff --git a/README-DEV.md b/README-DEV.md index 748eab2..eaf559b 100644 --- a/README-DEV.md +++ b/README-DEV.md @@ -53,7 +53,7 @@ Add `-dev` to serve the web interface from the local `html/` directory instead o The version lives in two places that must agree: `var Version` in `xteve.go` and the first `#### ` heading in `changelog-beta.md` (without the `-beta` suffix). CI fails on drift. -Drone (`.drone.yml`) runs vet, tests, the bundle check, hadolint and compose validation on every push. Pushes to `master` publish `registry.coadcorp.com/nathan/xteve:latest` and `:`; other branches publish `:` and `:`. +Drone (`.drone.yml`) runs vet, tests, the bundle check, hadolint and compose validation on every push. Pushes to `master` publish `registry.coadcorp.com/nathan/xteve:latest`, `:` and `:`; other branches publish `:` and `:`. ## Endpoints useful for operations diff --git a/README.md b/README.md index 9810401..901ecad 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ registry.coadcorp.com/nathan/xteve Tags: -* `latest` and `` from the `master` branch. +* `latest`, the release version (for example `2.3.0.0202`) and `` from the `master` branch. Pin the version tag if you want to control when you upgrade, or to roll back. * `` and `` from every other branch. ```bash diff --git a/changelog-beta.md b/changelog-beta.md index 3147fb2..17e8e97 100644 --- a/changelog-beta.md +++ b/changelog-beta.md @@ -1,3 +1,20 @@ +#### 2.3.0.0202-beta +```diff ++ Security: provider-supplied text is rendered as text in the web UI; websocket requests must come from the same origin; the session cookie is HttpOnly and SameSite=Strict; logo uploads, backup restores, the ffmpeg/VLC path and stream URLs are validated; backups can only be downloaded with a web session. ++ Passwords are stored with bcrypt. Existing accounts are upgraded on their next login. ++ Streaming: buffer state rewritten around a single lock with an atomic tuner limit; ffmpeg/VLC are stopped when the last client leaves or when no data arrives within 20 seconds; long streams no longer accumulate open handles. ++ Per-playlist buffer choice (default, none, xTeVe, FFmpeg, VLC) in the playlist dialog. ++ New filter type: regular expression. ++ Web UI: one persistent websocket with automatic reconnect, light theme following the OS setting, focus is kept when the menu refreshes, errors are announced to screen readers. ++ The web interface is embedded with go:embed and built from a pinned TypeScript toolchain; the language file is gone (English only). ++ New /healthz endpoint, used by the container healthcheck. ++ Container: PUID/PGID are applied at start-up; ffmpeg 9.0.2; images are also tagged with the release version. ++ Settings and other state files are written atomically; settings.json is readable by the owner only. ++ HTTP server and provider downloads have timeouts. +- Removed the built-in self-updater. Updates are delivered through the container image. +- Removed XTEVE_UID/XTEVE_GID as the documented variables (still accepted as a fallback for PUID/PGID). +``` + #### 2.2.0.0201-beta Add UI enhancement for range selecting checkboxes diff --git a/tasks/todo.md b/tasks/todo.md index 173f2a3..334861f 100644 --- a/tasks/todo.md +++ b/tasks/todo.md @@ -47,7 +47,7 @@ Status: all phases done on branch `improvements` (2026-09-26). Open: the `agent. - [x] i18n dropped: 254 placeholders inlined, `en.json` deleted, only HTML pages templated (`authenticationErr`) - [x] `package.json` + `ts/tsconfig.json` (tsc 5.9.3, ES2020, single outFile `html/js/app.js`, committed, CI-verified); 10 dead JS files deleted; 6 tsc errors fixed incl. a real ASI bug in the search shortcut - [x] CI: vet, gofmt check, staticcheck v0.8.1 (config in `staticcheck.conf`), bundle freshness check. `go test -race` still to add once tests exist -- [ ] Version-tagged images (amd64 only) +- [x] Version-tagged images: master publishes `latest`, the commit SHA and the changelog version via a `.tags` file (amd64 only) - [x] PUID/PGID via su-exec at runtime; static-ffmpeg pinned to 7.1.1; `VOLUME /xteve/config`; `/xteve` removed from `LEGACY_CONFIG_DIRS`; compose files pull from the registry and document SSDP/host networking - [x] `/healthz` endpoint; Dockerfile healthcheck uses it - [x] `README-DEV.md` and fork-specific `README.md` (about, container usage, env vars, security notes) diff --git a/xteve.go b/xteve.go index 3877b93..c193650 100644 --- a/xteve.go +++ b/xteve.go @@ -23,7 +23,7 @@ const Name = "xTeVe" // Version : Version, die Build Nummer wird in der main func geparst. // Can be overwritten at build time: -ldflags "-X main.Version=..." -var Version = "2.2.0.0201" +var Version = "2.3.0.0202" // DBVersion : Datanbank Version const DBVersion = "2.1.0"