Commit dd85d176 authored by Nugine's avatar Nugine
Browse files

feat(scripts): install offline

parent 295ac935
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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}}

# ------------------------------------------------

+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 = {}

@@ -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__":