Skip to content

Commit a8bb854

Browse files
committed
feat: add sync-dev-to-main workflow
1 parent ed0ffd2 commit a8bb854

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: Sync Dev to Main
2+
3+
on:
4+
# Manual trigger
5+
workflow_dispatch:
6+
7+
# Daily schedule at 2 AM UTC
8+
schedule:
9+
- cron: '0 2 * * *'
10+
11+
jobs:
12+
sync-branches:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
20+
token: ${{ secrets.GITHUB_TOKEN }}
21+
22+
- name: Configure Git
23+
run: |
24+
git config --global user.name "github-actions[bot]"
25+
git config --global user.email "github-actions[bot]@users.noreply.github.com"
26+
27+
- name: Check if dev branch exists
28+
id: check_dev
29+
run: |
30+
if git show-ref --verify --quiet refs/remotes/origin/dev; then
31+
echo "dev_exists=true" >> $GITHUB_OUTPUT
32+
else
33+
echo "dev_exists=false" >> $GITHUB_OUTPUT
34+
fi
35+
36+
- name: Exit if dev branch doesn't exist
37+
if: steps.check_dev.outputs.dev_exists == 'false'
38+
run: |
39+
echo "Dev branch does not exist. Skipping sync."
40+
exit 0
41+
42+
- name: Check for changes between dev and main
43+
id: check_changes
44+
run: |
45+
# Fetch the latest changes from both branches
46+
git fetch origin dev
47+
git fetch origin main
48+
49+
# Check if there are any differences between remote branches
50+
if git diff --quiet origin/main origin/dev; then
51+
echo "has_changes=false" >> $GITHUB_OUTPUT
52+
echo "No changes detected between dev and main"
53+
else
54+
echo "has_changes=true" >> $GITHUB_OUTPUT
55+
echo "Changes detected between dev and main"
56+
fi
57+
58+
- name: Exit if no changes
59+
if: steps.check_changes.outputs.has_changes == 'false'
60+
run: |
61+
echo "No changes to sync. Exiting."
62+
exit 0
63+
64+
- name: Attempt merge
65+
id: merge
66+
run: |
67+
git checkout main
68+
git pull origin main
69+
70+
# Try to merge dev into main
71+
if git merge origin/dev --no-edit; then
72+
echo "merge_success=true" >> $GITHUB_OUTPUT
73+
echo "Merge completed successfully"
74+
else
75+
echo "merge_success=false" >> $GITHUB_OUTPUT
76+
echo "Merge failed due to conflicts"
77+
git merge --abort
78+
fi
79+
80+
- name: Push changes if merge succeeded
81+
if: steps.merge.outputs.merge_success == 'true'
82+
run: |
83+
git push origin main
84+
echo "Successfully synced dev to main"

0 commit comments

Comments
 (0)