grafana/k6 · error
setting downloads path: %w
Error message
setting downloads path: %w
What it means
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.
Source
Thrown at internal/js/modules/k6/browser/common/browser_context.go:157
logger: logger,
timeoutSettings: NewTimeoutSettings(nil),
}
if len(opts.Permissions) > 0 {
err := b.GrantPermissions(opts.Permissions, GrantPermissionsOptions{})
if err != nil {
return nil, err
}
}
if err := b.AddInitScript(js.WebVitalIIFEScript); err != nil {
return nil, fmt.Errorf("adding web vital script to new browser context: %w", err)
}
if err := b.AddInitScript(js.WebVitalInitScript); err != nil {
return nil, fmt.Errorf("adding web vital init script to new browser context: %w", err)
}
if err := b.setDownloadsPath(opts.DownloadsPath); err != nil {
return nil, fmt.Errorf("setting downloads path: %w", err)
}
return &b, nil
}
// AddInitScript adds a script that will be initialized on all new pages.
func (b *BrowserContext) AddInitScript(script string) error {
b.logger.Debugf("BrowserContext:AddInitScript", "bctxid:%v", b.id)
b.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)
for _, p := range b.browser.getPages() {
if err := p.evaluateOnNewDocument(script); err != nil {
return fmt.Errorf("adding init script to browser context: %w", err)
}
}
return nilView on GitHub (pinned to 93accf6570)
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
Example fix
// before
const ctx = browser.newContext()
// after
const ctx = browser.newContext({ downloadsPath: '/mnt/vol/downloads' }) Defensive patterns
Strategy: validation
Validate before calling
const ctx = browser.newContext({ downloadsPath: '/writable/k6-downloads' }) Prevention
- Always set downloadsPath explicitly
- Verify TMPDIR is writable in your container image
- Raise ephemeral storage limits if CI disks are tight
When it happens
Trigger: Unset/unwritable/missing TMPDIR; read-only root filesystem; ENOSPC; EACCES from security policy — all at the moment the context is constructed.
Common situations: Hardened containers with readOnlyRootFilesystem and no writable /tmp; CI runners with disk quotas; misconfigured TMPDIR env var.
Related errors
- creating temporary directory for downloads: %w
- open() failed; reason: unable to access the file system
- removing downloads path: %w
- both K6_CLOUD_METRICS_PUSH_URL and K6_CLOUD_TEST_RUN_TOKEN m
- K6_CLOUD_LOGS_PUSH_URL requires K6_CLOUD_TEST_RUN_TOKEN
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/5dc963d700cdbb41.
Report an issue: GitHub.