Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
49 changes: 37 additions & 12 deletions .github/scripts/create-platform-release-pr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@
# 3. A version bump PR for the main branch
#
# Usage:
# create-platform-release-pr.sh <platform> <previous_version> <new_version> [new_version_number] [git_user_name] [git_user_email]
# create-platform-release-pr.sh <platform> <previous_version_ref> <new_version> [new_version_number] [git_user_name] [git_user_email]
#
# Parameters:
# platform - 'mobile' or 'extension'
# previous_version - Previous release version tag (e.g., v7.7.0)
# new_version - New semantic version (e.g., 7.8.0)
# new_version_number - Build version for mobile platform (optional, required for mobile)
# git_user_name - Git user name for commits (optional, defaults to 'metamaskbot')
# git_user_email - Git user email for commits (optional, defaults to '[email protected]')
# platform - 'mobile' or 'extension'
# previous_version_ref - Previous release version branch name, tag or commit hash (e.g., release/7.7.0, v7.7.0, or 76fbc500034db9779e9ff7ce637ac5be1da0493d)
# new_version - New semantic version (e.g., 7.8.0)
# new_version_number - Build version for mobile platform (optional, required for mobile)
# git_user_name - Git user name for commits (optional, defaults to 'metamaskbot')
# git_user_email - Git user email for commits (optional, defaults to '[email protected]')

set -e
set -u
set -o pipefail

# Input validation
PLATFORM="${1}"
PREVIOUS_VERSION="${2}"
PREVIOUS_VERSION_REF="${2}"
NEW_VERSION="${3}"
NEW_VERSION_NUMBER="${4:-}"
GIT_USER_NAME="${5:-metamaskbot}"
Expand Down Expand Up @@ -292,7 +292,7 @@ create_release_pr() {
create_changelog_pr() {
local platform="$1"
local new_version="$2"
local previous_version="$3"
local previous_version_ref="$3"
local release_branch_name="$4"
local changelog_branch_name="$5"

Expand All @@ -306,15 +306,40 @@ create_changelog_pr() {
# Need to run from .github-tools context to inherit it's dependencies/environment
echo "Current Directory: $(pwd)"
PROJECT_GIT_DIR=$(pwd)

# By default, DIFF_BASE is set to the provided `previous_version_ref` (which can be a branch name, tag, or commit hash).
# If `previous_version_ref` matches a remote branch on origin, we fetch it and update DIFF_BASE to the fully qualified remote ref (`origin/<branch>`).
# This is required for the `generate-rc-commits.mjs` script to resolve the branch and successfully run the `git log` command.
# Otherwise, DIFF_BASE remains unchanged.
DIFF_BASE="${previous_version_ref}"

# Only consider known release branch patterns to avoid regex pitfalls:
# - Extension: Version-vx.y.z
# - Mobile: release/x.y.z
if [[ "${previous_version_ref}" =~ ^Version-v[0-9]+\.[0-9]+\.[0-9]+$ || "${previous_version_ref}" =~ ^release/[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Previous version looks like a release branch: ${previous_version_ref}"
# Check if the exact branch exists on origin without interpolating into a regex
if git ls-remote --heads origin "${previous_version_ref}" | grep -q "."; then
echo "Detected remote branch for previous version: ${previous_version_ref}"
git fetch origin "${previous_version_ref}"
DIFF_BASE="origin/${previous_version_ref}"
else
echo "Remote branch not found on origin: ${previous_version_ref}. Will use as-is."
fi
else
echo "Previous version is not a recognized release branch pattern. Treating as tag or SHA: ${previous_version_ref}"
fi

# Switch to github-tools directory
cd ./github-tools/
ls -ltra
corepack prepare [email protected] --activate
# This can't be done from the actions context layer due to the upstream repository having it's own context set with yarn
yarn --cwd install

echo "Generating test plan csv.."
yarn run gen:commits "${platform}" "${previous_version}" "${release_branch_name}" "${PROJECT_GIT_DIR}"

yarn run gen:commits "${platform}" "${DIFF_BASE}" "${release_branch_name}" "${PROJECT_GIT_DIR}"
# Skipping Google Sheets update since there is no need for it anymore
# TODO: Remove this once the current post-main validation approach is stable
# if [[ "${TEST_ONLY:-false}" == 'false' ]]; then
Expand Down Expand Up @@ -435,7 +460,7 @@ main() {
if [ "$TEST_ONLY" == "true" ]; then
echo "Skipping changelog generation in test mode"
else
create_changelog_pr "$PLATFORM" "$NEW_VERSION" "$PREVIOUS_VERSION" "$release_branch_name" "$changelog_branch_name"
create_changelog_pr "$PLATFORM" "$NEW_VERSION" "$PREVIOUS_VERSION_REF" "$release_branch_name" "$changelog_branch_name"
fi

# Step 3: Create version bump PR for main branch
Expand Down
19 changes: 10 additions & 9 deletions .github/scripts/generate-rc-commits.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ async function getTeam(repository, prNumber) {
}

// Function to filter commits based on unique commit messages and group by teams
async function filterCommitsByTeam(platform, branchA, branchB) {
// Input parameters refA and refB can be a branch name, a tag or a commit hash (e.g., release/7.7.0, v7.7.0, or 76fbc500034db9779e9ff7ce637ac5be1da0493d)
async function filterCommitsByTeam(platform, refA, refB) {

const MAX_COMMITS = 500; // Limit the number of commits to process
console.log('Filtering commits by team...');
Expand All @@ -81,8 +82,8 @@ async function filterCommitsByTeam(platform, branchA, branchB) {
const git = simpleGit();

const logOptions = {
from: branchB,
to: branchA,
from: refB,
to: refA,
format: {
hash: '%H',
author: '%an',
Expand All @@ -92,7 +93,7 @@ async function filterCommitsByTeam(platform, branchA, branchB) {

const log = await git.log(logOptions);

console.log(`Total commits between ${branchA} and ${branchB}: ${log.total}`);
console.log(`Total commits between ${refA} and ${refB}: ${log.total}`);
console.log(`Processing up to ${Math.min(log.all.length, MAX_COMMITS)} commits...`);

const commitsByTeam = {};
Expand Down Expand Up @@ -204,26 +205,26 @@ async function main() {

if (args.length !== 4) {
console.error(
'Usage: node generate-rc-commits.mjs platform branchA branchB',
'Usage: node generate-rc-commits.mjs platform refA refB',
);
console.error('Received:', args, ' with length:', args.length);
process.exit(1);
}

const platform = args[0];
const branchA = args[1];
const branchB = args[2];
const refA = args[1];
const refB = args[2];
const gitDir = args[3];

// Change the working directory to the git repository path
// Since this is invoked by a shared workflow, the working directory is not guaranteed to be the repository root
process.chdir(gitDir);

console.log(
`Generating CSV file for commits between ${branchA} and ${branchB} on ${platform} platform...`,
`Generating CSV file for commits between ${refA} and ${refB} on ${platform} platform...`,
);

const commitsByTeam = await filterCommitsByTeam(platform, branchA, branchB);
const commitsByTeam = await filterCommitsByTeam(platform, refA, refB);

if (Object.keys(commitsByTeam).length === 0) {
console.log('No commits found.');
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/create-release-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ on:
required: false
type: string
description: 'The build version for the mobile platform.'
previous-version-tag:
previous-version-ref:
required: true
type: string
description: 'Previous release version tag. eg: v7.7.0'
description: 'Previous release version branch name, tag or commit hash (e.g., release/7.7.0, v7.7.0, or 76fbc500034db9779e9ff7ce637ac5be1da0493d)'
# Flag to indicate if the release is a test release for development purposes only
mobile-template-sheet-id:
required: false
Expand Down Expand Up @@ -108,7 +108,7 @@ jobs:
echo "Checkout Base Branch: ${{ inputs.checkout-base-branch }}"
echo "Release PR Base Branch: ${{ inputs.release-pr-base-branch }}"
echo "Semver Version: ${{ inputs.semver-version }}"
echo "Previous Version Tag: ${{ inputs.previous-version-tag }}"
echo "Previous Version Reference: ${{ inputs.previous-version-ref }}"
echo "Test Only Mode: ${{ inputs.test-only }}"
if [[ "${{ inputs.platform }}" == "mobile" ]]; then
echo "Mobile Build Version: ${{ inputs.mobile-build-version }}"
Expand Down Expand Up @@ -140,7 +140,7 @@ jobs:
# Execute the script from github-tools
./github-tools/.github/scripts/create-platform-release-pr.sh \
${{ inputs.platform }} \
${{ inputs.previous-version-tag }} \
${{ inputs.previous-version-ref }} \
${{ inputs.semver-version }} \
${{ inputs.mobile-build-version }} \
${{ inputs.git-user-name }} \
Expand Down
Loading