|
|
@@ -17,39 +17,57 @@ def fetch_pr_data(pr_number, repo, endpoint=""): |
|
|
|
|
|
|
|
req = urllib.request.Request(api_url) |
|
|
|
res = urllib.request.urlopen(req) |
|
|
|
return json.loads(res.read().decode('utf8')) |
|
|
|
return json.loads(res.read().decode("utf8")) |
|
|
|
|
|
|
|
|
|
|
|
def get_files_list(pr_number, repo="frappe/frappe"): |
|
|
|
return [change["filename"] for change in fetch_pr_data(pr_number, repo, "files")] |
|
|
|
|
|
|
|
|
|
|
|
def get_output(command, shell=True): |
|
|
|
print(command) |
|
|
|
command = shlex.split(command) |
|
|
|
return subprocess.check_output(command, shell=shell, encoding="utf8").strip() |
|
|
|
|
|
|
|
|
|
|
|
def has_skip_ci_label(pr_number, repo="frappe/frappe"): |
|
|
|
return has_label(pr_number, "Skip CI", repo) |
|
|
|
|
|
|
|
|
|
|
|
def has_run_server_tests_label(pr_number, repo="frappe/frappe"): |
|
|
|
return has_label(pr_number, "Run Server Tests", repo) |
|
|
|
|
|
|
|
|
|
|
|
def has_run_ui_tests_label(pr_number, repo="frappe/frappe"): |
|
|
|
return has_label(pr_number, "Run UI Tests", repo) |
|
|
|
|
|
|
|
|
|
|
|
def has_label(pr_number, label, repo="frappe/frappe"): |
|
|
|
return any([fetched_label["name"] for fetched_label in fetch_pr_data(pr_number, repo)["labels"] if fetched_label["name"] == label]) |
|
|
|
return any( |
|
|
|
[ |
|
|
|
fetched_label["name"] |
|
|
|
for fetched_label in fetch_pr_data(pr_number, repo)["labels"] |
|
|
|
if fetched_label["name"] == label |
|
|
|
] |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def is_py(file): |
|
|
|
return file.endswith("py") |
|
|
|
|
|
|
|
|
|
|
|
def is_ci(file): |
|
|
|
return ".github" in file |
|
|
|
|
|
|
|
|
|
|
|
def is_frontend_code(file): |
|
|
|
return file.lower().endswith((".css", ".scss", ".less", ".sass", ".styl", ".js", ".ts", ".vue", ".html")) |
|
|
|
return file.lower().endswith( |
|
|
|
(".css", ".scss", ".less", ".sass", ".styl", ".js", ".ts", ".vue", ".html") |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def is_docs(file): |
|
|
|
regex = re.compile(r'\.(md|png|jpg|jpeg|csv|svg)$|^.github|LICENSE') |
|
|
|
regex = re.compile(r"\.(md|png|jpg|jpeg|csv|svg)$|^.github|LICENSE") |
|
|
|
return bool(regex.search(file)) |
|
|
|
|
|
|
|
|
|
|
@@ -78,8 +96,13 @@ if __name__ == "__main__": |
|
|
|
only_py_changed = updated_py_file_count == len(files_list) |
|
|
|
|
|
|
|
if has_skip_ci_label(pr_number, repo): |
|
|
|
print("Found `Skip CI` label on pr, stopping build process.") |
|
|
|
sys.exit(0) |
|
|
|
if build_type == "ui" and has_run_ui_tests_label(pr_number, repo): |
|
|
|
print("Running UI tests only.") |
|
|
|
elif build_type == "server" and has_run_server_tests_label(pr_number, repo): |
|
|
|
print("Running server tests only.") |
|
|
|
else: |
|
|
|
print("Found `Skip CI` label on pr, stopping build process.") |
|
|
|
sys.exit(0) |
|
|
|
|
|
|
|
elif ci_files_changed: |
|
|
|
print("CI related files were updated, running all build processes.") |
|
|
@@ -88,7 +111,11 @@ if __name__ == "__main__": |
|
|
|
print("Only docs were updated, stopping build process.") |
|
|
|
sys.exit(0) |
|
|
|
|
|
|
|
elif only_frontend_code_changed and build_type == "server" and not has_run_server_tests_label(pr_number, repo): |
|
|
|
elif ( |
|
|
|
only_frontend_code_changed |
|
|
|
and build_type == "server" |
|
|
|
and not has_run_server_tests_label(pr_number, repo) |
|
|
|
): |
|
|
|
print("Only Frontend code was updated; Stopping Python build process.") |
|
|
|
sys.exit(0) |
|
|
|
|
|
|
|