This is an automated email from the ASF dual-hosted git repository.
zhangliang2022 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new 59e48852 GithubPlugin: Pass config in taskCtx instead of db models
(#2192)
59e48852 is described below
commit 59e48852f0d62042d9e06e87cf396ab325e0c8da
Author: likyh <[email protected]>
AuthorDate: Thu Jun 16 14:37:22 2022 +0800
GithubPlugin: Pass config in taskCtx instead of db models (#2192)
* Pass config in taskCtx instead of db models
* prepare migrate script init_schema for the coming PR which append
connectionId
* use inject instead of use config.GetConfig in migration script
Co-authored-by: linyh <[email protected]>
---
.env.example | 2 -
plugins/github/README.md | 13 +-
plugins/github/github.go | 167 +++++----------------
plugins/github/{github.go => impl/impl.go} | 67 +++++----
plugins/github/models/connection.go | 1 +
.../migrationscripts/archived/commit_stat.go | 7 +-
.../models/migrationscripts/archived/issue.go | 2 +
.../migrationscripts/archived/pull_request.go | 2 +-
.../models/migrationscripts/archived/repo.go | 6 +-
.../github/models/migrationscripts/init_schema.go | 54 -------
.../migrationscripts/init_schema_20220610.go | 139 +++++++++++++++++
.../migrationscripts/updateSchemas20220509.go | 86 -----------
.../migrationscripts/updateSchemas20220524.go | 54 -------
.../migrationscripts/updateSchemas20220608.go | 81 ----------
plugins/github/tasks/comment_collector.go | 3 +-
plugins/github/tasks/pr_issue_enricher.go | 2 +-
plugins/github/tasks/task_data.go | 11 +-
17 files changed, 242 insertions(+), 455 deletions(-)
diff --git a/.env.example b/.env.example
index 0ceca13e..80dc9e36 100644
--- a/.env.example
+++ b/.env.example
@@ -80,8 +80,6 @@ FEISHU_ENDPOINT=https://open.feishu.cn/open-apis/vc/v1/
########################
# GitHub configuration has been migrated into DB #
-# FIXME It's very special because no defined in config, so it will be deleted
in next PR
-GITHUB_PR_BODY_CLOSE_PATTERN='(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\s]*.*(((and
)?(#|https:\/\/github.com\/%s\/%s\/issues\/)\d+[ ]*)+)'
# FIXME this config use in refdiff
GITHUB_PR_TITLE_PATTERN='.*\(#(\d+)\)'
diff --git a/plugins/github/README.md b/plugins/github/README.md
index 0e8660f7..847233ce 100644
--- a/plugins/github/README.md
+++ b/plugins/github/README.md
@@ -65,8 +65,16 @@ Enter a valid proxy server address on your Network, e.g.
`http://your-proxy-serv
Click **Save Settings** to update additional settings.
### Regular Expression Configuration
-Define regex pattern in .env
-- GITHUB_PR_BODY_CLOSE_PATTERN: Define key word to associate issue in pr body,
please check the example in .env.example
+Define regex pattern in request options
+- prType: Define key word to associate issue in pr body
+- prComponent: Define key word to associate issue in pr body
+- prBodyClosePattern: Define key word to associate issue in pr body
+- issueSeverity: Define key word to associate issue in pr body
+- issuePriority: Define key word to associate issue in pr body
+- issueComponent: Define key word to associate issue in pr body
+- issueTypeBug: Define key word to associate issue in pr body
+- issueTypeIncident: Define key word to associate issue in pr body
+- issueTypeRequirement: Define key word to associate issue in pr body
## Sample Request
In order to collect data, you have to compose a JSON looks like following one,
and send it by selecting `Advanced Mode` on `Create Pipeline Run` page:
@@ -79,6 +87,7 @@ In order to collect data, you have to compose a JSON looks
like following one, a
"options": {
"repo": "lake",
"owner": "merico-dev"
+ // add more config such as prType if necessary.
}
}
]
diff --git a/plugins/github/github.go b/plugins/github/github.go
index 93ddf23a..d189912f 100644
--- a/plugins/github/github.go
+++ b/plugins/github/github.go
@@ -18,148 +18,49 @@ limitations under the License.
package main // must be main for plugin entry point
import (
- "fmt"
- "github.com/apache/incubator-devlake/migration"
- "github.com/apache/incubator-devlake/plugins/core"
- "github.com/apache/incubator-devlake/plugins/github/api"
- "github.com/apache/incubator-devlake/plugins/github/models"
-
"github.com/apache/incubator-devlake/plugins/github/models/migrationscripts"
- "github.com/apache/incubator-devlake/plugins/github/tasks"
+ "github.com/apache/incubator-devlake/plugins/github/impl"
"github.com/apache/incubator-devlake/runner"
- "github.com/mitchellh/mapstructure"
"github.com/spf13/cobra"
- "github.com/spf13/viper"
- "gorm.io/gorm"
)
-var _ core.PluginMeta = (*Github)(nil)
-var _ core.PluginInit = (*Github)(nil)
-var _ core.PluginTask = (*Github)(nil)
-var _ core.PluginApi = (*Github)(nil)
-var _ core.Migratable = (*Github)(nil)
-
-type Github struct{}
-
-func (plugin Github) Init(config *viper.Viper, logger core.Logger, db
*gorm.DB) error {
- api.Init(config, logger, db)
- return nil
-}
-
-func (plugin Github) Description() string {
- return "To collect and enrich data from GitHub"
-}
-
-func (plugin Github) SubTaskMetas() []core.SubTaskMeta {
- return []core.SubTaskMeta{
- tasks.CollectApiRepoMeta,
- tasks.ExtractApiRepoMeta,
- tasks.CollectApiIssuesMeta,
- tasks.ExtractApiIssuesMeta,
- tasks.CollectApiPullRequestsMeta,
- tasks.ExtractApiPullRequestsMeta,
- tasks.CollectApiCommentsMeta,
- tasks.ExtractApiCommentsMeta,
- tasks.CollectApiEventsMeta,
- tasks.ExtractApiEventsMeta,
- tasks.CollectApiPullRequestCommitsMeta,
- tasks.ExtractApiPullRequestCommitsMeta,
- tasks.CollectApiPullRequestReviewsMeta,
- tasks.ExtractApiPullRequestReviewsMeta,
- tasks.CollectApiCommitsMeta,
- tasks.ExtractApiCommitsMeta,
- tasks.CollectApiCommitStatsMeta,
- tasks.ExtractApiCommitStatsMeta,
- tasks.EnrichPullRequestIssuesMeta,
- tasks.ConvertRepoMeta,
- tasks.ConvertIssuesMeta,
- tasks.ConvertCommitsMeta,
- tasks.ConvertIssueLabelsMeta,
- tasks.ConvertPullRequestCommitsMeta,
- tasks.ConvertPullRequestsMeta,
- tasks.ConvertPullRequestLabelsMeta,
- tasks.ConvertPullRequestIssuesMeta,
- tasks.ConvertUsersMeta,
- tasks.ConvertIssueCommentsMeta,
- tasks.ConvertPullRequestCommentsMeta,
- }
-}
-
-func (plugin Github) PrepareTaskData(taskCtx core.TaskContext, options
map[string]interface{}) (interface{}, error) {
- var op tasks.GithubOptions
- err := mapstructure.Decode(options, &op)
- if err != nil {
- return nil, err
- }
- if op.Owner == "" {
- return nil, fmt.Errorf("owner is required for GitHub execution")
- }
- if op.Repo == "" {
- return nil, fmt.Errorf("repo is required for GitHub execution")
- }
-
- // find the only github now
- // FIXME to query by connection id when multi connection support
- connection := &models.GithubConnection{}
- err = taskCtx.GetDb().First(connection, "name = ?", `GitHub`).Error
- if err != nil {
- return err, nil
- }
-
- apiClient, err := tasks.CreateApiClient(taskCtx, connection)
- if err != nil {
- return nil, err
- }
-
- return &tasks.GithubTaskData{
- Options: &op,
- ApiClient: apiClient,
- }, nil
-}
-
-func (plugin Github) RootPkgPath() string {
- return "github.com/apache/incubator-devlake/plugins/github"
-}
-
-func (plugin Github) MigrationScripts() []migration.Script {
- return []migration.Script{
- new(migrationscripts.InitSchemas),
new(migrationscripts.UpdateSchemas20220509),
- new(migrationscripts.UpdateSchemas20220524),
new(migrationscripts.UpdateSchemas20220608),
- }
-}
-
-func (plugin Github) ApiResources()
map[string]map[string]core.ApiResourceHandler {
- return map[string]map[string]core.ApiResourceHandler{
- "test": {
- "POST": api.TestConnection,
- },
- "connections": {
- "POST": api.PostConnections,
- "GET": api.ListConnections,
- },
- "connections/:connectionId": {
- "GET": api.GetConnection,
- "PATCH": api.PatchConnection,
- "DELETE": api.DeleteConnection,
- },
- }
-}
-
// Export a variable named PluginEntry for Framework to search and load
-var PluginEntry Github //nolint
+var PluginEntry impl.Github //nolint
// standalone mode for debugging
func main() {
- githubCmd := &cobra.Command{Use: "github"}
- owner := githubCmd.Flags().StringP("owner", "o", "", "github owner")
- repo := githubCmd.Flags().StringP("repo", "r", "", "github repo")
- _ = githubCmd.MarkFlagRequired("owner")
- _ = githubCmd.MarkFlagRequired("repo")
-
- githubCmd.Run = func(cmd *cobra.Command, args []string) {
+ cmd := &cobra.Command{Use: "github"}
+ connectionId := cmd.Flags().Uint64P("connectionId", "c", 0, "github
connection id")
+ owner := cmd.Flags().StringP("owner", "o", "", "github owner")
+ repo := cmd.Flags().StringP("repo", "r", "", "github repo")
+ _ = cmd.MarkFlagRequired("connectionId")
+ _ = cmd.MarkFlagRequired("owner")
+ _ = cmd.MarkFlagRequired("repo")
+
+ prType := cmd.Flags().String("prType", "type/(.*)$", "pr type")
+ prComponent := cmd.Flags().String("prComponent", "component/(.*)$", "pr
component")
+ prBodyClosePattern := cmd.Flags().String("prBodyClosePattern",
"(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and
)?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)", "pr body close
pattern")
+ issueSeverity := cmd.Flags().String("issueSeverity", "severity/(.*)$",
"issue severity")
+ issuePriority := cmd.Flags().String("issuePriority",
"^(highest|high|medium|low)$", "issue priority")
+ issueComponent := cmd.Flags().String("issueComponent",
"component/(.*)$", "issue component")
+ issueTypeBug := cmd.Flags().String("issueTypeBug",
"^(bug|failure|error)$", "issue type bug")
+ issueTypeIncident := cmd.Flags().String("issueTypeIncident", "", "issue
type incident")
+ issueTypeRequirement := cmd.Flags().String("issueTypeRequirement",
"^(feat|feature|proposal|requirement)$", "issue type requirement")
+
+ cmd.Run = func(cmd *cobra.Command, args []string) {
runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
- "owner": *owner,
- "repo": *repo,
+ "connectionId": *connectionId,
+ "owner": *owner,
+ "repo": *repo,
+ "prType": *prType,
+ "prComponent": *prComponent,
+ "prBodyClosePattern": *prBodyClosePattern,
+ "issueSeverity": *issueSeverity,
+ "issuePriority": *issuePriority,
+ "issueComponent": *issueComponent,
+ "issueTypeBug": *issueTypeBug,
+ "issueTypeIncident": *issueTypeIncident,
+ "issueTypeRequirement": *issueTypeRequirement,
})
}
- runner.RunCmd(githubCmd)
+ runner.RunCmd(cmd)
}
diff --git a/plugins/github/github.go b/plugins/github/impl/impl.go
similarity index 77%
copy from plugins/github/github.go
copy to plugins/github/impl/impl.go
index 93ddf23a..b4f1ff21 100644
--- a/plugins/github/github.go
+++ b/plugins/github/impl/impl.go
@@ -15,7 +15,7 @@ See the License for the specific language governing
permissions and
limitations under the License.
*/
-package main // must be main for plugin entry point
+package impl
import (
"fmt"
@@ -25,9 +25,8 @@ import (
"github.com/apache/incubator-devlake/plugins/github/models"
"github.com/apache/incubator-devlake/plugins/github/models/migrationscripts"
"github.com/apache/incubator-devlake/plugins/github/tasks"
- "github.com/apache/incubator-devlake/runner"
+ "github.com/apache/incubator-devlake/plugins/helper"
"github.com/mitchellh/mapstructure"
- "github.com/spf13/cobra"
"github.com/spf13/viper"
"gorm.io/gorm"
)
@@ -96,11 +95,44 @@ func (plugin Github) PrepareTaskData(taskCtx
core.TaskContext, options map[strin
if op.Repo == "" {
return nil, fmt.Errorf("repo is required for GitHub execution")
}
+ if op.PrType == "" {
+ op.PrType = "type/(.*)$"
+ }
+ if op.PrComponent == "" {
+ op.PrComponent = "component/(.*)$"
+ }
+ if op.PrBodyClosePattern == "" {
+ op.PrBodyClosePattern =
"(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and
)?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)"
+ }
+ if op.IssueSeverity == "" {
+ op.IssueSeverity = "severity/(.*)$"
+ }
+ if op.IssuePriority == "" {
+ op.IssuePriority = "^(highest|high|medium|low)$"
+ }
+ if op.IssueComponent == "" {
+ op.IssueComponent = "component/(.*)$"
+ }
+ if op.IssueTypeBug == "" {
+ op.IssueTypeBug = "^(bug|failure|error)$"
+ }
+ if op.IssueTypeIncident == "" {
+ op.IssueTypeIncident = ""
+ }
+ if op.IssueTypeRequirement == "" {
+ op.IssueTypeRequirement =
"^(feat|feature|proposal|requirement)$"
+ }
- // find the only github now
- // FIXME to query by connection id when multi connection support
+ // find the needed GitHub now
+ if op.ConnectionId == 0 {
+ return nil, fmt.Errorf("connectionId is invalid")
+ }
+ connectionHelper := helper.NewConnectionHelper(
+ taskCtx,
+ nil,
+ )
connection := &models.GithubConnection{}
- err = taskCtx.GetDb().First(connection, "name = ?", `GitHub`).Error
+ err = connectionHelper.FirstById(connection, op.ConnectionId)
if err != nil {
return err, nil
}
@@ -122,8 +154,7 @@ func (plugin Github) RootPkgPath() string {
func (plugin Github) MigrationScripts() []migration.Script {
return []migration.Script{
- new(migrationscripts.InitSchemas),
new(migrationscripts.UpdateSchemas20220509),
- new(migrationscripts.UpdateSchemas20220524),
new(migrationscripts.UpdateSchemas20220608),
+ new(migrationscripts.InitSchemas),
}
}
@@ -143,23 +174,3 @@ func (plugin Github) ApiResources()
map[string]map[string]core.ApiResourceHandle
},
}
}
-
-// Export a variable named PluginEntry for Framework to search and load
-var PluginEntry Github //nolint
-
-// standalone mode for debugging
-func main() {
- githubCmd := &cobra.Command{Use: "github"}
- owner := githubCmd.Flags().StringP("owner", "o", "", "github owner")
- repo := githubCmd.Flags().StringP("repo", "r", "", "github repo")
- _ = githubCmd.MarkFlagRequired("owner")
- _ = githubCmd.MarkFlagRequired("repo")
-
- githubCmd.Run = func(cmd *cobra.Command, args []string) {
- runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
- "owner": *owner,
- "repo": *repo,
- })
- }
- runner.RunCmd(githubCmd)
-}
diff --git a/plugins/github/models/connection.go
b/plugins/github/models/connection.go
index 34303c91..afc7577f 100644
--- a/plugins/github/models/connection.go
+++ b/plugins/github/models/connection.go
@@ -33,6 +33,7 @@ type GithubConnection struct {
type Config struct {
PrType string `mapstructure:"prType" json:"prType"`
PrComponent string `mapstructure:"prComponent"
json:"prComponent"`
+ PrBodyClosePattern string `mapstructure:"prBodyClosePattern"
json:"prBodyClosePattern"`
IssueSeverity string `mapstructure:"issueSeverity"
json:"issueSeverity"`
IssuePriority string `mapstructure:"issuePriority"
json:"issuePriority"`
IssueComponent string `mapstructure:"issueComponent"
json:"issueComponent"`
diff --git a/plugins/github/models/migrationscripts/archived/commit_stat.go
b/plugins/github/models/migrationscripts/archived/commit_stat.go
index 828d4dbc..b9280703 100644
--- a/plugins/github/models/migrationscripts/archived/commit_stat.go
+++ b/plugins/github/models/migrationscripts/archived/commit_stat.go
@@ -24,9 +24,10 @@ import (
)
type GithubCommitStat struct {
- Sha string `gorm:"primaryKey;type:varchar(40)"`
- Additions int `gorm:"comment:Added lines of code"`
- Deletions int `gorm:"comment:Deleted lines of code"`
+ Sha string `gorm:"primaryKey;type:varchar(40)"`
+ Additions int `gorm:"comment:Added lines of code"`
+ Deletions int `gorm:"comment:Deleted lines of code"`
+
CommittedDate time.Time `gorm:"index"`
archived.NoPKModel
}
diff --git a/plugins/github/models/migrationscripts/archived/issue.go
b/plugins/github/models/migrationscripts/archived/issue.go
index 17a49fcb..ff465b8b 100644
--- a/plugins/github/models/migrationscripts/archived/issue.go
+++ b/plugins/github/models/migrationscripts/archived/issue.go
@@ -33,6 +33,8 @@ type GithubIssue struct {
Priority string `gorm:"type:varchar(255)"`
Type string `gorm:"type:varchar(100)"`
Status string `gorm:"type:varchar(255)"`
+ AuthorId int
+ AuthorName string `gorm:"type:varchar(255)"`
AssigneeId int
AssigneeName string `gorm:"type:varchar(255)"`
LeadTimeMinutes uint
diff --git a/plugins/github/models/migrationscripts/archived/pull_request.go
b/plugins/github/models/migrationscripts/archived/pull_request.go
index 43895e7d..ef4ff04b 100644
--- a/plugins/github/models/migrationscripts/archived/pull_request.go
+++ b/plugins/github/models/migrationscripts/archived/pull_request.go
@@ -50,7 +50,7 @@ type GithubPullRequest struct {
HeadCommitSha string `gorm:"type:varchar(255)"`
Url string `gorm:"type:varchar(255)"`
AuthorName string `gorm:"type:varchar(100)"`
- AuthorId string `gorm:"type:varchar(100)"`
+ AuthorId int
archived.NoPKModel
}
diff --git a/plugins/github/models/migrationscripts/archived/repo.go
b/plugins/github/models/migrationscripts/archived/repo.go
index 2a514a2a..7ecee73b 100644
--- a/plugins/github/models/migrationscripts/archived/repo.go
+++ b/plugins/github/models/migrationscripts/archived/repo.go
@@ -24,9 +24,9 @@ import (
)
type GithubRepo struct {
- GithubId int `gorm:"primaryKey"`
- Name string
- HTMLUrl string
+ GithubId int `gorm:"primaryKey"`
+ Name string `gorm:"type:varchar(255)"`
+ HTMLUrl string `gorm:"type:varchar(255)"`
Description string
OwnerId int `json:"ownerId"`
OwnerLogin string `json:"ownerLogin" gorm:"type:varchar(255)"`
diff --git a/plugins/github/models/migrationscripts/init_schema.go
b/plugins/github/models/migrationscripts/init_schema.go
deleted file mode 100644
index b924cb23..00000000
--- a/plugins/github/models/migrationscripts/init_schema.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package migrationscripts
-
-import (
- "context"
-
-
"github.com/apache/incubator-devlake/plugins/github/models/migrationscripts/archived"
- "gorm.io/gorm"
-)
-
-type InitSchemas struct{}
-
-func (*InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
- return db.Migrator().AutoMigrate(
- &archived.GithubRepo{},
- &archived.GithubCommit{},
- &archived.GithubRepoCommit{},
- &archived.GithubPullRequest{},
- &archived.GithubReviewer{},
- &archived.GithubPullRequestComment{},
- &archived.GithubPullRequestCommit{},
- &archived.GithubPullRequestLabel{},
- &archived.GithubIssue{},
- &archived.GithubIssueComment{},
- &archived.GithubIssueEvent{},
- &archived.GithubIssueLabel{},
- &archived.GithubUser{},
- &archived.GithubPullRequestIssue{},
- &archived.GithubCommitStat{})
-}
-
-func (*InitSchemas) Version() uint64 {
- return 20220407201135
-}
-
-func (*InitSchemas) Name() string {
- return "Github init schemas"
-}
diff --git a/plugins/github/models/migrationscripts/init_schema_20220610.go
b/plugins/github/models/migrationscripts/init_schema_20220610.go
new file mode 100644
index 00000000..d684f767
--- /dev/null
+++ b/plugins/github/models/migrationscripts/init_schema_20220610.go
@@ -0,0 +1,139 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+ "context"
+ "github.com/apache/incubator-devlake/plugins/core"
+ "github.com/apache/incubator-devlake/plugins/helper"
+
+ commonArchived
"github.com/apache/incubator-devlake/models/migrationscripts/archived"
+
"github.com/apache/incubator-devlake/plugins/github/models/migrationscripts/archived"
+ "gorm.io/gorm"
+)
+
+type GithubConnection20220609 struct {
+ commonArchived.Model
+ Name string `gorm:"type:varchar(100);uniqueIndex" json:"name"
validate:"required"`
+ Endpoint string `mapstructure:"endpoint" env:"GITHUB_ENDPOINT"
validate:"required"`
+ Proxy string `mapstructure:"proxy" env:"GITHUB_PROXY"`
+ RateLimit int `comment:"api request rate limit per hour"`
+ Token string `mapstructure:"token" env:"GITHUB_AUTH"
validate:"required" encrypt:"yes"`
+}
+
+func (GithubConnection20220609) TableName() string {
+ return "_tool_github_connections"
+}
+
+type InitSchemas struct {
+ config core.ConfigGetter
+}
+
+func (u *InitSchemas) SetConfigGetter(config core.ConfigGetter) {
+ u.config = config
+}
+
+func (u *InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
+ if db.Migrator().HasTable(GithubConnection20220609{}) {
+ err := db.Migrator().DropTable(GithubConnection20220609{})
+ if err != nil {
+ return err
+ }
+ }
+ err := db.Migrator().DropTable(
+ &archived.GithubRepo{},
+ &archived.GithubCommit{},
+ &archived.GithubRepoCommit{},
+ &archived.GithubPullRequest{},
+ &archived.GithubReviewer{},
+ &archived.GithubPullRequestComment{},
+ &archived.GithubPullRequestCommit{},
+ &archived.GithubPullRequestLabel{},
+ &archived.GithubIssue{},
+ &archived.GithubIssueComment{},
+ &archived.GithubIssueEvent{},
+ &archived.GithubIssueLabel{},
+ &archived.GithubUser{},
+ &archived.GithubPullRequestIssue{},
+ &archived.GithubCommitStat{},
+ "_raw_github_api_issues",
+ "_raw_github_api_comments",
+ "_raw_github_api_commits",
+ "_raw_github_api_commit_stats",
+ "_raw_github_api_events",
+ "_raw_github_api_issues",
+ "_raw_github_api_pull_requests",
+ "_raw_github_api_pull_request_commits",
+ "_raw_github_api_pull_request_reviews",
+ "_raw_github_api_repositories",
+ )
+
+ // create connection
+ if err != nil {
+ return err
+ }
+ err = db.Migrator().CreateTable(GithubConnection20220609{})
+ if err != nil {
+ return err
+ }
+ connection := &GithubConnection20220609{}
+ connection.Endpoint = u.config.GetString(`GITHUB_ENDPOINT`)
+ connection.Proxy = u.config.GetString(`GITHUB_PROXY`)
+ connection.Token = u.config.GetString(`GITHUB_AUTH`)
+ connection.Name = `GitHub`
+ if err != nil {
+ return err
+ }
+ err = helper.UpdateEncryptFields(connection, func(plaintext string)
(string, error) {
+ return core.Encrypt(u.config.GetString(core.EncodeKeyEnvStr),
plaintext)
+ })
+ if err != nil {
+ return err
+ }
+ // update from .env and save to db
+ if connection.Endpoint != `` && connection.Token != `` {
+ db.Create(connection)
+ }
+
+ // create other table with connection id
+ return db.Migrator().AutoMigrate(
+ &archived.GithubRepo{},
+ &archived.GithubCommit{},
+ &archived.GithubRepoCommit{},
+ &archived.GithubPullRequest{},
+ &archived.GithubReviewer{},
+ &archived.GithubPullRequestComment{},
+ &archived.GithubPullRequestCommit{},
+ &archived.GithubPullRequestLabel{},
+ &archived.GithubIssue{},
+ &archived.GithubIssueComment{},
+ &archived.GithubIssueEvent{},
+ &archived.GithubIssueLabel{},
+ &archived.GithubUser{},
+ &archived.GithubPullRequestIssue{},
+ &archived.GithubCommitStat{},
+ )
+}
+
+func (*InitSchemas) Version() uint64 {
+ return 20220610000001
+}
+
+func (*InitSchemas) Name() string {
+ return "Github init schemas 20220610"
+}
diff --git a/plugins/github/models/migrationscripts/updateSchemas20220509.go
b/plugins/github/models/migrationscripts/updateSchemas20220509.go
deleted file mode 100644
index c4f76032..00000000
--- a/plugins/github/models/migrationscripts/updateSchemas20220509.go
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package migrationscripts
-
-import (
- "context"
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- "time"
-
- "gorm.io/gorm"
-)
-
-type GithubPullRequest20220509 struct {
- GithubId int `gorm:"primaryKey"`
- RepoId int `gorm:"index"`
- Number int `gorm:"index"` // This number is used in GET
requests to the API associated to reviewers / comments / etc.
- State string `gorm:"type:varchar(255)"`
- Title string `gorm:"type:varchar(255)"`
- GithubCreatedAt time.Time
- GithubUpdatedAt time.Time `gorm:"index"`
- ClosedAt *time.Time
- // In order to get the following fields, we need to collect PRs
individually from GitHub
- Additions int
- Deletions int
- Comments int
- Commits int
- ReviewComments int
- Merged bool
- MergedAt *time.Time
- Body string
- Type string `gorm:"type:varchar(255)"`
- Component string `gorm:"type:varchar(255)"`
- MergeCommitSha string `gorm:"type:varchar(40)"`
- HeadRef string `gorm:"type:varchar(255)"`
- BaseRef string `gorm:"type:varchar(255)"`
- BaseCommitSha string `gorm:"type:varchar(255)"`
- HeadCommitSha string `gorm:"type:varchar(255)"`
- Url string `gorm:"type:varchar(255)"`
- AuthorName string `gorm:"type:varchar(100)"`
- AuthorId int
- archived.NoPKModel
-}
-
-func (GithubPullRequest20220509) TableName() string {
- return "_tool_github_pull_requests"
-}
-
-type UpdateSchemas20220509 struct{}
-
-func (*UpdateSchemas20220509) Up(ctx context.Context, db *gorm.DB) error {
- if db.Name() == "postgres" {
- err := db.Exec("ALTER TABLE _tool_github_pull_requests ALTER
COLUMN author_id TYPE bigint USING author_id::bigint").Error
- if err != nil {
- return err
- }
- return nil
- }
- err := db.Migrator().AlterColumn(GithubPullRequest20220509{},
"author_id")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220509) Version() uint64 {
- return 20220509212344
-}
-
-func (*UpdateSchemas20220509) Name() string {
- return "Alter pr column `author_id` to int"
-}
diff --git a/plugins/github/models/migrationscripts/updateSchemas20220524.go
b/plugins/github/models/migrationscripts/updateSchemas20220524.go
deleted file mode 100644
index 2196cab2..00000000
--- a/plugins/github/models/migrationscripts/updateSchemas20220524.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package migrationscripts
-
-import (
- "context"
- "gorm.io/gorm"
-)
-
-type GithubIssue20220524 struct {
- AuthorId int
- AuthorName string `gorm:"type:varchar(255)"`
-}
-
-func (GithubIssue20220524) TableName() string {
- return "_tool_github_issues"
-}
-
-type UpdateSchemas20220524 struct{}
-
-func (*UpdateSchemas20220524) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().AddColumn(GithubIssue20220524{}, "author_id")
- if err != nil {
- return err
- }
- err = db.Migrator().AddColumn(GithubIssue20220524{}, "author_name")
- if err != nil {
- return err
- }
- return nil
-}
-
-func (*UpdateSchemas20220524) Version() uint64 {
- return 20220524000002
-}
-
-func (*UpdateSchemas20220524) Name() string {
- return "Add column `author_id`/`author_name` in `GithubIssue`"
-}
diff --git a/plugins/github/models/migrationscripts/updateSchemas20220608.go
b/plugins/github/models/migrationscripts/updateSchemas20220608.go
deleted file mode 100644
index 679579b4..00000000
--- a/plugins/github/models/migrationscripts/updateSchemas20220608.go
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package migrationscripts
-
-import (
- "context"
- "github.com/apache/incubator-devlake/config"
- "github.com/apache/incubator-devlake/models/migrationscripts/archived"
- "github.com/apache/incubator-devlake/plugins/helper"
- "gorm.io/gorm"
-)
-
-type GithubConnection20220608 struct {
- archived.Model
- Name string `gorm:"type:varchar(100);uniqueIndex" json:"name"
validate:"required"`
- Endpoint string `mapstructure:"endpoint" env:"GITHUB_ENDPOINT"
validate:"required"`
- Proxy string `mapstructure:"proxy" env:"GITHUB_PROXY"`
- RateLimit int `comment:"api request rate limit per hour"`
- Token string `mapstructure:"token" validate:"required"
env:"GITHUB_AUTH"`
-
- Config20220608 `mapstructure:",squash"`
-}
-
-type Config20220608 struct {
- PrType string `mapstructure:"prType" env:"GITHUB_PR_TYPE"
json:"prType"`
- PrComponent string `mapstructure:"prComponent"
env:"GITHUB_PR_COMPONENT" json:"prComponent"`
- IssueSeverity string `mapstructure:"issueSeverity"
env:"GITHUB_ISSUE_SEVERITY" json:"issueSeverity"`
- IssuePriority string `mapstructure:"issuePriority"
env:"GITHUB_ISSUE_PRIORITY" json:"issuePriority"`
- IssueComponent string `mapstructure:"issueComponent"
env:"GITHUB_ISSUE_COMPONENT" json:"issueComponent"`
- IssueTypeBug string `mapstructure:"issueTypeBug"
env:"GITHUB_ISSUE_TYPE_BUG" json:"issueTypeBug"`
- IssueTypeIncident string `mapstructure:"issueTypeIncident"
env:"GITHUB_ISSUE_TYPE_INCIDENT" json:"issueTypeIncident"`
- IssueTypeRequirement string `mapstructure:"issueTypeRequirement"
env:"GITHUB_ISSUE_TYPE_REQUIREMENT" json:"issueTypeRequirement"`
-}
-
-func (GithubConnection20220608) TableName() string {
- return "_tool_github_connections"
-}
-
-type UpdateSchemas20220608 struct{}
-
-func (*UpdateSchemas20220608) Up(ctx context.Context, db *gorm.DB) error {
- err := db.Migrator().CreateTable(GithubConnection20220608{})
- if err != nil {
- return err
- }
- v := config.GetConfig()
- connection := &GithubConnection20220608{}
- err = helper.EncodeStruct(v, connection, "env")
- connection.Name = `GitHub`
- if err != nil {
- return err
- }
- // update from .env and save to db
- if connection.Endpoint != `` && connection.Token != `` {
- db.Create(connection)
- }
- return nil
-}
-
-func (*UpdateSchemas20220608) Version() uint64 {
- return 20220608000003
-}
-
-func (*UpdateSchemas20220608) Name() string {
- return "Add connection for github"
-}
diff --git a/plugins/github/tasks/comment_collector.go
b/plugins/github/tasks/comment_collector.go
index e7c22989..9263a312 100644
--- a/plugins/github/tasks/comment_collector.go
+++ b/plugins/github/tasks/comment_collector.go
@@ -31,7 +31,7 @@ import (
const RAW_COMMENTS_TABLE = "github_api_comments"
-// this struct should be moved to `gitub_api_common.go`
+// this struct should be moved to `github_api_common.go`
func CollectApiComments(taskCtx core.SubTaskContext) error {
db := taskCtx.GetDb()
@@ -72,7 +72,6 @@ func CollectApiComments(taskCtx core.SubTaskContext) error {
since = &latestUpdatedPrComt.GithubUpdatedAt
incremental = true
}
-
}
collector, err := helper.NewApiCollector(helper.ApiCollectorArgs{
diff --git a/plugins/github/tasks/pr_issue_enricher.go
b/plugins/github/tasks/pr_issue_enricher.go
index 6fa108dc..f16beacc 100644
--- a/plugins/github/tasks/pr_issue_enricher.go
+++ b/plugins/github/tasks/pr_issue_enricher.go
@@ -40,7 +40,7 @@ func EnrichPullRequestIssues(taskCtx core.SubTaskContext)
(err error) {
repoId := data.Repo.GithubId
var prBodyCloseRegex *regexp.Regexp
- prBodyClosePattern := taskCtx.GetConfig("GITHUB_PR_BODY_CLOSE_PATTERN")
+ prBodyClosePattern := data.Options.PrBodyClosePattern
//the pattern before the issue number, sometimes, the issue number is
#1098, sometimes it is https://xxx/#1098
prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s",
data.Options.Owner, 1)
prBodyClosePattern = strings.Replace(prBodyClosePattern, "%s",
data.Options.Repo, 1)
diff --git a/plugins/github/tasks/task_data.go
b/plugins/github/tasks/task_data.go
index f48c77bf..eb551dc1 100644
--- a/plugins/github/tasks/task_data.go
+++ b/plugins/github/tasks/task_data.go
@@ -25,11 +25,12 @@ import (
)
type GithubOptions struct {
- Tasks []string `json:"tasks,omitempty"`
- Since string
- Owner string
- Repo string
- models.Config
+ ConnectionId uint64 `json:"connectionId"`
+ Tasks []string `json:"tasks,omitempty"`
+ Since string
+ Owner string
+ Repo string
+ models.Config `mapstructure:",squash"`
}
type GithubTaskData struct {