{"record":{"id":"febedf32c9db2dc6","repo":"wavetermdev/waveterm","slug":"s-environment-variable-must-be-set","errorCode":null,"errorMessage":"%s environment variable must be set","messagePattern":"(.+?) environment variable must be set","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"tsunami/cmd/main-tsunami.go","lineNumber":42,"sourceCode":"var rootCmd = &cobra.Command{\n\tUse:   \"tsunami\",\n\tShort: \"Tsunami - A VDOM-based UI framework\",\n\tLong:  `Tsunami is a VDOM-based UI framework for building modern applications.`,\n}\n\nvar versionCmd = &cobra.Command{\n\tUse:   \"version\",\n\tShort: \"Print Tsunami version\",\n\tLong:  `Print Tsunami version`,\n\tRun: func(cmd *cobra.Command, args []string) {\n\t\tfmt.Println(\"v\" + tsunamibase.TsunamiVersion)\n\t},\n}\n\nfunc validateEnvironmentVars(opts *build.BuildOpts) error {\n\tscaffoldPath := os.Getenv(EnvTsunamiScaffoldPath)\n\tif scaffoldPath == \"\" {\n\t\treturn fmt.Errorf(\"%s environment variable must be set\", EnvTsunamiScaffoldPath)\n\t}\n\tabsScaffoldPath, err := filepath.Abs(scaffoldPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to resolve %s to absolute path: %w\", EnvTsunamiScaffoldPath, err)\n\t}\n\n\tsdkReplacePath := os.Getenv(EnvTsunamiSdkReplacePath)\n\tif sdkReplacePath == \"\" {\n\t\treturn fmt.Errorf(\"%s environment variable must be set\", EnvTsunamiSdkReplacePath)\n\t}\n\tabsSdkReplacePath, err := filepath.Abs(sdkReplacePath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to resolve %s to absolute path: %w\", EnvTsunamiSdkReplacePath, err)\n\t}\n\n\topts.ScaffoldPath = absScaffoldPath\n\topts.SdkReplacePath = absSdkReplacePath\n","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/wavetermdev/waveterm/blob/a4447c1563b2df285ab89e76c82f91e1a1a49c1e/tsunami/cmd/main-tsunami.go#L24-L60","documentation":"The tsunami build tool requires the EnvTsunamiScaffoldPath environment variable to point at the scaffold module used to generate new tsunami apps. validateEnvironmentVars aborts the build early if it is unset or empty.","triggerScenarios":"Running main-tsunami (build entrypoint) without TSUNAMI_SCAFFOLD_PATH exported in the environment.","commonSituations":"Running the CLI in a fresh shell/CI job where the env var was never set; invoking the tool from an IDE that does not inherit your shell env; typos in the variable name in your profile.","solutions":["Export EnvTsunamiScaffoldPath (see its constant value, e.g. export TSUNAMI_SCAFFOLD_PATH=/path/to/scaffold) before running the command","Set it in CI configuration/secrets for the pipeline","Add it to your shell profile so it persists"],"exampleFix":"// before\n$ tsunami build ./myapp\n// after\n$ export TSUNAMI_SCAFFOLD_PATH=$HOME/go/src/github.com/org/tsunami-scaffold\n$ tsunami build ./myapp","handlingStrategy":"validation","validationCode":"if os.Getenv(\"TSUNAMI_SCAFFOLD_PATH\") == \"\" {\n    return errors.New(\"TSUNAMI_SCAFFOLD_PATH must be set\")\n}","typeGuard":null,"tryCatchPattern":"if err := validateEnvironmentVars(opts); err != nil {\n    log.Fatalf(\"env validation failed: %v\", err)\n}","preventionTips":["Export required env vars in shell profile / CI config","Add a preflight `env | grep TSUNAMI` check in scripts","Use a .env loader so the CLI never runs without them"],"tags":["go","environment","cli","configuration"],"backgroundTag":"missing-env-var","analyzedSha":"a4447c1563b2df285ab89e76c82f91e1a1a49c1e","analyzedAt":"2026-09-01T15:26:23.972Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}