Skip to content

Commit

Permalink
Merge pull request #94 from go-atomci/feat-app-scm-integrate
Browse files Browse the repository at this point in the history
feat: integrate add scm integrate
  • Loading branch information
colynn committed Mar 7, 2022
2 parents 3318260 + 796bc0a commit 69be69a
Show file tree
Hide file tree
Showing 10 changed files with 430 additions and 15 deletions.
14 changes: 14 additions & 0 deletions constant/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,17 @@ const (
// HelmDeployType helm 部署
HelmDeployType = "helm"
)

// integrate type
const (
SCMGitlab = "gitlab"
SCMGithub = "github"
SCMGitea = "gitea"
SCMGitee = "gitee"
IntegrateKubernetes = "kubernetes"
IntegrateJenkins = "jenkins"
IntegrateRegistry = "registry"
)

var Integratetypes = []string{IntegrateKubernetes, IntegrateJenkins, IntegrateRegistry}
var ScmIntegratetypes = []string{SCMGitlab, SCMGithub, SCMGitea, SCMGitee}
22 changes: 19 additions & 3 deletions internal/api/integrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package api

import (
"github.com/go-atomci/atomci/constant"

"github.com/go-atomci/atomci/internal/core/settings"
"github.com/go-atomci/atomci/internal/middleware/log"
)
Expand All @@ -28,7 +30,7 @@ type IntegrateController struct {

func (p *IntegrateController) GetClusterIntegrateSettings() {
pm := settings.NewSettingManager()
rsp, err := pm.GetIntegrateSettings("kubernetes")
rsp, err := pm.GetIntegrateSettings([]string{constant.IntegrateKubernetes})
if err != nil {
p.HandleInternalServerError(err.Error())
log.Log.Error("Get integrate settings occur error: %s", err.Error())
Expand All @@ -41,7 +43,7 @@ func (p *IntegrateController) GetClusterIntegrateSettings() {
// GetIntegrateSettings ..
func (p *IntegrateController) GetIntegrateSettings() {
pm := settings.NewSettingManager()
rsp, err := pm.GetIntegrateSettings("")
rsp, err := pm.GetIntegrateSettings(constant.Integratetypes)
if err != nil {
p.HandleInternalServerError(err.Error())
log.Log.Error("Get integrate settings occur error: %s", err.Error())
Expand All @@ -55,7 +57,21 @@ func (p *IntegrateController) GetIntegrateSettings() {
func (p *IntegrateController) GetIntegrateSettingsByPagination() {
filterQuery := p.GetFilterQuery()
pm := settings.NewSettingManager()
rsp, err := pm.GetIntegrateSettingsByPagination(filterQuery)
rsp, err := pm.GetIntegrateSettingsByPagination(filterQuery, constant.Integratetypes)
if err != nil {
p.HandleInternalServerError(err.Error())
log.Log.Error("Get integrate settings occur error: %s", err.Error())
return
}
p.Data["json"] = NewResult(true, rsp, "")
p.ServeJSON()
}

// GetSCMIntegrateSettingsByPagination ..
func (p *IntegrateController) GetSCMIntegrateSettingsByPagination() {
filterQuery := p.GetFilterQuery()
pm := settings.NewSettingManager()
rsp, err := pm.GetIntegrateSettingsByPagination(filterQuery, constant.ScmIntegratetypes)
if err != nil {
p.HandleInternalServerError(err.Error())
log.Log.Error("Get integrate settings occur error: %s", err.Error())
Expand Down
26 changes: 22 additions & 4 deletions internal/core/settings/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ type RegistryConfig struct {
IsHttps bool `json:"isHttps,omitempty"`
}

type ScmBaseConfig struct {
URL string `json:"url,omitempty"`
Token string `json:"token,omitempty"`
}

type ScmGitlabConfig struct {
ScmBaseConfig
User string `json:"user,omitempty"`
}

type JenkinsConfig struct {
BaseConfig
Token string `json:"token,omitempty"`
Expand Down Expand Up @@ -116,6 +126,14 @@ func (config *Config) Struct(sc string, settingType string) (interface{}, error)
registry := &RegistryConfig{}
err := json.Unmarshal([]byte(sc), registry)
return registry, err
case "gitlab":
scmConf := &ScmGitlabConfig{}
err := json.Unmarshal([]byte(sc), scmConf)
return scmConf, err
case "gitea", "gitee", "github":
scmConf := &ScmBaseConfig{}
err := json.Unmarshal([]byte(sc), scmConf)
return scmConf, err
default:
log.Log.Warn("this settings type %s is not support, return origin string", settingType)
return sc, nil
Expand All @@ -130,8 +148,8 @@ func NewSettingManager() *SettingManager {
}

// GetIntegrateSettings ..
func (pm *SettingManager) GetIntegrateSettings(integrateType string) ([]*IntegrateSettingResponse, error) {
items, err := pm.model.GetIntegrateSettings(integrateType)
func (pm *SettingManager) GetIntegrateSettings(integrateTypes []string) ([]*IntegrateSettingResponse, error) {
items, err := pm.model.GetIntegrateSettings(integrateTypes)
if err != nil {
log.Log.Error("get interate settings error: %s", err.Error())
return nil, err
Expand All @@ -152,8 +170,8 @@ func (pm *SettingManager) GetIntegrateSettingByID(id int64) (*IntegrateSettingRe
}

// GetIntegrateSettingsByPagination ..
func (pm *SettingManager) GetIntegrateSettingsByPagination(filter *query.FilterQuery) (*query.QueryResult, error) {
queryResult, settingsList, err := pm.model.GetIntegrateSettingsByPagination(filter)
func (pm *SettingManager) GetIntegrateSettingsByPagination(filter *query.FilterQuery, intergrateTypes []string) (*query.QueryResult, error) {
queryResult, settingsList, err := pm.model.GetIntegrateSettingsByPagination(filter, intergrateTypes)
if err != nil {
return nil, err
}
Expand Down
11 changes: 7 additions & 4 deletions internal/dao/integrate_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ func (model *SysSettingModel) GetIntegrateSettingByID(integrateSettingID int64)
}

// GetIntegrateSettings ...
func (model *SysSettingModel) GetIntegrateSettings(integrateType string) ([]*models.IntegrateSetting, error) {
func (model *SysSettingModel) GetIntegrateSettings(integrateTypes []string) ([]*models.IntegrateSetting, error) {
integrateSettings := []*models.IntegrateSetting{}
qs := model.ormer.QueryTable(model.IntegrateSettingTableName).Filter("deleted", false)
if integrateType != "" {
qs = qs.Filter("type", integrateType)
if len(integrateTypes) > 0 {
qs = qs.Filter("type__in", integrateTypes)
}
_, err := qs.All(&integrateSettings)
if err != nil {
Expand All @@ -64,14 +64,17 @@ func (model *SysSettingModel) GetIntegrateSettings(integrateType string) ([]*mod
}

// GetIntegrateSettingsByPagination ..
func (model *SysSettingModel) GetIntegrateSettingsByPagination(filter *query.FilterQuery) (*query.QueryResult, []*models.IntegrateSetting, error) {
func (model *SysSettingModel) GetIntegrateSettingsByPagination(filter *query.FilterQuery, intergrateTypes []string) (*query.QueryResult, []*models.IntegrateSetting, error) {
rst := &query.QueryResult{Item: []*models.IntegrateSetting{}}
queryCond := orm.NewCondition().AndCond(orm.NewCondition().And("deleted", false))

if filterCond := query.FilterCondition(filter, filter.FilterKey); filterCond != nil {
queryCond = queryCond.AndCond(filterCond)
}
qs := model.ormer.QueryTable(model.IntegrateSettingTableName).OrderBy("-create_at").SetCond(queryCond)
if len(intergrateTypes) > 0 {
qs = qs.Filter("type__in", intergrateTypes)
}
count, err := qs.Count()
if err != nil {
return nil, nil, err
Expand Down
1 change: 1 addition & 0 deletions internal/routers/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ func RegisterRoutes() {
// Integrate Settings
beego.NSRouter("/integrate/settings", &api.IntegrateController{}, "get:GetIntegrateSettings;post:GetIntegrateSettingsByPagination"),
beego.NSRouter("/integrate/settings/create", &api.IntegrateController{}, "post:CreateIntegrateSetting"),
beego.NSRouter("/integrate/settings/scms", &api.IntegrateController{}, "post:GetSCMIntegrateSettingsByPagination"),
beego.NSRouter("/integrate/settings/:id", &api.IntegrateController{}, "put:UpdateIntegrateSetting;delete:DeleteIntegrateSetting"),
beego.NSRouter("/integrate/settings/verify", &api.IntegrateController{}, "post:VerifyIntegrateSetting"),
beego.NSRouter("/integrate/clusters", &api.IntegrateController{}, "get:GetClusterIntegrateSettings"),
Expand Down
4 changes: 2 additions & 2 deletions web/src/api/backend.js
Original file line number Diff line number Diff line change
Expand Up @@ -713,8 +713,8 @@ const backendAPI = {
getIntegrateSettings(body, cb) {
Package.httpMethods('post', '/atomci/api/v1/integrate/settings', cb, body);
},
getStagesAll(cb) {
Package.httpMethods('get', '/atomci/api/v1/integrate/settings', cb);
getSCMIntegrateSettings(body, cb) {
Package.httpMethods('post', '/atomci/api/v1/integrate/settings/scms', cb, body);
},
AddIntegrateSetting(body,cb) {
Package.httpMethods('post', '/atomci/api/v1/integrate/settings/create', cb, body);
Expand Down
6 changes: 6 additions & 0 deletions web/src/router/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ export const asyncRoutes = [
name: 'serviceIntegrate',
meta: { title: '服务集成', noCache: true }
},
{
path: '/settings/smcintegrate',
component: () => import('@/views/setting/ScmIntegrate.vue'),
name: 'scmIntegrate',
meta: { title: '代码源集成', noCache: true }
},
{
path: '/settings/task',
component: () => import('@/views/setting/Node.vue'),
Expand Down
2 changes: 0 additions & 2 deletions web/src/views/project/components/EnvCreate.vue
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,6 @@ export default {
case 'registry':
this.registryList.push(element)
break;
default:
console.log("this type not support", element.type)
}
});
}
Expand Down
146 changes: 146 additions & 0 deletions web/src/views/setting/ScmIntegrate.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
<template>
<div class="portlet-body">
<template>
<div class="table-toolbar">
<el-row>
<el-col :span="10">
<refresh v-on:getlist="getList"></refresh>
<el-button :plain="true" type="primary" @click="$refs.create.doCreate(false)">
<i class='icon-plus' /> 新建</el-button>
</el-col>
<el-col :span="6">
&nbsp;
</el-col>
<el-col :span="8">
<list-search ref="userSh" :searchList="searchList" v-on:changeFilterTxt="changeFilterTxt"></list-search>
</el-col>
</el-row>
</div>
<template>
<el-table stripe :data="dataList">
<span slot="empty">
{{loading?$t('bm.add.dataLoading'):noDataTxt}}
</span>
<el-table-column prop="name" label="名称" sortable min-width="15%" :show-overflow-tooltip=true />
<el-table-column prop="type" label="类型" sortable min-width="20%" :show-overflow-tooltip=true>
<template slot-scope="scope">
<div v-if="scope.row.type === 'gitee'">
<el-tag type="danger">{{scope.row.type}}</el-tag>
</div>
<div v-else-if="scope.row.type === 'gitea'">
<el-tag type="success">{{scope.row.type}}</el-tag>
</div>
<div v-else>
<el-tag>{{scope.row.type}}</el-tag>
</div>
</template>
</el-table-column>
<el-table-column prop="description" label="描述信息" min-width="20%" :show-overflow-tooltip=true />
<el-table-column prop="creator" :label="$t('bm.serviceM.creator')" sortable min-width="10%" :show-overflow-tooltip=true />
<el-table-column prop="create_at" :label="$t('bm.serviceM.creationTime')" sortable min-width="15%" :show-overflow-tooltip=true />
<el-table-column :label="$t('bm.deployCenter.operation')" min-width="15%">
<template slot-scope="scope">
<el-button type="text" size="small" @click="$refs.create.doCreate(true, scope.row)">{{$t('bm.infrast.edit')}}
</el-button>
<el-button @click="$refs.commonDelete.doDelete('delIntegrateSetting',scope.row.id)" type="text" size="small">{{$t('bm.other.delete')}}
</el-button>
</template>
</el-table-column>
</el-table>
</template>
<page-nav ref="pages"
:list="curList"
v-on:getlist="getList"></page-nav>
</template>
<common-delete ref="commonDelete" v-on:getlist="getList"></common-delete>
<scm-integrate-create ref="create" v-on:getlist="getList"></scm-integrate-create>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import backend from '@/api/backend';
import ListSearch from '@/components/utils/ListSearch';
import PageNav from '@/components/utils/PageList';
import CommonDelete from '@/components/utils/Delete';
import Refresh from '@/components/utils/Refresh';
import listTemplate from '@/common/listTemplate';
import Utils from '@/common/utils';
import ScmIntegrateCreate from './components/ScmIntegrateCreate';
export default {
mixins: [listTemplate],
data() {
return {
curList: [],
searchList: [
{ key: 'type', txt: '配置类型'},
{ key: 'creator', txt: this.$t('bm.serviceM.creator') },
],
filterTxt: '',
detailInfo: [],
param: {},
searchVal: '',
searchType: '',
};
},
components: {
ListSearch,
PageNav,
Refresh,
ScmIntegrateCreate,
CommonDelete,
},
mounted() {
// this.getList();
},
mounted() {
this.getList(true);
},
computed: {
...mapGetters({
loading: 'getLoading',
}),
dataList() {
// 强制替换dataList替代listtemplate中的方法
return this.curList;
},
},
methods: {
goEdit(user) {
this.$refs.create.doCreate(true, user);
},
getList(isRefresh) {
if (isRefresh) {
this.$refs.pages.currentPage = 1;
}
if (isRefresh === 'clear') {
this.$refs.userSh.searchSelectChange();
this.$refs.pages.currentPage = 1;
}
this.curList = [];
backend.getSCMIntegrateSettings(
JSON.stringify({
page_size: this.$refs.pages.pageSize,
page_index: this.$refs.pages.currentPage,
filter_key: this.searchType,
filter_val: this.searchVal,
}),
data => {
this.$refs.pages.total = data.total;
this.curList = data.item;
this.curList = data.item.map(i => {
i.create_at = Utils.format(new Date(i.create_at), 'yyyy-MM-dd hh:mm');
return i;
});
}
);
},
changeFilterTxt(val, type) {
this.searchVal = val;
this.searchType = type;
this.getList(false);
},
},
};
</script>
Loading

0 comments on commit 69be69a

Please sign in to comment.