diff --git a/Makefile b/Makefile index 85bbb2bbe..dc8060af3 100644 --- a/Makefile +++ b/Makefile @@ -33,9 +33,7 @@ setup: setup-rust setup-godot setup-tooling decisions-sync @echo "Dev environment ready." setup-rust: - @echo "Checking Rust toolchain..." - @command -v cargo >/dev/null 2>&1 || { echo "Install Rust: https://rustup.rs"; exit 1; } - @rustup component add clippy rustfmt + @tooling/install-rust setup-godot: @GODOT_VERSION=$(GODOT_VERSION) tooling/install-godot diff --git a/docs/DEVOPS.md b/docs/DEVOPS.md index de4c35f9b..7bfdbaf77 100644 --- a/docs/DEVOPS.md +++ b/docs/DEVOPS.md @@ -22,7 +22,7 @@ Unit tests live inside their respective projects (`server/` uses `#[cfg(test)]` | Tool | Version | Purpose | |------|---------|---------| -| Rust (via rustup) | stable | Server compilation, clippy, rustfmt | +| Rust (via rustup) | stable | Server compilation, clippy, rustfmt (auto-installed by `make setup`) | | Godot | 4.x | Client editor and runtime (auto-installed to `~/bin/` by `make setup`) | | Python | 3.x | Tooling scripts, db connectors | | Make | any | Task runner (see below) | diff --git a/tooling/install-rust b/tooling/install-rust new file mode 100755 index 000000000..d8dd7ff98 --- /dev/null +++ b/tooling/install-rust @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# tooling/install-rust — Install Rust via rustup and add required components +# +# Usage: +# ./tooling/install-rust +# +# Installs rustup + stable toolchain if not present, then ensures +# clippy and rustfmt components are installed. Idempotent. + +set -euo pipefail + +if command -v rustup >/dev/null 2>&1; then + echo "Rust already installed: $(rustc --version)" + rustup component add clippy rustfmt 2>/dev/null + echo "Components verified: clippy, rustfmt" + exit 0 +fi + +echo "Installing Rust via rustup..." + +if ! command -v curl >/dev/null 2>&1; then + echo "Error: curl is required to install Rust." + exit 1 +fi + +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --component clippy rustfmt + +# Source cargo env for the rest of this script +# shellcheck source=/dev/null +. "$HOME/.cargo/env" + +echo "Rust installed: $(rustc --version)" +echo "Components: clippy, rustfmt"