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

#!/usr/bin/env python # -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from pathlib import Path from helpers import is_pipeline_build, call import argparse import shutil import json pipeline_build = is_pipeline_build() root_dir = Path.resolve(Path(__file__) / "../../..") def main(package_name: str, version_suffix: str, output_dir: str, package_versions: dict): if package_name == "autorest.python": versionVariableName = "generatorVersion" tarball_prefix = "autorest-python" elif package_name == "typespec-python": versionVariableName = "emitterVersion" tarball_prefix = "azure-tools-typespec-python" else: print(f"Invalid package name: {package_name}") exit(1) package_dir = root_dir / Path("packages") / package_name currentVersion = call( "node -pe \"require('./package.json').version\"", capture_output=True, cwd=package_dir ).strip() if version_suffix: newVersion = f"{currentVersion}{version_suffix}" # Update version call(f'npm version "{newVersion}" --no-workspaces-update', cwd=package_dir) call("git add package.json", cwd=package_dir) else: newVersion = currentVersion print(f"Building version {newVersion}") package_versions[package_name] = newVersion if pipeline_build: # Update version variable print(f"##vso[task.setvariable variable={versionVariableName};isOutput=true]{newVersion}") # Build project call("pnpm run build") # Check version mismatch call("pnpm check-version-mismatch") call(f'pnpm pack --pack-destination "{output_dir}"', cwd=package_dir) tarball_path = output_dir / f"{tarball_prefix}-{newVersion}.tgz" call(f'pnpm install "{ tarball_path }" -w --verbose') call(f"git restore .") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Run emitter build commands.") parser.add_argument( "--output-dir", help="Output directory", type=str, ) parser.add_argument( "--package", dest="package_name", help="The package to build", choices=["autorest.python", "typespec-python", ""], type=str, ) parser.add_argument( "--publish-internal", help="Produce overrides targeting the internal feed", action="store_true", default=False, ) parser.add_argument( "--version-suffix", help="A suffix to append to the version number of the package", type=str, ) args = parser.parse_args() # Clean output directory output_dir = Path(args.output_dir or root_dir / "artifacts").resolve() shutil.rmtree(output_dir, ignore_errors=True) packages_dir = output_dir / "packages" packages_dir.mkdir(parents=True, exist_ok=True) package_versions = {} if args.package_name: main( args.package_name, args.version_suffix, packages_dir, package_versions, ) else: main( "autorest.python", args.version_suffix, packages_dir, package_versions, ) main( "typespec-python", args.version_suffix, packages_dir, package_versions, ) feedUrl = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-js-test-autorest@local/npm/registry" overrides = {} if "autorest.python" in package_versions: version = package_versions["autorest.python"] if args.publish_internal: overrides["@autorest/python"] = f"{feedUrl}/@autorest/python/-/python-{version}.tgz" if "typespec-python" in package_versions: version = package_versions["typespec-python"] if args.publish_internal: overrides["@azure-tools/typespec-python"] = ( f"{feedUrl}/@azure-tools/typespec-python/-/typespec-python-{version}.tgz" ) with open(output_dir / "overrides.json", "w") as fp: json.dump(overrides, fp, indent=2) with open(output_dir / "package-versions.json", "w") as fp: json.dump(package_versions, fp, indent=2)