Merge upstream changes #1
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: Merge upstream changes | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| upstream_ref: | |
| description: "Upstream tag to merge" | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| merge-upstream: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name 'GitHub Actions' | |
| git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
| # Set up 'ours' merge driver | |
| git config --global merge.ours.driver true | |
| - name: Create new branch | |
| run: | | |
| git checkout -b feature/merge-upstream-${{ github.event.inputs.upstream_ref }} | |
| - name: Add upstream remote | |
| run: | | |
| git remote add upstream https://github.com/typst/typst.git | |
| git fetch upstream | |
| - name: Attempt merge with commit markers | |
| run: | | |
| # Try to merge but allow conflicts | |
| TARGET_COMMIT=$(git rev-parse ${{ github.event.inputs.upstream_ref }}) | |
| git merge --no-commit --no-ff --allow-unrelated-histories $TARGET_COMMIT || true | |
| # Remove upstream `.github/` directory | |
| git checkout HEAD -- .github/ | |
| git reset HEAD .github/ | |
| # Commit the merge with conflict markers | |
| git commit -a -m "Merge upstream changes from ${{ github.event.inputs.upstream_ref }}" | |
| - name: Push branch | |
| run: | | |
| git push --force origin feature/merge-upstream-${{ github.event.inputs.upstream_ref }} | |
| - name: Create Pull Request | |
| id: create-pr | |
| uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 | |
| env: | |
| PR_BODY: | | |
| > [!CAUTION] | |
| > コンフリクトの解消のため、このPull Requestは必ず**Create a merge commit**でマージしてください。 | |
| このPull Requestでは、[上流リポジトリ](https://github.com/typst/typst)の[`${{ github.event.inputs.upstream_ref }}`](https://github.com/typst/typst/releases/tag/${{ github.event.inputs.upstream_ref }})の変更をマージします。 | |
| with: | |
| script: | | |
| const pr = await github.rest.pulls.create({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| head: "feature/merge-upstream-${{ github.event.inputs.upstream_ref }}", | |
| base: "main", | |
| title: "Merge upstream ${{ github.event.inputs.upstream_ref }}", | |
| body: process.env.PR_BODY | |
| }); | |
| core.setOutput("pr_number", pr.data.number); | |
| - name: Check for conflict markers | |
| id: check-conflicts | |
| run: | | |
| CONFLICT_FILES=$(git grep -l "^<<<<<<<\|^=======\|^>>>>>>>" HEAD || echo "") | |
| if [ -n "$CONFLICT_FILES" ]; then | |
| echo "has_conflicts=true" >> $GITHUB_OUTPUT | |
| echo "conflict_files<<EOF" >> $GITHUB_OUTPUT | |
| echo "$CONFLICT_FILES" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Comment on Pull Request if conflicts found | |
| if: steps.check-conflicts.outputs.has_conflicts == 'true' | |
| uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 | |
| with: | |
| script: | | |
| const files = `${{ steps.check-conflicts.outputs.conflict_files }}`.split('\n').filter(f => f); | |
| const fileList = files.map(f => `- \`${f}\``).join('\n'); | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: ${{ steps.create-pr.outputs.pr_number }}, | |
| body: `> [!WARNING]\n> コンフリクトマーカーが検出されました。以下のファイルを確認し、コンフリクトを解消してください。\n\n${fileList}` | |
| }); |