Files

93 lines
2.7 KiB
Markdown

# coa-pack
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.