You've already forked woodpecker
mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-11-23 21:44:44 +02:00
Add depends_on support for steps (#2771)
Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
@@ -99,120 +99,199 @@ func TestCompilerCompile(t *testing.T) {
|
||||
fronConf *yaml_types.Workflow
|
||||
backConf *backend_types.Config
|
||||
expectedErr string
|
||||
}{{
|
||||
name: "empty workflow, no clone",
|
||||
fronConf: &yaml_types.Workflow{SkipClone: true},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
}{
|
||||
{
|
||||
name: "empty workflow, no clone",
|
||||
fronConf: &yaml_types.Workflow{SkipClone: true},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
},
|
||||
},
|
||||
}, {
|
||||
name: "empty workflow, default clone",
|
||||
fronConf: &yaml_types.Workflow{},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage},
|
||||
{
|
||||
name: "empty workflow, default clone",
|
||||
fronConf: &yaml_types.Workflow{},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage},
|
||||
},
|
||||
},
|
||||
}, {
|
||||
name: "workflow with one dummy step",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "dummy",
|
||||
Image: "dummy_img",
|
||||
}}}},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||
Name: "test_stage_0",
|
||||
Alias: "dummy",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_0",
|
||||
Alias: "dummy",
|
||||
Type: backend_types.StepTypePlugin,
|
||||
Image: "dummy_img",
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"dummy"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
{
|
||||
name: "workflow with one dummy step",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "dummy",
|
||||
Image: "dummy_img",
|
||||
}}}},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||
Name: "test_stage_0",
|
||||
Alias: "dummy",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_0",
|
||||
Alias: "dummy",
|
||||
Type: backend_types.StepTypePlugin,
|
||||
Image: "dummy_img",
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"dummy"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}, {
|
||||
name: "workflow with three steps and one group",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "echo env",
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
}, {
|
||||
Name: "parallel echo 1",
|
||||
Group: "parallel",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
}, {
|
||||
Name: "parallel echo 2",
|
||||
Group: "parallel",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
}}}},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||
Name: "test_stage_0",
|
||||
Alias: "echo env",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_0",
|
||||
Alias: "echo env",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo env"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
{
|
||||
name: "workflow with three steps and one group",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "echo env",
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
}, {
|
||||
Name: "test_stage_1",
|
||||
Alias: "parallel echo 1",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_1",
|
||||
Alias: "parallel echo 1",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 1"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
Name: "parallel echo 1",
|
||||
Group: "parallel",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
}, {
|
||||
Name: "parallel echo 2",
|
||||
Group: "parallel",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
}}}},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||
Name: "test_stage_0",
|
||||
Alias: "echo env",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_0",
|
||||
Alias: "echo env",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo env"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
}, {
|
||||
Name: "test_step_2",
|
||||
Alias: "parallel echo 2",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 2"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
Name: "test_stage_1",
|
||||
Alias: "parallel echo 1",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_1",
|
||||
Alias: "parallel echo 1",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 1"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}, {
|
||||
Name: "test_step_2",
|
||||
Alias: "parallel echo 2",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 2"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}, {
|
||||
name: "workflow with missing secret",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "step",
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
Secrets: yaml_types.Secrets{Secrets: []*yaml_types.Secret{{Source: "missing", Target: "missing"}}},
|
||||
}}}},
|
||||
backConf: nil,
|
||||
expectedErr: "secret \"missing\" not found or not allowed to be used",
|
||||
}}
|
||||
{
|
||||
name: "workflow with three steps and depends_on",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "echo env",
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
}, {
|
||||
Name: "echo 1",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
DependsOn: []string{"echo env", "echo 2"},
|
||||
}, {
|
||||
Name: "echo 2",
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
}}}},
|
||||
backConf: &backend_types.Config{
|
||||
Networks: defaultNetworks,
|
||||
Volumes: defaultVolumes,
|
||||
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||
Name: "test_stage_0",
|
||||
Alias: "test_stage_0",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_0",
|
||||
Alias: "echo env",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo env"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}, {
|
||||
Name: "test_step_2",
|
||||
Alias: "echo 2",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 2"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo 2"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
}, {
|
||||
Name: "test_stage_1",
|
||||
Alias: "test_stage_1",
|
||||
Steps: []*backend_types.Step{{
|
||||
Name: "test_step_1",
|
||||
Alias: "echo 1",
|
||||
Type: backend_types.StepTypeCommands,
|
||||
Image: "bash",
|
||||
Commands: []string{"echo 1"},
|
||||
OnSuccess: true,
|
||||
Failure: "fail",
|
||||
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo 1"}}},
|
||||
ExtraHosts: []backend_types.HostAlias{},
|
||||
}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "workflow with missing secret",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "step",
|
||||
Image: "bash",
|
||||
Commands: []string{"env"},
|
||||
Secrets: yaml_types.Secrets{Secrets: []*yaml_types.Secret{{Source: "missing", Target: "missing"}}},
|
||||
}}}},
|
||||
backConf: nil,
|
||||
expectedErr: "secret \"missing\" not found or not allowed to be used",
|
||||
},
|
||||
{
|
||||
name: "workflow with broken step dependency",
|
||||
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||
Name: "dummy",
|
||||
Image: "dummy_img",
|
||||
DependsOn: []string{"not exist"},
|
||||
}}}},
|
||||
backConf: nil,
|
||||
expectedErr: "step 'dummy' depends on unknown step 'not exist'",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user