Research: release pipeline prior art (Unity CI, Personal licensing, Forgejo runners and releases, versioning tools)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
01bed8d447
commit
152b9251a9
1 changed files with 53 additions and 0 deletions
53
docs/research/2026-10-29-release-pipeline-prior-art.md
Normal file
53
docs/research/2026-10-29-release-pipeline-prior-art.md
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
# 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. No `linux-mono` tag (Linux Mono player support is in the base editor; unverified wording). `windows-6000.3.24f1-base` tags 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.
|
||||
- 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`; `dockerMemoryLimit` defaults 95% of system memory on Linux; 6.6+ needs 1 GiB shm (`dockerShmSize`).
|
||||
- Known failure reports (not this exact setup): Unity issuetracker 24511 — `windows-mono` module 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 -password` with 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 `.ulf` to secret `UNITY_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:host` documented 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}/releases` and `/releases/{id}/assets` (https://forgejo.org/docs/latest/user/repository/releases/). Official action `actions/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. | Remote integrations: GitHub, GitLab, Gitea/Forgejo, Bitbucket, Azure DevOps (docs: website/docs/integration/gitea.md; configuration/remote.md). Rust single binary. Changelog only (does not publish releases). | `conventional_commits=false, filter_unconventional=false` includes any commit unparsed; `commit_parsers` regex on message groups arbitrary prose (e.g. `{message=".*", group="Other"}`); for unconventional commits only the subject line is used when bumping (docs usage/bump-version.md). |
|
||||
| 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 by `release: 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 `weekly` and `nightly` (updated 2026-10-27). FreeBSD ports track weekly as `s20260128`. 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 `release` event / 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).
|
||||
Loading…
Reference in a new issue