| Crates.io | solarboat |
| lib.rs | solarboat |
| version | 0.8.9 |
| created_at | 2025-02-08 14:23:56.96334+00 |
| updated_at | 2026-01-15 09:48:50.278746+00 |
| description | A CLI tool for intelligent Terraform operations management with automatic dependency detection |
| homepage | https://github.com/devqik/solarboat |
| repository | https://github.com/devqik/solarboat |
| max_upload_size | |
| id | 1548078 |
| size | 1,132,856 |
Built with love for Rust and infrastructure automation by Youssef Hussein (@devqik)
Solarboat is a modern CLI for Infrastructure as Code (IaC) and GitOps workflows, providing intelligent Terraform operations, automatic dependency detection, and seamless stateful/stateless module handling.
With Cargo (Recommended):
cargo install solarboat
# Or install a specific version
cargo install solarboat --version 0.8.9
From Release Binaries:
curl -L https://github.com/devqik/solarboat/releases/latest/download/solarboat-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv solarboat /usr/local/bin/
From Source:
git clone https://github.com/devqik/solarboat.git
cd solarboat
cargo build
# Scan for changed Terraform modules
solarboat scan
# Scan a specific directory
solarboat scan --path ./terraform-modules
# Scan with custom default branch
solarboat scan --default-branch develop
# Plan Terraform changes
solarboat plan
# Plan in parallel
solarboat plan --parallel 4
# Save plans to directory
solarboat plan --output-dir ./terraform-plans
# Ignore workspaces
solarboat plan --ignore-workspaces dev,staging
# Plan all stateful modules
solarboat plan --all
# Apply changes (dry-run by default)
solarboat apply
# Apply for real
solarboat apply --dry-run=false
# Ignore workspaces
solarboat apply --ignore-workspaces prod,staging
# Apply all stateful modules
solarboat apply --all
# Real-time output
solarboat plan --watch
# Combine flags
solarboat plan --all --watch --var-files vars.tfvars
main by default. Use --default-branch to override.--parallel N (max 4) to process modules in parallel. Ex: solarboat plan --parallel 3--watch mode, parallelism is forced to 1 for clean output.--watch streams real-time Terraform output. Great for debugging and monitoring.--watch, operations run silently for CI/CD cleanliness.Solarboat supports flexible configuration via JSON files.
Quick Start:
solarboat.json in your project root:{
"global": {
"ignore_workspaces": ["dev", "test"],
"var_files": ["global.tfvars"],
"workspace_var_files": {
"prod": ["prod.tfvars"]
}
},
"modules": {
"infrastructure/networking": {
"ignore_workspaces": ["test"],
"var_files": ["networking.tfvars"],
"workspace_var_files": {
"prod": ["networking-prod.tfvars"]
}
}
}
}
Environment-Specific Config:
SOLARBOAT_ENV=prod solarboat plan
Solarboat will look for solarboat.prod.json if set.
Config Precedence:
More: See CONFIGURATION.md for full docs.
Solarboat comes with a GitHub Action for CI/CD automation.
The GitHub token is optional and only needed for:
Most common scenarios:
${{ secrets.GITHUB_TOKEN }} (automatically provided by GitHub)name: Infrastructure CI/CD
on: [push, pull_request]
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Scan for Changes
uses: devqik/solarboat@v0.8.9
with:
command: scan
- name: Plan Infrastructure
if: github.event_name == 'pull_request'
uses: devqik/solarboat@v0.8.9
with:
command: plan
output-dir: terraform-plans
# Add token for PR comments
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Apply Changes
if: github.ref == 'refs/heads/main'
uses: devqik/solarboat@v0.8.9
with:
command: apply
apply-dryrun: false
name: Infrastructure Automation
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
pull-requests: write # For PR comments
jobs:
infrastructure:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Plan Infrastructure Changes
if: github.event_name == 'pull_request'
uses: devqik/solarboat@v0.8.9
with:
command: plan
config: ./infrastructure/solarboat.json
terraform-version: "1.8.0"
solarboat-version: "v0.8.9"
parallel: 3
ignore-workspaces: dev,test
output-dir: terraform-plans
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Apply Infrastructure Changes
if: github.ref == 'refs/heads/main'
uses: devqik/solarboat@v0.8.9
with:
command: apply
apply-dryrun: false
config: ./infrastructure/solarboat.json
terraform-version: "1.8.0"
parallel: 2
continue-on-error: false
Solarboat now supports intelligent change detection with pipeline-supplied commit information for more reliable CI/CD workflows.
The GitHub Action automatically detects the appropriate commits based on the event:
base.sha and head.sha from the PRbefore and after commit hashesFor advanced use cases, you can manually specify commit ranges:
- name: Custom Commit Comparison
uses: devqik/solarboat@v0.8.9
with:
command: plan
base-commit: abc1234
head-commit: def5678
base-branch: main
head-branch: feature/new-module
When no commit information is provided, Solarboat runs in local mode:
- name: Local Development Mode
uses: devqik/solarboat@v0.8.9
with:
command: plan
recent-commits: 5 # Check last 5 commits for changes
| Input | Description | Default | Required |
|---|---|---|---|
command |
Command to run (scan, plan, apply) |
- | ✅ |
github_token |
GitHub token for PR comments | - | ❌ |
config |
Path to Solarboat configuration file | auto-detect | ❌ |
output-dir |
Directory for plan files | terraform-plans |
❌ |
apply-dryrun |
Run apply in dry-run mode | true |
❌ |
ignore-workspaces |
Comma-separated workspaces to ignore | - | ❌ |
var-files |
Comma-separated var files to use | - | ❌ |
path |
Directory to scan for modules | . |
❌ |
all |
Process all stateful modules | false |
❌ |
watch |
Show real-time output | false |
❌ |
parallel |
Number of parallel processes (max 4) | 1 |
❌ |
default-branch |
Default git branch for comparisons | main |
❌ |
recent-commits |
Recent commits to check (local mode) | 5 |
❌ |
base-commit |
Base commit SHA for comparison | auto-detect | ❌ |
head-commit |
Head commit SHA for comparison | auto-detect | ❌ |
base-branch |
Base branch name for comparison | auto-detect | ❌ |
head-branch |
Head branch name for comparison | auto-detect | ❌ |
solarboat-version |
Solarboat CLI version to use | latest |
❌ |
terraform-version |
Terraform version to use | latest |
❌ |
continue-on-error |
Continue workflow on Solarboat failure | false |
❌ |
| Output | Description |
|---|---|
result |
Command result (success or failure) |
plans-path |
Path to generated Terraform plans |
changed-modules |
Number of changed modules detected |
Conditional workflows based on outputs:
- name: Plan Infrastructure
id: plan
uses: devqik/solarboat@v0.8.9
with:
command: plan
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Notify on Changes
if: steps.plan.outputs.changed-modules != '0'
run: |
echo "🚨 ${{ steps.plan.outputs.changed-modules }} modules changed!"
echo "Plans available at: ${{ steps.plan.outputs.plans-path }}"
Multi-environment with configuration:
- name: Plan Staging
uses: devqik/solarboat@v0.8.9
with:
command: plan
config: ./configs/solarboat.staging.json
path: ./environments/staging
- name: Plan Production
uses: devqik/solarboat@v0.8.9
with:
command: plan
config: ./configs/solarboat.prod.json
path: ./environments/production
ignore-workspaces: dev,staging,test
Error handling:
- name: Apply with Error Handling
uses: devqik/solarboat@v0.8.9
with:
command: apply
apply-dryrun: false
continue-on-error: true
- name: Handle Failures
if: failure()
run: |
echo "🚨 Infrastructure apply failed!"
echo "Check logs and retry manually"
For PR comments, ensure your workflow has the correct permissions:
permissions:
contents: read # Read repository contents
pull-requests: write # Comment on pull requests
Note: ${{ secrets.GITHUB_TOKEN }} is automatically provided by GitHub with repository access. Custom tokens are only needed for cross-repository access or enhanced permissions.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the BSD-3-Clause License - see the LICENSE file for details.
This project needs your support! If you find Solarboat CLI useful, please consider:
Your support will help make this project better and encourage its continued development.
~ Youssef Hussein (@devqik (Creator)