Skip to content
Merged
7 changes: 5 additions & 2 deletions cmd/digger/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,11 @@ func gitHubCI(lock core_locking.Lock) {
CiService: githubPrService,
PrNumber: prNumber,
}

allAppliesSuccessful, atLeastOneApply, err := digger.RunCommandsPerProject(commandsToRunPerProject, parsedGhContext.Repository, githubActor, eventName, prNumber, githubPrService, lock, reporter, planStorage, "")
currentDir, err := os.Getwd()
if err != nil {
reportErrorAndExit(githubActor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
}
allAppliesSuccessful, atLeastOneApply, err := digger.RunCommandsPerProject(commandsToRunPerProject, parsedGhContext.Repository, githubActor, eventName, prNumber, githubPrService, lock, reporter, planStorage, currentDir)
if err != nil {
reportErrorAndExit(githubActor, fmt.Sprintf("Failed to run commands. %s", err), 8)
}
Expand Down
45 changes: 29 additions & 16 deletions pkg/configuration/digger_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import (
"digger/pkg/utils"
"errors"
"fmt"
"github.com/bmatcuk/doublestar/v4"
"gopkg.in/yaml.v3"
"os"
"path"
"path/filepath"
"regexp"
)

type WorkflowConfiguration struct {
Expand Down Expand Up @@ -85,22 +85,45 @@ type DirWalker interface {
type FileSystemDirWalker struct {
}

func (walker *FileSystemDirWalker) GetDirs(workingDir string) ([]string, error) {
func GetFilesWithExtension(workingDir string, ext string) ([]string, error) {
var files []string
listOfFiles, err := os.ReadDir(workingDir)
if err != nil {
return nil, errors.New(fmt.Sprintf("error reading directory %s: %v", workingDir, err))
}
for _, f := range listOfFiles {
if !f.IsDir() {
r, err := regexp.MatchString(ext, f.Name())
if err == nil && r {
files = append(files, f.Name())
}
}
}

return files, nil
}

func (walker *FileSystemDirWalker) GetDirs(workingDir string) ([]string, error) {
var dirs []string
err := filepath.Walk(workingDir,
func(path string, info os.FileInfo, err error) error {

if err != nil {
return err
}
if info.IsDir() {
files = append(files, path)
terraformFiles, _ := GetFilesWithExtension(path, ".tf")
if len(terraformFiles) > 0 {
dirs = append(dirs, path)
return filepath.SkipDir
}
}
return nil
})
if err != nil {
return nil, err
}
return files, nil
return dirs, nil
}

var ErrDiggerConfigConflict = errors.New("more than one digger config file detected, please keep either 'digger.yml' or 'digger.yaml'")
Expand Down Expand Up @@ -290,18 +313,8 @@ func ConvertDiggerYamlToConfig(diggerYaml *DiggerConfigYaml, workingDir string,
for _, dir := range dirs {
includePattern := diggerYaml.GenerateProjectsConfig.Include
excludePattern := diggerYaml.GenerateProjectsConfig.Exclude
includeMatch, err := doublestar.PathMatch(includePattern, dir)
if err != nil {
return nil, err
}

excludeMatch, err := doublestar.PathMatch(excludePattern, dir)
if err != nil {
return nil, err
}
if includeMatch && !excludeMatch {
// generate a new project using default workflow
project := Project{Name: filepath.Base(dir), Dir: filepath.Join(workingDir, dir), Workflow: defaultWorkflowName}
if utils.MatchIncludeExcludePatternsToFile(dir, []string{includePattern}, []string{excludePattern}) {
project := Project{Name: filepath.Base(dir), Dir: dir, Workflow: defaultWorkflowName, Workspace: "default"}
diggerConfig.Projects = append(diggerConfig.Projects, project)
}
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/configuration/digger_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ generate_projects:
assert.NotNil(t, dg, "expected digger config to be not nil")
assert.Equal(t, "test1", dg.Projects[0].Name)
assert.Equal(t, "test2", dg.Projects[1].Name)
assert.Equal(t, tempDir+"/dev/test1", dg.Projects[0].Dir)
assert.Equal(t, tempDir+"/dev/test2", dg.Projects[1].Dir)
assert.Equal(t, "dev/test1", dg.Projects[0].Dir)
assert.Equal(t, "dev/test2", dg.Projects[1].Dir)
assert.Equal(t, 2, len(dg.Projects))
}

Expand Down Expand Up @@ -268,8 +268,8 @@ generate_projects:
assert.NotNil(t, dg, "expected digger config to be not nil")
assert.Equal(t, "test1", dg.Projects[0].Name)
assert.Equal(t, "test2", dg.Projects[1].Name)
assert.Equal(t, tempDir+"/dev/test1", dg.Projects[0].Dir)
assert.Equal(t, tempDir+"/dev/test2", dg.Projects[1].Dir)
assert.Equal(t, "dev/test1", dg.Projects[0].Dir)
assert.Equal(t, "dev/test2", dg.Projects[1].Dir)
assert.Equal(t, 2, len(dg.Projects))
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/core/execution/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type DiggerExecutor struct {
}

func (d DiggerExecutor) planFileName() string {
return d.ProjectNamespace + "#" + d.ProjectName + ".tfplan"
return strings.ReplaceAll(d.ProjectNamespace, "/", ":") + "#" + d.ProjectName + ".tfplan"
}

func (d DiggerExecutor) localPlanFilePath() string {
Expand Down