mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
fix: properly support default environment
This commit is contained in:
@@ -38,7 +38,7 @@ var exportCmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ var runCmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ var secretsCmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
@@ -98,7 +98,7 @@ var secretsSetCmd = &cobra.Command{
|
|||||||
|
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
@@ -277,7 +277,7 @@ var secretsDeleteCmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
@@ -338,7 +338,7 @@ var secretsDeleteCmd = &cobra.Command{
|
|||||||
func getSecretsByNames(cmd *cobra.Command, args []string) {
|
func getSecretsByNames(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
@@ -384,7 +384,7 @@ func getSecretsByNames(cmd *cobra.Command, args []string) {
|
|||||||
func generateExampleEnv(cmd *cobra.Command, args []string) {
|
func generateExampleEnv(cmd *cobra.Command, args []string) {
|
||||||
environmentName, _ := cmd.Flags().GetString("env")
|
environmentName, _ := cmd.Flags().GetString("env")
|
||||||
if !cmd.Flags().Changed("env") {
|
if !cmd.Flags().Changed("env") {
|
||||||
environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
|
environmentFromWorkspace := util.GetEnvFromWorkspaceFile()
|
||||||
if environmentFromWorkspace != "" {
|
if environmentFromWorkspace != "" {
|
||||||
environmentName = environmentFromWorkspace
|
environmentName = environmentFromWorkspace
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,8 +115,20 @@ func GetHashFromStringList(list []string) string {
|
|||||||
return fmt.Sprintf("%x", sum)
|
return fmt.Sprintf("%x", sum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// execCmd is a struct that holds the command and arguments to be executed.
|
||||||
|
// By using this struct, we can easily mock the command and arguments.
|
||||||
|
type execCmd struct {
|
||||||
|
cmd string
|
||||||
|
args []string
|
||||||
|
}
|
||||||
|
|
||||||
|
var getCurrentBranchCmd = execCmd{
|
||||||
|
cmd: "git",
|
||||||
|
args: []string{"symbolic-ref", "--short", "HEAD"},
|
||||||
|
}
|
||||||
|
|
||||||
func getCurrentBranch() (string, error) {
|
func getCurrentBranch() (string, error) {
|
||||||
cmd := exec.Command("git", "symbolic-ref", "--short", "HEAD")
|
cmd := exec.Command(getCurrentBranchCmd.cmd, getCurrentBranchCmd.args...)
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
cmd.Stdout = &out
|
cmd.Stdout = &out
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
|
|||||||
@@ -482,21 +482,29 @@ func DeleteBackupSecrets() error {
|
|||||||
return os.RemoveAll(fullPathToSecretsBackupFolder)
|
return os.RemoveAll(fullPathToSecretsBackupFolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetEnvelopmentBasedOnGitBranch() string {
|
func GetEnvFromWorkspaceFile() string {
|
||||||
|
workspaceFile, err := GetWorkSpaceFromFile()
|
||||||
|
if err != nil {
|
||||||
|
log.Debugf("getEnvFromWorkspaceFile: [err=%s]", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
if env := GetEnvelopmentBasedOnGitBranch(workspaceFile); env != "" {
|
||||||
|
return env
|
||||||
|
}
|
||||||
|
|
||||||
|
return workspaceFile.DefaultEnvironment
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetEnvelopmentBasedOnGitBranch(workspaceFile models.WorkspaceConfigFile) string {
|
||||||
branch, err := getCurrentBranch()
|
branch, err := getCurrentBranch()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
|
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
workspaceFile, err := GetWorkSpaceFromFile()
|
|
||||||
if err != nil {
|
|
||||||
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
envBasedOnGitBranch, ok := workspaceFile.GitBranchToEnvironmentMapping[branch]
|
envBasedOnGitBranch, ok := workspaceFile.GitBranchToEnvironmentMapping[branch]
|
||||||
|
|
||||||
log.Debugf("GetEnvelopmentBasedOnGitBranch: [envBasedOnGitBranch=%s] [ok=%s]", envBasedOnGitBranch, ok)
|
log.Debugf("GetEnvelopmentBasedOnGitBranch: [envBasedOnGitBranch=%s] [ok=%t]", envBasedOnGitBranch, ok)
|
||||||
|
|
||||||
if err == nil && ok {
|
if err == nil && ok {
|
||||||
return envBasedOnGitBranch
|
return envBasedOnGitBranch
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/Infisical/infisical-merge/packages/models"
|
"github.com/Infisical/infisical-merge/packages/models"
|
||||||
@@ -158,3 +161,98 @@ func Test_SubstituteSecrets_When_No_SubstituteNeeded(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_Read_Env_From_File(t *testing.T) {
|
||||||
|
type testCase struct {
|
||||||
|
TestFile string
|
||||||
|
ExpectedEnv string
|
||||||
|
}
|
||||||
|
|
||||||
|
var cases = []testCase{
|
||||||
|
{
|
||||||
|
TestFile: "testdata/infisical-default-env.json",
|
||||||
|
ExpectedEnv: "myDefaultEnv",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TestFile: "testdata/infisical-branch-env.json",
|
||||||
|
ExpectedEnv: "myMainEnv",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TestFile: "testdata/infisical-no-matching-branch-env.json",
|
||||||
|
ExpectedEnv: "myDefaultEnv",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a tmp directory for testing
|
||||||
|
testDir, err := os.MkdirTemp(os.TempDir(), "infisical-test")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Failed to create temp directory: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// safe the current working directory
|
||||||
|
originalDir, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Failed to get current working directory: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// backup the original git command
|
||||||
|
originalGitCmd := getCurrentBranchCmd
|
||||||
|
|
||||||
|
// make sure to clean up after the test
|
||||||
|
t.Cleanup(func() {
|
||||||
|
os.Chdir(originalDir)
|
||||||
|
os.RemoveAll(testDir)
|
||||||
|
getCurrentBranchCmd = originalGitCmd
|
||||||
|
})
|
||||||
|
|
||||||
|
// mock the git command to return "main" as the current branch
|
||||||
|
getCurrentBranchCmd = execCmd{cmd: "echo", args: []string{"main"}}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
// make sure we start in the original directory
|
||||||
|
err = os.Chdir(originalDir)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Failed to change working directory: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove old test file if it exists
|
||||||
|
err = os.Remove(path.Join(testDir, INFISICAL_WORKSPACE_CONFIG_FILE_NAME))
|
||||||
|
if err != nil && !os.IsNotExist(err) {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Failed to remove old test file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// deploy the test file
|
||||||
|
copyTestFile(t, c.TestFile, path.Join(testDir, INFISICAL_WORKSPACE_CONFIG_FILE_NAME))
|
||||||
|
|
||||||
|
// change the working directory to the tmp directory
|
||||||
|
err = os.Chdir(testDir)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Failed to change working directory: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get env from file
|
||||||
|
env := GetEnvFromWorkspaceFile()
|
||||||
|
if env != c.ExpectedEnv {
|
||||||
|
t.Errorf("Test_Read_DefaultEnv_From_File: Expected env to be %s but got %s", c.ExpectedEnv, env)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyTestFile(t *testing.T, src, dst string) {
|
||||||
|
srcFile, err := os.Open(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_Env_From_File_By_Branch: Failed to open source file: %s", err)
|
||||||
|
}
|
||||||
|
defer srcFile.Close()
|
||||||
|
|
||||||
|
dstFile, err := os.Create(dst)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_Env_From_File_By_Branch: Failed to create destination file: %s", err)
|
||||||
|
}
|
||||||
|
defer dstFile.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(dstFile, srcFile)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Test_Read_Env_From_File_By_Branch: Failed to copy file: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
7
cli/packages/util/testdata/infisical-branch-env.json
vendored
Normal file
7
cli/packages/util/testdata/infisical-branch-env.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"workspaceId": "12345678",
|
||||||
|
"defaultEnvironment": "myDefaultEnv",
|
||||||
|
"gitBranchToEnvironmentMapping": {
|
||||||
|
"main": "myMainEnv"
|
||||||
|
}
|
||||||
|
}
|
||||||
5
cli/packages/util/testdata/infisical-default-env.json
vendored
Normal file
5
cli/packages/util/testdata/infisical-default-env.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"workspaceId": "12345678",
|
||||||
|
"defaultEnvironment": "myDefaultEnv",
|
||||||
|
"gitBranchToEnvironmentMapping": null
|
||||||
|
}
|
||||||
7
cli/packages/util/testdata/infisical-no-matching-branch-env.json
vendored
Normal file
7
cli/packages/util/testdata/infisical-no-matching-branch-env.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"workspaceId": "12345678",
|
||||||
|
"defaultEnvironment": "myDefaultEnv",
|
||||||
|
"gitBranchToEnvironmentMapping": {
|
||||||
|
"notmain": "myMainEnv"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user