Skip to content

Commit

Permalink
Fix same branch name different sources (#222)
Browse files Browse the repository at this point in the history
* add TestMultipleSourcesWithSameBrancheName and use absolute path for purgeUnmanagedContent, fixes #220

* use absolute path including basedir for helper struct allEnvironments, fixes #220

* use absolute path for purgeUnmanagedContent, fixes #220

* remove too verbose env output

* fix TestResolvePuppetfileUseSSHAgent by adding a test fake key
  • Loading branch information
xorpaul authored Feb 8, 2024
1 parent 8cae529 commit fc83c96
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 39 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- name: setup go environment 1.19.3
- name: setup go environment stable
uses: actions/setup-go@v3
with:
go-version: '1.19.3'
Expand Down
83 changes: 63 additions & 20 deletions g10k_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2153,14 +2153,14 @@ func TestPurgeStaleDeploymentOnly(t *testing.T) {

expectedLines := []string{
"DEBUG purgeUnmanagedContent(): Glob'ing with path /tmp/full/full_*",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_another",
"DEBUG purgeUnmanagedContent(): Not purging environment full_another",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_master",
"DEBUG purgeUnmanagedContent(): Not purging environment full_master",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_qa",
"DEBUG purgeUnmanagedContent(): Not purging environment full_qa",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_stale",
"Removing unmanaged environment full_stale",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_another",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_another",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_master",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_master",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_qa",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_qa",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_stale",
"Removing unmanaged environment /tmp/full/full_stale",
}

for _, expectedLine := range expectedLines {
Expand Down Expand Up @@ -2221,14 +2221,14 @@ func TestPurgeStaleDeploymentOnlyWithAllowList(t *testing.T) {

expectedLines := []string{
"DEBUG purgeUnmanagedContent(): Glob'ing with path /tmp/full/full_*",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_another",
"DEBUG purgeUnmanagedContent(): Not purging environment full_another",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_master",
"DEBUG purgeUnmanagedContent(): Not purging environment full_master",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_qa",
"DEBUG purgeUnmanagedContent(): Not purging environment full_qa",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: full_stale",
"Removing unmanaged environment full_stale",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_another",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_another",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_master",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_master",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_qa",
"DEBUG purgeUnmanagedContent(): Not purging environment /tmp/full/full_qa",
"DEBUG purgeUnmanagedContent(): Checking if environment should exist: /tmp/full/full_stale",
"Removing unmanaged environment /tmp/full/full_stale",
}

for _, expectedLine := range expectedLines {
Expand Down Expand Up @@ -2882,7 +2882,7 @@ func TestResolvePuppetfileUseSSHAgent(t *testing.T) {
if exitCode != 1 {
t.Errorf("terminated with %v, but we expected exit status %v Output: %s", exitCode, 1, string(out))
}
//fmt.Println(string(out))
// fmt.Println(string(out))

sshAddCmd := "ssh-add"
if runtime.GOOS == "darwin" {
Expand All @@ -2891,11 +2891,11 @@ func TestResolvePuppetfileUseSSHAgent(t *testing.T) {

expectedLines := []string{
"DEBUG git repo url [email protected]:foo/git_module_with_ssh_agent.git with loaded SSH keys from ssh-agent",
"DEBUG git repo url [email protected]:foobar/github_module_without_ssh_add.git with SSH key tests/TestConfigUseSSHAgent.yaml",
"DEBUG git repo url [email protected]:bar/git_module_with_ssh_add.git with SSH key tests/TestConfigUseSSHAgent.yaml",
"DEBUG git repo url [email protected]:foobar/github_module_without_ssh_add.git with SSH key tests/test-fake-key",
"DEBUG git repo url [email protected]:bar/git_module_with_ssh_add.git with SSH key tests/test-fake-key",
"DEBUG executeCommand(): Executing git clone --mirror [email protected]:foo/git_module_with_ssh_agent.git /tmp/g10k/modules/[email protected]_git_module_with_ssh_agent.git",
"DEBUG executeCommand(): Executing git clone --mirror [email protected]:foobar/github_module_without_ssh_add.git /tmp/g10k/modules/[email protected]_github_module_without_ssh_add.git",
"DEBUG executeCommand(): Executing ssh-agent bash -c '" + sshAddCmd + " tests/TestConfigUseSSHAgent.yaml; git clone --mirror [email protected]:bar/git_module_with_ssh_add.git /tmp/g10k/modules/[email protected]_git_module_with_ssh_add.git'",
"DEBUG executeCommand(): Executing ssh-agent bash -c '" + sshAddCmd + " tests/test-fake-key; git clone --mirror [email protected]:bar/git_module_with_ssh_add.git /tmp/g10k/modules/[email protected]_git_module_with_ssh_add.git'",
}

for _, expectedLine := range expectedLines {
Expand Down Expand Up @@ -3262,3 +3262,46 @@ func TestNoProxy(t *testing.T) {
}
}
}

func TestMultipleSourcesWithSameBrancheName(t *testing.T) {
funcName := strings.Split(funcName(), ".")[len(strings.Split(funcName(), "."))-1]
config = readConfigfile(filepath.Join("tests", "TestConfig2SourcesSameBranchNameDiffBaseDir.yaml"))
if os.Getenv("TEST_FOR_CRASH_"+funcName) == "1" {
debug = true
info = true
resolvePuppetEnvironment(false, "")
return
}
purgeDir("/tmp/example/", funcName)
purgeDir("/tmp/out/", funcName)
purgeDir("/tmp/out-clone/", funcName)

cmd := exec.Command(os.Args[0], "-test.run="+funcName+"$")
cmd.Env = append(os.Environ(), "TEST_FOR_CRASH_"+funcName+"=1")
_, err := cmd.CombinedOutput()

exitCode := 0
if msg, ok := err.(*exec.ExitError); ok { // there is error code
exitCode = msg.Sys().(syscall.WaitStatus).ExitStatus()
}

expectedExitCode := 0
if exitCode != expectedExitCode {
t.Errorf("terminated with %v, but we expected exit status %v", exitCode, expectedExitCode)
}
// fmt.Println(string(out))

expectedFiles := []string{
"/tmp/out-clone/another/Puppetfile",
"/tmp/out-clone/master/.g10k-deploy.json",
"/tmp/out/master/Puppetfile",
"/tmp/out/ref/uuui/d0",
}

for _, expectedFile := range expectedFiles {
if !fileExists(expectedFile) {
t.Errorf("files and/or directory missing that should be there! " + expectedFile)
}
}

}
6 changes: 1 addition & 5 deletions helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,8 @@ func executeCommand(command string, commandDir string, timeout int, allowFail bo
os.Unsetenv("https_proxy")
os.Unsetenv("HTTP_PROXY")
os.Unsetenv("HTTPS_PROXY")
execCommand.Env = os.Environ()
Debugf("exec OS env:" + strings.Join(execCommand.Env, ",") + " for command " + command)
} else {
execCommand.Env = os.Environ()
Debugf("exec OS env:" + strings.Join(execCommand.Env, ",") + " for command " + command)
}
execCommand.Env = os.Environ()
out, err := execCommand.CombinedOutput()
duration := time.Since(before).Seconds()
er := ExecResult{0, string(out)}
Expand Down
4 changes: 2 additions & 2 deletions puppetfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ func resolvePuppetEnvironment(tags bool, outputNameTag string) {
}

mutex.Lock()
if _, ok := allEnvironments[prefix+renamedBranch]; !ok {
allEnvironments[prefix+renamedBranch] = true
if _, ok := allEnvironments[filepath.Join(sa.Basedir, prefix+renamedBranch)]; !ok {
allEnvironments[filepath.Join(sa.Basedir, prefix+renamedBranch)] = true
} else {
Fatalf("Renamed environment naming conflict detected with renamed environment " + prefix + renamedBranch)
}
Expand Down
14 changes: 7 additions & 7 deletions stale.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ func purgeUnmanagedContent(allBasedirs map[string]bool, allEnvironments map[stri
}
}
if stringSliceContains(config.PurgeLevels, "deployment") {
Debugf("Checking if environment should exist: " + envName)
if allEnvironments[envName] {
Debugf("Not purging environment " + envName)
} else if stringSliceContains(allowlistEnvironments, filepath.Join(basedir, envName)) {
Debugf("Not purging environment " + envName + " due to deployment_purge_allowlist match")
Debugf("Checking if environment should exist: " + env)
if allEnvironments[env] {
Debugf("Not purging environment " + env)
} else if stringSliceContains(allowlistEnvironments, env) {
Debugf("Not purging environment " + env + " due to deployment_purge_allowlist match")
} else {
Infof("Removing unmanaged environment " + envName)
Infof("Removing unmanaged environment " + env)
if !dryRun {
purgeDir(filepath.Join(basedir, envName), "purgeStaleContent()")
purgeDir(env, "purgeStaleContent()")
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions tests/TestConfig2SourcesSameBranchNameDiffBaseDir.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
cachedir: '/tmp/g10k'

sources:
example:
remote: 'https://github.com/xorpaul/g10k-fullworking-env-clone.git'
basedir: '/tmp/out/'
full:
remote: 'https://github.com/xorpaul/g10k-fullworking-env.git'
basedir: '/tmp/out-clone/'
8 changes: 4 additions & 4 deletions tests/TestConfigUseSSHAgent.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
:cachedir: '/tmp/g10k'
:cachedir: "/tmp/g10k"

sources:
example:
remote: 'https://github.com/xorpaul/g10k-environment.git'
basedir: '/tmp/example/'
private_key: 'tests/TestConfigUseSSHAgent.yaml' # just some existing file, we just want to check if the ssh-add command isn't used
remote: "https://github.com/xorpaul/g10k-environment.git"
basedir: "/tmp/example/"
private_key: "tests/test-fake-key" # just some existing file, we just want to check if the ssh-add command isn't used
38 changes: 38 additions & 0 deletions tests/test-fake-key
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

0 comments on commit fc83c96

Please sign in to comment.