{"record":{"id":"92a0962b0f2ea434","repo":"grafana/k6","slug":"invalid-stack-url-w-92a096","errorCode":null,"errorMessage":"invalid stack URL: %w","messagePattern":"invalid stack URL: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/cmd/cloud.go","lineNumber":614,"sourceCode":"\tif projectID > 0 {\n\t\ttmpCloudConfig[\"projectID\"] = projectID\n\n\t\tb, err := json.Marshal(tmpCloudConfig)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tarc.Options.Cloud = b\n\n\t\tcloudConfig.ProjectID = null.IntFrom(projectID)\n\t}\n\treturn nil\n}\n\nfunc resolveCloudTestURL(stackURL string, testID int64) (string, error) {\n\tu, err := url.Parse(stackURL)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"invalid stack URL: %w\", err)\n\t}\n\n\treturn u.JoinPath(\"a\", \"k6-app\", \"tests\", strconv.FormatInt(testID, 10)).String(), nil\n}\n","sourceCodeStart":596,"sourceCodeEnd":619,"githubUrl":"https://github.com/grafana/k6/blob/94169daab29df52c1ed2ee0549657a577666b855/internal/cmd/cloud.go#L596-L619","documentation":"resolveCloudTestURL could not parse the configured stack URL while building the test details link (…/a/k6-app/tests/<id>) shown after a cloud upload/run. url.Parse only errors on fundamentally malformed strings (control characters, bad percent-escapes), so the stack URL stored in cloudConfig.StackURL.String is corrupt even though the API calls themselves may have succeeded via a different host setting.","triggerScenarios":"StackURL copied from config or env containing a newline/control character, invalid %-sequence like %zz, or a value like '\\\"https://x\\\"' with literal quotes surviving into the config file.","commonSituations":"Hand-edited or templated config files (Helm values, dotenv) introducing quotes/escapes, CI secrets with trailing newlines, or Windows CRLF artifacts in the login config.","solutions":["Re-run `k6 cloud login` to rewrite a clean stack URL","Inspect the stored value (print with %q) and strip quotes, whitespace, and control characters","Validate K6_CLOUD_STACK_URL in your provisioning scripts before injecting it into k6 config"],"exampleFix":"// before\nu, err := url.Parse(stackURL)\nif err != nil { return \"\", fmt.Errorf(\"invalid stack URL: %w\", err) }\n\n// after\nstackURL = strings.TrimSpace(strings.Trim(stackURL, \"\\\"'\"))\nu, err := url.Parse(stackURL)\nif err != nil || u.Scheme == \"\" || u.Host == \"\" {\n    return \"\", fmt.Errorf(\"stack URL %q must be a full https URL\", stackURL)\n}","handlingStrategy":"validation","validationCode":"func normalizeStackURL(raw string) (string, error) {\n    raw = strings.TrimSpace(strings.Trim(raw, \"\\\"'\"))\n    u, err := url.Parse(raw)\n    if err != nil || u.Scheme == \"\" || u.Host == \"\" {\n        return \"\", fmt.Errorf(\"stack URL %q is not a full https URL\", raw)\n    }\n    return u.String(), nil\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Sanitize stack URLs (trim quotes/whitespace) wherever config is injected","Regenerate login config with `k6 cloud login` after templating changes","Unit-test URL helpers with quoted/CRLF inputs in your config tooling"],"tags":["url-parsing","config","stack-url","cloud-api"],"backgroundTag":"invalid-url","analyzedSha":"94169daab29df52c1ed2ee0549657a577666b855","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":"2026-08-18T03:05:52.393Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}