feat: update workflow #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: auto-merge-to-main | |
| on: | |
| push: | |
| branches: [feat/bailian-docs-update] | |
| workflow_dispatch: {} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| concurrency: | |
| group: auto-merge-to-main | |
| cancel-in-progress: false | |
| jobs: | |
| merge: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: feat/bailian-docs-update | |
| fetch-depth: 0 | |
| - name: Sync main back into branch | |
| id: sync | |
| run: | | |
| BRANCH="feat/bailian-docs-update" | |
| OWNED="skills/bailian-docs-llm-wiki" | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| git fetch origin main | |
| if ! git merge-base --is-ancestor origin/main HEAD; then | |
| git merge --no-ff --no-commit --no-edit origin/main || true | |
| git rm -r --cached -f --ignore-unmatch -q -- skills | |
| if [ -n "$(git ls-files -u)" ]; then | |
| echo "::error::Unresolved conflicts outside skills/, resolve them on main first:" | |
| git ls-files -u | awk '{print $4}' | sort -u | |
| exit 1 | |
| fi | |
| if git rev-parse -q --verify origin/main:skills >/dev/null; then | |
| git read-tree --prefix=skills/ origin/main:skills | |
| fi | |
| git rm -r --cached -f --ignore-unmatch -q -- "$OWNED" | |
| if git rev-parse -q --verify "HEAD:$OWNED" >/dev/null; then | |
| git read-tree "--prefix=$OWNED/" "HEAD:$OWNED" | |
| fi | |
| TREE=$(git write-tree) | |
| COMMIT=$(git commit-tree "$TREE" -p HEAD -p origin/main \ | |
| -m "chore: sync main into ${BRANCH}") | |
| git reset --hard "$COMMIT" | |
| git push origin "HEAD:${BRANCH}" | |
| fi | |
| if git diff --quiet origin/main HEAD; then | |
| echo "changed=false" >> "$GITHUB_OUTPUT" | |
| echo "No content changes vs main, skipping PR." | |
| else | |
| echo "changed=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Create or update PR to main | |
| if: steps.sync.outputs.changed == 'true' | |
| id: pr | |
| env: | |
| GH_TOKEN: ${{ secrets.GIT_TOKEN }} | |
| run: | | |
| BRANCH="feat/bailian-docs-update" | |
| TITLE=$(git log -1 --pretty=%s "${{ github.sha }}" 2>/dev/null || true) | |
| case "$TITLE" in | |
| "chore: sync main"*|"Merge "*) TITLE="" ;; | |
| esac | |
| [ -n "$TITLE" ] || TITLE="chore: update bailian-docs-llm-wiki ($(TZ=Asia/Shanghai date +%Y-%m-%d))" | |
| EXISTING_PR=$(gh pr list --head "$BRANCH" --base main --state open --json number --jq '.[0].number') | |
| if [ -n "$EXISTING_PR" ]; then | |
| echo "PR #$EXISTING_PR already exists, updating..." | |
| gh api "repos/${{ github.repository }}/pulls/$EXISTING_PR" \ | |
| -X PATCH -f title="$TITLE" --silent | |
| PR_NUMBER="$EXISTING_PR" | |
| else | |
| echo "Creating new PR..." | |
| PR_URL=$(gh pr create \ | |
| --base main \ | |
| --head "$BRANCH" \ | |
| --title "$TITLE" \ | |
| --body "Automated PR created on push to \`${BRANCH}\`." \ | |
| --no-maintainer-edit) | |
| PR_NUMBER="${PR_URL##*/}" | |
| fi | |
| echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT" | |
| - name: Auto-merge PR | |
| if: steps.sync.outputs.changed == 'true' | |
| env: | |
| GH_TOKEN: ${{ secrets.GIT_TOKEN }} | |
| run: | | |
| PR_NUMBER="${{ steps.pr.outputs.number }}" | |
| echo "Merging PR #$PR_NUMBER..." | |
| gh pr merge "$PR_NUMBER" --merge --delete-branch=false | |
| echo "### PR #$PR_NUMBER merged" >> "$GITHUB_STEP_SUMMARY" | |
| echo "Branch \`feat/bailian-docs-update\` has been merged into \`main\`." >> "$GITHUB_STEP_SUMMARY" |