# Releasing emcli A release publishes one static binary per platform plus a `checksums.txt`, named so the agent skill installer (`skills/emcli/scripts/install.sh`) can fetch them: ``` emcli___[.exe] e.g. emcli_0.4.0_linux_amd64 checksums.txt sha256, one " " line per asset ``` Platforms: `linux/amd64`, `linux/arm64`, `darwin/amd64`, `darwin/arm64`, `windows/amd64`. The binary is CGO-free, so cross-compilation needs only the Go toolchain. ## Option A — local (Makefile + tea) ```bash # 1. Build the artifacts into dist/ (version is injected into `emcli version`) make release VERSION=v0.4.0 # 2. Create the Gitea release for the tag and upload every dist/ asset make publish VERSION=v0.4.0 ``` `make publish` uses the `tea` CLI (already configured for this repo). It runs: ``` tea releases create --repo steve/emcli --tag v0.4.0 --title v0.4.0 --asset dist/ ``` Inspect `dist/` and `dist/checksums.txt` before publishing if you want to double-check. ## Option B — CI (Gitea Actions) Push a version tag and let `.gitea/workflows/release.yml` build and publish: ```bash git tag v0.4.0 git push origin v0.4.0 # (push via the tokenized HTTPS URL this repo uses) ``` The workflow runs `make release` and uploads the assets to the release via the Gitea API. It needs Gitea Actions enabled with a runner that provides Go, make, curl, and jq. It hasn't been exercised against this repo's runners yet — if it doesn't fit your runner setup, fall back to Option A. ## After a release The skill installer defaults to `EMCLI_VERSION=v0.4.0`. When you cut a different version, either publish under that tag or update the default in `skills/emcli/scripts/install.sh` (and the note in `skills/emcli/references/install.md`). ## Versioning `VERSION` is injected at build time into `internal/version.String` via `-ldflags -X`, so `emcli version` prints the released tag. Without an explicit `VERSION`, the Makefile derives one from `git describe`.