89 lines
3.5 KiB
Go
89 lines
3.5 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
// Project represents a managed CI/CD project
|
|
type Project struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
Name string `gorm:"uniqueIndex;not null" json:"name"`
|
|
Description string `json:"description"`
|
|
Mode string `gorm:"default:'git'" json:"mode"` // "git" or "upload"
|
|
|
|
// Git mode fields
|
|
GitURL string `json:"git_url"`
|
|
GitBranch string `gorm:"default:'master'" json:"git_branch"`
|
|
GitUsername string `json:"git_username"`
|
|
GitPassword string `json:"-"` // hidden from JSON responses
|
|
|
|
// Build config
|
|
BuildScript string `json:"build_script"`
|
|
OutputBinary string `json:"output_binary"` // relative path to built binary
|
|
|
|
// Runtime config
|
|
RunCommand string `json:"run_command"` // command to run the project
|
|
EnvVars string `json:"env_vars"` // JSON key-value env vars
|
|
Port int `json:"port"` // target port
|
|
|
|
// Status
|
|
Status string `json:"status"` // "stopped", "running", "building", "error"
|
|
PID int `json:"pid"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// BuildRecord represents a single build execution
|
|
type BuildRecord struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
ProjectID uint `gorm:"index;not null" json:"project_id"`
|
|
Project *Project `gorm:"foreignKey:ProjectID" json:"project,omitempty"`
|
|
Status string `gorm:"default:'running'" json:"status"` // "running", "success", "failed"
|
|
LogPath string `json:"log_path"` // path to log file
|
|
CommitHash string `json:"commit_hash"` // git commit hash (if git mode)
|
|
StartedAt time.Time `json:"started_at"`
|
|
FinishedAt *time.Time `json:"finished_at"`
|
|
}
|
|
|
|
// DeployConfig holds SSH deployment configuration for a project.
|
|
type DeployConfig struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
ProjectID uint `gorm:"uniqueIndex;not null" json:"project_id"`
|
|
|
|
// SSH connection
|
|
Host string `json:"host"`
|
|
Port int `gorm:"default:22" json:"port"`
|
|
Username string `json:"username"`
|
|
AuthMethod string `gorm:"default:'key'" json:"auth_method"` // "key" or "password"
|
|
SSHKey string `json:"-"` // hidden from JSON responses
|
|
SSHPassword string `json:"-"` // hidden from JSON responses
|
|
|
|
// Deployment settings
|
|
DeployDir string `json:"deploy_dir"` // remote target directory
|
|
FileMappings string `json:"file_mappings"` // JSON: [{"local":"app","remote":"/opt/myapp/app"}]
|
|
|
|
PreDeployCommand string `json:"pre_deploy_command"`
|
|
PostDeployCommand string `json:"post_deploy_command"`
|
|
|
|
// Health check
|
|
HealthCheckURL string `json:"health_check_url"`
|
|
HealthCheckTimeout int `gorm:"default:30" json:"health_check_timeout"`
|
|
|
|
// Auto-deploy after successful build
|
|
AutoDeploy bool `gorm:"default:false" json:"auto_deploy"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// DeployRecord tracks a single deployment execution.
|
|
type DeployRecord struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
ProjectID uint `gorm:"index;not null" json:"project_id"`
|
|
Project *Project `gorm:"foreignKey:ProjectID" json:"project,omitempty"`
|
|
BuildRecordID *uint `json:"build_record_id"` // optional link to the build that triggered this deploy
|
|
Status string `gorm:"default:'running'" json:"status"` // "running", "success", "failed"
|
|
LogPath string `json:"log_path"`
|
|
StartedAt time.Time `json:"started_at"`
|
|
FinishedAt *time.Time `json:"finished_at"`
|
|
}
|