A lightweight Python utility to quickly clone, configure, and build CMake projects β from single repos to full mono-repos.
pip install starlet-setup
# Interactive mode
starlet-setup
# Single-repo mode
starlet-setup username/repo-
Interactive Mode:
- Step-by-step instructions for all configuration options
- Shows default values for each setting
- Skips prompts for options already set via CLI flags
- Supports both single-repo and mono-repo workflows
- Choose between profile or manual repository lists
-
Single Repository Mode:
- Clone a GitHub repository with simple
username/reposyntax - Support for HTTPS (default) and SSH protocols
- Create a dedicated build directory
- Configure the project with CMake
- Build the project automatically
- Optional flags for build type, directory, cleaning, and skipping build
- Clone a GitHub repository with simple
-
Mono-repo Mode:
- Clone multiple related repositories into one workspace
- Automatically generate root CMakeLists.txt for mono-repo structure
- Build all modules together for easy debugging and development
- Customize which repositories to include
- Perfect for working across multiple interdependent projects
-
Profile Mode:
- Save frequently used mono-repo configuration as named profiles
- Quick access to predefined repository sets
- Manage multiple development environments effortlessly
- Default profile includes all core Starlet modules
-
Configurations:
- Save build settings as named configurations
- Store SSH preferences, build types, and CMake arguments
- Reuse common setups without repeating flags
- Works with both single-repo and mono-repo modes
- Python 3.6+
- Git
- CMake
pip install starlet-setuppip install git+https://github.com/masonlet/starlet-setup.gitOnce installed, you can use the starlet-setup command from anywhere.
If you get an error saying the command is not found, you may need to add Python's user scripts directory to your PATH.
Find your scripts directory:
# Run this to find your exact scripts path
python -c "import sysconfig; print(sysconfig.get_path('scripts'))"Then add it to your PATH:
Linux/macOS:
# Add to ~/.bashrc, ~/.zshrc, or equivalent
export PATH="$HOME/.local/bin:$PATH"
# Apply changes
source ~/.bashrc # or equivalentWindows (Command Prompt):
# Add to PATH via System Properties > Environment Variables
# Add: %APPDATA%\Python\ScriptsAlternatively, you can run the script directly:
python -m starlet_setup username/repoStarlet Setup supports persistent configuration through a JSON file, allowing you to save your preferred defaults (e.g., SSH mode, build directory, mono-repo repositories).
# Create a default configuration file in your current directory.
starlet-setup --init-configThis will create a .starlet-setup.json that can be edited to customize your setup preferences.
Starlet Setup checks for configuration files in this order:
./.starlet-setup.json(current directory)~/.starlet-setup.json(home directory)
Interactive Mode
When you run starlet-setup without a repository argument, it automatically enters interactive mode, guiding you through all configuration options.
# Start interactive mode
starlet-setup
# Interactive mode respects CLI flags (skips those prompts)
starlet-setup --ssh --verbose# Pre-set mono-repo flags, interactive asks for remaining options
starlet-setup --mono-repo --ssh
# Pre-set profile, interactive asks for repo and other settings
starlet-setup --profile myprofile
# Pre-set repos, interactive asks for test repo and other settings
starlet-setup --repos user/lib1 user/lib2 --verbose
# Combine multiple flags to skip multiple prompts
starlet-setup --ssh --build-type Release --no-buildStarlet Setup Interactive Mode
Enter repository (user/repo or URL): masonlet/starlet-samples
Use SSH? (y/n) [N]: y
Verbose? (y/n) [N]:
Clean build directory if exists? (y/n) [N]:
Selected mode: (1) Single Repo (2) Mono-Repo: 2
Mono-repo: (1) Use profile (2) Manual repo list: 1
Profile name: default
Build type [Debug]: Release
Build directory [build]:
Additional CMake args (space separated):
Configure only (skip build)? (y/n) [N]:
Interactive mode complete
Single Repository Mode
# Clone and build a repository via HTTPS
starlet-setup username/repo
starlet-setup https://github.com/username/repo.git
# Clone and build a repository via SSH
starlet-setup username/repo --ssh
starlet-setup git@github.com:username/repo.git# Specify build type (Debug, Release, RelWithDebInfo, MinSizeRel)
starlet-setup username/repo --build-type Release
# Specify a custom build directory
starlet-setup username/repo --build-dir my-build
# Only configure, skip building
starlet-setup username/repo --no-build
# Clean the build directory before building
starlet-setup username/repo --clean
# Show verbose output for debugging
starlet-setup username/repo --verbose
# Custom CMake args
starlet-setup username/repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++Mono-Repo Mode
Mono-repo mode sets BUILD_LOCAL=ON in the root project's CMakeLists.txt.
This flag tells your test repository to link against local modules instead of fetching them via CMake's FetchContent:
# In your test repo's CMakeLists.txt
if(NOT BUILD_LOCAL)
# Fetch dependencies from GitHub
FetchContent_Declare(starlet_engine
GIT_REPOSITORY https://github.com/masonlet/starlet-engine.git
GIT_TAG main
)
# ... other dependencies
endif()With mono-repo mode (BUILD_LOCAL=ON):
- All modules link locally from subdirectories
- Changes in any module immediately affect your test repo
- Full debugging across module boundaries
- Single unified build for the entire ecosystem
Without mono-repo mode (BUILD_LOCAL undefined):
- Dependencies fetched via FetchContent
- Standalone builds work independently
- Users can build your repo without the full ecosystem
- Automatic dependency management
This dual-mode design allows both integrated development and standalone distribution.
Note: When using --repos or --profile, mono-repo mode is automatically enabled, so the --mono-repo flag is optional.
# Clone and build default Starlet modules with a test repository
starlet-setup username/repo --mono-repo
# Use SSH instead of HTTPS
starlet-setup username/repo --mono-repo --ssh
# Clone non-default repositories
starlet-setup username/repo --repos user/lib1 user/lib2# Multiple flags
starlet-setup username/repo --mono-repo --verbose --mono-dir my-starlet
# Custom repos and multiple flags
starlet-setup username/repo --repos user/lib1 user/lib2 --ssh --verbose
# Custom CMake args
starlet-setup username/repo --mono-repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++When using mono-repo mode without --repos or --profile, the script clones repositories based on your configuration. The default profile includes:
masonlet/starlet-mathmasonlet/starlet-loggermasonlet/starlet-controlsmasonlet/starlet-scenemasonlet/starlet-graphicsmasonlet/starlet-serializermasonlet/starlet-engine- Your specified test repository (e.g.,
masonlet/starlet-samples)
Mono-repo mode creates a workspace like this:
build-mono/
βββ CMakeLists.txt # Auto-generated root project
βββ starlet-math/
βββ starlet-logger/
βββ starlet-controls/
βββ starlet-scene/
βββ starlet-graphics/
βββ starlet-serializer/
βββ starlet-engine/
βββ starlet-samples/ # Your test repo
βββ build/ # Single build output
This structure allows you to:
- Edit any module directory
- Build everything together
- Debug across module boundaries
- Commit changes without digging into build directories
Profile Mode (Saved Configurations)
# Add a new profile
starlet-setup --profile-add myprofile user/lib1 user/lib2
# List all saved profiles
starlet-setup --list-profiles
# Remove a profile
starlet-setup --profile-remove myprofile# Use the default profile
starlet-setup username/repo --profile
# Use a named profile
starlet-setup username/repo --profile myprofile
# Use a profile with SSH
starlet-setup username/repo --profile myprofile --sshConfig Mode (Saved Build Settings)
# List all saved configurations
starlet-setup --list-configs
# Add a new configuration with flags
starlet-setup --config-add myconfig --ssh --build-type Release --no-build
# Remove a configuration
starlet-setup --config-remove myconfig# Use a saved config
starlet-setup username/repo --config myconfig
# Override specific settings
starlet-setup username/repo --config myconfig --verbose
# Config with mono-repo mode
starlet-setup username/repo --mono-repo --config myconfig --sshDevelopment
git clone https://github.com/masonlet/starlet-setup.git
cd starlet-setuppip install -e .# Run all tests
pytest
# Run specific test file
pytest tests/test_config.py
# Run tests with flags
pytest -vMIT License β see LICENSE for details.