Initial commit: Brass & Sigil monorepo
Self-hosted Minecraft modpack distribution + administration system.
- launcher/ Avalonia 12 desktop client; single-file win-x64 publish.
Microsoft auth via XboxAuthNet, manifest+SHA-1 mod sync,
portable install path, sidecar settings.
- server/ brass-sigil-server daemon (.NET 8, linux-x64). Wraps the
MC subprocess, embedded Kestrel admin panel with cookie
auth + rate limiting, RCON bridge, scheduled backups,
BlueMap CLI integration with player markers + skin proxy,
friend-side whitelist request flow, world wipe with seed
selection (keep current / random / custom).
- pack/ pack.lock.json (Modrinth + manual CurseForge entries),
data-only tweak source under tweaks/, build outputs in
overrides/ (gitignored).
- scripts/ Build-Pack / Build-Tweaks / Update-Pack / Check-Updates
plus Deploy-Brass.ps1 unified one-shot deploy with
version-bump pre-flight and daemon-state detection.
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# Brass & Sigil
|
||||
|
||||
Self-hosted Minecraft modpack distribution + administration system.
|
||||
Three components, one repo:
|
||||
|
||||
```
|
||||
brass-and-sigil/
|
||||
├── launcher/ ← Avalonia desktop client (Windows .NET 8)
|
||||
│ Auths with Microsoft, syncs the modpack, launches the game.
|
||||
├── server/ ← brass-sigil-server daemon (Linux .NET 8)
|
||||
│ Wraps the MC subprocess, exposes the admin web panel,
|
||||
│ syncs mods, runs backups + BlueMap, handles whitelist.
|
||||
├── pack/ ← Modpack content
|
||||
│ ├── pack.lock.json Source of truth for mod versions / URLs / hashes
|
||||
│ ├── tweaks/ Hand-written data-only tweak source
|
||||
│ └── overrides/ Build output / hand-placed local files (gitignored)
|
||||
├── scripts/ ← Build + deploy entry points (run from repo root)
|
||||
│ ├── Update-Pack.ps1 Refresh pack.lock.json from Modrinth/CurseForge
|
||||
│ ├── Check-Updates.ps1 Non-mutating "what's new?" report
|
||||
│ ├── Build-Tweaks.ps1 Compile tweaks/ into pack/overrides/mods/*.jar
|
||||
│ ├── Build-Pack.ps1 Generate manifest.json from the lockfile
|
||||
│ └── Deploy-Brass.ps1 One-shot build + deploy everything
|
||||
└── docs/ ← Operational notes, deploy runbook, schema docs
|
||||
```
|
||||
|
||||
## Quick start
|
||||
|
||||
```powershell
|
||||
# Pull dependencies, copy and edit the deploy profile
|
||||
git clone <remote> brass-and-sigil
|
||||
cd brass-and-sigil
|
||||
Copy-Item scripts\deploy.config.template.ps1 scripts\deploy.config.ps1
|
||||
notepad scripts\deploy.config.ps1 # fill in deploy share, SSH host, etc.
|
||||
|
||||
# Build + deploy everything in one go
|
||||
.\scripts\Deploy-Brass.ps1
|
||||
```
|
||||
|
||||
`deploy.config.ps1` is gitignored -- local values never get committed.
|
||||
|
||||
## Component reference
|
||||
|
||||
| Component | What it does | Technology |
|
||||
|-----------|--------------|------------|
|
||||
| `launcher/` | Friend-distributed client. Auths with Microsoft via WebView2 + XboxAuthNet, downloads mods, launches Minecraft. Single self-contained `.exe` published from `publish/`. | Avalonia 12 + CmlLib.Core |
|
||||
| `server/` | Daemon running alongside the MC process on Linux. Hosts a Kestrel web panel for admin (cookie-auth, rate-limited), bridges RCON, runs scheduled backups + BlueMap renders, handles whitelist requests. | ASP.NET Core minimal APIs |
|
||||
| `pack/` | Lockfile-driven modpack content. `pack.lock.json` resolves mod slug → URL+SHA-1; `Build-Pack.ps1` walks it and produces `manifest.json` for the launcher and the server-tool to consume. | PowerShell tooling |
|
||||
|
||||
## Workflow
|
||||
|
||||
1. **Bump mod versions:** `.\scripts\Update-Pack.ps1` (queries Modrinth + manual CurseForge entries).
|
||||
2. **Sanity-check:** `.\scripts\Check-Updates.ps1` for a non-mutating availability report.
|
||||
3. **Edit tweaks** under `pack/tweaks/<name>/` if you're changing recipes / loot / etc.
|
||||
4. **Deploy:** `.\scripts\Deploy-Brass.ps1` -- builds launcher + server, regenerates manifest, mirrors everything to the deploy share, scp's the server binary.
|
||||
|
||||
## Secrets / config files
|
||||
|
||||
| File | Tracked? | Notes |
|
||||
|------|----------|-------|
|
||||
| `launcher/launcher-config.template.json` | ✓ | Empty placeholders, public-safe |
|
||||
| `launcher/launcher-config.json` | ✗ | Local override; merged into the published exe at build time if present |
|
||||
| `server/deploy/server-config.example.json` | ✓ | Template; rename to `server-config.json` on the server with real values |
|
||||
| `server/deploy/server-config.json` | ✗ | Production config; lives on the server only |
|
||||
| `scripts/deploy.config.ps1` | ✗ | Local deploy profile (paths, SSH host, share location) |
|
||||
|
||||
## License
|
||||
|
||||
See `LICENSE`.
|
||||
Reference in New Issue
Block a user