Commit c154b42c authored by Nugine's avatar Nugine
Browse files

feat(scripts): add installer

parent f296f374
Loading
Loading
Loading
Loading
+22 −15
Original line number Diff line number Diff line
dev:
    just fetch
    just fmt
    just lint
    just test

fetch:
    uv sync
    cargo fetch

fmt:
    uvx ruff format
    cargo fmt

dev:
    cargo fmt
lint:
    uvx ruff check
    cargo clippy --all-features --all-targets
    cargo test

test:
    cargo test --all-features

doc:
    RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --open --no-deps --all-features

download-model:
    ./scripts/download-model.py --force codegen/s3.json
model:
    uv run model/main.py update

codegen:
    ./scripts/download-model.py codegen/s3.json
    cargo run -p s3s-codegen -- codegen/s3.json
    cargo run -p s3s-codegen -- model/s3.json
    cargo fmt
    cargo check

install-s3s-fs:
    cargo install --offline --path crates/s3s-fs --features binary

install-s3s-proxy:
    cargo install --offline --path crates/s3s-proxy
install name:
    uv run ./scripts/install.py {{name}}

install:
    just install-s3s-fs
    just install-s3s-proxy
# ------------------------------------------------

sync-version:
    cargo set-version -p s3s            0.11.0-dev

scripts/install.py

0 → 100755
+60 −0
Original line number Diff line number Diff line
#!/usr/bin/env python
from dataclasses import dataclass
import argparse
import os

INSTALLERS = {}


def installer(name):
    def decorator(f):
        INSTALLERS[name] = f
        return f

    return decorator


def sh(cmd):
    os.system(cmd)


@installer("s3s-fs")
def install_s3s_fs():
    sh("cargo install --offline --path crates/s3s-fs --features binary")


@installer("s3s-proxy")
def install_s3s_proxy():
    sh("cargo install --offline --path crates/s3s-proxy")


@installer("s3s-e2e")
def install_s3s_e2e():
    sh("cargo install --offline --path crates/s3s-test --bin s3s-e2e")


@installer("all")
def install_all():
    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__)


def main(args: CliArgs):
    INSTALLERS[args.name]()


if __name__ == "__main__":
    main(CliArgs.parse())