# Salt Release Process

The goal for Salt projects is to cut a new feature release every three to four months. This document outlines the process for these releases, and the subsequent bug fix releases which follow.

## Feature Release Process

When a new release is ready to be cut, the person responsible for cutting the release will follow the following steps (written using the 3000 release as an example):

1. Create first public draft of release notes with major features.

2. Remove any deprecations for the upcoming release.

3. Ensure all required features are merged.

4. Create issue to start the process of deprecating for the next feature release.

5. Run through a manual test run based off of the head of the feature branch.

6. Update all name references to version number in the docs. For example all neon references in the docs needs to be moved to v3000

7. Review the release notes with major features.

8. Generate the new man pages for the release.

9. Create internal RC tag for testing from the head of the master branch.

10. Build latest windows, mac, ubuntu, debian and redhat packages.

11. Run manual and package tests against new RC packages.

12. Push the internal tag live to salt's repo.

13. Publish release archive to pypi based off tag.

14. Push the RC packages live.

15. Announce new RC to salt-users and salt-announce google groups.

16. Triage incoming issues based on the new RC release.

17. Fix RC issues once they are categorized as a release blocker.

18. Depending on the issues found during the RC process make a decision on whether to release based off the RC or go through another RC process

19. If a RC is categorized as stable, build all required packages.

20. Test all release packages.

21. Test links from repo.saltproject.io.

22. Update installation instructions with new release number at repo.saltproject.io.

23. Review and update all impacted Installation documentation.

24. Update and build docs to include new version (3000) as the latest.

25. Pre-announce on salt-users google group that we are about to update our repo.

26. Publish release (v3000) archive to pypi based off tag.

27. Publish all packages live to repo.

28. Publish the docs.

29. Create release at github

30. Update win-repo-ng with new salt versions.

31. Announce release is live to irc, salt-users, salt-announce and release slack community channel.

## Bugfix Releases

Once a feature release branch has been cut from the `master` branch, if serious bugs or a CVE is found for the most recent release a bugfix release will need to be cut. A temporary branch will be created based off of the previous release tag. For example, if it is determined that a 3000.1 release needs to occur a 3000.1 branch will be created based off of the v3000 tag. The fixes that need to go into 3000.1 will be added and merged into this branch. Here are the steps for a bugfix release.

1. Ensure all required bug fixes are merged.

2. Create release branch with the version of the release. (ex. 3000.1)

3. Run through a manual test run based off of the head of the branch.

4. Generate the new man pages for the release.

5. Create internal tag for testing.(ex v3000.1)

6. Build all release packages.

7. Run manual and package tests against new packages.

8. Update installation instructions with new release number at repo.saltproject.io.

9. Update and build docs to include new version. (ex. 3000.1)

10. Pre-announce on salt-users google groups that we are about to update our repo.

11. Push the internal tag live to salt's repo.

12. Publish release archive to pypi based off tag.

13. Push the packages live.

14. Publish release (v3000) archive to pypi based off tag.

15. Publish all packages live to repo.

16. Publish the docs.

17. Create release at github

18. Update win-repo-ng with new salt versions.

19. Announce release is live to irc, salt-users, salt-announce and release slack channel.