Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions .github/skills/prepare-release/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
---
name: prepare-release
description: Prepare a release for the JavaScript Feature Management packages. Use when user mentions release preparation, version bump, creating merge PRs, preview release, or stable release for this project.
---

# Prepare Release

This skill automates the release preparation workflow for the [JavaScript Feature Management](https://github.com/microsoft/FeatureManagement-JavaScript) project.

## When to Use This Skill

Use this skill when you need to:
- Bump the package version for a new stable or preview release
- Create merge PRs to sync branches (main → release, preview → release)
- Prepare all the PRs needed before publishing a new release

## Background

### Repository Information
- **GitHub Repo**: https://github.com/microsoft/FeatureManagement-JavaScript
- **Packages**:
- `@microsoft/feature-management`
- `@microsoft/feature-management-applicationinsights-browser`
- `@microsoft/feature-management-applicationinsights-node`

### Branch Structure
- `main` – primary development branch for stable releases
- `preview` – development branch for preview releases
- `release/v{major}` – release branch (e.g., `release/v2`)

### Version Files
The version must be updated in **all 7 files** simultaneously. Some files have multiple locations that need updating:

1. `src/feature-management/src/version.ts` – line 4: `export const VERSION = "<version>";`
2. `src/feature-management/package.json` – line 3: `"version": "<version>",`
3. `src/feature-management/package-lock.json` – line 3: `"version": "<version>",`
4. `src/feature-management/package-lock.json` – line 9: `"version": "<version>",`
5. `src/feature-management-applicationinsights-browser/src/version.ts` – line 4: `export const VERSION = "<version>";`
6. `src/feature-management-applicationinsights-browser/package.json` – line 3: `"version": "<version>",` AND the `@microsoft/feature-management` dependency version
7. `src/feature-management-applicationinsights-node/src/version.ts` – line 4: `export const VERSION = "<version>";`
8. `src/feature-management-applicationinsights-node/package.json` – line 3: `"version": "<version>",` AND the `@microsoft/feature-management` dependency version

### Version Format
- **Stable**: `{major}.{minor}.{patch}` (e.g., `2.4.0`)
- **Preview**: `{major}.{minor}.{patch}-preview.{prerelease}` (e.g., `2.4.0-preview.1`)

## Quick Start

Ask the user whether this is a **stable** or **preview** release, and what the **new version number** should be. Then follow the appropriate workflow below.

---

### Workflow A: Stable Release

#### Step 1: Version Bump PR

Create a version bump PR targeting `main`:

1. Fetch the latest `main` branch.
2. Create a new branch from `main` named `<username>/version-<new_version>`
3. Read the current version from `src/feature-management/src/version.ts`.
4. Update the version in all 7 files (see [Version Files](#version-files) section above) by directly editing each file
5. Commit all changes with message: `Version bump <new_version>`.
6. Push the branch and create a PR targeting `main` with title: `Version bump <new_version>`.

**Sample PR**: https://github.com/microsoft/FeatureManagement-JavaScript/pull/120

#### Step 2: Merge Main to Release Branch

After the version bump PR is merged, create a PR to merge `main` into the release branch:

1. Fetch the latest `main` branch.
2. Create a new branch from `main` named `<username>/merge-main-to-release`.
3. Push the branch and create a PR targeting `release/v{major}` (e.g., `release/v2`) with title: `Merge main to release/v{major}`.

> **Important**: Use "Merge commit" (not squash) when merging this PR to preserve commit history.

---

### Workflow B: Preview Release

#### Step 1: Version Bump PR

Create a version bump PR targeting `preview`:

1. Fetch the latest `preview` branch.
2. Create a new branch from `preview` named `<username>/version-<new_version>`
3. Read the current version from `src/feature-management/src/version.ts`.
4. Update the version in all 7 files (see [Version Files](#version-files) section above) by directly editing each file
5. Commit all changes with message: `Version bump <new_version>`.
6. Push the branch and create a PR targeting `preview` with title: `Version bump <new_version>`.

#### Step 2: Merge Preview to Release Branch

After the version bump PR is merged, create a PR to merge `preview` into the release branch:

1. Fetch the latest `preview` branch.
2. Create a new branch from `preview` named `<username>/merge-preview-to-release`.
3. Push the branch and create a PR targeting `release/v{major}` (e.g., `release/v2`) with title: `Merge preview to release/v{major}`.

> **Important**: Use "Merge commit" (not squash) when merging this PR to preserve commit history.

---

## Review Checklist

Each PR should be reviewed with the following checks:
- [ ] Version is updated consistently across all 7 files
- [ ] The `@microsoft/feature-management` dependency version in both applicationinsights packages matches the new version
- [ ] No unintended file changes are included
- [ ] Merge PRs use **merge commit** strategy (not squash)
- [ ] Branch names follow the naming conventions
- [ ] All CI checks pass
Loading