Files
euzuandGitHub d31c05463e refactored documentation (#645)
* refactored documentation
2026-03-15 10:15:08 +01:00

162 lines
4.6 KiB
Makefile

# OS Detection
OS := $(shell uname -s)
ARCH := $(shell uname -m)
# Paths
CARGO_BIN_DIR := $(HOME)/.cargo/bin
# Tool Commands
RUSTUP := $(CARGO_BIN_DIR)/rustup
CARGO := $(CARGO_BIN_DIR)/cargo
CROSS := $(CARGO_BIN_DIR)/cross
TRUNK := $(CARGO_BIN_DIR)/trunk
WASM_BINDGEN := $(CARGO_BIN_DIR)/wasm-bindgen
CARGO_SET_VERSION := $(CARGO_BIN_DIR)/cargo-set-version
MDBOOK := $(CARGO_BIN_DIR)/mdbook
# Explicitly force stable/nightly to avoid system-wide overrides
CARGO_STABLE := $(CARGO) +stable
CARGO_NIGHTLY := $(CARGO) +nightly
CROSS := cross
TRUNK := trunk
# Colors for terminal output
AQUA := \033[36m
RESET := \033[0m
BOLD := \033[1m
.DEFAULT_GOAL := help
.PHONY: help
help: ## Display this help
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make $(AQUA)<target>$(RESET)\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " $(AQUA)%-26s$(RESET) %s\n", $$1, $$2 } /^##@/ { printf "\n$(BOLD)%s$(RESET)\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
##@ Prerequisites:
.PHONY: install-tools
install-tools: rustup install-nightly-fmt cross trunk wasm-bindgen cargo-set-version mdbook markdownlint ## Install required development tools
.PHONY: install-nightly-fmt
install-nightly-fmt: ## Install nightly toolchain specifically for formatting
@echo "📦 Ensuring nightly rustfmt is available"
@$(RUSTUP) toolchain install nightly --component rustfmt --profile minimal
@echo "✅ Nightly rustfmt ready"
.PHONY: rustup
rustup: $(RUSTUP) ## Install Rust toolchain and cargo
$(RUSTUP):
@echo "📦 Installing cargo"
@curl -sL https://sh.rustup.rs | sh -s -- -y
@echo "✅ Cargo installed"
.PHONY: cross
cross: $(CROSS) ## Install cross (multi-platform build tool)
$(CROSS):
@echo "📦 Installing cross"
@$(CARGO) install cross
@echo "✅ Cross installed"
.PHONY: trunk
trunk: $(TRUNK) ## Install trunk (frontend build tool)
$(TRUNK):
@echo "📦 Installing trunk"
@$(CARGO) install trunk
@echo "✅ Trunk installed"
.PHONY: wasm-bindgen
wasm-bindgen: $(WASM_BINDGEN) ## Install wasm-bindgen CLI (for frontend builds)
$(WASM_BINDGEN):
@echo "📦 Installing wasm-bindgen CLI"
@$(CARGO) install wasm-bindgen-cli
@echo "✅ wasm-bindgen CLI installed"
.PHONY: cargo-set-version
cargo-set-version: $(CARGO_SET_VERSION) ## Install cargo-set-version (for version management)
$(CARGO_SET_VERSION):
@echo "📦 Installing $@"
@$(CARGO) install cargo-edit
@echo "✅ $@ installed"
.PHONY: mdbook
mdbook: $(MDBOOK) ## Install mdBook (documentation generator)
$(MDBOOK):
@echo "📦 Installing mdBook"
@$(CARGO) install mdbook
@echo "✅ mdBook installed"
.PHONY: markdownlint
markdownlint: ## Install markdownlint-cli2 (requires npm)
@echo "📦 Installing markdownlint-cli2"
@command -v npm >/dev/null 2>&1 || { \
echo "❌ npm not found. Please install Node.js and npm first."; \
exit 1; \
}
@npm install -g markdownlint-cli2
@echo "✅ markdownlint-cli2 installed"
##@ Development:
.PHONY: test
test: ## Run all workspace tests (Stable)
@echo "==> Running tests (stable)"
$(CARGO_STABLE) test --workspace
.PHONY: lint
lint: ## Run clippy linter (Stable)
@echo "==> Running clippy (stable)"
$(CARGO_STABLE) clippy --workspace -- -D warnings
.PHONY: lint-fix
lint-fix: ## Automatically fix clippy suggestions (Stable)
@echo "==> Applying clippy auto-fixes"
$(CARGO_STABLE) clippy --fix --workspace --allow-dirty --allow-staged -- -D clippy::uninlined_format_args
.PHONY: fmt
fmt: ## Format all code using nightly rules (Compact)
@echo "==> Formatting code (nightly)"
$(CARGO_NIGHTLY) fmt --all
.PHONY: fmt-check
fmt-check: ## Check if code follows formatting rules (Nightly)
@echo "==> Checking formatting (nightly)"
$(CARGO_NIGHTLY) fmt --all -- --check
.PHONY: markdown-lint
markdown-lint: ## Lint markdown files
@echo "==> Linting markdown files"
@command -v markdownlint-cli2 >/dev/null 2>&1 || { \
echo "❌ markdownlint-cli2 not found. Install with: npm install -g markdownlint-cli2"; \
exit 1; \
}
@markdownlint-cli2 "**/*.md"
@echo "✅ Markdown linting complete"
.PHONY: docs
docs: mdbook ## Build static documentation into frontend/build/docs
@echo "==> Building documentation"
@$(MDBOOK) build
@echo "✅ Documentation built at frontend/build/docs"
.PHONY: docs-serve
docs-serve: mdbook ## Serve documentation locally with mdBook
@echo "==> Serving documentation"
@$(MDBOOK) serve --open
.PHONY: docs-clean
docs-clean: ## Remove generated documentation output
@echo "==> Removing generated documentation"
@rm -rf frontend/build/docs
@echo "✅ Documentation output removed"
.PHONY: web-dist
web-dist: mdbook trunk ## Build static documentation and frontend assets
@echo "==> Building web assets"
@./bin/build_fe.sh release
@echo "✅ Web assets built"