Skip to content

Commit 089fe77

Browse files
committed
Change sync to trigger on upstream releases only
- Check for new releases every 6 hours (instead of syncing commits) - Only sync and build when upstream creates a new release - Track last synced version in .last-synced-version file - Skip if already synced to latest release
1 parent e0ea0ee commit 089fe77

File tree

2 files changed

+65
-27
lines changed

2 files changed

+65
-27
lines changed

.github/workflows/sync-fork.yml

Lines changed: 64 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,63 @@
1-
name: Sync Fork with Upstream
1+
name: Sync Fork on Upstream Release
22

33
on:
44
schedule:
5-
# Check every 6 hours
5+
# Check for new releases every 6 hours
66
- cron: "0 */6 * * *"
77
workflow_dispatch:
88
inputs:
99
force_build:
10-
description: "Force build even if no changes"
10+
description: "Force build even if no new release"
1111
type: boolean
1212
default: false
1313

1414
jobs:
15-
sync:
15+
check-release:
1616
runs-on: ubuntu-latest
1717
outputs:
18-
has_changes: ${{ steps.sync.outputs.has_changes }}
18+
has_new_release: ${{ steps.check.outputs.has_new_release }}
19+
latest_version: ${{ steps.check.outputs.latest_version }}
20+
21+
steps:
22+
- name: Checkout fork
23+
uses: actions/checkout@v4
24+
25+
- name: Check for new upstream release
26+
id: check
27+
run: |
28+
# Get latest release from upstream
29+
LATEST=$(curl -s https://api.github.com/repos/21st-dev/1code/releases/latest | jq -r '.tag_name // empty')
30+
31+
if [ -z "$LATEST" ]; then
32+
echo "No releases found upstream"
33+
echo "has_new_release=false" >> $GITHUB_OUTPUT
34+
exit 0
35+
fi
36+
37+
echo "Upstream latest release: $LATEST"
38+
39+
# Get our last synced version (stored in a file)
40+
CURRENT=""
41+
if [ -f ".last-synced-version" ]; then
42+
CURRENT=$(cat .last-synced-version)
43+
fi
44+
45+
echo "Our last synced version: $CURRENT"
46+
echo "latest_version=$LATEST" >> $GITHUB_OUTPUT
47+
48+
# Check if we need to sync
49+
if [ "$LATEST" != "$CURRENT" ] || [ "${{ github.event.inputs.force_build }}" == "true" ]; then
50+
echo "New release detected or force build requested"
51+
echo "has_new_release=true" >> $GITHUB_OUTPUT
52+
else
53+
echo "Already up to date"
54+
echo "has_new_release=false" >> $GITHUB_OUTPUT
55+
fi
56+
57+
sync-and-build:
58+
needs: check-release
59+
if: needs.check-release.outputs.has_new_release == 'true'
60+
runs-on: ubuntu-latest
1961

2062
steps:
2163
- name: Checkout fork
@@ -29,41 +71,36 @@ jobs:
2971
git config user.name "github-actions[bot]"
3072
git config user.email "github-actions[bot]@users.noreply.github.com"
3173
32-
- name: Add upstream remote
74+
- name: Add upstream and sync
75+
id: sync
3376
run: |
3477
git remote add upstream https://github.com/21st-dev/1code.git || true
3578
git fetch upstream main
3679
37-
- name: Check for changes and sync
38-
id: sync
39-
run: |
40-
# Get current HEAD
41-
BEFORE=$(git rev-parse HEAD)
42-
4380
# Try to merge upstream changes
4481
if git merge upstream/main --no-edit; then
45-
AFTER=$(git rev-parse HEAD)
46-
47-
if [ "$BEFORE" != "$AFTER" ] || [ "${{ github.event.inputs.force_build }}" == "true" ]; then
48-
echo "has_changes=true" >> $GITHUB_OUTPUT
49-
echo "Changes detected or force build requested"
50-
else
51-
echo "has_changes=false" >> $GITHUB_OUTPUT
52-
echo "No changes from upstream"
53-
fi
82+
echo "Merge successful"
83+
echo "sync_success=true" >> $GITHUB_OUTPUT
5484
else
55-
# Merge conflict - abort and skip this sync
56-
echo "::warning::Merge conflict detected. Skipping sync. Please resolve manually."
85+
echo "::warning::Merge conflict detected. Please resolve manually."
5786
git merge --abort
58-
echo "has_changes=false" >> $GITHUB_OUTPUT
87+
echo "sync_success=false" >> $GITHUB_OUTPUT
88+
exit 0
5989
fi
6090
91+
- name: Update last synced version
92+
if: steps.sync.outputs.sync_success == 'true'
93+
run: |
94+
echo "${{ needs.check-release.outputs.latest_version }}" > .last-synced-version
95+
git add .last-synced-version
96+
git commit -m "Sync with upstream ${{ needs.check-release.outputs.latest_version }}" || true
97+
6198
- name: Push changes
62-
if: steps.sync.outputs.has_changes == 'true'
99+
if: steps.sync.outputs.sync_success == 'true'
63100
run: git push origin main
64101

65102
trigger-build:
66-
needs: sync
67-
if: needs.sync.outputs.has_changes == 'true'
103+
needs: [check-release, sync-and-build]
104+
if: needs.check-release.outputs.has_new_release == 'true'
68105
uses: ./.github/workflows/build-release.yml
69106
secrets: inherit

.last-synced-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v0.0.24

0 commit comments

Comments
 (0)