scripts/build.py (64 lines of code) (raw):

import argparse import os import subprocess import tarfile import zipfile def main(): parser = argparse.ArgumentParser() parser.add_argument("version", help="The version tag, starts with v") parser.add_argument( "runtime", help="The runtime environment, e.g. win-x64, linux-x64, osx-x64, linux-arm64, osx-arm64", ) parser.add_argument( "--enable-aot", action="store_true", help="Enable AOT compilation" ) args = parser.parse_args() version = args.version.lstrip("v") project_name = "notation-azure-kv" output_dir = os.path.join(".", "bin", "publish") os.makedirs(output_dir, exist_ok=True) artifacts_dir = os.path.join(".", "bin", "artifacts") os.makedirs(artifacts_dir, exist_ok=True) # Get the latest commit hash commit_hash = subprocess.check_output( ["git", "log", "--pretty=format:%h", "-n", "1"] ).decode("utf-8") print(f"Commit hash: {commit_hash}") # Prepare the dotnet publish command publish_command = [ "dotnet", "publish", "./Notation.Plugin.AzureKeyVault", "--configuration", "Release", "--self-contained", "true", f"-p:CommitHash={commit_hash}", f"-p:Version={version}", "-r", args.runtime, "-o", os.path.join(output_dir, args.runtime), ] if args.enable_aot: publish_command.append("-p:PublishAot=true") else: publish_command.append("-p:PublishSingleFile=true") # Publish for each runtime subprocess.run(publish_command, check=True) # Determine the target platform if args.runtime.startswith("win"): ext = "zip" binary_name = f"{project_name}.exe" else: ext = "tar.gz" binary_name = project_name # Apply the runtime name mapping mapped_runtime = args.runtime.replace("x64", "amd64") mapped_runtime = mapped_runtime.replace("win", "windows") mapped_runtime = mapped_runtime.replace("osx", "darwin") mapped_runtime = mapped_runtime.replace("-", "_") artifact_name = f"{artifacts_dir}/{project_name}_{version}_{mapped_runtime}.{ext}" binary_dir = f"{output_dir}/{args.runtime}" # Create the artifact if ext == "zip": with zipfile.ZipFile(artifact_name, "w", zipfile.ZIP_DEFLATED) as zipf: zipf.write(os.path.join(binary_dir, binary_name), arcname=binary_name) zipf.write("LICENSE") else: with tarfile.open(artifact_name, "w:gz") as tar: tar.add(os.path.join(binary_dir, binary_name), arcname=binary_name) tar.add("LICENSE") if __name__ == "__main__": main()