Reason
Maintaining a simple JSON file with all the available tasks allows for easy customization of deployment, release, cleaning, and other project-specific actions. This ensures that everyone on the team can use, edit, and add tasks on a project level.
Features
- Define and run project-specific scripts via
.robin.json
- Support for both single commands and command sequences
- Interactive mode with fuzzy search
- List all available commands
- Add new commands easily
- Cross-platform support
- Template initialization for different project types
- Variable substitution with default values
- Enum validation for variables
Installation
# From crates.io
# From source
Usage
Initialize a new project
This creates a .robin.json
file in your current directory with some template scripts.
Using templates
# Initialize with a specific template
Each template comes with a curated set of useful commands for that specific platform or framework. For example:
- Android: Gradle commands, testing, linting (ktlint), and deployment
- iOS: Xcode build, CocoaPods, testing, SwiftLint, and Fastlane commands
- Flutter: Build, test, dependency management, and platform-specific commands
- Rails: Server, console, database tasks, testing, and code generation
- Node.js: Development, testing (Jest), TypeScript, linting (ESLint), and formatting (Prettier)
- Python: Virtual env, testing (pytest), linting (flake8), formatting (black), and type checking (mypy)
- Rust: Cargo commands for building, testing, linting (clippy), formatting, and documentation
- Go: Build, test, linting (golangci-lint), formatting, and dependency management
If a .robin.json
file already exists, you'll be prompted to confirm before overriding it.
List all commands
Interactive mode
Add a new command
Run a command
Configuration
The .robin.json
file supports both single commands and command sequences:
When using command sequences (arrays):
- Commands are executed in order
- If any command fails, the sequence stops
- Environment variables and working directory are preserved between commands
- Notifications show total execution time for the sequence
External Configuration
Robin supports including external configuration files, which is particularly useful for monorepos or sharing common scripts across projects:
Monorepo Example
Here's a typical monorepo structure using shared scripts:
monorepo/
├── common/
│ └── robin.base.json # Shared scripts for all projects
├── frontend/
│ ├── .robin.json # Frontend-specific scripts
│ └── package.json
├── backend/
│ ├── .robin.json # Backend-specific scripts
│ └── package.json
└── mobile/
├── .robin.json # Mobile-specific scripts
└── pubspec.yaml
common/robin.base.json
:
frontend/.robin.json
:
mobile/.robin.json
:
Scripts from included files are merged with local scripts, where local scripts take precedence. This allows you to:
- Share common development workflows across projects
- Maintain consistent CI/CD scripts
- Override shared scripts when needed
- Keep project-specific scripts separate from shared ones
Variable Substitution
Basic Variables
Use {{variable}}
in your scripts and pass them as --variable=XXX
when running the command:
Then run:
Default Values
You can specify default values for variables using {{variable=default}}
syntax:
Using default values:
# Override defaults:
Enum Validation
You can restrict variable values to a specific set using {{variable=[value1, value2, ...]}}
syntax:
Using enum validation:
# Simple validation
# Build modes
# Multiple validations
--env=staging \
--track=beta
Variables work in both single commands and command sequences:
Development Environment
Doctor Command
The doctor
command helps verify your development environment is properly set up:
This will check:
- 📦 Required Tools
- Cargo and Rust
- Ruby and Fastlane
- Flutter
- Node.js and npm
- 🔧 Environment Variables
- ANDROID_HOME
- JAVA_HOME
- FLUTTER_ROOT
- 📱 Platform Tools
- Android Debug Bridge (adb)
- Xcode Command Line Tools
- CocoaPods
- 🔐 Git Configuration
- user.name
- user.email
Example output:
)
Update Development Tools
To update all development tools to their latest versions:
This will update:
- Rust (via rustup)
- Flutter
- Fastlane (via gem)
- Global npm packages
- CocoaPods repositories
License
MIT © Cesar Ferreira