--- name: spfx-release description: Automate SPFx version releases - branch, update files, commit, open PR, then tag after merge disable-model-invocation: false allowed-tools: Bash, Read, Edit, Grep argument-hint: "[version]" --- # SPFx Release Automation Release a new SPFx version. The version argument is: $ARGUMENTS ## Pre-flight checks Before making changes, verify: 1. Working tree is clean (`git status`). If there are unrelated uncommitted changes, stop and ask the user how to handle them. 2. The new version is not already present in `Dockerfile`, `README.md`, or `DevelopmentContainers.md` — if it is, the release may already be in flight; surface this and ask before continuing. 3. The tag `v$ARGUMENTS` does not already exist locally or on origin (`git tag --list`, `git ls-remote --tags origin`). ## Steps to perform 1. **Create a release branch** from the latest main: ``` git checkout main && git pull git checkout -b release/v$ARGUMENTS ``` Branch name must be valid git (no spaces, no colons). 2. **Update version in all files** — find and replace the old version with `$ARGUMENTS` in: - `Dockerfile` (generator-sharepoint version) - `README.md` (Available tags section — update `latest`, `online`, and add the new version row) - `DevelopmentContainers.md` (devcontainer.json example) - Run `grep -rn ""` to catch any other references. 3. **Commit changes** with message: `SPFx v$ARGUMENTS - new version updates` 4. **Squash commits on the release branch** (release branch only — never on main, since unrelated commits between the last tag and HEAD would get folded in): - Get the last tag: `git describe --tags --abbrev=0` - Soft reset to that tag: `git reset --soft ` - Re-commit with the same message. 5. **Push the branch and open a PR** (confirm with user first): ``` git push -u origin release/v$ARGUMENTS gh pr create --title "feat: new SPFx version v$ARGUMENTS" --body "..." ``` 6. **After the PR merges**, create and push the tag against the merged commit on main: ``` git checkout main && git pull git tag v$ARGUMENTS git push origin v$ARGUMENTS ``` Confirm with the user before pushing the tag. Always confirm with the user before any push or PR creation.