diff --git a/.github/actions/merge-main/action.yml b/.github/actions/merge-main/action.yml index 68fd143..4ba29ba 100644 --- a/.github/actions/merge-main/action.yml +++ b/.github/actions/merge-main/action.yml @@ -21,4 +21,84 @@ runs: - name: Run Script shell: bash run: | - .github/scripts/merge-main.sh ${{ inputs.exempt-branches }} \ No newline at end of file + input=${{ inputs.exempt-branches }} + + function fetch_latest_changes() { + echo "Fetching the latest remote branches" + git fetch --all + } + + fetch_latest_changes + + function find_feature_branches() { + echo "Searching for feature branches" + feature_branches=($(git branch -r --list "*-main" | sed 's|origin/||')) + + if [ ${#feature_branches[@]} -eq 0 ]; then + echo "...none found" + return + fi + + for feature_branch in "${feature_branches[@]}"; do + echo "...found feature branch: $feature_branch" + done + } + + find_feature_branches + + function find_exempt_branches() { + echo "Searching for exempt branches" + IFS=',' read -r -a exempt_branches <<< "$input" + + if [ ${#exempt_branches[@]} -eq 0 ]; then + echo "...none found" + return + fi + + for exempt_branch in "${exempt_branches[@]}"; do + echo "...found exempt branch: $exempt_branch" + done + } + + find_exempt_branches + + function filter_feature_branches() { + echo "Filtering branches" + branches=() + + for feature_branch in "${feature_branches[@]}"; do + if ! [[ "${exempt_branches[*]}" =~ "$feature_branch" ]]; then + echo "...including feature branch: $feature_branch" + branches+=("$feature_branch") + else + echo "...excluding feature branch: $feature_branch" + fi + done + } + + filter_feature_branches + + function merge_main() { + echo "Merging main into branches" + + if [ ${#branches[@]} -eq 0 ]; then + echo "...no branches to merge into" + return + fi + + for branch in "${branches[@]}"; do + echo "...switching to branch: $branch" + git switch "$branch" + echo "...merging main" + git merge -m "misc: merge from main" origin/main + if [ $? -eq 0 ]; then + echo "...pushing to origin" + git push origin "$branch" + else + echo "...merge failed" + git merge --abort + fi + done + } + + merge_main \ No newline at end of file diff --git a/.github/scripts/merge-main.sh b/.github/scripts/merge-main.sh deleted file mode 100755 index f4f2587..0000000 --- a/.github/scripts/merge-main.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -input=$1 - -function fetch_latest_changes() { - echo "Fetching the latest remote branches" - git fetch --all -} - -fetch_latest_changes - -function find_feature_branches() { - echo "Searching for feature branches" - feature_branches=($(git branch -r --list "*-main" | sed 's|origin/||')) - - if [ ${#feature_branches[@]} -eq 0 ]; then - echo "...none found" - return - fi - - for feature_branch in "${feature_branches[@]}"; do - echo "...found feature branch: $feature_branch" - done -} - -find_feature_branches - -function find_exempt_branches() { - echo "Searching for exempt branches" - IFS=',' read -r -a exempt_branches <<< "$input" - - if [ ${#exempt_branches[@]} -eq 0 ]; then - echo "...none found" - return - fi - - for exempt_branch in "${exempt_branches[@]}"; do - echo "...found exempt branch: $exempt_branch" - done -} - -find_exempt_branches - -function filter_feature_branches() { - echo "Filtering branches" - branches=() - - for feature_branch in "${feature_branches[@]}"; do - if ! [[ "${exempt_branches[*]}" =~ "$feature_branch" ]]; then - echo "...including feature branch: $feature_branch" - branches+=("$feature_branch") - else - echo "...excluding feature branch: $feature_branch" - fi - done -} - -filter_feature_branches - -function merge_main() { - echo "Merging main into branches" - - if [ ${#branches[@]} -eq 0 ]; then - echo "...no branches to merge into" - return - fi - - for branch in "${branches[@]}"; do - echo "...switching to branch: $branch" - git switch "$branch" - echo "...merging main" - git merge -m "misc: merge from main" origin/main - if [ $? -eq 0 ]; then - echo "...pushing to origin" - git push origin "$branch" - else - echo "...merge failed" - git merge --abort - fi - done -} - -merge_main \ No newline at end of file