Fleet is a lightweight Rust-based tool for automated repository monitoring and updating.
It runs a background daemon (fleetd
) that watches your Git repositories, detects remote changes, and executes predefined update commands.
Its goal is to make continuous deployment and synchronization simple without relying on heavy CI/CD pipelines.

- Watch multiple repositories at once
- Automatically detect new commits on remote branches
- Execute update scripts when changes are found
- Per-project logs accessible via CLI
- Start, stop, and resume repository watches dynamically
- YAML-based configuration for flexible update workflows
- Parallel and sequential job execution in pipelines
- Detect cyclic dependencies in pipeline jobs
- Optional per-step environment variables and container execution
- Respect blocking and non-blocking step configuration
- Notifications on pipeline completion (only discord for now)
- Statistics overview of watched projects with CPU/memory usage and success/failure counts
# Clone the repository
git clone https://github.com/pepedinho/fleet.git
cd fleet
# Install fleet
make install
Add your first project:
fleet watch
Command | Description |
---|---|
fleet watch |
Add a project to the watch list (run inside the project dir) (-b to assign branch) |
fleet logs [id|name] |
Show logs for a project (current dir by default) (-f to follow logs) |
fleet ps |
List watched projects (-a to show stopped projects) |
fleet stop <id> |
Stop watching a project |
fleet up <id> |
Resume watching a stopped project |
fleet rm <id> |
Remove a monitored project |
fleet stats |
Show interactive statistics of all watched projects |
Each project defines its pipelines with a fleet.yml
file.
Example fleet.yml:
timeout: 200 # Timeout in seconds for non-blocking commands (default 300)
pipeline:
notifications:
on: [success, failure]
channels:
- type: discord
url: https://discord.com/api/webhooks/...
jobs:
build:
steps:
- cmd: cargo build
test_rust:
needs: [build]
env:
RUST_LOG: debug
steps:
- cmd: cargo test
echo_test:
needs: [build]
steps:
- cmd: echo test 1
container: ubuntu:latest
deploy:
needs: [test_rust, echo_test]
steps:
- cmd: echo "deploy complete"
blocking: true
Workflow Exemple
New commit detected
│
▼
+-----+
|build|
+--+--+
│
┌-----------┴-----------┐
▼ ▼
+-----------+ +-----------+
| test_rust | | echo_test |
+-----------+ +-----------+
│ │
└-----------┬-----------┘
▼
+--------+
| deploy |
+--------+
│
┌-------┴---------┐
▼ ▼
+---------------+ +---------+
| Notifications | | Stats |
+---------------+ +---------+
Key Points:
timeout
→ global timeout for async jobs (default 300s).needs
→ define dependencies between jobs.blocking: true
→ fire and forget.env
→ per-step environment variables.container
→ run step in Docker container.notifications
→ external alerts (success/failure).
Detailed workflow
-
fleetd
runs in the background and periodically checks repositories. -
When a new commit is detected:
- Jobs are executed respecting dependencies.
- Independent jobs run in parallel.
- Failures propagate and block dependent jobs.
- Cyclic dependencies are detected and reported before execution.
- Environment variables and containers are supported per step.
- Notifications are sent to configured channels (Discord, webhook, etc.).
-
Logs for each project are stored and retrievable via
fleet logs
. -
Global statistics are available via
fleet stats
.