General Notes
All dates should align with VS Code's iteration and endgame plans.
Feature freeze is Monday @ 17:00 America/Vancouver, APR 28. At that point, commits to main should only be in response to bugs found during endgame testing until the release candidate is ready.
Release Primary and Secondary Assignments for the 2025 Calendar Year
| Month and version number |
Primary |
Secondary |
| January v2025.0.0 |
Eleanor |
Karthik |
| February v2025.2.0 |
Anthony |
Eleanor |
| March v2025.4.0 |
Karthik |
Anthony |
| April v2025.6.0 |
Eleanor |
Karthik |
| May v2025.8.0 |
Anthony |
Eleanor |
| June v2025.10.0 |
Karthik |
Anthony |
| July v2025.12.0 |
Eleanor |
Karthik |
| August v2025.14.0 |
Anthony |
Eleanor |
| September v2025.16.0 |
Karthik |
Anthony |
| October v2025.18.0 |
Eleanor |
Karthik |
| November v2025.20.0 |
Anthony |
Eleanor |
| December v2025.22.0 |
Karthik |
Anthony |
Release candidate (Thursday, Jun 05)
NOTE: This Thursday occurs during TESTING week. Branching should be done during this week to freeze the release with only the correct changes. Any last minute fixes go in as candidates into the release branch and will require team approval.
Other:
NOTE: Third Party Notices are automatically added by our build pipelines using https://tools.opensource.microsoft.com/notice.
NOTE: the number of this release is in the issue title and can be substituted in wherever you see [YYYY.minor].
Step 1:
Bump the version of main to be a release candidate (also updating third party notices, and package-lock.json).❄️ (steps with ❄️ will dictate this step happens while main is frozen 🥶)
NOTE: this PR will fail the test in our internal release pipeline called VS Code (pre-release) because the version specified in main is (temporarily) an invalid pre-release version. This is expected as this will be resolved below.
Step 2: Creating your release branch ❄️
NOTE: If there are release branches that are two versions old you can delete them at this time.
Step 3 Create a draft GitHub release for the release notes (🤖) ❄️
Step 4: Return main to dev and unfreeze (❄️ ➡ 💧)
NOTE: The purpose of this step is ensuring that main always is on a dev version number for every night's 🌃 pre-release. Therefore it is imperative that you do this directly after the previous steps to reset the version in main to a dev version before a pre-release goes out.
NOTE: this PR should make all CI relating to main be passing again (such as the failures stemming from step 1).
Step 5: Notifications and Checks on External Release Factors
Release (Wednesday, June 11)
Step 6: Take the release branch from a candidate to the finalized release
Step 7: Execute the Release
Steps for Point Release (if necessary)
Steps for contributing to a point release
Prep for the next release
General Notes
All dates should align with VS Code's iteration and endgame plans.
Feature freeze is Monday @ 17:00 America/Vancouver, APR 28. At that point, commits to
mainshould only be in response to bugs found during endgame testing until the release candidate is ready.Release Primary and Secondary Assignments for the 2025 Calendar Year
Release candidate (Thursday, Jun 05)
NOTE: This Thursday occurs during TESTING week. Branching should be done during this week to freeze the release with only the correct changes. Any last minute fixes go in as candidates into the release branch and will require team approval.
Other:
NOTE: Third Party Notices are automatically added by our build pipelines using https://tools.opensource.microsoft.com/notice.
NOTE: the number of this release is in the issue title and can be substituted in wherever you see [YYYY.minor].
Step 1:
Bump the version of
mainto be a release candidate (also updating third party notices, and package-lock.json).❄️ (steps with ❄️ will dictate this step happens while main is frozen 🥶)mainon your local machine and rungit fetchto ensure your local is up to date with the remote repo.bump-release-[YYYY.minor].pet:mainand latestrelease/*branch. If there are new changes inmainthen create a branch calledrelease/YYYY.minor(matching python extension releasemajor.minor).build\azure-pipeline.stable.ymlto point to the latestrelease/YYYY.minorforpython-environment-tools.package.jsonto the next even number and switch the-devto-rc. (🤖)npm installto make surepackage-lock.jsonis up-to-date (you should now see changes to thepackage.jsonandpackage-lock.jsonat this point which update the version number only). (🤖)ThirdPartyNotices-Repository.txtas appropriate. You can check by looking at the commit history and scrolling through to see if there's anything listed there which might have pulled in some code directly into the repository from somewhere else. If you are still unsure you can check with the team.bump-release-[YYYY.minor]tomain. Add the"no change-log"tag to the PR so it does not show up on the release notes before merging it.NOTE: this PR will fail the test in our internal release pipeline called
VS Code (pre-release)because the version specified inmainis (temporarily) an invalid pre-release version. This is expected as this will be resolved below.Step 2: Creating your release branch ❄️
release/YYYY.minorbranch frommain. This branch is now the candidate for our release which will be the base from which we will release.NOTE: If there are release branches that are two versions old you can delete them at this time.
Step 3 Create a draft GitHub release for the release notes (🤖) ❄️
YYYY.minor.0.targetfor the github release be your release branch calledrelease/YYYY.minor.Generate release notes. Quickly check that it only contain notes from what is new in this release.Save draft.Step 4: Return
mainto dev and unfreeze (❄️ ➡ 💧)NOTE: The purpose of this step is ensuring that main always is on a dev version number for every night's 🌃 pre-release. Therefore it is imperative that you do this directly after the previous steps to reset the version in main to a dev version before a pre-release goes out.
bump-dev-version-YYYY.[minor+1].package.jsonto the nextYYYY.[minor+1]which will be an odd number, and switch the-rcto-dev.(🤖)npm installto make surepackage-lock.jsonis up-to-date (you should now see changes to thepackage.jsonandpackage-lock.jsononly relating to the new version number) . (🤖)mainand merge it.NOTE: this PR should make all CI relating to
mainbe passing again (such as the failures stemming from step 1).Step 5: Notifications and Checks on External Release Factors
mainis open again.Release (Wednesday, June 11)
Step 6: Take the release branch from a candidate to the finalized release
release/YYYY.minorbranch have been merged.release/YYYY.minorcalledfinalized-release-[YYYY.minor].package.jsonto remove the-rc(🤖) from the version.npm installto make surepackage-lock.jsonis up-to-date (the only update should be the version number ifpackage-lock.jsonhas been kept up-to-date). (🤖)ThirdPartyNotices-Repository.txtmanually if necessary.finalized-release-[YYYY.minor]againstrelease/YYYY.minorand merge it.Step 7: Execute the Release
release/YYYY.minorrelease branch (🤖).release/YYYY.minorbranch.run pipeline.branch/tagselect the release branch which isrelease/YYYY.minor.release/YYYY.minorback intomain. (This step is only required if changes were merged into the release branch. If the only change made on the release branch is the version, this is not necessary. Overall you need to ensure you DO NOT overwrite the version on themainbranch.)Steps for Point Release (if necessary)
mainon your local machine and rungit fetchto ensure your local is up to date with the remote repo.release/YYY.minorand check to make sure all necessary changes for the point release have been cherry-picked into the release branch. If not, contact the owner of the changes to do so.release/YYYY.minorcalledrelease-[YYYY.minor.point].package.jsonto the nextYYYY.minor.pointnpm installto make surepackage-lock.jsonis up-to-date (you should now see changes to thepackage.jsonandpackage-lock.jsononly relating to the new version number) . (🤖)pet. Updatebuild\azure-pipeline.stable.ymlto point to the branchrelease/YYYY.minorforpython-environment-toolswith the fix or decided by the team.release/YYYY.minorvYYYY.minor.point.targetfor the github release be your release branch calledrelease/YYYY.minor.vYYYY.minorfor the last stable release and clickGenerate release notes.Save draft.release/YYYY.minorrelease branch (🤖).release/YYYY.minorbranch.run pipeline.branch/tagselect the release branch which isrelease/YYYY.minor.Steps for contributing to a point release
Prep for the next release