sticks 0.3.1

A tool for managing C and C++ projects
Documentation
<p align="center">
<a href="https://crates.io/crates/sticks" rel="noopener noreferrer">
<img src="sticks.png" alt="sticks Logo" height="150" width="150"/>
</a>
</p>
<h1 align="center">sticks</h1>

<p align="center">
  <em>A modern, lightweight CLI tool for managing C and C++ projects</em>
</p>

<p align="center">
  <a href="#features">Features</a><a href="#installation">Installation</a><a href="#quick-start">Quick Start</a><a href="#usage">Usage</a><a href="#updating">Updating</a><a href="#contributing">Contributing</a>
</p>

---

## Features


- 🚀 **Quick Project Setup** - Create new C/C++ projects with a single command
- 📁 **Multiple Build Systems** - Support for both Makefile and CMake
- 🔨 **Smart Structure** - Auto-generates organized project structure with source files and build configs
- 📦 **Dependency Management** - Easily add/remove dependencies in your Makefile
- 🔧 **Multi-Source Support** - Add multiple source files with automatic build integration
- 📝 **Auto-Generated Config** - Creates .gitignore, .editorconfig, Clang-format config, VSCode settings
- 🔄 **Self-Updating** - Built-in update mechanism that downloads from GitHub releases
- 🎯 **Zero Runtime Dependencies** - Just needs GCC; no Rust/Cargo required after installation
-**Quality Assured** - Comprehensive test suite with 18 automated tests
- 🔐 **CI/CD Pipeline** - Automated testing, building, and releases on every change

## Installation


Choose the installation method that works best for you:

### 📦 Package Managers (Recommended)


<details>
<summary><b>Arch Linux (AUR)</b></summary>

**Package Name:** `sticks-aur`

```bash
# Using an AUR helper (recommended)

yay -S sticks-aur
# or

paru -S sticks-aur

# Or manually clone from AUR

git clone https://aur.archlinux.org/sticks-aur.git
cd sticks-aur
makepkg -si
```

See [sticks-aur repository](https://github.com/mAmineChniti/sticks-aur) for packaging details.

</details>

<details>
<summary><b>Debian/Ubuntu</b></summary>

```bash
# Download the latest .deb package

wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks_0.3.0-1_amd64.deb
sudo dpkg -i sticks_*.deb
```

</details>

### 🚀 Pre-built Binaries


```bash
wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks-linux-x86_64
chmod +x sticks-linux-x86_64
sudo mv sticks-linux-x86_64 /usr/local/bin/sticks
```

### 🦀 From Cargo


```bash
cargo install sticks
```

Requires Rust toolchain from [rustup.rs](https://rustup.rs/).

### 🔨 Build from Source


```bash
# Clone the repository

git clone --recurse-submodules https://github.com/mAmineChniti/sticks.git
cd sticks

# Build release binary

cargo build --release

# Install (choose one)

sudo cp target/release/sticks /usr/local/bin/  # System-wide
# or

cp target/release/sticks ~/.local/bin/         # User only
```

## Quick Start


```bash
# Create a new C++ project with Makefile (default)

sticks cpp my-project
cd my-project

# Or with CMake build system

sticks cpp my-project --build cmake
cd my-project

# Add a dependency

sticks add libcurl

# Add more source files

sticks src utils network

# Build and run

make
./my-project
```

## Usage


### Creating Projects


**Create a new project in a subdirectory:**

```bash
sticks c my-c-project       # New C project with Makefile
sticks cpp my-cpp-project   # New C++ project with Makefile
```

**Create with CMake build system:**

```bash
sticks c my-project --build cmake       # C project with CMake
sticks cpp my-project --build cmake     # C++ project with CMake
```

**Initialize in current directory:**

```bash
sticks init c               # Initialize C project here
sticks init cpp --build cmake  # Initialize C++ project with CMake
```

### Managing Dependencies


**Add dependencies:**

```bash
sticks add libcurl              # Single dependency
sticks add openssl libpq zlib   # Multiple dependencies
```

Automatically updates your Makefile's `install-deps` target.

**Remove dependencies:**

```bash
sticks remove libcurl           # Remove single dependency
sticks remove openssl libpq     # Remove multiple dependencies
```

Cleans up the `install-deps` rule automatically when empty.

### Adding Source Files


```bash
sticks src utils               # Adds src/utils.cpp (or .c) and header
sticks src network database    # Add multiple source files
```

Sticks will:

- Create source files in `src/`
- Create corresponding headers
- Update build file (Makefile or CMakeLists.txt) automatically

### Generated Configuration Files


When you create a project, Sticks automatically generates:

- **Build System Files:** `Makefile` or `CMakeLists.txt` (your choice)
- **Git:** `.gitignore`, `.gitattributes` (pre-configured for C/C++)
- **Code Style:** `.editorconfig`, `.clang-format` (consistent formatting)
- **IDE:** VSCode `.vscode/settings.json`, `launch.json`, `tasks.json`
- **Documentation:** `README.md` (project-specific template)

This gives you a professional, production-ready project structure out of the box!

### Getting Help


```bash
sticks --help           # Show all commands
sticks <command> --help # Help for specific command
sticks --version        # Show version
```

## Updating


Sticks can update itself without requiring Rust/Cargo:

```bash
sticks update
```

This downloads the latest binary from GitHub releases and replaces your installation.

**Alternative update methods:**

```bash
# Arch Linux (using AUR package manager)

# Package name: sticks-aur

sudo pacman -Syu  # Update package database first
yay -Syu sticks-aur
# or

paru -Syu sticks-aur

# Debian/Ubuntu (download new .deb)

wget https://github.com/mAmineChniti/sticks/releases/latest/download/sticks_0.3.0-1_amd64.deb
sudo dpkg -i sticks_*.deb

# Cargo installation

cargo install sticks --force
```

## Uninstallation


```bash
# Cargo installation

cargo uninstall sticks

# Arch Linux (AUR package name: sticks-aur)

yay -R sticks-aur
# or

paru -R sticks-aur

# Debian/Ubuntu

sudo apt remove sticks

# Manual installation

sudo rm /usr/local/bin/sticks
# or

rm ~/.local/bin/sticks
```

## Project Structure


A typical sticks-managed project looks like:

```
my-project/
├── src/
│   ├── main.cpp        # Entry point
│   ├── utils.cpp       # Additional sources
│   └── network.cpp
├── include/
│   ├── utils.h         # Headers
│   └── network.h
├── build/              # Build artifacts (gitignored)
│   ├── debug/
│   └── release/
└── Makefile            # Auto-generated, customizable
```

## Technical Details


- **Language:** Rust 2021 edition
- **Dependencies:** clap 4, anyhow (build-time only)
- **Dev Dependencies:** serial_test (for isolated test execution)
- **Runtime Requirements:** GCC (for compiling your C/C++ projects)
- **Supported Architectures:** x86_64
- **Supported Platforms:** Linux (Arch, Debian, Ubuntu, others)
- **Test Coverage:** 18 comprehensive tests covering all core functionality
- **CI/CD:** Automated testing, building, and releases via GitHub Actions

## Contributing


We welcome contributions! Here's how to get involved:

1. **Report Issues:** Found a bug? [Open an issue]https://github.com/mAmineChniti/sticks/issues
2. **Submit PRs:** Fork the repo and submit pull requests
3. **Improve Docs:** Help us make documentation better

See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.

## Roadmap


- [X] Implement dependency removal with `sticks remove`
- [X] Auto-cleanup of empty `install-deps` rule
- [X] Modularized codebase
- [X] Batch dependency operations
- [X] CI/CD pipeline with automated releases
- [X] Self-update mechanism without Cargo dependency
- [X] Multi-architecture support (x86_64)
- [X] Comprehensive test suite with automated testing
- [X] Quality gates in CI/CD (tests run before releases)
- [X] CMake support alongside Makefile
- [X] Auto-generated .gitignore, .editorconfig, .clang-format
- [X] VSCode integration (settings, launch config, tasks)
- [X] Auto-generated README templates
- [ ] Integration tests for end-to-end workflows
- [ ] Template system for custom project structures
- [ ] Package manager integration (conan, vcpkg)
- [ ] Plugin system for extending functionality
- [ ] Code coverage reporting

## License


This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## Contact


**Maintainer:** mAmineChniti  
**Email:** [emin.chniti@esprit.tn](mailto:emin.chniti@esprit.tn)  
**Repository:** [github.com/mAmineChniti/sticks](https://github.com/mAmineChniti/sticks)  
**AUR Package:** [github.com/mAmineChniti/sticks-aur](https://github.com/mAmineChniti/sticks-aur)

---

<p align="center">Made with ❤️ for the C/C++ community</p>