# gbuild — C rewrite A C rewrite of the original [gbuild](https://spdlab.hu/gbuild) bash tool. Clone, pull, pick a target, build — all from one command. --- ## Features - **Clone or pull** — automatically clones a fresh repo on first run; pulls on subsequent runs - **Interactive target picker** — reads your `Makefile` and presents an ncurses TUI to select the build target; pass `--target` to skip it - **Timestamped log files** — every run writes a log to `~/.local/log/gbuild/` named `_.log` - **Log browser** — built-in two-pane TUI: file list on the left, live preview on the right; open in `less`, delete, or quit - **Configurable** — reads `~/.gconfig`; override with `--url` and `--user` at runtime - **`gconfig` companion** — manages `~/.gconfig` with `init`, `show`, and `help` commands --- ## Dependencies | Library | Purpose | Install (Debian/Ubuntu) | |----------|------------------------------|------------------------------| | ncurses | TUI for picker & log browser | `sudo apt install libncurses-dev` | | git | Clone / pull | `sudo apt install git` | | make | Build projects | `sudo apt install make` | | less | Open logs from browser | `sudo apt install less` | --- ## Build ```sh # Install ncurses dev headers if needed sudo apt install libncurses-dev # Build both binaries into bin/ make # Optionally install system-wide sudo make install ``` --- ## Quick setup ```sh # 1. Initialise ~/.gconfig with defaults gconfig init # 2. Fill in your values $EDITOR ~/.gconfig # 3. Verify gconfig show # 4. Build a project gbuild myproject ``` ### `~/.gconfig` format ```ini # ~/.gconfig — managed by gconfig [git] GIT_URL = http://localhost:3000 GIT_USER = jokerz [auth] # Use token-based OR password-based auth; leave the other blank GIT_TOKEN = GIT_PASSWORD = [build] DEFAULT_TARGET = CLONE_DIR = ~/projects [log] LOG_ENABLED = true LOG_DIR = ~/.local/log/gbuild ``` --- ## Usage ``` gbuild [options] gbuild --logs Options: --url Override Git base URL (default: ~/.gconfig) --user Override Git username (default: ~/.gconfig) --target Run target directly, skip interactive picker --logs Open the interactive log browser -h, --help Print this help and exit ``` ### Examples ```sh # Build with defaults gbuild myproject # Skip the target picker gbuild --target clean myproject # Different server and user for this run gbuild --url http://10.0.0.5:3000 --user alice myproject # Browse past build logs gbuild --logs ``` --- ## `gconfig` commands | Command | Description | |---------------------|-------------------------------------------------------------| | `gconfig init` | Create `~/.gconfig` with defaults (skips if already exists) | | `gconfig init --force` | Overwrite; backs up old file as `~/.gconfig.bak.` | | `gconfig show` | Print current config (auth fields masked) | | `gconfig help` | Print usage | --- ## Project layout ``` gbuild/ ├── Makefile ├── README.md ├── include/ │ ├── config.h — GConfig struct, INI load/save/init/show │ ├── git_ops.h — clone / pull │ ├── logger.h — timestamped coloured logging │ ├── make_ops.h — Makefile target parser + build runner │ └── tui.h — ncurses target picker + log browser └── src/ ├── config.c ├── gbuild.c — gbuild main() ├── gconfig.c — gconfig main() ├── git_ops.c ├── logger.c ├── make_ops.c └── tui.c ``` --- MIT License — maintained by jokerz / spdlab.hu