12 KiB
12 KiB
Release pipeline prior art (Eyes, 2026-10-29)
Serves: the Aetheria release pipeline forks (where Starfire builds run, how versions bump), raised 2026-10-29 by the operator's "we should have an auto release pipeline with semantic versioning and change logs". Eyes pass, session self-2026-10-28-ag9. Facts with pointers. No recommendations. "unverified" = not opened/confirmed.
1. Headless Unity CI builds (GameCI)
- Docker Hub
unityci/editor(built by github.com/game-ci/docker, MIT, "not affiliated with Unity"). Tags checked via https://hub.docker.com/v2/repositories/unityci/editor/tags?name=6000.3 (1,881 tags total at fetch):- 6000.3.24f1 (the project's version) EXISTS, pushed 2026-09-10:
ubuntu-6000.3.24f1-{base,linux-il2cpp,windows-mono,mac-mono,webgl,ios,android}-3.2.2(also-3,-3.2, unprefixed). Sizes (compressed): base 5.21 GB, linux-il2cpp 5.68 GB, windows-mono 5.95 GB. Nolinux-monotag (Linux Mono player support is in the base editor; unverified wording).windows-6000.3.24f1-basetags marked inactive. - Newer: 6000.3.26f1 (2026-10-08), 6000.3.27f1 (2026-10-21), same module set. Windows-container images (
windows-<ver>-base/windows-il2cpp/..., 9-13 GB) also exist.
- 6000.3.24f1 (the project's version) EXISTS, pushed 2026-09-10:
- GameCI docs: https://game.ci/docs/github/builder — "Many Mono targets can be cross-compiled, so a Linux runner can produce a Windows Mono player"; IL2CPP needs matching OS for some platforms (https://game.ci/docs/docker/docker-images: "Some platforms require their respective operating systems in order to generate IL2CPP builds"). Windows and macOS targets each consume an extra license seat, all Linux targets together one.
- unityVersion needs full string e.g.
6000.0.23f1;dockerMemoryLimitdefaults 95% of system memory on Linux; 6.6+ needs 1 GiB shm (dockerShmSize). - Known failure reports (not this exact setup): Unity issuetracker 24511 —
windows-monomodule install on Linux fails ERROR_CHECKSUM_MISMATCH for 6000.5.9f1 (stale md5 in release manifest; applies to Hub/module install, not prebuilt GameCI images). Old game-ci issue: Windows IL2CPP from Linux not possible/failed (2021.2 era); Mono worked. - Memory/disk: no authoritative figure found. Unity issue UUM-90456: Linux IL2CPP "Linking GameAssembly.so" high memory, OOM-killed on low-RAM machines; forum: "LLVM ERROR: out of memory" on 32 GB, Master->Release C++ config fixed it. Unity docs (6000.3 linux-il2cpp-crosscompiler): toolchain package 462 MB (Linux), 2 GB each Win/mac host. Image pulls are 5-6 GB compressed each (above); a single image holds one module set (no combined image unless built with
game-ci build-unity-image). - gVisor/rootless: ZERO reports found of Unity Editor under gVisor/runsc (searches 2x). Yggdrasil runner facts from the runbook (F:\Projects\gamecult-ops\runbooks\forgejo-eureka-yggdrasil.md lines 29-45, 85-105): runsc with
--ignore-cgroups, ENFORCED cap MemoryMax=4G via unit (no swap), CPUQuota 200%; "A 6 GB allocation was OOM-killed (exit 137) at the 4G cap"; gVisor reports host 16 CPUs/62 GB; capacity 1. - No reports found of unity-builder on Forgejo/Gitea Actions (searched).
2. Unity licensing for CI
- Unity 6000.3 manual (https://docs.unity.com/en-us/engine/6000.3/manual/get-started/install-and-upgrade/licenses-and-activation/managing-your-unity-license): command-line
-serial/-username/-password(and-returnlicense) procedures "don't apply to Unity Personal. To activate a license for Unity Personal, log in to the Unity Hub." Headless/automated builds named as a use case for the Pro procedure. Named-user variant:-serial -username -passwordwith serial omitted. - Unity Build Server terms (https://unity.com/legal/terms-of-service/build-server, "Last updated: June 30, 2026"): §2.5 "You may not use Unity Build Server with the Unity Personal tier of the Unity Software." §1.1: if Total Finances exceed $200,000 USD, Personal may not be used at all. Build Server = floating licence server product. Unity Licensing Server docs (https://docs.unity.com/en-us/licensing-server) don't state eligible tiers on fetched page (Requirements page not read).
- GameCI Personal path (https://game.ci/docs/github/activation): activate in Unity Hub locally, copy the
.ulfto secretUNITY_LICENSE+UNITY_EMAIL/UNITY_PASSWORD; Pro:UNITY_SERIAL+email+password; floating:unityLicensingServer. Docs say licences are not tied to a Unity version/platform; .ulf can be generated on one OS and used on another. Page does not mention Unity 6. - Status of alf->ulf web activation (game-ci/documentation#408, open, updated 2026-10-04): https://license.unity3d.com/manual flow for Personal intermittently works (hidden "option-personal" element trick; "less than $100k" option); reports 2025-06..2025-11 "works", 2026-03-30 "web method expired with error", 2026-10-04 "workaround doesn't work anymore" vs another user succeeded same day. Alternative in thread (2025-08-21 GabLeRoux): create the .ulf via Unity Hub (not the website). A 2026-04-23 comment describes extracting a serial from the Hub-made .ulf and passing it with -username/-password (unverified). Also game-ci/unity-test-runner#235 (closed dup; 2026-04-29 comment "Confirmed the workaround above still works today").
- Unity forum (Aug 2023) "Unity no longer supports manual activation of Personal licenses": no Unity staff reply. Codemagic help (updated Jun 2026, secondary) says Plus/Pro needed for CI.
- I did not find the current Unity Terms of Service text on Personal + automated builds beyond the Build Server terms above.
3. Forgejo Actions / releases
- forgejo-runner Windows: official releases are linux-amd64/arm64 only (https://code.forgejo.org/api/v1/repos/forgejo/runner/releases, v13.2.1 2026-10-29). README: "supported and tested on amd64 and arm64" on Linux-kernel OSes. Windows: community builds only (github.com/Crown0815/Forgejo-runner-windows-builder; runner issues #263, #976, #1032 fixed compile via PR 987, #1441 open "How to keep the Windows built stable"; maintainers (earl-warren, #263) decline to test/support Windows). Host label syntax
self-hosted:hostdocumented at https://forgejo.org/docs/latest/admin/actions/configuration/ ("no isolation at all"); docs don't mention Windows. A third-party fork (forge.yumechi.jp yume-runner) ships a pwsh host-mode sample (unverified). - Release API:
/repos/{owner}/{repo}/releasesand/releases/{id}/assets(https://forgejo.org/docs/latest/user/repository/releases/). Official actionactions/forgejo-release(https://code.forgejo.org/actions/forgejo-release): inputs url, repo, tag, title, sha, token (needs write:repository), release-dir, release-notes(-file), prerelease, override, direction upload/download, gpg signing. - Limits on THIS forge (https://eureka.gamecult.org/forge/api/v1/settings/attachment, version 16.0.3+gitea-1.22.0): release/attachment max_size 2048 MB per file, max_files 5 per upload, allowed_types default list incl .zip .gz .tgz .json .log .md .pdf .png ... (no .exe, .tar.xz, .7z, .AppImage, .msi). Config cheat sheet confirms
[repository.release]ALLOWED_TYPES default list, MAX_SIZE 2048, MAX_FILES 5 (https://forgejo.org/docs/latest/admin/config-cheat-sheet/). Release-asset ALLOWED_TYPES is overridable by admin. - Push mirror: docs say it mirrors "branches, tags, and commits" (
git push --mirror); releases not mentioned (https://forgejo.org/docs/latest/user/repo-mirror/). A third-party project (gitea.com/FrankenBit/release-toolkit) states releases are API objects that do not cross a push mirror; tags do. So releases do not propagate (consistent, not officially stated). - State of GameCult/Aetheria on the forge now: exists (id 60),
empty: true,mirror: false, has_actions true, has_releases true, no releases/tags, default branch master.
4. SemVer + changelog tooling
| Tool | What decides bump | Forgejo/Gitea | Non-conventional history |
|---|---|---|---|
| release-please (googleapis) | Conventional Commit prefixes (feat=minor, fix=patch, !=major); Release-As: footer overrides. |
GitHub-only; issue googleapis/release-please#2870 (opened 2026-08-06, open) asks for Forgejo/Gitea provider. | README: "assumes you are using Conventional Commit messages"; non-releasable commits produce no release PR; squash-merge BEGIN_COMMIT_OVERRIDE in PR body rewrites changelog lines. |
| semantic-release 25.0.9 | commit-analyzer (angular preset default). | Default plugin is @semantic-release/github; Gitea publishers are third-party npm: @markwylde/semantic-release-gitea 2.2.0 (2025-12), @forge-for-gitea/semantic-release-gitea 1.2.0 (2025-09), @saithodev/... 2.1.0 (2021). Node tool. | Non-matching commits yield no release (standard behaviour; not verified from docs fetched). |
| changesets | Hand-written changeset files declaring bump per package; no commit parsing. | CLI host-agnostic (git + files); changesets/action is GitHub-only (unverified); designed for npm/monorepos ("conceptually beneficial for single package repos"). | Unaffected by commit style. |
| git-cliff | --bump/--bumped-version from commits: fix=patch, feat=minor, !=major; custom_major/minor_increment_regex; [bump] features_always_bump_minor, breaking_always_bump_major, initial_tag; `--bump major |
minor | patch` explicit; tag_pattern. |
| knope 0.23.2 (2026-10-22) | Conventional commits and/or changeset files (.changeset/*.md style); can disable conventional commits via PrepareRelease. |
Native Gitea support: [gitea] owner/repo/host (example host codeberg.org), GITEA_TOKEN, Gitea CreateRelease step, release assets test (crates/knope/tests/gitea_release/release_assets). |
"Any commit without a first line structured like [type(scope)!: summary] isn't a conventional commit" (ignored for bump). |
| cocogitto (cog) | cog bump --auto from Conventional Commits; hooks; cog changelog (tera templates). |
README mentions only GitHub integration (action/bot); changelog remote templates (remote = "github.com" in example); Gitea unverified. |
cog check/cog commit enforce convention; non-conforming handling not read. |
| Release Drafter v7 | Pull-request labels/title via version-resolver (major/minor/patch labels) and autolabeler; drafts release notes from merged PRs. |
README: package release-drafter has CLI/API "for other CI systems... supports GitHub, GitHub Enterprise Server, Gitea, Forgejo, and GitLab." Main use is GitHub Action. |
Independent of commit style; depends on PRs/labels existing (Aetheria history is direct commits; PR usage unverified). |
- Aetheria facts given: prose subjects, no Conventional Commits, v0.1 tag from 2020.
Game projects in practice (checked via release APIs)
- Mindustry (Anuken/Mindustry): GitHub tags
v160.7,v160.6(build-number versions, 2026-09/10), 4 assets per release (Mindustry.jar, server-release.jar, assets.jar, dependencies.jar), notes hand-written bullets. - OpenTTD: tags
16.0-beta5(2026-10-24, prerelease, 0 attached assets on the GitHub release); release.yml workflow triggered byrelease: published/ workflow_dispatch builds source, docs, Linux, etc. - Veloren (GitLab veloren/veloren): releases v0.18.0 (2026-01-23), v0.17.0 (2024-12-27), v0.16.0 (2024-03-31); plus moving tags
weeklyandnightly(updated 2026-10-27). FreeBSD ports track weekly ass20260128. CI file not read. - Godot: tags
4.7.2-stable,4.7-stable; ~34 assets per release; hand-managed. - Unitystation (Unity, open source): GitHub releases stopped 2017; "Get latest release by using our launcher" (latest-release body).
- None of these showed Conventional-Commit-driven bumps in what I read; not verified beyond release listings.
Unread / not done
- Unity Licensing Server Requirements page; unity-builder issue tracker for 6000.3; Forgejo
releaseevent / GITHUB_TOKEN permissions in 16.0 Actions; cocogitto non-conventional behaviour; semantic-release/changesets docs on non-conventional input (stated from knowledge, marked unverified above).