// Package port defines interfaces (ports) for external dependencies. package port import ( "context" "github.com/orchard9/rdev/internal/domain" ) // Deployer manages application deployments to Kubernetes. type Deployer interface { // Deploy creates or updates a deployment for a project. // This includes creating/updating Deployment, Service, and Ingress resources. // For monorepo projects with ComponentPath set, creates component-specific resources. Deploy(ctx context.Context, spec domain.DeploySpec) error // Undeploy removes all deployment resources for a project by exact name. Undeploy(ctx context.Context, projectName string) error // UndeployAll removes all deployment resources matching the project label. // This handles monorepo components (e.g., {project}-{component}) that Undeploy misses. UndeployAll(ctx context.Context, projectName string) error // UndeployComponent removes deployment resources for a specific component. // The componentPath is the path within the monorepo (e.g., "services/auth-api"). UndeployComponent(ctx context.Context, projectName, componentPath string) error // GetStatus returns the current deployment status for a project. // Returns nil if no deployment exists. GetStatus(ctx context.Context, projectName string) (*domain.DeployStatus, error) // GetComponentStatus returns deployment status for a specific component. // Returns nil if no deployment exists for the component. GetComponentStatus(ctx context.Context, projectName, componentPath string) (*domain.DeployStatus, error) // ListComponentStatuses returns deployment status for all components in a project. ListComponentStatuses(ctx context.Context, projectName string) (*domain.ProjectDeployStatus, error) // Restart triggers a rolling restart of the deployment. // This is useful for picking up new images with the same tag. Restart(ctx context.Context, projectName string) error // RestartComponent triggers a rolling restart of a specific component. RestartComponent(ctx context.Context, projectName, componentPath string) error // Scale adjusts the replica count for a deployment. Scale(ctx context.Context, projectName string, replicas int) error // ScaleComponent adjusts the replica count for a component. ScaleComponent(ctx context.Context, projectName, componentPath string, replicas int) error // GetLogs returns recent logs from the deployment pods. // tailLines specifies how many recent lines to return. GetLogs(ctx context.Context, projectName string, tailLines int) (string, error) // GetComponentLogs returns recent logs from a specific component's pods. GetComponentLogs(ctx context.Context, projectName, componentPath string, tailLines int) (string, error) // AddIngressHost adds a new host to an existing project's ingress. // This is used when adding domain aliases to a project. // The host is added to both the TLS configuration and the routing rules. AddIngressHost(ctx context.Context, projectName, host string) error // RemoveIngressHost removes a host from an existing project's ingress. // This is used when removing domain aliases from a project. RemoveIngressHost(ctx context.Context, projectName, host string) error // AddIngressPath adds or updates a path rule in the project's unified Ingress. // For monorepo projects, all components share a single Ingress with path-based routing. // The path is the URL prefix (e.g., "/api/auth", "/"). AddIngressPath(ctx context.Context, projectName, host, path, serviceName string, servicePort int) error // RemoveIngressPath removes a path rule from the project's unified Ingress. // If no paths remain for a host, the host rule is removed. // If no rules remain, the Ingress is deleted. RemoveIngressPath(ctx context.Context, projectName, host, path string) error }