← Back to README · Testing · Manual Testing · Command Set Format
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
To contribute command sets to the bundled repository:
- Create a well-documented YAML file (see Command Set Format)
- Include platform-specific commands where applicable
- Test on multiple platforms
- Place it in the appropriate subdirectory under
repository/ - Submit via Pull Request
- Go 1.21 or later
- Make (optional)
git clone https://github.com/OpsGuild/ShellDock.git
cd shelldock
go mod download# Simple build
go build -o shelldock .
# Using Makefile
make build
# Build for all platforms
make build-all# Run all unit tests
go test ./... -v
# Run integration test suite
./test/test-suite.sh
# Run feature tests
./test/test-all-features.sh
# Using Makefile
make testSee Testing Guide for detailed testing documentation and Manual Testing Guide for manual testing procedures.
# Debian package
make deb
# RPM package
make rpm
# Arch package
make archshelldock/
├── internal/
│ ├── cli/ # Command-line interface
│ ├── config/ # Configuration management
│ ├── repo/ # Repository management
│ └── tui/ # Terminal UI
├── examples/ # Example command sets
├── repository/ # Bundled command sets
├── packaging/ # Package configurations
├── scripts/ # Installation scripts
├── test/ # Integration tests
├── docs/ # Documentation
├── static/ # Static assets
├── go.mod
├── go.sum
├── main.go
├── Makefile
└── README.md
The bundled repository is organized into subdirectories by category:
repository/
├── databases/ # postgres, mysql (+ mariadb), redis
├── devops/ # docker, docker-compose, kubernetes, pm2, terraform, ansible
├── editors/ # nvim
├── languages/ # go, nodejs, python, rust
├── network/ # alias-ip, reset-network
├── security/ # openssh, ufw, fail2ban, unattended-upgrades
├── system/ # swap, sysinfo, cleanup, hostname, timezone, users
├── vcs/ # git
└── web/ # nginx, certbot, caddy
Subdirectories are transparent to users — commands are accessed by name only (e.g. shelldock docker), not by path.
Your custom command sets are stored in ~/.shelldock/. When you run a command, ShellDock checks:
- Local repository (
~/.shelldock/) — checked first - Bundled repository — checked if not found locally
This allows you to override bundled commands with your own versions.