Skip to content

Commit 41c24e0

Browse files
authored
Merge pull request #331 from diggerhq/split-digger-config
split DiggerConfig into two parts, one for yaml parsing and one for config itself
2 parents 5549284 + 1104aea commit 41c24e0

File tree

12 files changed

+531
-413
lines changed

12 files changed

+531
-413
lines changed

cmd/digger/main_test.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package main
22

33
import (
44
"digger/pkg/configuration"
5+
"digger/pkg/core/models"
56
"digger/pkg/digger"
67
"digger/pkg/github"
7-
"digger/pkg/github/models"
8+
gh_models "digger/pkg/github/models"
89
"digger/pkg/reporting"
910
"digger/pkg/utils"
1011
"fmt"
@@ -895,7 +896,7 @@ func TestGitHubNewPullRequestContext(t *testing.T) {
895896
}
896897

897898
func TestGitHubNewCommentContext(t *testing.T) {
898-
context, err := models.GetGitHubContext(githubContextCommentJson)
899+
context, err := gh_models.GetGitHubContext(githubContextCommentJson)
899900
assert.NoError(t, err)
900901
if err != nil {
901902
fmt.Println(err)
@@ -911,6 +912,7 @@ func TestGitHubNewCommentContext(t *testing.T) {
911912
CiService: prManager,
912913
PrNumber: prNumber,
913914
}
915+
914916
policyChecker := &utils.MockPolicyChecker{}
915917

916918
commandsToRunPerProject, _, err := github.ConvertGithubEventToCommands(ghEvent, impactedProjects, requestedProject, map[string]configuration.Workflow{})
@@ -925,7 +927,7 @@ func TestGitHubNewCommentContext(t *testing.T) {
925927
}
926928

927929
func TestInvalidGitHubContext(t *testing.T) {
928-
_, err := models.GetGitHubContext(githubInvalidContextJson)
930+
_, err := gh_models.GetGitHubContext(githubInvalidContextJson)
929931
require.Error(t, err)
930932
if err != nil {
931933
fmt.Println(err)
@@ -941,11 +943,11 @@ func TestGitHubNewPullRequestInMultiEnvProjectContext(t *testing.T) {
941943
prod := configuration.Project{Name: "prod", Dir: "prod", Workflow: "prod"}
942944
workflows := map[string]configuration.Workflow{
943945
"dev": {
944-
Plan: &configuration.Stage{Steps: []configuration.Step{
946+
Plan: &models.Stage{Steps: []models.Step{
945947
{Action: "init", ExtraArgs: []string{}},
946948
{Action: "plan", ExtraArgs: []string{"-var-file=dev.tfvars"}},
947949
}},
948-
Apply: &configuration.Stage{Steps: []configuration.Step{
950+
Apply: &models.Stage{Steps: []models.Step{
949951
{Action: "init", ExtraArgs: []string{}},
950952
{Action: "apply", ExtraArgs: []string{"-var-file=dev.tfvars"}},
951953
}},
@@ -956,11 +958,11 @@ func TestGitHubNewPullRequestInMultiEnvProjectContext(t *testing.T) {
956958
},
957959
},
958960
"prod": {
959-
Plan: &configuration.Stage{Steps: []configuration.Step{
961+
Plan: &models.Stage{Steps: []models.Step{
960962
{Action: "init", ExtraArgs: []string{}},
961963
{Action: "plan", ExtraArgs: []string{"-var-file=dev.tfvars"}},
962964
}},
963-
Apply: &configuration.Stage{Steps: []configuration.Step{
965+
Apply: &models.Stage{Steps: []models.Step{
964966
{Action: "init", ExtraArgs: []string{}},
965967
{Action: "apply", ExtraArgs: []string{"-var-file=dev.tfvars"}},
966968
}},

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
github.com/caarlos0/env/v7 v7.1.0
1212
github.com/google/go-github/v51 v51.0.0
1313
github.com/google/uuid v1.3.0
14+
github.com/jinzhu/copier v0.3.5
1415
github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5
1516
github.com/open-policy-agent/opa v0.53.1
1617
github.com/stretchr/testify v1.8.4

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC
138138
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
139139
github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=
140140
github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
141+
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
142+
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
141143
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
142144
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
143145
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=

pkg/azure/azure.go

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -350,23 +350,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
350350
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
351351
}
352352

353-
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
354-
var coreApplyStage models.Stage
355-
if workflow.Apply != nil {
356-
coreApplyStage = workflow.Apply.ToCoreStage()
357-
}
358-
var corePlanStage models.Stage
359-
if workflow.Plan != nil {
360-
corePlanStage = workflow.Plan.ToCoreStage()
361-
}
353+
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
362354
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
363355
ProjectName: project.Name,
364356
ProjectDir: project.Dir,
365357
ProjectWorkspace: project.Workspace,
366358
Terragrunt: project.Terragrunt,
367359
Commands: workflow.Configuration.OnPullRequestPushed,
368-
ApplyStage: &coreApplyStage,
369-
PlanStage: &corePlanStage,
360+
ApplyStage: workflow.Apply,
361+
PlanStage: workflow.Plan,
370362
CommandEnvVars: commandEnvVars,
371363
StateEnvVars: stateEnvVars,
372364
})
@@ -379,23 +371,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
379371
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
380372
}
381373

382-
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
383-
var coreApplyStage models.Stage
384-
if workflow.Apply != nil {
385-
coreApplyStage = workflow.Apply.ToCoreStage()
386-
}
387-
var corePlanStage models.Stage
388-
if workflow.Plan != nil {
389-
corePlanStage = workflow.Plan.ToCoreStage()
390-
}
374+
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
391375
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
392376
ProjectName: project.Name,
393377
ProjectDir: project.Dir,
394378
ProjectWorkspace: project.Workspace,
395379
Terragrunt: project.Terragrunt,
396380
Commands: workflow.Configuration.OnPullRequestClosed,
397-
ApplyStage: &coreApplyStage,
398-
PlanStage: &corePlanStage,
381+
ApplyStage: workflow.Apply,
382+
PlanStage: workflow.Plan,
399383
CommandEnvVars: commandEnvVars,
400384
StateEnvVars: stateEnvVars,
401385
})
@@ -408,23 +392,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
408392
if !ok {
409393
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
410394
}
411-
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
412-
var coreApplyStage models.Stage
413-
if workflow.Apply != nil {
414-
coreApplyStage = workflow.Apply.ToCoreStage()
415-
}
416-
var corePlanStage models.Stage
417-
if workflow.Plan != nil {
418-
corePlanStage = workflow.Plan.ToCoreStage()
419-
}
395+
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
420396
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
421397
ProjectName: project.Name,
422398
ProjectDir: project.Dir,
423399
ProjectWorkspace: project.Workspace,
424400
Terragrunt: project.Terragrunt,
425401
Commands: workflow.Configuration.OnCommitToDefault,
426-
ApplyStage: &coreApplyStage,
427-
PlanStage: &corePlanStage,
402+
ApplyStage: workflow.Apply,
403+
PlanStage: workflow.Plan,
428404
CommandEnvVars: commandEnvVars,
429405
StateEnvVars: stateEnvVars,
430406
})
@@ -465,7 +441,7 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
465441
if !ok {
466442
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
467443
}
468-
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
444+
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
469445

470446
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
471447
ProjectName: project.Name,

pkg/configuration/config.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package configuration
2+
3+
import "digger/pkg/core/models"
4+
5+
type DiggerConfig struct {
6+
Projects []Project
7+
AutoMerge bool
8+
CollectUsageData bool
9+
Workflows map[string]Workflow
10+
}
11+
12+
type Project struct {
13+
Name string
14+
Dir string
15+
Workspace string
16+
Terragrunt bool
17+
Workflow string
18+
IncludePatterns []string
19+
ExcludePatterns []string
20+
}
21+
22+
type Workflow struct {
23+
EnvVars *TerraformEnvConfig
24+
Plan *models.Stage
25+
Apply *models.Stage
26+
Configuration *WorkflowConfiguration
27+
}
28+
29+
type WorkflowConfiguration struct {
30+
OnPullRequestPushed []string
31+
OnPullRequestClosed []string
32+
OnCommitToDefault []string
33+
}
34+
35+
type TerraformEnvConfig struct {
36+
State []EnvVar
37+
Commands []EnvVar
38+
}
39+
40+
type EnvVar struct {
41+
Name string
42+
ValueFrom string
43+
Value string
44+
}
45+
46+
func defaultWorkflow() *Workflow {
47+
return &Workflow{
48+
Configuration: &WorkflowConfiguration{
49+
OnCommitToDefault: []string{"digger unlock"},
50+
OnPullRequestPushed: []string{"digger plan"},
51+
OnPullRequestClosed: []string{"digger unlock"},
52+
},
53+
Plan: &models.Stage{
54+
Steps: []models.Step{
55+
{
56+
Action: "init", ExtraArgs: []string{},
57+
},
58+
{
59+
Action: "plan", ExtraArgs: []string{},
60+
},
61+
},
62+
},
63+
Apply: &models.Stage{
64+
Steps: []models.Step{
65+
{
66+
Action: "init", ExtraArgs: []string{},
67+
},
68+
{
69+
Action: "apply", ExtraArgs: []string{},
70+
},
71+
},
72+
},
73+
EnvVars: &TerraformEnvConfig{},
74+
}
75+
}

0 commit comments

Comments
 (0)