feat(cli): support INFISICAL_PROJECT_ID environment variable#155
feat(cli): support INFISICAL_PROJECT_ID environment variable#155tysoncung wants to merge 1 commit intoInfisical:mainfrom
Conversation
Add support for the INFISICAL_PROJECT_ID environment variable as a fallback when the --projectId flag is not provided. This enables full CI/CD automation without requiring CLI flags for every command. The environment variable is checked in all commands that accept --projectId: run, export, secrets, folders, dynamic-secrets, tokens, and ssh. Closes Infisical/infisical#2912
Greptile SummaryThis PR adds
Confidence Score: 4/5
Important Files Changed
Last reviewed commit: "feat(cli): support I..." |
| if projectId == "" { | ||
| projectId = os.Getenv(INFISICAL_PROJECT_ID_NAME) | ||
| } |
There was a problem hiding this comment.
Missing whitespace trimming for env var
The existing GetCmdFlagOrEnvWithDefaultValue and GetCmdFlagOrEnv helpers both apply strings.TrimSpace() when reading values from environment variables. GetProjectIdFromFlag skips this step, so a value like INFISICAL_PROJECT_ID=" abc123 " (with leading/trailing spaces) would be passed verbatim to API calls and silently fail. Consider trimming, or simply delegate to the existing helper:
| if projectId == "" { | |
| projectId = os.Getenv(INFISICAL_PROJECT_ID_NAME) | |
| } | |
| if projectId == "" { | |
| projectId = strings.TrimSpace(os.Getenv(INFISICAL_PROJECT_ID_NAME)) | |
| } |
| func GetProjectIdFromFlag(cmd *cobra.Command) (string, error) { | ||
| projectId, err := cmd.Flags().GetString("projectId") | ||
| if err != nil { | ||
| return "", err | ||
| } | ||
|
|
||
| if projectId == "" { | ||
| projectId = os.Getenv(INFISICAL_PROJECT_ID_NAME) | ||
| } | ||
|
|
||
| return projectId, nil | ||
| } |
There was a problem hiding this comment.
Reuse existing
GetCmdFlagOrEnvWithDefaultValue helper
The repo already has GetCmdFlagOrEnvWithDefaultValue that performs exactly this flag-then-env-var lookup (including whitespace trimming). GetProjectIdFromFlag reimplements the same logic, creating a second source of truth. Consider delegating to the existing utility to avoid the divergence:
| func GetProjectIdFromFlag(cmd *cobra.Command) (string, error) { | |
| projectId, err := cmd.Flags().GetString("projectId") | |
| if err != nil { | |
| return "", err | |
| } | |
| if projectId == "" { | |
| projectId = os.Getenv(INFISICAL_PROJECT_ID_NAME) | |
| } | |
| return projectId, nil | |
| } | |
| func GetProjectIdFromFlag(cmd *cobra.Command) (string, error) { | |
| return GetCmdFlagOrEnvWithDefaultValue(cmd, "projectId", []string{INFISICAL_PROJECT_ID_NAME}, "") | |
| } |
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Summary
Add support for the
INFISICAL_PROJECT_IDenvironment variable as a fallback when the--projectIdflag is not provided. This enables full CI/CD automation without requiring CLI flags for every command.Problem
Currently, users must pass
--projectIdas a CLI flag for commands likerun,export,secrets, etc. WhileINFISICAL_TOKENcan be set as an environment variable for authentication, there's no equivalent for the project ID. This breaks CI/CD workflows where you want to configure everything via environment variables.See: Infisical/infisical#2912
Changes
INFISICAL_PROJECT_ID_NAMEconstant topackages/util/constants.goGetProjectIdFromFlag()helper inpackages/util/helper.gothat checks the--projectIdflag first, then falls back to theINFISICAL_PROJECT_IDenv var--projectIdto use the new helper:runexportsecrets(get, set, delete, list, generate-example-env)folders(get, create, delete)dynamic-secrets(all lease subcommands)tokens(create)ssh(add-host)Usage
Flag takes precedence over the environment variable when both are set.
Closes Infisical/infisical#2912