Skip to content

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.md

Testing

Build with go 1.24:

bash
go build -o shippy

Start the test instance:

bash
cd tests/
docker compose up
bash
cd tests/typo3/
composer install

Deploy against it:

bash
../../shippy deploy production

Test the SSH connection:

bash
ssh -i tests/ssh_keys/shippy_key root@127.0.0.1 -p 2424

Releasing

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.

Released under the MIT License.