Loading justfile +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ codegen: cargo fmt cargo check install name: uv run ./scripts/install.py {{name}} install name *ARGS: uv run ./scripts/install.py {{name}} {{ARGS}} # ------------------------------------------------ Loading scripts/install.py +44 −23 Original line number Diff line number Diff line #!/usr/bin/env python from dataclasses import dataclass import argparse import os import subprocess INSTALLERS = {} Loading @@ -14,46 +14,67 @@ def installer(name): return decorator @dataclass(kw_only=True) class CliArgs: name: str offline: bool = False @staticmethod def parse(): parser = argparse.ArgumentParser() parser.add_argument("name", type=str, choices=list(INSTALLERS.keys())) parser.add_argument("--offline", action="store_true") args = parser.parse_args() return CliArgs(**args.__dict__) def sh(cmd): os.system(cmd) print(cmd) subprocess.run(cmd, shell=True, check=True, stdin=subprocess.DEVNULL) def cargo_install( args: CliArgs, package: str, *, features: list[str] | None = None, bin: str | None = None, ): opt_offline = "--offline" if args.offline else "" opt_features = f"--features {','.join(features)}" if features else "" opt_bin = f"--bin {bin}" if bin else "" sh(f"cargo install --path crates/{package} {opt_offline} {opt_features} {opt_bin}") @installer("s3s-fs") def install_s3s_fs(): sh("cargo install --path crates/s3s-fs --features binary") def install_s3s_fs(args: CliArgs): cargo_install(args, "s3s-fs", features=["binary"]) @installer("s3s-proxy") def install_s3s_proxy(): sh("cargo install --path crates/s3s-proxy") def install_s3s_proxy(args: CliArgs): cargo_install(args, "s3s-proxy") @installer("s3s-e2e") def install_s3s_e2e(): sh("cargo install --path crates/s3s-test --bin s3s-e2e") def install_s3s_e2e(args: CliArgs): cargo_install(args, "s3s-test", bin="s3s-e2e") @installer("all") def install_all(): def install_all(args: CliArgs): if not args.offline: sh("cargo fetch") args.offline = True for name, f in INSTALLERS.items(): if name != "all": f() @dataclass(kw_only=True, frozen=True) class CliArgs: name: str @staticmethod def parse(): parser = argparse.ArgumentParser() parser.add_argument("name", type=str, choices=list(INSTALLERS.keys())) args = parser.parse_args() return CliArgs(**args.__dict__) f(args) def main(args: CliArgs): INSTALLERS[args.name]() INSTALLERS[args.name](args) if __name__ == "__main__": Loading Loading
justfile +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ codegen: cargo fmt cargo check install name: uv run ./scripts/install.py {{name}} install name *ARGS: uv run ./scripts/install.py {{name}} {{ARGS}} # ------------------------------------------------ Loading
scripts/install.py +44 −23 Original line number Diff line number Diff line #!/usr/bin/env python from dataclasses import dataclass import argparse import os import subprocess INSTALLERS = {} Loading @@ -14,46 +14,67 @@ def installer(name): return decorator @dataclass(kw_only=True) class CliArgs: name: str offline: bool = False @staticmethod def parse(): parser = argparse.ArgumentParser() parser.add_argument("name", type=str, choices=list(INSTALLERS.keys())) parser.add_argument("--offline", action="store_true") args = parser.parse_args() return CliArgs(**args.__dict__) def sh(cmd): os.system(cmd) print(cmd) subprocess.run(cmd, shell=True, check=True, stdin=subprocess.DEVNULL) def cargo_install( args: CliArgs, package: str, *, features: list[str] | None = None, bin: str | None = None, ): opt_offline = "--offline" if args.offline else "" opt_features = f"--features {','.join(features)}" if features else "" opt_bin = f"--bin {bin}" if bin else "" sh(f"cargo install --path crates/{package} {opt_offline} {opt_features} {opt_bin}") @installer("s3s-fs") def install_s3s_fs(): sh("cargo install --path crates/s3s-fs --features binary") def install_s3s_fs(args: CliArgs): cargo_install(args, "s3s-fs", features=["binary"]) @installer("s3s-proxy") def install_s3s_proxy(): sh("cargo install --path crates/s3s-proxy") def install_s3s_proxy(args: CliArgs): cargo_install(args, "s3s-proxy") @installer("s3s-e2e") def install_s3s_e2e(): sh("cargo install --path crates/s3s-test --bin s3s-e2e") def install_s3s_e2e(args: CliArgs): cargo_install(args, "s3s-test", bin="s3s-e2e") @installer("all") def install_all(): def install_all(args: CliArgs): if not args.offline: sh("cargo fetch") args.offline = True for name, f in INSTALLERS.items(): if name != "all": f() @dataclass(kw_only=True, frozen=True) class CliArgs: name: str @staticmethod def parse(): parser = argparse.ArgumentParser() parser.add_argument("name", type=str, choices=list(INSTALLERS.keys())) args = parser.parse_args() return CliArgs(**args.__dict__) f(args) def main(args: CliArgs): INSTALLERS[args.name]() INSTALLERS[args.name](args) if __name__ == "__main__": Loading