From 639670a922594d690594b65bc1ed298ded42aa00 Mon Sep 17 00:00:00 2001 From: spoopr Date: Fri, 22 May 2026 17:40:01 +0000 Subject: [PATCH 01/17] Add workflow to require merge from era branch --- .github/workflows/merge_main_from_era.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/merge_main_from_era.yml diff --git a/.github/workflows/merge_main_from_era.yml b/.github/workflows/merge_main_from_era.yml new file mode 100644 index 0000000..c553877 --- /dev/null +++ b/.github/workflows/merge_main_from_era.yml @@ -0,0 +1,18 @@ +# credit [to](https://stackoverflow.com/a/78766052) +name: require merge from era branch + +on: + pull_request: + branches: + - main + +jobs: + check-branch: + runs-on: ubuntu-latest + steps: + - name: Check branch + run: | + if [[ ${GITHUB_HEAD_REF} != *\/* ]]; then + echo "Error: Pull request must come from an era branch" + exit 1 + fi From 221e284a6d9cd097eef493ff55c3023c4a70717a Mon Sep 17 00:00:00 2001 From: spoopr Date: Fri, 22 May 2026 22:14:32 +0000 Subject: [PATCH 02/17] fix `merge_main_from_feature` check flipped a not --- .../{merge_main_from_era.yml => merge_main_from_feature.yml} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename .github/workflows/{merge_main_from_era.yml => merge_main_from_feature.yml} (68%) diff --git a/.github/workflows/merge_main_from_era.yml b/.github/workflows/merge_main_from_feature.yml similarity index 68% rename from .github/workflows/merge_main_from_era.yml rename to .github/workflows/merge_main_from_feature.yml index c553877..58c46f0 100644 --- a/.github/workflows/merge_main_from_era.yml +++ b/.github/workflows/merge_main_from_feature.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Check branch run: | - if [[ ${GITHUB_HEAD_REF} != *\/* ]]; then - echo "Error: Pull request must come from an era branch" + if [[ ${GITHUB_HEAD_REF} == *\/* ]]; then + echo "Error: Pull request must come from a feature branch" exit 1 fi From 5ed86ee79e1babc3d200d7e360fe2dae6aade801 Mon Sep 17 00:00:00 2001 From: spoopr Date: Fri, 22 May 2026 22:15:39 +0000 Subject: [PATCH 03/17] more semantics on status check --- .github/workflows/merge_main_from_feature.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/merge_main_from_feature.yml b/.github/workflows/merge_main_from_feature.yml index 58c46f0..dd9d4c4 100644 --- a/.github/workflows/merge_main_from_feature.yml +++ b/.github/workflows/merge_main_from_feature.yml @@ -1,5 +1,5 @@ # credit [to](https://stackoverflow.com/a/78766052) -name: require merge from era branch +name: require merge from feature branch on: pull_request: From 6eb8442af161a7393b1cc77627716379185d75ab Mon Sep 17 00:00:00 2001 From: spoopr Date: Sat, 30 May 2026 14:36:54 -0500 Subject: [PATCH 04/17] allow non-split branches to be merged --- .github/workflows/merge_main_from_feature.yml | 18 ------------- .github/workflows/merge_main_from_split.yml | 26 +++++++++++++++++++ 2 files changed, 26 insertions(+), 18 deletions(-) delete mode 100644 .github/workflows/merge_main_from_feature.yml create mode 100644 .github/workflows/merge_main_from_split.yml diff --git a/.github/workflows/merge_main_from_feature.yml b/.github/workflows/merge_main_from_feature.yml deleted file mode 100644 index dd9d4c4..0000000 --- a/.github/workflows/merge_main_from_feature.yml +++ /dev/null @@ -1,18 +0,0 @@ -# credit [to](https://stackoverflow.com/a/78766052) -name: require merge from feature branch - -on: - pull_request: - branches: - - main - -jobs: - check-branch: - runs-on: ubuntu-latest - steps: - - name: Check branch - run: | - if [[ ${GITHUB_HEAD_REF} == *\/* ]]; then - echo "Error: Pull request must come from a feature branch" - exit 1 - fi diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml new file mode 100644 index 0000000..e6d900b --- /dev/null +++ b/.github/workflows/merge_main_from_split.yml @@ -0,0 +1,26 @@ +# credit [to](https://stackoverflow.com/a/78766052) +name: require merge from main split of split branch + +on: + pull_request: + branches: + - main + +jobs: + check-branch: + runs-on: ubuntu-latest + steps: + - name: Check split branch + run: | + if [[ ${GITHUB_HEAD_REF} != *\/* ]] + then + echo "Branch is not a split branch." + exit 0 + else if [[ ${GITHUB_HEAD_REF} != *\/main ]] + then + echo \ + "Pull request for a split branch must come from the main" \ + "split. Try creating a pull request from the branch with the" \ + "suffix \"/main\"" + exit 1 + fi From a7db36e5b2bade3a1a63ebbd9285e356f44712a8 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 18:29:56 -0500 Subject: [PATCH 05/17] fix status check --- .github/workflows/merge_main_from_split.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml index e6d900b..f009272 100644 --- a/.github/workflows/merge_main_from_split.yml +++ b/.github/workflows/merge_main_from_split.yml @@ -12,8 +12,7 @@ jobs: steps: - name: Check split branch run: | - if [[ ${GITHUB_HEAD_REF} != *\/* ]] - then + if [[ ${GITHUB_HEAD_REF} != *\/* ]]; then echo "Branch is not a split branch." exit 0 else if [[ ${GITHUB_HEAD_REF} != *\/main ]] From fb71c2cc7b130d43a6de7ee2b81e7a9435b2b234 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 18:36:54 -0500 Subject: [PATCH 06/17] actually fix status check? --- .github/workflows/merge_main_from_split.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml index f009272..1c6e410 100644 --- a/.github/workflows/merge_main_from_split.yml +++ b/.github/workflows/merge_main_from_split.yml @@ -12,14 +12,11 @@ jobs: steps: - name: Check split branch run: | - if [[ ${GITHUB_HEAD_REF} != *\/* ]]; then + if [[ ${GITHUB_HEAD_REF} != *\/* ]] + then echo "Branch is not a split branch." exit 0 else if [[ ${GITHUB_HEAD_REF} != *\/main ]] then - echo \ - "Pull request for a split branch must come from the main" \ - "split. Try creating a pull request from the branch with the" \ - "suffix \"/main\"" exit 1 fi From 1bcc2ba72c66cd8c0c9d6c02a3705644e7234172 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 18:39:35 -0500 Subject: [PATCH 07/17] im a little regarded --- .github/workflows/merge_main_from_split.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml index 1c6e410..4b49dac 100644 --- a/.github/workflows/merge_main_from_split.yml +++ b/.github/workflows/merge_main_from_split.yml @@ -16,7 +16,11 @@ jobs: then echo "Branch is not a split branch." exit 0 - else if [[ ${GITHUB_HEAD_REF} != *\/main ]] + elif [[ ${GITHUB_HEAD_REF} != *\/main ]] then + echo \ + "Pull request for a split branch must come from the main" \ + "split. Try creating a pull request from the branch with the" \ + "suffix \"/main\"" exit 1 fi From 931bad1827ca1d75792ee554945c3706b9c7eef3 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 20:14:02 -0500 Subject: [PATCH 08/17] check for unmerged splits --- .../workflows/check_for_unmerged_splits.yml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/check_for_unmerged_splits.yml diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml new file mode 100644 index 0000000..3b6fea5 --- /dev/null +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -0,0 +1,40 @@ +name: check for unmerged splits + +on: + pull_request: + branches: + - main + push: + branches: + - */* + +jobs: + check-branch: + runs-on: ubuntu-latest + steps: + - name: Check split branch + run: | + TOPIC_NAME=${GITHUB_HEAD_REF%/main} + readarray -t ALL < <(\ + git branch --format='%(refname:short)' -a \ + | grep "$TOPIC_NAME" + ) + readarray -t MERGED < <(\ + git branch --format='%(refname:short)' --merged \ + | grep "$TOPIC_NAME" + ) + if [[ -z "${GITHUB_HEAD_REF}" ]] + then + echo "Check is not in a pull request." + exit 0 + elif [[ ${GITHUB_HEAD_REF} != *\/main ]] + then + echo "Branch is not a main split." + exit 0 + elif [ ${#MERGED[@]} -lt ${#ALL[@]} ] + then + echo "The following branches have not been merged:" + # credit [to](https://stackoverflow.com/a/2816152) + echo ${ALL[@]} ${MERGED[@]} | tr ' ' '\n' | sort | uniq -u + exit 1 + fi From 1877a07fe13162bd197dce6163ce5b86923a16f8 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 20:18:27 -0500 Subject: [PATCH 09/17] modify workflow triggers --- .github/workflows/check_for_unmerged_splits.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index 3b6fea5..be0079a 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -4,9 +4,6 @@ on: pull_request: branches: - main - push: - branches: - - */* jobs: check-branch: From 8d3e71395fcad37ffdfde53719be955308b45ae8 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 20:20:43 -0500 Subject: [PATCH 10/17] readd run workflow on push --- .github/workflows/check_for_unmerged_splits.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index be0079a..98f5f75 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -4,6 +4,9 @@ on: pull_request: branches: - main + push: + branches: + - '**/*' jobs: check-branch: From 6dae85a3f433b98cb7ade7eafce8556880dad416 Mon Sep 17 00:00:00 2001 From: spoopr Date: Tue, 2 Jun 2026 23:58:09 -0500 Subject: [PATCH 11/17] Revert "readd run workflow on push" This reverts commit 8d3e71395fcad37ffdfde53719be955308b45ae8. --- .github/workflows/check_for_unmerged_splits.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index 98f5f75..be0079a 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -4,9 +4,6 @@ on: pull_request: branches: - main - push: - branches: - - '**/*' jobs: check-branch: From dc7cab23e84e69d8b1500d55033b6e8380ee7484 Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:04:37 -0500 Subject: [PATCH 12/17] move condition to run split branch check to github actions syntax --- .github/workflows/merge_main_from_split.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml index 4b49dac..52dea09 100644 --- a/.github/workflows/merge_main_from_split.yml +++ b/.github/workflows/merge_main_from_split.yml @@ -8,15 +8,12 @@ on: jobs: check-branch: + if: contains(github.head_ref, \/) runs-on: ubuntu-latest steps: - name: Check split branch run: | - if [[ ${GITHUB_HEAD_REF} != *\/* ]] - then - echo "Branch is not a split branch." - exit 0 - elif [[ ${GITHUB_HEAD_REF} != *\/main ]] + if [[ ${GITHUB_HEAD_REF} != *\/main ]] then echo \ "Pull request for a split branch must come from the main" \ From 01086d9efe9926e5aad2d1ead2333c94eeeaaeff Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:10:01 -0500 Subject: [PATCH 13/17] fix workflow conditional? --- .github/workflows/merge_main_from_split.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/merge_main_from_split.yml b/.github/workflows/merge_main_from_split.yml index 52dea09..f1bfa41 100644 --- a/.github/workflows/merge_main_from_split.yml +++ b/.github/workflows/merge_main_from_split.yml @@ -8,7 +8,7 @@ on: jobs: check-branch: - if: contains(github.head_ref, \/) + if: contains(github.head_ref, '/') runs-on: ubuntu-latest steps: - name: Check split branch From 6e459564a3a8f525727ab4ec8d93e7ba4c97825a Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:42:16 -0500 Subject: [PATCH 14/17] update unmerged status check run condition to github actions --- .github/workflows/check_for_unmerged_splits.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index be0079a..26fea79 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -7,6 +7,7 @@ on: jobs: check-branch: + if: endsWith(github.head_ref, '/main') runs-on: ubuntu-latest steps: - name: Check split branch @@ -20,15 +21,8 @@ jobs: git branch --format='%(refname:short)' --merged \ | grep "$TOPIC_NAME" ) - if [[ -z "${GITHUB_HEAD_REF}" ]] - then - echo "Check is not in a pull request." - exit 0 - elif [[ ${GITHUB_HEAD_REF} != *\/main ]] - then - echo "Branch is not a main split." - exit 0 - elif [ ${#MERGED[@]} -lt ${#ALL[@]} ] + run: | + if [ ${#MERGED[@]} -lt ${#ALL[@]} ] then echo "The following branches have not been merged:" # credit [to](https://stackoverflow.com/a/2816152) From 0207eff6c8ee023de02fdad2781d2859686b22b5 Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:42:47 -0500 Subject: [PATCH 15/17] reorganize and fix umerged split status check --- .github/workflows/check_for_unmerged_splits.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index 26fea79..ae1fae0 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -11,12 +11,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Check split branch + uses: actions/checkout@v6 + run: TOPIC_NAME=${GITHUB_HEAD_REF%/main} run: | - TOPIC_NAME=${GITHUB_HEAD_REF%/main} readarray -t ALL < <(\ git branch --format='%(refname:short)' -a \ | grep "$TOPIC_NAME" ) + run: | readarray -t MERGED < <(\ git branch --format='%(refname:short)' --merged \ | grep "$TOPIC_NAME" From e97101bc323df6a6647c7e577e2577ef96a1eb2b Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:47:31 -0500 Subject: [PATCH 16/17] unreorganize unmerged split check --- .github/workflows/check_for_unmerged_splits.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index ae1fae0..47cbc04 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -12,18 +12,16 @@ jobs: steps: - name: Check split branch uses: actions/checkout@v6 - run: TOPIC_NAME=${GITHUB_HEAD_REF%/main} run: | + TOPIC_NAME=${GITHUB_HEAD_REF%/main} readarray -t ALL < <(\ git branch --format='%(refname:short)' -a \ | grep "$TOPIC_NAME" ) - run: | readarray -t MERGED < <(\ git branch --format='%(refname:short)' --merged \ | grep "$TOPIC_NAME" ) - run: | if [ ${#MERGED[@]} -lt ${#ALL[@]} ] then echo "The following branches have not been merged:" From 93a9347f4671cc3af5ab269988ab6c70b3a55c6d Mon Sep 17 00:00:00 2001 From: spoopr Date: Wed, 3 Jun 2026 00:51:16 -0500 Subject: [PATCH 17/17] semantics? --- .github/workflows/check_for_unmerged_splits.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check_for_unmerged_splits.yml b/.github/workflows/check_for_unmerged_splits.yml index 47cbc04..bc73440 100644 --- a/.github/workflows/check_for_unmerged_splits.yml +++ b/.github/workflows/check_for_unmerged_splits.yml @@ -10,9 +10,8 @@ jobs: if: endsWith(github.head_ref, '/main') runs-on: ubuntu-latest steps: - - name: Check split branch - uses: actions/checkout@v6 - run: | + - uses: actions/checkout@v6 + - run: | TOPIC_NAME=${GITHUB_HEAD_REF%/main} readarray -t ALL < <(\ git branch --format='%(refname:short)' -a \