mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-07-10 16:05:58 +00:00
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package transform
|
|
|
|
import (
|
|
"github.com/drone/drone/model"
|
|
"github.com/drone/drone/yaml"
|
|
)
|
|
|
|
// ChangeFilter is a transform function that alters status constraints set to
|
|
// change and replaces with the opposite of the prior status.
|
|
func ChangeFilter(conf *yaml.Config, prev string) {
|
|
for _, step := range conf.Pipeline {
|
|
for i, status := range step.Constraints.Status.Include {
|
|
if status != "change" && status != "changed" {
|
|
continue
|
|
}
|
|
if prev == model.StatusFailure {
|
|
step.Constraints.Status.Include[i] = model.StatusSuccess
|
|
} else {
|
|
step.Constraints.Status.Include[i] = model.StatusFailure
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// DefaultFilter is a transform function that applies default Filters to each
|
|
// step in the Yaml specification file.
|
|
func DefaultFilter(conf *yaml.Config) {
|
|
for _, step := range conf.Pipeline {
|
|
defaultStatus(step)
|
|
defaultEvent(step)
|
|
}
|
|
}
|
|
|
|
// defaultStatus sets default status conditions.
|
|
func defaultStatus(c *yaml.Container) {
|
|
if !isEmpty(c.Constraints.Status) {
|
|
return
|
|
}
|
|
c.Constraints.Status.Include = []string{
|
|
model.StatusSuccess,
|
|
}
|
|
}
|
|
|
|
// defaultEvent sets default event conditions.
|
|
func defaultEvent(c *yaml.Container) {
|
|
if !isEmpty(c.Constraints.Event) {
|
|
return
|
|
}
|
|
|
|
if isPlugin(c) && !isClone(c) {
|
|
c.Constraints.Event.Exclude = []string{
|
|
model.EventPull,
|
|
}
|
|
}
|
|
}
|
|
|
|
// helper function returns true if the step is a clone step.
|
|
func isEmpty(c yaml.Constraint) bool {
|
|
return len(c.Include) == 0 && len(c.Exclude) == 0
|
|
}
|
|
|
|
// helper function returns true if the step is a plugin step.
|
|
func isPlugin(c *yaml.Container) bool {
|
|
return len(c.Commands) == 0 || len(c.Vargs) != 0
|
|
}
|
|
|
|
// helper function returns true if the step is a command step.
|
|
func isCommand(c *yaml.Container) bool {
|
|
return len(c.Commands) != 0
|
|
}
|
|
|
|
// helper function returns true if the step is a clone step.
|
|
func isClone(c *yaml.Container) bool {
|
|
return c.Name == "clone"
|
|
}
|