Terminology change: monorepo -> super-repo

Этот коммит содержится в:
Joseph Macaranas
2025-08-02 22:23:24 -04:00
родитель 153f71fb0d
Коммит 870dc948b1
20 изменённых файлов: 109 добавлений и 184 удалений
+4 -4
Просмотреть файл
@@ -1,14 +1,14 @@
import os
from pathlib import Path
# Determine monorepo root and output CODEOWNERS path
monorepo_root = Path(__file__).resolve().parents[2]
output_path = monorepo_root / ".github" / "CODEOWNERS"
# Determine super-repo root and output CODEOWNERS path
super_repo_root = Path(__file__).resolve().parents[2]
output_path = super_repo_root / ".github" / "CODEOWNERS"
merged_entries = []
# Walk top-level directories (excluding .github/.git/etc.)
for subdir in monorepo_root.iterdir():
for subdir in super_repo_root.iterdir():
if subdir.name.startswith(".") or not subdir.is_dir():
continue
+7 -7
Просмотреть файл
@@ -4,14 +4,14 @@
Sync Patches to Subrepositories
-------------------------------
This script is part of the monorepo synchronization system. It runs after a monorepo pull request
This script is part of the super-repo synchronization system. It runs after a super-repo pull request
is merged and applies relevant changes to the corresponding sub-repositories using Git patches.
- Uses the merge commit of the monorepo PR to extract subtree changes.
- Uses the merge commit of the super-repo PR to extract subtree changes.
- Generates patch files per changed subtree.
- Applies each patch to its respective sub-repository, adjusting for subtree prefix.
- Uses the repos-config.json file to map subtrees to sub-repos.
- Assumes this script is run from the root of the monorepo.
- Assumes this script is run from the root of the super-repo.
Arguments:
--repo : Full repository name (e.g., org/repo)
@@ -127,9 +127,9 @@ def _extract_commit_message_from_patch(patch_path: Path) -> str:
commit_msg_lines.append(line)
return "".join(commit_msg_lines).strip()
def _format_commit_message(monorepo_url: str, pr_number: int, merge_sha: str, original_msg: str) -> str:
def _format_commit_message(super_repo_url: str, pr_number: int, merge_sha: str, original_msg: str) -> str:
"""Append a sync annotation to the original commit message."""
annotation = f"\n[rocm-systems] {monorepo_url}#{pr_number} (commit {merge_sha[:7]})\n"
annotation = f"\n[rocm-systems] {super_repo_url}#{pr_number} (commit {merge_sha[:7]})\n"
return original_msg + annotation
def _commit_changes(repo_path: Path, message: str, author_name: str, author_email: str) -> None:
@@ -175,7 +175,7 @@ def resolve_patch_author(client: GitHubCLIClient, repo: str, pr: int) -> tuple[s
name, email = client.get_user(username)
return name or username, email
def apply_patch_to_subrepo(entry: RepoEntry, monorepo_url: str, monorepo_pr: int,
def apply_patch_to_subrepo(entry: RepoEntry, super_repo_url: str, super_repo_pr: int,
patch_path: Path, author_name: str, author_email: str,
merge_sha: str, dry_run: bool = False) -> None:
"""Clone the subrepo, apply the patch, and attribute to the original author with commit message annotations."""
@@ -189,7 +189,7 @@ def apply_patch_to_subrepo(entry: RepoEntry, monorepo_url: str, monorepo_pr: int
_apply_patch(subrepo_path, patch_path)
_stage_changes(subrepo_path)
original_commit_msg = _extract_commit_message_from_patch(patch_path)
commit_msg = _format_commit_message(monorepo_url, monorepo_pr, merge_sha, original_commit_msg)
commit_msg = _format_commit_message(super_repo_url, super_repo_pr, merge_sha, original_commit_msg)
_commit_changes(subrepo_path, commit_msg, author_name, author_email)
_set_authenticated_remote(subrepo_path, entry.url)
_push_changes(subrepo_path, entry.branch)
+1 -1
Просмотреть файл
@@ -32,7 +32,7 @@ class RepoEntry(BaseModel):
name : Name of the project matching packaging file names. Lower-cased and no underscores. (e.g., "rocblas")
url : Individual GitHub org plus repo names in matching case and punctuation. (e.g., "ROCm/rocBLAS")
branch : The base branch of the sub-repo to target (e.g., "develop").
category : Directory category in the monorepo (e.g., "projects" or "shared").
category : Directory category in the super-repo (e.g., "projects" or "shared").
"""
name: str
url: str
+2 -2
Просмотреть файл
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout monorepo
- name: Checkout super-repo
uses: actions/checkout@v4
- name: Set up Python
@@ -24,7 +24,7 @@ jobs:
- name: Install dependencies
run: pip install PyYAML requests
- name: Apply labels to monorepo
- name: Apply labels to super-repo
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPO: ${{ github.repository }}
+1 -1
Просмотреть файл
@@ -1,7 +1,7 @@
# Azure CI Dispatcher
# ------------------
# This workflow allows Azure CI to be centralized in a single PR check.
# It detects which subtrees (from a monorepo structure) were changed in a
# It detects which subtrees (from a super-repo structure) were changed in a
# pull request, and automatically requests Azure CI runs for the corresponding
# subtrees.
#
+1 -1
Просмотреть файл
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout monorepo
- name: Checkout super-repo
uses: actions/checkout@v4
- name: Set up Python
+8 -8
Просмотреть файл
@@ -1,14 +1,14 @@
name: Setup Monorepo
name: Setup super-repo
on:
workflow_dispatch:
env:
MONOREPO_URL: github.com/ROCm/rocm-systems.git
MONOREPO_BRANCH: develop
SUPER_REPO_URL: github.com/ROCm/rocm-systems.git
SUPER_REPO_BRANCH: develop
jobs:
setup-monorepo:
setup-super-repo:
runs-on: ubuntu-24.04
steps:
- name: Generate a token
@@ -19,7 +19,7 @@ jobs:
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- name: Checkout the Monorepo
- name: Checkout the Super-repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
token: ${{ steps.generate-token.outputs.token }}
@@ -29,7 +29,7 @@ jobs:
git config user.name "systems-assistant[bot]"
git config user.email "systems-assistant[bot]@users.noreply.github.com"
- name: Add Repositories to the Monorepo
- name: Add Repositories to the Super-repo
run: |
for repo in $(cat .github/repos-config.json | jq -r '.repositories[].name'); do
repo_name=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .reponame")
@@ -40,5 +40,5 @@ jobs:
git subtree add --prefix "${category}/${repo}" https://github.com/${url}.git "$branch"
done
- name: Push changes to Monorepo
run: git push https://${{ env.MONOREPO_URL }} ${{ env.MONOREPO_BRANCH }}
- name: Push changes to Super-repo
run: git push https://${{ env.SUPER_REPO_URL }} ${{ env.SUPER_REPO_BRANCH }}
+2 -2
Просмотреть файл
@@ -1,6 +1,6 @@
# Import Issue Workflow
# ---------------------
# This workflow imports a single issue from a source repository into this monorepo repository,
# This workflow imports a single issue from a source repository into this super-repo repository,
# as part of a migration. It preserves key metadata including title, body, labels, and comment
# history with timestamps and authorship.
#
@@ -9,7 +9,7 @@
# - issue_number: Issue number in the source repository to import
#
# Steps:
# 1. Validate that the caller has 'admin' or 'maintain' permission on the monorepo
# 1. Validate that the caller has 'admin' or 'maintain' permission on the super-repo
# 2. Fetch the issue body, title, labels, and comments using the GitHub CLI (`gh api`)
# 3. Create a new issue in the target repo, preserving:
# - Original title
+1 -1
Просмотреть файл
@@ -7,7 +7,7 @@ jobs:
combine-gitmodules:
runs-on: ubuntu-latest
steps:
- name: Checkout Monorepo
- name: Checkout super-repo
uses: actions/checkout@v4
- name: Set up Python
+15 -15
Просмотреть файл
@@ -1,26 +1,26 @@
# Import Subrepo PR Workflow
# --------------------------
# This workflow imports an open PR from a sub-repository into the monorepo.
# This workflow imports an open PR from a sub-repository into the super-repo.
# It is intended for maintainers to migrate pending pull requests from
# the subrepos, to help developers onboard to the monorepo sooner.
# the subrepos, to help developers onboard to the super-repo sooner.
#
# Trigger: Manually via `workflow_dispatch` with the following inputs:
# - subrepo-prefix: Path within the monorepo where the subrepo lives (e.g., "projects/rocblas")
# - subrepo-prefix: Path within the super-repo where the subrepo lives (e.g., "projects/rocblas")
# - subrepo-pr-number: PR number in the subrepo to import
# - subrepo-repo: Full subrepo or fork name (e.g., "ROCm/rocBLAS" or "user/rocBLAS-fork")
# - subrepo-upstream: Canonical subrepo repo name (e.g., "ROCm/rocBLAS")
#
# Steps:
# 1. Validate that the caller has 'admin' or 'maintain' permission on the monorepo
# 1. Validate that the caller has 'admin' or 'maintain' permission on the super-repo
# 2. Generate a GitHub App token for authenticated API access
# 3. Checkout only the necessary parts of the monorepo (sparse checkout)
# 3. Checkout only the necessary parts of the super-repo (sparse checkout)
# 4. Fetch PR metadata from the subrepo using GitHub CLI
# 5. Create a new branch and import the PR using `git subtree pull`
# 6. Create a corresponding draft PR in the monorepo with metadata preserved
# 6. Create a corresponding draft PR in the super-repo with metadata preserved
#
# Notes:
# - This workflow requires GitHub App credentials (APP_ID and APP_PRIVATE_KEY)
# - The resulting monorepo PR is a draft and includes attribution to the original author
# - The resulting super-repo PR is a draft and includes attribution to the original author
name: Import Subrepo PR
@@ -28,7 +28,7 @@ on:
workflow_dispatch:
inputs:
subrepo-prefix:
description: "Monorepo path prefix (e.g., projects/rocblas)"
description: "super-repo path prefix (e.g., projects/rocblas)"
required: true
subrepo-pr-number:
description: "Subrepo PR number to import"
@@ -39,8 +39,8 @@ on:
subrepo-upstream:
description: "Canonical subrepo repo (e.g., ROCm/rocBLAS)"
required: true
monorepo-target-branch:
description: "Target branch in the monorepo (default: develop)"
super-repo-target-branch:
description: "Target branch in the super-repo (default: develop)"
required: false
default: "develop"
@@ -113,9 +113,9 @@ jobs:
- name: Create new branch for import
id: import-branch
run: |
git fetch origin ${{ github.event.inputs.monorepo-target-branch }}
git checkout ${{ github.event.inputs.monorepo-target-branch }}
SANITIZED_BASE=$(echo "${{ github.event.inputs.monorepo-target-branch }}" | sed 's|/|_|g')
git fetch origin ${{ github.event.inputs.super-repo-target-branch }}
git checkout ${{ github.event.inputs.super-repo-target-branch }}
SANITIZED_BASE=$(echo "${{ github.event.inputs.super-repo-target-branch }}" | sed 's|/|_|g')
SANITIZED_REPO=$(echo "${{ github.event.inputs.subrepo-repo }}" | sed 's|/|_|g')
SANITIZED_REF=$(echo "${{ steps.prdata.outputs.head_ref }}" | sed 's|/|_|g')
IMPORT_BRANCH="import/${SANITIZED_BASE}/${SANITIZED_REPO}/${SANITIZED_REF}"
@@ -127,7 +127,7 @@ jobs:
git subtree pull --prefix=${{ github.event.inputs.subrepo-prefix }} https://github.com/${{ github.event.inputs.subrepo-repo }} ${{ steps.prdata.outputs.head_ref }}
git push origin ${{ steps.import-branch.outputs.import_branch }}
- name: Create monorepo PR
- name: Create super-repo PR
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
run: |
@@ -153,7 +153,7 @@ jobs:
fi
gh pr create \
--base "${{ github.event.inputs.monorepo-target-branch }}" \
--base "${{ github.event.inputs.super-repo-target-branch }}" \
--head "${{ steps.import-branch.outputs.import_branch }}" \
--title "$PR_TITLE" \
--label "imported pr" \
+4 -4
Просмотреть файл
@@ -1,13 +1,13 @@
# Apply Patch to Subrepos After Merge (Manual Run)
# --------------------------------------------------
# This GitHub Actions workflow lets you manually run the patching logic for
# previously merged pull requests in the monorepo.
# previously merged pull requests in the super-repo.
#
# It is useful for cases where the automatic patch workflow failed (e.g., due
# to fork PRs lacking secrets), or if configuration or credentials have changed.
#
# Key Steps:
# 1. Validate that the caller has 'admin' or 'maintain' permission on the monorepo.
# 1. Validate that the caller has 'admin' or 'maintain' permission on the super-repo.
# 2. Accept PR number as input.
# 3. Generate a GitHub App token for authentication.
# 4. Use a Python script to detect which subtrees were modified.
@@ -15,11 +15,11 @@
# - Generate a patch from the merge commit for that subtree.
# - Determine the appropriate author (based on PR metadata or fallback).
# - Clone the target sub-repo and apply the patch.
# - Amend the commit message to include links to the monorepo PR and commit.
# - Amend the commit message to include links to the super-repo PR and commit.
# - Push the commit directly to the sub-repo.
#
# This ensures downstream sub-repositories are updated to reflect changes
# made in the monorepo, even if the original automated job failed.
# made in the super-repo, even if the original automated job failed.
name: Manual Patch Rerun
+4 -4
Просмотреть файл
@@ -1,24 +1,24 @@
# Apply Patch to Subrepos After Merge
# -----------------------------------
# This GitHub Actions workflow runs on push commits. If it detects the push is from
# a pull request merged into the monorepo, then it continues to run the workflow.
# a pull request merged into the super-repo, then it continues to run the workflow.
# It identifies which subtrees (defined in .github/repos-config.json) were affected,
# generates a patch from the merge commit, and applies that patch to the corresponding
# sub-repositories by cloning them and committing the patch directly.
#
# Key Steps:
# 1. Generate a GitHub App token for authentication.
# 2. Checkout the monorepo at the merge commit.
# 2. Checkout the super-repo at the merge commit.
# 3. Use a Python script to detect which subtrees were modified.
# 4. For each changed subtree:
# - Generate a patch from the merge commit for that subtree.
# - Determine the appropriate author (based on PR metadata or fallback).
# - Clone the target sub-repo and apply the patch.
# - Amend the commit message to include links to the monorepo PR and commit.
# - Amend the commit message to include links to the super-repo PR and commit.
# - Push the commit directly to the sub-repo.
#
# This ensures downstream sub-repositories are updated to reflect changes
# made in the monorepo immediately after merge.
# made in the super-repo immediately after merge.
name: Merged PR to Patch Subrepos
-75
Просмотреть файл
@@ -1,75 +0,0 @@
name: Synchronize Release Staging Subtrees
on:
workflow_dispatch:
schedule:
- cron: '0 * * * *'
env:
MONOREPO_URL: github.com/ROCm/rocm-systems.git
MONOREPO_BRANCH: release-staging/rocm-rel-7.0
concurrency:
group: pr-update-subtrees-develop
cancel-in-progress: false
jobs:
synchronize-subtrees:
runs-on: ubuntu-24.04
steps:
- name: Generate a token
id: generate-token
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- name: Checkout the Monorepo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0 # needed for git subtree pull/push
token: ${{ steps.generate-token.outputs.token }}
ref: ${{ env.MONOREPO_BRANCH }}
- name: Set up Git user
run: |
git config user.name "systems-assistant[bot]"
git config user.email "systems-assistant[bot]@users.noreply.github.com"
- name: Switch to the Monorepo branch
run: |
git checkout -B "${{ env.MONOREPO_BRANCH }}" "origin/${{ env.MONOREPO_BRANCH }}"
- name: Update Repositories in the Monorepo
run: |
has_errors=false
for repo in $(cat .github/repos-config.json | jq -r '.repositories[].name'); do
url=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .url")
branch=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .branch")
category=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .category")
enable_pull=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .auto_subtree_pull")
enable_push=$(cat .github/repos-config.json | jq -r ".repositories[] | select(.name == \"$repo\") | .auto_subtree_push")
if [ "$enable_pull" = true ]; then
git subtree pull --prefix "${category}/${repo}" https://github.com/${url}.git $branch || {
has_errors=true
}
fi
# if [ "$enable_push" = true ]; then
# git fetch origin subtrees/${repo}/${branch}
# git branch -f subtrees/${repo}/${branch} origin/subtrees/${repo}/${branch}
# git subtree split --prefix="${category}/${repo}" -b subtrees/${repo}/${branch} --quiet --rejoin || {
# has_errors=true
# }
# git push origin subtrees/${repo}/${branch}
# git push https://github.com/${url}.git subtrees/${repo}/${branch}:${branch}
# fi
done
if [ "$has_errors" = true ]; then
echo "One or more errors occurred during the repository update."
exit 1
else
git push https://${{ env.MONOREPO_URL }} ${{ env.MONOREPO_BRANCH }}
echo "All repositories updated successfully!"
fi
+7 -7
Просмотреть файл
@@ -6,8 +6,8 @@ on:
- cron: '0 * * * *'
env:
MONOREPO_URL: github.com/ROCm/rocm-systems.git
MONOREPO_BRANCH: develop
SUPER_REPO_URL: github.com/ROCm/rocm-systems.git
SUPER_REPO_BRANCH: develop
concurrency:
group: pr-update-subtrees-develop
@@ -25,7 +25,7 @@ jobs:
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- name: Checkout the Monorepo
- name: Checkout the Super-repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0 # needed for git subtree pull/push
@@ -36,11 +36,11 @@ jobs:
git config user.name "systems-assistant[bot]"
git config user.email "systems-assistant[bot]@users.noreply.github.com"
- name: Switch to the Monorepo branch
- name: Switch to the Super-repo branch
run: |
git checkout -B "${{ env.MONOREPO_BRANCH }}" "origin/${{ env.MONOREPO_BRANCH }}"
git checkout -B "${{ env.SUPER_REPO_BRANCH }}" "origin/${{ env.SUPER_REPO_BRANCH }}"
- name: Update Repositories in the Monorepo
- name: Update Repositories in the Super-repo
run: |
has_errors=false
for repo in $(cat .github/repos-config.json | jq -r '.repositories[].name'); do
@@ -69,6 +69,6 @@ jobs:
echo "One or more errors occurred during the repository update."
exit 1
else
git push https://${{ env.MONOREPO_URL }} ${{ env.MONOREPO_BRANCH }}
git push https://${{ env.SUPER_REPO_URL }} ${{ env.SUPER_REPO_BRANCH }}
echo "All repositories updated successfully!"
fi