How To: prepare a release - psjw12/gitextensions GitHub Wiki

GitExtensions uses semantic versioning for its releases. The basic workflow proceeds as follows.

  1. General development work is performed on the master branch. During this time, new features may be added to the product.
  2. In preparation for a release, a new branch is created with the name release/major.minor. For example, the branch release/<latest version> was created in preparation for the <latest version> release. These release branches are feature frozen; only small bug fixes are allowed to be added to one of these branches.

1. Working on version

  1. Work on the new version takes place in the master branch
  2. Merge all PR that ready for new version
  3. Create milestone for new version
  4. Assign bugs (especially all regressions), features to that milestone
  5. Update 3rd party tools (PuTTY remains - to be removed)
  6. Update copyright year if needed
  7. Fix all issues in milestone or move them to milestone 'Next version' if necessary

2. Preparing to release

  1. Freeze master branch for all PR's that add/change localized strings
  2. Run GitUI/Translation/UpdateLocalEnglishTranslations.ps1 to update English.xlf and English.Plugins.xlf in GitUI/Translation (it runs TranslationApp.exe update under the hood).
  3. Review the changes to English*.xlf files to ensure the change is expected
  4. Commit the updated English*.xlf files.
  5. Announce on Transifex that new version is ready to ship in two(?) weeks. Remind that only the language in which the "User Interface (master)" translated 95% or more will be added in the installer.

3. Release RC (after couple of weeks from step 2)

  1. Create branch release/3.x in GitExtensionsDoc
  2. Run GitUI/Translation/DownloadTransifexTranslations.cmd and commit pulled translations.
  3. Update translations in Setup\Product.wxs and Setup\MakePortableArchive.cmd (remove those not meeting the translation threshold and add new ones)
  4. Update the current version to something like <major>.<minor>.0. Build version will be added by the AppVeyor build.
    From Setup folder run .\Prepare-Release.ps1 -oldVersion 3.0.0 -newVersion 3.0.1 -milestones '36,37' -CommitChanges; or update manually (the result is something like this commit). Make sure you push the Bump version commits.
  5. Create documentation version on Read the Docs site. See wiki
  6. Change docs link in UserManualToolStripMenuItemClick (FormBrowse.cs) to new version
  7. Commit and tag it as annotated tag v3.0.0.<appveyor-version>
  8. Create a pre-release and publish binaries
  9. Give users RC1 version to test it

4. Release final version

  1. If after week no critical error reported update version to set_version_to.py -t 3.x -v 3.x.0
  2. Update version date in GitUI/Resources/ChangeLog.md
  3. Commit and tag it as annotated tag v3.x.0.<appveyor-version>
  4. Build final installer using BuildInstallers.cmd
  5. Upload it with changelog to GitHub releases
  6. Create branch release/3.x for bugfixes
  7. Update the 'latest' branch for GitExtensionsDoc to point to the release documentation. See wiki
  8. If after week no critical error reported update version and link in configdata branch for autoupdater
⚠️ **GitHub.com Fallback** ⚠️