shippercli/contracts

Contracts and interfaces for Shipper CLI providers

Maintainers

Package info

github.com/shippercli/contracts

pkg:composer/shippercli/contracts

Transparency log

Statistics

Installs: 138

Dependents: 2

Suggesters: 0

Stars: 0

Open Issues: 0

v1.1.0 2026-08-03 12:13 UTC

This package is auto-updated.

Last update: 2026-08-03 12:42:22 UTC


README

Shipper Banner

Contracts and interfaces for Shipper CLI providers.

Packages

  • shippercli/contracts - Shared interfaces for provider plugins
  • shippercli/provider-ploi - Ploi provider plugin
  • shippercli/provider-forge - Laravel Forge provider plugin

Interfaces

  • DeploymentProviderInterface - Main provider interface
  • AliasManagerInterface - Domain alias management
  • DeployScriptManagerInterface - Deployment script management
  • EnvironmentManagerInterface - Environment variable management
  • SslManagerInterface - SSL certificate management
  • ProviderCapabilitiesInterface - Explicit supported, partial, and unsupported capabilities
  • ServerLifecycleProviderInterface - Safe provider server resolution, creation, inspection, and deletion
  • ShipperPluginInterface - Plugin entry point

Provider contracts accept Shipper configuration objects as object so provider packages do not depend on the CLI's internal DTO namespace. Providers should use the documented configuration accessors (name(), path(), repository(), profiles(), get(), and related feature accessors) and feature-detect optional accessors with method_exists().

Providers that expose optional features should implement the matching contract interfaces rather than adding provider-specific methods to the core deployment interface. Server deletion must require proof that Shipper created the server.

Creating a Provider

  1. Create a new repository: shippercli/provider-{name}
  2. Add composer.json with "type": "shipper-plugin"
  3. Implement DeploymentProviderInterface
  4. Implement ShipperPluginInterface and return a provider-name-to-class map
  5. Add extra.shipper-plugin pointing to your plugin class
public function providers(): array
{
    return [
        'example' => ExampleProvider::class,
    ];
}

License

MIT