--- name: release description: >- Bump sunsynk version (major/minor/bugfix), rewrite the Unreleased changelog heading, commit, push to main, and open a draft GitHub release with a v-prefixed tag. Use when the user asks to release, bump version, or cut a major/minor/bugfix release. disable-model-invocation: true --- # Release Bump version, push to `main`, and open a **draft** GitHub release (`v0.0.0` tag). Publishing the draft (not creating it) starts CI. ## Parameter Require one bump kind (ask if missing): | Input | Semver effect | | -------- | --------------------- | | `major` | `X.Y.Z` → `(X+1).0.0` | | `minor` | `X.Y.Z` → `X.(Y+1).0` | | `bugfix` | `X.Y.Z` → `X.Y.(Z+1)` | ## Preconditions (abort if unmet) Run from the **sunsynk** repo root. Stop with a clear message unless **all** pass: 1. Current branch is `main` 2. Working tree is clean (`git status --porcelain` empty) 3. Bump parameter is one of `major` | `minor` | `bugfix` ## Steps 1. Rebase against the current head: `git pull --rebase` 2. Bump the version in `pyproject.toml` according to the input 3. Use the new version string and change the `## Unreleased` heading in `hass-addon-sunsynk-edge/CHANGELOG.md` to `## Release x.x.x` 4. Copy `hass-addon-sunsynk-edge/CHANGELOG.md` to `hass-addon-sunsynk-multi/CHANGELOG.md` 5. In `www/docs/reference/multi-options.md`, remove every edge-only option prefix `` (list items and table cells). Leave the `::: tip` block unchanged — it stays for future edge-only options. 6. Commit using the release number (`0.0.0` form) as the message and push to GitHub 7. Create a draft GitHub release with tag `v0.0.0` (semantic version preceded by `v`) 8. Notify the user to review and **publish** the draft release on GitHub to start the release process ## Implementation notes - Read current version from `[project]` → `version = "..."` in `pyproject.toml`. - Heading match is case-insensitive for `## Unreleased`; write `## Release ` (no `v` prefix). - Stage only `pyproject.toml`, `hass-addon-sunsynk-edge/CHANGELOG.md`, `hass-addon-sunsynk-multi/CHANGELOG.md`, and `www/docs/reference/multi-options.md` (if the edge prefixes were present). Include `uv.lock` if the version bump changed it. The multi CHANGELOG copy is the one allowed hand-edit under `hass-addon-sunsynk-multi/` in this skill (overwrite; do not merge). - When stripping edge prefixes, delete the HTML tag and the space after it so bullets stay `- \`OPTION\`` (or the table cell starts with the backtick). Do not touch the tip, and do not rewrite surrounding option text. - Do not copy `config.yaml` here. On a published release, `deployer2.yml` copies edge `config.yaml`, `translations/`, and `apparmor.txt` onto stable except `name`/`slug`, then sets `version` to the tag. - Commit message is exactly the new version string (e.g. `0.9.4`), nothing else. - Push: `git push` to `origin` on `main` (this skill authorizes push). - Draft release (after push), with network/`gh` permissions as needed: ```bash gh release create "v${VER}" --draft --generate-notes --target main --title "v${VER}" ``` Tag must be `v` + version (e.g. `v0.9.4`). CI strips the leading `v` when checking against `pyproject.toml`. Do **not** use `--latest` on a draft. - Do **not** publish the release; leave it draft so the user can review notes first. `release.published` is what starts CI. ## Done message Tell the user the new version, that the commit was pushed, link the draft release URL from `gh`, and that they should publish the draft on GitHub when ready to start CI (PyPI + add-ons).