Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
eb84193
refactor(cli): split cli.rs into submodules (flags, resolved, mod)
masonlet Jun 23, 2026
14a359f
feat(cli): add BuildType/BuildSystem enums and migrate build_type fro…
masonlet Jun 23, 2026
09dffa0
refactor: extract prompts into their own module
masonlet Jun 23, 2026
f7d2d68
refactor(commands): split commands.rs into submodules (build, header,…
masonlet Jun 23, 2026
9d650ba
refactor(cli): split cli/mod.rs into submodules (args, resolve)
masonlet Jun 23, 2026
08d644f
refactor(commands): split mono.rs into submodules (config, resolve, m…
masonlet Jun 23, 2026
177116e
feat(commands): add Meson build system support with unified repos lay…
masonlet Jun 24, 2026
327f065
refactoe(tests): match src structure
masonlet Jun 24, 2026
ee37f45
refactor(config): split config.rs into types, io, crud, and display s…
masonlet Jun 24, 2026
e2390d6
refactor(utils): split utils.rs into confirm, process, and prerequisi…
masonlet Jun 24, 2026
a47f470
refactr(tests): split tests/config.rs into submodule structure mirror…
masonlet Jun 24, 2026
0faf19f
test(commands): add tests for wraps parse_project_name, parse_provide…
masonlet Jun 24, 2026
8cac5f4
refactor(cli): split build.rs into types and detect submodules
masonlet Jun 24, 2026
cf4bc21
test(cli): add tests for detect_build_system/detect_mono_build_system
masonlet Jun 24, 2026
8b91b9d
tests(commands): add tests for create_mono_repo_mesonbuild
masonlet Jun 24, 2026
d301509
refactor(commands): simplify mono repo list construction
masonlet Jun 24, 2026
c5fa2b3
refactor(commands): extract build_repo_list
masonlet Jun 24, 2026
45dff48
test(commands): add test for print_mode_header repo_name branch
masonlet Jun 24, 2026
4c01a7b
tests(prompts): add tests for ask, ask_default, and ask_yesno EOF and…
masonlet Jun 24, 2026
bd83296
test(utils): add testss for check_prerequisites
masonlet Jun 24, 2026
7527008
test(interactive): add tests for cmake/meson flag and fix must_use on…
masonlet Jun 24, 2026
da4f12e
docs: update README for Meson support
masonlet Jun 24, 2026
9686837
refactor(interactive): remove cmake/meson flag prompts from interacti…
masonlet Jun 24, 2026
45d2ab3
chore: bump v0.2.0
masonlet Jun 24, 2026
944d04f
refactor: centralize CLI error handling and cleanup exit boilerplate
masonlet Jun 24, 2026
e0ab75f
refactor(mono): deduplicate config logic
masonlet Jun 24, 2026
cf2aa8e
refactor: move status messages into helpers and fix stdout variable r…
masonlet Jun 24, 2026
25c7049
refactor: consolidate imports, move confirm to prompts, remove utils/…
masonlet Jun 24, 2026
78fa9d2
fix: add meson_flags to ConfigEntry and integrate through config add/…
masonlet Jun 24, 2026
43d7f5d
refactor(commands): re-export build_repo_list, hoist_wraps, and wrap …
masonlet Jun 24, 2026
c40c7ef
fix(utils): normalize meson command check on Windows to handle path v…
masonlet Jun 24, 2026
07e1726
chore: regenerate release.yml
masonlet Jun 24, 2026
257ab57
fix(ci): install meson
masonlet Jun 24, 2026
c4d0626
fix(utils): use is_some_and instead of map_or
masonlet Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,8 @@ jobs:
- name: Clippy
run: cargo clippy --all-targets -- -D warnings

- name: Install Meson
run: pip install meson

- name: Test
run: cargo test
12 changes: 0 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -370,15 +370,3 @@ jobs:
with:
persist-credentials: false
submodules: recursive

- name: Trigger py-wrapper release
if: ${{ !github.event.pull_request }}
run: |
VERSION="${{ needs.plan.outputs.tag }}"
VERSION="${VERSION#v}"
gh api repos/star-setup/py-wrapper/dispatches \
--method POST \
--field event_type=core-release \
--field "client_payload[version]=${VERSION}"
env:
GH_TOKEN: ${{ secrets.PY_WRAPPER_DISPATCH_TOKEN }}
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "star-setup"
version = "0.1.0"
version = "0.2.0"
edition = "2021"
repository = "https://github.com/star-setup/core"
description = "Lightweight CLI to clone, configure, and wire single or multi-repo CMake ecosystems"
Expand Down
49 changes: 34 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Star Setup

A lightweight CLI to clone, configure, and wire single or multi-repo CMake ecosystems.
A lightweight CLI to clone, configure, and wire single or multi-repo ecosystems.

[![GitHub Release](https://img.shields.io/github/v/release/star-setup/core?include_prereleases&sort=semver)](https://github.com/star-setup/core/releases)
[![CI](https://github.com/star-setup/core/actions/workflows/ci.yml/badge.svg)](https://github.com/star-setup/core/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/github/license/star-setup/core)](./LICENSE)

Expand All @@ -20,7 +21,9 @@ star-setup username/repo --repos user/lib1 user/lib2

## Prerequisites
- Git
- CMake
- At least one supported build system:
- CMake
- Meson

## Installation

Expand Down Expand Up @@ -73,7 +76,6 @@ Clean build directory if exists? (y/n) [N]:
Select mode: (1) Single Repo (2) Mono-Repo: 1
Build type [Debug]:
Build directory [build]:
Additional CMake args (space separated):
Configure only (skip build)? (y/n) [N]:

Interactive mode complete
Expand All @@ -94,10 +96,12 @@ star-setup username/repo --no-build
star-setup username/repo --clean
star-setup username/repo --verbose
star-setup username/repo --cmake-arg=-DCMAKE_CXX_COMPILER=clang++
star-setup username/repo --meson-arg=-Db_lto=true
```

### Mono-Repo Mode
Clones multiple repositories into a single workspace and generates a root `CMakeLists.txt` that wires them together as subdirectories.
Clones multiple repositories into a single workspace and auto-detects the build system. For CMake projects, generates a root `CMakeLists.txt` wiring all repositories as subdirectories. For Meson projects, generates a root `meson.build` and auto-generates local `.wrap` files bridging canonical dependency names to cloned directories.

```bash
# Manual repo list
star-setup username/repo --repos user/lib1 user/lib2
Expand All @@ -109,29 +113,43 @@ star-setup username/repo --profile myprofile
star-setup username/repo --repos user/lib1 user/lib2 --ssh --mono-dir my-workspace
```

#### Workspace Structure
#### Workspace Structure (CMake)
```
build-mono/
├── CMakeLists.txt # Auto-generated root project
├── lib1/
├── lib2/
├── my-repo/ # Test repository
└── build/ # Build output
├── CMakeLists.txt # Auto-generated root project
├── repos/
│ ├── user-my-repo/ # Test repository
│ ├── user-lib1/
│ └── user-lib2/
└── build/ # Build output
```

#### BUILD_LOCAL
##### BUILD_LOCAL
Mono-repo mode sets `-DBUILD_LOCAL=ON` when configuring CMake. This flag tells your test repository to link against local module directories instead of fetching them remotely via FetchContent:
```cmake
# In your test repo's CMakeLists.txt
if(NOT BUILD_LOCAL)
FetchContent_Declare(mylib
GIT_REPOSITORY https://github.com/user/mylib.git
GIT_TAG main
)
FetchContent_Declare(mylib
GIT_REPOSITORY https://github.com/user/mylib.git
GIT_TAG main
)
endif()
```
This allows the same repository to work both standalone (fetching dependencies automatically) and inside a mono-repo workspace (linking locally for full cross-module debugging).

#### Workspace Structure (Meson)
```
build-mono/
├── meson.build # Auto-generated root project
├── repos/
│ ├── user-my-repo/ # Test repository
│ ├── user-lib1/
│ ├── user-lib2/
│ ├── lib1.wrap # Auto-generated local wrap
│ └── lib2.wrap # Auto-generated local wrap
└── build/ # Build output
```

### Profile Mode
Profiles represent a saved ecosystem of libraries commonly used together.
```bash
Expand All @@ -152,6 +170,7 @@ star-setup username/repo --profile myprofile
Config files are checked in this order:
- `./.star-setup.json` (current directory)
- `~/.star-setup.json` (home directory)

```bash
# Initialize a default config file
star-setup --init-config
Expand Down
Loading
Loading