[CI] Fix /rerun-stage command by using requests for workflow dispatch (#15447)
This commit is contained in:
@@ -2,6 +2,7 @@ import json
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import requests
|
||||||
from github import Auth, Github
|
from github import Auth, Github
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
@@ -118,7 +119,7 @@ def handle_rerun_failed_ci(gh_repo, pr, comment, user_perms, react_on_success=Tr
|
|||||||
|
|
||||||
|
|
||||||
def handle_rerun_stage(
|
def handle_rerun_stage(
|
||||||
gh_repo, pr, comment, user_perms, stage_name, react_on_success=True
|
gh_repo, pr, comment, user_perms, stage_name, token, react_on_success=True
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Handles the /rerun-stage <stage-name> command.
|
Handles the /rerun-stage <stage-name> command.
|
||||||
@@ -221,10 +222,19 @@ def handle_rerun_stage(
|
|||||||
else:
|
else:
|
||||||
inputs = {"version": "release", "target_stage": stage_name}
|
inputs = {"version": "release", "target_stage": stage_name}
|
||||||
|
|
||||||
success = target_workflow.create_dispatch(
|
# Use requests directly as PyGithub's create_dispatch only accepts HTTP 204
|
||||||
ref=ref,
|
dispatch_url = f"https://api.github.com/repos/{gh_repo.full_name}/actions/workflows/{target_workflow.id}/dispatches"
|
||||||
inputs=inputs,
|
dispatch_resp = requests.post(
|
||||||
|
dispatch_url,
|
||||||
|
json={"ref": ref, "inputs": inputs},
|
||||||
|
headers={
|
||||||
|
"Authorization": f"Bearer {token}",
|
||||||
|
"Accept": "application/vnd.github+json",
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
success = dispatch_resp.status_code in (200, 204)
|
||||||
|
if not success:
|
||||||
|
print(f"Dispatch failed: {dispatch_resp.status_code} {dispatch_resp.text}")
|
||||||
|
|
||||||
if success:
|
if success:
|
||||||
print(f"Successfully triggered workflow for stage '{stage_name}'")
|
print(f"Successfully triggered workflow for stage '{stage_name}'")
|
||||||
@@ -304,7 +314,7 @@ def main():
|
|||||||
# Extract stage name from command
|
# Extract stage name from command
|
||||||
parts = first_line.split(maxsplit=1)
|
parts = first_line.split(maxsplit=1)
|
||||||
stage_name = parts[1].strip() if len(parts) > 1 else None
|
stage_name = parts[1].strip() if len(parts) > 1 else None
|
||||||
handle_rerun_stage(repo, pr, comment, user_perms, stage_name)
|
handle_rerun_stage(repo, pr, comment, user_perms, stage_name, token)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print(f"Unknown or ignored command: {first_line}")
|
print(f"Unknown or ignored command: {first_line}")
|
||||||
|
|||||||
Reference in New Issue
Block a user