63 lines
1.7 KiB
YAML
63 lines
1.7 KiB
YAML
name: Sync upstream
|
||
|
||
on:
|
||
schedule:
|
||
# 每天北京时间 04:00 同步(UTC 20:00)
|
||
- cron: '0 20 * * *'
|
||
workflow_dispatch:
|
||
|
||
permissions:
|
||
contents: write
|
||
|
||
concurrency:
|
||
group: sync-upstream
|
||
cancel-in-progress: false
|
||
|
||
jobs:
|
||
sync:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout fork
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
||
- name: Configure git
|
||
run: |
|
||
git config user.name "github-actions[bot]"
|
||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||
|
||
- name: Add upstream remote
|
||
run: |
|
||
git remote add upstream https://github.com/alireza0/s-ui.git
|
||
git fetch upstream main
|
||
|
||
- name: Sync main from upstream
|
||
run: |
|
||
set -euo pipefail
|
||
|
||
# Preserve fork workflows. GITHUB_TOKEN cannot push commits that
|
||
# create/update workflow files from upstream (for example docker.yml).
|
||
tmp_workflows="$(mktemp -d)"
|
||
if [ -d .github/workflows ]; then
|
||
cp -a .github/workflows/. "$tmp_workflows/"
|
||
fi
|
||
|
||
# Make the fork match upstream exactly, avoiding merge/rebase conflicts
|
||
# from divergent local history.
|
||
git checkout main
|
||
git reset --hard upstream/main
|
||
|
||
rm -rf .github/workflows
|
||
mkdir -p .github/workflows
|
||
cp -a "$tmp_workflows/." .github/workflows/
|
||
git add .github/workflows
|
||
|
||
if git diff --cached --quiet; then
|
||
echo "Fork is already in sync with upstream."
|
||
exit 0
|
||
fi
|
||
|
||
git commit -m "Sync upstream and keep fork workflow"
|
||
git push --force-with-lease origin main |