Pull reviews bot automation for Web App Team room (#24679)
parent
8303e66e80
commit
e83b8633b1
@ -0,0 +1,74 @@ |
||||
name: Pending reviews automation |
||||
on: |
||||
# We run it on a schedule instead of on pull_request_* events to not create confusing messaging in the PR |
||||
schedule: |
||||
- cron: "*/10 * * * *" |
||||
concurrency: ${{ github.workflow }} |
||||
jobs: |
||||
bot: |
||||
name: Pending reviews bot |
||||
runs-on: ubuntu-latest |
||||
environment: Matrix |
||||
env: |
||||
URL: "https://github.com/pulls?q=is%3Apr+is%3Aopen+repo%3Amatrix-org%2Fmatrix-js-sdk+repo%3Amatrix-org%2Fmatrix-react-sdk+repo%3Avector-im%2Felement-web+repo%3Avector-im%2Felement-desktop+review-requested%3A%40me+sort%3Aupdated-desc+" |
||||
steps: |
||||
- uses: actions/github-script@v6 |
||||
env: |
||||
HS_URL: ${{ secrets.BETABOT_HS_URL }} |
||||
ROOM_ID: ${{ secrets.ROOM_ID }} |
||||
TOKEN: ${{ secrets.BETABOT_ACCESS_TOKEN }} |
||||
with: |
||||
# PAT needed as the GITHUB_TOKEN won't be able to see cross-references from other orgs (matrix-org) |
||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }} |
||||
script: | |
||||
const repos = [ |
||||
"vector-im/element-desktop", |
||||
"vector-im/element-web", |
||||
"matrix-org/matrix-react-sdk", |
||||
"matrix-org/matrix-js-sdk", |
||||
]; |
||||
const teams = [ |
||||
"matrix-org/element-web-app-team", |
||||
"matrix-org/element-web", |
||||
"vector-im/element-web-app-team", |
||||
"vector-im/element-web", |
||||
]; |
||||
|
||||
let issueCount = 0; |
||||
for (const team of teams) { |
||||
const org = team.split("/", 2)[0]; |
||||
const reposInOrg = repos.filter(repo => repo.startsWith(org + "/")); |
||||
const { data } = await github.rest.search.issuesAndPullRequests({ |
||||
q: `is:pr is:open review:required ${reposInOrg.map(r => `repo:${r}`).join(" ")} team-review-requested:${team}`, |
||||
}); |
||||
issueCount += data.total_count; |
||||
} |
||||
|
||||
const { HS_URL, ROOM_ID, TOKEN, URL } = process.env; |
||||
const apiUrl = `${HS_URL}/_matrix/client/v3/rooms/${ROOM_ID}/state/re.jki.counter/gh_reviews`; |
||||
const headers = { |
||||
"Content-Type": "application/json", |
||||
"Authorization": `Bearer ${TOKEN}`, |
||||
}; |
||||
const res = await fetch(apiUrl, { |
||||
method: "GET", |
||||
headers, |
||||
}); |
||||
|
||||
const data = await res.json(); |
||||
|
||||
if (data.value === issueCount) { |
||||
console.log("Pending review count already correct"); |
||||
return; |
||||
} |
||||
|
||||
await fetch(apiUrl, { |
||||
method: "PUT", |
||||
body: JSON.stringify({ |
||||
"link": URL, |
||||
"severity": "warning", |
||||
"title": "Pending reviews", |
||||
"value": issueCount |
||||
}), |
||||
headers, |
||||
}); |
||||
Loading…
Reference in new issue