Skip to content
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions docs/release-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Release process
This diagram below represents the release process for MetaMask Extension and MetaMask Mobile clients.

Note:
- The `stable` branch is currently called `master` on Extension repo, but it will be renamed soon.
- The `release/x.y.z` branches are currently called `Version-vx.y.z` on Extension repo, but they will be renamed soon.

```mermaid
graph TD

%% Nodes outside subgraphs %%
RUN[Runway] -->|every 2 weeks| CURRENT1
RE[Release Engineer] -->|manual trigger| GA[Release Engineer triggers 'Create Release Pull Request' GitHub Action]
GA -->|create PR| CURRENT2
GA -->|create PR| changelog1[GitHub Action creates x.y.z changelog PR]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which github action does this? Is it create-release-pr?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

changelog1 -->|update PR| changelog2[Release Engineer reviews and adjusts x.y.z changelog PR]
changelog2 -->|merge PR| CURRENT5
GA --> |create PR| bump1[GitHub Action creates version bump PR]
bump1 -->|merge PR| MAIN1
CURRENT6 --> BUG1[A bug is found]
BUG1 --> BUG2[A fix is done on 'main' branch]
BUG2 --> CURRENT7
ENG[Engineer] -->|create PR| FEAT[Implement new features]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we mentioned it during the meeting today but is package.json in the main branch used for something in the release process?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release version indicated in package.json is used by an automation that fills the release spreadsheet every time a PR gets merged.

FEAT -->|merge PR| MAIN1

%% Subgraphs %%
subgraph Main [Main developement branch: 'main']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we still generating commits.csv as part of the release process or was that deprecated? If used where does it come into play?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We only need commits.csv to generate the changelog PR in the create-release-pr GitHub Action.

style Main fill:#4d0808,stroke:#000,stroke-width:2px,color:#fff
MAIN1[All changes are first made on 'main' branch]
end

subgraph Previous [Previous release branch: 'release/x.y-1.z']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this is getting cut off a bit in the diagram. Can we move it a little?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately I don't think we can easily move choose texts' positions on a mermaid diagram (at least I didn't figure out how to).

style Previous fill:#08084d,stroke:#000,stroke-width:2px,color:#fff

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit hard to see the lines and where they're pointing in the dark blue background. Can we change the color of that background square or lines so that they're more visible?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mmh.. for me it was the opposite, I had to use dark background colors on purpose in order to see the white arrows. Are the arrows not white on you side?
Screenshot 2025-08-29 at 16 24 03

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks a lot better in that screenshot. Maybe I was looking in the wrong place. Did you do anything or navigate somewhere to see it like that?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, I am having trouble seeing the arrows in light mode.

Maybe best to not use a background?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why it's different on my laptop vs yours. Maybe it's a question of dark theme VS light them. I personally use dark theme on my laptop.

Here's how it looks like with and without backgrounds:
Screenshot 2025-11-10 at 17 36 45

If you prefer the option on the right, please let me know and I'll remove all backgrounds.

PREVIOUS1[Previous release is merged into 'stable' branch]
PREVIOUS1 -->|create PR| PREVIOUS2[Release Engineer creates stable sync PRs]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just for context, what is a "stable sync PR"? Which branch is being synced with stable?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More context here

PREVIOUS2 -->|merge PR| MAIN1
end

subgraph HotFix [Hotfix release branch: 'release/x.y-1.z+1']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this is getting cut off a bit in the diagram as well. Can we move it a little?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately I don't think we can easily move choose texts' positions on a mermaid diagram (at least I didn't figure out how to).

style HotFix fill:#08084d,stroke:#000,stroke-width:2px,color:#fff
HOTFIX1[Hot fix release is merged into 'stable' branch]
HOTFIX1 -->|create PR| HOTFIX2[Release Engineer creates stable sync PRs]
HOTFIX2 -->|merge PR| MAIN1
end

subgraph Current [Current release branch: 'release/x.y.z']
style Current fill:#08084d,stroke:#000,stroke-width:2px,color:#fff
MAIN1 -->|every 2 weeks| CURRENT1[Runway automatically creates a new release branch based off of 'main' branch, called 'release/x.y.z']
CURRENT1 --> CURRENT2[GitHub Action creates x.y.z release PR]
CURRENT2 -->|every time a commit is added to 'release/x.y.z' branch| CURRENT3[Release build is automatically created and posted on the x.y.z release PR]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

every time a commit is added to 'release/x.y.z' branch| CURRENT3[Release build is automatically created and posted on the x.y.z release PR. How is this release build automatically created? Is there a separate GH actions workflow for this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release build is automatically created by the publish-prerelease.yml GitHub Action

CURRENT3 --> CURRENT4[Release Engineer creates and merges stable sync PR into 'release/x.y.z branch']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the "stable sync PR"? What branch is being merged in the "release/x.y.z" branch here?

Copy link
Contributor Author

@gauthierpetetin gauthierpetetin Sep 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Every time code is added to stable branch, we need to merge stable into main and into all branches that have stable as base branch, like the release/x.y.z branches. Otherwise, they'd be out of sync with stable.

Example:
After release 13.2.1 got merged to stable last week, we've opened 2 stable sync PRs

PREVIOUS1 -->|every time a release is merged into 'stable'| CURRENT4
HOTFIX1 -->|every time a release is merged into 'stable'| CURRENT4

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this merging the release branch into the stable branch?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes

CURRENT4 --> CURRENT5[Changelog is added]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this referring to the changelog.md file?

Also, Where is it added? Is it added to release branch or somewhere else?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes this is referring to the changelog.md file.
It is added to the release branch.

Example for release 13.3.0: MetaMask/metamask-extension#35523

CURRENT5 --> CURRENT6[Release is tested by all teams]
CURRENT7[Release Engineer cherry-picks fixes on 'release/x.y.z' branch]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We mentioned cherry picks today during part of the release process. Does the cherry picking only happen during a hotfix?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we update the changelog again after this as well?

Copy link
Contributor Author

@gauthierpetetin gauthierpetetin Sep 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do cherry picks every time code needs to be added to a release branch after the initial release branch creation.

Example:

  • Release branch is created for release x.y.z
  • We test the release and find a bug
  • Bug is fixed on main branch
  • Then we cherry-pick the fix on the release branch
  • Then we update the changelog accordingly on the release branch

So cherry-picks happen for any kind of releases, not only hotfixes.

CURRENT6 --> CURRENT8[Release is approved by all teams]
CURRENT7 --> CURRENT8
CURRENT8 --> CURRENT9[Release is approved by Release Engineer, Release QA, and Release Manager]
end

subgraph Stable [Stable branch: 'stable']
style Stable fill:#26084d,stroke:#000,stroke-width:2px,color:#fff
CURRENT9 -->|merge PR| STABLE1[x.y.z release PR is merged into 'stable' branch]
STABLE1 -->|every time a commit is added to 'stable' branch| STABLE2[x.y.z production build is automatically created]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How is it automatically created? Is there a github action workflow for it also?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release build is automatically created by the publish-release.yml GitHub Action

STABLE2 --> STABLE3[Release Engineer submits x.y.z production build to the store]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this happen manually? And which store are we referring to?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is referring to the Chrome store for Extension, and to the Apple and Andoid stores for Mobile.
The submission is done manually for Extension and is automated for Mobile.

end

subgraph Next [Next release branch: 'release/x.y+1.z']
style Next fill:#08084d,stroke:#000,stroke-width:2px,color:#fff
STABLE3 --> NEXT1[Runway automatically creates a new release branch from main, called 'release/x.y+1.z']
end
Loading