allow git branch mapping to env

This commit is contained in:
Maidul Islam
2023-02-23 00:00:56 -05:00
parent f92269f2ec
commit bd233ebe9b
6 changed files with 90 additions and 35 deletions
+7 -4
View File
@@ -36,9 +36,12 @@ var exportCmd = &cobra.Command{
// util.RequireLocalWorkspaceFile() // util.RequireLocalWorkspaceFile()
}, },
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
envName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err) environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
shouldExpandSecrets, err := cmd.Flags().GetBool("expand") shouldExpandSecrets, err := cmd.Flags().GetBool("expand")
@@ -66,7 +69,7 @@ var exportCmd = &cobra.Command{
util.HandleError(err, "Unable to parse flag") util.HandleError(err, "Unable to parse flag")
} }
secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs})
if err != nil { if err != nil {
util.HandleError(err, "Unable to fetch secrets") util.HandleError(err, "Unable to fetch secrets")
} }
+7 -4
View File
@@ -54,9 +54,12 @@ var runCmd = &cobra.Command{
return nil return nil
}, },
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
envName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err, "Unable to parse flag") environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
infisicalToken, err := cmd.Flags().GetString("token") infisicalToken, err := cmd.Flags().GetString("token")
@@ -79,7 +82,7 @@ var runCmd = &cobra.Command{
util.HandleError(err, "Unable to parse flag") util.HandleError(err, "Unable to parse flag")
} }
secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: envName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs}) secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs})
if err != nil { if err != nil {
util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid") util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid")
+30 -18
View File
@@ -19,7 +19,6 @@ import (
"github.com/Infisical/infisical-merge/packages/util" "github.com/Infisical/infisical-merge/packages/util"
"github.com/Infisical/infisical-merge/packages/visualize" "github.com/Infisical/infisical-merge/packages/visualize"
"github.com/go-resty/resty/v2" "github.com/go-resty/resty/v2"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -31,9 +30,12 @@ var secretsCmd = &cobra.Command{
PreRun: toggleDebug, PreRun: toggleDebug,
Args: cobra.NoArgs, Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
environmentName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err) environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
infisicalToken, err := cmd.Flags().GetString("token") infisicalToken, err := cmd.Flags().GetString("token")
@@ -94,9 +96,12 @@ var secretsSetCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
util.RequireLocalWorkspaceFile() util.RequireLocalWorkspaceFile()
environmentName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err, "Unable to parse flag") environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
workspaceFile, err := util.GetWorkSpaceFromFile() workspaceFile, err := util.GetWorkSpaceFromFile()
@@ -270,11 +275,12 @@ var secretsDeleteCmd = &cobra.Command{
PreRun: toggleDebug, PreRun: toggleDebug,
Args: cobra.MinimumNArgs(1), Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
environmentName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
log.Errorln("Unable to parse the environment name flag") environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
log.Debugln(err) if environmentFromWorkspace != "" {
return environmentName = environmentFromWorkspace
}
} }
loggedInUserDetails, err := util.GetCurrentLoggedInUserDetails() loggedInUserDetails, err := util.GetCurrentLoggedInUserDetails()
@@ -330,9 +336,12 @@ var secretsDeleteCmd = &cobra.Command{
} }
func getSecretsByNames(cmd *cobra.Command, args []string) { func getSecretsByNames(cmd *cobra.Command, args []string) {
environmentName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err, "Unable to parse flag") environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
infisicalToken, err := cmd.Flags().GetString("token") infisicalToken, err := cmd.Flags().GetString("token")
@@ -373,9 +382,12 @@ func getSecretsByNames(cmd *cobra.Command, args []string) {
} }
func generateExampleEnv(cmd *cobra.Command, args []string) { func generateExampleEnv(cmd *cobra.Command, args []string) {
environmentName, err := cmd.Flags().GetString("env") environmentName, _ := cmd.Flags().GetString("env")
if err != nil { if !cmd.Flags().Changed("env") {
util.HandleError(err, "Unable to parse flag") environmentFromWorkspace := util.GetEnvelopmentBasedOnGitBranch()
if environmentFromWorkspace != "" {
environmentName = environmentFromWorkspace
}
} }
infisicalToken, err := cmd.Flags().GetString("token") infisicalToken, err := cmd.Flags().GetString("token")
+7 -5
View File
@@ -39,8 +39,9 @@ type Workspace struct {
} }
type WorkspaceConfigFile struct { type WorkspaceConfigFile struct {
WorkspaceId string `json:"workspaceId"` WorkspaceId string `json:"workspaceId"`
DefaultEnvironment string `json:"defaultEnvironment"` DefaultEnvironment string `json:"defaultEnvironment"`
GitBranchToEnvironmentMapping map[string]string `json:"gitBranchToEnvironmentMapping"`
} }
type SymmetricEncryptionResult struct { type SymmetricEncryptionResult struct {
@@ -50,7 +51,8 @@ type SymmetricEncryptionResult struct {
} }
type GetAllSecretsParameters struct { type GetAllSecretsParameters struct {
Environment string Environment string
InfisicalToken string EnvironmentPassedViaFlag bool
TagSlugs string InfisicalToken string
TagSlugs string
} }
+15
View File
@@ -1,10 +1,14 @@
package util package util
import ( import (
"bytes"
"crypto/sha256" "crypto/sha256"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"os" "os"
"os/exec"
"path"
"strings"
) )
type DecodedSymmetricEncryptionDetails = struct { type DecodedSymmetricEncryptionDetails = struct {
@@ -110,3 +114,14 @@ func GetHashFromStringList(list []string) string {
sum := sha256.Sum256(hash.Sum(nil)) sum := sha256.Sum256(hash.Sum(nil))
return fmt.Sprintf("%x", sum) return fmt.Sprintf("%x", sum)
} }
func getCurrentBranch() (string, error) {
cmd := exec.Command("git", "symbolic-ref", "--short", "HEAD")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
return "", err
}
return path.Base(strings.TrimSpace(out.String())), nil
}
+24 -4
View File
@@ -131,10 +131,6 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters) ([]models
return nil, err return nil, err
} }
if workspaceFile.DefaultEnvironment != "" {
params.Environment = workspaceFile.DefaultEnvironment
}
// Verify environment // Verify environment
err = ValidateEnvironmentName(params.Environment, workspaceFile.WorkspaceId, loggedInUserDetails.UserCredentials) err = ValidateEnvironmentName(params.Environment, workspaceFile.WorkspaceId, loggedInUserDetails.UserCredentials)
if err != nil { if err != nil {
@@ -485,3 +481,27 @@ func DeleteBackupSecrets() error {
return os.RemoveAll(fullPathToSecretsBackupFolder) return os.RemoveAll(fullPathToSecretsBackupFolder)
} }
func GetEnvelopmentBasedOnGitBranch() string {
branch, err := getCurrentBranch()
if err != nil {
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
}
workspaceFile, err := GetWorkSpaceFromFile()
if err != nil {
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
return ""
}
envBasedOnGitBranch, ok := workspaceFile.GitBranchToEnvironmentMapping[branch]
log.Debugf("GetEnvelopmentBasedOnGitBranch: [envBasedOnGitBranch=%s] [ok=%s]", envBasedOnGitBranch, ok)
if err == nil && ok {
return envBasedOnGitBranch
} else {
log.Debugf("getEnvelopmentBasedOnGitBranch: [err=%s]", err)
return ""
}
}