3.3 KiB
Caretaker
Caretaker is responsible for merging PRs into the individual branches and internally at Google.
Responsibilities
- Draining the queue of PRs ready to be merged. (PRs with
PR action: merge
label) - Assigining new issues to individual component authors.
Setup
Set upstream
to fetch PRs into your local repo
Use this conmmands to configure your git
to fetch PRs into your local repo.
git remote add upstream git@github.com:angular/angular.git
git config --add remote.upstream.fetch +refs/pull/*/head:refs/remotes/upstream/pr/*
Merging the PR
A PR needs to have PR action: merge
and PR target: *
labels to be considered
ready to merge. Merging is performed by running merge-pr
with a PR number to merge.
NOTE: before running merge-pr
ensure that you have synced all of the PRs
locally by running:
$ git fetch upstream
To merge a PR run:
$ ./scripts/github/merge-pr 1234
The merge-pr
script will:
- Ensure that all approriate labels are on the PR.
- That the current branch (
master
or?.?.x
patch) mathches thePR target: *
label. - It will
cherry-pick
all of the SHAs from the PR into the current branch. - It will rewrite commit history by automatically adding
Close #1234
and(#1234)
into the commit message.
Recovering from failed merge-pr
due to conflicts
When running merge-pr
the script will output the commands which it is about to run.
$ ./scripts/github/merge-pr 1234
======================
GitHub Merge PR Steps
======================
git cherry-pick upstream/pr/1234~1..upstream/pr/1234
git filter-branch -f --msg-filter "/usr/local/google/home/misko/angular-pr/scripts/github/utils/github.closes 1234" HEAD~1..HEAD
If the cherry-pick
command fails than resolve conflicts and use git cherry-pick --continue
once ready. After the cherry-pick
is done cut&paste and run the filter-branch
command to properly rewrite the messages
Cherry-picking PRs into patch branch
In addition to merging PRs into the master branch, many PRs need to be also merged into a patch branch. Follow these steps to get patch branch up to date.
- Check out the most recent patch branch:
git checkout 4.3.x
- Get a list of PRs merged into master:
git log master --oneline -n10
- For each PR number in the commit message run:
././scripts/github/merge-pr 1234
- The PR will only merge if the
PR target:
matches the branch.
- The PR will only merge if the
Once all of the PRs are in patch branch, push the all branches and tags to github using push-upstream
script.
Pushing merged PRs into github
Use push-upstream
script to push all of the branch and tags to github.
$ ./scripts/github/push-upstream
git push git@github.com:angular/angular.git master:master 4.3.x:4.3.x
Counting objects: 25, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (25/25), 2.22 KiB | 284.00 KiB/s, done.
Total 25 (delta 22), reused 8 (delta 7)
remote: Resolving deltas: 100% (22/22), completed with 18 local objects.
To github.com:angular/angular.git
079d884b6..d1c4a94bb master -> master
git push --tags -f git@github.com:angular/angular.git patch_sync:patch_sync
Everything up-to-date