Build System and Build Tools in macro-inc/macro: A Complete Guide
The macro-inc/macro repository uses the Just command runner as its primary build orchestration tool alongside Cargo, with a root justfile defining recipes that compile, test, and package over 80 Rust crates across the workspace.
The macro-inc/macro codebase is a Rust-centric monorepo organized as a Cargo workspace containing more than 80 individual crates. Understanding the build system and build tools used in this project is essential for compiling microservices, running integration tests, or packaging Lambda functions for deployment. The repository leverages just—a modern command runner—as its primary task orchestrator, while relying on Cargo for the actual Rust compilation.
The Primary Build Orchestrator: Just
At the heart of the build system is just, a command runner that provides concise, script-like recipes for common development tasks. Unlike traditional build systems, just focuses on running commands rather than managing dependencies or compilation units, making it ideal for coordinating a complex Cargo workspace.
The repository contains a top-level justfile that defines high-level recipes for building, testing, and packaging all services. These recipes invoke standard Cargo commands (cargo build, cargo test, cargo fmt, etc.) to compile individual crates, while also handling auxiliary tasks like Docker container management and Lambda artifact packaging.
Rust Compilation with Cargo Workspaces
While just handles orchestration, Cargo performs the actual compilation work. The root Cargo.toml defines the workspace structure, enumerating all member crates across the services/, crates/, and infra/ directories. When you run a just recipe, it ultimately calls Cargo with appropriate flags for the entire workspace or specific subsets of crates.
This separation of concerns allows developers to use just for high-level workflows while retaining direct access to Cargo for low-level build control when needed.
Essential Build Commands and Workflows
The root justfile provides standardized recipes for common development tasks. Here are the primary build commands available:
-
just build— Compiles every crate in the workspace in debug mode by runningcargo build --workspace, producing binaries and libraries for the entire system. -
just build_lambdas— Builds only the Lambda functions usingcargo build --releasefor each Lambda crate, then packages the artifacts for AWS deployment. -
just check— Performs static analysis withcargo check, providing fast type-checking without producing final binaries. -
just test— Starts required Docker containers (Postgres, OpenSearch, etc.) and executescargo test --workspaceto run the full test suite. -
just fmt— Invokescargo fmtto automatically format all Rust source files according to the project style guidelines. -
just clippy— Runscargo clippywith the repository’s recommended lint configuration to catch common mistakes and anti-patterns.
To execute any of these commands, run them from the repository root:
# Build everything in debug mode
just build
# Run static analysis without full compilation
just check
# Start dependencies and run all tests
just test
Service-Specific Build Configuration
For developers working on individual microservices, the repository provides granular control through service-specific justfiles located in each service directory.
For example, to build only the email service, navigate to its directory and invoke the local justfile:
cd services/email_service
just build
According to the macro-inc/macro source code, these service-specific configurations reside at paths like services/email_service/justfile and services/document_storage_service/justfile. Similarly, infrastructure components maintain their own build scripts, such as the justfile located at infra/stacks/macrodb/justfile for the MacroDB stack.
Key Build System Files
Several configuration files define the build behavior across the repository:
-
justfile(root) — The central orchestration file defining main recipes for the entire workspace, including build, test, and deployment commands. -
Cargo.toml(root) — Declares the Cargo workspace and lists all member crates, establishing the dependency graph for the build system. -
services/*/justfile— Service-specific recipes for building, packaging, or running individual microservices like the email service or document storage service. -
crates/*/Cargo.toml— Individual crate manifest files (e.g.,crates/email/Cargo.toml) that define dependencies, features, and build settings for each component. -
infra/stacks/*/justfile— Build and deployment scripts for infrastructure components, handling provisioning tasks alongside Rust compilation.
Summary
- The macro-inc/macro repository uses
justas its primary task runner and Cargo as its Rust compiler, creating a hybrid build system optimized for a monorepo structure. - The root
justfileprovides standardized recipes includingjust build,just test, andjust build_lambdasfor workspace-wide operations. - Service-specific
justfiles in directories likeservices/email_service/allow targeted builds of individual microservices without compiling the entire workspace. - The build system integrates Docker container management for integration testing and specialized packaging for AWS Lambda deployment.
- Key configuration files include the root
justfile, rootCargo.toml, and individual manifests scattered throughout thecrates/andservices/directories.
Frequently Asked Questions
What build system does macro-inc/macro use?
The repository uses a combination of Just (a command runner) and Cargo (Rust's package manager and build tool). Just provides the high-level orchestration through recipes defined in justfiles, while Cargo handles the actual compilation of Rust code across the workspace's 80+ crates.
How do I build only one service instead of the entire workspace?
Navigate to the specific service directory and run just build from there. For example, execute cd services/email_service && just build to compile only the email service using that directory's local justfile, avoiding the overhead of building the entire workspace.
Are Make or CMake used in the macro-inc/macro build system?
No, the repository explicitly uses just instead of Make or CMake for task running. The justfile syntax is similar to Makefiles but designed specifically for running commands rather than tracking file dependencies, making it better suited for orchestrating Cargo builds and Docker workflows.
What command builds Lambda functions for deployment?
Run just build_lambdas from the repository root. This recipe executes cargo build --release for each Lambda-specific crate and handles the subsequent packaging of artifacts required for AWS deployment, streamlining the serverless release process.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →