88
internal/model/model.go
Normal file
88
internal/model/model.go
Normal file
@@ -0,0 +1,88 @@
|
||||
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"`
|
||||
}
|
||||
Reference in New Issue
Block a user