Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions cmd/digger/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package main

import (
"digger/pkg/configuration"
"digger/pkg/core/models"
"digger/pkg/digger"
"digger/pkg/github"
"digger/pkg/github/models"
gh_models "digger/pkg/github/models"
"digger/pkg/reporting"
"digger/pkg/utils"
"fmt"
Expand Down Expand Up @@ -895,7 +896,7 @@ func TestGitHubNewPullRequestContext(t *testing.T) {
}

func TestGitHubNewCommentContext(t *testing.T) {
context, err := models.GetGitHubContext(githubContextCommentJson)
context, err := gh_models.GetGitHubContext(githubContextCommentJson)
assert.NoError(t, err)
if err != nil {
fmt.Println(err)
Expand All @@ -911,6 +912,7 @@ func TestGitHubNewCommentContext(t *testing.T) {
CiService: prManager,
PrNumber: prNumber,
}

policyChecker := &utils.MockPolicyChecker{}

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

func TestInvalidGitHubContext(t *testing.T) {
_, err := models.GetGitHubContext(githubInvalidContextJson)
_, err := gh_models.GetGitHubContext(githubInvalidContextJson)
require.Error(t, err)
if err != nil {
fmt.Println(err)
Expand All @@ -941,11 +943,11 @@ func TestGitHubNewPullRequestInMultiEnvProjectContext(t *testing.T) {
prod := configuration.Project{Name: "prod", Dir: "prod", Workflow: "prod"}
workflows := map[string]configuration.Workflow{
"dev": {
Plan: &configuration.Stage{Steps: []configuration.Step{
Plan: &models.Stage{Steps: []models.Step{
{Action: "init", ExtraArgs: []string{}},
{Action: "plan", ExtraArgs: []string{"-var-file=dev.tfvars"}},
}},
Apply: &configuration.Stage{Steps: []configuration.Step{
Apply: &models.Stage{Steps: []models.Step{
{Action: "init", ExtraArgs: []string{}},
{Action: "apply", ExtraArgs: []string{"-var-file=dev.tfvars"}},
}},
Expand All @@ -956,11 +958,11 @@ func TestGitHubNewPullRequestInMultiEnvProjectContext(t *testing.T) {
},
},
"prod": {
Plan: &configuration.Stage{Steps: []configuration.Step{
Plan: &models.Stage{Steps: []models.Step{
{Action: "init", ExtraArgs: []string{}},
{Action: "plan", ExtraArgs: []string{"-var-file=dev.tfvars"}},
}},
Apply: &configuration.Stage{Steps: []configuration.Step{
Apply: &models.Stage{Steps: []models.Step{
{Action: "init", ExtraArgs: []string{}},
{Action: "apply", ExtraArgs: []string{"-var-file=dev.tfvars"}},
}},
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/caarlos0/env/v7 v7.1.0
github.com/google/go-github/v51 v51.0.0
github.com/google/uuid v1.3.0
github.com/jinzhu/copier v0.3.5
github.com/microsoft/azure-devops-go-api/azuredevops v1.0.0-b5
github.com/open-policy-agent/opa v0.53.1
github.com/stretchr/testify v1.8.4
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=
github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
Expand Down
44 changes: 10 additions & 34 deletions pkg/azure/azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,23 +350,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
}

stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
var coreApplyStage models.Stage
if workflow.Apply != nil {
coreApplyStage = workflow.Apply.ToCoreStage()
}
var corePlanStage models.Stage
if workflow.Plan != nil {
corePlanStage = workflow.Plan.ToCoreStage()
}
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
ProjectName: project.Name,
ProjectDir: project.Dir,
ProjectWorkspace: project.Workspace,
Terragrunt: project.Terragrunt,
Commands: workflow.Configuration.OnPullRequestPushed,
ApplyStage: &coreApplyStage,
PlanStage: &corePlanStage,
ApplyStage: workflow.Apply,
PlanStage: workflow.Plan,
CommandEnvVars: commandEnvVars,
StateEnvVars: stateEnvVars,
})
Expand All @@ -379,23 +371,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
}

stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
var coreApplyStage models.Stage
if workflow.Apply != nil {
coreApplyStage = workflow.Apply.ToCoreStage()
}
var corePlanStage models.Stage
if workflow.Plan != nil {
corePlanStage = workflow.Plan.ToCoreStage()
}
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
ProjectName: project.Name,
ProjectDir: project.Dir,
ProjectWorkspace: project.Workspace,
Terragrunt: project.Terragrunt,
Commands: workflow.Configuration.OnPullRequestClosed,
ApplyStage: &coreApplyStage,
PlanStage: &corePlanStage,
ApplyStage: workflow.Apply,
PlanStage: workflow.Plan,
CommandEnvVars: commandEnvVars,
StateEnvVars: stateEnvVars,
})
Expand All @@ -408,23 +392,15 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
if !ok {
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
}
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
var coreApplyStage models.Stage
if workflow.Apply != nil {
coreApplyStage = workflow.Apply.ToCoreStage()
}
var corePlanStage models.Stage
if workflow.Plan != nil {
corePlanStage = workflow.Plan.ToCoreStage()
}
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)
commandsPerProject = append(commandsPerProject, models.ProjectCommand{
ProjectName: project.Name,
ProjectDir: project.Dir,
ProjectWorkspace: project.Workspace,
Terragrunt: project.Terragrunt,
Commands: workflow.Configuration.OnCommitToDefault,
ApplyStage: &coreApplyStage,
PlanStage: &corePlanStage,
ApplyStage: workflow.Apply,
PlanStage: workflow.Plan,
CommandEnvVars: commandEnvVars,
StateEnvVars: stateEnvVars,
})
Expand Down Expand Up @@ -465,7 +441,7 @@ func ConvertAzureEventToCommands(parseAzureContext Azure, impactedProjects []con
if !ok {
return nil, false, fmt.Errorf("failed to find workflow config '%s' for project '%s'", project.Workflow, project.Name)
}
stateEnvVars, commandEnvVars := configuration.CollectEnvVars(workflow.EnvVars)
stateEnvVars, commandEnvVars := configuration.CollectTerraformEnvConfig(workflow.EnvVars)

commandsPerProject = append(commandsPerProject, models.ProjectCommand{
ProjectName: project.Name,
Expand Down
75 changes: 75 additions & 0 deletions pkg/configuration/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package configuration

import "digger/pkg/core/models"

type DiggerConfig struct {
Projects []Project
AutoMerge bool
CollectUsageData bool
Workflows map[string]Workflow
}

type Project struct {
Name string
Dir string
Workspace string
Terragrunt bool
Workflow string
IncludePatterns []string
ExcludePatterns []string
}

type Workflow struct {
EnvVars *TerraformEnvConfig
Plan *models.Stage
Apply *models.Stage
Configuration *WorkflowConfiguration
}

type WorkflowConfiguration struct {
OnPullRequestPushed []string
OnPullRequestClosed []string
OnCommitToDefault []string
}

type TerraformEnvConfig struct {
State []EnvVar
Commands []EnvVar
}

type EnvVar struct {
Name string
ValueFrom string
Value string
}

func defaultWorkflow() *Workflow {
return &Workflow{
Configuration: &WorkflowConfiguration{
OnCommitToDefault: []string{"digger unlock"},
OnPullRequestPushed: []string{"digger plan"},
OnPullRequestClosed: []string{"digger unlock"},
},
Plan: &models.Stage{
Steps: []models.Step{
{
Action: "init", ExtraArgs: []string{},
},
{
Action: "plan", ExtraArgs: []string{},
},
},
},
Apply: &models.Stage{
Steps: []models.Step{
{
Action: "init", ExtraArgs: []string{},
},
{
Action: "apply", ExtraArgs: []string{},
},
},
},
EnvVars: &TerraformEnvConfig{},
}
}
Loading