Rocket.Chat code
Purpose
The purpose of this document is to outline the process for managing technical changes to the rocket.chat software versions (major release, minor release, security release or patch release), & Infrastructure as a code, in order to ensure that changes are made in a controlled and consistent manner and that any risks associated with changes are identified and mitigated.
Scope
This change management plan applies to all changes to the (major release, minor release or patch release), including changes to software, documentation, and procedures.
Procedure Review:
This procedure should be reviewed at least annually.
Last review on May/16/2024
Acronyms & Definitions:
PR = Github Pull Request
Develop Branch = Branch used for the development environment containing all approved PRs. All PRs merged into the development branch are applied automatically into our develop environment for applicable testing.
Open Server = Rocket.Chat environment available for internal users and community. Also our beta tests environment.
Change Management Team: The change management team is responsible for overseeing the change management process, and includes the following members:
Change Manager (CM): Rodrigo Nascimento (CTO); Is responsible for assessing the impact of a change, to identify any risks, and make a recommendation for approval or rejection of a release.
Delegated Change Manager (DCM): Anyone in the organization that is listed on the letter of delegation from the Change Manager; Is a delegation from Change Manager and has the same responsibilities. Letter available at: https://rocketchat.atlassian.net/wiki/spaces/Handbook/pages/74089694/Delegation+letter
Code Owners (CO): Members from github teams as assigned on https://github.com/orgs/RocketChat/teams ; Responsible for checking modifications to code that impact a given github repository and its code.
Engineer from internal squads: Any engineer from rocket.chat team that is listed on https://theorg.com/org/rocket-chat/org-chart .
QA Squad: Any member of internal squads with a QA role.
Change Proposal and Approval Process:
All proposed changes must be submitted as a GitHub Pull Request (PR) and follow its General Instructions and Handling procedure (https://rocketchat.atlassian.net/wiki/spaces/Handbook/pages/74055763/PR+General+Instructions+and+Handling )
A peer review is required for all the submitted PR following the documented Review Guidelines (https://rocketchat.atlassian.net/wiki/spaces/Handbook/pages/74088585/Review+Guidelines ). PR approval or comments will be placed on github.
Code Owners review will be required in case the change impacts multiple areas of the code and will also be performed based on our Review Guidelines (https://rocketchat.atlassian.net/wiki/spaces/Handbook/pages/74088585/Review+Guidelines ). PR approval or comments will be placed on github.
After Peer Review and/or Code Owners review, an approved PR can be merged into the development branch.
All changes of a given period merged into the development branch, will be bundled into a release-related PR for Major, Minor, Security or Patch Release Pull Request on Github by any engineer from internal squads. PS: Classification for different releases is available at: https://rocketchat.atlassian.net/wiki/spaces/Handbook/pages/29491377/Release+Cycle
Change Manager or Delegated Change Manager approval is required on any given release-related PR.
After approval a release-related PR will be merged into the Master branch and can become available for our customers on self-hosted and SaaS products.
Change Implementation and Testing:
All changes must be tested before they are implemented, in order to ensure that they do not have any unintended consequences.
All PR will go through our Github CI automated tests and verifications.
PR will be tagged with QA Tested in case they are verified & approved by the internal QA squad or QA Skipped in case they are verified & approved by Engineer from internal squads and don't need QA formal validation.
Change Communication and Documentation:
All approved changes must be documented in the change log on github, and can be viewed at https://github.com/RocketChat/Rocket.Chat/commits/develop
Change records must be retained for a minimum of 2 years.
All applicable stakeholders must be informed of the changes approved and bundled on a release, with details being available at https://github.com/RocketChat/Rocket.Chat/releases and a message being posted at open.rocket.chat #rocketchat-releases.
Change Rollback and Reversal:
In case a rollback is needed due to problems or issues, a rollback plan must be developed by engineers from the internal squad and tested.
The rollback plan must be reviewed and approved by the Change Manager or Delegated Change Manager before the change is implemented.
If a change needs to be rolled back, the rollback plan must be implemented immediately, and all the affected stakeholders must be informed of the rollback and its impact at open.rocket.chat on #important channel.