The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#) https://grpc.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.7 KiB

name: Happy Pancakes
on:
pull_request:
types: [opened, edited, labeled, unlabeled, synchronize, ready_for_review, auto_merge_enabled, auto_merge_disabled]
jobs:
check_status:
name: Check Required Status or force-merge label
runs-on: ubuntu-latest
steps:
# Cancel current runs if they're still running
# (saves processing on fast pushes)
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}
# Wait until our required statuses are ready or failed
# Unless force-merge is present, and then just be good.
- name: Check Status
uses: actions/github-script@v4
with:
script: |
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
let pull = await github.pulls.get({
owner: "grpc",
repo: "grpc",
pull_number: ${{ github.event.pull_request.number }}
});
for (var i = 0; i < pull.data.labels.length; i++) {
let label = pull.data.labels[i];
if (label.name == "force-merge") {
console.log("Saw force-merge label");
return;
}
}
while (true) {
var need = new Set();
need.add("Bazel Basic build for C/C++");
need.add("Portability Tests Linux [Build Only] (internal CI)");
for (var page=1;; page++) {
console.log("***** page " + page);
let statuses = await github.repos.listCommitStatusesForRef({
owner: "grpc",
repo: "grpc",
ref: "${{ github.event.pull_request.head.sha }}",
per_page: 100,
page: page
});
for (var i = 0; i < statuses.data.length; i++) {
let status = statuses.data[i];
console.log(status.context, status.state, need);
if (need.has(status.context)) {
if (status.state == "success") {
need.delete(status.context);
} else if (status.state == "pending") {
// do nothing
} else {
core.setFailed("Required status failed: " + status.context);
return;
}
}
}
if (statuses.data.length < 100) {
break;
}
}
if (need.size == 0) {
return;
}
// Sleep 15 minutes between polls
await sleep(15 * 60 * 1000);
}