55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import os
|
|
import requests
|
|
import sys
|
|
|
|
# GitHub API endpoint
|
|
api_url = os.environ["GITHUB_API_URL"]
|
|
repo = os.environ["GITHUB_REPOSITORY"]
|
|
sha = os.environ["GITHUB_SHA"]
|
|
|
|
# GitHub token for authentication
|
|
github_token = os.environ["GITHUB_TOKEN"]
|
|
|
|
# API endpoint for check runs for the specific SHA
|
|
endpoint = f"{api_url}/repos/{repo}/commits/{sha}/check-runs"
|
|
|
|
# Set up headers for authentication
|
|
headers = {
|
|
"Authorization": f"token {github_token}",
|
|
"Accept": "application/vnd.github.v3+json"
|
|
}
|
|
|
|
# Make the API request
|
|
response = requests.get(endpoint, headers=headers)
|
|
|
|
if response.status_code != 200:
|
|
print(f"Error: Unable to fetch check runs data. Status code: {response.status_code}")
|
|
sys.exit(1)
|
|
|
|
check_runs = response.json()["check_runs"]
|
|
|
|
# Flag to track if all other check runs have passed
|
|
all_others_passed = True
|
|
|
|
# Current run id
|
|
current_run_id = os.environ["GITHUB_RUN_ID"]
|
|
|
|
for run in check_runs:
|
|
if str(run["id"]) != current_run_id:
|
|
status = run["status"]
|
|
conclusion = run["conclusion"]
|
|
|
|
if status == "completed":
|
|
if conclusion not in ["success", "skipped", "neutral"]:
|
|
all_others_passed = False
|
|
print(f"Check run {run['name']} (ID: {run['id']}) has conclusion: {conclusion}")
|
|
else:
|
|
print(f"Check run {run['name']} (ID: {run['id']}) is still {status}.")
|
|
all_others_passed = False
|
|
|
|
if all_others_passed:
|
|
print("All other completed check runs have passed. This check passes.")
|
|
sys.exit(0)
|
|
else:
|
|
print("Some check runs have failed or have not completed. This check fails.")
|
|
sys.exit(1) |