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/
├── 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                   # The main Raisin script
├── repositories.yaml           # Maps package names to Git repository URLs
├── secrets.yaml                # Stores GitHub API tokens (add to .gitignore!)
└── RAISIN_IGNORE               # List of packages to exclude from builds

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

Configuration Files

repositories.yaml

Maps package names to their source Git repository URLs. This is essential for the release command (to know where to upload) and the install command (to know where to download from).

# repositories.yaml
project_a:
  url: [email protected]:your-org/project_a.git
project_b:
  url: [email protected]:your-org/project_b.git
secrets.yaml

Stores sensitive information, primarily the GitHub Personal Access Tokens (PATs) required for uploading releases. This file should never be committed to version control.

# secrets.yaml
gh_tokens:
  your-org: "ghp_xxxxxxxxxxxxxxxxxxxxxxxx"
  another-org: "ghp_yyyyyyyyyyyyyyyyyyyyyyyy"
RAISIN_IGNORE

A simple text file listing the names of packages in src/ that should be ignored by the build system. Each package name should be on a new line.

# RAISIN_IGNORE
experimental_package
broken_package