* add devops client interface Signed-off-by: runzexia <runzexia@yunify.com> * direct return jenkins Signed-off-by: runzexia <runzexia@yunify.com> * add some interface Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * update interface Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * credential op structs Signed-off-by: runzexia <runzexia@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * credential handler Signed-off-by: runzexia <runzexia@yunify.com> * update devopsoperator func Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * get build sonar Signed-off-by: runzexia <runzexia@yunify.com> * sonar handler * mv code to cilent Signed-off-by: runzexia <runzexia@yunify.com> * update Signed-off-by: runzexia <runzexia@yunify.com> * project member handler Signed-off-by: runzexia <runzexia@yunify.com> * update pipeline operator interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add tenant devops handler Signed-off-by: runzexia <runzexia@yunify.com> * update merge Signed-off-by: runzexia <runzexia@yunify.com> * clean Signed-off-by: runzexia <runzexia@yunify.com> * fmt Signed-off-by: runzexia <runzexia@yunify.com> * update ListPipelineRuns Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * complate pipelineOperator interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update HttpParameters Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add pipeline steps interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update pipeline GetNodesDetail Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add s2i api Signed-off-by: runzexia <runzexia@yunify.com> * add branch pipeline interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add scan branch interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add common interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add SCM interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add handler Signed-off-by: runzexia <runzexia@yunify.com> * add fake s3 Signed-off-by: runzexia <runzexia@yunify.com> * add webhook&check interface and update handler Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * clean Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * clean Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * format Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add some func Signed-off-by: runzexia <runzexia@yunify.com> * clean code Signed-off-by: runzexia <runzexia@yunify.com> * implement interface Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * fix interface GetBranchArtifacts Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add s2ibinary upload test Signed-off-by: runzexia <runzexia@yunify.com> * tenant devops Signed-off-by: runzexia <runzexia@yunify.com> * update tenant Signed-off-by: runzexia <runzexia@yunify.com> * fake Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add some unit test Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * add devops tenant handler Signed-off-by: runzexia <runzexia@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * status Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update fake test Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update unit test and fake data Signed-off-by: zhuxiaoyang <sunzhu@yunify.com> * update Co-authored-by: Xiaoyang Zhu <sunzhu@yunify.com>
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package v1alpha3
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"kubesphere.io/kubesphere/pkg/api"
|
|
"kubesphere.io/kubesphere/pkg/apiserver/query"
|
|
"sort"
|
|
)
|
|
|
|
type Interface interface {
|
|
// Get retrieves a single object by its namespace and name
|
|
Get(namespace, name string) (runtime.Object, error)
|
|
|
|
// List retrieves a collection of objects matches given query
|
|
List(namespace string, query *query.Query) (*api.ListResult, error)
|
|
}
|
|
|
|
type CompareFunc func(runtime.Object, runtime.Object, query.Field) bool
|
|
|
|
type FilterFunc func(runtime.Object, query.Filter) bool
|
|
|
|
func DefaultList(objects []runtime.Object, query *query.Query, compareFunc CompareFunc, filterFunc FilterFunc) *api.ListResult {
|
|
// selected matched ones
|
|
var filtered []runtime.Object
|
|
for _, object := range objects {
|
|
selected := true
|
|
for _, filter := range query.Filters {
|
|
if !filterFunc(object, filter) {
|
|
selected = false
|
|
break
|
|
}
|
|
}
|
|
|
|
if selected {
|
|
filtered = append(filtered, object)
|
|
}
|
|
}
|
|
|
|
start, end := query.Pagination.GetPaginationSettings(len(filtered))
|
|
if !query.Pagination.IsPageAvailable(len(filtered), start) {
|
|
return &api.ListResult{
|
|
Items: nil,
|
|
TotalItems: 0,
|
|
}
|
|
}
|
|
|
|
// sort by sortBy field
|
|
sort.Slice(filtered, func(i, j int) bool {
|
|
if !query.Ascending {
|
|
return !compareFunc(filtered[i], filtered[j], query.SortBy)
|
|
}
|
|
return compareFunc(filtered[i], filtered[j], query.SortBy)
|
|
})
|
|
|
|
return &api.ListResult{
|
|
Items: objectsToInterfaces(filtered[start:end]),
|
|
TotalItems: len(filtered),
|
|
}
|
|
}
|
|
|
|
func objectsToInterfaces(objs []runtime.Object) []interface{} {
|
|
var res []interface{}
|
|
for _, obj := range objs {
|
|
res = append(res, obj)
|
|
}
|
|
return res
|
|
}
|