mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 16:42:05 +00:00
Add a simple validator for reusable workflows
This commit is contained in:
parent
a831a648cd
commit
88e04579fd
@ -2,8 +2,14 @@
|
||||
|
||||
set -e
|
||||
|
||||
WORKING_DIR=$(dirname "$0")
|
||||
cd "$WORKING_DIR"
|
||||
|
||||
GIT_ROOT=$(git rev-parse --show-cdup)
|
||||
GIT_ROOT=${GIT_ROOT:-.}
|
||||
GIT_ROOT=${GIT_ROOT:-../../}
|
||||
act --list --directory="$GIT_ROOT" 1>/dev/null 2>&1 || act --list --directory="$GIT_ROOT" 2>&1
|
||||
|
||||
actionlint -ignore 'reusable workflow call.+' || :
|
||||
|
||||
|
||||
python3 check_reusable_workflows.py
|
||||
|
53
utils/check-style/check_reusable_workflows.py
Normal file
53
utils/check-style/check_reusable_workflows.py
Normal file
@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Dict, Iterable, List
|
||||
import yaml
|
||||
|
||||
git_root = Path(__file__).absolute().parents[2]
|
||||
|
||||
|
||||
def check_workflows(paths: Iterable[Path]) -> List[str]:
|
||||
outputs = [] # type: List[str]
|
||||
for path in paths:
|
||||
workflow_object = yaml.safe_load(path.read_bytes())
|
||||
workflow_object["file---name"] = path.name
|
||||
outputs.extend(check_name_override(workflow_object))
|
||||
|
||||
return outputs
|
||||
|
||||
|
||||
def check_name_override(workflow_object: dict) -> List[str]:
|
||||
outputs = [] # type: List[str]
|
||||
workflow_file = workflow_object.get("file---name", "") # type: str
|
||||
jobs = workflow_object.get("jobs", {}) # type: Dict[str, dict]
|
||||
for name, obj in jobs.items():
|
||||
header = f"Workflow '{workflow_file}': Job '{name}': "
|
||||
name_overriden = obj.get("name", "")
|
||||
env_name_overriden = obj.get("env", {}).get("GITHUB_JOB_OVERRIDDEN", "")
|
||||
if name_overriden or env_name_overriden:
|
||||
if not (name_overriden and env_name_overriden):
|
||||
outputs.append(
|
||||
f"{header}job has one of 'name' and 'env.GITHUB_JOB_OVERRIDDEN', "
|
||||
"but not both"
|
||||
)
|
||||
elif name_overriden != env_name_overriden:
|
||||
outputs.append(
|
||||
f"{header}value of 'name' and 'env.GITHUB_JOB_OVERRIDDEN' are not "
|
||||
f"equal. name={name_overriden}; "
|
||||
f"env.GITHUB_JOB_OVERRIDDEN={env_name_overriden}"
|
||||
)
|
||||
return outputs
|
||||
|
||||
|
||||
def main() -> None:
|
||||
reusable_workflow_paths = git_root.glob(".github/workflows/reusable_*.y*ml")
|
||||
outputs = check_workflows(reusable_workflow_paths)
|
||||
if outputs:
|
||||
print("Found next issues for workflows:")
|
||||
for o in outputs:
|
||||
print(o)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user