Skip to content

Commit 97b717e

Browse files
committed
feat(github): extend PR size exclusion for specified file extension to github plugin
1 parent a34b8c4 commit 97b717e

File tree

5 files changed

+95
-21
lines changed

5 files changed

+95
-21
lines changed

backend/plugins/github/api/blueprint_v200.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,14 @@ func makeDataSourcePipelinePlanV200(
128128
stage = append(stage, &coreModels.PipelineTask{
129129
Plugin: "gitextractor",
130130
Options: map[string]interface{}{
131-
"url": cloneUrl.String(),
132-
"name": githubRepo.FullName,
133-
"fullName": githubRepo.FullName,
134-
"repoId": didgen.NewDomainIdGenerator(&models.GithubRepo{}).Generate(connection.ID, githubRepo.GithubId),
135-
"proxy": connection.Proxy,
136-
"connectionId": githubRepo.ConnectionId,
137-
"pluginName": "github",
131+
"url": cloneUrl.String(),
132+
"name": githubRepo.FullName,
133+
"fullName": githubRepo.FullName,
134+
"repoId": didgen.NewDomainIdGenerator(&models.GithubRepo{}).Generate(connection.ID, githubRepo.GithubId),
135+
"proxy": connection.Proxy,
136+
"connectionId": githubRepo.ConnectionId,
137+
"pluginName": "github",
138+
"excludeFileExtensions": scopeConfig.PrSizeExcludedFileExtensions,
138139
},
139140
})
140141

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
Licensed to the Apache Software Foundation (ASF) under one or more
3+
contributor license agreements. See the NOTICE file distributed with
4+
this work for additional information regarding copyright ownership.
5+
The ASF licenses this file to You under the Apache License, Version 2.0
6+
(the "License"); you may not use this file except in compliance with
7+
the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
*/
17+
18+
package migrationscripts
19+
20+
import (
21+
"github.com/apache/incubator-devlake/core/context"
22+
"github.com/apache/incubator-devlake/core/errors"
23+
"github.com/apache/incubator-devlake/core/plugin"
24+
"github.com/apache/incubator-devlake/helpers/migrationhelper"
25+
)
26+
27+
var _ plugin.MigrationScript = (*addPrSizeExcludedFileExtensions)(nil)
28+
29+
type githubScopeConfig20260216 struct {
30+
PrSizeExcludedFileExtensions []string `gorm:"type:json" json:"prSizeExcludedFileExtensions" mapstructure:"prSizeExcludedFileExtensions"`
31+
}
32+
33+
func (githubScopeConfig20260216) TableName() string {
34+
return "_tool_github_scope_configs"
35+
}
36+
37+
type addPrSizeExcludedFileExtensions struct{}
38+
39+
func (script *addPrSizeExcludedFileExtensions) Up(basicRes context.BasicRes) errors.Error {
40+
return migrationhelper.AutoMigrateTables(
41+
basicRes,
42+
&githubScopeConfig20260216{},
43+
)
44+
}
45+
46+
func (*addPrSizeExcludedFileExtensions) Version() uint64 { return 20260216100000 }
47+
48+
func (*addPrSizeExcludedFileExtensions) Name() string {
49+
return "add pr_size_excluded_file_extensions to _tool_github_scope_configs"
50+
}

backend/plugins/github/models/scope_config.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,21 @@ import (
2626
var _ plugin.ToolLayerScopeConfig = (*GithubScopeConfig)(nil)
2727

2828
type GithubScopeConfig struct {
29-
common.ScopeConfig `mapstructure:",squash" json:",inline" gorm:"embedded"`
30-
PrType string `mapstructure:"prType,omitempty" json:"prType" gorm:"type:varchar(255)"`
31-
PrComponent string `mapstructure:"prComponent,omitempty" json:"prComponent" gorm:"type:varchar(255)"`
32-
PrBodyClosePattern string `mapstructure:"prBodyClosePattern,omitempty" json:"prBodyClosePattern" gorm:"type:varchar(255)"`
33-
IssueSeverity string `mapstructure:"issueSeverity,omitempty" json:"issueSeverity" gorm:"type:varchar(255)"`
34-
IssuePriority string `mapstructure:"issuePriority,omitempty" json:"issuePriority" gorm:"type:varchar(255)"`
35-
IssueComponent string `mapstructure:"issueComponent,omitempty" json:"issueComponent" gorm:"type:varchar(255)"`
36-
IssueTypeBug string `mapstructure:"issueTypeBug,omitempty" json:"issueTypeBug" gorm:"type:varchar(255)"`
37-
IssueTypeIncident string `mapstructure:"issueTypeIncident,omitempty" json:"issueTypeIncident" gorm:"type:varchar(255)"`
38-
IssueTypeRequirement string `mapstructure:"issueTypeRequirement,omitempty" json:"issueTypeRequirement" gorm:"type:varchar(255)"`
39-
DeploymentPattern string `mapstructure:"deploymentPattern,omitempty" json:"deploymentPattern" gorm:"type:varchar(255)"`
40-
ProductionPattern string `mapstructure:"productionPattern,omitempty" json:"productionPattern" gorm:"type:varchar(255)"`
41-
EnvNamePattern string `mapstructure:"envNamePattern,omitempty" json:"envNamePattern" gorm:"type:varchar(255)"`
42-
Refdiff datatypes.JSONMap `mapstructure:"refdiff,omitempty" json:"refdiff" swaggertype:"object" format:"json"`
29+
common.ScopeConfig `mapstructure:",squash" json:",inline" gorm:"embedded"`
30+
PrType string `mapstructure:"prType,omitempty" json:"prType" gorm:"type:varchar(255)"`
31+
PrComponent string `mapstructure:"prComponent,omitempty" json:"prComponent" gorm:"type:varchar(255)"`
32+
PrBodyClosePattern string `mapstructure:"prBodyClosePattern,omitempty" json:"prBodyClosePattern" gorm:"type:varchar(255)"`
33+
IssueSeverity string `mapstructure:"issueSeverity,omitempty" json:"issueSeverity" gorm:"type:varchar(255)"`
34+
IssuePriority string `mapstructure:"issuePriority,omitempty" json:"issuePriority" gorm:"type:varchar(255)"`
35+
IssueComponent string `mapstructure:"issueComponent,omitempty" json:"issueComponent" gorm:"type:varchar(255)"`
36+
IssueTypeBug string `mapstructure:"issueTypeBug,omitempty" json:"issueTypeBug" gorm:"type:varchar(255)"`
37+
IssueTypeIncident string `mapstructure:"issueTypeIncident,omitempty" json:"issueTypeIncident" gorm:"type:varchar(255)"`
38+
IssueTypeRequirement string `mapstructure:"issueTypeRequirement,omitempty" json:"issueTypeRequirement" gorm:"type:varchar(255)"`
39+
DeploymentPattern string `mapstructure:"deploymentPattern,omitempty" json:"deploymentPattern" gorm:"type:varchar(255)"`
40+
ProductionPattern string `mapstructure:"productionPattern,omitempty" json:"productionPattern" gorm:"type:varchar(255)"`
41+
EnvNamePattern string `mapstructure:"envNamePattern,omitempty" json:"envNamePattern" gorm:"type:varchar(255)"`
42+
Refdiff datatypes.JSONMap `mapstructure:"refdiff,omitempty" json:"refdiff" swaggertype:"object" format:"json"`
43+
PrSizeExcludedFileExtensions []string `mapstructure:"prSizeExcludedFileExtensions" json:"prSizeExcludedFileExtensions" gorm:"type:json;serializer:json"`
4344
}
4445

4546
// GetConnectionId implements plugin.ToolLayerScopeConfig.

config-ui/src/plugins/register/github/config.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export const GitHubConfig: IPluginConfig = {
117117
tagsLimit: 10,
118118
tagsPattern: '/v\\d+\\.\\d+(\\.\\d+(-rc)*\\d*)*$/',
119119
},
120+
prSizeExcludedFileExtensions: [],
120121
},
121122
},
122123
};

config-ui/src/plugins/register/github/transformation.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,27 @@ const renderCollapseItems = ({
343343
}
344344
/>
345345
</Form.Item>
346+
<h3 style={{ marginBottom: 16, marginTop: 16 }}>
347+
<span>PR Size Exclusions</span>
348+
</h3>
349+
<div style={{ margin: '8px 0' }}>
350+
<span>Exclude file extensions (comma-separated, e.g. .md,.txt,.json)</span>
351+
<Input
352+
style={{ width: 360, margin: '0 8px' }}
353+
placeholder=".md,.txt,.json"
354+
value={(transformation.prSizeExcludedFileExtensions || []).join(',')}
355+
onChange={(e) =>
356+
onChangeTransformation({
357+
...transformation,
358+
prSizeExcludedFileExtensions: e.target.value
359+
.split(',')
360+
.map((s: string) => s.trim())
361+
.filter((s: string) => s),
362+
})
363+
}
364+
/>
365+
<HelpTooltip content="These extensions are ignored when computing PR Size (additions/deletions)." />
366+
</div>
346367
</>
347368
),
348369
},

0 commit comments

Comments
 (0)