Auto Merge PR on Sunday #9
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
| # This is a basic workflow to help you get started with Actions | |
| name: "Auto Merge PR on Sunday" | |
| # Controls when the workflow will run | |
| on: | |
| schedule: | |
| # 한국 시간 23:59 (UTC 14:59) | |
| - cron: "59 14 * * 0" | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| merge: | |
| runs-on: "ubuntu-latest" | |
| steps: | |
| - uses: "actions/github-script@v6" | |
| with: | |
| github-token: ${{secrets.GITHUB_TOKEN}} | |
| script: | | |
| const query = `query($owner:String!, $name:String!) { | |
| repository(owner: $owner, name: $name) { | |
| pullRequests(last: 10, states: OPEN) { | |
| edges { | |
| node { | |
| number | |
| mergeable | |
| labels(first: 10) { | |
| nodes { | |
| name | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }` | |
| const {repository:{pullRequests:{edges: list}}} = await github.graphql(query, { | |
| owner: context.repo.owner, | |
| name: context.repo.repo, | |
| }) | |
| for (let {node} of list) { | |
| const createComment = (body) => github.rest.issues.createComment({ | |
| ...context.repo, | |
| issue_number: node.number, | |
| body | |
| }) | |
| try { | |
| const labels = node.labels.nodes.map(label => label.name) | |
| if (!labels.includes("ready for merge")) { | |
| await createComment("'ready for merge' 라벨이 필요합니다.") | |
| continue | |
| } | |
| if (node.mergeable === "CONFLICTING") { | |
| await createComment("충돌로 인해 자동 병합이 불가능합니다.") | |
| continue | |
| } | |
| await github.rest.pulls.merge({ | |
| ...context.repo, | |
| pull_number: node.number, | |
| merge_method: "merge" | |
| }) | |
| await createComment("자동 병합이 완료되었습니다.") | |
| } catch (e) { | |
| console.error("Merge failed:", e) | |
| } | |
| } |