mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-18 21:21:17 +00:00
Co-authored-by: Rachel Guo <35738743+YUNQIUGUO@users.noreply.github.com> Co-authored-by: rachguo <rachguo@rachguos-Mac-mini.local> Co-authored-by: rachguo <rachguo@rachguos-Mini.attlocal.net> Co-authored-by: Tianlei Wu <tlwu@microsoft.com> Co-authored-by: George Wu <jywu@microsoft.com> Co-authored-by: Edward Chen <18449977+edgchen1@users.noreply.github.com> Co-authored-by: Jian Chen <cjian@microsoft.com>
115 lines
3.4 KiB
Python
Executable file
115 lines
3.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
# Note: This script is intended to be called from the CocoaPods package release pipeline or a similar context.
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import glob
|
|
import os
|
|
import shlex
|
|
import subprocess
|
|
from enum import Enum
|
|
from pathlib import Path
|
|
|
|
|
|
class Task(Enum):
|
|
upload_pod_archive = 1
|
|
update_podspec = 2
|
|
|
|
|
|
def _run(command: list[str], **kwargs):
|
|
print(f"Running command: {shlex.join(command)}", flush=True)
|
|
kwargs.setdefault("check", True)
|
|
return subprocess.run(command, **kwargs) # noqa: PLW1510 # we add 'check' to kwargs if not present
|
|
|
|
|
|
def upload_pod_archive(pod_archive_path: Path):
|
|
env = os.environ.copy()
|
|
env.update(
|
|
{
|
|
# configure azcopy to use managed identity
|
|
"AZCOPY_AUTO_LOGIN_TYPE": "MSI",
|
|
"AZCOPY_MSI_CLIENT_ID": "63b63039-6328-442f-954b-5a64d124e5b4",
|
|
}
|
|
)
|
|
|
|
storage_account_name = "onnxruntimepackages"
|
|
storage_account_container_name = "$web"
|
|
dest_url = f"https://{storage_account_name}.blob.core.windows.net/{storage_account_container_name}/"
|
|
|
|
upload_command = ["azcopy", "cp", str(pod_archive_path), dest_url]
|
|
|
|
_run(upload_command, env=env)
|
|
|
|
|
|
def update_podspec(pod_archive_path: Path, podspec_path: Path):
|
|
storage_url = f"https://download.onnxruntime.ai/{pod_archive_path.name}"
|
|
|
|
podspec_content = podspec_path.read_text()
|
|
podspec_content = podspec_content.replace("file:///http_source_placeholder", storage_url)
|
|
podspec_path.write_text(podspec_content)
|
|
|
|
|
|
def _resolve_single_path_from_pattern(path_pattern: str) -> Path:
|
|
matches = glob.glob(path_pattern)
|
|
if len(matches) != 1:
|
|
raise argparse.ArgumentTypeError(
|
|
f"Expected exactly 1 match for pattern '{path_pattern}' but got {len(matches)} matches."
|
|
)
|
|
return Path(matches[0]).resolve(strict=True)
|
|
|
|
|
|
def _parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
description="Helper script to perform release tasks. "
|
|
"Mostly useful for the CocoaPods package release pipeline.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--pod-archive-path",
|
|
type=_resolve_single_path_from_pattern,
|
|
help="Pod archive path. It may be a pattern, in which case it must match exactly one path.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"--podspec-path",
|
|
type=_resolve_single_path_from_pattern,
|
|
help="Podspec path. It may be a pattern, in which case it must match exactly one path.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"task",
|
|
choices=[task.name for task in Task],
|
|
help="Specify the task to run.",
|
|
)
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def _validate_args(
|
|
args: argparse.Namespace, require_pod_archive_path: bool = False, require_podspec_path: bool = False
|
|
):
|
|
if require_pod_archive_path:
|
|
assert args.pod_archive_path is not None, "--pod-archive-path must be specified."
|
|
|
|
if require_podspec_path:
|
|
assert args.podspec_path is not None, "--podspec-path must be specified."
|
|
|
|
|
|
def main():
|
|
args = _parse_args()
|
|
|
|
task = Task[args.task]
|
|
|
|
if task == Task.update_podspec:
|
|
_validate_args(args, require_pod_archive_path=True, require_podspec_path=True)
|
|
update_podspec(args.pod_archive_path, args.podspec_path)
|
|
|
|
elif task == Task.upload_pod_archive:
|
|
_validate_args(args, require_pod_archive_path=True)
|
|
upload_pod_archive(args.pod_archive_path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|