iterative/dvc

View on GitHub
scripts/build.py

Summary

Maintainability
A
0 mins
Test Coverage
import argparse
import importlib
import pathlib
import textwrap
from subprocess import STDOUT, check_call

path = pathlib.Path(__file__).parent.absolute()
dvc = path.parent / "dvc"
pyinstaller = path / "pyinstaller"
innosetup = path / "innosetup"
fpm = path / "fpm"

parser = argparse.ArgumentParser()
parser.add_argument(
    "pkg", choices=["deb", "rpm", "osxpkg", "exe"], help="package type"
)
parser.add_argument("--sign-application", default=False, action="store_true")
parser.add_argument("--application-id")
parser.add_argument("--sign-installer", default=False, action="store_true")
parser.add_argument("--installer-id")
parser.add_argument("--notarize", default=False, action="store_true")
parser.add_argument("--apple-id-username")
parser.add_argument("--apple-id-password")
args = parser.parse_args()

(dvc / "utils" / "build.py").write_text(f'PKG = "{args.pkg}"')

# Autogenerate version, similar to what we do in setup.py
spec = importlib.util.spec_from_file_location(
    "dvc.version", dvc / "version.py"
)
dvc_version = importlib.util.module_from_spec(spec)
spec.loader.exec_module(dvc_version)
version = dvc_version.__version__

(dvc / "version.py").write_text(
    textwrap.dedent(
        f"""\
        # AUTOGENERATED at build time by scripts/build.py
        __version__ = "{version}"
    """
    )
)

check_call(
    ["python", "build.py"],
    cwd=pyinstaller,
    stderr=STDOUT,
)

if args.sign_application:
    if args.pkg != "osxpkg":
        raise NotImplementedError
    if not args.application_id:
        print("--sign-application requires --application-id")
        exit(1)
    check_call(
        ["python", "sign.py", "--application-id", args.application_id],
        cwd=pyinstaller,
        stderr=STDOUT,
    )

if args.pkg == "exe":
    check_call(
        ["python", "build.py"],
        cwd=innosetup,
        stderr=STDOUT,
    )
else:
    check_call(
        ["python", "build.py", args.pkg],
        cwd=fpm,
        stderr=STDOUT,
    )

if args.sign_installer:
    if args.pkg != "osxpkg":
        raise NotImplementedError
    if not all(
        [args.installer_id, args.apple_id_username, args.apple_id_password]
    ):
        print("--sign-installer requires --installer-id")
        exit(1)
    check_call(
        ["python", "sign.py", "--installer-id", args.installer_id],
        cwd=fpm,
        stderr=STDOUT,
    )

if args.notarize:
    if args.pkg != "osxpkg":
        raise NotImplementedError
    if not all([args.apple_id_username, args.apple_id_password]):
        print(
            "--notarize requires --apple-id-username and --apple-id-password"
        )
        exit(1)
    check_call(
        [
            "python",
            "notarize.py",
            "--apple-id-username",
            args.apple_id_username,
            "--apple-id-password",
            args.apple_id_password,
        ],
        cwd=fpm,
        stderr=STDOUT,
    )