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"