mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-25 11:21:02 +00:00
Setting for empty commits on path condition (#3708)
This commit is contained in:
parent
d92cf4b18e
commit
faf6b33140
5 changed files with 27 additions and 4 deletions
|
@ -402,16 +402,19 @@ when:
|
|||
|
||||
You can use [glob patterns](https://github.com/bmatcuk/doublestar#patterns) to match the changed files and specify if the step should run if a file matching that pattern has been changed `include` or if some files have **not** been changed `exclude`.
|
||||
|
||||
For pipelines without file changes (empty commits or on events without file changes like `tag`), you can use `on_empty` to set whether this condition should be **true** _(default)_ or **false** in these cases.
|
||||
|
||||
```yaml
|
||||
when:
|
||||
- path:
|
||||
include: ['.woodpecker/*.yaml', '*.ini']
|
||||
exclude: ['*.md', 'docs/**']
|
||||
ignore_message: '[ALL]'
|
||||
on_empty: true
|
||||
```
|
||||
|
||||
:::info
|
||||
Passing a defined ignore-message like `[ALL]` inside the commit message will ignore all path conditions.
|
||||
Passing a defined ignore-message like `[ALL]` inside the commit message will ignore all path conditions and the `on_empty` setting.
|
||||
:::
|
||||
|
||||
#### `evaluate`
|
||||
|
|
|
@ -69,7 +69,8 @@ type (
|
|||
Path struct {
|
||||
Include []string
|
||||
Exclude []string
|
||||
IgnoreMessage string `yaml:"ignore_message,omitempty"`
|
||||
IgnoreMessage string `yaml:"ignore_message,omitempty"`
|
||||
OnEmpty yamlBaseTypes.BoolTrue `yaml:"on_empty,omitempty"`
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -331,6 +332,7 @@ func (c *Path) UnmarshalYAML(value *yaml.Node) error {
|
|||
Include yamlBaseTypes.StringOrSlice `yaml:"include,omitempty"`
|
||||
Exclude yamlBaseTypes.StringOrSlice `yaml:"exclude,omitempty"`
|
||||
IgnoreMessage string `yaml:"ignore_message,omitempty"`
|
||||
OnEmpty yamlBaseTypes.BoolTrue `yaml:"on_empty,omitempty"`
|
||||
}{}
|
||||
|
||||
var out2 yamlBaseTypes.StringOrSlice
|
||||
|
@ -340,6 +342,7 @@ func (c *Path) UnmarshalYAML(value *yaml.Node) error {
|
|||
|
||||
c.Exclude = out1.Exclude
|
||||
c.IgnoreMessage = out1.IgnoreMessage
|
||||
c.OnEmpty = out1.OnEmpty
|
||||
c.Include = append( //nolint:gocritic
|
||||
out1.Include,
|
||||
out2...,
|
||||
|
@ -361,9 +364,9 @@ func (c *Path) Match(v []string, message string) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
// always match if there are no commit files (empty commit)
|
||||
// return value based on 'on_empty', if there are no commit files (empty commit)
|
||||
if len(v) == 0 {
|
||||
return true
|
||||
return c.OnEmpty.Bool()
|
||||
}
|
||||
|
||||
if len(c.Exclude) > 0 && c.Excludes(v) {
|
||||
|
|
|
@ -260,6 +260,16 @@ func TestConstraintList(t *testing.T) {
|
|||
with: []string{},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
conf: "{ include: [ README.md ], on_empty: false }",
|
||||
with: []string{},
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
conf: "{ include: [ README.md ], on_empty: true }",
|
||||
with: []string{},
|
||||
want: true,
|
||||
},
|
||||
}
|
||||
for _, test := range testdata {
|
||||
c := parseConstraintPath(t, test.conf)
|
||||
|
|
|
@ -119,6 +119,7 @@ steps:
|
|||
include: ['.woodpecker/*.yml', '*.ini']
|
||||
exclude: ['*.md', 'docs/**']
|
||||
ignore_message: '[ALL]'
|
||||
on_empty: true
|
||||
|
||||
when-repo:
|
||||
image: alpine
|
||||
|
|
|
@ -288,6 +288,9 @@
|
|||
},
|
||||
"ignore_message": {
|
||||
"type": "string"
|
||||
},
|
||||
"on_empty": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
@ -493,6 +496,9 @@
|
|||
},
|
||||
"ignore_message": {
|
||||
"type": "string"
|
||||
},
|
||||
"on_empty": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
|
Loading…
Reference in a new issue