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 nil

View on GitHub (pinned to 93accf6570)

Solutions

  1. Pass a writable downloadsPath in newContext() options
  2. Point TMPDIR at a writable directory
  3. Free space or raise ephemeral-storage limits
  4. 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

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


AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15). Data as JSON: /api/errors/5dc963d700cdbb41. Report an issue: GitHub.