onnxruntime/.github/workflows/generate-skip-doc-change.py
Yi Zhang ea128cdb18
skip windows GPU check if changes only in doc (#13248)
### Description
Use Path filter and fake workflow to skip windows GPU check if there's
only changes in doc.
Refs:

https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks

The fake github yaml is generated by code.

### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->

###verifications:###
In this PR:
since the win-gpu-ci-pipeline.yml and .github are updated, so the real
Windows GPU workflows are always triggered.

in #13256
To avoid update win-gpu-ci-pipleline.yml, I added the path filter in
devops page. the fake win GPU workflows triggered, and the real
workflows are skipped.
2022-10-11 13:51:44 +08:00

48 lines
1.5 KiB
Python

# generate_skip_doc_change.py
from pathlib import Path
from jinja2 import Environment, FileSystemLoader, Template
GITHUB_DIR = Path(__file__).resolve().parent.parent
class Skipped_Workflow:
def __init__(self, workflow_name: str, job_names: list, output_file_name: str):
self.workflow_name = workflow_name
self.job_names = job_names
self.fake_file_name = output_file_name
WIN_GPU_CI_WORKFLOW = Skipped_Workflow(
workflow_name="Windows GPU CI Pipeline",
job_names=[
"cuda build_x64_RelWithDebInfo",
"dml build_x64_RelWithDebInfo",
"training build_x64_RelWithDebInfo",
"kernelDocumentation build_x64_RelWithDebInfo",
],
output_file_name=str(GITHUB_DIR.joinpath("workflows/generated_fake_win_gpu_ci.yml")),
)
def generate_fake_ci_yaml(template: Template, workflow: Skipped_Workflow):
content = template.render(ci_workflow_name=workflow.workflow_name, job_names=workflow.job_names)
filename = workflow.fake_file_name
with open(filename, mode="w", encoding="utf-8") as output_file:
output_file.write(content)
if content[-1] != "\n":
output_file.write("\n")
print(f"... wrote {filename}")
def main() -> None:
environment = Environment(loader=FileSystemLoader(str(GITHUB_DIR.joinpath("workflows/"))))
template = environment.get_template("skip-doc-change.yml.j2")
skipped_workflows = [WIN_GPU_CI_WORKFLOW]
[generate_fake_ci_yaml(template, workflow) for workflow in skipped_workflows]
if __name__ == "__main__":
main()