microsoft/hve-core

Public

mirrored fromhttps://github.com/microsoft/hve-coreAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2f206b597b8dc246e2df8ad6c629ab9df22c6d24

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

docs/contributing/release-process.md

197lines · modecode

1---
2title: Release Process
3description: Trunk-based release workflow using release-please automation and automated VS Code extension publishing
4sidebar_position: 9
5ms.date: 2026-04-17
6ms.topic: how-to
7author: WilliamBerryiii
8---
9
10## Overview
11
12This project uses trunk-based development with automated release management. All changes go directly to `main` via pull requests, and [release-please](https://github.com/googleapis/release-please) handles version bumping, changelog generation, and GitHub releases automatically.
13
14## How Releases Work
15
16```mermaid
17flowchart LR
18 A[Feature PR] -->|merge| B[main branch]
19 B --> C[release-please updates Release PR]
20 C -->|you merge| D[Draft release + tag created]
21 D --> E[CI attaches assets and attestations]
22 E --> F[publish-release promotes to published]
23 F -->|automatically| G[Extension published to marketplace]
24```
25
26When you merge a PR to `main`:
27
281. **release-please analyzes commits** using conventional commit messages
292. **Updates the Release PR** with version bumps and changelog entries
303. **You decide** when to merge the Release PR
314. **Merging creates** a draft GitHub Release with the changelog
325. **CI attaches assets**, then the `publish-release` job promotes the draft to published
336. **Extension publishing** triggers automatically when the release is published
34
35## The Release PR
36
37The Release PR is not a branch cut or deployment. It is a staging mechanism containing only version metadata changes:
38
39* Updated `package.json` version
40* Updated `extension/templates/package.template.json` version
41* Updated `.github/plugin/marketplace.json` (version and plugins[*].version)
42* Updated `plugins/*/.github/plugin/plugin.json` (glob across all plugin directories)
43* Updated `CHANGELOG.md`
44
45Your actual code changes are already on `main` from your feature PRs. The Release PR accumulates version and changelog updates until you are ready to release.
46
47### Version Calculation
48
49Release-please determines the version bump from commit prefixes:
50
51| Commit Prefix | Version Bump | Example |
52|--------------------------------|--------------|----------------------|
53| `feat:` | Minor | 1.0.0 → 1.1.0 |
54| `fix:` | Patch | 1.0.0 → 1.0.1 |
55| `feat!:` or `BREAKING CHANGE:` | Major | 1.0.0 → 2.0.0 |
56| `docs:`, `chore:`, `refactor:` | No bump | Grouped in changelog |
57
58> [!NOTE]
59> Stable releases must have an even minor version number (e.g., `1.0`, `1.2`). Odd minor versions (e.g., `1.1`, `1.3`) are reserved for pre-release or unstable versions. This convention is enforced by CI (`release-stable.yml`).
60
61## For Contributors
62
63Write commits using conventional commit format. This enables automated changelog generation and version bumping.
64
65```bash
66# Features (triggers minor version bump)
67git commit -m "feat: add new prompt for code review"
68
69# Bug fixes (triggers patch version bump)
70git commit -m "fix: resolve parsing error in instruction files"
71
72# Documentation (no version bump, appears in changelog)
73git commit -m "docs: update installation guide"
74
75# Breaking changes (triggers major version bump)
76git commit -m "feat!: redesign configuration schema"
77```
78
79For more details, see the [commit message instructions](https://github.com/microsoft/hve-core/blob/main/.github/instructions/hve-core/commit-message.instructions.md).
80
81## For Maintainers
82
83### Reviewing the Release PR
84
85The Release PR titled "chore(main): release X.Y.Z" updates automatically as PRs merge. When ready to release:
86
871. Review the accumulated changelog in the PR
882. Verify version bump is appropriate for the changes
893. Merge the Release PR (this creates a draft GitHub Release)
904. CI attaches VSIX packages, plugin ZIPs, SBOMs, and attestations to the draft release
915. The `publish-release` job promotes the draft to a published release
926. The `release: published` event triggers the marketplace publish workflow automatically
93
94### Release Cadence
95
96Releases are on-demand. Merge the Release PR when:
97
98* A meaningful set of changes has accumulated
99* A critical fix needs immediate release
100* A scheduled release milestone is reached
101
102There is no requirement to release after every PR merge.
103
104## Extension Publishing
105
106VS Code extension publishing is automated. When the `publish-release` job promotes a draft release to published, the `release: published` event triggers [`release-marketplace-stable.yml`](https://github.com/microsoft/hve-core/blob/main/.github/workflows/release-marketplace-stable.yml), which packages and publishes the extension to the VS Code Marketplace using Azure OIDC authentication.
107
108### Manual Fallback
109
110If the automated publish did not trigger or you need to republish, use the workflow dispatch fallback:
111
1121. Navigate to **Actions → Stable Marketplace Publish** in the repository
1132. Select **Run workflow**
1143. Choose the `main` branch
1154. Optionally specify a version (defaults to `package.json` version)
1165. Optionally enable dry-run mode to package without publishing
1176. Click **Run workflow**
118
119### When to Publish
120
121Publish the extension after merging a Release PR that includes extension-relevant changes:
122
123* New prompts, instructions, or custom agents
124* Bug fixes affecting extension behavior
125* Updated extension metadata or documentation
126
127Documentation-only releases may not require an extension publish.
128
129## Version Quick Reference
130
131| Action | Result |
132|--------------------------|---------------------------------------------------------------|
133| Merge feature PR to main | Release PR updates with new changelog entry |
134| Merge Release PR | Draft GitHub Release created, then auto-promoted to published |
135| Release published | Extension automatically published to marketplace |
136| Merge docs-only PR | Changelog updated, no version bump |
137
138## Extension Channels and Maturity
139
140The VS Code extension is published to two channels with different stability expectations.
141
142### Extension Channels
143
144| Channel | Stability | Included Maturity Levels | Audience |
145|-------------|------------------|-------------------------------------|----------------|
146| Stable | Production-ready | `stable` only | All users |
147| Pre-release | Early access | `stable`, `preview`, `experimental` | Early adopters |
148
149### Maturity Levels
150
151Each prompt, instruction, agent, and skill can set `maturity` in `collections/*.collection.yml` under `items[]`:
152
153| Level | Description | Included In |
154|----------------|---------------------------------------------------------------------------------------------------|---------------------|
155| `stable` | Production-ready, fully tested | Stable, Pre-release |
156| `preview` | Feature-complete but may have rough edges | Pre-release only |
157| `experimental` | Early development, may change significantly | Pre-release only |
158| `deprecated` | Scheduled for removal, excluded from all builds | Neither |
159| `removed` | Source retained for traceability; excluded from all generated plugins and extension distributions | Neither |
160
161### Maturity Lifecycle
162
163```mermaid
164stateDiagram-v2
165 [*] --> experimental : New artifact
166 experimental --> preview : Core features complete
167 preview --> stable : Production tested
168 stable --> deprecated : Superseded or obsolete
169 deprecated --> removed : Withdrawn from distribution
170 removed --> [*] : Source eventually deleted
171```
172
173The `removed` level is a collection-YAML-only marker. The artifact file remains in its
174source location (for example, under `.github/skills/{collection-id}/`) so history and
175references stay intact, but every downstream surface (collection validation, plugin
176generation, and extension packaging) excludes it. Use `removed` when you want to retire
177an artifact from distribution without moving it to `.github/deprecated/` or deleting it
178outright. See [AI Artifacts Architecture - Removed Artifacts](../architecture/ai-artifacts.md#removed-artifacts)
179for the architectural contract.
180
181### Contributor Guidelines
182
183| Guideline | Action |
184|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
185| New contributions | Set `stable` on collection items unless explicitly targeting early adopters |
186| Experimental work | Set `experimental` on collection items for proof-of-concept or rapidly evolving artifacts |
187| Preview promotions | Set `preview` on collection items when core functionality is complete |
188| Stable promotions | Set `stable` on collection items after production validation |
189| Deprecation | Set `deprecated` on collection items before removal to provide transition time. Move the artifact file to `.github/deprecated/{type}/` so the build system excludes it from all downstream surfaces automatically. See [AI Artifacts Architecture](../architecture/ai-artifacts.md#deprecated-artifacts) for the full deprecation policy. |
190| Removal | Set `removed` on collection items when the artifact should no longer ship in any plugin or extension build but its source should remain in place for history, references, or future reinstatement. The collection YAML is the single source of truth - no per-artifact frontmatter or file move is required. See [AI Artifacts Architecture - Removed Artifacts](../architecture/ai-artifacts.md#removed-artifacts) for details. |
191
192---
193
194<!-- markdownlint-disable MD036 -->
195*🤖 Crafted with precision by ✨Copilot following brilliant human instruction,
196then carefully refined by our team of discerning human reviewers.*
197<!-- markdownlint-enable MD036 -->
198