A shipper application built with Laravel Zero with strict type checking

Maintainers

Package info

github.com/shippercli/cli

Type:project

pkg:composer/shippercli/cli

Transparency log

Statistics

Installs: 22

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 15

v1.0.3 2026-07-28 10:37 UTC

README

CI PHPStan PHP License

Declarative application deployments through provider plugins.

Shipper reads shipper.yml, validates the selected project and profile, shows the planned operations, and delegates deployment work to the installed provider package.

Install

Install globally with Composer:

composer global require shippercli/cli

Or work from source:

composer install
./shipper list

Prebuilt PHAR binaries are published on the releases page.

Provider packages

Providers are separate Composer packages:

Provider Package
Ploi shippercli/provider-ploi
Laravel Forge shippercli/provider-forge
cPanel shippercli/provider-cpanel
EasyPanel shippercli/provider-easypanel

Install the package for the target platform:

composer global require shippercli/provider-cpanel

Shipper discovers packages with Composer's runtime plugin metadata. Provider credentials, platform features, and configuration options belong to each provider's documentation rather than the core CLI.

Configure

Create shipper.yml in the application repository:

providers:
  provider_name:
    api_token: "${PROVIDER_API_TOKEN}"

projects:
  backend:
    provider: provider_name
    path: "."
    web_directory: /public
    profiles:
      production:
        branch: main
        domain: "api.example.com"
      staging:
        branch: develop
        domain: "api.example-test.com"

provider_name is the slug registered by the installed package. Profiles can override provider-supported runtime, database, domain, environment, and lifecycle options.

Environment placeholders use ${NAME} syntax and are resolved at runtime. Keep credentials in the shell, CI secrets, or another secret manager.

Commands

# Validate all configured projects and profiles.
shipper validate

# Preview provider operations without changing remote state.
shipper plan backend --profile=production

# Apply a deployment. --force skips the confirmation prompt.
shipper apply backend --profile=production --force

# Inspect provider-defined deployment and resource state.
shipper status backend --profile=production

# Read recent provider or application log lines.
shipper logs backend --profile=production --lines=100

# Restore the latest or a named provider-managed release.
shipper rollback backend --profile=production
shipper rollback backend --profile=production --release=release-id

# Remove only resources the provider identifies as Shipper-managed.
shipper destroy backend --profile=preview --force

status, logs, and rollback are optional provider capabilities. Shipper returns a clear error when the selected provider does not implement one.

Provider contracts

Every provider implements validation, planning, apply, destroy, name, and error-reporting methods from shippercli/contracts.

Optional contracts add:

  • deployment status
  • recent logs
  • release rollback
  • server provisioning and cleanup

The CLI adapts installed contract providers to its internal flows. Provider implementations do not belong in the core repository.

GitHub Actions

A minimal deployment workflow validates before applying:

name: Deploy

on:
  push:
    branches: [main]

permissions:
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: yaml, zip

      - run: composer install --no-interaction --prefer-dist
      - run: ./shipper validate
      - run: ./shipper apply backend --profile=production --force
        env:
          PROVIDER_API_TOKEN: ${{ secrets.PROVIDER_API_TOKEN }}

See GitHub Actions for production, staging, preview, cleanup, and reusable-action patterns.

Documentation

Development

composer format
composer format:check
composer analyse
XDEBUG_MODE=coverage composer test
composer build

The codebase targets PHP 8.3+, Laravel Pint, PHPStan level 9, and Pest.

Release

Tags build and publish the PHAR through GitHub Actions:

git tag v1.0.0
git push origin v1.0.0

License

MIT