ExecuteSoft CLI
exe is the Rust command-line tool for ExecuteSoft repository automation. Keep
workflow logic here instead of adding new Bash or Makefile implementations.
Source Layout
src/main.rs: binary entrypoint only.src/cli.rs: Clap command, subcommand, and argument definitions.src/commands.rs: top-level command dispatch, sync, release, and deployment.src/service.rs: service generation, service discovery, and compliance checks.src/gateway.rs: gateway route generation wrappers and route source validation.src/db.rs: database migration helper commands.src/dev.rs: service-local dev, explicit compose helpers, and polling watch helper.src/service_local.rs: service-only checkout setup and dev runner.src/util.rs: shared repository path, process, and Make variable helpers.src/tests.rs: focused CLI, generator, compliance helper, and help-output tests.
Local Use
From the repository root, build the local binary:
Run it from bin/exe:
Run without building bin/exe:
Install for the current user:
If exe is not found after installation, add Cargo binaries to the shell path:
Use Cases
Check Service Compliance
Use this before committing service or template changes:
check-all validates service roots under services/ and certified template
skeletons under tools/templates/.
Service-Only Checkout
Use this flow for developers who only receive one service repository or folder:
exe setup walks upward to find service.yaml, validates the service contract,
runs the local generator when one exists, downloads language dependencies, and
starts development/compose.dev.yml dependencies. Pass setup variables as
key=value pairs when needed:
Plain exe dev runs inside a service checkout. It starts service-local Docker
dependencies, loads configs/app.env.example, watches the service directory,
and runs the command implied by service.yaml:
- Go:
go run ./cmd/server - Rust:
cargo run - TypeScript:
bun run devornpm run devwhen adevscript exists - Python:
python -m src.server
Create A Service
Use the generator instead of copying service folders manually:
The generator copies the selected certified template, replaces template tokens, creates the service folder, and creates the shared protobuf contract when the local service contract exists.
Run Service Make Targets
Use service names for common operations:
When a service name is ambiguous, pass the service path.
Manage Gateway Routes
Generated gateway artifacts must come from route source files and protobufs:
Do not manually edit generated route artifacts.
Run Local Development Helpers
Plain exe dev is the normal service-local flow. Compose subcommands require
an explicit DEV_COMPOSE_FILE. Use dev watch for simple polling reloads in
services that need it.
Release And Deployment
release and deployment commands keep repository sync first-class:
deploy kubernetes runs sync before delegating to the deployment Make target.
crates.io Publishing
The crate is publish-enabled in tools/exe/Cargo.toml:
= true
To publish, first update tools/exe/Cargo.toml with public package metadata:
[]
= "executesoft"
= "0.1.0"
= "2024"
= "1.95"
= "ExecuteSoft repository automation CLI"
= "MIT"
= "https://github.com/execute-soft/executsoft"
= "README.md"
= true
The package name is global on crates.io. If executesoft is unavailable,
choose another package name. The installed binary can still be named exe
because the binary target controls the command name:
[[]]
= "exe"
= "src/main.rs"
Authenticate and verify:
Publish:
After publishing, install from crates.io:
For private company tooling, prefer local or private-registry installation until the command surface and package metadata are stable.