import argparse
import subprocess
import shutil
from pathlib import Path
def binary_name(*, target: str, version: str) -> str:
return f"unicodeit-{version}-{target}"
SUPPORTED_PLATFORMS = [
"x86_64-apple-darwin",
"aarch64-apple-darwin",
"x86_64-unknown-linux-musl",
"aarch64-unknown-linux-musl",
]
def main():
parser = argparse.ArgumentParser(
description=__doc__,
)
parser.add_argument("--out", help="Where to place the built files", default="staging")
parser.add_argument("--version", help="The version that is being built", required=True)
parser.add_argument("--no-clean", help="Do not run `cargo clean`", dest='clean', action='store_false')
args = parser.parse_args()
out_dir = Path(args.out)
if args.clean:
print("Running `cargo clean`")
subprocess.run(['cargo', '+stable', 'clean'], check=True)
if out_dir.is_dir():
shutil.rmtree(out_dir)
out_dir.mkdir(exist_ok=False)
for target in SUPPORTED_PLATFORMS:
print(f"Building for {target!r}")
subprocess.run(
['cargo', '+stable', 'zigbuild', '--target', target, '--workspace', '--release'],
check=True,
)
target_build_dir = Path("target", target, "release")
assert target_build_dir.is_dir()
desired_binary = target_build_dir / "unicodeit"
assert desired_binary.is_file()
result_binary_path = out_dir / binary_name(target=target, version=args.version)
shutil.copy2(desired_binary, result_binary_path)
with open(f'{result_binary_path}.sha256sum', 'wt') as hashfile:
subprocess.run(
['sha256sum', result_binary_path],
check=True,
stdout=hashfile,
)
subprocess.run(
['gpg', "--armor", "--detach-sign", result_binary_path.name],
cwd=out_dir,
check=True,
)
if __name__ == "__main__":
main()