Skip to content

Commit

Permalink
chore: simpler noir sync (AztecProtocol#4376)
Browse files Browse the repository at this point in the history
- We just squash when pushing to Noir. We are more reset the state of
the PR so that it is based off the last time we pull with git subrepo
pull noir.
- We can just do git subrepo pull noir whenever now. It will become the
new PR head, and we'll make one squash commit based on it.
- History is lost doing this, but regained with a heuristic that looks
at the last aztec-packages sync PR that occurred. This also resolves
AztecProtocol#4108 making sure
release-please has a good changelog.

misc:
- bumps git subrepo version, ended up not being needed, but why not

---------

Co-authored-by: ludamad <adam@aztecprotocol.com>
  • Loading branch information
ludamad and ludamad0 committed Feb 5, 2024
1 parent 4f6d607 commit 665b35e
Show file tree
Hide file tree
Showing 14 changed files with 72 additions and 38 deletions.
80 changes: 57 additions & 23 deletions .github/workflows/mirror_noir_subrepo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ name: Mirror to noir repo
# Don't allow multiple of these running at once:
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
on:
push:
branches:
Expand All @@ -19,45 +20,78 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Get noir master's last sync commit
id: last_merge_hash
uses: actions/github-script@v7
with:
script: |
// NOTE: more robust heuristic needed if aztecbot opens different kinds of PRs
const response = await github.rest.search.commits({
q: 'author:AztecBot committer:web-flow repo:noir-lang/noir sort:committer-date'
});
console.log(response.data.items);
return response.data.items[0].sha;
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}

# We push using git subrepo (https://github.com/ingydotnet/git-subrepo)
# with some logic to recover from squashed parent commits
# We push to subrepo, commit to master. The commit is needed
# to continue to replay. If we still hit issues such as this
# action failing due to upstream changes, a manual resolution
# PR with ./scripts/git_subrepo.sh pull will be needed.
# and push all Aztec commits as a single commit with metadata.
- name: Push to branch
run: |
set -xue # print commands
# Enable gh executable. We spread out the API requests between the github actions bot token, and aztecbot
export GH_TOKEN="${{ secrets.GITHUB_TOKEN }}"
SUBREPO_PATH=noir
BRANCH=aztec-packages
# identify ourselves, needed to commit
git config --global user.name AztecBot
git config --global user.email tech@aztecprotocol.com
if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=$BRANCH; then
git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]"
BASE_NOIR_COMMIT=`git config --file=noir/.gitrepo subrepo.commit`
BASE_AZTEC_COMMIT=`git config --file=noir/.gitrepo subrepo.parent`
# Fix PR branch
git clone https://x-access-token:${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}@github.com/noir-lang/noir.git noir-repo
cd noir-repo
git checkout $BRANCH || git checkout -b $BRANCH
git reset --hard "$BASE_NOIR_COMMIT"
# Reset our branch to our expected target
git push origin $BRANCH --force
cd ..
# Get the last sync PR's last commit state
LAST_MERGED_PR_HASH=`gh pr list --repo=noir-lang/noir --state merged --head aztec-packages --json headRefOid --jq=.[0].headRefOid`
# Use a commit heuristic where we look at when .gitrepo first started to look at that commit state (through a push)
COMMIT_HEURISTIC=$(git log -p -S"$LAST_MERGED_PR_HASH" --reverse --source -- noir/.gitrepo | grep -m 1 '^commit' | awk '{print $2}' || true)
if [[ " $COMMIT_HEURISTIC" = "" ]] ; then
# It it fails, just use our gitrepo parent commit (last time we pushed or pulled)
COMMIT_HEURISTIC=$BASE_AZTEC_COMMIT
fi
# Create a filtered git log for release-please changelog / metadata
MESSAGE=$(git log --pretty=format:"%s" $COMMIT_HEURISTIC..HEAD -- noir/ ':!noir/.gitrepo' | grep -v 'git subrepo' || true)
# Fix Aztec PR links
MESSAGE=$(echo "$MESSAGE" | sed -E 's/\(#([0-9]+)\)/(https:\/\/github.com\/AztecProtocol\/aztec-packages\/pull\/\1)/g')
git commit --allow-empty -m"chore: Sync to noir-lang/noir" -m"$MESSAGE"
COMMIT=$(git rev-parse HEAD)
# Now push to it with subrepo with computed commit messages
if ./scripts/git_subrepo.sh push $SUBREPO_PATH --squash --branch=$BRANCH; then
git reset $COMMIT
git commit --amend -am "$(git log -1 --pretty=%B) [skip ci]"
git push
else
echo "Problems syncing noir. We may need to pull the subrepo."
exit 1
fi
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
repository: noir-lang/noir
token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
- name: Create PR for Aztec Branch
continue-on-error: true
uses: repo-sync/pull-request@v2
with:
github_token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
pr_title: 'feat: Sync commits from `aztec-packages`'
pr_body: 'Development from [aztec-packages](https://github.com/AztecProtocol/aztec-packages).'
destination_branch: 'master'
source_branch: 'aztec-packages'
# Formatted for updating the PR, overrides for release-please commit message parsing
PR_BODY="""BEGIN_COMMIT_OVERRIDE
$MESSAGE
END_COMMIT_OVERRIDE"""
PR_URL=$(gh pr list --repo noir-lang/noir --head aztec-packages --json url --jq ".[0].url")
# for cross-opening PR in noir repo, we use aztecbot's token
export GH_TOKEN=${{ secrets.AZTEC_BOT_GITHUB_TOKEN }}
if [[ "$PR_URL" == "" ]]; then
gh pr create --repo noir-lang/noir --title "feat: Sync from aztec-packages" --body "$PR_BODY" --base master --head aztec-packages
else
gh pr edit "$PR_URL" --body "$PR_BODY"
fi
2 changes: 1 addition & 1 deletion scripts/git-subrepo/Intro.pod
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Submodules tend to receive a lot of bad press. Here's some of it:

=item * L<http://ayende.com/blog/4746/the-problem-with-git-submodules>

=item * L<http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/>
=item * L<https://web.archive.org/web/20171101202911/http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/>

=item * L<http://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/>

Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/doc/intro-to-subrepo.swim
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ article is about.
Submodules tend to receive a lot of bad press. Here's some of it:

* http://ayende.com/blog/4746/the-problem-with-git-submodules
* http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/
* https://web.archive.org/web/20171101202911/http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/
* http://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/

A quick recap of some of the good and bad things about submodules:
Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/ext/bashplus/bin/bash+
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Copyright (c) 2013-2020 Ingy döt Net
#------------------------------------------------------------------------------

set -eu
set -e
shopt -s compat31 &>/dev/null || true

#------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/ext/bashplus/lib/bash+.bash
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# Copyright (c) 2013-2020 Ingy döt Net

set -eu
set -e

[[ ${BASHPLUS_VERSION-} ]] && return 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# Copyright (c) 2013-2020 Ingy döt Net
#------------------------------------------------------------------------------

set -eu
set -e
shopt -s compat31 &>/dev/null || true

#------------------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# Copyright (c) 2013-2020 Ingy döt Net

set -eu
set -e

[[ ${BASHPLUS_VERSION-} ]] && return 0

Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/lib/git-subrepo.d/help-functions.bash
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# DO NOT EDIT. This file generated by pkg/bin/generate-help-functions.pl.

set -eu
set -e

help:all() {
cat <<'...'
Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/note/init-test
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash

set -ex
cat $0 # Show this script in the output
Expand Down
4 changes: 2 additions & 2 deletions scripts/git-subrepo/note/recreate-rebase-conflict.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#!/bin/bash

set -eu
set -e
set -x

# Make a directory to work in:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash

set -ex

Expand All @@ -24,6 +24,6 @@ git clone repo1 repo3
git subrepo clone ../repo2 subrepo
bash
git rebase -i HEAD^
git log -p
git log -p
ls
)
2 changes: 1 addition & 1 deletion scripts/git-subrepo/note/test-subrepo-push.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash

set -ex

Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/note/test.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/bash

set -x

Expand Down
2 changes: 1 addition & 1 deletion scripts/git-subrepo/pkg/bin/generate-help-functions.pl
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ sub write_start {
# DO NOT EDIT. This file generated by pkg/bin/generate-help-functions.pl.
set -eu
set -e
...
}

Expand Down

0 comments on commit 665b35e

Please sign in to comment.