# coa-pack Bundles every `Exiles/coa-*` addon's latest Gitea release into one `ExilesPack-.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 `, and attaches the resulting `ExilesPack-.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-.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-` 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 `-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 `/` 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.