PromucFlow_constructor/.github/workflows/sync-release-to-pg.yml
Anagh Hegde 95537e0470
ci: add configs for release to pg sync (#35914)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit


- **Workflow Improvements**
- Enhanced GitHub Actions workflow for syncing releases, improving Git
operations and conflict management.
- Introduced a step to set Git configuration for better commit
attribution.
- Added a new step to specify the Node.js version for consistent
environment setup.
- Simplified the merging process with a new `git merge` command that
accommodates unrelated histories.
- Adjusted conflict handling strategy, emphasizing manual intervention
when conflicts occur.
	- Updated Slack notification message formatting for clarity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
f30933c3d2da9b90ed631f89fc270834505a3873 yet
> <hr>Tue, 03 Sep 2024 04:18:19 UTC
<!-- end of auto-generated comment: Cypress test results  -->
2024-09-04 11:23:58 +05:30

84 lines
2.7 KiB
YAML

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
fetch-depth: 0
- name: Set Git config values
run: |
git config pull.rebase false
git config user.email "automated@github.com"
git config user.name "Automated Github Action"
- name: Checkout pg branch
run: git checkout pg
- name: Merge release to pg
id: merge_commits
run: |
PG_HEAD=$(git rev-parse pg)
RELEASE_HEAD=$(git rev-parse release)
echo "PG_HEAD=$PG_HEAD"
echo "RELEASE_HEAD=$RELEASE_HEAD"
# Attempt to merge release into pg
if ! git merge release; then
echo "Merge conflict detected during merge"
# Capture the conflicting commit SHAs (both HEAD of pg and the merge commit from release)
CONFLICTING_COMMIT=$(git log -1 --pretty=format:"%H")
echo "CONFLICTING_COMMIT=$CONFLICTING_COMMIT" >> $GITHUB_ENV
echo "MERGE_CONFLICT=true" >> $GITHUB_ENV
else
echo "MERGE_CONFLICT=false" >> $GITHUB_ENV
fi
- name: Push changes
if: env.MERGE_CONFLICT == 'false'
run: |
git push origin pg
- name: Notify on merge conflicts
if: env.MERGE_CONFLICT == 'true'
env:
REPOSITORY_URL: ${{ github.repositoryUrl }}
CONFLICTING_COMMIT: ${{ env.CONFLICTING_COMMIT }}
run: |
# Prepare the message for Slack
message="Merge conflict detected while merging release into pg branch. Conflicted commits:\n"
commit_url="$REPOSITORY_URL/commit/$CONFLICTING_COMMIT"
message+="$commit_url\n"
# 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')"
echo "$slack_message"
# 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"