Skip to content
Open
Show file tree
Hide file tree
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
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"plugins": [
{
"name": "microsoft-finops-toolkit",
"version": "13.0.0",
"version": "15.0-dev",
Comment thread
flanakin marked this conversation as resolved.
"source": "./src/templates/claude-plugin",
"description": "AI-powered cloud financial management for Azure. Analyze costs with KQL queries against FinOps hubs, get CFO-level reporting, and access Azure Cost Management insights.",
"category": "finops",
Expand All @@ -25,4 +25,4 @@
"homepage": "https://learn.microsoft.com"
}
]
}
}
151 changes: 151 additions & 0 deletions .claude/commands/update-version.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
---
description: Start the next release dev cycle after a release ships
allowed-tools: Read, Grep, Write, Edit, Bash(git fetch *), Bash(git checkout *), Bash(git switch *), Bash(git pull *), Bash(git push *), Bash(git status*), Bash(git diff*), Bash(git log*), Bash(git branch *), Bash(gh api user*), Bash(gh issue view *), Bash(gh issue list *), Bash(gh issue edit *), Bash(gh release view *), Bash(pwsh -Command ./src/scripts/*), Bash(pwsh -Command "./src/scripts/*")
---

# Update version

## Phase 1: Setup

Run the following to get the current version:

```bash
pwsh -Command "./src/scripts/Get-Version.ps1"
```

Parse the output to derive:

- **Released major:** strip any `-dev` or prerelease label, take the major number (e.g., `14.0-dev` β†’ `14`)
- **Released tag:** `v{released major}` (e.g., `v14`)
- **Next major:** released major + 1 (e.g., `15`)
- **Next tag:** `v{next major}` (e.g., `v15`)
- **Changelog month:** today's date + 1 calendar month, formatted as `Mmm yyyy` (e.g., May 2026 β†’ `Jun 2026`)

Get the GitHub username:

```bash
gh api user --jq .login
```

Create a new branch from `origin/dev` (push happens in Phase 3 after committing):

```bash
git fetch origin
git checkout -b {username}/v{next major}-start origin/dev
```

## Phase 2: Automated changes

First, update and validate the integration test:

**Update integration test** β€” Edit `src/powershell/Tests/Integration/Toolkit.Tests.ps1`:

1. Change `$plannedRelease = '{released major}'` to `$plannedRelease = '{next major}'`
2. Prepend `'{released major}'` to the front of the `$expected` array
- Example: `$expected = @('13', '12', ...)` β†’ `$expected = @('14', '13', '12', ...)`
3. Fetch the actual file list from the just-released GitHub release:

```bash
gh release view v{released major} --json assets --jq '[.assets[].name] | sort[]'
```

Compare against the `CheckFile` calls in the test. For any file in the release that has no matching `CheckFile` entry, add one with `'{released major}.0'` as both `$minVer` and `$maxVer`. Place new entries near the end of their logical group (Templates, Power BI, Open data, etc.).

Then run the test to confirm:

```bash
pwsh -Command "./src/scripts/Test-PowerShell.ps1 -Toolkit -Integration"
```

If the test still fails, show the error and stop before proceeding.

Then run the following in parallel as background tasks:

1. **Bump version:**

```bash
pwsh -Command "./src/scripts/Update-Version.ps1 -Major -Label dev"
```

2. **Add changelog placeholder** β€” In `docs-mslearn/toolkit/changelog.md`:

a. Find the `## Unreleased` section and extract any `###` tool sections present there. Then clear the Unreleased section so only the heading and description line remain (no tool sections).

b. Insert the following block immediately before the `<br><a name="latest"></a>` line, including any extracted content between the navigation links and the closing `<br>`:

```markdown
## v{next major}

_Released {Mmm yyyy}_

{extracted tool sections, if any}

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"] > [Download](https://github.com/microsoft/finops-toolkit/releases/tag/v{next major})
> [!div class="nextstepaction"] > [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v{released major}...v{next major})
<!-- prettier-ignore-end -->

<br>
```

Use the computed changelog month for `{Mmm yyyy}`. Use the actual version numbers for `v{released major}` and `v{next major}`.

**Changelog section format rules:**

- Each `###` section must be a **tool** (e.g., FinOps hubs, Power BI reports, PowerShell module), not a sub-page, doc page, or feature area.
- Valid tool sections mirror those used in previous releases: `[Implementing FinOps guide]`, `[FinOps hubs]`, `[Power BI reports]`, `[FinOps workbooks]`, `[Optimization engine]`, `[PowerShell module]`, `[Open data]`, `[Bicep Registry modules]`, and new tools like `Claude Code plugin`.
- If Unreleased content refers to a **sub-page** (e.g., Configure scopes, Data dictionary), merge it as a bullet under its parent tool section: Configure scopes β†’ FinOps hubs; Data dictionary β†’ Implementing FinOps guide.
- Use `### [Tool name](link) v{next major}` format for existing tools with docs; use `### Tool name v{next major}` (no link) for new tools whose doc page doesn't exist yet.
- The `Update-Version.ps1` script automatically creates the `## v{next major}` block after `<br><a name="latest"></a>`. If the script runs first, you only need to move the extracted Unreleased tool sections into the existing block (before the download links), applying the format rules above. Do not create a duplicate block.

3. **Merge dev into feature branches** β€” Run as a background task:

```bash
pwsh -Command "./src/scripts/Merge-DevBranch.ps1 *"
```

The script always completes and prints a summary like `N merged successfully. N skipped`. Report that summary line to the user. Individual branch errors in the output are expected for branches that require JIT access β€” they do not indicate a failure.

## Phase 3: Review and commit

After all background tasks complete, show a `git diff` summary of all changed files. Then ask via AskUserQuestion:

- **Header:** "Review changes"
- **Question:** Summarize the changes: version bumped to `{next major}.0.0-dev`, integration test updated, changelog placeholder added for `v{next major}` targeting `{Mmm yyyy}` (and if Unreleased content was moved, note which sections). End with "Ready to commit and push to `{username}/v{next major}-start`?"
- **Options:** "Commit and push", "Make changes first", "Abort"

**On "Commit and push":** Stage and commit all changes, then push:

```bash
git add -A
git commit -m "chore: start v{next major} dev cycle"
git push -u origin {username}/v{next major}-start
```

Then create a PR targeting `dev` using the repo's PR template (`.github/PULL_REQUEST_TEMPLATE.md`). Read the template, fill it in for this change, and create the PR:

```bash
gh pr create --base dev --title "chore: start v{next major} dev cycle" --body "..."
```

**On "Make changes first":** Tell the user to make their edits, then commit, push, and create the PR manually to `{username}/v{next major}-start`.

**On "Abort":** Stop without committing.

## Phase 4: Update release tracking issue

Find the current release tracking issue (the one for the release just completed, i.e., `v{released major}`):

```bash
gh issue list --label "Type: Release πŸš€" --state open --json number,title
```

If found, mark the `update-version:post` checkbox complete using the same label-based process as `/release`:

1. Run `gh issue view {number} --json body` and capture the output. Parse the JSON to extract the `body` field, then write it to `/tmp/release-issue-body.md` using the Write tool.
2. Read the file with the Read tool. Find the line containing `<!-- update-version:post -->` and change its `- [ ]` to `- [x]`. Use the Edit tool to write the updated body back to the file.
3. Run `gh issue edit {number} --body-file /tmp/release-issue-body.md`.

If no open release issue is found, skip this step and note it to the user.

Report completion with a brief summary: version bumped, integration test updated, changelog placeholder added, branch updates attempted, and issue updated (or skipped).
31 changes: 5 additions & 26 deletions .github/ISSUE_TEMPLATE/-internal-only--release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,34 +239,13 @@ Status icons:

## πŸ”œ Post-release clean-up

- [ ] Update the `Toolkit / Should return all known releases` PowerShell integration test based on the latest version.
> _See `src/powershell/Tests/Integration/Toolkit.Tests.ps1` > `Get-FinOpsToolkitVersion` > `Should return all known releases`_
- Add the latest public version to the `$expected` variable.
- Update the file checks to include/exclude any new/removed files.
- [ ] Update the minor version and add the "dev" label: `<root>/src/scripts/Update-Version.ps1 -Minor -Label dev`
- [ ] Create a placeholder in the changelog for the new release.

```markdown
## vX.Y

_Released Mmm yyyy_

> [!div class="nextstepaction"] > [Download](https://github.com/microsoft/finops-toolkit/releases/tag/vX.Y) > [!div class="nextstepaction"] > [Full changelog](https://github.com/microsoft/finops-toolkit/compare/vX.Y...vX.Y)

<br>
```

- [ ] Update remaining branches that were not merged with dev
- [ ] TODO: Add branches
- [ ] features/anomaly
- [ ] features/finley
- [ ] features/recs
- [ ] features/ux
- [ ] features/xcloud
- [ ] <!-- update-version:post --> Run the `/update-version` command in Claude Code (or complete the following manually):
- Bump version to next major with dev label: `<root>/src/scripts/Update-Version.ps1 -Major -Label dev`
- Update integration test: add released version to `$expected`, bump `$plannedRelease` in `src/powershell/Tests/Integration/Toolkit.Tests.ps1`.
- Add changelog placeholder for the next release in `docs-mslearn/toolkit/changelog.md`.
- Merge dev into all feature branches: `<root>/src/scripts/Merge-DevBranch.ps1 *`
- [ ] Copy any additional code from the following branches and delete them:
Comment thread
flanakin marked this conversation as resolved.
- [ ] features/hack24
- [ ] features/hourly
- [ ] Delete the following branches:
- [ ] features/alerts

<br>
6 changes: 3 additions & 3 deletions docs-mslearn/framework/manage/manage-finops.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Manage the FinOps practice
description: Learn about the FinOps capabilities that help you establish your FinOps practice and drive organizational accountability.
author: flanakin
ms.author: micflan
ms.date: 04/01/2026
ms.date: 05/19/2026
ms.topic: conceptual
ms.service: finops
ms.subservice: finops-learning-resources
Expand Down Expand Up @@ -36,7 +36,7 @@ FinOps practice operations refer to the process of:

- Building and managing a robust FinOps team
- Defining clear cross-functional responsibilities
- Integrating FinOps practices into organizational processes to manage cloud cost and usage effectively.
- Integrating FinOps practices into organizational processes to manage cloud cost and usage effectively.

With this capability, you establish and manage your FinOps practice, focusing on supporting the needs of stakeholders across the organization. This capability is pivotal to driving organizational adoption.

Expand Down Expand Up @@ -106,7 +106,7 @@ Let us know how we're doing with a quick review. We use these reviews to improve

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"]
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK14.0/bladeName/Guide.Framework/featureName/Capabilities.Manage)
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK15.0/bladeName/Guide.Framework/featureName/Capabilities.Manage)
<!-- prettier-ignore-end -->

If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes.
Expand Down
4 changes: 2 additions & 2 deletions docs-mslearn/framework/manage/onboarding.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Onboarding workloads
description: This article helps you understand the onboarding workloads capability within the FinOps Framework and how to implement that in the Microsoft Cloud.
author: flanakin
ms.author: micflan
ms.date: 05/12/2026
ms.date: 05/19/2026
ms.topic: concept-article
ms.service: finops
ms.subservice: finops-learning-resources
Expand Down Expand Up @@ -87,7 +87,7 @@ Let us know how we're doing with a quick review. We use these reviews to improve

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"]
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK14.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.Onboarding)
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK15.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.Onboarding)
<!-- prettier-ignore-end -->

If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes.
Expand Down
4 changes: 2 additions & 2 deletions docs-mslearn/framework/manage/operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: FinOps practice operations
description: This article helps you understand the FinOps practice operations capability within the FinOps Framework and how to implement that in the Microsoft Cloud.
author: flanakin
ms.author: micflan
ms.date: 04/01/2026
ms.date: 05/19/2026
ms.topic: concept-article
ms.service: finops
ms.subservice: finops-learning-resources
Expand Down Expand Up @@ -93,7 +93,7 @@ Let us know how we're doing with a quick review. We use these reviews to improve

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"]
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK14.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.Operations)
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK15.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.Operations)
<!-- prettier-ignore-end -->

If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes.
Expand Down
15 changes: 7 additions & 8 deletions docs-mslearn/framework/manage/tools-services.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: FinOps tools and services
description: This article helps you understand the FinOps tools and services capability within the FinOps Framework and how to implement that in the Microsoft Cloud.
author: flanakin
ms.author: micflan
ms.date: 04/01/2026
ms.date: 05/19/2026
ms.topic: concept-article
ms.service: finops
ms.subservice: finops-learning-resources
Expand Down Expand Up @@ -38,8 +38,8 @@ To clarify terminology, a FinOps "tool" is a software solution that facilitates
When you first start managing cost in the cloud, you use the native tools available in the portal, including but not limited to:

- **Microsoft Cost Management**: A suite of tools designed to help organizations monitor, allocate, and optimize their cloud costs within the Microsoft Cloud.
- **Azure Advisor**: Follow best practices to optimize your Microsoft Cloud deployments.
- **Pricing Calculator**: Helps you configure and estimate the costs for Azure products and features based on specific scenarios.
- **Azure Advisor**: Follow best practices to optimize your Microsoft Cloud deployments.
- **Pricing Calculator**: Helps you configure and estimate the costs for Azure products and features based on specific scenarios.

If you're migrating on-premises infrastructure to the cloud, you might also be interested in:

Expand All @@ -50,17 +50,16 @@ As you dig deeper into optimization and governance, you start to use:
- **Azure Monitor**: Monitoring solution that collects, analyzes, and responds to monitoring data from cloud and on-premises environments.
- **Azure Resource Graph**: Powerful management tool to query, explore, and analyze your cloud resources at scale.
- **Azure Resource Manager**: Deploy and manage resources and applications via API or declarative templates.
- **Azure Hybrid Benefit**: A benefit that lets you reduce the costs of your licenses with Software Assurance.
- **Azure Reservations**: A commitment discount that helps you save money by committing to one-year or three-year plans for multiple products.
- **Azure Hybrid Benefit**: A benefit that lets you reduce the costs of your licenses with Software Assurance.
- **Azure Reservations**: A commitment discount that helps you save money by committing to one-year or three-year plans for multiple products.
- **Azure Savings Plan for Compute**: A pricing model that offers discounts on compute services when you commit to a fixed hourly amount for one or three years.


Once you have a consolidated list of the Microsoft, third-party, and homegrown tools and services available:

- Map tools and services to organizational objectives.
- Identify which tools are used by different teams and stakeholders.
- Investigate options to extend current tools and services, like the [FinOps toolkit](../../toolkit/finops-toolkit-overview.md).
<br>
<br>

## Building on the basics

Expand Down Expand Up @@ -94,7 +93,7 @@ Let us know how we're doing with a quick review. We use these reviews to improve

<!-- prettier-ignore-start -->
> [!div class="nextstepaction"]
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK14.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.ToolsAndServices)
> [Give feedback](https://portal.azure.com/#view/HubsExtension/InProductFeedbackBlade/extensionName/FinOpsToolkit/cesQuestion/How%20easy%20or%20hard%20is%20it%20to%20use%20FinOps%20toolkit%20tools%20and%20resources%3F/cvaQuestion/How%20valuable%20is%20the%20FinOps%20toolkit%3F/surveyId/FTK15.0/bladeName/Guide.Framework/featureName/Capabilities.Manage.ToolsAndServices)
<!-- prettier-ignore-end -->

If you're looking for something specific, vote for an existing or create a new idea. Share ideas with others to get more votes. We focus on ideas with the most votes.
Expand Down
Loading