Full Code of mgr9525/gokins for AI

master 2c7d3d438e08 cached
154 files
3.8 MB
989.7k tokens
694 symbols
1 requests
Download .txt
Showing preview only (3,962K chars total). Download the full file or copy to clipboard to get everything.
Repository: mgr9525/gokins
Branch: master
Commit: 2c7d3d438e08
Files: 154
Total size: 3.8 MB

Directory structure:
gitextract_0p57qvn9/

├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── bean/
│   ├── condition.go
│   ├── db.go
│   ├── http.go
│   ├── models.go
│   ├── pipeline.go
│   ├── pipelinevar.go
│   ├── runtime.go
│   ├── thirdbean/
│   │   ├── gitea.go
│   │   ├── gitee.go
│   │   ├── giteepremium.go
│   │   ├── github.go
│   │   └── gitlab.go
│   ├── trigger.go
│   └── yml.go
├── bindata.sh
├── bindui.sh
├── build.sh
├── cmd/
│   └── cmd.go
├── comm/
│   ├── app.go
│   ├── cache.go
│   ├── config.go
│   ├── db.go
│   ├── migrate.go
│   ├── thirdapi.go
│   └── uis.go
├── compressui.go
├── engine/
│   ├── buildDao.go
│   ├── buildEgn.go
│   ├── buildTask.go
│   ├── buildTaskc.go
│   ├── buildtask_test.go
│   ├── hbtpruner.go
│   ├── jobEgn.go
│   ├── mgr.go
│   ├── runner.go
│   ├── timermgr.go
│   └── timermgr_test.go
├── go.mod
├── go.sum
├── hook/
│   ├── action.go
│   ├── event.go
│   ├── git.go
│   ├── gitea/
│   │   └── gitea.go
│   ├── gitee/
│   │   └── gitee.go
│   ├── github/
│   │   └── github.go
│   ├── gitlab/
│   │   └── gitlab.go
│   ├── pr.go
│   ├── repo.go
│   └── webhook.go
├── main.go
├── migrates/
│   ├── init.go
│   ├── mysql/
│   │   ├── 000001_gokins.down.sql
│   │   └── 000001_gokins.up.sql
│   ├── sqlite/
│   │   ├── 000001_gokins.down.sql
│   │   └── 000001_gokins.up.sql
│   └── up.go
├── model/
│   ├── schema_migrations.go
│   ├── t_artifact_package.go
│   ├── t_artifact_version.go
│   ├── t_artifactory.go
│   ├── t_build.go
│   ├── t_cmd_line.go
│   ├── t_message.go
│   ├── t_org.go
│   ├── t_org_pipe.go
│   ├── t_param.go
│   ├── t_pipeline.go
│   ├── t_pipeline_conf.go
│   ├── t_pipeline_var.go
│   ├── t_pipeline_version.go
│   ├── t_stage.go
│   ├── t_step.go
│   ├── t_trigger.go
│   ├── t_trigger_run.go
│   ├── t_user.go
│   ├── t_user_info.go
│   ├── t_user_msg.go
│   ├── t_user_org.go
│   ├── t_user_token.go
│   ├── t_yml_plugin.go
│   └── t_yml_template.go
├── models/
│   ├── run_build.go
│   ├── run_stage.go
│   ├── t_artifact_package.go
│   ├── t_artifact_version.go
│   ├── t_artifactory.go
│   ├── t_org.go
│   ├── t_pipeline.go
│   ├── t_pipeline_var.go
│   ├── t_pipeline_version.go
│   ├── t_trigger.go
│   ├── t_trigger_run.go
│   ├── t_user.go
│   ├── t_yml_plugin.go
│   └── t_yml_template.go
├── route/
│   ├── api.go
│   ├── artifact.go
│   ├── artpub.go
│   ├── hook.go
│   ├── install.go
│   ├── login.go
│   ├── org.go
│   ├── pipeline.go
│   ├── pipelineversion.go
│   ├── runtime.go
│   ├── trigger.go
│   ├── user.go
│   └── yml.go
├── ruis_test.go
├── server/
│   ├── db.go
│   ├── hbtp.go
│   ├── server.go
│   └── web.go
├── service/
│   ├── db.go
│   ├── hook.go
│   ├── mid.go
│   ├── notice.go
│   ├── param.go
│   ├── perms.go
│   ├── pipeline.go
│   ├── trigger.go
│   └── user.go
├── thirdapi/
│   ├── client.go
│   ├── giteaapi/
│   │   ├── gitea.go
│   │   ├── giteaapi.go
│   │   ├── giteaapi_test.go
│   │   └── repositoryservice.go
│   ├── giteeapi/
│   │   ├── gitee.go
│   │   ├── giteeapi.go
│   │   ├── giteeapi_test.go
│   │   └── repositoryservice.go
│   ├── giteepremiumapi/
│   │   ├── giteepremium.go
│   │   ├── giteepremiumapi.go
│   │   ├── giteepremiumapi_test.go
│   │   └── repositoryservice.go
│   ├── githubapi/
│   │   ├── github.go
│   │   ├── githubapi.go
│   │   ├── githubapi_test.go
│   │   └── repositoryservice.go
│   ├── gitlabapi/
│   │   ├── gitlab.go
│   │   ├── gitlabapi.go
│   │   ├── gitlabapi_test.go
│   │   └── repositoryservice.go
│   ├── repo.go
│   └── repositoryservice.go
└── util/
    ├── gin.go
    ├── git.go
    ├── httpex/
    │   ├── const.go
    │   └── post.go
    └── token.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
/dbm.bat
/dbm.sh
/model.yml
/install.html
*.test
*.bak

# Output of the go coverage tool, specifically when used with LiteIDE
*.out
bin/

# Dependency directories (remove the comment below to include it)
# vendor/
__debug_bin


================================================
FILE: Dockerfile
================================================
FROM golang:1.16.6-alpine3.14 AS builder
# ENV GOPROXY=https://goproxy.cn,direct
# RUN apk add git build-base && git clone https://gitee.com/gokins/gokins.git /build
RUN apk add git build-base && git clone https://github.com/gokins/gokins.git /build
WORKDIR /build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/gokins main.go


FROM alpine:latest AS final

ENV GOKINS_WORKPATH=/data/gokins

RUN apk --no-cache add openssl ca-certificates curl git wget \
    && rm -rf /var/cache/apk \
    && mkdir -p /app /data/gokins

COPY --from=builder /build/bin/gokins /app
WORKDIR /app
ENTRYPOINT ["/app/gokins"]

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021 gokins

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# 项目已经转移仓库到下面地址维护

## https://github.com/gokins/gokins



# Gokins文档

# Gokins: *More Power*

![](https://static01.imgkr.com/temp/5ca8a54f7d6544b6a2c740d5f559e5c4.jpg)




Gokins一款由Go语言和Vue编写的款轻量级、能够持续集成和持续交付的工具.

* **持续集成和持续交付**

  作为一个可扩展的自动化服务器,Gokins 可以用作简单的 CI 服务器,或者变成任何项目的持续交付中心

* **简易安装**

  Gokins 是一个基于 Go 的独立程序,可以立即运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。


* **安全**

  绝不收集任何用户、服务器信息,是一个独立安全的服务

## Gokins 官网

**地址 : http://gokins.cn**

可在官网上获取最新的Gokins动态

## Gokins Demo
http://gokins.cn:8030
```
用户名: guest
密码: 123456
```

## Quick Start

It is super easy to get started with your first project.


#### Step 1: 环境准备

- Mysql
- Dokcer(非必要)

#### Step 2: 下载
- Linux下载:http://bin.gokins.cn/gokins-linux-amd64
- Mac下载:http://bin.gokins.cn/gokins-darwin-amd64
> 我们推荐使用docker或者直接下载release的方式安装Gokins`

#### Step 3: 启动服务

```
./gokins
``` 

#### Step 3: 安装Gokins

访问 `http://localhost:8030`进入到Gokins安装页面

![](https://static01.imgkr.com/temp/e484d9747dec43108325c22283abe39f.png)

按页面上的提示填入信息

默认管理员账号密码

`username :gokins `

`pwd: 123456 `

#### Step 4:  新建流水线

- 进入到流水线页面

![](https://static01.imgkr.com/temp/ce383350056d4a63872b868c8f169c39.png)



- 点击新建流水线

![](https://static01.imgkr.com/temp/a3c2a870c9d94956bda2a685cc447077.png)


填入流水线基本信息

- 流水线配置

```
version: 1.0
vars:
stages:
  - stage:
    displayName: build
    name: build
    steps:
      - step: shell@sh
        displayName: test-build
        name: build
        env:
        commands:
          - echo Hello World

```

关于流水线配置的YML更多信息请访问 [YML文档](http://gokins.cn/%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%AF%AD%E6%B3%95/)


- 运行流水线

![](https://static01.imgkr.com/temp/f002a22738644c8dbd40f0860c2bbb9e.png)


`这里可以选择输入仓库分支或者commitSha,如果不填则为默认分支`

- 查看运行结果

![](https://static01.imgkr.com/temp/681c8ea0a7dc45bcb9fe14234c5761be.png)



================================================
FILE: bean/condition.go
================================================
package bean

import (
	"regexp"
	"strings"
)

func skipBranch(c *Condition, branch string) bool {
	return !c.Match(branch)
}
func skipCommitMessages(c *Condition, branch string) bool {
	return !c.Match(branch)
}
func skipCommitNotes(c *Condition, branch string) bool {
	return !c.Match(branch)
}

func (c *Condition) Match(v string) bool {
	if c == nil {
		return false
	}
	if c.Include != nil && c.Exclude != nil {
		return c.Includes(v) && !c.Excludes(v)
	}

	if c.Include != nil && c.Includes(v) {
		return true
	}

	if c.Exclude != nil && !c.Excludes(v) {
		return true
	}

	return false
}

func (c *Condition) Excludes(v string) bool {
	for _, in := range c.Exclude {
		if in == "" {
			continue
		}
		if in == v {
			return true
		}
		if isMatch(v, in) {
			return true
		}
		reg, err := regexp.Compile(in)
		if err != nil {
			return false
		}
		match := reg.Match([]byte(strings.Replace(v, "\n", "", -1)))
		if match {
			return true
		}
	}
	return false
}

func (c *Condition) Includes(v string) bool {
	for _, in := range c.Include {
		if in == "" {
			continue
		}
		if in == v {
			return true
		}
		if isMatch(v, in) {
			return true
		}
		reg, err := regexp.Compile(in)
		if err != nil {
			return false
		}
		match := reg.Match([]byte(strings.Replace(v, "\n", "", -1)))
		if match {
			return true
		}
	}
	return false
}

func isMatch(s string, p string) bool {
	m, n := len(s), len(p)
	dp := make([][]bool, m+1)
	for i := 0; i <= m; i++ {
		dp[i] = make([]bool, n+1)
	}
	dp[0][0] = true
	for i := 1; i <= n; i++ {
		if p[i-1] == '*' {
			dp[0][i] = true
		} else {
			break
		}
	}
	for i := 1; i <= m; i++ {
		for j := 1; j <= n; j++ {
			if p[j-1] == '*' {
				dp[i][j] = dp[i][j-1] || dp[i-1][j]
			} else if s[i-1] == p[j-1] {
				dp[i][j] = dp[i-1][j-1]
			}
		}
	}
	return dp[m][n]
}


================================================
FILE: bean/db.go
================================================
package bean

type Page struct {
	Page  int64       `json:"page"`
	Size  int64       `json:"size"`
	Total int64       `json:"total"`
	Pages int64       `json:"pages"`
	Data  interface{} `json:"data"`
}
type PageGen struct {
	SQL       string
	Args      []interface{}
	CountCols string
	FindCols  string
}


================================================
FILE: bean/http.go
================================================
package bean

type IdsRes struct {
	Id  string `json:"id"`
	Aid int64  `json:"aid"`
}
type LoginReq struct {
	Name string `json:"name"`
	Pass string `json:"pass"`
}
type LoginRes struct {
	Token         string `json:"token"`
	Id            string `json:"id"`
	Name          string `json:"name"`
	Nick          string `json:"nick"`
	Avatar        string `json:"avatar"`
	LastLoginTime string `json:"lastLoginTime"`
}


================================================
FILE: bean/models.go
================================================
package bean

type PipelineShow struct {
	Id           string `json:"id"`
	Uid          string `json:"uid"`
	Name         string `json:"name"`
	DisplayName  string `json:"displayName"`
	PipelineType string `json:"pipelineType"`
	YmlContent   string `json:"ymlContent"`
	Url          string `json:"url"`
	Username     string `json:"username"`
	AccessToken  string `json:"accessToken"`
}


================================================
FILE: bean/pipeline.go
================================================
package bean

type NewPipeline struct {
	Name        string            `json:"name"`
	DisplayName string            `json:"displayName"`
	Content     string            `json:"content"`
	OrgId       string            `json:"orgId"`
	AccessToken string            `json:"accessToken"`
	Url         string            `json:"url"`
	Username    string            `json:"username"`
	Vars        []*NewPipelineVar `json:"vars"`
}

type NewPipelineVar struct {
	Name    string `json:"name"`
	Value   string `json:"value"`
	Remarks string `json:"remarks"`
	Public  bool   `json:"public"`
}

func (p *NewPipeline) Check() bool {
	if p.Name == "" || p.Content == "" {
		return false
	}
	return true
}


================================================
FILE: bean/pipelinevar.go
================================================
package bean

type PipelineVar struct {
	Aid        int64  `json:"aid"`
	PipelineId string `json:"pipelineId"`
	Name       string ` json:"name"`
	Value      string ` json:"value"`
	Remarks    string ` json:"remarks"`
	Public     bool   ` json:"public"`
}


================================================
FILE: bean/runtime.go
================================================
package bean

import "time"

type LogOutJson struct {
	Id      string    `json:"id"`
	Content string    `json:"content"`
	Times   time.Time `json:"times"`
	Errs    bool      `json:"errs"`
}
type LogOutJsonRes struct {
	Id      string    `json:"id"`
	Content string    `json:"content"`
	Times   time.Time `json:"times"`
	Errs    bool      `json:"errs"`

	Offset int64 `json:"offset"`
}


================================================
FILE: bean/thirdbean/gitea.go
================================================
package thirdbean

import "time"

type ResultGiteaRepo struct {
	Id    int `json:"id"`
	Owner struct {
		Id            int       `json:"id"`
		Login         string    `json:"login"`
		FullName      string    `json:"full_name"`
		Email         string    `json:"email"`
		AvatarUrl     string    `json:"avatar_url"`
		Language      string    `json:"language"`
		IsAdmin       bool      `json:"is_admin"`
		LastLogin     time.Time `json:"last_login"`
		Created       time.Time `json:"created"`
		Restricted    bool      `json:"restricted"`
		Active        bool      `json:"active"`
		ProhibitLogin bool      `json:"prohibit_login"`
		Location      string    `json:"location"`
		Website       string    `json:"website"`
		Description   string    `json:"description"`
		Username      string    `json:"username"`
	} `json:"owner"`
	Name            string      `json:"name"`
	FullName        string      `json:"full_name"`
	Description     string      `json:"description"`
	Empty           bool        `json:"empty"`
	Private         bool        `json:"private"`
	Fork            bool        `json:"fork"`
	Template        bool        `json:"template"`
	Parent          interface{} `json:"parent"`
	Mirror          bool        `json:"mirror"`
	Size            int         `json:"size"`
	HtmlUrl         string      `json:"html_url"`
	SshUrl          string      `json:"ssh_url"`
	CloneUrl        string      `json:"clone_url"`
	OriginalUrl     string      `json:"original_url"`
	Website         string      `json:"website"`
	StarsCount      int         `json:"stars_count"`
	ForksCount      int         `json:"forks_count"`
	WatchersCount   int         `json:"watchers_count"`
	OpenIssuesCount int         `json:"open_issues_count"`
	OpenPrCounter   int         `json:"open_pr_counter"`
	ReleaseCounter  int         `json:"release_counter"`
	DefaultBranch   string      `json:"default_branch"`
	Archived        bool        `json:"archived"`
	CreatedAt       time.Time   `json:"created_at"`
	UpdatedAt       time.Time   `json:"updated_at"`
	Permissions     struct {
		Admin bool `json:"admin"`
		Push  bool `json:"push"`
		Pull  bool `json:"pull"`
	} `json:"permissions"`
	HasIssues       bool `json:"has_issues"`
	InternalTracker struct {
		EnableTimeTracker                bool `json:"enable_time_tracker"`
		AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"`
		EnableIssueDependencies          bool `json:"enable_issue_dependencies"`
	} `json:"internal_tracker"`
	HasWiki                   bool   `json:"has_wiki"`
	HasPullRequests           bool   `json:"has_pull_requests"`
	HasProjects               bool   `json:"has_projects"`
	IgnoreWhitespaceConflicts bool   `json:"ignore_whitespace_conflicts"`
	AllowMergeCommits         bool   `json:"allow_merge_commits"`
	AllowRebase               bool   `json:"allow_rebase"`
	AllowRebaseExplicit       bool   `json:"allow_rebase_explicit"`
	AllowSquashMerge          bool   `json:"allow_squash_merge"`
	DefaultMergeStyle         string `json:"default_merge_style"`
	AvatarUrl                 string `json:"avatar_url"`
	Internal                  bool   `json:"internal"`
	MirrorInterval            string `json:"mirror_interval"`
}
type ResultGiteaRepoBranch struct {
	Name   string `json:"name"`
	Commit struct {
		Id      string `json:"id"`
		Message string `json:"message"`
		Url     string `json:"url"`
		Author  struct {
			Name     string `json:"name"`
			Email    string `json:"email"`
			Username string `json:"username"`
		} `json:"author"`
		Committer struct {
			Name     string `json:"name"`
			Email    string `json:"email"`
			Username string `json:"username"`
		} `json:"committer"`
		Verification struct {
			Verified  bool        `json:"verified"`
			Reason    string      `json:"reason"`
			Signature string      `json:"signature"`
			Signer    interface{} `json:"signer"`
			Payload   string      `json:"payload"`
		} `json:"verification"`
		Timestamp time.Time   `json:"timestamp"`
		Added     interface{} `json:"added"`
		Removed   interface{} `json:"removed"`
		Modified  interface{} `json:"modified"`
	} `json:"commit"`
	Protected                     bool          `json:"protected"`
	RequiredApprovals             int           `json:"required_approvals"`
	EnableStatusCheck             bool          `json:"enable_status_check"`
	StatusCheckContexts           []interface{} `json:"status_check_contexts"`
	UserCanPush                   bool          `json:"user_can_push"`
	UserCanMerge                  bool          `json:"user_can_merge"`
	EffectiveBranchProtectionName string        `json:"effective_branch_protection_name"`
}
type ResultGetGiteaHook struct {
	Id     int    `json:"id"`
	Type   string `json:"type"`
	Config struct {
		ContentType string `json:"content_type"`
		Url         string `json:"url"`
	} `json:"config"`
	Events    []string  `json:"events"`
	Active    bool      `json:"active"`
	UpdatedAt time.Time `json:"updated_at"`
	CreatedAt time.Time `json:"created_at"`
}


================================================
FILE: bean/thirdbean/gitee.go
================================================
package thirdbean

import "time"

type ResultGiteeCreateHooks struct {
	Id                  int         `json:"id"`
	Url                 string      `json:"url"`
	CreatedAt           time.Time   `json:"created_at"`
	Password            string      `json:"password"`
	ProjectId           int         `json:"project_id"`
	Result              string      `json:"result"`
	ResultCode          interface{} `json:"result_code"`
	PushEvents          bool        `json:"push_events"`
	TagPushEvents       bool        `json:"tag_push_events"`
	IssuesEvents        bool        `json:"issues_events"`
	NoteEvents          bool        `json:"note_events"`
	MergeRequestsEvents bool        `json:"merge_requests_events"`
}

type ResultGiteeRepo struct {
	Id        int64  `json:"id"`
	FullName  string `json:"full_name"`
	HumanName string `json:"human_name"`
	Url       string `json:"url"`
	Namespace struct {
		Id      int    `json:"id"`
		Type    string `json:"type"`
		Name    string `json:"name"`
		Path    string `json:"path"`
		HtmlUrl string `json:"html_url"`
	} `json:"namespace"`
	Path  string `json:"path"`
	Name  string `json:"name"`
	Owner struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"owner"`
	Description         string      `json:"description"`
	Private             bool        `json:"private"`
	Public              bool        `json:"public"`
	Internal            bool        `json:"internal"`
	Fork                bool        `json:"fork"`
	HtmlUrl             string      `json:"html_url"`
	SshUrl              string      `json:"ssh_url"`
	ForksUrl            string      `json:"forks_url"`
	KeysUrl             string      `json:"keys_url"`
	CollaboratorsUrl    string      `json:"collaborators_url"`
	HooksUrl            string      `json:"hooks_url"`
	BranchesUrl         string      `json:"branches_url"`
	TagsUrl             string      `json:"tags_url"`
	BlobsUrl            string      `json:"blobs_url"`
	StargazersUrl       string      `json:"stargazers_url"`
	ContributorsUrl     string      `json:"contributors_url"`
	CommitsUrl          string      `json:"commits_url"`
	CommentsUrl         string      `json:"comments_url"`
	IssueCommentUrl     string      `json:"issue_comment_url"`
	IssuesUrl           string      `json:"issues_url"`
	PullsUrl            string      `json:"pulls_url"`
	MilestonesUrl       string      `json:"milestones_url"`
	NotificationsUrl    string      `json:"notifications_url"`
	LabelsUrl           string      `json:"labels_url"`
	ReleasesUrl         string      `json:"releases_url"`
	Recommend           bool        `json:"recommend"`
	Homepage            interface{} `json:"homepage"`
	Language            string      `json:"language"`
	ForksCount          int         `json:"forks_count"`
	StargazersCount     int         `json:"stargazers_count"`
	WatchersCount       int         `json:"watchers_count"`
	DefaultBranch       string      `json:"default_branch"`
	OpenIssuesCount     int         `json:"open_issues_count"`
	HasIssues           bool        `json:"has_issues"`
	HasWiki             bool        `json:"has_wiki"`
	IssueComment        bool        `json:"issue_comment"`
	CanComment          bool        `json:"can_comment"`
	PullRequestsEnabled bool        `json:"pull_requests_enabled"`
	HasPage             bool        `json:"has_page"`
	License             string      `json:"license"`
	Outsourced          bool        `json:"outsourced"`
	ProjectCreator      string      `json:"project_creator"`
	Members             []string    `json:"members"`
	PushedAt            time.Time   `json:"pushed_at"`
	CreatedAt           time.Time   `json:"created_at"`
	UpdatedAt           time.Time   `json:"updated_at"`
	Parent              interface{} `json:"parent"`
	Paas                interface{} `json:"paas"`
	Stared              bool        `json:"stared"`
	Watched             bool        `json:"watched"`
	Permission          struct {
		Pull  bool `json:"pull"`
		Push  bool `json:"push"`
		Admin bool `json:"admin"`
	} `json:"permission"`
	Relation        string `json:"relation"`
	AssigneesNumber int    `json:"assignees_number"`
	TestersNumber   int    `json:"testers_number"`
	Assignees       []struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"assignees"`
	Testers []struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"testers"`
}

type ResultGiteeRepoBranch struct {
	Name   string `json:"name"`
	Commit struct {
		Sha string `json:"sha"`
		Url string `json:"url"`
	} `json:"commit"`
	Protected     bool   `json:"protected"`
	ProtectionUrl string `json:"protection_url"`
}

type ResultGetGiteeHook struct {
	Id                  int       `json:"id"`
	Url                 string    `json:"url"`
	CreatedAt           time.Time `json:"created_at"`
	Password            string    `json:"password"`
	ProjectId           int       `json:"project_id"`
	Result              string    `json:"result"`
	ResultCode          int       `json:"result_code"`
	PushEvents          bool      `json:"push_events"`
	TagPushEvents       bool      `json:"tag_push_events"`
	IssuesEvents        bool      `json:"issues_events"`
	NoteEvents          bool      `json:"note_events"`
	MergeRequestsEvents bool      `json:"merge_requests_events"`
}


================================================
FILE: bean/thirdbean/giteepremium.go
================================================
package thirdbean

import "time"

type ResultGiteePremiumCreateHooks struct {
	Id                  int         `json:"id"`
	Url                 string      `json:"url"`
	CreatedAt           time.Time   `json:"created_at"`
	Password            string      `json:"password"`
	ProjectId           int         `json:"project_id"`
	Result              string      `json:"result"`
	ResultCode          interface{} `json:"result_code"`
	PushEvents          bool        `json:"push_events"`
	TagPushEvents       bool        `json:"tag_push_events"`
	IssuesEvents        bool        `json:"issues_events"`
	NoteEvents          bool        `json:"note_events"`
	MergeRequestsEvents bool        `json:"merge_requests_events"`
}

type ResultGiteePremiumRepo struct {
	Id        int64  `json:"id"`
	FullName  string `json:"full_name"`
	HumanName string `json:"human_name"`
	Url       string `json:"url"`
	Namespace struct {
		Id      int    `json:"id"`
		Type    string `json:"type"`
		Name    string `json:"name"`
		Path    string `json:"path"`
		HtmlUrl string `json:"html_url"`
	} `json:"namespace"`
	Path  string `json:"path"`
	Name  string `json:"name"`
	Owner struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"owner"`
	Description         string      `json:"description"`
	Private             bool        `json:"private"`
	Public              bool        `json:"public"`
	Internal            bool        `json:"internal"`
	Fork                bool        `json:"fork"`
	HtmlUrl             string      `json:"html_url"`
	SshUrl              string      `json:"ssh_url"`
	ForksUrl            string      `json:"forks_url"`
	KeysUrl             string      `json:"keys_url"`
	CollaboratorsUrl    string      `json:"collaborators_url"`
	HooksUrl            string      `json:"hooks_url"`
	BranchesUrl         string      `json:"branches_url"`
	TagsUrl             string      `json:"tags_url"`
	BlobsUrl            string      `json:"blobs_url"`
	StargazersUrl       string      `json:"stargazers_url"`
	ContributorsUrl     string      `json:"contributors_url"`
	CommitsUrl          string      `json:"commits_url"`
	CommentsUrl         string      `json:"comments_url"`
	IssueCommentUrl     string      `json:"issue_comment_url"`
	IssuesUrl           string      `json:"issues_url"`
	PullsUrl            string      `json:"pulls_url"`
	MilestonesUrl       string      `json:"milestones_url"`
	NotificationsUrl    string      `json:"notifications_url"`
	LabelsUrl           string      `json:"labels_url"`
	ReleasesUrl         string      `json:"releases_url"`
	Recommend           bool        `json:"recommend"`
	Homepage            interface{} `json:"homepage"`
	Language            string      `json:"language"`
	ForksCount          int         `json:"forks_count"`
	StargazersCount     int         `json:"stargazers_count"`
	WatchersCount       int         `json:"watchers_count"`
	DefaultBranch       string      `json:"default_branch"`
	OpenIssuesCount     int         `json:"open_issues_count"`
	HasIssues           bool        `json:"has_issues"`
	HasWiki             bool        `json:"has_wiki"`
	IssueComment        bool        `json:"issue_comment"`
	CanComment          bool        `json:"can_comment"`
	PullRequestsEnabled bool        `json:"pull_requests_enabled"`
	HasPage             bool        `json:"has_page"`
	License             string      `json:"license"`
	Outsourced          bool        `json:"outsourced"`
	ProjectCreator      string      `json:"project_creator"`
	Members             []string    `json:"members"`
	PushedAt            time.Time   `json:"pushed_at"`
	CreatedAt           time.Time   `json:"created_at"`
	UpdatedAt           time.Time   `json:"updated_at"`
	Parent              interface{} `json:"parent"`
	Paas                interface{} `json:"paas"`
	Stared              bool        `json:"stared"`
	Watched             bool        `json:"watched"`
	Permission          struct {
		Pull  bool `json:"pull"`
		Push  bool `json:"push"`
		Admin bool `json:"admin"`
	} `json:"permission"`
	Relation        string `json:"relation"`
	AssigneesNumber int    `json:"assignees_number"`
	TestersNumber   int    `json:"testers_number"`
	Assignees       []struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"assignees"`
	Testers []struct {
		Id                int    `json:"id"`
		Login             string `json:"login"`
		Name              string `json:"name"`
		AvatarUrl         string `json:"avatar_url"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
	} `json:"testers"`
}

type ResultGiteePremiumRepoBranch struct {
	Name   string `json:"name"`
	Commit struct {
		Sha string `json:"sha"`
		Url string `json:"url"`
	} `json:"commit"`
	Protected     bool   `json:"protected"`
	ProtectionUrl string `json:"protection_url"`
}

type ResultGetGiteePremiumHook struct {
	Id                  int       `json:"id"`
	Url                 string    `json:"url"`
	CreatedAt           time.Time `json:"created_at"`
	Password            string    `json:"password"`
	ProjectId           int       `json:"project_id"`
	Result              string    `json:"result"`
	ResultCode          int       `json:"result_code"`
	PushEvents          bool      `json:"push_events"`
	TagPushEvents       bool      `json:"tag_push_events"`
	IssuesEvents        bool      `json:"issues_events"`
	NoteEvents          bool      `json:"note_events"`
	MergeRequestsEvents bool      `json:"merge_requests_events"`
}


================================================
FILE: bean/thirdbean/github.go
================================================
package thirdbean

import "time"

type ResultGithubRepo struct {
	Id       int    `json:"id"`
	NodeId   string `json:"node_id"`
	Name     string `json:"name"`
	FullName string `json:"full_name"`
	Private  bool   `json:"private"`
	Owner    struct {
		Login             string `json:"login"`
		Id                int    `json:"id"`
		NodeId            string `json:"node_id"`
		AvatarUrl         string `json:"avatar_url"`
		GravatarId        string `json:"gravatar_id"`
		Url               string `json:"url"`
		HtmlUrl           string `json:"html_url"`
		FollowersUrl      string `json:"followers_url"`
		FollowingUrl      string `json:"following_url"`
		GistsUrl          string `json:"gists_url"`
		StarredUrl        string `json:"starred_url"`
		SubscriptionsUrl  string `json:"subscriptions_url"`
		OrganizationsUrl  string `json:"organizations_url"`
		ReposUrl          string `json:"repos_url"`
		EventsUrl         string `json:"events_url"`
		ReceivedEventsUrl string `json:"received_events_url"`
		Type              string `json:"type"`
		SiteAdmin         bool   `json:"site_admin"`
	} `json:"owner"`
	HtmlUrl          string      `json:"html_url"`
	Description      *string     `json:"description"`
	Fork             bool        `json:"fork"`
	Url              string      `json:"url"`
	ForksUrl         string      `json:"forks_url"`
	KeysUrl          string      `json:"keys_url"`
	CollaboratorsUrl string      `json:"collaborators_url"`
	TeamsUrl         string      `json:"teams_url"`
	HooksUrl         string      `json:"hooks_url"`
	IssueEventsUrl   string      `json:"issue_events_url"`
	EventsUrl        string      `json:"events_url"`
	AssigneesUrl     string      `json:"assignees_url"`
	BranchesUrl      string      `json:"branches_url"`
	TagsUrl          string      `json:"tags_url"`
	BlobsUrl         string      `json:"blobs_url"`
	GitTagsUrl       string      `json:"git_tags_url"`
	GitRefsUrl       string      `json:"git_refs_url"`
	TreesUrl         string      `json:"trees_url"`
	StatusesUrl      string      `json:"statuses_url"`
	LanguagesUrl     string      `json:"languages_url"`
	StargazersUrl    string      `json:"stargazers_url"`
	ContributorsUrl  string      `json:"contributors_url"`
	SubscribersUrl   string      `json:"subscribers_url"`
	SubscriptionUrl  string      `json:"subscription_url"`
	CommitsUrl       string      `json:"commits_url"`
	GitCommitsUrl    string      `json:"git_commits_url"`
	CommentsUrl      string      `json:"comments_url"`
	IssueCommentUrl  string      `json:"issue_comment_url"`
	ContentsUrl      string      `json:"contents_url"`
	CompareUrl       string      `json:"compare_url"`
	MergesUrl        string      `json:"merges_url"`
	ArchiveUrl       string      `json:"archive_url"`
	DownloadsUrl     string      `json:"downloads_url"`
	IssuesUrl        string      `json:"issues_url"`
	PullsUrl         string      `json:"pulls_url"`
	MilestonesUrl    string      `json:"milestones_url"`
	NotificationsUrl string      `json:"notifications_url"`
	LabelsUrl        string      `json:"labels_url"`
	ReleasesUrl      string      `json:"releases_url"`
	DeploymentsUrl   string      `json:"deployments_url"`
	CreatedAt        time.Time   `json:"created_at"`
	UpdatedAt        time.Time   `json:"updated_at"`
	PushedAt         time.Time   `json:"pushed_at"`
	GitUrl           string      `json:"git_url"`
	SshUrl           string      `json:"ssh_url"`
	CloneUrl         string      `json:"clone_url"`
	SvnUrl           string      `json:"svn_url"`
	Homepage         *string     `json:"homepage"`
	Size             int         `json:"size"`
	StargazersCount  int         `json:"stargazers_count"`
	WatchersCount    int         `json:"watchers_count"`
	Language         *string     `json:"language"`
	HasIssues        bool        `json:"has_issues"`
	HasProjects      bool        `json:"has_projects"`
	HasDownloads     bool        `json:"has_downloads"`
	HasWiki          bool        `json:"has_wiki"`
	HasPages         bool        `json:"has_pages"`
	ForksCount       int         `json:"forks_count"`
	MirrorUrl        interface{} `json:"mirror_url"`
	Archived         bool        `json:"archived"`
	Disabled         bool        `json:"disabled"`
	OpenIssuesCount  int         `json:"open_issues_count"`
	License          *struct {
		Key    string  `json:"key"`
		Name   string  `json:"name"`
		SpdxId string  `json:"spdx_id"`
		Url    *string `json:"url"`
		NodeId string  `json:"node_id"`
	} `json:"license"`
	Forks         int    `json:"forks"`
	OpenIssues    int    `json:"open_issues"`
	Watchers      int    `json:"watchers"`
	DefaultBranch string `json:"default_branch"`
	Permissions   struct {
		Admin bool `json:"admin"`
		Push  bool `json:"push"`
		Pull  bool `json:"pull"`
	} `json:"permissions"`
}

type ResultGithubRepoBranch struct {
	Name   string `json:"name"`
	Commit struct {
		Sha string `json:"sha"`
		Url string `json:"url"`
	} `json:"commit"`
	Protected  bool `json:"protected"`
	Protection struct {
		RequiredStatusChecks struct {
			EnforcementLevel string   `json:"enforcement_level"`
			Contexts         []string `json:"contexts"`
		} `json:"required_status_checks"`
	} `json:"protection"`
	ProtectionUrl string `json:"protection_url"`
}

type ResultGetGithubHook struct {
	Type   string   `json:"type"`
	Id     int      `json:"id"`
	Name   string   `json:"name"`
	Active bool     `json:"active"`
	Events []string `json:"events"`
	Config struct {
		ContentType string `json:"content_type"`
		InsecureSsl string `json:"insecure_ssl"`
		Url         string `json:"url"`
	} `json:"config"`
	UpdatedAt    time.Time `json:"updated_at"`
	CreatedAt    time.Time `json:"created_at"`
	Url          string    `json:"url"`
	TestUrl      string    `json:"test_url"`
	PingUrl      string    `json:"ping_url"`
	LastResponse struct {
		Code    interface{} `json:"code"`
		Status  string      `json:"status"`
		Message interface{} `json:"message"`
	} `json:"last_response"`
}


================================================
FILE: bean/thirdbean/gitlab.go
================================================
package thirdbean

import "time"

type ResultGitlabRepo struct {
	Id                int           `json:"id"`
	Description       string        `json:"description"`
	Name              string        `json:"name"`
	NameWithNamespace string        `json:"name_with_namespace"`
	Path              string        `json:"path"`
	PathWithNamespace string        `json:"path_with_namespace"`
	CreatedAt         time.Time     `json:"created_at"`
	DefaultBranch     string        `json:"default_branch"`
	TagList           []interface{} `json:"tag_list"`
	Topics            []interface{} `json:"topics"`
	SshUrlToRepo      string        `json:"ssh_url_to_repo"`
	HttpUrlToRepo     string        `json:"http_url_to_repo"`
	WebUrl            string        `json:"web_url"`
	ReadmeUrl         string        `json:"readme_url"`
	AvatarUrl         interface{}   `json:"avatar_url"`
	ForksCount        int           `json:"forks_count"`
	StarCount         int           `json:"star_count"`
	LastActivityAt    time.Time     `json:"last_activity_at"`
	Namespace         struct {
		Id        int         `json:"id"`
		Name      string      `json:"name"`
		Path      string      `json:"path"`
		Kind      string      `json:"kind"`
		FullPath  string      `json:"full_path"`
		ParentId  interface{} `json:"parent_id"`
		AvatarUrl string      `json:"avatar_url"`
		WebUrl    string      `json:"web_url"`
	} `json:"namespace"`
	ContainerRegistryImagePrefix string `json:"container_registry_image_prefix"`
	Links                        struct {
		Self          string `json:"self"`
		Issues        string `json:"issues"`
		MergeRequests string `json:"merge_requests"`
		RepoBranches  string `json:"repo_branches"`
		Labels        string `json:"labels"`
		Events        string `json:"events"`
		Members       string `json:"members"`
	} `json:"_links"`
	PackagesEnabled bool   `json:"packages_enabled"`
	EmptyRepo       bool   `json:"empty_repo"`
	Archived        bool   `json:"archived"`
	Visibility      string `json:"visibility"`
	Owner           struct {
		Id        int    `json:"id"`
		Name      string `json:"name"`
		Username  string `json:"username"`
		State     string `json:"state"`
		AvatarUrl string `json:"avatar_url"`
		WebUrl    string `json:"web_url"`
	} `json:"owner"`
	ResolveOutdatedDiffDiscussions bool `json:"resolve_outdated_diff_discussions"`
	ContainerExpirationPolicy      struct {
		Cadence       string      `json:"cadence"`
		Enabled       bool        `json:"enabled"`
		KeepN         int         `json:"keep_n"`
		OlderThan     string      `json:"older_than"`
		NameRegex     string      `json:"name_regex"`
		NameRegexKeep interface{} `json:"name_regex_keep"`
		NextRunAt     time.Time   `json:"next_run_at"`
	} `json:"container_expiration_policy"`
	IssuesEnabled                             bool          `json:"issues_enabled"`
	MergeRequestsEnabled                      bool          `json:"merge_requests_enabled"`
	WikiEnabled                               bool          `json:"wiki_enabled"`
	JobsEnabled                               bool          `json:"jobs_enabled"`
	SnippetsEnabled                           bool          `json:"snippets_enabled"`
	ContainerRegistryEnabled                  bool          `json:"container_registry_enabled"`
	ServiceDeskEnabled                        bool          `json:"service_desk_enabled"`
	ServiceDeskAddress                        string        `json:"service_desk_address"`
	CanCreateMergeRequestIn                   bool          `json:"can_create_merge_request_in"`
	IssuesAccessLevel                         string        `json:"issues_access_level"`
	RepositoryAccessLevel                     string        `json:"repository_access_level"`
	MergeRequestsAccessLevel                  string        `json:"merge_requests_access_level"`
	ForkingAccessLevel                        string        `json:"forking_access_level"`
	WikiAccessLevel                           string        `json:"wiki_access_level"`
	BuildsAccessLevel                         string        `json:"builds_access_level"`
	SnippetsAccessLevel                       string        `json:"snippets_access_level"`
	PagesAccessLevel                          string        `json:"pages_access_level"`
	OperationsAccessLevel                     string        `json:"operations_access_level"`
	AnalyticsAccessLevel                      string        `json:"analytics_access_level"`
	EmailsDisabled                            interface{}   `json:"emails_disabled"`
	SharedRunnersEnabled                      bool          `json:"shared_runners_enabled"`
	LfsEnabled                                bool          `json:"lfs_enabled"`
	CreatorId                                 int           `json:"creator_id"`
	ImportStatus                              string        `json:"import_status"`
	OpenIssuesCount                           int           `json:"open_issues_count"`
	CiDefaultGitDepth                         int           `json:"ci_default_git_depth"`
	CiForwardDeploymentEnabled                bool          `json:"ci_forward_deployment_enabled"`
	PublicJobs                                bool          `json:"public_jobs"`
	BuildTimeout                              int           `json:"build_timeout"`
	AutoCancelPendingPipelines                string        `json:"auto_cancel_pending_pipelines"`
	BuildCoverageRegex                        interface{}   `json:"build_coverage_regex"`
	CiConfigPath                              string        `json:"ci_config_path"`
	SharedWithGroups                          []interface{} `json:"shared_with_groups"`
	OnlyAllowMergeIfPipelineSucceeds          bool          `json:"only_allow_merge_if_pipeline_succeeds"`
	AllowMergeOnSkippedPipeline               interface{}   `json:"allow_merge_on_skipped_pipeline"`
	RestrictUserDefinedVariables              bool          `json:"restrict_user_defined_variables"`
	RequestAccessEnabled                      bool          `json:"request_access_enabled"`
	OnlyAllowMergeIfAllDiscussionsAreResolved bool          `json:"only_allow_merge_if_all_discussions_are_resolved"`
	RemoveSourceBranchAfterMerge              bool          `json:"remove_source_branch_after_merge"`
	PrintingMergeRequestLinkEnabled           bool          `json:"printing_merge_request_link_enabled"`
	MergeMethod                               string        `json:"merge_method"`
	SuggestionCommitMessage                   interface{}   `json:"suggestion_commit_message"`
	AutoDevopsEnabled                         bool          `json:"auto_devops_enabled"`
	AutoDevopsDeployStrategy                  string        `json:"auto_devops_deploy_strategy"`
	AutocloseReferencedIssues                 bool          `json:"autoclose_referenced_issues"`
	ExternalAuthorizationClassificationLabel  string        `json:"external_authorization_classification_label"`
	RequirementsEnabled                       bool          `json:"requirements_enabled"`
	SecurityAndComplianceEnabled              bool          `json:"security_and_compliance_enabled"`
	ComplianceFrameworks                      []interface{} `json:"compliance_frameworks"`
	Permissions                               struct {
		ProjectAccess struct {
			AccessLevel       int `json:"access_level"`
			NotificationLevel int `json:"notification_level"`
		} `json:"project_access"`
		GroupAccess interface{} `json:"group_access"`
	} `json:"permissions"`
}

type ResultGitlabRepoBranch struct {
	Name               string `json:"name"`
	Merged             bool   `json:"merged"`
	Protected          bool   `json:"protected"`
	Default            bool   `json:"default"`
	DevelopersCanPush  bool   `json:"developers_can_push"`
	DevelopersCanMerge bool   `json:"developers_can_merge"`
	CanPush            bool   `json:"can_push"`
	WebUrl             string `json:"web_url"`
	Commit             struct {
		AuthorEmail    string    `json:"author_email"`
		AuthorName     string    `json:"author_name"`
		AuthoredDate   time.Time `json:"authored_date"`
		CommittedDate  time.Time `json:"committed_date"`
		CommitterEmail string    `json:"committer_email"`
		CommitterName  string    `json:"committer_name"`
		Id             string    `json:"id"`
		ShortId        string    `json:"short_id"`
		Title          string    `json:"title"`
		Message        string    `json:"message"`
		ParentIds      []string  `json:"parent_ids"`
	} `json:"commit"`
}

type ResultGetGitlabHook struct {
	Id                       int       `json:"id"`
	Url                      string    `json:"url"`
	CreatedAt                time.Time `json:"created_at"`
	PushEvents               bool      `json:"push_events"`
	TagPushEvents            bool      `json:"tag_push_events"`
	MergeRequestsEvents      bool      `json:"merge_requests_events"`
	RepositoryUpdateEvents   bool      `json:"repository_update_events"`
	EnableSslVerification    bool      `json:"enable_ssl_verification"`
	ProjectId                int       `json:"project_id"`
	IssuesEvents             bool      `json:"issues_events"`
	ConfidentialIssuesEvents bool      `json:"confidential_issues_events"`
	NoteEvents               bool      `json:"note_events"`
	ConfidentialNoteEvents   bool      `json:"confidential_note_events"`
	PipelineEvents           bool      `json:"pipeline_events"`
	WikiPageEvents           bool      `json:"wiki_page_events"`
	DeploymentEvents         bool      `json:"deployment_events"`
	JobEvents                bool      `json:"job_events"`
	ReleasesEvents           bool      `json:"releases_events"`
	PushEventsBranchFilter   string    `json:"push_events_branch_filter"`
}


================================================
FILE: bean/trigger.go
================================================
package bean

import "errors"

type TriggerParam struct {
	Id         string `json:"id"`
	PipelineId string `json:"pipelineId"`
	Types      string `json:"types"`
	Name       string `json:"name"`
	Desc       string `json:"desc"`
	Params     string `json:"params"`
	Enabled    bool   ` json:"enabled"`
}

func (c *TriggerParam) Check() error {
	if c.PipelineId == "" {
		return errors.New("流水线ID不能为空")
	}
	if c.Types == "" {
		return errors.New("触发器类型不能为空")
	}
	if c.Name == "" {
		return errors.New("触发器名称不能为空")
	}
	if c.Params == "" {
		return errors.New("触发器参数不能为空")
	}
	return nil
}


================================================
FILE: bean/yml.go
================================================
package bean

import (
	"encoding/json"
	"errors"
	"fmt"
	"strings"
)

type Pipeline struct {
	Version  string              `yaml:"version,omitempty" json:"version"`
	Triggers map[string]*Trigger `yaml:"triggers,omitempty" json:"triggers"`
	Vars     map[string]string   `yaml:"vars,omitempty" json:"vars"`
	Stages   []*Stage            `yaml:"stages,omitempty" json:"stages"`
}

type Trigger struct {
	AutoCancel     bool       `yaml:"autoCancel,omitempty" json:"autoCancel,omitempty"`
	Timeout        string     `yaml:"timeout,omitempty" json:"timeout,omitempty"`
	Branches       *Condition `yaml:"branches,omitempty" json:"branches,omitempty"`
	Tags           *Condition `yaml:"tags,omitempty" json:"tags,omitempty"`
	Paths          *Condition `yaml:"paths,omitempty" json:"paths,omitempty"`
	Notes          *Condition `yaml:"notes,omitempty" json:"notes,omitempty"`
	CommitMessages *Condition `yaml:"commitMessages,omitempty" json:"commitMessages,omitempty"`
}

type Condition struct {
	Include []string `yaml:"include,omitempty" json:"include,omitempty"`
	Exclude []string `yaml:"exclude,omitempty" json:"exclude,omitempty"`
}

type Stage struct {
	Stage       string  `yaml:"stage" json:"stage"`
	Name        string  `yaml:"name,omitempty" json:"name"`
	DisplayName string  `yaml:"displayName,omitempty" json:"displayName"`
	Steps       []*Step `yaml:"steps,omitempty" json:"steps"`
}

/*type Input struct {
	Value string `yaml:"value"`
	Required bool `yaml:"required"`
}*/
type Step struct {
	Step         string            `yaml:"step" json:"step"`
	DisplayName  string            `yaml:"displayName,omitempty" json:"displayName"`
	Name         string            `yaml:"name,omitempty" json:"name"`
	Input        map[string]string `yaml:"input,omitempty" json:"input"`
	Env          map[string]string `yaml:"env,omitempty" json:"env"`
	Commands     interface{}       `yaml:"commands,omitempty" json:"commands"`
	Waits        []string          `yaml:"wait,omitempty" json:"wait"`
	Image        string            `yaml:"image,omitempty" json:"image"`
	Artifacts    []*Artifact       `yaml:"artifacts,omitempty" json:"artifacts"`
	UseArtifacts []*UseArtifacts   `yaml:"useArtifacts,omitempty" json:"useArtifacts"`
}

type Artifact struct {
	Scope      string `yaml:"scope,omitempty" json:"scope"`
	Repository string `yaml:"repository,omitempty" json:"repository"`
	Name       string `yaml:"name,omitempty" json:"name"`
	Path       string `yaml:"path,omitempty" json:"path"`
}

type UseArtifacts struct {
	Scope      string `yaml:"scope" json:"scope"`           //archive,pipeline,env
	Repository string `yaml:"repository" json:"repository"` // archive,制品库ID
	Name       string `yaml:"name" json:"name"`             //archive,pipeline,env
	//IsForce    bool   `yaml:"isForce" json:"isForce"`
	IsUrl bool   `yaml:"isUrl" json:"isUrl"`
	Alias string `yaml:"alias" json:"alias"`
	Path  string `yaml:"path" json:"path"` //archive,pipeline

	FromStage string `yaml:"fromStage" json:"sourceStage"` //pipeline
	FromStep  string `yaml:"fromStep" json:"sourceStep"`   //pipeline
}

func (c *Pipeline) ToJson() ([]byte, error) {
	c.ConvertCmd()
	return json.Marshal(c)
}
func (c *Pipeline) ConvertCmd() {
	for _, stage := range c.Stages {
		for _, step := range stage.Steps {
			v := step.Commands
			switch v.(type) {
			case string:
				step.Commands = v.(string)
			case []interface{}:
				ls := make([]string, 0)
				for _, v1 := range v.([]interface{}) {
					ls = append(ls, fmt.Sprintf("%v", v1))
				}
				step.Commands = ls
			default:
				step.Commands = fmt.Sprintf("%v", v)
			}
		}
	}
}

func (c *Pipeline) Check() error {
	stages := make(map[string]map[string]*Step)
	if c.Stages == nil || len(c.Stages) <= 0 {
		return errors.New("stages 为空")
	}
	for _, v := range c.Stages {
		if v.Name == "" {
			return errors.New("stages name 为空")
		}
		if v.Steps == nil || len(v.Steps) <= 0 {
			return errors.New("step 为空")
		}
		if _, ok := stages[v.Name]; ok {
			return errors.New(fmt.Sprintf("build stages.%s 重复", v.Name))
		}
		m := map[string]*Step{}
		stages[v.Name] = m
		for _, e := range v.Steps {
			if strings.TrimSpace(e.Step) == "" {
				return errors.New("step 插件为空")
			}
			if e.Name == "" {
				return errors.New("step name 为空")
			}
			if _, ok := m[e.Name]; ok {
				return errors.New(fmt.Sprintf("steps.%s 重复", e.Name))
			}
			m[e.Name] = e
		}
	}
	return nil
}

//func (c *Pipeline) SkipTriggerRules(events string) bool {
//	if events != "manual" {
//		return true
//	}
//
//	if c.Triggers == nil || len(c.Triggers) <= 0 {
//		logrus.Error("Triggers is empty")
//		return false
//	}
//	switch events {
//	case "push", "pr", "comment":
//	default:
//		logrus.Debugf("not match action:%v", events)
//		return false
//	}
//	v, ok := c.Triggers[events]
//	if !ok {
//		logrus.Debugf("not match action: %v", events)
//		return false
//	}
//	if v == nil {
//		logrus.Debugf("%v trigger is empty",events)
//		return false
//	}
//	if !skipCommitNotes(v.Notes, pb.Info.Note) {
//		return false
//	} else if !skipBranch(v.Branches, pb.Info.Repository.Branch) {
//		return false
//	} else if !skipCommitMessages(v.CommitMessages, pb.Info.CommitMessage) {
//		return false
//	} else {
//		logrus.Debugf("%v skip", c.Name)
//		return true
//	}
//}


================================================
FILE: bindata.sh
================================================

# go get -u github.com/jteeuwen/go-bindata/...

go-bindata -o comm/migrate.go -pkg=comm -prefix migrates migrates/mysql/ migrates/sqlite/

================================================
FILE: bindui.sh
================================================
go run compressui.go

================================================
FILE: build.sh
================================================

export CGO_ENABLED=0
go build -o ../bin/gokins main.go

================================================
FILE: cmd/cmd.go
================================================
package cmd

import (
	"github.com/gokins/core"
	"github.com/gokins/gokins/comm"
	"github.com/gokins/gokins/server"
	hbtp "github.com/mgr9525/HyperByte-Transfer-Protocol"
	"gopkg.in/alecthomas/kingpin.v2"
	"os"
	"os/exec"
	"os/signal"
	"syscall"
)

const Version = "0.1.1"

var app = kingpin.New("gokins", "A golang workflow application.")

func Run() {
	regs()
	kingpin.Version(Version)
	kingpin.MustParse(app.Parse(os.Args[1:]))
}
func regs() {
	app.Flag("web", "gokins web host").Default(":8030").StringVar(&comm.WebHost)
	//app.Flag("hbtp", "gokins hbtp host").Default(":8031").StringVar(&comm.HbtpHost)
	app.Flag("workdir", "gokins work path").Short('w').StringVar(&comm.WorkPath)
	app.Flag("nupass", "can't update password").Hidden().BoolVar(&comm.NotUpPass)
	cmd := app.Command("run", "run process").Default().
		Action(run)
	cmd.Flag("debug", "debug log show").BoolVar(&core.Debug)

	cmd = app.Command("daemon", "run process background").
		Action(start)
}
func getArgs() []string {
	args := make([]string, 0)
	args = append(args, "run")
	if comm.WebHost != "" {
		args = append(args, "--web")
		args = append(args, comm.WebHost)
	}
	/*if comm.HbtpHost != "" {
		args = append(args, "--hbtp")
		args = append(args, comm.HbtpHost)
	}*/
	if comm.WorkPath != "" {
		args = append(args, "--workdir")
		args = append(args, comm.WorkPath)
	}
	if comm.NotUpPass {
		args = append(args, "--nupass")
	}
	return args
}
func start(pc *kingpin.ParseContext) error {
	args := getArgs()
	fullpth, err := os.Executable()
	if err != nil {
		return err
	}
	println("start process")
	cmd := exec.Command(fullpth, args...)
	err = cmd.Start()
	if err != nil {
		return err
	}
	return nil
}
func run(pc *kingpin.ParseContext) error {
	csig := make(chan os.Signal, 1)
	signal.Notify(csig, os.Interrupt, syscall.SIGALRM)
	go func() {
		s := <-csig
		hbtp.Debugf("get signal(%d):%s", s, s.String())
		comm.Cancel()
	}()
	if core.Debug {
		hbtp.Debug = true
	}
	return server.Run()
}


================================================
FILE: comm/app.go
================================================
package comm

import (
	"context"

	"github.com/boltdb/bolt"
	"github.com/gin-gonic/gin"
	hbtp "github.com/mgr9525/HyperByte-Transfer-Protocol"
	"xorm.io/xorm"
)

var (
	Ctx  context.Context
	cncl context.CancelFunc
)
var (
	Cfg       = Config{}
	Db        *xorm.Engine
	BCache    *bolt.DB
	WebEgn    *gin.Engine
	HbtpEgn   *hbtp.Engine
	IsMySQL   = false
	Installed = false
	NotUpPass = false
	WorkPath  = ""
	WebHost   = ""
	//HbtpHost = ""
)

func init() {
	Ctx, cncl = context.WithCancel(context.Background())
}
func Cancel() {
	if cncl != nil {
		cncl()
	}
}


================================================
FILE: comm/cache.go
================================================
package comm

import (
	"bytes"
	"encoding/json"
	"errors"
	"github.com/boltdb/bolt"
	hbtp "github.com/mgr9525/HyperByte-Transfer-Protocol"
	"github.com/sirupsen/logrus"
	"time"
)

var mainCacheBucket = []byte("mainCacheBucket")

func CacheSet(key string, data []byte, outm ...time.Duration) error {
	if BCache == nil {
		return errors.New("cache not init")
	}
	err := BCache.Update(func(tx *bolt.Tx) error {
		var err error
		bk := tx.Bucket(mainCacheBucket)
		if bk == nil {
			bk, err = tx.CreateBucket(mainCacheBucket)
			if err != nil {
				return err
			}
		}
		if data == nil {
			return bk.Delete([]byte(key))
		}
		buf := &bytes.Buffer{}
		var outms []byte
		if len(outm) > 0 {
			outms = []byte(time.Now().Add(outm[0]).Format(time.RFC3339Nano))
		} else {
			outms = []byte(time.Now().Add(time.Hour).Format(time.RFC3339Nano))
		}
		buf.Write(hbtp.BigIntToByte(int64(len(outms)), 4))
		buf.Write(outms)
		buf.Write(data)
		return bk.Put([]byte(key), buf.Bytes())
	})
	return err
}
func CacheSets(key string, data interface{}, outm ...time.Duration) error {
	if BCache == nil {
		return errors.New("cache not init")
	}
	if data == nil {
		return CacheSet(key, nil)
	}
	bts, err := json.Marshal(data)
	if err != nil {
		return err
	}
	return CacheSet(key, bts, outm...)
}
func parseCacheData(bts []byte) []byte {
	if bts == nil {
		return nil
	}
	ln := int(hbtp.BigByteToInt(bts[:4]))
	tms := string(bts[4 : ln+4])
	outm, err := time.Parse(time.RFC3339Nano, tms)
	if err != nil {
		return nil
	}
	if time.Since(outm).Milliseconds() < 0 {
		return bts[4+ln:]
	}
	return nil
}

var KeyNotFoundErr = errors.New("key not found")
var KeyOutTimeErr = errors.New("key is timeout")

func CacheGet(key string) ([]byte, error) {
	if BCache == nil {
		return nil, errors.New("cache not init")
	}
	var rt []byte
	err := BCache.View(func(tx *bolt.Tx) error {
		bk := tx.Bucket(mainCacheBucket)
		if bk == nil {
			return KeyNotFoundErr
		}
		bts := bk.Get([]byte(key))
		if bts == nil {
			return KeyNotFoundErr
		}
		rt = parseCacheData(bts)
		if rt == nil {
			bk.Delete([]byte(key))
			return KeyOutTimeErr
		}
		return nil
	})
	if time.Since(mainCacheClearTime).Hours() > 30 {
		go mainCacheClear()
	}
	return rt, err
}
func CacheGets(key string, data interface{}) error {
	if BCache == nil {
		return errors.New("cache not init")
	}
	if data == nil {
		return errors.New("data not be nil")
	}
	bts, err := CacheGet(key)
	if err != nil {
		return err
	}
	return json.Unmarshal(bts, data)
}

func CacheFlush() error {
	if BCache == nil {
		return errors.New("cache not init")
	}
	err := BCache.Update(func(tx *bolt.Tx) error {
		return tx.DeleteBucket(mainCacheBucket)
	})
	return err
}

var mainCacheClearTime time.Time

func mainCacheClear() {
	defer func() {
		if err := recover(); err != nil {
			logrus.Errorf("mainCacheClear recover err:%v", err)
		}
	}()

	if BCache == nil {
		return
	}
	/*if time.Now().Hour()!=3|| time.Since(mainCacheClearTime).Hours() < 30 {
		return
	}*/
	mainCacheClearTime = time.Now()
	/*if err := CacheFlush(); err != nil {
		logrus.Errorf("mainCacheClear err:%v", err)
	}*/
	err := BCache.Update(func(tx *bolt.Tx) error {
		bk := tx.Bucket(mainCacheBucket)
		if bk == nil {
			return nil
		}
		bk.ForEach(func(k, v []byte) error {
			data := parseCacheData(v)
			if data == nil {
				return bk.Delete(k)
			}
			return nil
		})
		return nil
	})
	if err != nil {
		logrus.Errorf("mainCacheClear err:%v", err)
	}
}


================================================
FILE: comm/config.go
================================================
package comm

type Config struct {
	Server struct {
		Host      string   `yaml:"host"` //外网访问地址
		LoginKey  string   `yaml:"loginKey"`
		RunLimit  int      `yaml:"runLimit"`
		HbtpHost  string   `yaml:"hbtpHost"`
		Secret    string   `yaml:"secret"`
		Shells    []string `yaml:"shells"`
		DownToken string   `yaml:"DownToken"`
	} `yaml:"server"`
	Datasource struct {
		Driver string `yaml:"driver"`
		Url    string `yaml:"url"`
	} `yaml:"datasource"`
}


================================================
FILE: comm/db.go
================================================
package comm

import (
	"errors"
	"fmt"
	"reflect"
	"strings"

	"github.com/gokins/gokins/bean"
	"xorm.io/builder"
	"xorm.io/xorm"
)

type SesFuncHandler = func(ses *xorm.Session)

func findCount(cds builder.Cond, data interface{}) (int64, error) {
	if data == nil {
		return 0, errors.New("needs a pointer to a slice")
	}
	of := reflect.TypeOf(data)
	if of.Kind() == reflect.Ptr {
		of = of.Elem()
	}

	if of.Kind() == reflect.Slice {
		sty := of.Elem()
		if sty.Kind() == reflect.Ptr {
			sty = sty.Elem()
		}
		pv := reflect.New(sty)

		ses := Db.NewSession()
		defer ses.Close()
		return ses.Where(cds).Count(pv.Interface())
	}
	return 0, errors.New("GetCount err : not found any data")
}

func FindPage(ses *xorm.Session, ls interface{}, page int64, size ...int64) (*bean.Page, error) {
	count, err := findCount(ses.Conds(), ls)
	if err != nil {
		return nil, err
	}
	return findPages(ses, ls, count, page, size...)
}
func findPages(ses *xorm.Session, ls interface{}, count, page int64, size ...int64) (*bean.Page, error) {
	var pageno int64 = 1
	var sizeno int64 = 10
	var pagesno int64 = 0
	//var count=c.FindCount(pars)
	if page > 0 {
		pageno = page
	}
	if len(size) > 0 && size[0] > 0 {
		sizeno = size[0]
	}
	start := (pageno - 1) * sizeno
	err := ses.Limit(int(sizeno), int(start)).Find(ls)
	if err != nil {
		return nil, err
	}
	pagest := count / sizeno
	if count%sizeno > 0 {
		pagesno = pagest + 1
	} else {
		pagesno = pagest
	}
	return &bean.Page{
		Page:  pageno,
		Pages: pagesno,
		Size:  sizeno,
		Total: count,
		Data:  ls,
	}, nil
}
func FindPages(gen *bean.PageGen, ls interface{}, page int64, size ...int64) (*bean.Page, error) {
	var count int64
	counts := "count(*)"
	if gen.CountCols != "" {
		counts = fmt.Sprintf("count(%s)", gen.CountCols)
	}
	sqls := strings.Replace(gen.SQL, "{{select}}", counts, 1)
	sqls = strings.Replace(sqls, "{{limit}}", "", 1)
	_, err := Db.SQL(sqls, gen.Args...).Get(&count)
	if err != nil {
		return nil, err
	}

	var pageno int64 = 1
	var sizeno int64 = 10
	var pagesno int64 = 0
	//var count=c.FindCount(pars)
	if page > 0 {
		pageno = page
	}
	if len(size) > 0 && size[0] > 0 {
		sizeno = size[0]
	}
	start := (pageno - 1) * sizeno

	starts := ""
	if start > 0 {
		starts = fmt.Sprintf("%d,", start)
	}
	ses := Db.NewSession()
	defer ses.Close()
	sqls = strings.Replace(gen.SQL, "{{select}}", gen.FindCols, 1)
	if strings.Contains(sqls, "{{limit}}") {
		sqls = strings.Replace(sqls, "{{limit}}", fmt.Sprintf("LIMIT %s%d", starts, sizeno), 1)
	} else {
		sqls += fmt.Sprintf("\nLIMIT %s%d", starts, sizeno)
	}
	err = ses.SQL(sqls, gen.Args...).Find(ls)
	if err != nil {
		return nil, err
	}
	pagest := count / sizeno
	if count%sizeno > 0 {
		pagesno = pagest + 1
	} else {
		pagesno = pagest
	}
	return &bean.Page{
		Page:  pageno,
		Pages: pagesno,
		Size:  sizeno,
		Total: count,
		Data:  ls,
	}, nil
}


================================================
FILE: comm/migrate.go
================================================
package comm

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"io"
	"strings"
)

func bindata_read(data []byte, name string) ([]byte, error) {
	gz, err := gzip.NewReader(bytes.NewBuffer(data))
	if err != nil {
		return nil, fmt.Errorf("Read %q: %v", name, err)
	}

	var buf bytes.Buffer
	_, err = io.Copy(&buf, gz)
	gz.Close()

	if err != nil {
		return nil, fmt.Errorf("Read %q: %v", name, err)
	}

	return buf.Bytes(), nil
}

var _mysql_000001_gokins_down_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\xd1\xcd\x4a\x04\x31\x0c\xc0\xf1\xbb\x4f\xd1\xf7\xd8\x93\xe2\x0a\x0b\x82\xe2\xee\xc1\x5b\x26\x76\x33\x25\x4c\xbf\x48\xd3\x81\x79\x7b\x19\x41\xf6\x96\xce\xf9\xff\xa3\x24\xe9\xeb\xd7\xc7\xa7\xbb\x3d\xbf\xbc\x9f\xdd\xe5\xcd\x9d\xbf\x2f\xd7\xdb\xd5\x4d\x0a\x28\xca\x33\x7a\x85\x8a\x7e\xc1\x40\xd3\xe9\x69\x48\x57\x92\xc6\x25\x1f\xa0\x45\x36\x43\xfd\x74\x8e\x77\xa3\xfb\x74\x87\xc8\xd9\x9a\xa9\xa9\x3d\x73\x53\xaa\x46\x56\xe1\x10\x48\xc6\x02\xa4\x5b\xfb\x26\x6a\xcd\x1e\xa4\x48\xb0\x2b\x54\xae\xd6\x03\x7b\x1e\x1c\xe3\x9f\x80\x2f\x79\x3e\xe2\x56\xb4\x56\x7f\xb0\xe1\x7f\x57\x14\x4c\x46\xef\xcd\x3c\xf2\x9e\x81\xf3\x5c\x46\xc6\xbe\xe2\x1f\x49\x6d\x48\xb4\x2c\x64\x6d\xb3\xa5\x08\x35\xf6\xc0\x23\xa4\x94\x6a\x44\xa5\xe9\xf4\x1b\x00\x00\xff\xff\x07\x37\xa2\xca\x5f\x03\x00\x00")

func mysql_000001_gokins_down_sql() ([]byte, error) {
	return bindata_read(
		_mysql_000001_gokins_down_sql,
		"mysql/000001_gokins.down.sql",
	)
}

var _mysql_000001_gokins_up_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\xdd\x6e\x1b\xc7\x15\xbe\xd7\x53\x0c\x92\x02\xa4\x00\x2b\x21\x65\xcb\xb5\x55\x04\xa8\x6c\xb3\x0e\x51\x9b\x2a\x64\xba\x4d\x00\x03\xe4\x70\x77\x44\x6e\xb4\x3b\xb3\x98\x1d\x52\x16\xd0\x0b\x09\xad\x5b\xb9\x6e\x61\xbb\x71\x62\x1b\x6e\xda\x0a\x06\xe2\x04\x71\x22\x17\x70\x55\x83\x92\xeb\x87\x89\x96\x94\xaf\xf2\x0a\xc5\xec\x2e\xc5\xfd\xe5\xcc\x52\x4b\xc5\x45\xc2\x1b\x49\x3b\x67\x86\x33\xe7\x7c\xe7\x9b\xf3\x9d\xd5\xf9\xa5\xd2\x42\xb5\x04\xaa\x0b\xe7\x2e\x95\x40\x9d\xd5\x20\x65\xda\x32\x54\x58\xcd\x84\xca\x0a\x6c\xa2\x3a\xc8\x4f\x01\x50\xd7\xd4\x3a\xe8\x40\xaa\xb4\x20\xcd\x9f\x3e\x35\x0d\x2a\x8b\x55\x50\xb9\x7a\xe9\xd2\x09\x3e\x08\xf9\x68\x43\x6b\x6a\x98\xe5\x67\x0b\xc3\x41\xb0\x70\xb5\xba\x58\x2b\x57\xce\x2f\x95\x2e\x97\x2a\x55\xc7\x96\x22\x93\xd4\xc2\xab\x5d\x28\xfd\x62\xe1\xea\x25\xdf\x8a\x18\x1a\x68\x68\x52\x2c\x14\x62\x6c\x54\xcd\x32\x75\xb8\x56\x0b\xda\xce\xce\xcd\xc5\xd9\x22\x4b\x19\xda\xcc\xc5\xae\xa7\x50\x04\x19\x52\xeb\x40\x85\x0c\x31\xcd\x40\x51\x93\xb6\xa9\x8a\x4c\x54\xa4\x23\xc7\x84\x3b\xa3\x18\xbb\x15\xc7\xa0\xc6\xa7\x8f\x58\xe8\x57\x4b\xe5\xcb\x0b\x4b\x1f\x82\x5f\x96\x3e\x04\x79\xc7\xc3\x27\x9c\x28\x4c\xf3\x41\xfe\xb0\x6e\x72\x2f\xe6\x0f\x1d\x3a\x1c\xa0\x26\x36\xfc\x23\x27\x3c\x7f\x4e\x4f\x4d\x83\x52\xe5\x62\xb9\x52\x02\xef\x81\x32\xc6\xe4\xc2\xb9\xc3\xaf\x3d\xff\xfe\xc2\xd2\x95\x52\x15\xbc\x07\xda\x6c\xf9\x8c\xd1\x38\xf5\xb3\xa9\x44\x64\x74\x10\xb5\x34\x82\xbf\x1f\x64\x78\xb0\xcc\x06\x42\x87\x27\x19\x6d\x66\xb5\xa0\x10\x8c\x12\x00\x33\x29\xea\x68\x68\x35\x19\x1a\x99\x20\x50\x0c\x9c\x09\xe3\x83\xd0\xb5\xac\xa1\xd1\x16\x46\x9b\xd0\xa6\x18\x12\x9a\x8a\x30\xd3\x96\x35\x44\xfd\xa1\x12\x62\x67\x36\x89\x7e\x60\x43\x8f\xc9\xf4\x5c\x21\x07\xce\x2f\x5e\xe6\x9b\x07\xb9\xde\x83\x6d\xfb\xce\xe7\xf6\xcb\xbf\xf6\xb6\x1e\xe7\x8b\xee\xcf\xdf\x16\x7a\x5f\x3f\xb6\x5f\xbc\x98\xce\xb9\xe8\x22\x6d\xaa\x20\xc1\x8e\x64\xf0\xa5\x93\x26\x11\x11\xe1\xff\x09\xc9\x81\xab\x57\xca\x95\x8b\xe0\x5c\x75\xa9\x54\x3a\x1a\x2a\x1b\x6d\x4d\x57\x65\xf0\x68\x6a\x26\xd2\x35\x1c\x65\x16\x07\x94\xd1\x64\x1e\x98\x7b\x1c\x22\x39\xcd\x62\x90\xb5\xad\x10\x9b\x44\x4c\x7d\xf8\xf9\xfb\xef\xed\xdd\x6e\xff\x4f\x3b\xbd\xf5\x0d\x17\x2e\x88\x52\x42\x43\x50\x18\xb1\xc0\xeb\x7b\x0f\x0f\xb6\xb7\xf7\x5f\x6d\xf5\x36\xb6\xbd\x05\x3a\x08\x33\xf9\x1d\xec\x77\x6f\xed\xef\xee\xe4\x06\xbb\xa7\x01\x68\xe4\x47\xcf\xb5\xf7\xd6\xed\x27\xb7\x7a\xf7\x77\x5e\xdf\x7f\xee\xae\xb0\xac\x61\xcd\x6a\xa5\x58\xa2\xbf\xfb\x71\xef\xb3\x7f\xf8\x97\x88\x40\x58\xb4\x89\xcd\x47\xf6\x6e\xd7\xbf\x42\x04\xe1\x82\x15\x7a\x8f\x9e\xf7\x3e\x7d\xe6\x5f\x21\x72\x71\x38\xd9\x36\xea\x18\x37\x37\x7b\x7f\x7b\x9a\x8b\x82\x3e\x5b\xb4\x2b\x86\x5a\xe3\xa8\x94\x01\x7c\x93\x92\xb6\x29\x09\x5b\x27\x8b\xa4\x21\x8e\x64\x97\x0d\x67\xc3\x5c\x5c\x1c\x5c\x46\x6e\x1b\x1e\xdb\x14\x93\x4c\x14\xa2\x22\xb1\x0d\x66\x0e\xfa\x19\xba\xce\x46\xb0\x62\x2c\x20\x52\xa4\x40\x1a\xac\x4f\x1a\x13\x16\x93\x2c\xe3\xd3\x53\x9a\x2f\x45\xfe\xbd\xd1\x7b\xf6\xbc\xdf\x7d\xa5\xa9\xb9\x31\x10\xf3\xbd\x93\x62\x8c\x88\x18\x45\x29\x77\xfe\x62\x7f\x7d\x3f\x27\x92\x21\x47\x41\xd0\x0f\x80\x44\x2d\x42\x99\x28\x61\x3d\xf0\x8a\xdd\x3a\xd9\x0c\x42\xa6\x4c\x02\xa5\xc4\x7c\x48\xc5\x08\x51\x1f\x4e\xb1\xd4\xc8\xcb\x34\xc1\x5d\xa7\xc8\xe1\xfd\xa8\xd9\x3d\x7e\xc5\x82\xae\x6b\xac\x26\xb8\x19\x7c\xbc\xb0\xbe\x6e\xff\xb1\xdb\xff\xe7\x64\x58\x45\xb4\x6f\x3f\xab\xfc\x48\x12\x19\x54\x5a\x3c\x80\x5a\x13\x13\x2a\x51\x17\x18\x06\xc4\xaa\x15\x2e\x0c\x56\xa1\xc6\xac\x3a\xf8\xc8\x22\xd8\x07\x68\x31\x6f\x4d\x92\x8d\x18\xd5\x9a\x4d\x2e\x61\x8f\x5b\x63\x27\x2b\x24\xff\x77\xb2\x35\x13\x59\xa9\xf4\xb5\x4c\x47\x25\x5e\xcd\x9a\x90\x42\x63\x10\x9f\xc8\x28\xc2\xf1\x02\xfd\xb8\xfb\x2d\x6d\xb7\x51\xc7\x7f\x1c\xb1\xc5\xe2\x85\xbe\x46\xdb\x99\x77\xdf\xd8\xa8\xf0\x0f\xb3\xeb\xe0\xc9\xe7\xf6\xed\xbb\xf6\xc3\x2f\xca\x17\x72\x87\xa0\x48\xbc\x4f\xa2\x1d\x18\xbc\x4c\x92\xe3\x15\xa4\xdb\x71\x1b\x18\xe2\x80\x30\x37\x20\xec\xe8\x01\x31\x90\x65\xa5\x69\x92\x9f\x2b\x5f\x2c\x57\xaa\xe9\xf2\x70\x14\xe1\xde\xbe\xfb\x7a\x7d\xe3\x60\xfd\xc6\x77\x7b\x9b\xf6\xed\xed\xfe\x97\xdd\xef\xf6\x6e\xe6\xbc\x78\x32\x5d\xae\x2a\x38\xd4\x44\x3a\xc1\xcd\x20\xfd\xc5\xe4\x72\xc2\x1a\xf2\x02\xca\x83\x40\xf0\x8b\xda\x54\x17\xdd\xb3\xc7\xd4\x2f\x22\xb4\x79\xbc\xd1\x4c\x6a\x38\xc6\x1b\xba\xac\x58\x2d\x7d\x50\x4d\xaa\xf1\xda\x0d\x5d\x53\xea\xa0\x5c\xa9\xe6\xc3\xb7\x53\xc1\x87\x9c\x1b\x4f\xed\xbd\xf5\x37\xe7\x9a\x0f\x77\x14\x83\xfb\x1e\xd1\x53\x94\x94\xd4\x09\x58\xe1\x86\xe5\xca\x85\xd2\x07\x6e\xa4\x3c\x92\xce\x14\x4d\x35\xce\x90\x1e\xa4\xd2\x10\x72\x5c\x47\x3b\xb9\xac\x4f\x55\xca\xdf\xdb\xd9\xdf\xdd\xd9\xef\x76\xd3\x84\x7f\x4c\x70\x45\xa3\x90\xe4\x7f\xef\xbc\xf9\xc1\x2f\x19\x46\x61\x50\xb8\xc8\x24\xb6\xb8\x0c\x92\x7a\xdf\x98\xe2\xdd\xe4\x61\x59\xc5\xd9\x36\x83\xfe\x7d\x52\x73\x3e\x57\xc8\x8d\xdf\x9b\x9f\x4c\x40\x6a\x0a\xc1\xcb\xfe\xdc\x90\x49\x0c\xb9\x32\x34\x70\xa3\xc4\xfb\x12\x2a\x0a\xb2\xac\x1a\x23\x2b\x28\xac\x2f\x22\xb6\x6b\x86\x5e\x8b\x5c\x94\xee\x17\x59\x88\x4a\x84\x59\x90\x08\x19\xf9\x33\xc5\xab\x59\x09\xa0\xb7\x8d\x06\xd7\x19\x3e\xc2\x1a\xa5\xd8\x7b\x4f\xb7\x7a\x9f\x3c\xf3\x29\xf6\xb0\xe6\x1f\xa5\xd6\xcd\xb6\xd5\xfa\x76\x7d\xc3\xa4\xdf\xae\x6f\x60\xc2\x90\xa7\x82\xfd\x2f\x5e\x05\xd9\x93\x2a\xd5\xc6\xca\x4f\xa1\xc3\xe2\xb5\xaa\xb8\xe0\x4a\x9d\xd9\x4c\xc3\x6b\x09\xd9\x6d\xd2\x9a\x20\x6e\x8e\x99\xf3\xee\x57\xd1\x09\x46\x35\x71\xa6\x4c\x94\x0a\xb8\x84\x1b\xe3\x7a\x94\x69\xad\xa4\x2c\x84\x55\xc8\x60\xb8\x30\xe5\x81\xb0\xc6\xaa\x36\x32\xf4\x11\xa7\x98\x2c\x8b\x52\x69\xdf\x99\xd0\xb2\xa4\x5c\x87\x35\x65\x45\x6a\x45\xd8\x81\x0c\x0a\x7b\x6a\x69\xeb\x12\x9d\x34\x35\x2c\x5b\x18\xd6\xa1\xc2\xb4\x0e\x4a\xba\x1f\x27\xa0\x31\x66\x66\xc0\xcc\x88\xcf\x54\xb9\x72\xa5\xb4\x54\xe5\x55\xd5\xa2\x83\x39\x37\xe0\x53\xbf\x5e\xb8\x74\xb5\x74\x65\x0a\x38\x91\x07\xe0\x2d\xa8\x1a\x1a\x7e\xeb\x84\xf3\x47\xd1\xfd\x91\x6b\x92\x15\x0d\x5b\x39\xef\x2f\x54\x2c\x40\x55\x39\x79\xf6\xd4\xd9\x06\x9c\x3b\x0b\x1b\x0d\x34\x77\x1a\x15\xe6\x7e\xba\x3c\x5b\x58\x3e\x73\xe6\x24\x1a\xd8\xf5\xbf\xd9\xea\xdf\xf9\x83\x7d\xf7\x81\xf7\x60\xe0\x1a\x00\x2a\x8b\xbf\xc9\x4f\x87\x1f\x16\xa7\x00\x98\x16\x1f\x03\x80\x38\xe0\xd6\xb8\xe0\xab\x7b\x67\x18\x89\x5f\x0e\xb8\x16\xc1\xa2\xce\x10\xbf\x5e\x0c\xa8\xe9\x82\x7f\xd0\x00\xa0\xde\xd0\x28\x6b\xa9\x70\x6d\x04\xa7\x3a\x54\x68\x40\xba\xe2\x26\xfe\x60\x1b\x88\x1a\x5e\xd6\x25\xf4\x8e\x06\x46\x8e\x5c\x14\xd8\xb8\x02\x20\xd1\x28\xca\xae\xdc\xdd\x47\xe5\x8b\xa1\x90\x4d\x47\xac\xd2\x9a\x35\x8d\x44\x49\x95\xcd\x03\xb7\x41\xd5\x10\x2a\x8d\x30\x90\xdd\x99\x74\x55\x3c\x71\xef\xd3\x83\xff\xde\xed\x7d\xf6\xbb\xd7\x0f\xef\x04\xe6\xa2\xeb\x48\x2c\x70\x7a\x37\x9f\x1c\x6c\xfd\x39\x66\xb6\x4a\x56\x71\x6c\xa8\x7d\xf5\xce\x8b\x5b\x07\x2f\x5f\xda\x9b\x3b\xf6\xc7\x1b\x81\x15\x24\xa4\x92\x48\xac\x06\x6c\x48\xa2\x9a\x0a\x2e\x45\x0e\xd7\x3a\x01\xe2\xc5\x57\x16\x70\x34\xac\x10\x1c\xc5\xf7\x54\xca\x66\x58\x50\xd6\x02\x50\x37\xac\x09\xc1\x93\x22\xa8\x32\x43\xce\x76\xf0\xf6\x2b\xf6\x75\x41\xc1\x33\x12\x77\x3f\xd2\xf7\x3f\x32\x01\x54\x26\xa1\xf7\x04\xd6\xf8\x5c\xe4\xb7\x4e\x70\x73\x50\x3b\x27\x36\x2a\x39\x69\x99\x08\x8b\x5f\xbb\x7a\xc6\xb2\xaf\x56\x23\x25\xd0\x48\x53\xf9\x22\x28\xa2\x52\x0f\xab\xd3\x78\x5c\x2e\x53\x64\xb5\xa4\x6c\xd1\x75\x53\xa3\xc8\xaa\x69\x38\xd9\xbf\x85\x90\xad\x34\xf2\x86\x3b\x91\x9e\x91\x2a\x01\x9d\x03\x86\x9b\xc8\x0e\x5a\x62\x9a\xcb\x13\x60\x56\x17\x42\xf9\xc1\x2f\x99\xa6\xcc\x50\xcb\x43\x9a\xd5\x05\x1e\x77\xc5\xca\xaa\x5a\xb9\x8e\x17\x57\xbf\x50\x6f\x4b\x98\xb9\xe5\x56\x58\x56\xc4\xed\xd0\x6b\x36\x8e\xfa\xf7\x5a\x5f\xa7\x51\xac\xc1\x8e\x18\x98\x35\x43\xaf\x99\x7a\xbb\xa9\x8d\xcb\x65\x41\x37\x26\xf8\x3a\xb1\xd1\x24\xee\xec\xc9\xf7\xf6\x32\xf7\x55\x44\xc1\xf8\x9c\x15\xd6\x31\x03\xe9\x62\xb5\x06\x72\x04\x38\x9f\x19\x60\x31\x64\xce\x03\xab\x85\x74\xfd\xe7\x56\xeb\x1a\x06\xde\xc7\xeb\xd6\x54\xa0\x81\xf8\xf0\x70\x00\x47\x9e\x0c\x5e\xe4\xcf\x0f\x1f\xf1\x95\x91\xd2\x22\x80\xaf\x4b\xc0\x2a\xa1\xba\xea\x7d\x73\x61\xa8\x74\x5c\x89\x93\xe6\x1c\xb3\xde\xee\x1b\x70\xf4\x49\xf8\x78\xc2\x59\x82\x43\x38\xe6\xd9\x31\x9e\xe7\xa4\x77\x06\x93\xac\x22\xea\x6c\x7d\xd4\xa9\x86\x56\x09\x67\x8b\x33\xc0\x89\x23\xe9\xce\x59\x3c\xca\x39\x4f\x0d\xf0\x27\x00\xa0\xd5\xba\x46\x93\x30\x18\x1c\xc3\x71\x0f\x35\x6c\xb6\xd9\xbc\xff\x09\x00\x2d\x62\xb1\x79\xa0\x13\x05\xea\xce\xaf\xb3\xb3\x00\xbc\xdd\xff\x6a\xdb\xbe\xfd\xd8\x7e\x75\xc3\xde\xfa\x2a\x68\xce\xab\xa7\x79\x40\x09\x61\xc1\xe7\x26\xb4\xac\x79\x50\x9c\x3d\x79\x6a\xee\x74\x70\x64\x95\xd0\x15\xcb\x84\x0a\x9a\x07\xef\xf2\x79\xef\x32\x64\x31\xf0\xf6\xfe\x8b\x6e\xff\xcb\xae\xfd\xec\x5f\xbd\x07\xdb\xe0\x27\xef\x2f\x5e\x2e\x81\xfe\xbd\x2f\x7a\x9b\xff\xe9\x3f\xfa\xc6\x7e\xf9\x89\x7f\x8d\x61\x20\xe8\x78\x90\x8b\xa3\x4d\x86\x0c\x53\x87\x0c\xfd\x48\x9c\x52\xc4\x79\xe8\x2e\x9f\xb7\xfc\xae\x88\x39\x71\xe8\xa0\x71\xa7\xe2\x5b\x4b\xe2\xe2\x8b\x44\x87\xb8\x39\x48\x07\xaf\x8f\x3d\x0f\x8a\xef\x14\xae\xe1\x0e\xa4\x3c\x2d\x9d\x7f\x58\x74\xf3\x93\x27\x0a\x6c\x22\x2f\x57\x83\x8c\xd6\xd6\x74\xd5\x7d\x8e\xc3\x0f\x78\x76\x0d\x13\x5c\x92\xee\x9b\x64\xc6\x59\x62\xa6\x18\x21\xca\xe1\xca\xfc\x83\x70\x67\x5e\xc8\x27\x4d\xe2\x4e\x03\x06\xd4\xf0\x3b\x4d\x32\xee\x66\x66\xc3\x9b\xe1\x79\x96\x7e\x2f\x4e\x76\xce\x74\xae\xe1\x54\xfc\x7d\x7c\xf0\x18\x5c\x71\x97\x61\x07\xe1\x37\x11\x1d\x1f\xc1\x0e\xcc\x12\x1f\x46\x07\x03\x45\x47\x10\x47\x1f\x6b\xfc\x8c\xc3\x2b\x2b\xfd\x06\xb3\xc0\x0c\xdf\x88\x07\x9a\x37\x14\x32\x83\x2a\xa2\x62\x1a\x6f\x22\x60\xb0\x69\x64\x89\x17\x6c\x1a\xc1\x79\xa9\xb7\x11\x41\x85\x23\x7b\xfc\x13\xa5\x37\xe2\xcd\x04\x09\xc8\xf8\x5f\x00\x00\x00\xff\xff\x73\x4b\x5a\xf3\xea\x3d\x00\x00")

func mysql_000001_gokins_up_sql() ([]byte, error) {
	return bindata_read(
		_mysql_000001_gokins_up_sql,
		"mysql/000001_gokins.up.sql",
	)
}

var _sqlite_000001_gokins_down_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\x09\xf2\x0f\x50\x08\x71\x74\xf2\x71\x55\xf0\x74\x53\x70\x8d\xf0\x0c\x0e\x09\x56\x48\x28\x89\x4f\x2a\xcd\xcc\x49\x49\xb0\x06\x04\x00\x00\xff\xff\xaa\x8a\x92\x63\x1f\x00\x00\x00")

func sqlite_000001_gokins_down_sql() ([]byte, error) {
	return bindata_read(
		_sqlite_000001_gokins_down_sql,
		"sqlite/000001_gokins.down.sql",
	)
}

var _sqlite_000001_gokins_up_sql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\xd1\xcf\x4a\xc4\x30\x10\xc7\xf1\xfb\x3e\xc5\x1c\x15\x7c\x03\x4f\xd1\x1d\x61\x31\xbb\x4a\xc9\x82\x7b\x6a\xa2\x19\x75\xa0\xcd\x86\xcc\xb4\xcf\x2f\xc5\x3f\x28\x36\xa5\xe7\xdf\x87\x84\x2f\x73\xdb\xa0\x71\x08\xce\xdc\x58\x04\xaf\xed\xf3\xc0\x5d\xf4\x70\xb1\x01\xf0\x1c\x3d\x38\x7c\x72\x70\x78\x70\x70\x38\x5a\x0b\x8f\xcd\x6e\x6f\x9a\x13\xdc\xe3\xe9\x6a\x12\x99\x33\x75\x9c\xa8\xfd\xa1\x5b\xbc\x33\x47\xfb\xc9\xff\x92\x91\x8a\xf0\x39\x2d\x50\xd1\xa0\x83\xd4\x56\x2a\xe5\x5c\xaa\xe3\x48\x49\x6b\xa3\x72\x4f\xad\x68\xe8\xb3\x87\xad\x71\xe8\x76\x7b\x9c\x53\xda\xd1\x77\xf0\x14\xfb\x4f\xf4\x24\x12\xde\x96\x8d\x68\x28\x4a\xf1\xd7\x47\xf3\xee\x95\x13\xcb\xfb\x0a\xf8\x52\x28\xac\x79\x70\xc8\x71\x95\xfb\x3a\x43\x2d\x62\x73\x79\xfd\x11\x00\x00\xff\xff\x55\x1f\xab\xd7\x13\x02\x00\x00")

func sqlite_000001_gokins_up_sql() ([]byte, error) {
	return bindata_read(
		_sqlite_000001_gokins_up_sql,
		"sqlite/000001_gokins.up.sql",
	)
}

// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
	cannonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[cannonicalName]; ok {
		return f()
	}
	return nil, fmt.Errorf("Asset %s not found", name)
}

// AssetNames returns the names of the assets.
func AssetNames() []string {
	names := make([]string, 0, len(_bindata))
	for name := range _bindata {
		names = append(names, name)
	}
	return names
}

// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() ([]byte, error){
	"mysql/000001_gokins.down.sql": mysql_000001_gokins_down_sql,
	"mysql/000001_gokins.up.sql": mysql_000001_gokins_up_sql,
	"sqlite/000001_gokins.down.sql": sqlite_000001_gokins_down_sql,
	"sqlite/000001_gokins.up.sql": sqlite_000001_gokins_up_sql,
}
// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
//     data/
//       foo.txt
//       img/
//         a.png
//         b.png
// then AssetDir("data") would return []string{"foo.txt", "img"}
// AssetDir("data/img") would return []string{"a.png", "b.png"}
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
// AssetDir("") will return []string{"data"}.
func AssetDir(name string) ([]string, error) {
	node := _bintree
	if len(name) != 0 {
		cannonicalName := strings.Replace(name, "\\", "/", -1)
		pathList := strings.Split(cannonicalName, "/")
		for _, p := range pathList {
			node = node.Children[p]
			if node == nil {
				return nil, fmt.Errorf("Asset %s not found", name)
			}
		}
	}
	if node.Func != nil {
		return nil, fmt.Errorf("Asset %s not found", name)
	}
	rv := make([]string, 0, len(node.Children))
	for name := range node.Children {
		rv = append(rv, name)
	}
	return rv, nil
}

type _bintree_t struct {
	Func func() ([]byte, error)
	Children map[string]*_bintree_t
}
var _bintree = &_bintree_t{nil, map[string]*_bintree_t{
	"mysql": &_bintree_t{nil, map[string]*_bintree_t{
		"000001_gokins.down.sql": &_bintree_t{mysql_000001_gokins_down_sql, map[string]*_bintree_t{
		}},
		"000001_gokins.up.sql": &_bintree_t{mysql_000001_gokins_up_sql, map[string]*_bintree_t{
		}},
	}},
	"sqlite": &_bintree_t{nil, map[string]*_bintree_t{
		"000001_gokins.down.sql": &_bintree_t{sqlite_000001_gokins_down_sql, map[string]*_bintree_t{
		}},
		"000001_gokins.up.sql": &_bintree_t{sqlite_000001_gokins_up_sql, map[string]*_bintree_t{
		}},
	}},
}}


================================================
FILE: comm/thirdapi.go
================================================
package comm

import (
	"github.com/gokins/gokins/thirdapi"
	"github.com/gokins/gokins/thirdapi/giteaapi"
	"github.com/gokins/gokins/thirdapi/giteeapi"
	"github.com/gokins/gokins/thirdapi/giteepremiumapi"
	"github.com/gokins/gokins/thirdapi/githubapi"
	"github.com/gokins/gokins/thirdapi/gitlabapi"
	"github.com/sirupsen/logrus"
)

var (
	apiClient *thirdapi.Client
)

func GetThirdApi(s string, host string) (*thirdapi.Client, error) {
	if apiClient == nil {
		switch s {
		case "gitee":
			apiClient = giteeapi.NewDefault()
		case "github":
			apiClient = githubapi.NewDefault()
		case "gitalb":
			client, err := gitlabapi.New(host + "/api/v4")
			if err != nil {
				return nil, err
			}
			apiClient = client
		case "giteepremium":
			client, err := giteepremiumapi.New(host + "/api/v5")
			if err != nil {
				return nil, err
			}
			apiClient = client
		case "gitea":
			client, err := giteaapi.New(host + "/api/v1")
			if err != nil {
				return nil, err
			}
			apiClient = client
		default:
			logrus.Debug("GetThirdApi default : 'github' ")
			apiClient = githubapi.NewDefault()
		}
	}
	return apiClient, nil
}


================================================
FILE: comm/uis.go
================================================
package comm

const StaticPkg = "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
Download .txt
gitextract_0p57qvn9/

├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── bean/
│   ├── condition.go
│   ├── db.go
│   ├── http.go
│   ├── models.go
│   ├── pipeline.go
│   ├── pipelinevar.go
│   ├── runtime.go
│   ├── thirdbean/
│   │   ├── gitea.go
│   │   ├── gitee.go
│   │   ├── giteepremium.go
│   │   ├── github.go
│   │   └── gitlab.go
│   ├── trigger.go
│   └── yml.go
├── bindata.sh
├── bindui.sh
├── build.sh
├── cmd/
│   └── cmd.go
├── comm/
│   ├── app.go
│   ├── cache.go
│   ├── config.go
│   ├── db.go
│   ├── migrate.go
│   ├── thirdapi.go
│   └── uis.go
├── compressui.go
├── engine/
│   ├── buildDao.go
│   ├── buildEgn.go
│   ├── buildTask.go
│   ├── buildTaskc.go
│   ├── buildtask_test.go
│   ├── hbtpruner.go
│   ├── jobEgn.go
│   ├── mgr.go
│   ├── runner.go
│   ├── timermgr.go
│   └── timermgr_test.go
├── go.mod
├── go.sum
├── hook/
│   ├── action.go
│   ├── event.go
│   ├── git.go
│   ├── gitea/
│   │   └── gitea.go
│   ├── gitee/
│   │   └── gitee.go
│   ├── github/
│   │   └── github.go
│   ├── gitlab/
│   │   └── gitlab.go
│   ├── pr.go
│   ├── repo.go
│   └── webhook.go
├── main.go
├── migrates/
│   ├── init.go
│   ├── mysql/
│   │   ├── 000001_gokins.down.sql
│   │   └── 000001_gokins.up.sql
│   ├── sqlite/
│   │   ├── 000001_gokins.down.sql
│   │   └── 000001_gokins.up.sql
│   └── up.go
├── model/
│   ├── schema_migrations.go
│   ├── t_artifact_package.go
│   ├── t_artifact_version.go
│   ├── t_artifactory.go
│   ├── t_build.go
│   ├── t_cmd_line.go
│   ├── t_message.go
│   ├── t_org.go
│   ├── t_org_pipe.go
│   ├── t_param.go
│   ├── t_pipeline.go
│   ├── t_pipeline_conf.go
│   ├── t_pipeline_var.go
│   ├── t_pipeline_version.go
│   ├── t_stage.go
│   ├── t_step.go
│   ├── t_trigger.go
│   ├── t_trigger_run.go
│   ├── t_user.go
│   ├── t_user_info.go
│   ├── t_user_msg.go
│   ├── t_user_org.go
│   ├── t_user_token.go
│   ├── t_yml_plugin.go
│   └── t_yml_template.go
├── models/
│   ├── run_build.go
│   ├── run_stage.go
│   ├── t_artifact_package.go
│   ├── t_artifact_version.go
│   ├── t_artifactory.go
│   ├── t_org.go
│   ├── t_pipeline.go
│   ├── t_pipeline_var.go
│   ├── t_pipeline_version.go
│   ├── t_trigger.go
│   ├── t_trigger_run.go
│   ├── t_user.go
│   ├── t_yml_plugin.go
│   └── t_yml_template.go
├── route/
│   ├── api.go
│   ├── artifact.go
│   ├── artpub.go
│   ├── hook.go
│   ├── install.go
│   ├── login.go
│   ├── org.go
│   ├── pipeline.go
│   ├── pipelineversion.go
│   ├── runtime.go
│   ├── trigger.go
│   ├── user.go
│   └── yml.go
├── ruis_test.go
├── server/
│   ├── db.go
│   ├── hbtp.go
│   ├── server.go
│   └── web.go
├── service/
│   ├── db.go
│   ├── hook.go
│   ├── mid.go
│   ├── notice.go
│   ├── param.go
│   ├── perms.go
│   ├── pipeline.go
│   ├── trigger.go
│   └── user.go
├── thirdapi/
│   ├── client.go
│   ├── giteaapi/
│   │   ├── gitea.go
│   │   ├── giteaapi.go
│   │   ├── giteaapi_test.go
│   │   └── repositoryservice.go
│   ├── giteeapi/
│   │   ├── gitee.go
│   │   ├── giteeapi.go
│   │   ├── giteeapi_test.go
│   │   └── repositoryservice.go
│   ├── giteepremiumapi/
│   │   ├── giteepremium.go
│   │   ├── giteepremiumapi.go
│   │   ├── giteepremiumapi_test.go
│   │   └── repositoryservice.go
│   ├── githubapi/
│   │   ├── github.go
│   │   ├── githubapi.go
│   │   ├── githubapi_test.go
│   │   └── repositoryservice.go
│   ├── gitlabapi/
│   │   ├── gitlab.go
│   │   ├── gitlabapi.go
│   │   ├── gitlabapi_test.go
│   │   └── repositoryservice.go
│   ├── repo.go
│   └── repositoryservice.go
└── util/
    ├── gin.go
    ├── git.go
    ├── httpex/
    │   ├── const.go
    │   └── post.go
    └── token.go
Download .txt
SYMBOL INDEX (694 symbols across 141 files)

FILE: bean/condition.go
  function skipBranch (line 8) | func skipBranch(c *Condition, branch string) bool {
  function skipCommitMessages (line 11) | func skipCommitMessages(c *Condition, branch string) bool {
  function skipCommitNotes (line 14) | func skipCommitNotes(c *Condition, branch string) bool {
  method Match (line 18) | func (c *Condition) Match(v string) bool {
  method Excludes (line 37) | func (c *Condition) Excludes(v string) bool {
  method Includes (line 60) | func (c *Condition) Includes(v string) bool {
  function isMatch (line 83) | func isMatch(s string, p string) bool {

FILE: bean/db.go
  type Page (line 3) | type Page struct
  type PageGen (line 10) | type PageGen struct

FILE: bean/http.go
  type IdsRes (line 3) | type IdsRes struct
  type LoginReq (line 7) | type LoginReq struct
  type LoginRes (line 11) | type LoginRes struct

FILE: bean/models.go
  type PipelineShow (line 3) | type PipelineShow struct

FILE: bean/pipeline.go
  type NewPipeline (line 3) | type NewPipeline struct
    method Check (line 21) | func (p *NewPipeline) Check() bool {
  type NewPipelineVar (line 14) | type NewPipelineVar struct

FILE: bean/pipelinevar.go
  type PipelineVar (line 3) | type PipelineVar struct

FILE: bean/runtime.go
  type LogOutJson (line 5) | type LogOutJson struct
  type LogOutJsonRes (line 11) | type LogOutJsonRes struct

FILE: bean/thirdbean/gitea.go
  type ResultGiteaRepo (line 5) | type ResultGiteaRepo struct
  type ResultGiteaRepoBranch (line 74) | type ResultGiteaRepoBranch struct
  type ResultGetGiteaHook (line 110) | type ResultGetGiteaHook struct

FILE: bean/thirdbean/gitee.go
  type ResultGiteeCreateHooks (line 5) | type ResultGiteeCreateHooks struct
  type ResultGiteeRepo (line 20) | type ResultGiteeRepo struct
  type ResultGiteeRepoBranch (line 148) | type ResultGiteeRepoBranch struct
  type ResultGetGiteeHook (line 158) | type ResultGetGiteeHook struct

FILE: bean/thirdbean/giteepremium.go
  type ResultGiteePremiumCreateHooks (line 5) | type ResultGiteePremiumCreateHooks struct
  type ResultGiteePremiumRepo (line 20) | type ResultGiteePremiumRepo struct
  type ResultGiteePremiumRepoBranch (line 148) | type ResultGiteePremiumRepoBranch struct
  type ResultGetGiteePremiumHook (line 158) | type ResultGetGiteePremiumHook struct

FILE: bean/thirdbean/github.go
  type ResultGithubRepo (line 5) | type ResultGithubRepo struct
  type ResultGithubRepoBranch (line 111) | type ResultGithubRepoBranch struct
  type ResultGetGithubHook (line 127) | type ResultGetGithubHook struct

FILE: bean/thirdbean/gitlab.go
  type ResultGitlabRepo (line 5) | type ResultGitlabRepo struct
  type ResultGitlabRepoBranch (line 124) | type ResultGitlabRepoBranch struct
  type ResultGetGitlabHook (line 148) | type ResultGetGitlabHook struct

FILE: bean/trigger.go
  type TriggerParam (line 5) | type TriggerParam struct
    method Check (line 15) | func (c *TriggerParam) Check() error {

FILE: bean/yml.go
  type Pipeline (line 10) | type Pipeline struct
    method ToJson (line 76) | func (c *Pipeline) ToJson() ([]byte, error) {
    method ConvertCmd (line 80) | func (c *Pipeline) ConvertCmd() {
    method Check (line 100) | func (c *Pipeline) Check() error {
  type Trigger (line 17) | type Trigger struct
  type Condition (line 27) | type Condition struct
  type Stage (line 32) | type Stage struct
  type Step (line 43) | type Step struct
  type Artifact (line 56) | type Artifact struct
  type UseArtifacts (line 63) | type UseArtifacts struct

FILE: cmd/cmd.go
  constant Version (line 15) | Version = "0.1.1"
  function Run (line 19) | func Run() {
  function regs (line 24) | func regs() {
  function getArgs (line 36) | func getArgs() []string {
  function start (line 56) | func start(pc *kingpin.ParseContext) error {
  function run (line 70) | func run(pc *kingpin.ParseContext) error {

FILE: comm/app.go
  function init (line 30) | func init() {
  function Cancel (line 33) | func Cancel() {

FILE: comm/cache.go
  function CacheSet (line 15) | func CacheSet(key string, data []byte, outm ...time.Duration) error {
  function CacheSets (line 45) | func CacheSets(key string, data interface{}, outm ...time.Duration) error {
  function parseCacheData (line 58) | func parseCacheData(bts []byte) []byte {
  function CacheGet (line 77) | func CacheGet(key string) ([]byte, error) {
  function CacheGets (line 103) | func CacheGets(key string, data interface{}) error {
  function CacheFlush (line 117) | func CacheFlush() error {
  function mainCacheClear (line 129) | func mainCacheClear() {

FILE: comm/config.go
  type Config (line 3) | type Config struct

FILE: comm/db.go
  function findCount (line 16) | func findCount(cds builder.Cond, data interface{}) (int64, error) {
  function FindPage (line 39) | func FindPage(ses *xorm.Session, ls interface{}, page int64, size ...int...
  function findPages (line 46) | func findPages(ses *xorm.Session, ls interface{}, count, page int64, siz...
  function FindPages (line 76) | func FindPages(gen *bean.PageGen, ls interface{}, page int64, size ...in...

FILE: comm/migrate.go
  function bindata_read (line 11) | func bindata_read(data []byte, name string) ([]byte, error) {
  function mysql_000001_gokins_down_sql (line 30) | func mysql_000001_gokins_down_sql() ([]byte, error) {
  function mysql_000001_gokins_up_sql (line 39) | func mysql_000001_gokins_up_sql() ([]byte, error) {
  function sqlite_000001_gokins_down_sql (line 48) | func sqlite_000001_gokins_down_sql() ([]byte, error) {
  function sqlite_000001_gokins_up_sql (line 57) | func sqlite_000001_gokins_up_sql() ([]byte, error) {
  function Asset (line 67) | func Asset(name string) ([]byte, error) {
  function AssetNames (line 76) | func AssetNames() []string {
  function AssetDir (line 104) | func AssetDir(name string) ([]string, error) {
  type _bintree_t (line 126) | type _bintree_t struct

FILE: comm/thirdapi.go
  function GetThirdApi (line 17) | func GetThirdApi(s string, host string) (*thirdapi.Client, error) {

FILE: comm/uis.go
  constant StaticPkg (line 3) | StaticPkg = "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAALAAAAZmF2aWNvbi5pY2/sXA9...

FILE: compressui.go
  function main (line 15) | func main() {
  function gengo (line 27) | func gengo() error {

FILE: engine/buildDao.go
  method updateBuild (line 13) | func (c *BuildTask) updateBuild(build *runtime.Build) {
  method updateStage (line 71) | func (c *BuildTask) updateStage(stage *runtime.Stage) {
  method updateStep (line 107) | func (c *BuildTask) updateStep(job *jobSync) {
  method updateStepCmd (line 146) | func (c *BuildTask) updateStepCmd(cmd *cmdSync) {

FILE: engine/buildEgn.go
  type BuildEngine (line 15) | type BuildEngine struct
    method Stop (line 40) | func (c *BuildEngine) Stop() {
    method init (line 47) | func (c *BuildEngine) init() {
    method run (line 73) | func (c *BuildEngine) run() {
    method startBuild (line 104) | func (c *BuildEngine) startBuild(v *BuildTask) {
    method Put (line 110) | func (c *BuildEngine) Put(bd *runtime.Build) {
    method Get (line 115) | func (c *BuildEngine) Get(buildid string) (*BuildTask, bool) {
  function StartBuildEngine (line 23) | func StartBuildEngine() *BuildEngine {

FILE: engine/buildTask.go
  type taskStage (line 24) | type taskStage struct
    method status (line 31) | func (c *taskStage) status(stat, errs string, event ...string) {
  type BuildTask (line 41) | type BuildTask struct
    method status (line 65) | func (c *BuildTask) status(stat, errs string, event ...string) {
    method stopd (line 80) | func (c *BuildTask) stopd() bool {
    method stop (line 86) | func (c *BuildTask) stop() {
    method Cancel (line 92) | func (c *BuildTask) Cancel() {
    method clears (line 98) | func (c *BuildTask) clears() {
    method run (line 114) | func (c *BuildTask) run() {
    method runStage (line 174) | func (c *BuildTask) runStage(stage *runtime.Stage) {
    method runStep (line 227) | func (c *BuildTask) runStep(stage *taskStage, job *jobSync) {
    method getRepo (line 334) | func (c *BuildTask) getRepo() error {
    method Write (line 348) | func (c *BuildTask) Write(bts []byte) (n int, err error) {
    method gitClone (line 369) | func (c *BuildTask) gitClone(ctx context.Context, dir string, repo *ru...
    method UpJob (line 395) | func (c *BuildTask) UpJob(job *jobSync, stat, errs string, code int) {
    method UpJobCmd (line 406) | func (c *BuildTask) UpJobCmd(cmd *cmdSync, fs, code int) {
    method WorkProgress (line 436) | func (c *BuildTask) WorkProgress() int {
    method Show (line 439) | func (c *BuildTask) Show() (*runtime.BuildShow, bool) {
    method GetJob (line 513) | func (c *BuildTask) GetJob(id string) (*jobSync, bool) {
  function NewBuildTask (line 75) | func NewBuildTask(egn *BuildEngine, bd *runtime.Build) *BuildTask {

FILE: engine/buildTaskc.go
  method check (line 19) | func (c *BuildTask) check() bool {
  method genRunjob (line 135) | func (c *BuildTask) genRunjob(stage *runtime.Stage, job *jobSync) (rterr...
  method appendcmds (line 221) | func (c *BuildTask) appendcmds(runjb *runners.RunJob, conts string) {
  method gencmds (line 230) | func (c *BuildTask) gencmds(runjb *runners.RunJob, cmds []interface{}) (...

FILE: engine/buildtask_test.go
  function TestGitClone (line 9) | func TestGitClone(t *testing.T) {

FILE: engine/hbtpruner.go
  type HbtpRunner (line 14) | type HbtpRunner struct
    method AuthFun (line 17) | func (HbtpRunner) AuthFun() hbtp.AuthFun {
    method ServerInfo (line 47) | func (HbtpRunner) ServerInfo(c *hbtp.Context) {
    method PullJob (line 55) | func (HbtpRunner) PullJob(c *hbtp.Context, m *runners.ReqPullJob) {
    method CheckCancel (line 63) | func (HbtpRunner) CheckCancel(c *hbtp.Context) {
    method Update (line 67) | func (HbtpRunner) Update(c *hbtp.Context, m *runners.UpdateJobInfo) {
    method UpdateCmd (line 75) | func (HbtpRunner) UpdateCmd(c *hbtp.Context) {
    method PushOutLine (line 92) | func (HbtpRunner) PushOutLine(c *hbtp.Context) {
    method FindJobId (line 105) | func (HbtpRunner) FindJobId(c *hbtp.Context) {
    method ReadDir (line 116) | func (HbtpRunner) ReadDir(c *hbtp.Context) {
    method ReadFile (line 131) | func (HbtpRunner) ReadFile(c *hbtp.Context) {
    method GetEnv (line 160) | func (HbtpRunner) GetEnv(c *hbtp.Context) {
    method GenEnv (line 171) | func (HbtpRunner) GenEnv(c *hbtp.Context, env utils.EnvVal) {
    method UploadFile (line 181) | func (HbtpRunner) UploadFile(c *hbtp.Context) {
    method FindArtVersionId (line 213) | func (HbtpRunner) FindArtVersionId(c *hbtp.Context) {
    method NewArtVersionId (line 224) | func (HbtpRunner) NewArtVersionId(c *hbtp.Context) {

FILE: engine/jobEgn.go
  type JobEngine (line 18) | type JobEngine struct
    method run (line 72) | func (c *JobEngine) run() {
    method rmExec (line 104) | func (c *JobEngine) rmExec(k string, ex *executer) {
    method Put (line 122) | func (c *JobEngine) Put(job *jobSync) error {
    method Pull (line 137) | func (c *JobEngine) Pull(name string, plugs []string) *runners.RunJob {
  type executer (line 25) | type executer struct
  type cmdSync (line 31) | type cmdSync struct
  type jobSync (line 39) | type jobSync struct
    method status (line 48) | func (c *jobSync) status(stat, errs string, event ...string) {
  function StartJobEngine (line 58) | func StartJobEngine() *JobEngine {

FILE: engine/mgr.go
  type Manager (line 18) | type Manager struct
    method run (line 63) | func (c *Manager) run() {
    method BuildEgn (line 73) | func (c *Manager) BuildEgn() *BuildEngine {
    method HRun (line 76) | func (c *Manager) HRun() *HbtpRunner {
    method TimerEng (line 80) | func (c *Manager) TimerEng() *TimerEngine {
  function Start (line 27) | func Start() error {

FILE: engine/runner.go
  type baseRunner (line 24) | type baseRunner struct
    method ServerInfo (line 26) | func (c *baseRunner) ServerInfo() (*runners.ServerInfo, error) {
    method PullJob (line 33) | func (c *baseRunner) PullJob(name string, plugs []string) (*runners.Ru...
    method CheckCancel (line 44) | func (c *baseRunner) CheckCancel(buildId string) bool {
    method Update (line 51) | func (c *baseRunner) Update(m *runners.UpdateJobInfo) error {
    method UpdateCmd (line 64) | func (c *baseRunner) UpdateCmd(buildId, jobId, cmdId string, fs, code ...
    method PushOutLine (line 82) | func (c *baseRunner) PushOutLine(buildId, jobId, cmdId, bs string, ise...
    method FindJobId (line 114) | func (c *baseRunner) FindJobId(buildId, stgNm, stpNm string) (string, ...
    method ReadDir (line 138) | func (c *baseRunner) ReadDir(fs int, buildId string, pth string) ([]*r...
    method ReadFile (line 172) | func (c *baseRunner) ReadFile(fs int, buildId string, pth string) (int...
    method GetEnv (line 202) | func (c *baseRunner) GetEnv(buildId, jobId, key string) (string, bool) {
    method GenEnv (line 230) | func (c *baseRunner) GenEnv(buildId, jobId string, env utils.EnvVal) e...
    method UploadFile (line 251) | func (c *baseRunner) UploadFile(fs int, buildId, jobId string, dir, pt...
    method FindArtVersionId (line 280) | func (c *baseRunner) FindArtVersionId(buildId, idnt string, names stri...
    method NewArtVersionId (line 333) | func (c *baseRunner) NewArtVersionId(buildId, idnt string, name string...

FILE: engine/timermgr.go
  type TimerEngine (line 17) | type TimerEngine struct
    method run (line 41) | func (c *TimerEngine) run() {
    method execItem (line 55) | func (c *TimerEngine) execItem(v *timerExec) {
    method refresh (line 90) | func (c *TimerEngine) refresh() {
    method resetOne (line 109) | func (c *TimerEngine) resetOne(tmr *model.TTrigger) error {
    method Refresh (line 190) | func (c *TimerEngine) Refresh(tmrid string) error {
    method Delete (line 202) | func (c *TimerEngine) Delete(tmrid string) {
  type timerExec (line 21) | type timerExec struct
  function StartTimerEngine (line 28) | func StartTimerEngine() *TimerEngine {

FILE: engine/timermgr_test.go
  function TestTimer (line 10) | func TestTimer(t *testing.T) {
  function TestSync (line 21) | func TestSync(t *testing.T) {

FILE: hook/action.go
  type Action (line 3) | type Action
  constant ActionOpen (line 6) | ActionOpen        = "open"
  constant ActionOpened (line 7) | ActionOpened      = "opened"
  constant ActionClose (line 8) | ActionClose       = "close"
  constant ActionCreate (line 9) | ActionCreate      = "create"
  constant ActionDelete (line 10) | ActionDelete      = "delete"
  constant ActionSync (line 11) | ActionSync        = "sync"
  constant ActionUpdate (line 12) | ActionUpdate      = "update"
  constant ActionSynchronize (line 13) | ActionSynchronize = "synchronize"

FILE: hook/event.go
  constant EVENTS_TYPE_COMMENT (line 6) | EVENTS_TYPE_COMMENT = "comment"
  constant EVENTS_TYPE_PR (line 8) | EVENTS_TYPE_PR = "pr"
  constant EVENTS_TYPE_PUSH (line 10) | EVENTS_TYPE_PUSH = "push"
  constant EVENTS_TYPE_BUILD (line 12) | EVENTS_TYPE_BUILD = "build"
  constant EVENTS_TYPE_REBUILD (line 14) | EVENTS_TYPE_REBUILD = "rebuild"
  constant GITEE_EVENT (line 18) | GITEE_EVENT                   = "X-Gitee-Event"
  constant GITEE_EVENT_PUSH (line 19) | GITEE_EVENT_PUSH              = "Push Hook"
  constant GITEE_EVENT_NOTE (line 20) | GITEE_EVENT_NOTE              = "Note Hook"
  constant GITEE_EVENT_PR (line 21) | GITEE_EVENT_PR                = "Merge Request Hook"
  constant GITEE_EVENT_PR_ACTION_OPEN (line 22) | GITEE_EVENT_PR_ACTION_OPEN    = "open"
  constant GITEE_EVENT_PR_ACTION_UPDATE (line 23) | GITEE_EVENT_PR_ACTION_UPDATE  = "update"
  constant GITEE_EVENT_PR_ACTION_COMMENT (line 24) | GITEE_EVENT_PR_ACTION_COMMENT = "comment"
  constant GITHUB_EVENT (line 27) | GITHUB_EVENT                   = "X-GitHub-Event"
  constant GITHUB_EVENT_ISSUE_COMMENT (line 28) | GITHUB_EVENT_ISSUE_COMMENT     = "issue_comment"
  constant GITHUB_EVENT_PUSH (line 29) | GITHUB_EVENT_PUSH              = "push"
  constant GITHUB_EVENT_PR (line 30) | GITHUB_EVENT_PR                = "pull_request"
  constant GITHUB_EVENT_PR_ACTION_OPEN (line 31) | GITHUB_EVENT_PR_ACTION_OPEN    = "open"
  constant GITHUB_EVENT_PR_ACTION_UPDATE (line 32) | GITHUB_EVENT_PR_ACTION_UPDATE  = "update"
  constant GITHUB_EVENT_PR_ACTION_COMMENT (line 33) | GITHUB_EVENT_PR_ACTION_COMMENT = "comment"
  constant GITLAB_EVENT (line 37) | GITLAB_EVENT      = "X-Gitlab-Event"
  constant GITLAB_EVENT_PUSH (line 38) | GITLAB_EVENT_PUSH = "Push Hook"
  constant GITLAB_EVENT_PR (line 39) | GITLAB_EVENT_PR   = "Merge Request Hook"
  constant GITLAB_EVENT_NOTE (line 40) | GITLAB_EVENT_NOTE = "Note Hook"
  constant GITEA_EVENT (line 44) | GITEA_EVENT      = "X-Gitea-Event"
  constant GITEA_EVENT_PUSH (line 45) | GITEA_EVENT_PUSH = "push"
  constant GITEA_EVENT_PR (line 46) | GITEA_EVENT_PR   = "pull_request"
  constant GITEA_EVENT_NOTE (line 47) | GITEA_EVENT_NOTE = "issue_comment"

FILE: hook/git.go
  type Reference (line 4) | type Reference struct
  type Commit (line 10) | type Commit struct
  type User (line 16) | type User struct

FILE: hook/gitea/gitea.go
  function Parse (line 23) | func Parse(req *http.Request, secret string) (hook.WebHook, error) {
  function Validate (line 59) | func Validate(h func() hash.Hash, message, key []byte, signature string)...
  function validatePrefix (line 67) | func validatePrefix(message, key []byte, signature string) bool {
  function validate (line 77) | func validate(h func() hash.Hash, message, key, signature []byte) bool {
  function parseCommentHook (line 84) | func parseCommentHook(data []byte) (*hook.PullRequestCommentHook, error) {
  function parsePullRequestHook (line 96) | func parsePullRequestHook(data []byte) (*hook.PullRequestHook, error) {
  function parsePushHook (line 114) | func parsePushHook(data []byte) (*hook.PushHook, error) {
  function convertPushHook (line 122) | func convertPushHook(gp *giteaPushHook) *hook.PushHook {
  function convertPullRequestHook (line 162) | func convertPullRequestHook(gp *giteaPRHook) *hook.PullRequestHook {
  function convertPullRequestURL (line 228) | func convertPullRequestURL(gc *giteaCommentHook) (*giteaPullRequestURL, ...
  function convertCommentHook (line 258) | func convertCommentHook(gp *giteaCommentHook) (*hook.PullRequestCommentH...
  type giteaPushHook (line 335) | type giteaPushHook struct
  type giteaPRHook (line 468) | type giteaPRHook struct
  type giteaCommentHook (line 756) | type giteaCommentHook struct
  type giteaPullRequestURL (line 924) | type giteaPullRequestURL struct

FILE: hook/gitee/gitee.go
  function Parse (line 18) | func Parse(req *http.Request, secret string) (hook.WebHook, error) {
  function parseCommentHook (line 55) | func parseCommentHook(data []byte) (*hook.PullRequestCommentHook, error) {
  function parsePullRequestHook (line 64) | func parsePullRequestHook(data []byte) (*hook.PullRequestHook, error) {
  function parsePushHook (line 78) | func parsePushHook(data []byte) (*hook.PushHook, error) {
  function convertPullRequestHook (line 86) | func convertPullRequestHook(gp *giteePRHook) *hook.PullRequestHook {
  function convertPushHook (line 156) | func convertPushHook(gp *giteePushHook) *hook.PushHook {
  function convertCommentHook (line 198) | func convertCommentHook(gp *giteeCommentHook) *hook.PullRequestCommentHo...
  type giteePushHook (line 277) | type giteePushHook struct
  type giteePRHook (line 472) | type giteePRHook struct
  type giteeCommentHook (line 1042) | type giteeCommentHook struct

FILE: hook/github/github.go
  function Parse (line 23) | func Parse(req *http.Request, secret string) (hook.WebHook, error) {
  function Validate (line 57) | func Validate(h func() hash.Hash, message, key []byte, signature string)...
  function validatePrefix (line 65) | func validatePrefix(message, key []byte, signature string) bool {
  function validate (line 80) | func validate(h func() hash.Hash, message, key, signature []byte) bool {
  function parseCommentHook (line 87) | func parseCommentHook(data []byte) (*hook.PullRequestCommentHook, error) {
  function parsePullRequestHook (line 96) | func parsePullRequestHook(data []byte) (*hook.PullRequestHook, error) {
  function parsePushHook (line 114) | func parsePushHook(data []byte) (*hook.PushHook, error) {
  function convertPullRequestHook (line 122) | func convertPullRequestHook(gp *githubPRHook) *hook.PullRequestHook {
  function convertPushHook (line 192) | func convertPushHook(gp *githubPushHook) *hook.PushHook {
  function convertPullRequestURL (line 234) | func convertPullRequestURL(u string) (*githubPullRequestURL, error) {
  function convertCommentHook (line 262) | func convertCommentHook(gp *githubCommentHook) (*hook.PullRequestComment...
  type githubPullRequestURL (line 344) | type githubPullRequestURL struct
  type githubPushHook (line 675) | type githubPushHook struct
  type githubPRHook (line 849) | type githubPRHook struct
  type githubCommentHook (line 1305) | type githubCommentHook struct

FILE: hook/gitlab/gitlab.go
  function Parse (line 23) | func Parse(req *http.Request, secret string) (hook.WebHook, error) {
  function Validate (line 57) | func Validate(h func() hash.Hash, message, key []byte, signature string)...
  function validatePrefix (line 65) | func validatePrefix(message, key []byte, signature string) bool {
  function validate (line 80) | func validate(h func() hash.Hash, message, key, signature []byte) bool {
  function parseCommentHook (line 87) | func parseCommentHook(data []byte) (*hook.PullRequestCommentHook, error) {
  function parsePullRequestHook (line 96) | func parsePullRequestHook(data []byte) (*hook.PullRequestHook, error) {
  function parsePushHook (line 110) | func parsePushHook(data []byte) (*hook.PushHook, error) {
  function convertPullRequestHook (line 118) | func convertPullRequestHook(gp *gitlabPRHook) *hook.PullRequestHook {
  function convertPushHook (line 179) | func convertPushHook(gp *gitlabPushHook) *hook.PushHook {
  function convertCommentHook (line 212) | func convertCommentHook(gp *gitlabCommentHook) (*hook.PullRequestComment...
  type gitlabPushHook (line 280) | type gitlabPushHook struct
  type gitlabPRHook (line 339) | type gitlabPRHook struct
  type gitlabCommentHook (line 467) | type gitlabCommentHook struct

FILE: hook/pr.go
  type PullRequest (line 7) | type PullRequest struct
  type Comment (line 18) | type Comment struct

FILE: hook/repo.go
  type Repository (line 5) | type Repository struct

FILE: hook/webhook.go
  type WebHook (line 8) | type WebHook interface
  type WebhookService (line 11) | type WebhookService interface
  type PushHook (line 15) | type PushHook struct
    method Repository (line 52) | func (h *PushHook) Repository() Repository               { return h.Re...
  type BranchHook (line 26) | type BranchHook struct
    method Repository (line 53) | func (h *BranchHook) Repository() Repository             { return h.Re...
  type PullRequestHook (line 32) | type PullRequestHook struct
    method Repository (line 54) | func (h *PullRequestHook) Repository() Repository        { return h.Re...
  type PullRequestCommentHook (line 40) | type PullRequestCommentHook struct
    method Repository (line 55) | func (h *PullRequestCommentHook) Repository() Repository { return h.Re...
  type SecretFunc (line 49) | type SecretFunc

FILE: main.go
  function main (line 8) | func main() {

FILE: migrates/init.go
  function InitMysqlMigrate (line 17) | func InitMysqlMigrate(host, dbs, user, pass string) (wait bool, rtul str...
  function InitSqliteMigrate (line 106) | func InitSqliteMigrate() (rtul string, errs error) {

FILE: migrates/mysql/000001_gokins.up.sql
  type `t_artifact_package` (line 1) | CREATE TABLE `t_artifact_package` (
  type `t_artifact_version` (line 16) | CREATE TABLE `t_artifact_version` (
  type `t_artifactory` (line 31) | CREATE TABLE `t_artifactory` (
  type `t_build` (line 48) | CREATE TABLE `t_build` (
  type `t_cmd_line` (line 62) | CREATE TABLE `t_cmd_line` (
  type `t_stage` (line 76) | CREATE TABLE `t_stage` (
  type `t_step` (line 92) | CREATE TABLE `t_step` (
  type `t_trigger` (line 115) | CREATE TABLE `t_trigger` (
  type `t_trigger_run` (line 130) | CREATE TABLE `t_trigger_run` (
  type `t_message` (line 141) | CREATE TABLE `t_message` (
  type `t_org` (line 153) | CREATE TABLE `t_org` (
  type `t_org_pipe` (line 167) | CREATE TABLE `t_org_pipe` (
  type `t_pipeline` (line 176) | CREATE TABLE `t_pipeline` (
  type `t_pipeline_conf` (line 187) | CREATE TABLE `t_pipeline_conf` (
  type `t_pipeline_version` (line 196) | CREATE TABLE `t_pipeline_version` (
  type `t_param` (line 213) | CREATE TABLE `t_param` (
  type `t_user` (line 221) | CREATE TABLE `t_user` (
  type `t_user_info` (line 249) | CREATE TABLE `t_user_info` (
  type `t_user_org` (line 260) | CREATE TABLE `t_user_org` (
  type `t_user_msg` (line 274) | CREATE TABLE `t_user_msg` (
  type `t_user_token` (line 286) | CREATE TABLE `t_user_token` (
  type `t_pipeline_var` (line 306) | CREATE TABLE `t_pipeline_var` (
  type `t_yml_plugin` (line 316) | CREATE TABLE `t_yml_plugin` (
  type `t_yml_template` (line 364) | CREATE TABLE `t_yml_template` (

FILE: migrates/sqlite/000001_gokins.up.sql
  type `t_build` (line 1) | CREATE TABLE `t_build` (

FILE: migrates/up.go
  function UpMysqlMigrate (line 15) | func UpMysqlMigrate(ul string) error {
  function UpSqliteMigrate (line 68) | func UpSqliteMigrate(ul string) error {

FILE: model/schema_migrations.go
  type SchemaMigrations (line 3) | type SchemaMigrations struct

FILE: model/t_artifact_package.go
  type TArtifactPackage (line 7) | type TArtifactPackage struct

FILE: model/t_artifact_version.go
  type TArtifactVersion (line 7) | type TArtifactVersion struct

FILE: model/t_artifactory.go
  type TArtifactory (line 7) | type TArtifactory struct

FILE: model/t_build.go
  type TBuild (line 7) | type TBuild struct

FILE: model/t_cmd_line.go
  type TCmdLine (line 7) | type TCmdLine struct

FILE: model/t_message.go
  type TMessage (line 7) | type TMessage struct

FILE: model/t_org.go
  type TOrg (line 7) | type TOrg struct

FILE: model/t_org_pipe.go
  type TOrgPipe (line 7) | type TOrgPipe struct

FILE: model/t_param.go
  type TParam (line 7) | type TParam struct

FILE: model/t_pipeline.go
  type TPipeline (line 7) | type TPipeline struct

FILE: model/t_pipeline_conf.go
  type TPipelineConf (line 3) | type TPipelineConf struct

FILE: model/t_pipeline_var.go
  type TPipelineVar (line 3) | type TPipelineVar struct

FILE: model/t_pipeline_version.go
  type TPipelineVersion (line 7) | type TPipelineVersion struct

FILE: model/t_stage.go
  type TStage (line 7) | type TStage struct

FILE: model/t_step.go
  type TStep (line 7) | type TStep struct

FILE: model/t_trigger.go
  type TTrigger (line 7) | type TTrigger struct

FILE: model/t_trigger_run.go
  type TTriggerRun (line 7) | type TTriggerRun struct

FILE: model/t_user.go
  type TUser (line 7) | type TUser struct

FILE: model/t_user_info.go
  type TUserInfo (line 7) | type TUserInfo struct

FILE: model/t_user_msg.go
  type TUserMsg (line 7) | type TUserMsg struct

FILE: model/t_user_org.go
  type TUserOrg (line 7) | type TUserOrg struct

FILE: model/t_user_token.go
  type TUserToken (line 7) | type TUserToken struct

FILE: model/t_yml_plugin.go
  type TYmlPlugin (line 7) | type TYmlPlugin struct

FILE: model/t_yml_template.go
  type TYmlTemplate (line 7) | type TYmlTemplate struct

FILE: models/run_build.go
  type RunBuild (line 7) | type RunBuild struct
    method TableName (line 21) | func (RunBuild) TableName() string {

FILE: models/run_stage.go
  type RunStage (line 7) | type RunStage struct
    method TableName (line 23) | func (RunStage) TableName() string {
  type RunStep (line 27) | type RunStep struct
    method TableName (line 48) | func (RunStep) TableName() string {

FILE: models/t_artifact_package.go
  type TArtifactPackage (line 7) | type TArtifactPackage struct

FILE: models/t_artifact_version.go
  type TArtifactVersion (line 13) | type TArtifactVersion struct
    method ReadFiles (line 29) | func (c *TArtifactVersion) ReadFiles() error {
    method readDir (line 35) | func (c *TArtifactVersion) readDir(pth string) ([]hbtp.Map, error) {

FILE: models/t_artifactory.go
  type TArtifactory (line 7) | type TArtifactory struct

FILE: models/t_org.go
  type TOrg (line 7) | type TOrg struct
  type TOrgInfo (line 20) | type TOrgInfo struct
    method TableName (line 38) | func (TOrgInfo) TableName() string {

FILE: models/t_pipeline.go
  type TPipeline (line 7) | type TPipeline struct
  type TPipelineInfo (line 26) | type TPipelineInfo struct
    method TableName (line 39) | func (TPipelineInfo) TableName() string {

FILE: models/t_pipeline_var.go
  type TPipelineVar (line 3) | type TPipelineVar struct
    method TableName (line 12) | func (TPipelineVar) TableName() string {

FILE: models/t_pipeline_version.go
  type TPipelineVersion (line 7) | type TPipelineVersion struct
  type RunPipelineVersion (line 25) | type RunPipelineVersion struct

FILE: models/t_trigger.go
  type TTrigger (line 5) | type TTrigger struct

FILE: models/t_trigger_run.go
  type TTriggerRun (line 7) | type TTriggerRun struct
  type TimerTriggerRun (line 23) | type TimerTriggerRun struct

FILE: models/t_user.go
  type TUser (line 7) | type TUser struct
  type TUserOrgInfo (line 18) | type TUserOrgInfo struct
    method TableName (line 34) | func (TUserOrgInfo) TableName() string {

FILE: models/t_yml_plugin.go
  type TYmlPlugin (line 3) | type TYmlPlugin struct

FILE: models/t_yml_template.go
  type TYmlTemplate (line 3) | type TYmlTemplate struct

FILE: route/api.go
  type ApiController (line 16) | type ApiController struct
    method GetPath (line 18) | func (ApiController) GetPath() string {
    method Routes (line 21) | func (c *ApiController) Routes(g gin.IRoutes) {
    method hello (line 25) | func (ApiController) hello(c *gin.Context) {
    method test (line 28) | func (ApiController) test(c *gin.Context) {
  function prebuild (line 66) | func prebuild(b *runtime.Build) error {

FILE: route/artifact.go
  type ArtifactController (line 25) | type ArtifactController struct
    method GetPath (line 27) | func (ArtifactController) GetPath() string {
    method Routes (line 30) | func (c *ArtifactController) Routes(g gin.IRoutes) {
    method orgList (line 43) | func (ArtifactController) orgList(c *gin.Context, m *hbtp.Map) {
    method info (line 96) | func (ArtifactController) info(c *gin.Context, m *hbtp.Map) {
    method edit (line 127) | func (ArtifactController) edit(c *gin.Context, m *hbtp.Map) {
    method rm (line 196) | func (ArtifactController) rm(c *gin.Context, m *hbtp.Map) {
    method packageList (line 224) | func (ArtifactController) packageList(c *gin.Context, m *hbtp.Map) {
    method versionList (line 254) | func (ArtifactController) versionList(c *gin.Context, m *hbtp.Map) {
    method versionInfos (line 284) | func (ArtifactController) versionInfos(c *gin.Context, m *hbtp.Map) {
    method versionUrl (line 318) | func (ArtifactController) versionUrl(c *gin.Context, m *hbtp.Map) {
    method versionSave (line 353) | func (ArtifactController) versionSave(c *gin.Context, m *hbtp.Map) {
    method versionRm (line 388) | func (ArtifactController) versionRm(c *gin.Context, m *hbtp.Map) {

FILE: route/artpub.go
  type ArtPublicController (line 20) | type ArtPublicController struct
    method GetPath (line 22) | func (ArtPublicController) GetPath() string {
    method Routes (line 25) | func (c *ArtPublicController) Routes(g gin.IRoutes) {
    method down (line 28) | func (ArtPublicController) down(c *gin.Context) {

FILE: route/hook.go
  type HookController (line 13) | type HookController struct
    method GetPath (line 16) | func (HookController) GetPath() string {
    method Routes (line 19) | func (c *HookController) Routes(g gin.IRoutes) {
    method hooks (line 23) | func (HookController) hooks(c *gin.Context) {
    method web (line 46) | func (HookController) web(c *gin.Context, m *hbtp.Map) {

FILE: route/install.go
  type installConfig (line 23) | type installConfig struct
  type InstallController (line 39) | type InstallController struct
    method GetPath (line 41) | func (InstallController) GetPath() string {
    method auth (line 44) | func (cs *InstallController) auth(c *gin.Context) {
    method Routes (line 51) | func (cs *InstallController) Routes(g gin.IRoutes) {
    method check (line 56) | func (InstallController) check(c *gin.Context) {
    method install (line 73) | func (InstallController) install(c *gin.Context, m *installConfig) {
  function checkUrl (line 59) | func checkUrl(host string) bool {
  function initConfig (line 147) | func initConfig() error {
  function Install (line 155) | func Install(c *gin.Context) {

FILE: route/login.go
  type LoginController (line 19) | type LoginController struct
    method GetPath (line 21) | func (LoginController) GetPath() string {
    method Routes (line 24) | func (c *LoginController) Routes(g gin.IRoutes) {
    method info (line 28) | func (LoginController) info(c *gin.Context) {
    method login (line 46) | func (LoginController) login(c *gin.Context, m *bean.LoginReq) {

FILE: route/org.go
  type OrgController (line 18) | type OrgController struct
    method GetPath (line 20) | func (OrgController) GetPath() string {
    method Routes (line 23) | func (c *OrgController) Routes(g gin.IRoutes) {
    method list (line 37) | func (OrgController) list(c *gin.Context, m *hbtp.Map) {
    method new (line 97) | func (OrgController) new(c *gin.Context, m *hbtp.Map) {
    method info (line 136) | func (OrgController) info(c *gin.Context, m *hbtp.Map) {
    method users (line 172) | func (OrgController) users(c *gin.Context, m *hbtp.Map) {
    method save (line 215) | func (OrgController) save(c *gin.Context, m *hbtp.Map) {
    method rm (line 252) | func (OrgController) rm(c *gin.Context, m *hbtp.Map) {
    method userEdit (line 276) | func (OrgController) userEdit(c *gin.Context, m *hbtp.Map) {
    method userRm (line 353) | func (OrgController) userRm(c *gin.Context, m *hbtp.Map) {
    method pipeAdd (line 389) | func (OrgController) pipeAdd(c *gin.Context, m *hbtp.Map) {
    method pipeRm (line 418) | func (OrgController) pipeRm(c *gin.Context, m *hbtp.Map) {

FILE: route/pipeline.go
  type PipelineController (line 21) | type PipelineController struct
    method GetPath (line 23) | func (PipelineController) GetPath() string {
    method Routes (line 26) | func (c *PipelineController) Routes(g gin.IRoutes) {
    method orgPipelines (line 44) | func (PipelineController) orgPipelines(c *gin.Context, m *hbtp.Map) {
    method getPipelines (line 104) | func (PipelineController) getPipelines(c *gin.Context, m *hbtp.Map) {
    method save (line 151) | func (PipelineController) save(c *gin.Context, m *hbtp.Map) {
    method delete (line 198) | func (PipelineController) delete(c *gin.Context, m *hbtp.Map) {
    method new (line 233) | func (PipelineController) new(c *gin.Context, npipe *bean.NewPipeline) {
    method info (line 327) | func (PipelineController) info(c *gin.Context, m *hbtp.Map) {
    method run (line 375) | func (PipelineController) run(c *gin.Context, m *hbtp.Map) {
    method copy (line 401) | func (PipelineController) copy(c *gin.Context, m *hbtp.Map) {
    method rebuild (line 457) | func (PipelineController) rebuild(c *gin.Context, m *hbtp.Map) {
    method pipelineVersions (line 488) | func (PipelineController) pipelineVersions(c *gin.Context, m *hbtp.Map) {
    method pipelineVersion (line 550) | func (PipelineController) pipelineVersion(c *gin.Context, m *hbtp.Map) {
    method searchSha (line 603) | func (PipelineController) searchSha(c *gin.Context, m *hbtp.Map) {
    method vars (line 642) | func (PipelineController) vars(c *gin.Context, m *hbtp.Map) {
    method varSave (line 683) | func (PipelineController) varSave(c *gin.Context, pv *bean.PipelineVar) {
    method varDel (line 736) | func (PipelineController) varDel(c *gin.Context, m *hbtp.Map) {

FILE: route/pipelineversion.go
  type PipelineVersionController (line 12) | type PipelineVersionController struct
    method GetPath (line 14) | func (PipelineVersionController) GetPath() string {
    method Routes (line 17) | func (c *PipelineVersionController) Routes(g gin.IRoutes) {
    method delete (line 22) | func (PipelineVersionController) delete(c *gin.Context, m *hbtp.Map) {

FILE: route/runtime.go
  type RuntimeController (line 20) | type RuntimeController struct
    method GetPath (line 22) | func (RuntimeController) GetPath() string {
    method Routes (line 25) | func (c *RuntimeController) Routes(g gin.IRoutes) {
    method stages (line 33) | func (RuntimeController) stages(c *gin.Context, m *hbtp.Map) {
    method cmds (line 70) | func (RuntimeController) cmds(c *gin.Context, m *hbtp.Map) {
    method build (line 97) | func (RuntimeController) build(c *gin.Context, m *hbtp.Map) {
    method cancel (line 118) | func (RuntimeController) cancel(c *gin.Context, m *hbtp.Map) {
    method logs (line 143) | func (RuntimeController) logs(c *gin.Context, m *hbtp.Map) {

FILE: route/trigger.go
  type TriggerController (line 18) | type TriggerController struct
    method GetPath (line 20) | func (TriggerController) GetPath() string {
    method Routes (line 23) | func (c *TriggerController) Routes(g gin.IRoutes) {
    method triggers (line 31) | func (TriggerController) triggers(c *gin.Context, m *hbtp.Map) {
    method save (line 82) | func (TriggerController) save(c *gin.Context, tp *bean.TriggerParam) {
    method delete (line 129) | func (TriggerController) delete(c *gin.Context, m *hbtp.Map) {
    method runs (line 165) | func (TriggerController) runs(c *gin.Context, m *hbtp.Map) {

FILE: route/user.go
  type UserController (line 16) | type UserController struct
    method GetPath (line 18) | func (UserController) GetPath() string {
    method Routes (line 21) | func (c *UserController) Routes(g gin.IRoutes) {
    method page (line 31) | func (UserController) page(c *gin.Context, m *hbtp.Map) {
    method new (line 48) | func (UserController) new(c *gin.Context, m *hbtp.Map) {
    method info (line 98) | func (UserController) info(c *gin.Context, m *hbtp.Map) {
    method upinfo (line 116) | func (UserController) upinfo(c *gin.Context, m *hbtp.Map) {
    method upass (line 161) | func (UserController) upass(c *gin.Context, m *hbtp.Map) {
    method active (line 208) | func (UserController) active(c *gin.Context, m *hbtp.Map) {
    method perm (line 239) | func (UserController) perm(c *gin.Context, m *hbtp.Map) {

FILE: route/yml.go
  type YmlController (line 10) | type YmlController struct
    method GetPath (line 12) | func (YmlController) GetPath() string {
    method Routes (line 15) | func (c *YmlController) Routes(g gin.IRoutes) {
    method templates (line 19) | func (YmlController) templates(c *gin.Context) {
    method plugins (line 25) | func (YmlController) plugins(c *gin.Context) {

FILE: ruis_test.go
  function Test1 (line 7) | func Test1(t *testing.T) {

FILE: server/db.go
  function initDb (line 15) | func initDb() error {
  function initCache (line 42) | func initCache() error {

FILE: server/hbtp.go
  function runHbtp (line 10) | func runHbtp() {

FILE: server/server.go
  function Run (line 22) | func Run() error {
  function parseConfig (line 73) | func parseConfig() error {

FILE: server/web.go
  function runWeb (line 24) | func runWeb() {
  function regApi (line 41) | func regApi() {
  function midUiHandle (line 58) | func midUiHandle(c *gin.Context) {
  function getRdr (line 118) | func getRdr() (*zip.Reader, error) {
  function getFile (line 134) | func getFile(pth string) (*zip.File, error) {

FILE: service/db.go
  function GetIdOrAid (line 5) | func GetIdOrAid(id interface{}, e interface{}) bool {

FILE: service/hook.go
  function TriggerHook (line 21) | func TriggerHook(tt *model.TTrigger, req *http.Request) (rb *runtime.Bui...
  function TriggerWeb (line 107) | func TriggerWeb(tt *model.TTrigger, secret string) (rb *runtime.Build, e...
  function TriggerTimer (line 155) | func TriggerTimer(tt *model.TTrigger) (rb *runtime.Build, err error) {
  function parseHook (line 180) | func parseHook(hookType string, req *http.Request, secret string) (hook....

FILE: service/mid.go
  constant LgUserKey (line 8) | LgUserKey = "lguser"
  function MidUserCheck (line 10) | func MidUserCheck(c *gin.Context) {
  function GetMidLgUser (line 19) | func GetMidLgUser(c *gin.Context) *model.TUser {

FILE: service/param.go
  function FindParam (line 12) | func FindParam(key string) (*model.TParam, bool) {
  function SetParam (line 20) | func SetParam(key string, data []byte, tit ...string) error {
  function SetsParam (line 37) | func SetsParam(key string, data interface{}, tit ...string) error {
  function GetParam (line 48) | func GetParam(key string) ([]byte, error) {
  function GetsParam (line 55) | func GetsParam(key string, data interface{}) error {
  function GetsParamCache (line 66) | func GetsParamCache(key string, data interface{}, outm ...time.Duration)...

FILE: service/perms.go
  function CheckPermission (line 8) | func CheckPermission(uid string, perms string) bool {
  function CheckUPermission (line 15) | func CheckUPermission(usr *model.TUser, perms string) bool {
  function CheckCurrPermission (line 26) | func CheckCurrPermission(c *gin.Context, perms string) bool {

FILE: service/pipeline.go
  function Run (line 18) | func Run(uid, pipeId, sha, event string) (*model.TPipelineVersion, *runt...
  function ReBuild (line 35) | func ReBuild(uid string, tvp *model.TPipelineVersion) (*model.TPipelineV...
  function preBuild (line 52) | func preBuild(uid string, pipe *bean.Pipeline, tpipe *model.TPipelineCon...
  function convertVar (line 223) | func convertVar(pipelineId string, vm map[string]string) (map[string]*ru...
  function replaceStages (line 253) | func replaceStages(stages []*bean.Stage, mVars map[string]*runtime.Varia...
  function replaceStage (line 258) | func replaceStage(stage *bean.Stage, mVars map[string]*runtime.Variables) {
  function replaceSteps (line 269) | func replaceSteps(steps []*bean.Step, mVars map[string]*runtime.Variable...
  function replaceStep (line 274) | func replaceStep(step *bean.Step, mVars map[string]*runtime.Variables) {
  function replaceMaps (line 291) | func replaceMaps(envs map[string]string, mVars map[string]*runtime.Varia...
  function replace (line 300) | func replace(s string, mVars map[string]*runtime.Variables, mustShow ......

FILE: service/trigger.go
  function TriggerPerm (line 8) | func TriggerPerm(tt *model.TTrigger) error {

FILE: service/user.go
  function GetUser (line 12) | func GetUser(uid string) (*model.TUser, bool) {
  function GetUserInfo (line 23) | func GetUserInfo(uid string) (*model.TUserInfo, bool) {
  function FindUserName (line 34) | func FindUserName(name string) (*model.TUser, bool) {
  function ClearUserCache (line 43) | func ClearUserCache(uid string) {
  function GetUserCache (line 50) | func GetUserCache(uid string) (*model.TUser, bool) {
  function CurrUserCache (line 64) | func CurrUserCache(c *gin.Context) (*model.TUser, bool) {
  function IsAdmin (line 84) | func IsAdmin(usr *model.TUser) bool {
  function IsOrgAdmin (line 87) | func IsOrgAdmin(uid, orgId string) bool {
  function GetUsePermRwr (line 94) | func GetUsePermRwr(uid, orgId string) int {
  function HasOrgExec (line 101) | func HasOrgExec(uid, orgId string) bool {
  function GetUserOrg (line 108) | func GetUserOrg(uid, orgId string) (*model.TUserOrg, bool) {
  type OrgPerm (line 125) | type OrgPerm struct
    method IsAdmin (line 150) | func (c *OrgPerm) IsAdmin() bool {
    method IsOrgOwner (line 156) | func (c *OrgPerm) IsOrgOwner() bool {
    method IsOrgPublic (line 162) | func (c *OrgPerm) IsOrgPublic() bool {
    method IsOrgAdmin (line 168) | func (c *OrgPerm) IsOrgAdmin() bool {
    method CanRead (line 177) | func (c *OrgPerm) CanRead() bool {
    method CanWrite (line 183) | func (c *OrgPerm) CanWrite() bool {
    method CanDownload (line 192) | func (c *OrgPerm) CanDownload() bool {
    method CanExec (line 201) | func (c *OrgPerm) CanExec() bool {
    method LgUser (line 212) | func (c *OrgPerm) LgUser() *model.TUser {
    method Org (line 217) | func (c *OrgPerm) Org() *model.TOrg {
    method UserOrg (line 222) | func (c *OrgPerm) UserOrg() *model.TUserOrg {
  function NewOrgPerm (line 131) | func NewOrgPerm(lgusr *model.TUser, orgId string) *OrgPerm {
  type UserPipeOrgPerm (line 226) | type UserPipeOrgPerm struct
  type PipePerm (line 237) | type PipePerm struct
    method IsAdmin (line 266) | func (c *PipePerm) IsAdmin() bool {
    method IsPipeOwner (line 272) | func (c *PipePerm) IsPipeOwner() bool {
    method CanRead (line 278) | func (c *PipePerm) CanRead() bool {
    method CanWrite (line 295) | func (c *PipePerm) CanWrite() bool {
    method CanExec (line 309) | func (c *PipePerm) CanExec() bool {
    method LgUser (line 325) | func (c *PipePerm) LgUser() *model.TUser {
    method Pipeline (line 330) | func (c *PipePerm) Pipeline() *model.TPipeline {
  function NewPipePerm (line 243) | func NewPipePerm(lgusr *model.TUser, pipeId string) *PipePerm {

FILE: thirdapi/client.go
  type Client (line 8) | type Client struct

FILE: thirdapi/giteaapi/gitea.go
  function New (line 10) | func New(uri string) (*thirdapi.Client, error) {
  function NewDefault (line 25) | func NewDefault() *thirdapi.Client {
  type wrapper (line 30) | type wrapper struct

FILE: thirdapi/giteaapi/giteaapi.go
  constant BaseApiGitea (line 5) | BaseApiGitea = "https://api.gitea.com"
  constant ApiGiteaCreateFile (line 9) | ApiGiteaCreateFile = "/repos/%s/%s/contents/%s"
  constant ApiGiteaGetRepos (line 14) | ApiGiteaGetRepos = "/user/repos?page=%v&limit=%v"
  constant ApiGiteaCreateHooks (line 19) | ApiGiteaCreateHooks = "/repos/%s/%s/hooks"
  constant ApiGiteaGetHooks (line 23) | ApiGiteaGetHooks = "/repos/%s/%s/hooks?page=%v&limit=%v"
  constant ApiGiteaDeleteHooks (line 28) | ApiGiteaDeleteHooks = "/repos/%s/%s/hooks/%v"
  constant ApiGiteaGetRepoBranches (line 32) | ApiGiteaGetRepoBranches = "/repos/%s/%s/branches?page=1&limit=30"
  constant ApiGiteaGetPullRequest (line 35) | ApiGiteaGetPullRequest = "/repos/%s/%s/pulls/%v"

FILE: thirdapi/giteaapi/giteaapi_test.go
  function TestGiteeContents (line 10) | func TestGiteeContents(t *testing.T) {
  function TestGiteeCode (line 25) | func TestGiteeCode(t *testing.T) {

FILE: thirdapi/giteaapi/repositoryservice.go
  type RepositoryService (line 16) | type RepositoryService struct
    method GetRepos (line 33) | func (s *RepositoryService) GetRepos(accessToken, username, types, sor...
    method DeleteHooks (line 88) | func (s *RepositoryService) DeleteHooks(accessToken, owner, repo, hook...
    method CreateWebHooks (line 127) | func (s *RepositoryService) CreateWebHooks(accessToken, owner, repo, b...
    method GetRepoBranches (line 179) | func (s *RepositoryService) GetRepoBranches(accessToken, owner, repo s...
    method GetPullQuest (line 217) | func (s *RepositoryService) GetPullQuest(accessToken, owner, repo stri...
    method GetWebHooks (line 250) | func (s *RepositoryService) GetWebHooks(accessToken, owner, repo strin...
  function convertRepositoryList (line 288) | func convertRepositoryList(ls []*thirdbean.ResultGiteaRepo) []*thirdapi....
  function convertRepository (line 296) | func convertRepository(from *thirdbean.ResultGiteaRepo) *thirdapi.Reposi...
  function convertBranchList (line 308) | func convertBranchList(ls []*thirdbean.ResultGiteaRepoBranch) []*thirdap...
  function convertBranch (line 316) | func convertBranch(from *thirdbean.ResultGiteaRepoBranch) *thirdapi.Repo...
  function convertHookList (line 321) | func convertHookList(ls []*thirdbean.ResultGetGiteaHook) []*thirdapi.Rep...
  function convertHook (line 329) | func convertHook(from *thirdbean.ResultGetGiteaHook) *thirdapi.Repositor...

FILE: thirdapi/giteeapi/gitee.go
  function New (line 11) | func New(uri string) (*thirdapi.Client, error) {
  function NewDefault (line 29) | func NewDefault() *thirdapi.Client {
  type wrapper (line 34) | type wrapper struct

FILE: thirdapi/giteeapi/giteeapi.go
  constant BaseApiGitee (line 5) | BaseApiGitee = "https://gitee.com/api/v5"
  constant ApiGiteeCreateFile (line 10) | ApiGiteeCreateFile = "/repos/%s/%s/contents/%v"
  constant ApiGiteeGetRepos (line 15) | ApiGiteeGetRepos = "/user/repos?access_token=%s&type=%v&sort=%v&directio...
  constant ApiGiteeCreateHooks (line 20) | ApiGiteeCreateHooks = "/repos/%s/%s/hooks"
  constant ApiGiteeGetHooks (line 24) | ApiGiteeGetHooks = "/repos/%s/%s/hooks?access_token=%s&page=%v&per_page=%v"
  constant ApiGiteeDeleteHooks (line 29) | ApiGiteeDeleteHooks = "/repos/%s/%s/hooks/%v?access_token=%s"
  constant ApiGiteeGetRepoBranches (line 33) | ApiGiteeGetRepoBranches = "/repos/%s/%s/branches?access_token=%s"

FILE: thirdapi/giteeapi/giteeapi_test.go
  function TestGiteeCreateFile (line 25) | func TestGiteeCreateFile(t *testing.T) {

FILE: thirdapi/giteeapi/repositoryservice.go
  type RepositoryService (line 17) | type RepositoryService struct
    method GetRepos (line 34) | func (s *RepositoryService) GetRepos(accessToken, username, types, sor...
    method DeleteHooks (line 83) | func (s *RepositoryService) DeleteHooks(accessToken, owner, repo, hook...
    method CreateWebHooks (line 121) | func (s *RepositoryService) CreateWebHooks(accessToken, owner, repo, b...
    method GetRepoBranches (line 165) | func (s *RepositoryService) GetRepoBranches(accessToken, owner, repo s...
    method GetWebHooks (line 203) | func (s *RepositoryService) GetWebHooks(accessToken, owner, repo strin...
  function convertHookList (line 239) | func convertHookList(ls []*thirdbean.ResultGetGiteeHook) []*thirdapi.Rep...
  function convertHook (line 247) | func convertHook(from *thirdbean.ResultGetGiteeHook) *thirdapi.Repositor...
  function convertBranchList (line 255) | func convertBranchList(ls []*thirdbean.ResultGiteeRepoBranch) []*thirdap...
  function convertBranch (line 263) | func convertBranch(from *thirdbean.ResultGiteeRepoBranch) *thirdapi.Repo...
  function convertRepositoryList (line 269) | func convertRepositoryList(ls []*thirdbean.ResultGiteeRepo) []*thirdapi....
  function convertRepository (line 277) | func convertRepository(from *thirdbean.ResultGiteeRepo) *thirdapi.Reposi...

FILE: thirdapi/giteepremiumapi/giteepremium.go
  function New (line 11) | func New(uri string) (*thirdapi.Client, error) {
  function NewDefault (line 29) | func NewDefault() *thirdapi.Client {
  type wrapper (line 34) | type wrapper struct

FILE: thirdapi/giteepremiumapi/giteepremiumapi.go
  constant BaseApiGiteePremium (line 5) | BaseApiGiteePremium = "https://gitee.com/api/v5"
  constant ApiGiteePremiumCreateFile (line 10) | ApiGiteePremiumCreateFile = "/repos/%s/%s/contents/%v"
  constant ApiGiteePremiumGetRepos (line 15) | ApiGiteePremiumGetRepos = "/user/repos?access_token=%s&type=%v&sort=%v&d...
  constant ApiGiteePremiumCreateHooks (line 20) | ApiGiteePremiumCreateHooks = "/repos/%s/%s/hooks"
  constant ApiGiteePremiumGetHooks (line 24) | ApiGiteePremiumGetHooks = "/repos/%s/%s/hooks?access_token=%s&page=%v&pe...
  constant ApiGiteePremiumDeleteHooks (line 29) | ApiGiteePremiumDeleteHooks = "/repos/%s/%s/hooks/%v?access_token=%s"
  constant ApiGiteePremiumGetRepoBranches (line 33) | ApiGiteePremiumGetRepoBranches = "/repos/%s/%s/branches?access_token=%s"

FILE: thirdapi/giteepremiumapi/repositoryservice.go
  type RepositoryService (line 17) | type RepositoryService struct
    method GetRepos (line 34) | func (s *RepositoryService) GetRepos(accessToken, username, types, sor...
    method DeleteHooks (line 83) | func (s *RepositoryService) DeleteHooks(accessToken, owner, repo, hook...
    method CreateWebHooks (line 121) | func (s *RepositoryService) CreateWebHooks(accessToken, owner, repo, b...
    method GetRepoBranches (line 165) | func (s *RepositoryService) GetRepoBranches(accessToken, owner, repo s...
    method GetWebHooks (line 203) | func (s *RepositoryService) GetWebHooks(accessToken, owner, repo strin...
  function convertHookList (line 239) | func convertHookList(ls []*thirdbean.ResultGetGiteePremiumHook) []*third...
  function convertHook (line 247) | func convertHook(from *thirdbean.ResultGetGiteePremiumHook) *thirdapi.Re...
  function convertBranchList (line 255) | func convertBranchList(ls []*thirdbean.ResultGiteePremiumRepoBranch) []*...
  function convertBranch (line 263) | func convertBranch(from *thirdbean.ResultGiteePremiumRepoBranch) *thirda...
  function convertRepositoryList (line 269) | func convertRepositoryList(ls []*thirdbean.ResultGiteePremiumRepo) []*th...
  function convertRepository (line 277) | func convertRepository(from *thirdbean.ResultGiteePremiumRepo) *thirdapi...

FILE: thirdapi/githubapi/github.go
  function New (line 10) | func New(uri string) (*thirdapi.Client, error) {
  function NewDefault (line 25) | func NewDefault() *thirdapi.Client {
  type wrapper (line 30) | type wrapper struct

FILE: thirdapi/githubapi/githubapi.go
  constant BaseApiGithub (line 5) | BaseApiGithub = "https://api.github.com"
  constant ApiGithubCreateFile (line 9) | ApiGithubCreateFile = "/repos/%s/%s/contents/%s"
  constant ApiGithubGetRepos (line 14) | ApiGithubGetRepos = "/user/repos?type=%v&sort=%v&direction=%v&page=%v&pe...
  constant ApiGithubCreateHooks (line 19) | ApiGithubCreateHooks = "/repos/%s/%s/hooks"
  constant ApiGithubGetHooks (line 23) | ApiGithubGetHooks = "/repos/%s/%s/hooks?page=%v&per_page=%v"
  constant ApiGithubDeleteHooks (line 28) | ApiGithubDeleteHooks = "/repos/%s/%s/hooks/%v"
  constant ApiGithubGetRepoBranches (line 32) | ApiGithubGetRepoBranches = "/repos/%s/%s/branches?per_page=100"

FILE: thirdapi/githubapi/githubapi_test.go
  function TestGiteeContents (line 10) | func TestGiteeContents(t *testing.T) {
  function TestGiteeCode (line 25) | func TestGiteeCode(t *testing.T) {

FILE: thirdapi/githubapi/repositoryservice.go
  type RepositoryService (line 18) | type RepositoryService struct
    method GetRepos (line 35) | func (s *RepositoryService) GetRepos(accessToken, username, types, sor...
    method DeleteHooks (line 96) | func (s *RepositoryService) DeleteHooks(accessToken, owner, repo, hook...
    method CreateWebHooks (line 135) | func (s *RepositoryService) CreateWebHooks(accessToken, owner, repo, b...
    method GetRepoBranches (line 186) | func (s *RepositoryService) GetRepoBranches(accessToken, owner, repo s...
    method GetWebHooks (line 224) | func (s *RepositoryService) GetWebHooks(accessToken, owner, repo strin...
  function convertRepositoryList (line 262) | func convertRepositoryList(ls []*thirdbean.ResultGithubRepo) []*thirdapi...
  function convertRepository (line 270) | func convertRepository(from *thirdbean.ResultGithubRepo) *thirdapi.Repos...
  function convertBranchList (line 282) | func convertBranchList(ls []*thirdbean.ResultGithubRepoBranch) []*thirda...
  function convertBranch (line 290) | func convertBranch(from *thirdbean.ResultGithubRepoBranch) *thirdapi.Rep...
  function convertHookList (line 295) | func convertHookList(ls []*thirdbean.ResultGetGithubHook) []*thirdapi.Re...
  function convertHook (line 303) | func convertHook(from *thirdbean.ResultGetGithubHook) *thirdapi.Reposito...

FILE: thirdapi/gitlabapi/gitlab.go
  function New (line 10) | func New(uri string) (*thirdapi.Client, error) {
  function NewDefault (line 25) | func NewDefault() *thirdapi.Client {
  type wrapper (line 30) | type wrapper struct

FILE: thirdapi/gitlabapi/gitlabapi.go
  constant BaseApiGitlab (line 5) | BaseApiGitlab = "https://gitlab.com/api/v4"
  constant ApiGitlabCreateFile (line 9) | ApiGitlabCreateFile = "/repos/%s/%s/contents/%s"
  constant ApiGitlabGetRepos (line 14) | ApiGitlabGetRepos = "/users/%s/projects?type=%v&page=%v&per_page=%v"
  constant ApiGitlabCreateHooks (line 19) | ApiGitlabCreateHooks = "/projects/%s/hooks"
  constant ApiGitlabGetHooks (line 23) | ApiGitlabGetHooks = "/projects/%s/hooks?page=%v&per_page=%v"
  constant ApiGitlabDeleteHooks (line 28) | ApiGitlabDeleteHooks = "/projects/%s/hooks/%v"
  constant ApiGitlabGetRepoBranches (line 32) | ApiGitlabGetRepoBranches = "/projects/%v/repository/branches"

FILE: thirdapi/gitlabapi/gitlabapi_test.go
  function TestGiteeContents (line 10) | func TestGiteeContents(t *testing.T) {
  function TestGiteeCode (line 25) | func TestGiteeCode(t *testing.T) {

FILE: thirdapi/gitlabapi/repositoryservice.go
  type RepositoryService (line 17) | type RepositoryService struct
    method GetRepos (line 21) | func (s *RepositoryService) GetRepos(accessToken, username, types, sor...
    method DeleteHooks (line 71) | func (s *RepositoryService) DeleteHooks(accessToken, owner, repo, hook...
    method CreateWebHooks (line 111) | func (s *RepositoryService) CreateWebHooks(accessToken, owner, repo, b...
    method GetRepoBranches (line 161) | func (s *RepositoryService) GetRepoBranches(accessToken, owner, repo s...
    method GetWebHooks (line 200) | func (s *RepositoryService) GetWebHooks(accessToken, owner, repo strin...
  function convertRepositoryList (line 239) | func convertRepositoryList(ls []*thirdbean.ResultGitlabRepo) []*thirdapi...
  function convertRepository (line 247) | func convertRepository(from *thirdbean.ResultGitlabRepo) *thirdapi.Repos...
  function convertBranchList (line 259) | func convertBranchList(ls []*thirdbean.ResultGitlabRepoBranch) []*thirda...
  function convertBranch (line 267) | func convertBranch(from *thirdbean.ResultGitlabRepoBranch) *thirdapi.Rep...
  function convertHookList (line 272) | func convertHookList(ls []*thirdbean.ResultGetGitlabHook) []*thirdapi.Re...
  function convertHook (line 280) | func convertHook(from *thirdbean.ResultGetGitlabHook) *thirdapi.Reposito...

FILE: thirdapi/repo.go
  type Repository (line 5) | type Repository struct
  type RepositoryPage (line 16) | type RepositoryPage struct
  type RepositoryBranch (line 21) | type RepositoryBranch struct
  type RepositoryHook (line 25) | type RepositoryHook struct

FILE: thirdapi/repositoryservice.go
  type RepositoryService (line 4) | type RepositoryService interface

FILE: util/gin.go
  type GinController (line 12) | type GinController interface
  function GinRegController (line 17) | func GinRegController(g *gin.Engine, gc GinController) {
  function GinReqParseJson (line 31) | func GinReqParseJson(fn interface{}) gin.HandlerFunc {
  function MidAccessAllowFun (line 72) | func MidAccessAllowFun(c *gin.Context) {

FILE: util/git.go
  function CloneRepo (line 10) | func CloneRepo(path string, option *git.CloneOptions, ctx context.Contex...
  function CheckOutHash (line 18) | func CheckOutHash(repository *git.Repository, hash string) error {
  function CheckOut (line 27) | func CheckOut(repository *git.Repository, option *git.CheckoutOptions) e...
  function GetLogsHash (line 39) | func GetLogsHash(repository *git.Repository, hash string) (object.Commit...
  function GetLogs (line 45) | func GetLogs(repository *git.Repository, option *git.LogOptions) (object...

FILE: util/httpex/const.go
  function ResMsgUrl (line 48) | func ResMsgUrl(c *gin.Context, msg string, url ...string) {

FILE: util/httpex/post.go
  function Post (line 15) | func Post(ul string, params *url.Values, timeout time.Duration, hds ...h...
  function Posts (line 33) | func Posts(ul string, params *url.Values, timeout time.Duration, hds ......
  function PostJSON (line 60) | func PostJSON(ul string, params interface{}, timeout time.Duration, hds ...
  function PostResult (line 80) | func PostResult(ul string, params *url.Values, result interface{}, timeo...
  function PostJSONResult (line 97) | func PostJSONResult(ul string, params interface{}, result interface{}, t...

FILE: util/token.go
  function CreateToken (line 13) | func CreateToken(claims jwt.MapClaims, key string, tmout time.Duration) ...
  function SetToken (line 25) | func SetToken(c *gin.Context, p jwt.MapClaims, key string, rem bool, dom...
  function ClearToken (line 51) | func ClearToken(c *gin.Context, doman ...string) error {
  function getToken (line 64) | func getToken(c *gin.Context) string {
  function getTokenAuth (line 71) | func getTokenAuth(c *gin.Context) string {
  function GetTokens (line 83) | func GetTokens(s string, key string) jwt.MapClaims {
  function GetToken (line 98) | func GetToken(c *gin.Context, key string) jwt.MapClaims {
Condensed preview — 154 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,011K chars).
[
  {
    "path": ".gitignore",
    "chars": 334,
    "preview": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# Test binary, built with `go test -c`\n/dbm.bat\n/db"
  },
  {
    "path": "Dockerfile",
    "chars": 614,
    "preview": "FROM golang:1.16.6-alpine3.14 AS builder\n# ENV GOPROXY=https://goproxy.cn,direct\n# RUN apk add git build-base && git clo"
  },
  {
    "path": "LICENSE",
    "chars": 1063,
    "preview": "MIT License\n\nCopyright (c) 2021 gokins\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
  },
  {
    "path": "README.md",
    "chars": 1799,
    "preview": "# 项目已经转移仓库到下面地址维护\n\n## https://github.com/gokins/gokins\n\n\n\n# Gokins文档\n\n# Gokins: *More Power*\n\n![](https://static01.imgkr"
  },
  {
    "path": "bean/condition.go",
    "chars": 1806,
    "preview": "package bean\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n)\n\nfunc skipBranch(c *Condition, branch string) bool {\n\treturn !c.Match(bran"
  },
  {
    "path": "bean/db.go",
    "chars": 305,
    "preview": "package bean\n\ntype Page struct {\n\tPage  int64       `json:\"page\"`\n\tSize  int64       `json:\"size\"`\n\tTotal int64       `j"
  },
  {
    "path": "bean/http.go",
    "chars": 416,
    "preview": "package bean\n\ntype IdsRes struct {\n\tId  string `json:\"id\"`\n\tAid int64  `json:\"aid\"`\n}\ntype LoginReq struct {\n\tName strin"
  },
  {
    "path": "bean/models.go",
    "chars": 386,
    "preview": "package bean\n\ntype PipelineShow struct {\n\tId           string `json:\"id\"`\n\tUid          string `json:\"uid\"`\n\tName       "
  },
  {
    "path": "bean/pipeline.go",
    "chars": 690,
    "preview": "package bean\n\ntype NewPipeline struct {\n\tName        string            `json:\"name\"`\n\tDisplayName string            `jso"
  },
  {
    "path": "bean/pipelinevar.go",
    "chars": 255,
    "preview": "package bean\n\ntype PipelineVar struct {\n\tAid        int64  `json:\"aid\"`\n\tPipelineId string `json:\"pipelineId\"`\n\tName    "
  },
  {
    "path": "bean/runtime.go",
    "chars": 385,
    "preview": "package bean\n\nimport \"time\"\n\ntype LogOutJson struct {\n\tId      string    `json:\"id\"`\n\tContent string    `json:\"content\"`"
  },
  {
    "path": "bean/thirdbean/gitea.go",
    "chars": 4992,
    "preview": "package thirdbean\n\nimport \"time\"\n\ntype ResultGiteaRepo struct {\n\tId    int `json:\"id\"`\n\tOwner struct {\n\t\tId            i"
  },
  {
    "path": "bean/thirdbean/gitee.go",
    "chars": 7337,
    "preview": "package thirdbean\n\nimport \"time\"\n\ntype ResultGiteeCreateHooks struct {\n\tId                  int         `json:\"id\"`\n\tUrl"
  },
  {
    "path": "bean/thirdbean/giteepremium.go",
    "chars": 7365,
    "preview": "package thirdbean\n\nimport \"time\"\n\ntype ResultGiteePremiumCreateHooks struct {\n\tId                  int         `json:\"id"
  },
  {
    "path": "bean/thirdbean/github.go",
    "chars": 5949,
    "preview": "package thirdbean\n\nimport \"time\"\n\ntype ResultGithubRepo struct {\n\tId       int    `json:\"id\"`\n\tNodeId   string `json:\"no"
  },
  {
    "path": "bean/thirdbean/gitlab.go",
    "chars": 9579,
    "preview": "package thirdbean\n\nimport \"time\"\n\ntype ResultGitlabRepo struct {\n\tId                int           `json:\"id\"`\n\tDescripti"
  },
  {
    "path": "bean/trigger.go",
    "chars": 585,
    "preview": "package bean\n\nimport \"errors\"\n\ntype TriggerParam struct {\n\tId         string `json:\"id\"`\n\tPipelineId string `json:\"pipel"
  },
  {
    "path": "bean/yml.go",
    "chars": 5256,
    "preview": "package bean\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype Pipeline struct {\n\tVersion  string          "
  },
  {
    "path": "bindata.sh",
    "chars": 138,
    "preview": "\n# go get -u github.com/jteeuwen/go-bindata/...\n\ngo-bindata -o comm/migrate.go -pkg=comm -prefix migrates migrates/mysql"
  },
  {
    "path": "bindui.sh",
    "chars": 20,
    "preview": "go run compressui.go"
  },
  {
    "path": "build.sh",
    "chars": 55,
    "preview": "\nexport CGO_ENABLED=0\ngo build -o ../bin/gokins main.go"
  },
  {
    "path": "cmd/cmd.go",
    "chars": 1967,
    "preview": "package cmd\n\nimport (\n\t\"github.com/gokins/core\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/server\"\n\thbt"
  },
  {
    "path": "comm/app.go",
    "chars": 564,
    "preview": "package comm\n\nimport (\n\t\"context\"\n\n\t\"github.com/boltdb/bolt\"\n\t\"github.com/gin-gonic/gin\"\n\thbtp \"github.com/mgr9525/Hyper"
  },
  {
    "path": "comm/cache.go",
    "chars": 3444,
    "preview": "package comm\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"github.com/boltdb/bolt\"\n\thbtp \"github.com/mgr9525/HyperByte"
  },
  {
    "path": "comm/config.go",
    "chars": 453,
    "preview": "package comm\n\ntype Config struct {\n\tServer struct {\n\t\tHost      string   `yaml:\"host\"` //外网访问地址\n\t\tLoginKey  string   `ya"
  },
  {
    "path": "comm/db.go",
    "chars": 2866,
    "preview": "package comm\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/gokins/gokins/bean\"\n\t\"xorm.io/builder\"\n\t\"xor"
  },
  {
    "path": "comm/migrate.go",
    "chars": 15079,
    "preview": "package comm\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nfunc bindata_read(data []byte, name string) "
  },
  {
    "path": "comm/thirdapi.go",
    "chars": 1122,
    "preview": "package comm\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"github.com/gokins/gokins/thirdapi/giteaapi\"\n\t\"github.com/g"
  },
  {
    "path": "comm/uis.go",
    "chars": 3296782,
    "preview": "package comm\n\nconst StaticPkg = \"UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAALAAAAZmF2aWNvbi5pY2/sXA9wXMV5XyGbIwmOZCBN6pTYJU2xS6A"
  },
  {
    "path": "compressui.go",
    "chars": 838,
    "preview": "package main\n\nimport (\n\t\"encoding/base64\"\n\t\"flag\"\n\t\"fmt\"\n\t\"github.com/gokins/core/utils\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filep"
  },
  {
    "path": "engine/buildDao.go",
    "chars": 5004,
    "preview": "package engine\n\nimport (\n\t\"github.com/gokins/core/common\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.com/gokins/gokins/c"
  },
  {
    "path": "engine/buildEgn.go",
    "chars": 2897,
    "preview": "package engine\n\nimport (\n\t\"container/list\"\n\t\"github.com/gokins/core/common\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.c"
  },
  {
    "path": "engine/buildTask.go",
    "chars": 12001,
    "preview": "package engine\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n"
  },
  {
    "path": "engine/buildTaskc.go",
    "chars": 7173,
    "preview": "package engine\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/core/common\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.co"
  },
  {
    "path": "engine/buildtask_test.go",
    "chars": 500,
    "preview": "package engine\n\nimport (\n\t\"fmt\"\n\t\"github.com/gokins/core/runtime\"\n\t\"testing\"\n)\n\nfunc TestGitClone(t *testing.T) {\n\ttask "
  },
  {
    "path": "engine/hbtpruner.go",
    "chars": 6448,
    "preview": "package engine\n\nimport (\n\t\"fmt\"\n\t\"github.com/gokins/core/common\"\n\t\"github.com/gokins/core/utils\"\n\t\"github.com/gokins/gok"
  },
  {
    "path": "engine/jobEgn.go",
    "chars": 3422,
    "preview": "package engine\n\nimport (\n\t\"container/list\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.com/gokins/core/u"
  },
  {
    "path": "engine/mgr.go",
    "chars": 1707,
    "preview": "package engine\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime/debug\"\n\t\"time\"\n\n\t\"github.com/gokins/core/common\"\n\t\"github.com/"
  },
  {
    "path": "engine/runner.go",
    "chars": 9423,
    "preview": "package engine\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/service\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n"
  },
  {
    "path": "engine/timermgr.go",
    "chars": 5036,
    "preview": "package engine\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"github.com/gokins/core/common\"\n\t\"github.com/gokins/gokins/comm\"\n\t\""
  },
  {
    "path": "engine/timermgr_test.go",
    "chars": 441,
    "preview": "package engine\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestTimer(t *testing.T) {\n\ttm := time.NewTimer(time.S"
  },
  {
    "path": "go.mod",
    "chars": 635,
    "preview": "module github.com/gokins/gokins\n\ngo 1.15\n\nrequire (\n\tgithub.com/boltdb/bolt v1.3.1\n\tgithub.com/dgrijalva/jwt-go v3.2.0+i"
  },
  {
    "path": "go.sum",
    "chars": 77026,
    "preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
  },
  {
    "path": "hook/action.go",
    "chars": 281,
    "preview": "package hook\n\ntype Action int\n\nconst (\n\tActionOpen        = \"open\"\n\tActionOpened      = \"opened\"\n\tActionClose       = \"c"
  },
  {
    "path": "hook/event.go",
    "chars": 1287,
    "preview": "package hook\n\n//触发事件\nconst (\n\t// EVENTS_TYPE_COMMENT 评论事件\n\tEVENTS_TYPE_COMMENT = \"comment\"\n\t// EVENTS_TYPE_PR pull reque"
  },
  {
    "path": "hook/git.go",
    "chars": 197,
    "preview": "package hook\n\ntype (\n\tReference struct {\n\t\tName string\n\t\tPath string\n\t\tSha  string\n\t}\n\n\tCommit struct {\n\t\tSha     string"
  },
  {
    "path": "hook/gitea/gitea.go",
    "chars": 44999,
    "preview": "package gitea\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\""
  },
  {
    "path": "hook/gitee/gitee.go",
    "chars": 55346,
    "preview": "package gitee\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/hook\"\n\t\"github.com/sirupsen/logrus\""
  },
  {
    "path": "hook/github/github.go",
    "chars": 63899,
    "preview": "package github\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt"
  },
  {
    "path": "hook/gitlab/gitlab.go",
    "chars": 23299,
    "preview": "package gitlab\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt"
  },
  {
    "path": "hook/pr.go",
    "chars": 314,
    "preview": "package hook\n\nimport \"time\"\n\ntype (\n\t// PullRequest represents a repository pull request.\n\tPullRequest struct {\n\t\tNumber"
  },
  {
    "path": "hook/repo.go",
    "chars": 889,
    "preview": "package hook\n\nimport \"time\"\n\ntype Repository struct {\n\tId          string    `json:\"id\"`\n\tRef         string    `json:\"r"
  },
  {
    "path": "hook/webhook.go",
    "chars": 1177,
    "preview": "package hook\n\nimport (\n\t\"net/http\"\n)\n\ntype (\n\tWebHook interface {\n\t\tRepository() Repository\n\t}\n\tWebhookService interface"
  },
  {
    "path": "main.go",
    "chars": 120,
    "preview": "package main\n\nimport (\n\t\"github.com/gokins/gokins/cmd\"\n\t//_ \"github.com/mattn/go-sqlite3\"\n)\n\nfunc main() {\n\tcmd.Run()\n}\n"
  },
  {
    "path": "migrates/init.go",
    "chars": 3276,
    "preview": "package migrates\n\nimport (\n\t\"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/golang-migrate"
  },
  {
    "path": "migrates/mysql/000001_gokins.down.sql",
    "chars": 863,
    "preview": "DROP TABLE IF EXISTS `t_artifact_package`;\nDROP TABLE IF EXISTS `t_artifact_version`;\nDROP TABLE IF EXISTS `t_artifactor"
  },
  {
    "path": "migrates/mysql/000001_gokins.up.sql",
    "chars": 15502,
    "preview": "CREATE TABLE `t_artifact_package` (\n  `id` varchar(64) NOT NULL,\n  `aid` bigint(20) NOT NULL AUTO_INCREMENT,\n  `repo_id`"
  },
  {
    "path": "migrates/sqlite/000001_gokins.down.sql",
    "chars": 31,
    "preview": "DROP TABLE IF EXISTS `t_build`;"
  },
  {
    "path": "migrates/sqlite/000001_gokins.up.sql",
    "chars": 531,
    "preview": "CREATE TABLE `t_build` (\n  `id` TEXT NOT NULL PRIMARY KEY,\n  `pipeline_id` TEXT DEFAULT NULL,\n  `pipeline_version_id` TE"
  },
  {
    "path": "migrates/up.go",
    "chars": 2670,
    "preview": "package migrates\n\nimport (\n\t\"database/sql\"\n\t\"errors\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/golang-migrate/migrat"
  },
  {
    "path": "model/schema_migrations.go",
    "chars": 167,
    "preview": "package model\n\ntype SchemaMigrations struct {\n\tVersion int64 `xorm:\"not null pk BIGINT(20)\" json:\"version\"`\n\tDirty   int"
  },
  {
    "path": "model/t_artifact_package.go",
    "chars": 701,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TArtifactPackage struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)\""
  },
  {
    "path": "model/t_artifact_version.go",
    "chars": 726,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TArtifactVersion struct {\n\tId        string    `xorm:\"not null pk VARCHAR(64)\" j"
  },
  {
    "path": "model/t_artifactory.go",
    "chars": 924,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TArtifactory struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)\" jso"
  },
  {
    "path": "model/t_build.go",
    "chars": 905,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TBuild struct {\n\tId                string    `xorm:\"not null pk VARCHAR(64)\" jso"
  },
  {
    "path": "model/t_cmd_line.go",
    "chars": 651,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TCmdLine struct {\n\tId       string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`"
  },
  {
    "path": "model/t_message.go",
    "chars": 572,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TMessage struct {\n\tId      string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`\n"
  },
  {
    "path": "model/t_org.go",
    "chars": 709,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TOrg struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`\n"
  },
  {
    "path": "model/t_org_pipe.go",
    "chars": 384,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TOrgPipe struct {\n\tAid     int64     `xorm:\"not null pk autoincr BIGINT(20)\" jso"
  },
  {
    "path": "model/t_param.go",
    "chars": 321,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TParam struct {\n\tAid   int64     `xorm:\"not null pk autoincr BIGINT(20)\" json:\"a"
  },
  {
    "path": "model/t_pipeline.go",
    "chars": 556,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TPipeline struct {\n\tId           string    `xorm:\"not null pk VARCHAR(64)\" json:"
  },
  {
    "path": "model/t_pipeline_conf.go",
    "chars": 410,
    "preview": "package model\n\ntype TPipelineConf struct {\n\tAid         int    `xorm:\"not null pk autoincr INT(20)\" json:\"aid\"`\n\tPipelin"
  },
  {
    "path": "model/t_pipeline_var.go",
    "chars": 460,
    "preview": "package model\n\ntype TPipelineVar struct {\n\tAid        int64  `xorm:\"not null pk autoincr BIGINT(20)\" json:\"aid\"`\n\tUid   "
  },
  {
    "path": "model/t_pipeline_version.go",
    "chars": 1078,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TPipelineVersion struct {\n\tId                  string    `xorm:\"not null pk VARC"
  },
  {
    "path": "model/t_stage.go",
    "chars": 1030,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TStage struct {\n\tId                string    `xorm:\"not null pk VARCHAR(64)\" jso"
  },
  {
    "path": "model/t_step.go",
    "chars": 1524,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TStep struct {\n\tId                string    `xorm:\"not null pk VARCHAR(64)\" json"
  },
  {
    "path": "model/t_trigger.go",
    "chars": 701,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TTrigger struct {\n\tId         string    `xorm:\"not null pk VARCHAR(64)\" json:\"id"
  },
  {
    "path": "model/t_trigger_run.go",
    "chars": 525,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TTriggerRun struct {\n\tId            string    `xorm:\"not null pk VARCHAR(64)\" js"
  },
  {
    "path": "model/t_user.go",
    "chars": 587,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TUser struct {\n\tId        string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`\n\t"
  },
  {
    "path": "model/t_user_info.go",
    "chars": 491,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TUserInfo struct {\n\tId       string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\""
  },
  {
    "path": "model/t_user_msg.go",
    "chars": 567,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TUserMsg struct {\n\tAid         int64     `xorm:\"not null pk autoincr BIGINT(20)\""
  },
  {
    "path": "model/t_user_org.go",
    "chars": 627,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TUserOrg struct {\n\tAid      int64     `xorm:\"not null pk autoincr BIGINT(20)\" js"
  },
  {
    "path": "model/t_user_token.go",
    "chars": 967,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TUserToken struct {\n\tAid          int64     `xorm:\"not null pk autoincr BIGINT(2"
  },
  {
    "path": "model/t_yml_plugin.go",
    "chars": 376,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TYmlPlugin struct {\n\tAid         int64     `xorm:\"not null pk autoincr BIGINT(20"
  },
  {
    "path": "model/t_yml_template.go",
    "chars": 378,
    "preview": "package model\n\nimport (\n\t\"time\"\n)\n\ntype TYmlTemplate struct {\n\tAid         int64     `xorm:\"not null pk autoincr BIGINT("
  },
  {
    "path": "models/run_build.go",
    "chars": 966,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype RunBuild struct {\n\tId                string    `xorm:\"not null pk VARCHAR(64)\" "
  },
  {
    "path": "models/run_stage.go",
    "chars": 2474,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype RunStage struct {\n\tId                string    `xorm:\"not null pk VARCHAR(64)\" "
  },
  {
    "path": "models/t_artifact_package.go",
    "chars": 716,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TArtifactPackage struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)"
  },
  {
    "path": "models/t_artifact_version.go",
    "chars": 1670,
    "preview": "package models\n\nimport (\n\thbtp \"github.com/mgr9525/HyperByte-Transfer-Protocol\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t"
  },
  {
    "path": "models/t_artifactory.go",
    "chars": 1038,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TArtifactory struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)\" js"
  },
  {
    "path": "models/t_org.go",
    "chars": 1558,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TOrg struct {\n\tId          string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`"
  },
  {
    "path": "models/t_pipeline.go",
    "chars": 1529,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TPipeline struct {\n\tId           string    `xorm:\"not null pk VARCHAR(64)\" json"
  },
  {
    "path": "models/t_pipeline_var.go",
    "chars": 479,
    "preview": "package models\n\ntype TPipelineVar struct {\n\tAid        int64  `xorm:\"not null pk autoincr BIGINT(20)\" json:\"aid\"`\n\tPipel"
  },
  {
    "path": "models/t_pipeline_version.go",
    "chars": 1466,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TPipelineVersion struct {\n\tId                  string    `xorm:\"not null pk VAR"
  },
  {
    "path": "models/t_trigger.go",
    "chars": 840,
    "preview": "package models\n\nimport \"time\"\n\ntype TTrigger struct {\n\tId         string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`\n\t"
  },
  {
    "path": "models/t_trigger_run.go",
    "chars": 1241,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TTriggerRun struct {\n\tId            string    `xorm:\"not null pk VARCHAR(64)\" j"
  },
  {
    "path": "models/t_user.go",
    "chars": 1397,
    "preview": "package models\n\nimport (\n\t\"time\"\n)\n\ntype TUser struct {\n\tId        string    `xorm:\"not null pk VARCHAR(64)\" json:\"id\"`\n"
  },
  {
    "path": "models/t_yml_plugin.go",
    "chars": 221,
    "preview": "package models\n\ntype TYmlPlugin struct {\n\tAid        int64  `xorm:\"not null pk autoincr BIGINT(20)\" json:\"aid\"`\n\tName   "
  },
  {
    "path": "models/t_yml_template.go",
    "chars": 223,
    "preview": "package models\n\ntype TYmlTemplate struct {\n\tAid        int64  `xorm:\"not null pk autoincr BIGINT(20)\" json:\"aid\"`\n\tName "
  },
  {
    "path": "route/api.go",
    "chars": 1801,
    "preview": "package route\n\nimport (\n\t\"errors\"\n\t\"io/ioutil\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.c"
  },
  {
    "path": "route/artifact.go",
    "chars": 10412,
    "preview": "package route\n\nimport (\n\t\"fmt\"\n\t\"github.com/gokins/core/common\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\""
  },
  {
    "path": "route/artpub.go",
    "chars": 2621,
    "preview": "package route\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com"
  },
  {
    "path": "route/hook.go",
    "chars": 1514,
    "preview": "package route\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/engine\"\n"
  },
  {
    "path": "route/install.go",
    "chars": 12922,
    "preview": "package route\n\nimport (\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/gokins/gok"
  },
  {
    "path": "route/login.go",
    "chars": 2036,
    "preview": "package route\n\nimport (\n\t\"github.com/gokins/gokins/models\"\n\thbtp \"github.com/mgr9525/HyperByte-Transfer-Protocol\"\n\t\"stri"
  },
  {
    "path": "route/org.go",
    "chars": 10115,
    "preview": "package route\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/core/utils\"\n\t\"github.com/gokins/"
  },
  {
    "path": "route/pipeline.go",
    "chars": 18716,
    "preview": "package route\n\nimport (\n\t\"fmt\"\n\t\"github.com/gokins/gokins/engine\"\n\t\"github.com/gokins/gokins/models\"\n\t\"net/http\"\n\t\"time\""
  },
  {
    "path": "route/pipelineversion.go",
    "chars": 1201,
    "preview": "package route\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/model\"\n\t"
  },
  {
    "path": "route/runtime.go",
    "chars": 4976,
    "preview": "package route\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/core/common\"\n\t\"github."
  },
  {
    "path": "route/trigger.go",
    "chars": 4939,
    "preview": "package route\n\nimport (\n\t\"encoding/json\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/core/utils\"\n\t\"github.com/gokins"
  },
  {
    "path": "route/user.go",
    "chars": 6488,
    "preview": "package route\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/core/utils\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"g"
  },
  {
    "path": "route/yml.go",
    "chars": 699,
    "preview": "package route\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/models\"\n"
  },
  {
    "path": "ruis_test.go",
    "chars": 84,
    "preview": "package main\n\nimport (\n\t\"testing\"\n)\n\nfunc Test1(t *testing.T) {\n\tprintln(\"hello\")\n}\n"
  },
  {
    "path": "server/db.go",
    "chars": 958,
    "preview": "package server\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/boltdb/bolt\"\n\t\"github.com/gokins/core\"\n\t\"github.com/gokins"
  },
  {
    "path": "server/hbtp.go",
    "chars": 561,
    "preview": "package server\n\nimport (\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/engine\"\n\thbtp \"github.com/mgr9525/H"
  },
  {
    "path": "server/server.go",
    "chars": 1786,
    "preview": "package server\n\nimport (\n\t\"errors\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t_ \"github.com/go-sql-driver/mysql\"\n\t\"gi"
  },
  {
    "path": "server/web.go",
    "chars": 3851,
    "preview": "package server\n\nimport (\n\t\"archive/zip\"\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"net/http\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\""
  },
  {
    "path": "service/db.go",
    "chars": 365,
    "preview": "package service\n\nimport \"github.com/gokins/gokins/comm\"\n\nfunc GetIdOrAid(id interface{}, e interface{}) bool {\n\tif id =="
  },
  {
    "path": "service/hook.go",
    "chars": 4020,
    "preview": "package service\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/core/runtime\"\n\t\"github.com/gokins/core/u"
  },
  {
    "path": "service/mid.go",
    "chars": 491,
    "preview": "package service\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/model\"\n)\n\nconst LgUserKey = \"lguser\"\n\nf"
  },
  {
    "path": "service/notice.go",
    "chars": 1648,
    "preview": "package service\n\n/*func InsertNoticesByRepo(repo *model.TRepo, n *notice.Notice) (rterr error) {\n\treturn InsertNoticesBy"
  },
  {
    "path": "service/param.go",
    "chars": 1661,
    "preview": "package service\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins/model\"\n"
  },
  {
    "path": "service/perms.go",
    "chars": 615,
    "preview": "package service\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/model\"\n)\n\nfunc CheckPermission(uid stri"
  },
  {
    "path": "service/pipeline.go",
    "chars": 8480,
    "preview": "package service\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/gokins/core/common\"\n\t\"github.com/g"
  },
  {
    "path": "service/trigger.go",
    "chars": 354,
    "preview": "package service\n\nimport (\n\t\"errors\"\n\t\"github.com/gokins/gokins/model\"\n)\n\nfunc TriggerPerm(tt *model.TTrigger) error {\n\tl"
  },
  {
    "path": "service/user.go",
    "chars": 6777,
    "preview": "package service\n\nimport (\n\t\"fmt\"\n\t\"github.com/gin-gonic/gin\"\n\t\"github.com/gokins/gokins/comm\"\n\t\"github.com/gokins/gokins"
  },
  {
    "path": "thirdapi/client.go",
    "chars": 158,
    "preview": "package thirdapi\n\nimport (\n\t\"net/http\"\n\t\"net/url\"\n)\n\ntype Client struct {\n\tHttpClient   *http.Client\n\tBaseURL      *url."
  },
  {
    "path": "thirdapi/giteaapi/gitea.go",
    "chars": 562,
    "preview": "package giteaapi\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n)\n\nfunc New(uri string) ("
  },
  {
    "path": "thirdapi/giteaapi/giteaapi.go",
    "chars": 766,
    "preview": "package giteaapi\n\n//api 路径\nconst (\n\tBaseApiGitea = \"https://api.gitea.com\"\n\t/*\n\t   https://gitea.com/api/v5/repos/{owner"
  },
  {
    "path": "thirdapi/giteaapi/giteaapi_test.go",
    "chars": 910,
    "preview": "package giteaapi\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"testing\"\n)\n\nfunc TestGiteeContents(t *testing.T) {\n\tu := fm"
  },
  {
    "path": "thirdapi/giteaapi/repositoryservice.go",
    "chars": 11042,
    "preview": "package giteaapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/bean/thirdbean\"\n\t\"githu"
  },
  {
    "path": "thirdapi/giteeapi/gitee.go",
    "chars": 647,
    "preview": "package giteeapi\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc New(ur"
  },
  {
    "path": "thirdapi/giteeapi/giteeapi.go",
    "chars": 1030,
    "preview": "package giteeapi\n\n//api 路径\nconst (\n\tBaseApiGitee = \"https://gitee.com/api/v5\"\n\n\t/*\n\t   https://gitee.com/api/v5/repos/{o"
  },
  {
    "path": "thirdapi/giteeapi/giteeapi_test.go",
    "chars": 756,
    "preview": "package giteeapi\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\n//\n//func TestGiteeContents(t *testing.T) {\n//\n//\tu := fmt.Sprintf(ApiGi"
  },
  {
    "path": "thirdapi/giteeapi/repositoryservice.go",
    "chars": 9318,
    "preview": "package giteeapi\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/bean/thirdbean\"\n\t\"github.com/gok"
  },
  {
    "path": "thirdapi/giteepremiumapi/giteepremium.go",
    "chars": 661,
    "preview": "package giteepremiumapi\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n)\n\nfunc"
  },
  {
    "path": "thirdapi/giteepremiumapi/giteepremiumapi.go",
    "chars": 1086,
    "preview": "package giteepremiumapi\n\n//api 路径\nconst (\n\tBaseApiGiteePremium = \"https://gitee.com/api/v5\"\n\n\t/*\n\t   https://gitee.com/a"
  },
  {
    "path": "thirdapi/giteepremiumapi/giteepremiumapi_test.go",
    "chars": 527,
    "preview": "package giteepremiumapi\n\n//\n//func TestGiteePremiumContents(t *testing.T) {\n//\n//\tu := fmt.Sprintf(ApiGiteePremiumGetRep"
  },
  {
    "path": "thirdapi/giteepremiumapi/repositoryservice.go",
    "chars": 9661,
    "preview": "package giteepremiumapi\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/bean/thirdbean\"\n\t\"github."
  },
  {
    "path": "thirdapi/githubapi/github.go",
    "chars": 564,
    "preview": "package githubapi\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n)\n\nfunc New(uri string) "
  },
  {
    "path": "thirdapi/githubapi/githubapi.go",
    "chars": 674,
    "preview": "package githubapi\n\n//api 路径\nconst (\n\tBaseApiGithub = \"https://api.github.com\"\n\t/*\n\t   repos/{owner}/{repo}/contents/{pat"
  },
  {
    "path": "thirdapi/githubapi/githubapi_test.go",
    "chars": 913,
    "preview": "package githubapi\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"testing\"\n)\n\nfunc TestGiteeContents(t *testing.T) {\n\tu := f"
  },
  {
    "path": "thirdapi/githubapi/repositoryservice.go",
    "chars": 10151,
    "preview": "package githubapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/bean/thirdbean\"\n\t\"gith"
  },
  {
    "path": "thirdapi/gitlabapi/gitlab.go",
    "chars": 564,
    "preview": "package gitlabapi\n\nimport (\n\t\"github.com/gokins/gokins/thirdapi\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n)\n\nfunc New(uri string) "
  },
  {
    "path": "thirdapi/gitlabapi/gitlabapi.go",
    "chars": 664,
    "preview": "package gitlabapi\n\n//api 路径\nconst (\n\tBaseApiGitlab = \"https://gitlab.com/api/v4\"\n\t/*\n\t  repos/{owner}/{repo}/contents/{p"
  },
  {
    "path": "thirdapi/gitlabapi/gitlabapi_test.go",
    "chars": 913,
    "preview": "package gitlabapi\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"testing\"\n)\n\nfunc TestGiteeContents(t *testing.T) {\n\tu := f"
  },
  {
    "path": "thirdapi/gitlabapi/repositoryservice.go",
    "chars": 9230,
    "preview": "package gitlabapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/gokins/gokins/bean/thirdbean\"\n\t\"gith"
  },
  {
    "path": "thirdapi/repo.go",
    "chars": 600,
    "preview": "package thirdapi\n\nimport \"time\"\n\ntype Repository struct {\n\tId        string `json:\"id\"`\n\tOwner     string `json:\"owner\"`"
  },
  {
    "path": "thirdapi/repositoryservice.go",
    "chars": 504,
    "preview": "package thirdapi\n\ntype (\n\tRepositoryService interface {\n\t\tGetRepos(accessToken, username, types, sort, direction string,"
  },
  {
    "path": "util/gin.go",
    "chars": 1936,
    "preview": "package util\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/gin-gonic/gin\"\n)\n\ntype GinController inter"
  },
  {
    "path": "util/git.go",
    "chars": 1079,
    "preview": "package util\n\nimport (\n\t\"context\"\n\t\"github.com/go-git/go-git/v5\"\n\t\"github.com/go-git/go-git/v5/plumbing\"\n\t\"github.com/go"
  },
  {
    "path": "util/httpex/const.go",
    "chars": 1280,
    "preview": "package httpex\n\nimport (\n\t\"github.com/gin-gonic/gin\"\n\t\"strings\"\n)\n\nvar HTMLMsgUrl = `\n<!DOCTYPE html>\n<html lang=\"en\">\n\n"
  },
  {
    "path": "util/httpex/post.go",
    "chars": 3081,
    "preview": "package httpex\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"tim"
  },
  {
    "path": "util/token.go",
    "chars": 2124,
    "preview": "package util\n\nimport (\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/dgrijalva/jwt-go\"\n\t\"github.com/gin-gonic/"
  }
]

About this extraction

This page contains the full source code of the mgr9525/gokins GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 154 files (3.8 MB), approximately 989.7k tokens, and a symbol index with 694 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!