-
v6.0.0 Stable
released this
2026-08-16 14:24:45 +02:00 | 102 commits to main since this release6.0.0 (2026-08-16)
⚠ BREAKING CHANGES
- drop render-run relics, ingest vocabulary, and the last git-era copy
- drop every legacy name: objects/ keys, skinhub cookies and metrics, skin_collections
- queue-centric admin render overview replaces CI-era health
- drop communities.skin_repo
- drop the community media alias; picks carry the collection owner id
- store community collections as negative-id owners
- drop CI naming from the render pipeline
- rename the CI API surface to renders
Features
- add skin_files, skin_props and the render job queue (171181d)
- add SKINS_BUCKET for the Postgres-backed skin backend (7801b49)
- add the render job queue and the worker control plane (56baeb9)
- admin-approved api keys replacing the shared token secrets (f4c19ed)
- admin-authored announcements feed (17d99b8)
- allow deleting every skin and serve empty profiles instead of 404 (7db8430)
- auto-file an inquiry when a render run fails (622f54b)
- chunk large render jobs across workers and keep per-member contribution stats (aebcfcf)
- community opt-out so auto-enrolled members can leave (477e8ec)
- derive existing skin dirs from skin_files instead of the Forgejo tree (89ede0b)
- detect malfunctioning render workers and resend their tasks (2e9591a)
- expose the render worker plane publicly and stream blobs through the api (bdf6c72)
- fingerprint skins from their source files behind a basis tag (1b7b759)
- first-run setup, web-editable settings, dev-login, selfhost and dev stacks (a5d1c9d)
- hidden supporters community synced from approved render workers (c42f48e)
- hidden team community synced from the admin role (df0b2bb)
- import skin repo trees into skin_files and skin_props (5fc15fb)
- import the legacy env tokens as manageable api keys (2b2df57)
- let members register admin-approved render workers (4931e4d)
- make the Postgres write path unconditional (96276e7)
- manage admin roles in the app, env allowlist becomes a promote-only seed (872fd4a)
- mint CalVer release tags in-process (e72e8cd)
- move avatar cache and community logos into the app-owned skins bucket (1bfe7f0)
- osu default-skin fallback in render settings (d7c6868)
- own render task claims by the authenticated worker row (68a0d4c)
- per-key rate limits with admin-editable owner and unlimited flag (691608e)
- per-worker log ingestion, file logging, readable stdout (783b6b0)
- platform render worker owned by the first admin with a real name (913a95c)
- presign render outputs so the worker holds no storage credential (c269aa4)
- promote and revoke admins from the users panel (1b73f58)
- publish tags directly from osc-api state instead of reprojecting (21f5228)
- queue-centric admin render overview replaces CI-era health (0402e0e)
- remember last-known osu! identities so banned members keep name and country (861fda9)
- render pipeline metrics - task queue, worker fleet, claims, log ingest (95b5ccf)
- route pilot repos' writes through Postgres and the renderer (5f1303b)
- scoped api keys with a served catalog, rename, scope edits and usage stats (d9f6276)
- senders read their own inquiries; admins reply in-app (6edb3e8)
- split render fan-out into gameplay/screenshots/icons/osk chunked task kinds (28576b1)
- split render jobs into capability tasks with a versioned worker plane (be407ae)
- store community collections as negative-id owners (e046861)
- store inquiries locally and serve a vendored changelog (37db3a3)
- stream bulk downloads while the zip is built (6c1755a)
- stream render progress into the CI panel and live stream (da1d915)
- support ?limit on the changelog feed (32c047f)
- sweep orphaned bucket objects in the maintenance retention pass (6fad9f1)
- type the CI health response without the external mode (1fe2327)
- validate render worker output against a path and content allowlist (f92f3e5)
Bug Fixes
- 404 the synthetic collection owner on user-shaped routes (d389ed1)
- cap the clip before the results screen like the approved reference (967a3d4)
- carry skin media from the newest tag that has it (0692778)
- copy the vendored changelog into the image build (b7760f7)
- declare the slug field the admin activity feed emits (5b0e8ef)
- derive cookie Secure from the frontend origin scheme, configurable dev origin (be56a72)
- derive the admin render queue's worker column from tasks (2414a2b)
- drop insider names from member-facing copy and api docs (a394076)
- exclude collection owners from the roster and repo count (acaff22)
- hold never-rendered skins out of published tags (2e1307e)
- humanize user-facing copy and make filtered test runs use the shared servers (53049e9)
- member-facing wording for auto-filed render inquiries (2fbdd41)
- never orphan-sweep a shared single-bucket deploy (3e49233)
- pin the img colour package the sharp runtime needs (d87d9bb)
- preserve exact filenames when importing and comparing skin trees (d9686b8)
- quiet per-statement sqlx noise in the default log filter (904340e)
- read media from the write bucket before the legacy one (2cf9972)
- register the self-hosted render worker so it is visible (1403cf4)
- rename crate and remaining osc references to skinhub (288449f)
- rename osc_skin modules and OscSkinPage schema (d3dc2b3)
- replace the changelog feed with curated user-facing release notes (b7e2902)
- report the publish phase from osc-api, which performs it (32b1197)
- restore the exact CI clip shape via re-encoded trim and gate old workers (010f5ad)
- return the actual run_number from render dispatch (0208481)
- route support copy to the in-app form with direct DM fallback (493af02)
- scope render-worker read and upload routes to the claiming worker (7eca36f)
- serve the clip trim window and keyframe interval for the gameplay cut (2d3947c)
- serve the thumbnail screenshot timestamp in the worker config (e19f0b4)
- serve worker download locations for the self-updater (7b08a23)
- silence the arg-count lint on the phase recorder (a197a09)
- stream upload hashing and object puts instead of buffering whole files (5c46901)
- stream-copy clip audio and cut 3.5s lead to the raw end (7f485bf)
- sweep the collection rows when deleting a community (6bfb302)
- trim 3.5s more lead off the showcase clip (dab0a77)
- unique openapi operation ids for the api key routes (eda1696)
- use Garage-compatible request checksums on the S3 client (264d98b)
Refactors
- adapt raw-SQL calls to the sea-orm 2 API (59d8be9)
- collapse duplicate cache-invalidation and tag-query helpers (48c51db)
- collapse repeated field parsing in the community patch (da3c0f5)
- correct stale osc/community copy and plane/setup comments (c63e08b)
- drop CI naming from the render pipeline (2a56dc5)
- drop communities.skin_repo (510c753)
- drop every legacy name: objects/ keys, skinhub cookies and metrics, skin_collections (d5f6ebc)
- drop git-era naming, legacy worker mount, and dead metric config (0c78b62)
- drop render-run relics, ingest vocabulary, and the last git-era copy (fb01094)
- drop the community media alias; picks carry the collection owner id (a846c18)
- drop the ignored force_rebuild wire fields (4ba453a)
- one integration-test binary instead of 23 (e3b7f33)
- remove every Forgejo dependency from the backend (aa27154)
- rename the CI API surface to renders (af17044)
- rename the collections gauge (8305565)
- rename to skinhub-api (org, image, bot identity) (92ab03b)
- replace LfsObject struct with lfs_key function (01ee214)
- replace semver tag ordering with CalVer-only calver module (fd79d7f)
- serve media from the skins bucket only (a8eeb47)
- share the media proxy response between both routes (ea60ce1)
- share the skin-detail and paginated-list response bodies (fcb43fa)
- share the zip download response between both routes (de61335)
- use one strict dir-name predicate everywhere (8cfc5ad)
Documentation
- clarify inquiry context is a text label (d5d1f3f)
- cut comments that restate code or narrate deleted designs (973fb61)
- state current truth in comments and API copy (9a12d67)
- trim changelog module history narrative (1af4089)
Styles
- cargo fmt (6a650b4)
Tests
- delete the dead Forgejo wiremock scaffolding (29aea52)
Dependencies
- update actions/checkout digest to 3d3c42e (b296fc6)
- update actions/setup-node action to v7 (eb3821c)
- update aws-sdk-rust monorepo to v1.3.0 (de710d1)
- update backend dependencies to latest (4f98a04)
- update docker/login-action digest to dbcb813 (abe65fd)
- update rust crate anyhow to v1.0.104 (89b1836)
- update rust crate async-trait to v0.1.91 (c590638)
- update rust crate aws-sdk-s3 to v1.138.1 (2423ec5)
- update rust crate aws-sdk-s3 to v1.140.0 (5e6ba7c)
- update rust crate base64 to 0.23 (c117a96)
- update rust crate bytes to v1.12.1 (b09af9a)
- update rust crate futures to v0.3.33 (cfde73d)
- update rust crate futures to v0.3.34 (a4cf6f6)
- update rust crate ipnet to v2.12.1 (0aabf62)
- update rust crate moka to v0.12.16 (04cb86f)
- update rust crate regex to v1.13.1 (a0584b9)
- update rust crate sea-orm to v2 (9ac4d76)
- update rust crate sea-orm to v2.0.1 (bf2628b)
- update rust crate sea-orm to v2.0.2 (0bb5562)
- update rust crate serde to v1.0.229 (128c7e5)
- update rust crate serde_json to v1.0.151 (886dbf8)
- update rust crate thiserror to v2.0.19 (48fd55a)
- update rust crate time to v0.3.54 (a232376)
- update rust crate time to v0.3.55 (b032729)
- update rust crate tokio to v1.52.4 (cd6f13c)
- update rust crate tokio to v1.53.1 (19c4d33)
- update rust crate tokio-util to v0.7.19 (505faec)
- update rust crate uuid to v1.23.5 (a484d3e)
- update rust crate uuid to v1.24.0 (3e3c57a)
- update rust docker tag to v1.97 (885841f)
- update rust to v1.97.0 (b7c4f74)
- update rust to v1.97.1 (edca1bb)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads