feat: initial coa-pack scaffolding (manifest + build_pack + workflow + docs)
This commit is contained in:
@@ -1,3 +1,92 @@
|
||||
# coa-pack
|
||||
|
||||
Bundles every Exiles/coa-* addon's latest release into one ExilesPack-<YYYY.MM.DD>.zip for guildies.
|
||||
Bundles every `Exiles/coa-*` addon's latest Gitea release into one
|
||||
`ExilesPack-<YYYY.MM.DD>.zip` for guildies. This repo is not itself an addon;
|
||||
it's the pack builder.
|
||||
|
||||
The output zip unpacks straight into `Interface/AddOns/` - every entry at the
|
||||
top level of the zip is an addon folder.
|
||||
|
||||
## Cut a release
|
||||
|
||||
```
|
||||
git tag 2026.05.25
|
||||
git push --tags
|
||||
```
|
||||
|
||||
The `.gitea/workflows/release.yml` workflow picks up any tag starting with
|
||||
`20*`, runs `tools/build_pack.sh --tag <tag>`, and attaches the resulting
|
||||
`ExilesPack-<tag>.zip` to a Gitea release.
|
||||
|
||||
The pack lands at
|
||||
[git.sub-net.at/Exiles/coa-pack/releases](https://git.sub-net.at/Exiles/coa-pack/releases).
|
||||
|
||||
## Build locally
|
||||
|
||||
```
|
||||
bash tools/build_pack.sh # ExilesPack-<UTC date>.zip
|
||||
bash tools/build_pack.sh --tag 2026.05.25
|
||||
```
|
||||
|
||||
Produces `dist/ExilesPack-*.zip` and prints a summary (addon count, size,
|
||||
sha256, repos included/skipped).
|
||||
|
||||
Dependencies: `bash`, `curl`, `jq`, `unzip`, `zip`. No `yq`.
|
||||
|
||||
## Peek at what's currently included
|
||||
|
||||
```
|
||||
bash tools/list_releases.sh
|
||||
```
|
||||
|
||||
Lists every `include: true` repo in `manifest.yaml` with its latest release
|
||||
tag (or `(no releases)`). Pure read-only against the public Gitea API.
|
||||
|
||||
## manifest.yaml
|
||||
|
||||
Controls which repos go in the pack. Format:
|
||||
|
||||
```yaml
|
||||
addons:
|
||||
- repo: coa-decursive
|
||||
include: true
|
||||
- repo: coa-ace3
|
||||
include: false
|
||||
note: "Ace3 libs are already embedded inside each consuming fork."
|
||||
```
|
||||
|
||||
- `include: true` - fetch the latest release and unpack its zip assets into
|
||||
the pack.
|
||||
- `include: false` - leave it out (libraries, repo-only utilities,
|
||||
not-yet-ready forks, etc.).
|
||||
|
||||
To add a new addon: append a `- repo: coa-<name>` block with `include: true`.
|
||||
To drop one without deleting the entry, flip its flag to `false` (and add a
|
||||
`note:` so the reason survives).
|
||||
|
||||
## Asset selection rules
|
||||
|
||||
For each included repo, the builder grabs the latest release and chooses
|
||||
which zip(s) to extract:
|
||||
|
||||
1. If a `<repo>-all.zip` asset is present (umbrella zip with every addon
|
||||
folder side-by-side), use just that.
|
||||
2. Otherwise, download every `*.zip` asset attached to the release.
|
||||
|
||||
Each chosen zip is unpacked straight into `staging/`, where it should
|
||||
produce one or more `<AddonFolder>/` entries. The per-repo zips don't carry
|
||||
repo metadata (`.git`, `README.md`, `.gitea/`), so the pack stays clean.
|
||||
|
||||
## Failure modes
|
||||
|
||||
- Repo has no releases yet: warned and skipped (the pack still builds).
|
||||
- Asset download fails: one retry, then warned and skipped.
|
||||
- All repos skip: build errors out (`staging is empty`).
|
||||
|
||||
This means cutting a pack release while some addons are still tagless will
|
||||
produce a smaller-than-final pack rather than a hard failure. Re-tag once
|
||||
all repos have shipped.
|
||||
|
||||
## License
|
||||
|
||||
[0BSD](LICENSE). Matches the rest of the Exiles addon repos.
|
||||
|
||||
Reference in New Issue
Block a user