Auto-Merge Test Backport PRs #713
This file contains 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 Test Backport PRs | |
on: | |
schedule: | |
- cron: "0 * * * *" # Every hour | |
workflow_dispatch: | |
push: | |
jobs: | |
auto-merge: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- name: Merge qualifying PRs | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
// Get timestamp for 24 hours ago in ISO format | |
const now = new Date(); | |
const iso24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); | |
const query = ` | |
query SearchPRs() { | |
search(query: "repo:${context.repo.owner}/${context.repo.repo} is:pr is:open label:backport label:blathers-backport label:backport-test-only", type: ISSUE, first: 100) { | |
nodes { | |
... on PullRequest { | |
number | |
createdAt | |
labels(first: 10) { | |
nodes { | |
name | |
} | |
} | |
reviews(last: 50) { | |
nodes { | |
state | |
author { | |
login | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
`; | |
const result = await github.graphql(query); | |
const prs = result.search.nodes; | |
for (const pr of prs) { | |
const createdAt = new Date(pr.createdAt); | |
const isOldEnough = createdAt <= iso24HoursAgo; | |
if (!isOldEnough) { | |
console.log(`Skipping PR #${pr.number}: not old enough, only created at ${pr.createdAt}`); | |
continue; | |
} | |
const approved = pr.reviews.nodes.some( | |
r => | |
r.state === 'APPROVED' && | |
r.author?.login === 'blathers-crl[bot]' | |
); | |
if (!approved) { | |
console.log(`Skipping PR #${pr.number}: not approved`); | |
continue; | |
} | |
const labels = pr.labels.nodes.map(l => l.name).join(', '); | |
console.log(`Merging PR #${pr.number}, Created at: ${pr.createdAt}, Approved: ${approved}, Labels: ${labels}`); | |
// Merge the PR | |
// try { | |
// console.log(`Merging PR #${pr.number}`); | |
// await github.rest.pulls.merge({ | |
// owner: context.repo.owner, | |
// repo: context.repo.repo, | |
// pull_number: pr.number, | |
// merge_method: "merge", | |
// }); | |
// } catch (err) { | |
// console.warn(`Failed to merge PR #${pr.number}: ${err.message}`); | |
// } | |
} |