mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-12 23:33:43 +08:00
77 lines
2.5 KiB
YAML
77 lines
2.5 KiB
YAML
name: Upstream Sync
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write # Required to create the PR
|
|
|
|
env:
|
|
UPSTREAM_REPO: KuekHaoYang/KVideo
|
|
UPSTREAM_BRANCH: main
|
|
TARGET_BRANCH: main
|
|
SYNC_BRANCH: upstream-sync-conflict # The branch name used if a conflict occurs
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 */6 * * *"
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: upstream-sync-${{ github.repository }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
sync_latest_from_upstream:
|
|
name: Sync latest commits from upstream repo
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event.repository.fork }}
|
|
|
|
steps:
|
|
- name: Checkout target repo
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # Required to access full history for merging
|
|
|
|
- name: Sync and Merge (with PR Fallback)
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
# 1. Configure Git
|
|
git config user.name "github-actions[bot]"
|
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
# 2. Add Upstream Remote
|
|
git remote add upstream "https://github.com/$UPSTREAM_REPO.git"
|
|
git fetch upstream
|
|
|
|
# 3. Attempt Merge
|
|
echo "Attempting to merge upstream/$UPSTREAM_BRANCH into $TARGET_BRANCH..."
|
|
|
|
if git merge upstream/$UPSTREAM_BRANCH; then
|
|
echo "✅ Merge successful. Pushing changes..."
|
|
git push origin $TARGET_BRANCH
|
|
else
|
|
echo "⚠️ Merge conflict detected. Aborting merge and creating PR..."
|
|
git merge --abort
|
|
|
|
# 4. Create a clean branch from upstream content
|
|
git checkout -B $SYNC_BRANCH upstream/$UPSTREAM_BRANCH
|
|
git push -f origin $SYNC_BRANCH
|
|
|
|
# 5. Create Pull Request using GitHub CLI
|
|
# The '|| true' prevents failure if the PR already exists
|
|
gh pr create \
|
|
--title "🚨 Manual Sync Required: Conflicts with Upstream" \
|
|
--body "The automatic sync failed due to merge conflicts. This PR contains the latest upstream changes. Please resolve conflicts and merge manually." \
|
|
--head $SYNC_BRANCH \
|
|
--base $TARGET_BRANCH \
|
|
|| echo "PR already exists or could not be created."
|
|
fi
|
|
|
|
- name: Delete workflow runs
|
|
uses: Mattraks/delete-workflow-runs@v2
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
repository: ${{ github.repository }}
|
|
retain_days: 1
|
|
keep_minimum_runs: 3
|