Contributing
Contributions are welcome! Please feel free to submit a Pull Request on github.com/ochorocho/shippy.
Project Structure
shippy/
├── cmd/
│ ├── root.go # Root CLI command
│ ├── config.go # Config validation command
│ └── deploy.go # Deploy command
├── internal/
│ ├── config/
│ │ ├── config.go # Configuration parser
│ │ └── template.go # Template variable processor
│ ├── composer/
│ │ └── parser.go # Composer.json parser
│ ├── rsync/
│ │ ├── sync.go # Allowlist file scanner (deny-by-default)
│ │ └── transfer.go # File transfer over SSH
│ ├── ssh/
│ │ ├── client.go # SSH client
│ │ └── executor.go # Command executor
│ └── deploy/
│ ├── deployer.go # Main deployment orchestrator
│ └── release.go # Release management
├── Formula/
│ └── shippy.rb # Homebrew formula (prebuilt binary, per arch)
├── scripts/
│ └── update-formula.sh # Bumps formula version + per-arch sha256 for a tag
├── main.go
├── go.mod
└── README.mdTesting
Build with go 1.24:
bash
go build -o shippyStart the test instance:
bash
cd tests/
docker compose upbash
cd tests/typo3/
composer installDeploy against it:
bash
../../shippy deploy productionTest the SSH connection:
bash
ssh -i tests/ssh_keys/shippy_key root@127.0.0.1 -p 2424Releasing
Maintainers
After tagging a release, run make brew-formula to bump Formula/shippy.rb to the latest tag (the Release workflow does this automatically on tagged builds).
License
Shippy is released under the MIT License.
This website
The site you are reading is built with VitePress and lives in a separate repository. Corrections to the documentation are just as welcome as code — every page has an Edit this page on GitHub link at the bottom.