Add Gitea, Cloudflare DNS, and Kubernetes deployer adapters following hexagonal architecture. These enable automated project provisioning: - Git repository creation/management via Gitea - DNS record management via Cloudflare - Container deployment to Kubernetes Includes domain models, ports, handlers, and Woodpecker CI webhook integration for automated deployments on push. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
37 lines
1.4 KiB
Go
37 lines
1.4 KiB
Go
// Package port defines interfaces (ports) for external dependencies.
|
|
package port
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/orchard9/rdev/internal/domain"
|
|
)
|
|
|
|
// DNSProvider manages DNS records for a zone.
|
|
type DNSProvider interface {
|
|
// CreateRecord creates a DNS record.
|
|
// If a record with the same name and type exists, it may be updated or error depending on implementation.
|
|
CreateRecord(ctx context.Context, record domain.DNSRecord) (*domain.DNSRecord, error)
|
|
|
|
// UpdateRecord updates an existing DNS record by ID.
|
|
UpdateRecord(ctx context.Context, recordID string, record domain.DNSRecord) (*domain.DNSRecord, error)
|
|
|
|
// DeleteRecord removes a DNS record by ID.
|
|
DeleteRecord(ctx context.Context, recordID string) error
|
|
|
|
// DeleteRecordByName removes a DNS record by type and name.
|
|
// This is useful when you don't have the record ID.
|
|
DeleteRecordByName(ctx context.Context, recordType, name string) error
|
|
|
|
// GetRecord returns a single record by ID.
|
|
GetRecord(ctx context.Context, recordID string) (*domain.DNSRecord, error)
|
|
|
|
// ListRecords returns all records in the zone.
|
|
// Optionally filter by record type.
|
|
ListRecords(ctx context.Context, recordType string) ([]*domain.DNSRecord, error)
|
|
|
|
// FindRecord finds a record by type and name.
|
|
// Returns nil if not found (no error).
|
|
FindRecord(ctx context.Context, recordType, name string) (*domain.DNSRecord, error)
|
|
}
|