e768098d0e
Flake8 Lint / flake8 (push) Waiting to run
Spell check CI / Spell_Check (push) Waiting to run
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
97 lines
3.8 KiB
Python
97 lines
3.8 KiB
Python
import json
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
import requests
|
|
|
|
scripts_dir = os.path.join(os.getcwd(), "scripts")
|
|
index_url = "https://fdnpromptflow.azureedge.net/test-promptflow/promptflow-tools"
|
|
ado_promptflow_repo_url_format = "https://{0}@dev.azure.com/msdata/Vienna/_git/PromptFlow"
|
|
|
|
|
|
def replace_lines_from_file_under_hint(file_path, hint: str, lines_to_replace: list):
|
|
lines_count = len(lines_to_replace)
|
|
with open(file_path, "r") as f:
|
|
lines = f.readlines()
|
|
has_hint = False
|
|
for i in range(len(lines)):
|
|
if lines[i].strip() == hint:
|
|
has_hint = True
|
|
lines[i + 1 : i + 1 + lines_count] = lines_to_replace
|
|
if not has_hint:
|
|
lines.append(hint + "\n")
|
|
lines += lines_to_replace
|
|
with open(file_path, "w") as f:
|
|
f.writelines(lines)
|
|
|
|
|
|
def create_remote_branch_in_ADO_with_new_tool_pkg_version(
|
|
ado_pat: str, tool_pkg_version: str, blob_prefix="test-promptflow"
|
|
) -> str:
|
|
# Clone the Azure DevOps repo
|
|
parent_dir = os.path.abspath(os.path.join(os.getcwd(), os.pardir))
|
|
tmp_dir = os.path.join(parent_dir, "temp")
|
|
if not os.path.exists(tmp_dir):
|
|
os.mkdir(tmp_dir)
|
|
|
|
subprocess.run(["git", "config", "--global", "user.email", "github-promptflow@dummy.com"])
|
|
subprocess.run(["git", "config", "--global", "user.name", "github-promptflow"])
|
|
|
|
# Change directory to the 'tmp' directory
|
|
os.chdir(tmp_dir)
|
|
repo_dir = os.path.join(tmp_dir, "PromptFlow")
|
|
repo_url = ado_promptflow_repo_url_format.format(ado_pat)
|
|
subprocess.run(["git", "clone", repo_url, repo_dir])
|
|
# Change directory to the repo directory
|
|
os.chdir(repo_dir)
|
|
# Pull the devs/test branch
|
|
subprocess.run(["git", "reset", "."])
|
|
subprocess.run(["git", "checkout", "."])
|
|
subprocess.run(["git", "clean", "-f", "."])
|
|
subprocess.run(["git", "checkout", "main"])
|
|
subprocess.run(["git", "fetch"])
|
|
subprocess.run(["git", "pull"])
|
|
|
|
# Make changes
|
|
# 1. add test endpoint 'promptflow-gallery-tool-test.yaml'
|
|
# 2. update tool package version
|
|
source_file = Path(scripts_dir) / "tool/utils/configs/promptflow-gallery-tool-test.yaml"
|
|
destination_folder = "deploy/model"
|
|
shutil.copy(source_file, destination_folder)
|
|
|
|
new_lines = [
|
|
f"--extra-index-url https://fdnpromptflow.azureedge.net/{blob_prefix}\n",
|
|
f"promptflow_tools=={tool_pkg_version}\n",
|
|
]
|
|
replace_lines_from_file_under_hint(
|
|
file_path="docker_build/linux/extra_requirements.txt",
|
|
hint="# Prompt-flow tool package",
|
|
lines_to_replace=new_lines,
|
|
)
|
|
|
|
# Create a new remote branch
|
|
new_branch_name = f"devs/test_tool_pkg_{tool_pkg_version}_{datetime.now().strftime('%Y%m%d%H%M%S')}"
|
|
subprocess.run(["git", "branch", "-D", "origin", new_branch_name])
|
|
subprocess.run(["git", "checkout", "-b", new_branch_name])
|
|
subprocess.run(["git", "add", "."])
|
|
subprocess.run(["git", "commit", "-m", f"Update tool package version to {tool_pkg_version}"])
|
|
subprocess.run(["git", "push", "-u", repo_url, new_branch_name])
|
|
|
|
return new_branch_name
|
|
|
|
|
|
def deploy_test_endpoint(branch_name: str, ado_pat: str):
|
|
# PromptFlow-deploy-endpoint pipeline in ADO: https://msdata.visualstudio.com/Vienna/_build?definitionId=24767&_a=summary # noqa: E501
|
|
url = "https://dev.azure.com/msdata/Vienna/_apis/pipelines/24767/runs?api-version=7.0-preview.1"
|
|
request_body_file = Path(scripts_dir) / "tool/utils/configs/deploy-endpoint-request-body.json"
|
|
with open(request_body_file, "r") as f:
|
|
body = json.load(f)
|
|
body["resources"]["repositories"]["self"]["refName"] = f"refs/heads/{branch_name}"
|
|
print(f"request body: {body}")
|
|
response = requests.post(url, json=body, auth=("dummy_user_name", ado_pat))
|
|
print(response.status_code)
|
|
print(response.content)
|