e768098d0e
tools_continuous_delivery / Private PyPI non-main branch release (push) Has been skipped
tools_continuous_delivery / Private PyPI main branch release (push) Failing after 2m42s
Publish Promptflow Doc / Build (push) Has been cancelled
Publish Promptflow Doc / Deploy (push) Has been cancelled
Flake8 Lint / flake8 (push) Has been cancelled
Spell check CI / Spell_Check (push) Has been cancelled
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
from promptflow._sdk._load_functions import load_yaml
|
|
from promptflow._sdk._pf_client import PFClient
|
|
from ghactions_driver.readme_step import ReadmeStepsManage
|
|
from pathlib import Path
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def install(filename):
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", filename])
|
|
|
|
|
|
def main(input_glob_flow_dag):
|
|
# check if flow.dag.yaml contains schema field.
|
|
|
|
error = False
|
|
globs = set()
|
|
pf_client = PFClient()
|
|
|
|
for p in input_glob_flow_dag:
|
|
globs = globs | set(Path(ReadmeStepsManage.git_base_dir()).glob(p))
|
|
flow_dag_items = sorted([i for i in globs])
|
|
|
|
for file in flow_dag_items:
|
|
data = load_yaml(file)
|
|
if "$schema" not in data.keys():
|
|
print(f"{file} does not contain $schema field.")
|
|
error = True
|
|
if error is False:
|
|
new_links = []
|
|
if (Path(file).parent / "requirements.txt").exists():
|
|
# remove all promptflow lines in requirements.txt
|
|
# and save time, or else it will check all dependencies of promptflow time by time
|
|
with open(Path(file).parent / "requirements.txt", "r") as f:
|
|
lines = f.readlines()
|
|
with open(Path(file).parent / "requirements.txt", "w") as f:
|
|
for line in lines:
|
|
if "promptflow" not in line:
|
|
f.write(line)
|
|
|
|
install(Path(file).parent / "requirements.txt")
|
|
|
|
if "flow-with-symlinks" in str(file):
|
|
saved_path = os.getcwd()
|
|
os.chdir(str(file.parent))
|
|
source_folder = Path("../web-classification")
|
|
for file_name in os.listdir(source_folder):
|
|
if not Path(file_name).exists():
|
|
os.symlink(
|
|
source_folder / file_name,
|
|
file_name
|
|
)
|
|
new_links.append(file_name)
|
|
validation_result = pf_client.flows.validate(
|
|
flow=file,
|
|
)
|
|
if "flow-with-symlinks" in str(file):
|
|
for link in new_links:
|
|
os.remove(link)
|
|
os.chdir(saved_path)
|
|
print(f"VALIDATE {file}: \n" + repr(validation_result))
|
|
if not validation_result.passed:
|
|
print(f"{file} is not valid.")
|
|
error = True
|
|
if len(validation_result._warnings) > 0:
|
|
print(f"{file} has warnings.")
|
|
error = True
|
|
|
|
if error:
|
|
raise Exception("Some flow.dag.yaml validation failed.")
|
|
else:
|
|
print("All flow.dag.yaml validation completed.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
input_glob_flow_dag = [
|
|
"examples/**/flow.dag.yaml",
|
|
]
|
|
main(input_glob_flow_dag)
|