49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
import argparse
|
|
import os
|
|
|
|
import requests
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--result",
|
|
type=str,
|
|
default="FAILURE",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
JOB_NAME = os.getenv("JOB_NAME")
|
|
BUILD_NUMBER = os.getenv("BUILD_NUMBER")
|
|
BUILD_ID = os.getenv("BUILD_ID")
|
|
COMMIT = os.getenv("GIT_COMMIT")
|
|
|
|
# List of status of entire job.
|
|
# https://javadoc.jenkins.io/hudson/model/Result.html
|
|
if args.result == "SUCCESS":
|
|
status_output = "✅ CI test succeeded."
|
|
elif args.result == "NOT_BUILT":
|
|
status_output = "⚪️ CI test cancelled due to overrun."
|
|
elif args.result in ["FAILURE", "ABORTED"]:
|
|
status_output = "❌ CI test failed."
|
|
JOB_LINK = os.environ["BUILD_URL"]
|
|
response = requests.get("{}wfapi".format(JOB_LINK), verify=False).json()
|
|
for stage in response["stages"]:
|
|
# List of status of individual stage.
|
|
# https://javadoc.jenkins.io/plugin/pipeline-graph-analysis/org/jenkinsci/plugins/workflow/pipelinegraphanalysis/GenericStatus.html
|
|
if stage["status"] in ["FAILED", "ABORTED"]:
|
|
stage_name = stage["name"]
|
|
status_output = f"❌ CI test failed in Stage [{stage_name}]."
|
|
break
|
|
else:
|
|
status_output = f"[Debug Only] CI test with result [{args.result}]."
|
|
|
|
|
|
comment = f"""
|
|
Commit ID: {COMMIT}\n
|
|
Build ID: {BUILD_ID}\n
|
|
Status: {status_output}\n
|
|
Report path: [link](https://dgl-ci-result.s3.us-west-2.amazonaws.com/{JOB_NAME}/{BUILD_NUMBER}/{BUILD_ID}/logs/report.html)\n
|
|
Full logs path: [link](https://dgl-ci-result.s3.us-west-2.amazonaws.com/{JOB_NAME}/{BUILD_NUMBER}/{BUILD_ID}/logs/cireport.log)
|
|
"""
|
|
|
|
print(comment)
|