From b89450f54d8739067fc103fa898af3a6dbd55114 Mon Sep 17 00:00:00 2001 From: bestgopher <84328409@qq.com> Date: Thu, 7 Aug 2025 22:37:05 +0800 Subject: [PATCH] replace make with just (#349) --- .dockerignore | 1 + Justfile | 258 ++++++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- crates/rio/Cargo.toml | 1 + 4 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Justfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..eb5a316c --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +target diff --git a/Justfile b/Justfile new file mode 100644 index 00000000..854b0e4e --- /dev/null +++ b/Justfile @@ -0,0 +1,258 @@ +DOCKER_CLI := env("DOCKER_CLI", "docker") +IMAGE_NAME := env("IMAGE_NAME", "rustfs:v1.0.0") +DOCKERFILE_SOURCE := env("DOCKERFILE_SOURCE", "Dockerfile.source") +DOCKERFILE_PRODUCTION := env("DOCKERFILE_PRODUCTION", "Dockerfile") +CONTAINER_NAME := env("CONTAINER_NAME", "rustfs-dev") + +[group("๐Ÿ“’ Help")] +[private] +default: + @just --list --list-heading $'๐Ÿฆ€ RustFS justfile manual page:\n' + +[doc("show help")] +[group("๐Ÿ“’ Help")] +help: default + +[doc("run `cargo fmt` to format codes")] +[group("๐Ÿ‘† Code Quality")] +fmt: + @echo "๐Ÿ”ง Formatting code..." + cargo fmt --all + +[doc("run `cargo fmt` in check mode")] +[group("๐Ÿ‘† Code Quality")] +fmt-check: + @echo "๐Ÿ“ Checking code formatting..." + cargo fmt --all --check + +[doc("run `cargo clippy`")] +[group("๐Ÿ‘† Code Quality")] +clippy: + @echo "๐Ÿ” Running clippy checks..." + cargo clippy --all-targets --all-features --fix --allow-dirty -- -D warnings + +[doc("run `cargo check`")] +[group("๐Ÿ‘† Code Quality")] +check: + @echo "๐Ÿ”จ Running compilation check..." + cargo check --all-targets + +[doc("run `cargo test`")] +[group("๐Ÿ‘† Code Quality")] +test: + @echo "๐Ÿงช Running tests..." + cargo nextest run --all --exclude e2e_test + cargo test --all --doc + +[doc("run `fmt` `clippy` `check` `test` at once")] +[group("๐Ÿ‘† Code Quality")] +pre-commit: fmt clippy check test + @echo "โœ… All pre-commit checks passed!" + +[group("๐Ÿค” Git")] +setup-hooks: + @echo "๐Ÿ”ง Setting up git hooks..." + chmod +x .git/hooks/pre-commit + @echo "โœ… Git hooks setup complete!" + +[doc("use `release` mode for building")] +[group("๐Ÿ”จ Build")] +build: + @echo "๐Ÿ”จ Building RustFS using build-rustfs.sh script..." + ./build-rustfs.sh + +[doc("use `debug` mode for building")] +[group("๐Ÿ”จ Build")] +build-dev: + @echo "๐Ÿ”จ Building RustFS in development mode..." + ./build-rustfs.sh --dev + +[group("๐Ÿ”จ Build")] +[private] +build-target target: + @echo "๐Ÿ”จ Building rustfs for {{ target }}..." + @echo "๐Ÿ’ก On macOS/Windows, use 'make build-docker' or 'make docker-dev' instead" + ./build-rustfs.sh --platform {{ target }} + +[doc("use `x86_64-unknown-linux-musl` target for building")] +[group("๐Ÿ”จ Build")] +build-musl: (build-target "x86_64-unknown-linux-musl") + +[doc("use `x86_64-unknown-linux-gnu` target for building")] +[group("๐Ÿ”จ Build")] +build-gnu: (build-target "x86_64-unknown-linux-gnu") + +[doc("use `aarch64-unknown-linux-musl` target for building")] +[group("๐Ÿ”จ Build")] +build-musl-arm64: (build-target "aarch64-unknown-linux-musl") + +[doc("use `aarch64-unknown-linux-gnu` target for building")] +[group("๐Ÿ”จ Build")] +build-gnu-arm64: (build-target "aarch64-unknown-linux-gnu") + +[doc("build and deploy to server")] +[group("๐Ÿ”จ Build")] +deploy-dev ip: build-musl + @echo "๐Ÿš€ Deploying to dev server: {{ ip }}" + ./scripts/dev_deploy.sh {{ ip }} + +[group("๐Ÿ”จ Build")] +[private] +build-cross-all-pre: + @echo "๐Ÿ”ง Building all target architectures..." + @echo "๐Ÿ’ก On macOS/Windows, use 'make docker-dev' for reliable multi-arch builds" + @echo "๐Ÿ”จ Generating protobuf code..." + -cargo run --bin gproto + +[doc("build all targets at once")] +[group("๐Ÿ”จ Build")] +build-cross-all: build-cross-all-pre && build-gnu build-gnu-arm64 build-musl build-musl-arm64 + +# ======================================================================================== +# Docker Multi-Architecture Builds (Primary Methods) +# ======================================================================================== + +[doc("build an image and run it")] +[group("๐Ÿณ Build Image")] +build-docker os="rockylinux9.3" cli=(DOCKER_CLI) dockerfile=(DOCKERFILE_SOURCE): + #!/usr/bin/env bash + SOURCE_BUILD_IMAGE_NAME="rustfs/rustfs-{{ os }}:v1" + SOURCE_BUILD_CONTAINER_NAME="rustfs-{{ os }}-build" + BUILD_CMD="/root/.cargo/bin/cargo build --release --bin rustfs --target-dir /root/s3-rustfs/target/{{ os }}" + echo "๐Ÿณ Building RustFS using Docker ({{ os }})..." + {{ cli }} buildx build -t $SOURCE_BUILD_IMAGE_NAME -f {{ dockerfile }} . + {{ cli }} run --rm --name $SOURCE_BUILD_CONTAINER_NAME -v $(pwd):/root/s3-rustfs -it $SOURCE_BUILD_IMAGE_NAME $BUILD_CMD + +[doc("build an image")] +[group("๐Ÿณ Build Image")] +docker-buildx: + @echo "๐Ÿ—๏ธ Building multi-architecture production Docker images with buildx..." + ./docker-buildx.sh + +[doc("build an image and push it")] +[group("๐Ÿณ Build Image")] +docker-buildx-push: + @echo "๐Ÿš€ Building and pushing multi-architecture production Docker images with buildx..." + ./docker-buildx.sh --push + +[doc("build an image with a version")] +[group("๐Ÿณ Build Image")] +docker-buildx-version version: + @echo "๐Ÿ—๏ธ Building multi-architecture production Docker images (version: {{ version }}..." + ./docker-buildx.sh --release {{ version }} + +[doc("build an image with a version and push it")] +[group("๐Ÿณ Build Image")] +docker-buildx-push-version version: + @echo "๐Ÿš€ Building and pushing multi-architecture production Docker images (version: {{ version }}..." + ./docker-buildx.sh --release {{ version }} --push + +[doc("build an image with a version and push it to registry")] +[group("๐Ÿณ Build Image")] +docker-dev-push registry cli=(DOCKER_CLI) source=(DOCKERFILE_SOURCE): + @echo "๐Ÿš€ Building and pushing multi-architecture development Docker images..." + @echo "๐Ÿ’ก push to registry: {{ registry }}" + {{ cli }} buildx build \ + --platform linux/amd64,linux/arm64 \ + --file {{ source }} \ + --tag {{ registry }}/rustfs:source-latest \ + --tag {{ registry }}/rustfs:dev-latest \ + --push \ + . + +# Local production builds using direct buildx (alternative to docker-buildx.sh) + +[group("๐Ÿณ Build Image")] +docker-buildx-production-local cli=(DOCKER_CLI) source=(DOCKERFILE_PRODUCTION): + @echo "๐Ÿ—๏ธ Building single-architecture production Docker image locally..." + @echo "๐Ÿ’ก Alternative to docker-buildx.sh for local testing" + {{ cli }} buildx build \ + --file {{ source }} \ + --tag rustfs:production-latest \ + --tag rustfs:latest \ + --load \ + --build-arg RELEASE=latest \ + . + +# Development/Source builds using direct buildx commands + +[group("๐Ÿณ Build Image")] +docker-dev cli=(DOCKER_CLI) source=(DOCKERFILE_SOURCE): + @echo "๐Ÿ—๏ธ Building multi-architecture development Docker images with buildx..." + @echo "๐Ÿ’ก This builds from source code and is intended for local development and testing" + @echo "โš ๏ธ Multi-arch images cannot be loaded locally, use docker-dev-push to push to registry" + {{ cli }} buildx build \ + --platform linux/amd64,linux/arm64 \ + --file {{ source }} \ + --tag rustfs:source-latest \ + --tag rustfs:dev-latest \ + . + +[group("๐Ÿณ Build Image")] +docker-dev-local cli=(DOCKER_CLI) source=(DOCKERFILE_SOURCE): + @echo "๐Ÿ—๏ธ Building single-architecture development Docker image for local use..." + @echo "๐Ÿ’ก This builds from source code for the current platform and loads locally" + {{ cli }} buildx build \ + --file {{ source }} \ + --tag rustfs:source-latest \ + --tag rustfs:dev-latest \ + --load \ + . + +# ======================================================================================== +# Single Architecture Docker Builds (Traditional) +# ======================================================================================== + +[group("๐Ÿณ Build Image")] +docker-build-production cli=(DOCKER_CLI) source=(DOCKERFILE_PRODUCTION): + @echo "๐Ÿ—๏ธ Building single-architecture production Docker image..." + @echo "๐Ÿ’ก Consider using 'make docker-buildx-production-local' for multi-arch support" + {{ cli }} build -f {{ source }} -t rustfs:latest . + +[group("๐Ÿณ Build Image")] +docker-build-source cli=(DOCKER_CLI) source=(DOCKERFILE_SOURCE): + @echo "๐Ÿ—๏ธ Building single-architecture source Docker image..." + @echo "๐Ÿ’ก Consider using 'make docker-dev-local' for multi-arch support" + {{ cli }} build -f {{ source }} -t rustfs:source . + +# ======================================================================================== +# Development Environment +# ======================================================================================== + +[group("๐Ÿƒ Running")] +dev-env-start cli=(DOCKER_CLI) source=(DOCKERFILE_SOURCE) container=(CONTAINER_NAME): + @echo "๐Ÿš€ Starting development environment..." + {{ cli }} buildx build \ + --file {{ source }} \ + --tag rustfs:dev \ + --load \ + . + -{{ cli }} stop {{ container }} 2>/dev/null + -{{ cli }} rm {{ container }} 2>/dev/null + {{ cli }} run -d --name {{ container }} \ + -p 9010:9010 -p 9000:9000 \ + -v {{ invocation_directory() }}:/workspace \ + -it rustfs:dev + +[group("๐Ÿƒ Running")] +dev-env-stop cli=(DOCKER_CLI) container=(CONTAINER_NAME): + @echo "๐Ÿ›‘ Stopping development environment..." + -{{ cli }} stop {{ container }} 2>/dev/null + -{{ cli }} rm {{ container }} 2>/dev/null + +[group("๐Ÿƒ Running")] +dev-env-restart: dev-env-stop dev-env-start + +[group("๐Ÿ‘ E2E")] +e2e-server: + sh scripts/run.sh + +[group("๐Ÿ‘ E2E")] +probe-e2e: + sh scripts/probe.sh + +[doc("inspect one image")] +[group("๐Ÿšš Other")] +docker-inspect-multiarch image cli=(DOCKER_CLI): + @echo "๐Ÿ” Inspecting multi-architecture image: {{ image }}" + {{ cli }} buildx imagetools inspect {{ image }} diff --git a/Makefile b/Makefile index a36880bf..c2d04805 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ build-docker: SOURCE_BUILD_CONTAINER_NAME = rustfs-$(BUILD_OS)-build build-docker: BUILD_CMD = /root/.cargo/bin/cargo build --release --bin rustfs --target-dir /root/s3-rustfs/target/$(BUILD_OS) build-docker: @echo "๐Ÿณ Building RustFS using Docker ($(BUILD_OS))..." - $(DOCKER_CLI) build -t $(SOURCE_BUILD_IMAGE_NAME) -f $(DOCKERFILE_SOURCE) . + $(DOCKER_CLI) buildx build -t $(SOURCE_BUILD_IMAGE_NAME) -f $(DOCKERFILE_SOURCE) . $(DOCKER_CLI) run --rm --name $(SOURCE_BUILD_CONTAINER_NAME) -v $(shell pwd):/root/s3-rustfs -it $(SOURCE_BUILD_IMAGE_NAME) $(BUILD_CMD) .PHONY: build-musl diff --git a/crates/rio/Cargo.toml b/crates/rio/Cargo.toml index 07aca90e..e8561b9f 100644 --- a/crates/rio/Cargo.toml +++ b/crates/rio/Cargo.toml @@ -45,3 +45,4 @@ serde_json.workspace = true md-5 = { workspace = true } [dev-dependencies] +tokio = { workspace = true, features = ["test-util"] }