diff --git a/tibuild/go.mod b/tibuild/go.mod index fd53714..d1e329e 100644 --- a/tibuild/go.mod +++ b/tibuild/go.mod @@ -35,6 +35,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set/v2 v2.6.0 github.com/emicklei/go-restful v2.15.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect diff --git a/tibuild/go.sum b/tibuild/go.sum index 33a10d7..f445ded 100644 --- a/tibuild/go.sum +++ b/tibuild/go.sum @@ -118,6 +118,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= diff --git a/tibuild/pkg/rest/service/dev_build_service.go b/tibuild/pkg/rest/service/dev_build_service.go index 1dd8b03..05ca9c5 100644 --- a/tibuild/pkg/rest/service/dev_build_service.go +++ b/tibuild/pkg/rest/service/dev_build_service.go @@ -212,7 +212,7 @@ func validateReq(req DevBuild) error { if !spec.Product.IsValid() { return fmt.Errorf("product is not valid") } - if !spec.Edition.IsValid() { + if !validProductEditions.Contains(string(spec.Edition)) { return fmt.Errorf("edition is not valid") } if !versionValidator.MatchString(spec.Version) { diff --git a/tibuild/pkg/rest/service/model.go b/tibuild/pkg/rest/service/types.go similarity index 74% rename from tibuild/pkg/rest/service/model.go rename to tibuild/pkg/rest/service/types.go index 2fde0b2..afe0522 100644 --- a/tibuild/pkg/rest/service/model.go +++ b/tibuild/pkg/rest/service/types.go @@ -1,21 +1,21 @@ package service import ( - "context" "encoding/json" "fmt" "strings" "time" -) - -type Context interface { - context.Context -} -type Product string + set "github.com/deckarep/golang-set/v2" +) const ( + // Editions + EnterpriseEdition = "enterprise" + CommunityEdition = "community" + + // Products ProductTidb Product = "tidb" ProductEnterprisePlugin Product = "enterprise-plugin" ProductTikv Product = "tikv" @@ -32,10 +32,43 @@ const ( ProductTidbDashboard Product = "tidb-dashboard" ProductDrainer Product = "drainer" ProductPump Product = "pump" + ProductUnknown Product = "" + + // Engine types + JenkinsEngine = "jenkins" + TektonEngine = "tekton" - ProductUnknown Product = "" + // Build status + BuildStatusPending BuildStatus = "PENDING" + BuildStatusProcessing BuildStatus = "PROCESSING" + BuildStatusAborted BuildStatus = "ABORTED" + BuildStatusSuccess BuildStatus = "SUCCESS" + BuildStatusFailure BuildStatus = "FAILURE" + BuildStatusError BuildStatus = "ERROR" + + // Acounts + KeyOfApiAccount = "apiAccount" + AdminApiAccount = "admin" + TibuildApiAccount = "tibuild" ) +var ( + allProducts = [...]Product{ProductTidb, ProductTikv, ProductPd, + ProductTiflash, ProductBr, ProductTidbLightning, ProductDumpling, + ProductTicdc, ProductTidbBinlog, ProductDm, ProductTidbTools, + ProductNgMonitoring, ProductTidbDashboard, ProductDrainer, ProductPump} + + MultiArch Platform = "multi-arch" + LinuxAmd64 Platform = "linux/amd64" + LinuxArm64 Platform = "linux/arm64" + DarwinAmd64 Platform = "darwin/amd64" + DarwinArm64 Platform = "darwin/arm64" + + validProductEditions = set.NewSet[string](EnterpriseEdition, CommunityEdition) +) + +type Product string + func (p Product) IsValid() bool { for _, v := range allProducts { if p == v { @@ -94,11 +127,6 @@ var ( RepoTidbDashboard = GithubRepo{Owner: "pingcap", Repo: "tidb-dashboard"} ) -var allProducts = [...]Product{ProductTidb, ProductTikv, ProductPd, - ProductTiflash, ProductBr, ProductTidbLightning, ProductDumpling, - ProductTicdc, ProductTidbBinlog, ProductDm, ProductTidbTools, - ProductNgMonitoring, ProductTidbDashboard, ProductDrainer, ProductPump} - func StringToProduct(s string) Product { for _, i := range allProducts { if s == string(i) { @@ -146,8 +174,8 @@ type DevBuild struct { type DevBuildMeta struct { CreatedAt time.Time `json:"createdAt"` - CreatedBy string `json:"createdBy" gorm:"type:varchar(32)"` UpdatedAt time.Time `json:"updatedAt"` + CreatedBy string `json:"createdBy" gorm:"type:varchar(32)"` } type DevBuildListOption struct { @@ -165,76 +193,39 @@ type DevBuildSaveOption struct { } type DevBuildSpec struct { - Product Product `json:"product"` - GitRef string `json:"gitRef"` - Version string `json:"version"` - Edition ProductEdition `json:"edition"` - PluginGitRef string `json:"pluginGitRef,omitempty"` - BuildEnv string `json:"buildEnv,omitempty" gorm:"type:varchar(128)"` - ProductDockerfile string `json:"productDockerfile,omitempty" gorm:"type:varchar(128)"` - ProductBaseImg string `json:"productBaseImg,omitempty" gorm:"type:varchar(128)"` - BuilderImg string `json:"builderImg,omitempty" gorm:"type:varchar(128)"` - GithubRepo string `json:"githubRepo,omitempty" gorm:"type:varchar(64)"` - IsPushGCR bool `json:"isPushGCR,omitempty"` - Features string `json:"features,omitempty" gorm:"type:varchar(128)"` - IsHotfix bool `json:"isHotfix,omitempty"` - TargetImg string `json:"targetImg,omitempty" gorm:"type:varchar(128)"` - PipelineEngine PipelineEngine `json:"pipelineEngine,omitempty" gorm:"type:varchar(16)"` - GitHash string `json:"gitHash,omitempty" gorm:"type:varchar(64)"` -} - -type PipelineEngine string - -const ( - JenkinsEngine PipelineEngine = "jenkins" - TektonEngine PipelineEngine = "tekton" -) - -type GitRef string - -type ProductEdition string - -const ( - EnterpriseEdition ProductEdition = "enterprise" - CommunityEdition ProductEdition = "community" -) - -func (p ProductEdition) IsValid() bool { - switch p { - case EnterpriseEdition, CommunityEdition: - return true - default: - return false - } + Product Product `json:"product"` + GitRef string `json:"gitRef"` + Version string `json:"version"` + Edition string `json:"edition"` + PluginGitRef string `json:"pluginGitRef,omitempty"` + BuildEnv string `json:"buildEnv,omitempty" gorm:"type:varchar(128)"` + ProductDockerfile string `json:"productDockerfile,omitempty" gorm:"type:varchar(128)"` + ProductBaseImg string `json:"productBaseImg,omitempty" gorm:"type:varchar(128)"` + BuilderImg string `json:"builderImg,omitempty" gorm:"type:varchar(128)"` + GithubRepo string `json:"githubRepo,omitempty" gorm:"type:varchar(64)"` + IsPushGCR bool `json:"isPushGCR,omitempty"` + Features string `json:"features,omitempty" gorm:"type:varchar(128)"` + IsHotfix bool `json:"isHotfix,omitempty"` + TargetImg string `json:"targetImg,omitempty" gorm:"type:varchar(128)"` + PipelineEngine string `json:"pipelineEngine,omitempty" gorm:"type:varchar(16)"` + GitHash string `json:"gitHash,omitempty" gorm:"type:varchar(64)"` } type BuildStatus string -const ( - BuildStatusPending BuildStatus = "PENDING" - BuildStatusProcessing BuildStatus = "PROCESSING" - BuildStatusAborted BuildStatus = "ABORTED" - BuildStatusSuccess BuildStatus = "SUCCESS" - BuildStatusFailure BuildStatus = "FAILURE" - BuildStatusError BuildStatus = "ERROR" -) - func (p BuildStatus) IsValid() bool { - switch p { - case BuildStatusPending, BuildStatusProcessing, BuildStatusAborted, BuildStatusSuccess, BuildStatusFailure, BuildStatusError: - return true - default: - return false - } + return set.NewSet[BuildStatus]( + BuildStatusPending, + BuildStatusProcessing, + BuildStatusAborted, + BuildStatusSuccess, + BuildStatusFailure, + BuildStatusError, + ).Contains(p) } func (p BuildStatus) IsCompleted() bool { - switch p { - case BuildStatusPending, BuildStatusProcessing: - return false - default: - return true - } + return set.NewSet[BuildStatus](BuildStatusPending, BuildStatusProcessing).Contains(p) } type DevBuildStatus struct { @@ -288,14 +279,6 @@ type ImageArtifact struct { type Platform string -var ( - MultiArch Platform = "multi-arch" - LinuxAmd64 Platform = "linux/amd64" - LinuxArm64 Platform = "linux/arm64" - DarwinAmd64 Platform = "darwin/amd64" - DarwinArm64 Platform = "darwin/arm64" -) - type BinArtifact struct { Component string `json:"component,omitempty"` Platform Platform `json:"platform"` @@ -315,10 +298,3 @@ type ImageSyncRequest struct { Source string `json:"source"` Target string `json:"target"` } - -type TibuildCtxKey string - -var KeyOfApiAccount TibuildCtxKey = "apiAccount" - -const AdminApiAccount = "admin" -const TibuildApiAccount = "tibuild"