提交 1d304bc1 编写于 作者: 徐超越

WIP issue #80 gitea support

上级 4b798392
......@@ -37,7 +37,7 @@ require (
github.com/casbin/casbin/v2 v2.37.4
github.com/colynn/go-ldap-client/v3 v3.0.0-20201016034829-4c1455a490de
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/drone/go-scm v1.18.0
github.com/drone/go-scm v1.19.0
github.com/ghodss/yaml v1.0.0
github.com/go-atomci/workflow v0.0.0-20211126090842-208f180b47ab
github.com/go-gomail/gomail v0.0.0-20160411212932-81ebce5c23df
......
......@@ -19,6 +19,7 @@ package apps
import (
"context"
"fmt"
"github.com/drone/go-scm/scm/driver/gitea"
"net/http"
"strings"
......@@ -39,9 +40,9 @@ func NewScmProvider(vcsType, vcsPath, token string) (*scm.Client, error) {
var err error
var client *scm.Client
switch strings.ToLower(vcsType) {
case "gitlab":
case "gitea", "gitlab":
if strings.HasSuffix(vcsPath, ".git") {
vcsPath = strings.Replace(vcsPath, ".git", "", -1)
vcsPath = strings.TrimSuffix(vcsPath, ".git")
}
// TODO: verify vcsPath, only support http, do not support git@gitlab.com:/dddd.git
projectPathSplit := strings.Split(strings.Split(vcsPath, "://")[1], "/")
......@@ -49,11 +50,23 @@ func NewScmProvider(vcsType, vcsPath, token string) (*scm.Client, error) {
log.Log.Debug("git projectpathsplit: %s,\tprojectName: %s", projectPathSplit, projectName)
schema := strings.Split(vcsPath, "://")[0]
client, err = gitlab.New(schema + "://" + projectPathSplit[0])
client.Client = &http.Client{
Transport: &transport.PrivateToken{
Token: token,
},
gitRepo := strings.ToLower(vcsType)
if "gitea" == gitRepo {
client, err = gitea.New(schema + "://" + projectPathSplit[0])
client.Client = &http.Client{
Transport: &transport.BearerToken{
Token: token,
},
}
} else {
client, err = gitlab.New(schema + "://" + projectPathSplit[0])
client.Client = &http.Client{
Transport: &transport.PrivateToken{
Token: token,
},
}
}
case "github":
client = github.NewDefault()
......@@ -72,6 +85,7 @@ func NewScmProvider(vcsType, vcsPath, token string) (*scm.Client, error) {
Token: token,
},
}
default:
err = fmt.Errorf("source code management system not configured")
}
......
......@@ -54,7 +54,7 @@ func (manager *AppManager) AppBranches(appID int64, filter *query.FilterQuery) (
func (manager *AppManager) GetRepos(projectID int64) ([]*RepoServerRsp, error) {
repos := []*models.RepoServer{}
// TODO: support code repository defined,
defaultRepos := []string{"gitlab", "github", "gitee"}
defaultRepos := []string{"gitlab", "github", "gitee", "gitea"}
// defaultRepos := []string{"gitlab"}
for _, item := range defaultRepos {
_, err := manager.gitAppModel.GetRepoBycIDAndType(projectID, item)
......
......@@ -2,7 +2,7 @@
<div class="page-content">
<div class="portlet-body projectMember">
<template>
<el-form :model="form" ref="ruleForm" :rules="rules">
<el-form ref="ruleForm" :model="form" :rules="rules">
<!-- <el-form-item label="类型" prop="type" >
<el-select v-model="form.type" placeholder="请选择应用类型" filterable style="width: 300px">
<el-option v-for="(item, index) in typeList" :key="index" :label="item.description" :value="item.name">
......@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="语言类型" prop="language">
<el-select v-model="form.language" placeholder="请选择语言类型" filterable style="width: 300px">
<el-select v-model="form.language" filterable placeholder="请选择语言类型" style="width: 300px">
<el-option v-for="(item, index) in languageList" :key="index" :label="item.description" :value="item.name">
</el-option>
</el-select>
......@@ -29,7 +29,7 @@
</el-form-item>
<el-form-item label="编译环境" prop="compile_env_id">
<el-select v-model="form.compile_env_id" placeholder="请选择编译环境" clearable filterable style="width: 300px">
<el-select v-model="form.compile_env_id" clearable filterable placeholder="请选择编译环境" style="width: 300px">
<el-option v-for="(item, index) in compileEnvs" :key="index" :label="item.name" :value="item.id">
</el-option>
</el-select>
......@@ -41,30 +41,31 @@
<el-tabs v-model="activeName" @tab-click="handleClick">
<template v-if="getTabs">
<template v-for="(item,index) in getTabs">
<el-tab-pane :label="item.type" :key="`${index}`" :name="`${index}`" ref="tabPanel">
<el-tab-pane :key="`${index}`" ref="tabPanel" :label="item.type" :name="`${index}`">
<div class="pv30">
<div v-show="item.stepsNum === 1" class="containerMember">
{{item.type}}提供丰富的代码管理功能,是目前主流的企业内部代码仓库解决方案
<el-button type="primary" @click="firstStep(index)">同步代码源</el-button>
</div>
<div v-show="item.stepsNum === 2">
<el-form :model="item" :ref="'listRef'+index">
<el-form :ref="'listRef'+index" :model="item">
<div class="labelSize" >
<el-form-item v-if="item.type == 'gitlab'" label="地址" prop="base_url" :rules="[{ required: true, message: '请输入地址', trigger: 'blur' }]">
<el-input v-model.trim="item.base_url" auto-complete="off" placeholder="请输入地址, 如:https://gitlab.com"></el-input>
<el-form-item v-if="['gitlab', 'gitea'].includes(item.type)" :rules="[{ required: true, message: '请输入地址', trigger: 'blur' }]" label="地址" prop="base_url">
<el-input v-if="item.type === 'gitlab'" v-model.trim="item.base_url" auto-complete="off" placeholder="请输入地址, 如:https://gitlab.yourrepo.com"></el-input>
<el-input v-if="item.type === 'gitea'" v-model.trim="item.base_url" auto-complete="off" placeholder="请输入地址, 如:https://gitea.yourrepo.com"></el-input>
</el-form-item>
<el-form-item v-else label="地址" prop="base_url">
<el-input v-if="item.type == 'github'" v-model.trim="item.base_url" auto-complete="off" :readonly="true" placeholder="https://github.com"></el-input>
<el-input v-else="item.type == 'gitee'" v-model.trim="item.base_url" auto-complete="off" :readonly="true" placeholder="https://gitee.com"></el-input>
<el-input v-if="item.type === 'github'" v-model.trim="item.base_url" :readonly="true" auto-complete="off" placeholder="https://github.com"></el-input>
<el-input v-else-if="item.type === 'gitee'" v-model.trim="item.base_url" :readonly="true" auto-complete="off" placeholder="https://gitee.com"></el-input>
</el-form-item>
</div>
<div class="labelSize" v-if="item.type == 'gitlab'">
<div v-if="item.type == 'gitlab'" class="labelSize">
<el-form-item label="用户名" prop="user">
<el-input v-model.trim="item.user" auto-complete="off" maxlength="128" placeholder="请输入用户名"></el-input>
</el-form-item>
</div>
<div class="labelSize">
<el-form-item label="Token" prop="token" :rules="[{ required: true, message: '请输入Token', trigger: 'blur' }]">
<el-form-item :rules="[{ required: true, message: '请输入Token', trigger: 'blur' }]" label="Token" prop="token">
<el-input v-model.trim="item.token" auto-complete="off" maxlength="128" placeholder="请输入Token"></el-input>
</el-form-item>
</div>
......@@ -73,12 +74,12 @@
<el-button type="primary" @click="secondStep(index)">同步代码源</el-button>
</div>
</div>
<div class="" v-show="item.stepsNum === 3">
<div class="editBtn">要改变当前绑定的代码库?<el-button type="text" size="small" @click="editPath(index)">解除绑定</el-button></div>
<div v-show="item.stepsNum === 3" class="">
<div class="editBtn">要改变当前绑定的代码库?<el-button size="small" type="text" @click="editPath(index)">解除绑定</el-button></div>
<div class="sel-fl">
<el-form :model="item" :ref="'listRefs'+index">
<el-form-item label="仓库名称" prop="path" :rules="[{ required: true, message: '请选择代码库', trigger: 'change' }]">
<el-select v-model="item.path" placeholder="请选择代码库" filterable :loading="getRepoLoading" :key="`sel${index}`">
<el-form :ref="'listRefs'+index" :model="item">
<el-form-item :rules="[{ required: true, message: '请选择代码库', trigger: 'change' }]" label="仓库名称" prop="path">
<el-select :key="`sel${index}`" v-model="item.path" :loading="getRepoLoading" filterable placeholder="请选择代码库">
<el-option v-for="(term, indexs) in item.proCol" :key="indexs" :label="term.full_name" :value="indexs">
</el-option>
</el-select>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册