{"record":{"id":"5dc963d700cdbb41","repo":"grafana/k6","slug":"setting-downloads-path-w","errorCode":null,"errorMessage":"setting downloads path: %w","messagePattern":"setting downloads path: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/browser/common/browser_context.go","lineNumber":157,"sourceCode":"\t\tlogger:           logger,\n\t\ttimeoutSettings:  NewTimeoutSettings(nil),\n\t}\n\n\tif len(opts.Permissions) > 0 {\n\t\terr := b.GrantPermissions(opts.Permissions, GrantPermissionsOptions{})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err := b.AddInitScript(js.WebVitalIIFEScript); err != nil {\n\t\treturn nil, fmt.Errorf(\"adding web vital script to new browser context: %w\", err)\n\t}\n\tif err := b.AddInitScript(js.WebVitalInitScript); err != nil {\n\t\treturn nil, fmt.Errorf(\"adding web vital init script to new browser context: %w\", err)\n\t}\n\tif err := b.setDownloadsPath(opts.DownloadsPath); err != nil {\n\t\treturn nil, fmt.Errorf(\"setting downloads path: %w\", err)\n\t}\n\n\treturn &b, nil\n}\n\n// AddInitScript adds a script that will be initialized on all new pages.\nfunc (b *BrowserContext) AddInitScript(script string) error {\n\tb.logger.Debugf(\"BrowserContext:AddInitScript\", \"bctxid:%v\", b.id)\n\n\tb.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)\n\n\tfor _, p := range b.browser.getPages() {\n\t\tif err := p.evaluateOnNewDocument(script); err != nil {\n\t\t\treturn fmt.Errorf(\"adding init script to browser context: %w\", err)\n\t\t}\n\t}\n\n\treturn nil","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/grafana/k6/blob/93accf6570dcd306ca5e99cc44c393ee3797761b/internal/js/modules/k6/browser/common/browser_context.go#L139-L175","documentation":"NewBrowserContext calls setDownloadsPath(opts.DownloadsPath) last (browser_context.go:157); when no downloadsPath option was given, that resolves to the same os.MkdirTemp(TMPDIR, 'artifacts-*') as error 606, and a failure is wrapped as 'setting downloads path: %w'. Same root causes, reported at the context-constructor level.","triggerScenarios":"Unset/unwritable/missing TMPDIR; read-only root filesystem; ENOSPC; EACCES from security policy — all at the moment the context is constructed.","commonSituations":"Hardened containers with readOnlyRootFilesystem and no writable /tmp; CI runners with disk quotas; misconfigured TMPDIR env var.","solutions":["Pass a writable downloadsPath in newContext() options","Point TMPDIR at a writable directory","Free space or raise ephemeral-storage limits","Mount a writable tmpfs at /tmp in read-only-rootfs pods"],"exampleFix":"// before\nconst ctx = browser.newContext()\n\n// after\nconst ctx = browser.newContext({ downloadsPath: '/mnt/vol/downloads' })","handlingStrategy":"validation","validationCode":"const ctx = browser.newContext({ downloadsPath: '/writable/k6-downloads' })","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set downloadsPath explicitly","Verify TMPDIR is writable in your container image","Raise ephemeral storage limits if CI disks are tight"],"tags":["filesystem","temp-dir","downloads","container","environment"],"backgroundTag":null,"analyzedSha":"93accf6570dcd306ca5e99cc44c393ee3797761b","analyzedAt":"2026-08-15T21:23:27.118Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}