# TODO Release

## In Scope (Prepared Now)

- [x] Create release workspace under `release/`.
- [x] Add release worker instructions in `release/release-instructions.md`.
- [x] Define Docker build container in `release/docker/Dockerfile`.
- [x] Add Dockerized matrix runner script for build + selected integration tests.
- [x] Preserve stable (`2025.3.1`) plugin ZIP artifact under deterministic path `release/out/plugin-idea-2025.3.1.zip`.
- [x] Add one-time version bump script with rerun guard.
- [x] Add dry-run mode that skips version bump and GitHub publish (keeps `VERSION` unchanged).
- [x] Add release orchestration entrypoint script (`release/scripts/run-release.sh`).
- [x] Isolate `.intellijPlatform` cache in container volume and add `.dockerignore` for lean Docker context.
- [x] Add agent prompt templates for release notes collection/review and website release-page update.
- [x] Add `--publish` flag for explicit publish stage enablement in non-dry-run mode.
- [x] Document preflight clean-worktree enforcement with `--allow-dirty` override.
- [x] Document publish stage inputs: tag (default `v<version>`), notes file, ZIP.
- [x] Forward stable/EAP matrix override env vars into Docker builder container.
- [x] Forward AI API keys into Docker builder container with env-first and local-file fallback.
- [x] Harden release-critical download tasks with retries/timeouts.
- [x] Harden publish stage with target commit, existing-release stop check, and stale-artifact guard.
- [x] Validate version-bump state file against current `VERSION` and recorded commit.
- [x] Use committed release notes file at `release/notes/<version>.md` and include it into plugin `change-notes`.
- [x] Release matrix uses non-snapshot version format (`<version>-<gitHash>`) for build artifacts.
- [x] Constrain release notes generation to local-ancestor commit ranges (with 200-commit fallback).
- [x] Fix JetBrains Marketplace upload channel: use `Stable` (was `default`). Case-sensitive.
- [x] Remove `static/updatePlugins.xml` and `static/version.json` from git — generated by GitHub Actions CI, not to be committed.
- [x] Document commit-then-build principle: all release commits must be pushed before building the plugin, so the git hash in the ZIP name matches the `--target` commit of the GitHub release.
- [x] Document single-repository layout: one repo (`jonnyzzz/mcp-steroid`) contains both plugin source and website source. Website deployed by GitHub Actions on push to `main`.

## Verification Tasks

- [ ] Run `release/scripts/bump-version.sh` on an actual release branch.
- [ ] Run `release/scripts/run-release.sh --dry-run` and keep artifacts.
- [ ] Run `release/scripts/run-builder.sh bash release/scripts/run-release-build-matrix.sh`.
- [ ] Confirm selected test category execution on:
  - [ ] IDEA stable lane
  - [ ] IDEA EAP lane
  - [ ] PyCharm stable lane
  - [ ] PyCharm EAP lane
  - [ ] GoLand stable lane
  - [ ] GoLand EAP lane
  - [ ] WebStorm stable lane
  - [ ] WebStorm EAP lane
- [ ] Confirm stable ZIP copied to `release/out/plugin-idea-2025.3.1.zip`.

## Completed (0.88.0 Release)

- [x] Quick release path (non-Docker, agent-driven) — used successfully for 0.88.0.
- [x] `updatePlugins.xml` generation — auto-generated by GitHub Actions CI via `make build`.
- [x] Auto-obsolete banners on older release pages (Hugo template logic, no manual content changes).
- [x] Plugin repository promotion on releases list page and individual release pages.
- [x] Mark older GitHub releases obsolete with banner pointing to latest.
- [x] Release ordering by version descending (`.ByTitle.Reverse`) instead of weight-based.
- [x] `CLAUDECODE` env var unset in `run-agent.sh` for nested agent support.
- [x] Release tag format uses no `v` prefix (e.g., `0.88.0` not `v0.88.0`).
- [x] GoLand and WebStorm added to integration test verification matrix.

## Later (Enhancements)

- [ ] Add post-publish validation (GitHub release asset checksum + website link checks).
- [ ] Automate the full release sequence in a single script following the commit-then-build principle.
