feat(bridge): server id from the environment, and the first release workflow (phase 18)
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in -1m35s
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in -1m35s
Module-rust phase 18, step 3 of docs/modules/rust/PLAN.md §34.2.7.
The environment seam (D150): when the plugin writes its default config and
RUSTLINK_SERVER_ID holds a valid id (the site's ^[a-z0-9][a-z0-9-]{0,63}$),
the file's ServerId is that value. It is read nowhere else: after that write
the file is canonical and the site's lock applies. An invalid value is logged
and ignored. This is how the egg names a server; not a message change, so the
protocol stays at 12.
The release (D145, §34.2.1): release.yml reuses servuo-plugins' release engine
unchanged (tag-only, secrets preflighted, orphan tags recovered and swept, the
installer's bundle.yml dispatched at the end). The adapter re-runs
checkPlugin.js and packages runicgateway-rust-plugin-<version>.tar.gz with a
framework-neutral layout: RunicGateway.cs, its [Info] version stamped to the
release, and a manifest.json folding in overlay.toml.
overlay.toml gains min_carbon_version = "2.0.259", the build R19 was proven on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
22
README.md
22
README.md
@@ -52,9 +52,27 @@ Oxide compiles and loads it on the write, and writes `oxide/config/RunicGateway.
|
||||
is deliberately **not** derived from the hostname: an operator renames a server for a season, and
|
||||
the site must not lose its history for it.
|
||||
|
||||
**When that first config is written**, and only then, a valid `RUSTLINK_SERVER_ID` in the server's
|
||||
environment becomes its `ServerId` (an invalid one is logged and ignored). That is how the
|
||||
Pterodactyl egg names a server, since an egg can set a variable but cannot reliably write a
|
||||
framework's config directory. After that the file is canonical and the website locks the value, so
|
||||
changing the variable later changes nothing.
|
||||
|
||||
On Carbon the same file goes to `carbon/plugins/` and its config to `carbon/configs/`.
|
||||
|
||||
That is the developer's loop. An operator uses the
|
||||
[installer](https://gitea.whitlocktech.com/RunicGateway/installer), which syncs the released overlay
|
||||
tarball and installs the sidecar alongside it.
|
||||
[installer](https://gitea.whitlocktech.com/RunicGateway/installer) (`--game rust`) or the Pterodactyl
|
||||
egg, both of which deploy a **released** plugin and install the sidecar beside it.
|
||||
|
||||
### Releases
|
||||
|
||||
Every merge to `main` that carries a `feat`, `fix` or `perf` commit cuts a release
|
||||
(`.gitea/workflows/release.yml`): `runicgateway-rust-plugin-<version>.tar.gz` and `SHA256SUMS`. The
|
||||
tarball holds one directory, `runicgateway-rust-plugin/`, with `RunicGateway.cs` (its `[Info]`
|
||||
version stamped to the release) and a `manifest.json` folding in `overlay.toml`: the protocol, the
|
||||
Oxide and Carbon floors, and `requires_plugins`. The layout names no framework; the installer and
|
||||
the egg decide where the file goes. A release then asks the installer repo to recompose its Rust
|
||||
bundle.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
|
||||
Reference in New Issue
Block a user