From c79b62e536d49eafa4e5acc20e714df97ae9df75 Mon Sep 17 00:00:00 2001 From: Anagh Hegde Date: Tue, 27 Aug 2024 11:27:04 +0530 Subject: [PATCH] ci: sync release to pg branch (#35888) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This CI job is responsible for syncing changes from the release branch to the pg branch. This happens for every commit merged to release branch, similar to `Sync Community Workflow` Fixes #`Issue Number` ## Automation /ok-to-test tags="@tag.Sanity" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: 9bc44fc0cc762d52854da3b4e2f8c3e995909ccd > Cypress dashboard. > Tags: `@tag.Sanity` > Spec: >
Tue, 27 Aug 2024 05:00:52 UTC ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No ## Summary by CodeRabbit - **New Features** - Introduced an automated workflow for merging changes from the release branch to the pg branch, enhancing integration and development efficiency. - Added notifications for merge conflicts to improve communication and resolution tracking. --- .github/workflows/sync-release-to-pg.yml | 84 ++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/sync-release-to-pg.yml diff --git a/.github/workflows/sync-release-to-pg.yml b/.github/workflows/sync-release-to-pg.yml new file mode 100644 index 0000000000..9704bf0ef9 --- /dev/null +++ b/.github/workflows/sync-release-to-pg.yml @@ -0,0 +1,84 @@ +name: Merge release to pg + +on: + push: + branches: + - release # Trigger on push to the release branch + +jobs: + merge-release-to-pg: + runs-on: ubuntu-latest + + steps: + - name: Checkout release branch + uses: actions/checkout@v3 + with: + ref: release # Checkout the release branch + + - name: Fetch all branches + run: git fetch --all + + - name: Checkout pg branch + run: git checkout pg + + - name: Get new commits from release + id: get_commits + run: | + COMMITS=$(git log pg..release --oneline | awk '{print $1}') + echo "COMMITS=\"$COMMITS\"" >> $GITHUB_ENV + + - name: Merge commits one by one + id: merge_commits + run: | + # Initialize an empty list for conflicted commits + conflicted_commits=() + + # Convert the string of commits to an array + IFS=' ' read -r -a commit_array <<< "$COMMITS" + + # Loop through each commit + for commit in "${commit_array[@]}"; do + echo "Merging commit $commit" + git cherry-pick $commit || { + echo "Conflict detected with commit $commit" + conflicted_commits+=($commit) + git cherry-pick --abort + } + done + + # Save conflicted commits to environment variable + echo "CONFLICTED_COMMITS=\"${conflicted_commits[@]}\"" >> $GITHUB_ENV + + - name: Push changes + if: success() && steps.merge_commits.outputs.CONFLICTED_COMMITS == '' + run: | + git push origin pg + + - name: Notify on merge conflicts + if: steps.merge_commits.outputs.CONFLICTED_COMMITS != '' + env: + REPOSITORY_URL: ${{ github.repositoryUrl }} + run: | + # Prepare the message for Slack + message="Merge conflict detected while merging release into pg branch. Conflicted commits:\n" + for commit in $CONFLICTED_COMMITS; do + commit_url="$REPOSITORY_URL/commit/$commit" + message+="$commit_url\n" + done + + # Send the message to Slack + # This unwieldy horror of a sed command, converts standard Markdown links to Slack's unwieldy link syntax. + slack_message="$(echo "$message" | sed -E 's/\[([^]]+)\]\(([^)]+)\)/<\2|\1>/g')" + + # This is the ChannelId of the proj postgres channel. + body="$(jq -nc \ + --arg channel C06Q3A97USE \ + --arg text "$slack_message" \ + '$ARGS.named' + )" + + curl --version + curl -v https://slack.com/api/chat.postMessage \ + --header 'Authorization: Bearer ${{ secrets.SLACK_APPSMITH_ALERTS_TOKEN }}' \ + --header 'Content-Type: application/json; charset=utf-8' \ + --data-raw "$body"