All dates should align with VS Code's iteration and endgame plans.
Feature freeze is Monday @ 17:00 America/Vancouver, XXX XX. 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 |
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].
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 🥶)
- checkout to
main
on your local machine and rungit fetch
to ensure your local is up to date with the remote repo. - Create a new branch called
bump-release-[YYYY.minor]
. - Update
pet
:- Go to the pet repo and check
main
and latestrelease/*
branch. If there are new changes inmain
then create a branch calledrelease/YYYY.minor
(matching python extension releasemajor.minor
). - Update
build\azure-pipeline.stable.yml
to point to the latestrelease/YYYY.minor
forpython-environment-tools
.
- Go to the pet repo and check
- Change the version in
package.json
to the next even number and switch the-dev
to-rc
. (🤖) - Run
npm install
to make surepackage-lock.json
is up-to-date (you should now see changes to thepackage.json
andpackage-lock.json
at this point which update the version number only). (🤖) - Update
ThirdPartyNotices-Repository.txt
as 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. - Create a PR from your branch
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 in main
is (temporarily) an invalid pre-release version. This is expected as this will be resolved below.
- Create a release branch by creating a new branch called
release/YYYY.minor
branch 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.
- Create a new GitHub release.
- Specify a new tag called
YYYY.minor.0
. - Have the
target
for the github release be your release branch calledrelease/YYYY.minor
. - Create the release notes by specifying the previous tag for the last stable release and click
Generate release notes
. Quickly check that it only contain notes from what is new in this release. - Click
Save draft
.
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.
- Create a branch called
bump-dev-version-YYYY.[minor+1]
. - Bump the minor version number in the
package.json
to the nextYYYY.[minor+1]
which will be an odd number, and switch the-rc
to-dev
.(🤖) - Run
npm install
to make surepackage-lock.json
is up-to-date (you should now see changes to thepackage.json
andpackage-lock.json
only relating to the new version number) . (🤖) - Create a PR from this branch against
main
and merge it.
NOTE: this PR should make all CI relating to main
be passing again (such as the failures stemming from step 1).
- Check Component Governance to make sure there are no active alerts.
- Manually add/fix any 3rd-party licenses as appropriate based on what the internal build pipeline detects.
- Open appropriate documentation issues.
- Contact the PM team to begin drafting a blog post.
- Announce to the development team that
main
is open again.
- Make sure the appropriate pull requests for the documentation -- including the WOW page -- are ready.
- Check to make sure any final updates to the
release/YYYY.minor
branch have been merged. - Create a branch against
release/YYYY.minor
calledfinalized-release-[YYYY.minor]
. - Update the version in
package.json
to remove the-rc
(🤖) from the version. - Run
npm install
to make surepackage-lock.json
is up-to-date (the only update should be the version number ifpackage-lock.json
has been kept up-to-date). (🤖) - Update
ThirdPartyNotices-Repository.txt
manually if necessary. - Create a PR from
finalized-release-[YYYY.minor]
againstrelease/YYYY.minor
and merge it.
- Make sure CI is passing for
release/YYYY.minor
release branch (🤖). - Run the CD pipeline on the
release/YYYY.minor
branch.- Click
run pipeline
. - for
branch/tag
select the release branch which isrelease/YYYY.minor
. - NOTE: Please opt to release the python extension close to when VS Code is released to align when release notes go out. When we bump the VS Code engine number, our extension will not go out to stable until the VS Code stable release but this only occurs when we bump the engine number.
- Click
- 🧍🧍 Get approval on the release on the CD.
- Click "approve" in the publish step of CD to publish the release to the marketplace. 🎉
- Take the Github release out of draft.
- Publish documentation changes.
- Contact the PM team to publish the blog post.
- Determine if a hotfix is needed.
- Merge the release branch
release/YYYY.minor
back 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 themain
branch.)
- checkout to
main
on your local machine and rungit fetch
to ensure your local is up to date with the remote repo. - checkout to the
release/YYY.minor
and 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. - Create a branch against
release/YYYY.minor
calledrelease-[YYYY.minor.point]
. - Bump the point version number in the
package.json
to the nextYYYY.minor.point
- Run
npm install
to make surepackage-lock.json
is up-to-date (you should now see changes to thepackage.json
andpackage-lock.json
only relating to the new version number) . (🤖) - If Point Release is due to an issue in
pet
. Updatebuild\azure-pipeline.stable.yml
to point to the branchrelease/YYYY.minor
forpython-environment-tools
with the fix or decided by the team. - Create a PR from this branch against
release/YYYY.minor
- Rebase and merge this PR into the release branch
- Create a draft GitHub release for the release notes (🤖) ❄️
- Create a new GitHub release.
- Specify a new tag called
vYYYY.minor.point
. - Have the
target
for the github release be your release branch calledrelease/YYYY.minor
. - Create the release notes by specifying the previous tag as the previous version of stable, so the minor release
vYYYY.minor
for the last stable release and clickGenerate release notes
. - Check the generated notes to ensure that all PRs for the point release are included so users know these new changes.
- Click
Save draft
.
- Publish the point release
- Make sure CI is passing for
release/YYYY.minor
release branch (🤖). - Run the CD pipeline on the
release/YYYY.minor
branch. - Click
run pipeline
. - for
branch/tag
select the release branch which isrelease/YYYY.minor
. - 🧍🧍 Get approval on the release on the CD and publish the release to the marketplace. 🎉
- Take the Github release out of draft.
- Make sure CI is passing for
- Work with team to decide if point release is necessary
- Work with team or users to verify the fix is correct and solves the problem without creating any new ones
- Create PR/PRs and merge then each into main as usual
- Make sure to still mark if the change is "bug" or "no-changelog"
- Cherry-pick all PRs to the release branch and check that the changes are in before the package is bumped
- Notify the release champ that your changes are in so they can trigger a point-release
- Create a new release plan. (🤖)
- (Un-)pin release plan issues (🤖)