Raisin master files and folders

A Raisin-managed project relies on a specific directory structure and a few key configuration files.

Directory Layout

A typical project root will look like this:

my_raisin_project/
├── commands/                   # Modular command implementations
│   ├── __init__.py
│   ├── build.py                # Build command
│   ├── constants.py            # Constants
│   ├── git_commands.py         # Git integration commands
│   ├── globals.py              # Global state management
│   ├── help.py                 # Help command
│   ├── index.py                # Index commands
│   ├── install.py              # Install command
│   ├── publish.py              # Publish/release command
│   ├── setup.py                # Setup command
│   └── utils.py                # Shared utilities
├── generated/                  # Auto-generated C++ headers from .msg/.srv/.action
├── install/                    # Output directory for local development builds
├── messages/                   # (Optional) Global .msg/.srv/.action files
├── precompiled/                # (Optional) Pre-compiled third-party libraries
├── release/                    # Contains release builds, archives, and installed packages
│   ├── build/                  # Build artifacts for each target
│   └── install/                # Directory for installed packages
├── src/                        # Source code for all your C++ subprojects
│   ├── repo_a/                 # This repo is a collection of raisin packages
│   │   ├── raisin_package_a/   # this folder is a raisin package
│   │   ├── raisin_package_b/
│   │   ├── raisin_package_c/
│   │   └── ...
│   └── raisin_package_d/       # this repo is a single raisin package
├── templates/                  # C++ header templates for code generation and some code templates for raisin packages
├── CMakeLists.txt              # Top-level CMake file, auto-generated by Raisin
├── raisin.py                   # Main entry point - registers commands
├── raisin.sh                   # Bash wrapper script for easier usage
├── configuration_setting.yaml  # Main configuration (tokens, user_type, packages to ignore)
├── repositories.yaml           # Maps package names to Git repository URLs
├── requirements.txt            # Python dependencies
├── secrets.yaml                # (Deprecated) Use configuration_setting.yaml instead
└── RAISIN_IGNORE               # (Deprecated) Use packages_to_ignore in configuration_setting.yaml

The details of the raisin package structure can be found in the raisin package chapter.

Configuration Files

See Configuration for detailed information on configuration files, including configuration_setting.yaml and repositories.yaml.