Documentation
¶
Overview ¶
Package deploy implements a lightweight continuous deployment agent. It supports three modes:
- cloudflare: uploads build artifacts to Cloudflare Pages via API.
- webhook: an HTTP daemon on the server that GitHub Actions triggers via POST.
- ssh: generates a shell script that GitHub Actions runs via SSH on the server.
Usage:
d := &deploy.Deploy{Store: db, Process: mgr, Downloader: dl, Checker: checker}
d.Run()
Index ¶
- func CreateDefaultConfig(path string) error
- func CreateShortcut(linkPath, targetPath, workDir string) error
- func SSHCommand(sshKey, sshUser, sshHost, script string) string
- func SSHScript(app AppConfig, downloadURL, githubPAT string) string
- type AppConfig
- type CFClient
- type Checker
- type Config
- type ConfigUpdater
- type Deploy
- type Downloader
- type HMACValidator
- type HTTPDownloader
- type Handler
- type HealthChecker
- type HealthStatus
- type LinuxManager
- type ProcessManager
- type RetryConfig
- type RollbackConfig
- type Store
- type UpdateRequest
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CreateDefaultConfig ¶ added in v0.0.3
CreateDefaultConfig creates a default deploy.yaml if it does not exist.
func CreateShortcut ¶ added in v0.0.3
func SSHCommand ¶ added in v0.0.3
SSHCommand returns the ssh command string to run the generated script on a remote host. Intended for GitHub Actions step generation / documentation.
func SSHScript ¶ added in v0.0.3
SSHScript generates a shell script that a GitHub Action runs via SSH to deploy a new binary version directly on the server.
The generated script:
- Downloads the release asset from GitHub
- Stops the service (systemctl or pkill)
- Replaces the binary (with backup)
- Starts the service
- Checks health URL
Types ¶
type AppConfig ¶ added in v0.0.3
type AppConfig struct {
Name string `yaml:"name"`
Version string `yaml:"version"`
Executable string `yaml:"executable"`
Path string `yaml:"path"`
Port int `yaml:"port"`
HealthEndpoint string `yaml:"health_endpoint"`
HealthTimeout time.Duration `yaml:"health_timeout"`
StartupDelay time.Duration `yaml:"startup_delay"`
BusyRetryInterval time.Duration `yaml:"busy_retry_interval"` // default: 10s
BusyTimeout time.Duration `yaml:"busy_timeout"` // default: 5m
Rollback RollbackConfig `yaml:"rollback"`
}
AppConfig represents a single application configuration.
type CFClient ¶ added in v0.0.4
type CFClient struct {
// contains filtered or unexported fields
}
CFClient handles Cloudflare API calls for Pages deployment.
func NewCFClient ¶ added in v0.0.4
NewCFClient creates a CFClient backed by the provided Store.
func NewCFClientWithURL ¶ added in v0.0.4
NewCFClientWithURL creates a CFClient with a custom base URL (for tests).
func (*CFClient) Deploy ¶ added in v0.0.4
Deploy uploads the Pages build output to Cloudflare Pages. outputDir must contain _worker.js and the .wasm file.
func (*CFClient) IsConfigured ¶ added in v0.0.4
IsConfigured returns true if a scoped Pages token exists in the store.
type Checker ¶ added in v0.0.3
type Checker struct {
// contains filtered or unexported fields
}
func NewChecker ¶ added in v0.0.3
func NewChecker() *Checker
type Config ¶ added in v0.0.3
type Config struct {
Updater ConfigUpdater `yaml:"updater"`
Apps []AppConfig `yaml:"apps"`
}
Config represents the application configuration.
type ConfigUpdater ¶ added in v0.0.3
type ConfigUpdater struct {
Port int `yaml:"port"` // default: 8080
LogLevel string `yaml:"log_level"`
LogFile string `yaml:"log_file"`
TempDir string `yaml:"temp_dir"`
Retry RetryConfig `yaml:"retry"`
}
ConfigUpdater holds updater-specific configuration.
type Deploy ¶
type Deploy struct {
Store Store
Process ProcessManager
Downloader Downloader
Checker HealthChecker
ConfigPath string
// contains filtered or unexported fields
}
Deploy is the main orchestrator for all deployment modes. Store must be injected — kvdb.KVStore satisfies the Store interface directly.
func (*Deploy) GetSteps ¶ added in v0.0.4
GetSteps implements the interface expected by tinywasm/wizard.New(). Returns the initial steps; method-specific steps are injected dynamically via the Step 1 OnInputFn after the user chooses a deploy method.
func (*Deploy) IsConfigured ¶ added in v0.0.4
IsConfigured returns true if a deploy method has been stored.
type Downloader ¶ added in v0.0.3
type HMACValidator ¶ added in v0.0.3
type HMACValidator struct {
// contains filtered or unexported fields
}
func NewHMACValidator ¶ added in v0.0.3
func NewHMACValidator(secret string) *HMACValidator
func (*HMACValidator) ValidateRequest ¶ added in v0.0.3
func (v *HMACValidator) ValidateRequest(payload []byte, signature string) error
type HTTPDownloader ¶ added in v0.0.3
type HTTPDownloader struct {
// contains filtered or unexported fields
}
func NewDownloader ¶ added in v0.0.3
func NewDownloader() *HTTPDownloader
func (*HTTPDownloader) Download ¶ added in v0.0.3
func (d *HTTPDownloader) Download(url, dest, token string) error
type Handler ¶ added in v0.0.3
type Handler struct {
Config *Config
ConfigPath string
Validator *HMACValidator
Downloader Downloader
Process ProcessManager
Checker HealthChecker // Use interface
Keys Store
}
func (*Handler) HandleUpdate ¶ added in v0.0.3
func (h *Handler) HandleUpdate(w http.ResponseWriter, r *http.Request)
type HealthChecker ¶ added in v0.0.3
type HealthChecker interface {
Check(url string) (*HealthStatus, error)
}
type HealthStatus ¶ added in v0.0.3
func ParseHealthResponse ¶ added in v0.0.3
func ParseHealthResponse(r io.Reader) (*HealthStatus, error)
type LinuxManager ¶ added in v0.0.3
type LinuxManager struct{}
func (*LinuxManager) Start ¶ added in v0.0.3
func (m *LinuxManager) Start(exePath string) error
func (*LinuxManager) Stop ¶ added in v0.0.3
func (m *LinuxManager) Stop(exeName string) error
type ProcessManager ¶ added in v0.0.3
ProcessManager defines the interface for managing processes.
func NewProcessManager ¶ added in v0.0.3
func NewProcessManager() ProcessManager
type RetryConfig ¶ added in v0.0.3
type RetryConfig struct {
MaxAttempts int `yaml:"max_attempts"`
Delay time.Duration `yaml:"delay"`
}
RetryConfig holds retry configuration.
type RollbackConfig ¶ added in v0.0.3
type RollbackConfig struct {
Enabled bool `yaml:"enabled"`
KeepVersions int `yaml:"keep_versions"` // Only -older
AutoRollbackOnFailure bool `yaml:"auto_rollback_on_failure"`
}
RollbackConfig holds rollback configuration.
type Store ¶ added in v0.0.4
Store is a flat key-value store for deploy configuration and secrets. kvdb.KVStore satisfies this interface directly — no adapter needed.
Keys used by deploy:
DEPLOY_METHOD → "cloudflare" | "webhook" | "ssh" DEPLOY_GITHUB_PAT → GitHub Personal Access Token DEPLOY_HMAC_SECRET → HMAC-SHA256 secret for webhook validation DEPLOY_SERVER_HOST → host:port for webhook or SSH host DEPLOY_SSH_USER → SSH username DEPLOY_SSH_KEY → SSH private key path CF_ACCOUNT_ID → Cloudflare account ID CF_PAGES_TOKEN → Cloudflare scoped Pages:Edit token (auto-created) CF_PROJECT → Cloudflare Pages project name