| Crates.io | solarboat |
| lib.rs | solarboat |
| version | 0.8.8 |
| created_at | 2025-02-08 14:23:56.96334+00 |
| updated_at | 2025-09-01 14:31:49.355012+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 | 541,972 |
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.
Why "Solarboat"?Inspired by the Ancient Egyptian solar boats that carried Pharaohs through their celestial journey, this CLI tool is your vessel through the complexities of infrastructure management. Let Solarboat handle the operational journey, so you can focus on writing code. |
|
With Cargo (Recommended):
cargo install solarboat
# Or install a specific version
cargo install solarboat --version 0.8.8
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.8
with:
command: scan
- name: Plan Infrastructure
if: github.event_name == 'pull_request'
uses: devqik/solarboat@v0.8.8
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.8
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.8
with:
command: plan
config: ./infrastructure/solarboat.json
terraform-version: "1.8.0"
solarboat-version: "v0.8.8"
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.8
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.8
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.8
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.8
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.8
with:
command: plan
config: ./configs/solarboat.staging.json
path: ./environments/staging
- name: Plan Production
uses: devqik/solarboat@v0.8.8
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.8
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)