Merge pull request #40 from tboerger/matrix-conditions

Check matrix conditions correctly
This commit is contained in:
Brad Rydzewski 2019-04-24 08:09:56 -07:00 committed by GitHub
commit 115b2ff5f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 67 additions and 30 deletions

View File

@ -18,15 +18,16 @@ import filepath "github.com/bmatcuk/doublestar"
// Conditions defines a group of conditions. // Conditions defines a group of conditions.
type Conditions struct { type Conditions struct {
Cron Condition `json:"cron,omitempty"` Cron Condition `json:"cron,omitempty"`
Ref Condition `json:"ref,omitempty"` Ref Condition `json:"ref,omitempty"`
Repo Condition `json:"repo,omitempty"` Repo Condition `json:"repo,omitempty"`
Instance Condition `json:"instance,omitempty"` Instance Condition `json:"instance,omitempty"`
Target Condition `json:"target,omitempty"` Target Condition `json:"target,omitempty"`
Event Condition `json:"event,omitempty"` Event Condition `json:"event,omitempty"`
Branch Condition `json:"branch,omitempty"` Branch Condition `json:"branch,omitempty"`
Status Condition `json:"status,omitempty"` Status Condition `json:"status,omitempty"`
Paths Condition `json:"paths,omitempty"` Paths Condition `json:"paths,omitempty"`
Matrix map[string]string `json:"matrix,omitempty"`
} }
// Condition defines a runtime condition. // Condition defines a runtime condition.

View File

@ -91,6 +91,40 @@ func Convert(d []byte) ([]byte, error) {
current := pipeline current := pipeline
current.Name = fmt.Sprintf("matrix-%d", index+1) current.Name = fmt.Sprintf("matrix-%d", index+1)
services := make([]*droneyaml.Container, 0)
for _, service := range current.Services {
if len(service.When.Matrix) == 0 {
services = append(services, service)
continue
}
for whenKey, whenValue := range service.When.Matrix {
for envKey, envValue := range environ {
if whenKey == envKey && whenValue == envValue {
services = append(services, service)
}
}
}
}
current.Services = services
steps := make([]*droneyaml.Container, 0)
for _, step := range current.Steps {
if len(step.When.Matrix) == 0 {
steps = append(steps, step)
continue
}
for whenKey, whenValue := range step.When.Matrix {
for envKey, envValue := range environ {
if whenKey == envKey && whenValue == envValue {
steps = append(steps, step)
}
}
}
}
current.Steps = steps
marshaled, err := yaml.Marshal(&current) marshaled, err := yaml.Marshal(&current)
if err != nil { if err != nil {
@ -180,6 +214,7 @@ func toConditions(from Constraints) droneyaml.Conditions {
Include: from.Status.Include, Include: from.Status.Include,
Exclude: from.Status.Exclude, Exclude: from.Status.Exclude,
}, },
Matrix: from.Matrix,
} }
} }

View File

@ -14,6 +14,7 @@ type (
Event Constraint Event Constraint
Branch Constraint Branch Constraint
Status Constraint Status Constraint
Matrix map[string]string
} }
// Constraint defines a runtime constraint. // Constraint defines a runtime constraint.