Skip to content

Conflict-Free Changelog Management System#1194

Merged
vcolin7 merged 26 commits intomainfrom
fix-changelog-conflicts
Dec 12, 2025
Merged

Conflict-Free Changelog Management System#1194
vcolin7 merged 26 commits intomainfrom
fix-changelog-conflicts

Conversation

@vcolin7
Copy link
Copy Markdown
Contributor

@vcolin7 vcolin7 commented Nov 15, 2025

What does this PR do?

This PR implements a GitLab-inspired changelog management system that eliminates merge conflicts on CHANGELOG.md by using individual YAML files for changelog entries. The system includes automation scripts, multi-server support, and comprehensive documentation.

Addresses: #646

What's Changed

Core System:

  • ✅ Individual YAML files per changelog entry
  • ✅ JSON schema validation for entry consistency
  • ✅ Three PowerShell automation scripts for the complete workflow
  • ✅ Multi-server support (Azure.Mcp.Server, Fabric.Mcp.Server, etc.)

Scripts Added:

  • eng/scripts/New-ChangelogEntry.ps1 - Interactive generator for creating changelog entries
  • eng/scripts/Compile-Changelog.ps1 - Compiles YAML files into CHANGELOG.md
  • eng/scripts/Sync-VsCodeChangelog.ps1 - Syncs main CHANGELOG to VS Code extension CHANGELOG

Documentation:

  • docs/changelog-entries.md - User guide for contributors
  • docs/design/changelog-management-system.md - Design document and implementation details
  • eng/schemas/changelog-entry.schema.json - JSON schema for validation

Infrastructure:

  • Created a servers/<server-name>/changelog-entries/ folder for each server
  • Created VS Code CHANGELOG.md files for each server
  • Updated CONTRIBUTING.md, AGENTS.md, and new-command.md with changelog workflow

Key Features

1. No More Merge Conflicts
Contributors create individual YAML files with a unique name instead of editing CHANGELOG.md directly:

section: "Features Added"
description: "Added support for User-Assigned Managed Identity"
pr: 1033

2. Multi-Server Support
All scripts support multiple MCP servers

3. Smart Compilation

  • Groups entries by section and subsection
  • Handles multi-line descriptions with nested lists
  • Auto-creates "Unreleased" sections when needed
  • Supports compiling to specific version sections
  • Removes empty sections from output

4. VS Code Extension Integration
Automatically syncs main CHANGELOG to VS Code extension CHANGELOG with section mapping:

  • "Features Added" → "Added"
  • "Breaking Changes" + "Other Changes" → "Changed"
  • "Bugs Fixed" → "Fixed"

Usage Examples

For Contributors:

# Create a changelog entry in one line
./eng/scripts/New-ChangelogEntry.ps1 -ChangelogPath "servers/Azure.Mcp.Server/CHANGELOG.md" -Description "Added new feature" -Section "Features Added" -PR 1234

# Interactive mode
./eng/scripts/New-ChangelogEntry.ps1

For Release Managers:

# Preview compilation
./eng/scripts/Compile-Changelog.ps1 -ChangelogPath "servers/Azure.Mcp.Server/CHANGELOG.md" -DryRun

# Compile and delete YAML files
./eng/scripts/Compile-Changelog.ps1 -ChangelogPath "servers/Azure.Mcp.Server/CHANGELOG.md" -DeleteFiles

# Sync to VS Code extension
./eng/scripts/Sync-VsCodeChangelog.ps1 -ChangelogPath "servers/Azure.Mcp.Server/CHANGELOG.md"

Technical Details

  • Filename convention: Unix timestamp in milliseconds (e.g., 1731260400123.yml)

    • Pre-PR friendly (can create before PR number is known)
    • Chronologically sortable
    • 1000 unique values per second (collision-resistant)
  • Version handling: Supports both ## 2.0.0 (Unreleased) and ## [0.0.1] - 2025-09-16 formats

  • Validation: All entries validated against JSON schema during creation and compilation

Benefits

  • 🚀 Zero merge conflicts on CHANGELOG.md
  • Automated formatting - consistent output every time
  • 🎯 Structured data - validated against schema
  • 🌐 Multi-server ready - works across all MCP servers in the repo

Testing

Tested with:

  • ✅ Creating entries for Azure.Mcp.Server and Fabric.Mcp.Server
  • ✅ Compiling to Unreleased and specific version sections
  • ✅ Multi-line descriptions with nested bullet lists
  • ✅ Empty section removal
  • ✅ VS Code CHANGELOG syncing
  • ✅ Both interactive and non-interactive modes

Migration Notes

Existing workflow remains valid during transition:

  • Old entries in CHANGELOG.md stay as-is
  • New entries use YAML files going forward
  • Scripts handle both scenarios gracefully

Related Documentation

  • See docs/changelog-entries.md for contributor guide
  • See docs/design/changelog-management-system.md for design details
  • Inspired by GitLab's changelog system

GitHub issue number?

Pre-merge Checklist

  • Required for All PRs
    • Read contribution guidelines
    • PR title clearly describes the change
    • Commit history is clean with descriptive messages (cleanup guide)
    • Added comprehensive tests for new/modified functionality
    • Updated servers/Azure.Mcp.Server/CHANGELOG.md and/or servers/Fabric.Mcp.Server/CHANGELOG.md for product changes (features, bug fixes, UI/UX, updated dependencies)
  • For MCP tool changes:
    • One tool per PR: This PR adds or modifies only one MCP tool for faster review cycles
    • Updated servers/Azure.Mcp.Server/README.md and/or servers/Fabric.Mcp.Server/README.md documentation
    • Validate README.md changes using script at eng/scripts/Process-PackageReadMe.ps1. See Package README
    • Updated command list in /servers/Azure.Mcp.Server/docs/azmcp-commands.md and/or /docs/fabric-commands.md
    • Run .\eng\scripts\Update-AzCommandsMetadata.ps1 to update tool metadata in azmcp-commands.md (required for CI)
    • For new or modified tool descriptions, ran ToolDescriptionEvaluator and obtained a score of 0.4 or more and a top 3 ranking for all related test prompts
    • For tools with new names, including new tools or renamed tools, update consolidated-tools.json
    • For new tools associated with Azure services or publicly available tools/APIs/products, add URL to documentation in the PR description
  • Extra steps for Azure MCP Server tool changes:
    • Updated test prompts in /servers/Azure.Mcp.Server/docs/e2eTestPrompts.md
    • 👉 For Community (non-Microsoft team member) PRs:
      • Security review: Reviewed code for security vulnerabilities, malicious code, or suspicious activities before running tests (crypto mining, spam, data exfiltration, etc.)
      • Manual tests run: added comment /azp run mcp - pullrequest - live to run Live Test Pipeline

@vcolin7 vcolin7 added this to the 2025-11 milestone Nov 15, 2025
@vcolin7 vcolin7 self-assigned this Nov 15, 2025
@vcolin7 vcolin7 added the documentation Improvements or additions to documentation label Nov 15, 2025
Copilot AI review requested due to automatic review settings November 15, 2025 04:56
@vcolin7 vcolin7 added the Engineering Excellence Items required to be resolved before onboarding the "third wave" of azure RPs label Nov 15, 2025
@vcolin7 vcolin7 requested review from a team as code owners November 15, 2025 04:56
@github-project-automation github-project-automation Bot moved this from Untriaged to In Progress in Azure MCP Server Nov 15, 2025
Comment thread PR-DESCRIPTION.md Outdated
Comment thread PR-DESCRIPTION.md Outdated
Comment thread docs/changelog-entries.md Outdated
Comment thread docs/changelog-entries.md Outdated
Comment thread docs/changelog-entries.md Outdated
Comment thread eng/scripts/Compile-Changelog.ps1
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/schemas/changelog-entry.schema.json Outdated
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/New-ChangelogEntry.ps1
Comment thread docs/design/changelog-management-system.md
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/New-ChangelogEntry.ps1 Outdated
Comment thread eng/scripts/New-ChangelogEntry.ps1 Outdated
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/Compile-Changelog.ps1
Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
# Last line: add PR link here
# Line is already trimmed at the end, preserve leading indentation
$trimmedLine = $line.TrimStart()
$leadingSpaces = $line.Length - $trimmedLine.Length
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we be converting tabs to spaces before indenting?
Should we be standardizing indent level width (2 spaces, 4 spaces) across entries?

Comment thread eng/scripts/Compile-Changelog.ps1 Outdated
Comment thread eng/scripts/New-ChangelogEntry.ps1 Outdated
@vcolin7 vcolin7 dismissed joshfree’s stale review November 27, 2025 03:29

Changes have been applied.

Comment thread docs/changelog-entries.md
@vcolin7 vcolin7 merged commit bd1ed66 into main Dec 12, 2025
25 checks passed
@vcolin7 vcolin7 deleted the fix-changelog-conflicts branch December 12, 2025 01:37
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Azure MCP Server Dec 12, 2025
colbytimm pushed a commit to colbytimm/microsoft-mcp that referenced this pull request Apr 20, 2026
* Added development plan

* Added and updated docs

* Added scripts

* Removed old YAML file

* Added some QoL changes to the scripts

* Added a way to provide a specific version to compile entries into

* Updated dry run code

* Fixed the compile script to not delete entries with different indentation

* Added support for multi-line entries

* Added trimming for multi-line

* Added multi-line support to New-ChangelogEntry.ps1

* Added a script for syncing the main CHANGELOG with that one for VS Code

* Updated the changelog compilation script to remove empty sections

* Added support for any MCP server in this repo

* Moved a couple of docs

* Updated other docs

* Updated new-command.md

* Updated behavior to ask for a CHANGELOG path instead of defaulting to the Azure MCP Server. Added an optional filename parameter in New-ChangelogEntry.ps1. Updated schema. Updated documentation.

* Updated Compile-Changelog.ps1 to accept files any name and using either the .yml or .yaml extension

* Applied GitHub Copilot feedback for PowerShell scripts

* Applied PR feedback to PS scripts

* Added sample file

* Refactored indentation and trimming logic

* Refactored a couple of scripts to use logic found in `eng/common/scripts/ChangeLog-Operations.ps1`

* Updated test file and added examples for other servers

* Added logic for extracting PR number from the commit that added an entry file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation Engineering Excellence Items required to be resolved before onboarding the "third wave" of azure RPs

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

7 participants