Copy disabled (too large)
Download .txt
Showing preview only (16,596K chars total). Download the full file to get everything.
Repository: grafana/k6
Branch: master
Commit: 3fdfa3baa7e5
Files: 3946
Total size: 53.5 MB
Directory structure:
gitextract_i428iejx/
├── .codecov.yaml
├── .dockerignore
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yaml
│ │ ├── config.yml
│ │ ├── feat_req.yaml
│ │ └── release.md
│ ├── actions/
│ │ ├── lint/
│ │ │ └── action.yml
│ │ ├── test/
│ │ │ └── action.yml
│ │ ├── test-browser/
│ │ │ └── action.yml
│ │ └── test-common/
│ │ └── action.yml
│ ├── pull_request_template.md
│ ├── workflows/
│ │ ├── browser_e2e.yml
│ │ ├── build.yml
│ │ ├── codeql-analysis.yml
│ │ ├── issue-auto-assign.yml
│ │ ├── lint.yml
│ │ ├── packager.yml
│ │ ├── publish-techdocs.yaml
│ │ ├── stale.yml
│ │ ├── summary-code-generation.yml
│ │ ├── tc39.yml
│ │ ├── test-browser.yml
│ │ ├── test.yml
│ │ ├── wpt.yml
│ │ ├── xk6-tests/
│ │ │ ├── xk6-js-test/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── jstest.go
│ │ │ ├── xk6-output-test/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── outputtest.go
│ │ │ └── xk6-test.js
│ │ └── xk6.yml
│ └── zizmor.yml
├── .gitignore
├── .golangci.yml
├── AGENTS.md
├── CLAUDE.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dependencies.md
├── Dockerfile
├── LICENSE.md
├── Makefile
├── README.md
├── SUPPORT.md
├── api/
│ └── v1/
│ ├── client/
│ │ ├── client.go
│ │ ├── metrics.go
│ │ └── status.go
│ ├── control_surface.go
│ ├── errors.go
│ ├── group.go
│ ├── group_jsonapi.go
│ ├── group_routes.go
│ ├── group_routes_test.go
│ ├── group_test.go
│ ├── metric.go
│ ├── metric_jsonapi.go
│ ├── metric_routes.go
│ ├── metric_routes_test.go
│ ├── metric_test.go
│ ├── routes.go
│ ├── setup_jsonapi.go
│ ├── setup_teardown_routes.go
│ ├── setup_teardown_routes_test.go
│ ├── status.go
│ ├── status_jsonapi.go
│ ├── status_routes.go
│ └── status_routes_test.go
├── build-release.sh
├── catalog-info.yaml
├── cloudapi/
│ ├── api.go
│ ├── api_test.go
│ ├── client.go
│ ├── cloudapi_easyjson.go
│ ├── config.go
│ ├── config_test.go
│ ├── doc.go
│ ├── errors.go
│ ├── errors_test.go
│ ├── logs.go
│ ├── logs_test.go
│ ├── run_status.go
│ ├── util.go
│ └── util_test.go
├── cmd/
│ ├── execute.go
│ ├── state/
│ │ ├── doc.go
│ │ ├── env.go
│ │ └── state.go
│ └── tests/
│ └── global_state.go
├── docs/
│ ├── design/
│ │ ├── 018-new-http-api.md
│ │ ├── 019-file-api.md
│ │ └── 020-distributed-execution-and-test-suites.md
│ └── mkdocs.yml
├── errext/
│ ├── abort_reason.go
│ ├── errext_test.go
│ ├── exception.go
│ ├── exit_code.go
│ ├── exitcodes/
│ │ └── codes.go
│ ├── format.go
│ ├── format_test.go
│ ├── hint.go
│ └── interrupt_error.go
├── examples/
│ ├── base64.js
│ ├── browser/
│ │ ├── colorscheme.js
│ │ ├── cookies.js
│ │ ├── device_emulation.js
│ │ ├── dispatch.js
│ │ ├── elementstate.js
│ │ ├── evaluate.js
│ │ ├── fillform.js
│ │ ├── framelocator.js
│ │ ├── getattribute.js
│ │ ├── grant_permission.js
│ │ ├── hosts.js
│ │ ├── keyboard.js
│ │ ├── locator.js
│ │ ├── locator_filter.js
│ │ ├── locator_pom.js
│ │ ├── mouse.js
│ │ ├── multiple-scenario.js
│ │ ├── page_waitForEvent.js
│ │ ├── pageon-metric.js
│ │ ├── pageon-request.js
│ │ ├── pageon-requestfailed.js
│ │ ├── pageon-requestfinished.js
│ │ ├── pageon.js
│ │ ├── querying.js
│ │ ├── route.js
│ │ ├── route_continue.js
│ │ ├── screenshot.js
│ │ ├── shadowdom.js
│ │ ├── throttle.js
│ │ ├── touchscreen.js
│ │ ├── useragent.js
│ │ ├── waitForEvent.js
│ │ └── waitforfunction.js
│ ├── config.json
│ ├── cookies.js
│ ├── crypto.js
│ ├── custom_metrics.js
│ ├── docker-compose/
│ │ ├── influxdb-v1/
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── grafana/
│ │ │ │ ├── dashboards/
│ │ │ │ │ ├── dashboard.yml
│ │ │ │ │ └── performance-test-dasboard.json
│ │ │ │ └── datasources/
│ │ │ │ └── datasource.yml
│ │ │ └── script.js
│ │ └── opentelemetry/
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── grafana/
│ │ │ ├── alloy/
│ │ │ │ └── config.alloy
│ │ │ ├── dashboards/
│ │ │ │ ├── dashboards.yaml
│ │ │ │ └── k6-prometheus.json
│ │ │ └── datasources/
│ │ │ └── datasource.yaml
│ │ └── script.js
│ ├── enhanced/
│ │ ├── abort.ts
│ │ ├── script.ts
│ │ └── user.ts
│ ├── es6sample.js
│ ├── experimental/
│ │ ├── csv-parse.js
│ │ ├── csv-parser.js
│ │ ├── data.csv
│ │ ├── docker-compose.yml
│ │ ├── fs/
│ │ │ ├── bonjour.txt
│ │ │ └── fs.js
│ │ ├── redis.js
│ │ └── streams.js
│ ├── grafana_dashboard_influxdb.json
│ ├── graphql.js
│ ├── grpc_client_streaming.js
│ ├── grpc_healthcheck.js
│ ├── grpc_invoke.js
│ ├── grpc_reflection.js
│ ├── grpc_server/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── grpc_server_streaming.js
│ ├── html_form_post.js
│ ├── http_2.js
│ ├── http_basic_auth.js
│ ├── http_batch.js
│ ├── http_digest_auth.js
│ ├── http_get.js
│ ├── http_verbs.js
│ ├── json.js
│ ├── jwt.js
│ ├── localhost.js
│ ├── logging.js
│ ├── malicious.js
│ ├── ocsp.js
│ ├── pantheon.js
│ ├── pantheontest.js
│ ├── redirects.js
│ ├── secrets/
│ │ ├── file.secret
│ │ ├── mock_server.go
│ │ ├── multi-source.test.js
│ │ ├── secrets.test.js
│ │ ├── totp.test.js
│ │ ├── url-config.json
│ │ └── url-source.test.js
│ ├── source_map/
│ │ ├── issue_1804/
│ │ │ ├── imported.js
│ │ │ └── main.js
│ │ └── typescript_template/
│ │ ├── test1.js
│ │ └── test1.ts
│ ├── stages.js
│ ├── tagging.js
│ ├── thresholds.js
│ ├── thresholds_readme_example.js
│ ├── timers.js
│ ├── tls_skip_cert_verification.js
│ ├── tlsconfig.js
│ ├── webcrypto/
│ │ ├── README.md
│ │ ├── derive_bits/
│ │ │ ├── derive-bits-ecdh.js
│ │ │ └── derive-bits-pbkdf2.js
│ │ ├── derive_key/
│ │ │ └── derive-key-pbkdf2.js
│ │ ├── digest.js
│ │ ├── encrypt_decrypt/
│ │ │ ├── encrypt-decrypt-aes-cbc.js
│ │ │ ├── encrypt-decrypt-aes-ctr.js
│ │ │ ├── encrypt-decrypt-aes-gcm.js
│ │ │ └── encrypt-decrypt-rsa.js
│ │ ├── generateKey/
│ │ │ ├── generateKey-RSA-PSS.js
│ │ │ ├── generateKey-RSASSA-PKCS1-v1_5.js
│ │ │ ├── generateKey-aes.js
│ │ │ ├── generateKey-ecdh.js
│ │ │ ├── generateKey-ecdsa.js
│ │ │ └── generateKey-hmac.js
│ │ ├── getRandomValues.js
│ │ ├── import_export/
│ │ │ ├── export-ecdh-keys.js
│ │ │ ├── export-ecdsa-keys.js
│ │ │ ├── export-rsa-spki.js
│ │ │ ├── import-ecdh-key.js
│ │ │ ├── import-ecdsa-keys.js
│ │ │ ├── import-export-aes-key.js
│ │ │ ├── import-export-hmac-key.js
│ │ │ ├── import-export-jwk-aes-key.js
│ │ │ ├── import-export-jwk-aes-static-key.js
│ │ │ ├── import-export-jwk-ecdsa.js
│ │ │ ├── import-export-jwk-hmac-key.js
│ │ │ ├── import-export-jwk-hmac-static-key.js
│ │ │ ├── import-jwk-base64-decrypt.js
│ │ │ └── import-raw-base64-decrypt.js
│ │ ├── randomUUID.js
│ │ └── sign_verify/
│ │ ├── sign-verify-ecdsa.js
│ │ ├── sign-verify-hmac.js
│ │ ├── verify-spki-ecdsa-invalid.js
│ │ ├── verify-spki-ecdsa-valid.js
│ │ └── verify-spki-rsa-valid.js
│ ├── websocket.js
│ └── websockets/
│ ├── test-echo.js
│ └── ws.js
├── ext/
│ ├── doc.go
│ └── ext.go
├── go.mod
├── go.sum
├── internal/
│ ├── api/
│ │ ├── server.go
│ │ └── server_test.go
│ ├── build/
│ │ └── version.go
│ ├── cloudapi/
│ │ ├── insights/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── domain.go
│ │ │ ├── mappers.go
│ │ │ ├── mappers_test.go
│ │ │ └── proto/
│ │ │ ├── gen.go
│ │ │ └── v1/
│ │ │ ├── common/
│ │ │ │ ├── common.pb.go
│ │ │ │ └── common.proto
│ │ │ ├── ingester/
│ │ │ │ ├── ingester.pb.go
│ │ │ │ ├── ingester.proto
│ │ │ │ └── ingester_grpc.pb.go
│ │ │ ├── k6/
│ │ │ │ ├── labels.pb.go
│ │ │ │ ├── labels.proto
│ │ │ │ ├── request_metadata.pb.go
│ │ │ │ └── request_metadata.proto
│ │ │ └── trace/
│ │ │ ├── labels.pb.go
│ │ │ ├── labels.proto
│ │ │ ├── span.pb.go
│ │ │ └── span.proto
│ │ └── v6/
│ │ ├── api.go
│ │ ├── api_test.go
│ │ ├── client.go
│ │ ├── client_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ └── errors_test.go
│ ├── cmd/
│ │ ├── archive.go
│ │ ├── archive_test.go
│ │ ├── builtin_output_gen.go
│ │ ├── cloud.go
│ │ ├── cloud_login.go
│ │ ├── cloud_run.go
│ │ ├── cloud_test.go
│ │ ├── cloud_upload.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── config_consolidation_test.go
│ │ ├── config_test.go
│ │ ├── deps.go
│ │ ├── deps_test.go
│ │ ├── doc.go
│ │ ├── inspect.go
│ │ ├── launcher.go
│ │ ├── launcher_test.go
│ │ ├── login.go
│ │ ├── login_cloud.go
│ │ ├── login_influxdb.go
│ │ ├── new.go
│ │ ├── new_test.go
│ │ ├── options.go
│ │ ├── options_test.go
│ │ ├── outputs.go
│ │ ├── outputs_cloud.go
│ │ ├── outputs_test.go
│ │ ├── pause.go
│ │ ├── report.go
│ │ ├── report_test.go
│ │ ├── resume.go
│ │ ├── root.go
│ │ ├── root_test.go
│ │ ├── run.go
│ │ ├── run_test.go
│ │ ├── runtime_options.go
│ │ ├── runtime_options_test.go
│ │ ├── scale.go
│ │ ├── stats.go
│ │ ├── status.go
│ │ ├── stdlog_integration_test.go
│ │ ├── subcommand.go
│ │ ├── subcommand_test.go
│ │ ├── templates/
│ │ │ ├── browser.js
│ │ │ ├── minimal.js
│ │ │ ├── protocol.js
│ │ │ └── templates.go
│ │ ├── test_load.go
│ │ ├── test_load_test.go
│ │ ├── testdata/
│ │ │ ├── abort.js
│ │ │ ├── abort_initerr.js
│ │ │ ├── abort_initvu.js
│ │ │ ├── abort_teardown.js
│ │ │ ├── example.har
│ │ │ ├── example.js
│ │ │ ├── fail.js
│ │ │ ├── initerr.js
│ │ │ ├── invalidconfig/
│ │ │ │ ├── invalid.json
│ │ │ │ ├── invalid_option.js
│ │ │ │ ├── invalid_scenario.js
│ │ │ │ └── option_env.js
│ │ │ ├── summary/
│ │ │ │ ├── api.js
│ │ │ │ ├── browser.js
│ │ │ │ ├── grpc.js
│ │ │ │ ├── main.js
│ │ │ │ └── ws.js
│ │ │ └── thresholds/
│ │ │ ├── empty_sink_no_nan.js
│ │ │ ├── malformed_expression.js
│ │ │ ├── name_contains_tokens.js
│ │ │ ├── non_existing_metric.js
│ │ │ ├── thresholds_on_submetric_without_samples.js
│ │ │ └── unsupported_aggregation_method.js
│ │ ├── tests/
│ │ │ ├── cmd_cloud_login_test.go
│ │ │ ├── cmd_cloud_run_test.go
│ │ │ ├── cmd_cloud_test.go
│ │ │ ├── cmd_cloud_upload_test.go
│ │ │ ├── cmd_run_grpc_test.go
│ │ │ ├── cmd_run_test.go
│ │ │ ├── doc.go
│ │ │ ├── eventloop_test.go
│ │ │ ├── events/
│ │ │ │ └── events.go
│ │ │ ├── grpc.go
│ │ │ ├── test_state.go
│ │ │ ├── tests.go
│ │ │ └── tests_test.go
│ │ ├── ui.go
│ │ ├── ui_test.go
│ │ ├── ui_unix.go
│ │ ├── ui_windows.go
│ │ ├── version.go
│ │ └── version_test.go
│ ├── ds/
│ │ └── histogram/
│ │ ├── doc.go
│ │ ├── hdr.go
│ │ └── hdr_test.go
│ ├── event/
│ │ ├── doc.go
│ │ ├── event.go
│ │ ├── system.go
│ │ ├── system_test.go
│ │ ├── type.go
│ │ └── type_gen.go
│ ├── execution/
│ │ ├── abort.go
│ │ ├── controller.go
│ │ ├── local/
│ │ │ └── controller.go
│ │ ├── pkg.go
│ │ ├── scheduler.go
│ │ ├── scheduler_ext_exec_test.go
│ │ ├── scheduler_ext_test.go
│ │ └── scheduler_int_test.go
│ ├── js/
│ │ ├── bundle.go
│ │ ├── bundle_test.go
│ │ ├── compiler/
│ │ │ ├── compiler.go
│ │ │ ├── compiler_test.go
│ │ │ ├── enhanced.go
│ │ │ └── enhanced_test.go
│ │ ├── console.go
│ │ ├── console_test.go
│ │ ├── doc.go
│ │ ├── empty_iterations_bench_test.go
│ │ ├── esm_vs_commonjs_test.go
│ │ ├── eventloop/
│ │ │ ├── eventloop.go
│ │ │ └── eventloop_test.go
│ │ ├── http_bench_test.go
│ │ ├── init_and_modules_test.go
│ │ ├── initcontext.go
│ │ ├── initcontext_test.go
│ │ ├── jsmodules.go
│ │ ├── module_loading_test.go
│ │ ├── modules/
│ │ │ └── k6/
│ │ │ ├── browser/
│ │ │ │ ├── browser/
│ │ │ │ │ ├── browser_context_mapping.go
│ │ │ │ │ ├── browser_context_options_test.go
│ │ │ │ │ ├── browser_mapping.go
│ │ │ │ │ ├── console_message_mapping.go
│ │ │ │ │ ├── element_handle_mapping.go
│ │ │ │ │ ├── file_persister.go
│ │ │ │ │ ├── file_persister_test.go
│ │ │ │ │ ├── frame_locator_mapping.go
│ │ │ │ │ ├── frame_mapping.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── helpers_test.go
│ │ │ │ │ ├── js_handle_mapping.go
│ │ │ │ │ ├── keyboard_mapping.go
│ │ │ │ │ ├── locator_mapping.go
│ │ │ │ │ ├── mapping.go
│ │ │ │ │ ├── mapping_test.go
│ │ │ │ │ ├── metric_event_mapping.go
│ │ │ │ │ ├── module.go
│ │ │ │ │ ├── module_test.go
│ │ │ │ │ ├── modulevu.go
│ │ │ │ │ ├── mouse_mapping.go
│ │ │ │ │ ├── mouse_mapping_test.go
│ │ │ │ │ ├── page_mapping.go
│ │ │ │ │ ├── page_mapping_test.go
│ │ │ │ │ ├── registry.go
│ │ │ │ │ ├── registry_test.go
│ │ │ │ │ ├── request_mapping.go
│ │ │ │ │ ├── response_mapping.go
│ │ │ │ │ ├── route_mapping.go
│ │ │ │ │ ├── route_options_test.go
│ │ │ │ │ ├── touchscreen_mapping.go
│ │ │ │ │ └── worker_mapping.go
│ │ │ │ ├── chromium/
│ │ │ │ │ ├── browser.go
│ │ │ │ │ ├── browser_type.go
│ │ │ │ │ └── browser_type_test.go
│ │ │ │ ├── common/
│ │ │ │ │ ├── barrier.go
│ │ │ │ │ ├── barrier_test.go
│ │ │ │ │ ├── browser.go
│ │ │ │ │ ├── browser_context.go
│ │ │ │ │ ├── browser_context_options.go
│ │ │ │ │ ├── browser_context_test.go
│ │ │ │ │ ├── browser_options.go
│ │ │ │ │ ├── browser_options_test.go
│ │ │ │ │ ├── browser_process.go
│ │ │ │ │ ├── browser_process_meta.go
│ │ │ │ │ ├── browser_process_test.go
│ │ │ │ │ ├── browser_test.go
│ │ │ │ │ ├── connection.go
│ │ │ │ │ ├── connection_test.go
│ │ │ │ │ ├── consts.go
│ │ │ │ │ ├── context.go
│ │ │ │ │ ├── context_test.go
│ │ │ │ │ ├── device.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── element_handle.go
│ │ │ │ │ ├── element_handle_options.go
│ │ │ │ │ ├── element_handle_test.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── event_emitter.go
│ │ │ │ │ ├── event_emitter_test.go
│ │ │ │ │ ├── execution_context.go
│ │ │ │ │ ├── frame.go
│ │ │ │ │ ├── frame_manager.go
│ │ │ │ │ ├── frame_options.go
│ │ │ │ │ ├── frame_options_test.go
│ │ │ │ │ ├── frame_session.go
│ │ │ │ │ ├── frame_test.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── helpers_test.go
│ │ │ │ │ ├── hooks.go
│ │ │ │ │ ├── http.go
│ │ │ │ │ ├── http_test.go
│ │ │ │ │ ├── js/
│ │ │ │ │ │ ├── actions.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── embedded_scripts.go
│ │ │ │ │ │ ├── injected_script.js
│ │ │ │ │ │ ├── query_all.js
│ │ │ │ │ │ ├── scroll_into_view.js
│ │ │ │ │ │ ├── selectors.go
│ │ │ │ │ │ ├── web_vital_iife.js
│ │ │ │ │ │ └── web_vital_init.js
│ │ │ │ │ ├── js_handle.go
│ │ │ │ │ ├── keyboard.go
│ │ │ │ │ ├── keyboard_test.go
│ │ │ │ │ ├── kill_linux.go
│ │ │ │ │ ├── kill_other.go
│ │ │ │ │ ├── layout.go
│ │ │ │ │ ├── layout_test.go
│ │ │ │ │ ├── lifecycle.go
│ │ │ │ │ ├── lifecycle_test.go
│ │ │ │ │ ├── locator.go
│ │ │ │ │ ├── locator_options.go
│ │ │ │ │ ├── mouse.go
│ │ │ │ │ ├── mouse_options.go
│ │ │ │ │ ├── network_manager.go
│ │ │ │ │ ├── network_manager_test.go
│ │ │ │ │ ├── network_profile.go
│ │ │ │ │ ├── page.go
│ │ │ │ │ ├── page_options.go
│ │ │ │ │ ├── page_test.go
│ │ │ │ │ ├── remote_object.go
│ │ │ │ │ ├── remote_object_test.go
│ │ │ │ │ ├── screenshotter.go
│ │ │ │ │ ├── selectors.go
│ │ │ │ │ ├── selectors_test.go
│ │ │ │ │ ├── session.go
│ │ │ │ │ ├── session_test.go
│ │ │ │ │ ├── timeout.go
│ │ │ │ │ ├── timeout_test.go
│ │ │ │ │ ├── touchscreen.go
│ │ │ │ │ ├── trace.go
│ │ │ │ │ └── worker.go
│ │ │ │ ├── env/
│ │ │ │ │ └── env.go
│ │ │ │ ├── k6error/
│ │ │ │ │ └── internal.go
│ │ │ │ ├── k6ext/
│ │ │ │ │ ├── context.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── k6test/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── executor.go
│ │ │ │ │ │ └── vu.go
│ │ │ │ │ ├── metrics.go
│ │ │ │ │ └── panic.go
│ │ │ │ ├── keyboardlayout/
│ │ │ │ │ ├── layout.go
│ │ │ │ │ └── us.go
│ │ │ │ ├── log/
│ │ │ │ │ └── logger.go
│ │ │ │ ├── storage/
│ │ │ │ │ ├── file_persister.go
│ │ │ │ │ ├── file_persister_test.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── storage_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── browser_context_options_test.go
│ │ │ │ │ ├── browser_context_test.go
│ │ │ │ │ ├── browser_test.go
│ │ │ │ │ ├── browser_type_test.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── element_handle_test.go
│ │ │ │ │ ├── frame_manager_test.go
│ │ │ │ │ ├── frame_test.go
│ │ │ │ │ ├── get_by_test.go
│ │ │ │ │ ├── goroutine_leak_test.go
│ │ │ │ │ ├── js_handle_get_properties_test.go
│ │ │ │ │ ├── js_handle_test.go
│ │ │ │ │ ├── keyboard_test.go
│ │ │ │ │ ├── launch_options_slowmo_test.go
│ │ │ │ │ ├── lifecycle_wait_test.go
│ │ │ │ │ ├── locator_test.go
│ │ │ │ │ ├── logrus_hook.go
│ │ │ │ │ ├── mouse_test.go
│ │ │ │ │ ├── network_manager_test.go
│ │ │ │ │ ├── page_test.go
│ │ │ │ │ ├── remote_obj_test.go
│ │ │ │ │ ├── setinputfiles_test.go
│ │ │ │ │ ├── static/
│ │ │ │ │ │ ├── concealed_link.html
│ │ │ │ │ │ ├── dialog.html
│ │ │ │ │ │ ├── embedded_iframe.html
│ │ │ │ │ │ ├── get_by_alt_text.html
│ │ │ │ │ │ ├── get_by_label.html
│ │ │ │ │ │ ├── get_by_placeholder.html
│ │ │ │ │ │ ├── get_by_role_edge_cases.html
│ │ │ │ │ │ ├── get_by_role_explicit.html
│ │ │ │ │ │ ├── get_by_role_implicit.html
│ │ │ │ │ │ ├── get_by_testid.html
│ │ │ │ │ │ ├── get_by_text.html
│ │ │ │ │ │ ├── get_by_title.html
│ │ │ │ │ │ ├── hide_unhide.html
│ │ │ │ │ │ ├── iframe_home.html
│ │ │ │ │ │ ├── iframe_signin.html
│ │ │ │ │ │ ├── iframe_test_main.html
│ │ │ │ │ │ ├── iframe_test_nested1.html
│ │ │ │ │ │ ├── iframe_test_nested2.html
│ │ │ │ │ │ ├── lifecycle.html
│ │ │ │ │ │ ├── lifecycle_main_frame.html
│ │ │ │ │ │ ├── lifecycle_no_ping_js.html
│ │ │ │ │ │ ├── locator_nesting.html
│ │ │ │ │ │ ├── locators.html
│ │ │ │ │ │ ├── mouse_helper.js
│ │ │ │ │ │ ├── nav_in_doc.html
│ │ │ │ │ │ ├── non_clickable.html
│ │ │ │ │ │ ├── page1.html
│ │ │ │ │ │ ├── page2.html
│ │ │ │ │ │ ├── page_with_iframe.html
│ │ │ │ │ │ ├── ping.html
│ │ │ │ │ │ ├── react-dom.development.js
│ │ │ │ │ │ ├── react.development.js
│ │ │ │ │ │ ├── react_input.html
│ │ │ │ │ │ ├── select_options.html
│ │ │ │ │ │ ├── shadow_and_doc_frag.html
│ │ │ │ │ │ ├── shadow_dom_link.html
│ │ │ │ │ │ ├── usual.html
│ │ │ │ │ │ ├── visible.html
│ │ │ │ │ │ ├── wait_for.html
│ │ │ │ │ │ ├── wait_until.html
│ │ │ │ │ │ ├── waitfornavigation_test.html
│ │ │ │ │ │ └── web_vitals.html
│ │ │ │ │ ├── test_browser.go
│ │ │ │ │ ├── test_browser_proxy.go
│ │ │ │ │ ├── test_browser_test.go
│ │ │ │ │ ├── tracing_test.go
│ │ │ │ │ ├── webvital_test.go
│ │ │ │ │ └── ws/
│ │ │ │ │ └── server.go
│ │ │ │ └── trace/
│ │ │ │ └── trace.go
│ │ │ ├── crypto/
│ │ │ │ ├── crypto.go
│ │ │ │ ├── crypto_test.go
│ │ │ │ └── x509/
│ │ │ │ ├── x509.go
│ │ │ │ └── x509_test.go
│ │ │ ├── data/
│ │ │ │ ├── data.go
│ │ │ │ ├── data_test.go
│ │ │ │ ├── share.go
│ │ │ │ └── share_test.go
│ │ │ ├── encoding/
│ │ │ │ ├── encoding.go
│ │ │ │ └── encoding_test.go
│ │ │ ├── execution/
│ │ │ │ ├── execution.go
│ │ │ │ └── execution_test.go
│ │ │ ├── experimental/
│ │ │ │ ├── README.md
│ │ │ │ ├── csv/
│ │ │ │ │ ├── module.go
│ │ │ │ │ ├── module_test.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ └── reader_test.go
│ │ │ │ ├── experimental.go
│ │ │ │ ├── fs/
│ │ │ │ │ ├── cache.go
│ │ │ │ │ ├── cache_test.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── errors_gen.go
│ │ │ │ │ ├── file.go
│ │ │ │ │ ├── file_test.go
│ │ │ │ │ ├── module.go
│ │ │ │ │ └── module_test.go
│ │ │ │ └── streams/
│ │ │ │ ├── errors.go
│ │ │ │ ├── errors_gen.go
│ │ │ │ ├── goja.go
│ │ │ │ ├── module.go
│ │ │ │ ├── module_test.go
│ │ │ │ ├── queue.go
│ │ │ │ ├── readable_stream_controller.go
│ │ │ │ ├── readable_stream_default_controller.go
│ │ │ │ ├── readable_stream_default_reader.go
│ │ │ │ ├── readable_stream_reader.go
│ │ │ │ ├── readable_streams.go
│ │ │ │ ├── readable_streams_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── checkout.sh
│ │ │ │ │ ├── reentrant-strategies.any.js.patch
│ │ │ │ │ ├── rs-test-templates.js.patch
│ │ │ │ │ └── testharness.js.patch
│ │ │ │ └── underlying_source.go
│ │ │ ├── grpc/
│ │ │ │ ├── client.go
│ │ │ │ ├── client_test.go
│ │ │ │ ├── client_types_test.go
│ │ │ │ ├── grpc.go
│ │ │ │ ├── helpers_test.go
│ │ │ │ ├── listeners.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── params.go
│ │ │ │ ├── params_test.go
│ │ │ │ ├── stream.go
│ │ │ │ ├── stream_test.go
│ │ │ │ └── teststate_test.go
│ │ │ ├── k6.go
│ │ │ ├── k6_test.go
│ │ │ ├── marshalling_test.go
│ │ │ ├── metrics/
│ │ │ │ ├── metrics.go
│ │ │ │ └── metrics_test.go
│ │ │ ├── secrets/
│ │ │ │ ├── secrets.go
│ │ │ │ └── secrets_test.go
│ │ │ ├── timers/
│ │ │ │ └── timers.go
│ │ │ ├── webcrypto/
│ │ │ │ ├── aes.go
│ │ │ │ ├── algorithm.go
│ │ │ │ ├── base64.go
│ │ │ │ ├── bits.go
│ │ │ │ ├── cmd_run_test.go
│ │ │ │ ├── crypto.go
│ │ │ │ ├── elliptic_curve.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── hmac.go
│ │ │ │ ├── jwk.go
│ │ │ │ ├── key.go
│ │ │ │ ├── module.go
│ │ │ │ ├── params.go
│ │ │ │ ├── pbkdf2.go
│ │ │ │ ├── rsa.go
│ │ │ │ ├── signer.go
│ │ │ │ ├── sobek.go
│ │ │ │ ├── sobek_test.go
│ │ │ │ ├── subtle_crypto.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── checkout.sh
│ │ │ │ │ ├── generate-patches.sh
│ │ │ │ │ ├── subtle_crypto_test.go
│ │ │ │ │ ├── test_setup_test.go
│ │ │ │ │ ├── util/
│ │ │ │ │ │ └── helpers.js
│ │ │ │ │ └── wpt-patches/
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__ecdh_bits.js.patch
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__pbkdf2.js.patch
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__pbkdf2_vectors.js.patch
│ │ │ │ │ ├── WebCryptoAPI__encrypt_decrypt__aes_gcm_vectors.js.patch
│ │ │ │ │ ├── WebCryptoAPI__generateKey__failures.js.patch
│ │ │ │ │ ├── WebCryptoAPI__generateKey__successes.js.patch
│ │ │ │ │ ├── WebCryptoAPI__getRandomValues.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__ec_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__rsa_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__symmetric_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__sign_verify__ecdsa_vectors.js.patch
│ │ │ │ │ └── WebCryptoAPI__sign_verify__rsa_pss_vectors.js.patch
│ │ │ │ └── types.go
│ │ │ ├── websockets/
│ │ │ │ ├── autobahn_tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── fuzzingserver.json
│ │ │ │ │ ├── reports/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ └── script.js
│ │ │ │ ├── blob.go
│ │ │ │ ├── blob_test.go
│ │ │ │ ├── events/
│ │ │ │ │ └── events.go
│ │ │ │ ├── helpers.go
│ │ │ │ ├── listeners.go
│ │ │ │ ├── main_test.go
│ │ │ │ ├── params.go
│ │ │ │ ├── websockets.go
│ │ │ │ └── websockets_test.go
│ │ │ └── ws/
│ │ │ ├── ws.go
│ │ │ └── ws_test.go
│ │ ├── modules_vu.go
│ │ ├── path_resolution_test.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ ├── share_test.go
│ │ ├── summary-legacy.js
│ │ ├── summary-wrapper.js
│ │ ├── summary.go
│ │ ├── summary.js
│ │ ├── summary_test.go
│ │ ├── tc39/
│ │ │ ├── README.md
│ │ │ ├── breaking_test_errors-stripTypes=false.json
│ │ │ ├── breaking_test_errors-stripTypes=true.json
│ │ │ ├── checkout.sh
│ │ │ ├── tc39_norace_test.go
│ │ │ ├── tc39_race_test.go
│ │ │ └── tc39_test.go
│ │ ├── tc55/
│ │ │ └── timers/
│ │ │ ├── timers.go
│ │ │ └── timers_test.go
│ │ ├── timeout_error.go
│ │ └── timeout_error_test.go
│ ├── lib/
│ │ ├── consts/
│ │ │ └── js.go
│ │ ├── netext/
│ │ │ └── grpcext/
│ │ │ ├── conn.go
│ │ │ ├── conn_test.go
│ │ │ ├── reflect.go
│ │ │ └── stream.go
│ │ ├── strvals/
│ │ │ ├── doc.go
│ │ │ ├── parser.go
│ │ │ └── parser_test.go
│ │ ├── summary/
│ │ │ ├── doc.go
│ │ │ ├── machine_readable.go
│ │ │ ├── machinereadable/
│ │ │ │ ├── checkout.sh
│ │ │ │ ├── clean.sh
│ │ │ │ ├── cog/
│ │ │ │ │ ├── builder.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── cog-templates/
│ │ │ │ │ └── schema_version_const.go.tmpl
│ │ │ │ ├── cog.yaml
│ │ │ │ ├── countervalues_builder_gen.go
│ │ │ │ ├── gaugevalues_builder_gen.go
│ │ │ │ ├── generate.sh
│ │ │ │ ├── metric_builder_gen.go
│ │ │ │ ├── ratevalues_builder_gen.go
│ │ │ │ ├── schema_version_const.go
│ │ │ │ ├── summary_builder_gen.go
│ │ │ │ ├── summarysummaryconfig_builder_gen.go
│ │ │ │ ├── summarysummarymetadata_builder_gen.go
│ │ │ │ ├── summarysummaryresults_builder_gen.go
│ │ │ │ ├── summarysummaryresultschecks_builder_gen.go
│ │ │ │ ├── summarysummaryresultschecksresults_builder_gen.go
│ │ │ │ ├── trendvalues_builder_gen.go
│ │ │ │ └── types_gen.go
│ │ │ └── summary.go
│ │ ├── testutils/
│ │ │ ├── fs.go
│ │ │ ├── grpcservice/
│ │ │ │ ├── route_guide.pb.go
│ │ │ │ ├── route_guide.proto
│ │ │ │ ├── route_guide_grpc.pb.go
│ │ │ │ └── service.go
│ │ │ ├── httpmultibin/
│ │ │ │ ├── grpc_any_testing/
│ │ │ │ │ ├── any_test.pb.go
│ │ │ │ │ └── any_test.proto
│ │ │ │ ├── grpc_protoset_testing/
│ │ │ │ │ ├── test.protoset
│ │ │ │ │ ├── test_message.proto
│ │ │ │ │ └── test_service.proto
│ │ │ │ ├── grpc_testing/
│ │ │ │ │ ├── nested_types.proto
│ │ │ │ │ ├── test.pb.go
│ │ │ │ │ ├── test.proto
│ │ │ │ │ └── test_grpc.pb.go
│ │ │ │ ├── grpc_wrappers_testing/
│ │ │ │ │ ├── service.go
│ │ │ │ │ ├── test.pb.go
│ │ │ │ │ ├── test.proto
│ │ │ │ │ └── test_grpc.pb.go
│ │ │ │ ├── httpmultibin.go
│ │ │ │ └── nested_types/
│ │ │ │ └── nested_types.proto
│ │ │ ├── logrus_hook.go
│ │ │ ├── minirunner/
│ │ │ │ └── minirunner.go
│ │ │ ├── mockoutput/
│ │ │ │ └── mockoutput.go
│ │ │ ├── mockresolver/
│ │ │ │ └── resolver.go
│ │ │ ├── test_output.go
│ │ │ └── untar.go
│ │ └── trace/
│ │ ├── doc.go
│ │ ├── otel.go
│ │ └── otel_test.go
│ ├── loader/
│ │ ├── filesystems.go
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── readsource.go
│ │ └── readsource_test.go
│ ├── log/
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── levels.go
│ │ ├── levels_test.go
│ │ ├── log.go
│ │ ├── loki.go
│ │ └── loki_test.go
│ ├── metrics/
│ │ └── engine/
│ │ ├── engine.go
│ │ ├── engine_test.go
│ │ ├── ingester.go
│ │ └── ingester_test.go
│ ├── output/
│ │ ├── cloud/
│ │ │ ├── expv2/
│ │ │ │ ├── integration/
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── metricset.json
│ │ │ │ └── pbcloud/
│ │ │ │ ├── gen.go
│ │ │ │ ├── metric.pb.go
│ │ │ │ └── metric.proto
│ │ │ ├── insights/
│ │ │ │ ├── collect.go
│ │ │ │ ├── collect_test.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── enable.go
│ │ │ │ ├── flush.go
│ │ │ │ └── flush_test.go
│ │ │ ├── output.go
│ │ │ └── output_test.go
│ │ ├── csv/
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── doc.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ └── time_format_gen.go
│ │ ├── influxdb/
│ │ │ ├── bench_test.go
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ ├── util.go
│ │ │ └── util_test.go
│ │ ├── json/
│ │ │ ├── benchmark_test.go
│ │ │ ├── json.go
│ │ │ ├── json_easyjson.go
│ │ │ ├── json_test.go
│ │ │ └── wrapper.go
│ │ ├── opentelemetry/
│ │ │ ├── attribute.go
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── exporter.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ ├── registry.go
│ │ │ └── tls.go
│ │ ├── prometheusrw/
│ │ │ ├── remote/
│ │ │ │ ├── client.go
│ │ │ │ └── client_test.go
│ │ │ ├── remotewrite/
│ │ │ │ ├── config.go
│ │ │ │ ├── config_test.go
│ │ │ │ ├── prometheus.go
│ │ │ │ ├── prometheus_test.go
│ │ │ │ ├── remotewrite.go
│ │ │ │ ├── remotewrite_test.go
│ │ │ │ ├── trend.go
│ │ │ │ └── trend_test.go
│ │ │ ├── sigv4/
│ │ │ │ ├── const.go
│ │ │ │ ├── sigv4.go
│ │ │ │ ├── sigv4_test.go
│ │ │ │ ├── tripper.go
│ │ │ │ ├── tripper_test.go
│ │ │ │ ├── util_test.go
│ │ │ │ └── utils.go
│ │ │ └── stale/
│ │ │ └── stale.go
│ │ └── summary/
│ │ ├── data.go
│ │ ├── data_test.go
│ │ ├── doc.go
│ │ ├── summary.go
│ │ └── summary_test.go
│ ├── secretsource/
│ │ ├── file/
│ │ │ ├── file.go
│ │ │ └── file_test.go
│ │ ├── init.go
│ │ ├── mock/
│ │ │ └── mock.go
│ │ └── url/
│ │ ├── url.go
│ │ └── url_test.go
│ ├── ui/
│ │ ├── banner.go
│ │ ├── console/
│ │ │ ├── doc.go
│ │ │ └── writer.go
│ │ ├── doc.go
│ │ ├── form.go
│ │ ├── form_fields.go
│ │ ├── form_fields_test.go
│ │ ├── form_test.go
│ │ └── pb/
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── progressbar.go
│ │ └── progressbar_test.go
│ └── usage/
│ ├── usage.go
│ └── usage_test.go
├── js/
│ ├── common/
│ │ ├── bridge.go
│ │ ├── bridge_test.go
│ │ ├── event.go
│ │ ├── frozen_object.go
│ │ ├── frozen_object_test.go
│ │ ├── init_error.go
│ │ ├── initenv.go
│ │ ├── interrupt_error.go
│ │ ├── randsource.go
│ │ ├── tags.go
│ │ ├── util.go
│ │ └── util_test.go
│ ├── modules/
│ │ ├── cjsmodule.go
│ │ ├── gomodule.go
│ │ ├── gomodule_basic.go
│ │ ├── k6/
│ │ │ ├── html/
│ │ │ │ ├── element.go
│ │ │ │ ├── element_test.go
│ │ │ │ ├── elements.go
│ │ │ │ ├── elements_gen.go
│ │ │ │ ├── elements_gen_test.go
│ │ │ │ ├── elements_test.go
│ │ │ │ ├── gen/
│ │ │ │ │ └── gen_elements.go
│ │ │ │ ├── html.go
│ │ │ │ ├── html_test.go
│ │ │ │ ├── serialize.go
│ │ │ │ ├── serialize_test.go
│ │ │ │ └── util.go
│ │ │ └── http/
│ │ │ ├── async_request_test.go
│ │ │ ├── batch_test.go
│ │ │ ├── cookiejar.go
│ │ │ ├── doc.go
│ │ │ ├── file.go
│ │ │ ├── file_test.go
│ │ │ ├── http.go
│ │ │ ├── http_test.go
│ │ │ ├── request.go
│ │ │ ├── request_test.go
│ │ │ ├── response.go
│ │ │ ├── response_callback.go
│ │ │ ├── response_callback_test.go
│ │ │ ├── response_test.go
│ │ │ └── tls_test.go
│ │ ├── modules.go
│ │ ├── require_impl.go
│ │ ├── resolution.go
│ │ └── unknown.go
│ ├── modulestest/
│ │ ├── compile.go
│ │ ├── modulestest.go
│ │ └── runtime.go
│ └── promises/
│ ├── promises.go
│ └── promises_test.go
├── lib/
│ ├── archive.go
│ ├── archive_test.go
│ ├── buffer_pool.go
│ ├── buffer_pool_test.go
│ ├── compatibility_mode_gen.go
│ ├── context.go
│ ├── doc.go
│ ├── execution.go
│ ├── execution_segment.go
│ ├── execution_segment_test.go
│ ├── execution_status_gen.go
│ ├── executor/
│ │ ├── base_config.go
│ │ ├── base_executor.go
│ │ ├── common_test.go
│ │ ├── constant_arrival_rate.go
│ │ ├── constant_arrival_rate_test.go
│ │ ├── constant_vus.go
│ │ ├── constant_vus_test.go
│ │ ├── execution_config_shortcuts.go
│ │ ├── execution_test.go
│ │ ├── executors_test.go
│ │ ├── externally_controlled.go
│ │ ├── externally_controlled_test.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── per_vu_iterations.go
│ │ ├── per_vu_iterations_test.go
│ │ ├── ramping_arrival_rate.go
│ │ ├── ramping_arrival_rate_test.go
│ │ ├── ramping_vus.go
│ │ ├── ramping_vus_test.go
│ │ ├── shared_iterations.go
│ │ ├── shared_iterations_test.go
│ │ ├── vu_handle.go
│ │ └── vu_handle_test.go
│ ├── executors.go
│ ├── fsext/
│ │ ├── afero_links.go
│ │ ├── cacheonread.go
│ │ ├── changepathfs.go
│ │ ├── changepathfs_test.go
│ │ ├── filepath.go
│ │ ├── filepath_unix_test.go
│ │ ├── filepath_windows_test.go
│ │ ├── trimpathseparator_test.go
│ │ └── walk.go
│ ├── helpers.go
│ ├── helpers_test.go
│ ├── limiter.go
│ ├── limiter_test.go
│ ├── models.go
│ ├── models_test.go
│ ├── netext/
│ │ ├── dialer.go
│ │ ├── dialer_test.go
│ │ ├── httpext/
│ │ │ ├── batch.go
│ │ │ ├── compression.go
│ │ │ ├── compression_type_gen.go
│ │ │ ├── digest_transport.go
│ │ │ ├── error_codes.go
│ │ │ ├── error_codes_syscall_posix.go
│ │ │ ├── error_codes_syscall_windows.go
│ │ │ ├── error_codes_test.go
│ │ │ ├── httpdebug_transport.go
│ │ │ ├── request.go
│ │ │ ├── request_test.go
│ │ │ ├── response.go
│ │ │ ├── response_type_gen.go
│ │ │ ├── tracer.go
│ │ │ ├── tracer_test.go
│ │ │ ├── transport.go
│ │ │ ├── transport_test.go
│ │ │ └── url.go
│ │ ├── resolver.go
│ │ ├── resolver_test.go
│ │ └── tls.go
│ ├── old_archive_test.go
│ ├── options.go
│ ├── options_test.go
│ ├── runner.go
│ ├── runtime_options.go
│ ├── state_test.go
│ ├── summary.go
│ ├── test_state.go
│ ├── tlsconfig.go
│ ├── types/
│ │ ├── dns.go
│ │ ├── dns_policy_gen.go
│ │ ├── dns_select_gen.go
│ │ ├── hostnametrie.go
│ │ ├── hostnametrie_test.go
│ │ ├── hosts.go
│ │ ├── hosts_test.go
│ │ ├── ipblock.go
│ │ ├── ipblock_test.go
│ │ ├── net.go
│ │ ├── trie.go
│ │ ├── trie_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── vu_state.go
│ └── vu_state_test.go
├── main.go
├── metrics/
│ ├── builtin.go
│ ├── metric.go
│ ├── metric_test.go
│ ├── metric_type.go
│ ├── package.go
│ ├── registry.go
│ ├── registry_test.go
│ ├── sample.go
│ ├── sample_test.go
│ ├── sink.go
│ ├── sink_test.go
│ ├── system_tag.go
│ ├── system_tag_gen.go
│ ├── system_tag_test.go
│ ├── tags.go
│ ├── tags_test.go
│ ├── thresholds.go
│ ├── thresholds_parser.go
│ ├── thresholds_parser_test.go
│ ├── thresholds_test.go
│ ├── units.go
│ └── value_type.go
├── modtools_frozen.yml
├── output/
│ ├── cloud/
│ │ └── expv2/
│ │ ├── collect.go
│ │ ├── collect_test.go
│ │ ├── flush.go
│ │ ├── flush_test.go
│ │ ├── hdr.go
│ │ ├── hdr_test.go
│ │ ├── mapping.go
│ │ ├── mapping_test.go
│ │ ├── metrics_client.go
│ │ ├── metrics_client_test.go
│ │ ├── output.go
│ │ ├── output_test.go
│ │ ├── sink.go
│ │ └── sink_test.go
│ ├── extensions.go
│ ├── helpers.go
│ ├── helpers_test.go
│ ├── manager.go
│ └── types.go
├── packaging/
│ ├── Dockerfile
│ ├── bin/
│ │ ├── create-deb-repo.sh
│ │ ├── create-msi-repo.sh
│ │ ├── create-rpm-repo.sh
│ │ ├── entrypoint.sh
│ │ └── generate_index.py
│ ├── docker-compose.yml
│ ├── k6-rpm-repo.spec
│ ├── k6-rpm.repo
│ ├── k6.wxs
│ └── nfpm.yaml
├── release notes/
│ ├── template.md
│ ├── v0.19.0.md
│ ├── v0.20.0.md
│ ├── v0.21.0.md
│ ├── v0.21.1.md
│ ├── v0.22.0.md
│ ├── v0.22.1.md
│ ├── v0.23.0.md
│ ├── v0.23.1.md
│ ├── v0.24.0.md
│ ├── v0.25.0.md
│ ├── v0.25.1.md
│ ├── v0.26.0.md
│ ├── v0.26.1.md
│ ├── v0.26.2.md
│ ├── v0.27.0.md
│ ├── v0.27.1.md
│ ├── v0.28.0.md
│ ├── v0.29.0.md
│ ├── v0.30.0.md
│ ├── v0.31.0.md
│ ├── v0.31.1.md
│ ├── v0.32.0.md
│ ├── v0.33.0.md
│ ├── v0.34.0.md
│ ├── v0.34.1.md
│ ├── v0.35.0.md
│ ├── v0.36.0.md
│ ├── v0.37.0.md
│ ├── v0.38.0.md
│ ├── v0.38.1.md
│ ├── v0.38.2.md
│ ├── v0.38.3.md
│ ├── v0.39.0.md
│ ├── v0.40.0.md
│ ├── v0.41.0.md
│ ├── v0.42.0.md
│ ├── v0.43.0.md
│ ├── v0.43.1.md
│ ├── v0.44.0.md
│ ├── v0.44.1.md
│ ├── v0.45.0.md
│ ├── v0.46.0.md
│ ├── v0.47.0.md
│ ├── v0.48.0.md
│ ├── v0.49.0.md
│ ├── v0.50.0.md
│ ├── v0.51.0.md
│ ├── v0.52.0.md
│ ├── v0.53.0.md
│ ├── v0.54.0.md
│ ├── v0.55.0.md
│ ├── v0.55.1.md
│ ├── v0.55.2.md
│ ├── v0.56.0.md
│ ├── v0.57.0.md
│ ├── v0.58.0.md
│ ├── v0.59.0.md
│ ├── v1.0.0-rc1.md
│ ├── v1.0.0-rc2.md
│ ├── v1.0.0.md
│ ├── v1.1.0.md
│ ├── v1.2.0.md
│ ├── v1.2.1.md
│ ├── v1.3.0.md
│ ├── v1.4.0.md
│ ├── v1.5.0.md
│ ├── v1.6.0.md
│ └── v1.6.1.md
├── renovate.json
├── secretsource/
│ ├── doc.go
│ ├── extension.go
│ ├── hook.go
│ ├── hook_test.go
│ └── manager.go
├── subcommand/
│ └── extension.go
└── vendor/
├── buf.build/
│ └── gen/
│ └── go/
│ ├── gogo/
│ │ └── protobuf/
│ │ └── protocolbuffers/
│ │ └── go/
│ │ ├── LICENSE
│ │ └── gogoproto/
│ │ ├── gogo.pb.go
│ │ └── gogo_protoopaque.pb.go
│ └── prometheus/
│ └── prometheus/
│ └── protocolbuffers/
│ └── go/
│ ├── remote.pb.go
│ ├── remote_protoopaque.pb.go
│ ├── types.pb.go
│ └── types_protoopaque.pb.go
├── github.com/
│ ├── Azure/
│ │ └── go-ntlmssp/
│ │ ├── LICENSE
│ │ ├── SECURITY.md
│ │ ├── authenticate_message.go
│ │ ├── authheader.go
│ │ ├── avids.go
│ │ ├── challenge_message.go
│ │ ├── messageheader.go
│ │ ├── negotiate_flags.go
│ │ ├── negotiate_message.go
│ │ ├── negotiator.go
│ │ ├── nlmp.go
│ │ ├── unicode.go
│ │ ├── varfield.go
│ │ └── version.go
│ ├── Masterminds/
│ │ └── semver/
│ │ └── v3/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE.txt
│ │ ├── SECURITY.md
│ │ ├── collection.go
│ │ ├── constraints.go
│ │ ├── doc.go
│ │ └── version.go
│ ├── PuerkitoBio/
│ │ └── goquery/
│ │ ├── .gitattributes
│ │ ├── LICENSE
│ │ ├── array.go
│ │ ├── doc.go
│ │ ├── expand.go
│ │ ├── filter.go
│ │ ├── iteration.go
│ │ ├── manipulation.go
│ │ ├── property.go
│ │ ├── query.go
│ │ ├── traversal.go
│ │ ├── type.go
│ │ └── utilities.go
│ ├── Soontao/
│ │ └── goHttpDigestClient/
│ │ ├── LICENSE
│ │ ├── challenge.go
│ │ ├── client.go
│ │ └── rfc2617.go
│ ├── andybalholm/
│ │ ├── brotli/
│ │ │ ├── LICENSE
│ │ │ ├── backward_references.go
│ │ │ ├── backward_references_hq.go
│ │ │ ├── bit_cost.go
│ │ │ ├── bit_reader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── block_splitter.go
│ │ │ ├── block_splitter_command.go
│ │ │ ├── block_splitter_distance.go
│ │ │ ├── block_splitter_literal.go
│ │ │ ├── brotli_bit_stream.go
│ │ │ ├── cluster.go
│ │ │ ├── cluster_command.go
│ │ │ ├── cluster_distance.go
│ │ │ ├── cluster_literal.go
│ │ │ ├── command.go
│ │ │ ├── compress_fragment.go
│ │ │ ├── compress_fragment_two_pass.go
│ │ │ ├── constants.go
│ │ │ ├── context.go
│ │ │ ├── decode.go
│ │ │ ├── dictionary.go
│ │ │ ├── dictionary_hash.go
│ │ │ ├── encode.go
│ │ │ ├── encoder.go
│ │ │ ├── encoder_dict.go
│ │ │ ├── entropy_encode.go
│ │ │ ├── entropy_encode_static.go
│ │ │ ├── fast_log.go
│ │ │ ├── find_match_length.go
│ │ │ ├── h10.go
│ │ │ ├── h5.go
│ │ │ ├── h6.go
│ │ │ ├── hash.go
│ │ │ ├── hash_composite.go
│ │ │ ├── hash_forgetful_chain.go
│ │ │ ├── hash_longest_match_quickly.go
│ │ │ ├── hash_rolling.go
│ │ │ ├── histogram.go
│ │ │ ├── http.go
│ │ │ ├── huffman.go
│ │ │ ├── literal_cost.go
│ │ │ ├── matchfinder/
│ │ │ │ ├── emitter.go
│ │ │ │ ├── m0.go
│ │ │ │ ├── m4.go
│ │ │ │ ├── matchfinder.go
│ │ │ │ ├── pathfinder.go
│ │ │ │ └── textencoder.go
│ │ │ ├── memory.go
│ │ │ ├── metablock.go
│ │ │ ├── metablock_command.go
│ │ │ ├── metablock_distance.go
│ │ │ ├── metablock_literal.go
│ │ │ ├── params.go
│ │ │ ├── platform.go
│ │ │ ├── prefix.go
│ │ │ ├── prefix_dec.go
│ │ │ ├── quality.go
│ │ │ ├── reader.go
│ │ │ ├── ringbuffer.go
│ │ │ ├── state.go
│ │ │ ├── static_dict.go
│ │ │ ├── static_dict_lut.go
│ │ │ ├── symbol_list.go
│ │ │ ├── transform.go
│ │ │ ├── utf8_util.go
│ │ │ ├── util.go
│ │ │ ├── write_bits.go
│ │ │ └── writer.go
│ │ └── cascadia/
│ │ ├── LICENSE
│ │ ├── parser.go
│ │ ├── pseudo_classes.go
│ │ ├── selector.go
│ │ ├── serialize.go
│ │ └── specificity.go
│ ├── beorn7/
│ │ └── perks/
│ │ ├── LICENSE
│ │ └── quantile/
│ │ └── stream.go
│ ├── bufbuild/
│ │ └── protocompile/
│ │ ├── .protoc_version
│ │ ├── LICENSE
│ │ ├── ast/
│ │ │ ├── doc.go
│ │ │ ├── enum.go
│ │ │ ├── field.go
│ │ │ ├── file.go
│ │ │ ├── file_info.go
│ │ │ ├── identifiers.go
│ │ │ ├── message.go
│ │ │ ├── no_source.go
│ │ │ ├── node.go
│ │ │ ├── options.go
│ │ │ ├── ranges.go
│ │ │ ├── service.go
│ │ │ ├── values.go
│ │ │ └── walk.go
│ │ ├── compiler.go
│ │ ├── doc.go
│ │ ├── go.work
│ │ ├── go.work.sum
│ │ ├── internal/
│ │ │ ├── editions/
│ │ │ │ └── editions.go
│ │ │ ├── featuresext/
│ │ │ │ ├── cpp_features.protoset
│ │ │ │ ├── featuresext.go
│ │ │ │ └── java_features.protoset
│ │ │ ├── message_context.go
│ │ │ ├── messageset/
│ │ │ │ └── messageset.go
│ │ │ ├── norace.go
│ │ │ ├── options.go
│ │ │ ├── race.go
│ │ │ ├── tags.go
│ │ │ ├── types.go
│ │ │ └── util.go
│ │ ├── linker/
│ │ │ ├── descriptors.go
│ │ │ ├── doc.go
│ │ │ ├── files.go
│ │ │ ├── linker.go
│ │ │ ├── pathkey_no_unsafe.go
│ │ │ ├── pathkey_unsafe.go
│ │ │ ├── pool.go
│ │ │ ├── resolve.go
│ │ │ ├── symbols.go
│ │ │ └── validate.go
│ │ ├── options/
│ │ │ ├── options.go
│ │ │ ├── source_retention_options.go
│ │ │ └── target_types.go
│ │ ├── parser/
│ │ │ ├── ast.go
│ │ │ ├── clone.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── lexer.go
│ │ │ ├── parser.go
│ │ │ ├── proto.y
│ │ │ ├── proto.y.go
│ │ │ ├── result.go
│ │ │ └── validate.go
│ │ ├── protoutil/
│ │ │ ├── editions.go
│ │ │ └── protos.go
│ │ ├── reporter/
│ │ │ ├── errors.go
│ │ │ └── reporter.go
│ │ ├── resolver.go
│ │ ├── sourceinfo/
│ │ │ └── source_code_info.go
│ │ ├── std_imports.go
│ │ ├── supported_editions.go
│ │ └── walk/
│ │ └── walk.go
│ ├── cenkalti/
│ │ └── backoff/
│ │ └── v5/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── backoff.go
│ │ ├── error.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── timer.go
│ ├── cespare/
│ │ └── xxhash/
│ │ └── v2/
│ │ ├── LICENSE.txt
│ │ ├── testall.sh
│ │ ├── xxhash.go
│ │ ├── xxhash_amd64.s
│ │ ├── xxhash_arm64.s
│ │ ├── xxhash_asm.go
│ │ ├── xxhash_other.go
│ │ ├── xxhash_safe.go
│ │ └── xxhash_unsafe.go
│ ├── chromedp/
│ │ ├── cdproto/
│ │ │ ├── LICENSE
│ │ │ ├── accessibility/
│ │ │ │ ├── accessibility.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── animation/
│ │ │ │ ├── animation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── audits/
│ │ │ │ ├── audits.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── autofill/
│ │ │ │ ├── autofill.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── backgroundservice/
│ │ │ │ ├── backgroundservice.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── bluetoothemulation/
│ │ │ │ ├── bluetoothemulation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── browser/
│ │ │ │ ├── browser.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── cachestorage/
│ │ │ │ ├── cachestorage.go
│ │ │ │ └── types.go
│ │ │ ├── cast/
│ │ │ │ ├── cast.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── cdp/
│ │ │ │ └── types.go
│ │ │ ├── cdproto.go
│ │ │ ├── css/
│ │ │ │ ├── css.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── debugger/
│ │ │ │ ├── debugger.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── deviceaccess/
│ │ │ │ ├── deviceaccess.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── deviceorientation/
│ │ │ │ └── deviceorientation.go
│ │ │ ├── dom/
│ │ │ │ ├── dom.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── domdebugger/
│ │ │ │ ├── domdebugger.go
│ │ │ │ └── types.go
│ │ │ ├── domsnapshot/
│ │ │ │ ├── domsnapshot.go
│ │ │ │ └── types.go
│ │ │ ├── domstorage/
│ │ │ │ ├── domstorage.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── emulation/
│ │ │ │ ├── emulation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── eventbreakpoints/
│ │ │ │ └── eventbreakpoints.go
│ │ │ ├── extensions/
│ │ │ │ ├── extensions.go
│ │ │ │ └── types.go
│ │ │ ├── fedcm/
│ │ │ │ ├── events.go
│ │ │ │ ├── fedcm.go
│ │ │ │ └── types.go
│ │ │ ├── fetch/
│ │ │ │ ├── events.go
│ │ │ │ ├── fetch.go
│ │ │ │ └── types.go
│ │ │ ├── filesystem/
│ │ │ │ ├── filesystem.go
│ │ │ │ └── types.go
│ │ │ ├── headlessexperimental/
│ │ │ │ ├── headlessexperimental.go
│ │ │ │ └── types.go
│ │ │ ├── heapprofiler/
│ │ │ │ ├── events.go
│ │ │ │ ├── heapprofiler.go
│ │ │ │ └── types.go
│ │ │ ├── indexeddb/
│ │ │ │ ├── indexeddb.go
│ │ │ │ └── types.go
│ │ │ ├── input/
│ │ │ │ ├── events.go
│ │ │ │ ├── input.go
│ │ │ │ └── types.go
│ │ │ ├── inspector/
│ │ │ │ ├── events.go
│ │ │ │ ├── inspector.go
│ │ │ │ └── types.go
│ │ │ ├── io/
│ │ │ │ ├── io.go
│ │ │ │ └── types.go
│ │ │ ├── layertree/
│ │ │ │ ├── events.go
│ │ │ │ ├── layertree.go
│ │ │ │ └── types.go
│ │ │ ├── log/
│ │ │ │ ├── events.go
│ │ │ │ ├── log.go
│ │ │ │ └── types.go
│ │ │ ├── media/
│ │ │ │ ├── events.go
│ │ │ │ ├── media.go
│ │ │ │ └── types.go
│ │ │ ├── memory/
│ │ │ │ ├── memory.go
│ │ │ │ └── types.go
│ │ │ ├── network/
│ │ │ │ ├── events.go
│ │ │ │ ├── network.go
│ │ │ │ └── types.go
│ │ │ ├── overlay/
│ │ │ │ ├── events.go
│ │ │ │ ├── overlay.go
│ │ │ │ └── types.go
│ │ │ ├── page/
│ │ │ │ ├── events.go
│ │ │ │ ├── page.go
│ │ │ │ └── types.go
│ │ │ ├── performance/
│ │ │ │ ├── events.go
│ │ │ │ ├── performance.go
│ │ │ │ └── types.go
│ │ │ ├── performancetimeline/
│ │ │ │ ├── events.go
│ │ │ │ ├── performancetimeline.go
│ │ │ │ └── types.go
│ │ │ ├── preload/
│ │ │ │ ├── events.go
│ │ │ │ ├── preload.go
│ │ │ │ └── types.go
│ │ │ ├── profiler/
│ │ │ │ ├── events.go
│ │ │ │ ├── profiler.go
│ │ │ │ └── types.go
│ │ │ ├── pwa/
│ │ │ │ ├── pwa.go
│ │ │ │ └── types.go
│ │ │ ├── runtime/
│ │ │ │ ├── events.go
│ │ │ │ ├── runtime.go
│ │ │ │ └── types.go
│ │ │ ├── security/
│ │ │ │ ├── events.go
│ │ │ │ ├── security.go
│ │ │ │ └── types.go
│ │ │ ├── serviceworker/
│ │ │ │ ├── events.go
│ │ │ │ ├── serviceworker.go
│ │ │ │ └── types.go
│ │ │ ├── storage/
│ │ │ │ ├── events.go
│ │ │ │ ├── storage.go
│ │ │ │ └── types.go
│ │ │ ├── systeminfo/
│ │ │ │ ├── systeminfo.go
│ │ │ │ └── types.go
│ │ │ ├── target/
│ │ │ │ ├── events.go
│ │ │ │ ├── target.go
│ │ │ │ └── types.go
│ │ │ ├── tethering/
│ │ │ │ ├── events.go
│ │ │ │ └── tethering.go
│ │ │ ├── tracing/
│ │ │ │ ├── events.go
│ │ │ │ ├── tracing.go
│ │ │ │ └── types.go
│ │ │ ├── webaudio/
│ │ │ │ ├── events.go
│ │ │ │ ├── types.go
│ │ │ │ └── webaudio.go
│ │ │ └── webauthn/
│ │ │ ├── events.go
│ │ │ ├── types.go
│ │ │ └── webauthn.go
│ │ └── sysutil/
│ │ ├── LICENSE
│ │ ├── sysutil.go
│ │ ├── sysutil_bsd.go
│ │ ├── sysutil_linux.go
│ │ ├── sysutil_other.go
│ │ ├── sysutil_windows.go
│ │ ├── timeval.go
│ │ └── timeval32.go
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── LICENSE
│ │ └── spew/
│ │ ├── bypass.go
│ │ ├── bypasssafe.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── doc.go
│ │ ├── dump.go
│ │ ├── format.go
│ │ └── spew.go
│ ├── dgryski/
│ │ └── go-rendezvous/
│ │ ├── LICENSE
│ │ └── rdv.go
│ ├── dlclark/
│ │ └── regexp2/
│ │ ├── ATTRIB
│ │ ├── LICENSE
│ │ ├── fastclock.go
│ │ ├── match.go
│ │ ├── regexp.go
│ │ ├── replace.go
│ │ ├── runner.go
│ │ └── syntax/
│ │ ├── charclass.go
│ │ ├── code.go
│ │ ├── escape.go
│ │ ├── fuzz.go
│ │ ├── parser.go
│ │ ├── prefix.go
│ │ ├── replacerdata.go
│ │ ├── tree.go
│ │ └── writer.go
│ ├── evanw/
│ │ └── esbuild/
│ │ ├── LICENSE.md
│ │ ├── internal/
│ │ │ ├── api_helpers/
│ │ │ │ └── use_timer.go
│ │ │ ├── ast/
│ │ │ │ └── ast.go
│ │ │ ├── bundler/
│ │ │ │ └── bundler.go
│ │ │ ├── cache/
│ │ │ │ ├── cache.go
│ │ │ │ ├── cache_ast.go
│ │ │ │ └── cache_fs.go
│ │ │ ├── compat/
│ │ │ │ ├── compat.go
│ │ │ │ ├── css_table.go
│ │ │ │ └── js_table.go
│ │ │ ├── config/
│ │ │ │ ├── config.go
│ │ │ │ └── globals.go
│ │ │ ├── css_ast/
│ │ │ │ ├── css_ast.go
│ │ │ │ └── css_decl_table.go
│ │ │ ├── css_lexer/
│ │ │ │ └── css_lexer.go
│ │ │ ├── css_parser/
│ │ │ │ ├── css_color_spaces.go
│ │ │ │ ├── css_decls.go
│ │ │ │ ├── css_decls_animation.go
│ │ │ │ ├── css_decls_border_radius.go
│ │ │ │ ├── css_decls_box.go
│ │ │ │ ├── css_decls_box_shadow.go
│ │ │ │ ├── css_decls_color.go
│ │ │ │ ├── css_decls_composes.go
│ │ │ │ ├── css_decls_container.go
│ │ │ │ ├── css_decls_font.go
│ │ │ │ ├── css_decls_font_family.go
│ │ │ │ ├── css_decls_font_weight.go
│ │ │ │ ├── css_decls_gradient.go
│ │ │ │ ├── css_decls_list_style.go
│ │ │ │ ├── css_decls_transform.go
│ │ │ │ ├── css_nesting.go
│ │ │ │ ├── css_parser.go
│ │ │ │ ├── css_parser_media.go
│ │ │ │ ├── css_parser_selector.go
│ │ │ │ └── css_reduce_calc.go
│ │ │ ├── css_printer/
│ │ │ │ └── css_printer.go
│ │ │ ├── fs/
│ │ │ │ ├── error_other.go
│ │ │ │ ├── error_wasm+windows.go
│ │ │ │ ├── filepath.go
│ │ │ │ ├── fs.go
│ │ │ │ ├── fs_mock.go
│ │ │ │ ├── fs_real.go
│ │ │ │ ├── fs_zip.go
│ │ │ │ ├── iswin_other.go
│ │ │ │ ├── iswin_wasm.go
│ │ │ │ ├── iswin_windows.go
│ │ │ │ ├── modkey_other.go
│ │ │ │ └── modkey_unix.go
│ │ │ ├── graph/
│ │ │ │ ├── graph.go
│ │ │ │ ├── input.go
│ │ │ │ └── meta.go
│ │ │ ├── helpers/
│ │ │ │ ├── bitset.go
│ │ │ │ ├── comment.go
│ │ │ │ ├── dataurl.go
│ │ │ │ ├── float.go
│ │ │ │ ├── glob.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── joiner.go
│ │ │ │ ├── mime.go
│ │ │ │ ├── path.go
│ │ │ │ ├── quote.go
│ │ │ │ ├── serializer.go
│ │ │ │ ├── stack.go
│ │ │ │ ├── strings.go
│ │ │ │ ├── timer.go
│ │ │ │ ├── typos.go
│ │ │ │ ├── utf.go
│ │ │ │ └── waitgroup.go
│ │ │ ├── js_ast/
│ │ │ │ ├── js_ast.go
│ │ │ │ ├── js_ast_helpers.go
│ │ │ │ ├── js_ident.go
│ │ │ │ └── unicode.go
│ │ │ ├── js_lexer/
│ │ │ │ ├── js_lexer.go
│ │ │ │ └── tables.go
│ │ │ ├── js_parser/
│ │ │ │ ├── global_name_parser.go
│ │ │ │ ├── js_parser.go
│ │ │ │ ├── js_parser_lower.go
│ │ │ │ ├── js_parser_lower_class.go
│ │ │ │ ├── json_parser.go
│ │ │ │ ├── sourcemap_parser.go
│ │ │ │ └── ts_parser.go
│ │ │ ├── js_printer/
│ │ │ │ └── js_printer.go
│ │ │ ├── linker/
│ │ │ │ ├── debug.go
│ │ │ │ └── linker.go
│ │ │ ├── logger/
│ │ │ │ ├── logger.go
│ │ │ │ ├── logger_darwin.go
│ │ │ │ ├── logger_linux.go
│ │ │ │ ├── logger_other.go
│ │ │ │ ├── logger_windows.go
│ │ │ │ └── msg_ids.go
│ │ │ ├── renamer/
│ │ │ │ └── renamer.go
│ │ │ ├── resolver/
│ │ │ │ ├── dataurl.go
│ │ │ │ ├── package_json.go
│ │ │ │ ├── resolver.go
│ │ │ │ ├── tsconfig_json.go
│ │ │ │ └── yarnpnp.go
│ │ │ ├── runtime/
│ │ │ │ └── runtime.go
│ │ │ ├── sourcemap/
│ │ │ │ └── sourcemap.go
│ │ │ └── xxhash/
│ │ │ ├── LICENSE.txt
│ │ │ ├── xxhash.go
│ │ │ └── xxhash_other.go
│ │ └── pkg/
│ │ └── api/
│ │ ├── api.go
│ │ ├── api_impl.go
│ │ ├── api_js_table.go
│ │ ├── favicon.go
│ │ ├── serve_other.go
│ │ ├── serve_wasm.go
│ │ └── watcher.go
│ ├── fatih/
│ │ └── color/
│ │ ├── LICENSE.md
│ │ ├── color.go
│ │ ├── color_windows.go
│ │ └── doc.go
│ ├── go-json-experiment/
│ │ └── json/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── arshal.go
│ │ ├── arshal_any.go
│ │ ├── arshal_default.go
│ │ ├── arshal_funcs.go
│ │ ├── arshal_inlined.go
│ │ ├── arshal_methods.go
│ │ ├── arshal_time.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ ├── fields.go
│ │ ├── fold.go
│ │ ├── intern.go
│ │ ├── internal/
│ │ │ ├── internal.go
│ │ │ ├── jsonflags/
│ │ │ │ └── flags.go
│ │ │ ├── jsonopts/
│ │ │ │ └── options.go
│ │ │ └── jsonwire/
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ └── wire.go
│ │ ├── jsontext/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── errors.go
│ │ │ ├── export.go
│ │ │ ├── options.go
│ │ │ ├── pools.go
│ │ │ ├── quote.go
│ │ │ ├── state.go
│ │ │ ├── token.go
│ │ │ └── value.go
│ │ ├── migrate.sh
│ │ └── options.go
│ ├── go-logr/
│ │ ├── logr/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── SECURITY.md
│ │ │ ├── context.go
│ │ │ ├── context_noslog.go
│ │ │ ├── context_slog.go
│ │ │ ├── discard.go
│ │ │ ├── funcr/
│ │ │ │ ├── funcr.go
│ │ │ │ └── slogsink.go
│ │ │ ├── logr.go
│ │ │ ├── sloghandler.go
│ │ │ ├── slogr.go
│ │ │ └── slogsink.go
│ │ └── stdr/
│ │ ├── LICENSE
│ │ └── stdr.go
│ ├── go-sourcemap/
│ │ └── sourcemap/
│ │ ├── LICENSE
│ │ ├── consumer.go
│ │ ├── internal/
│ │ │ └── base64vlq/
│ │ │ └── base64vlq.go
│ │ └── mappings.go
│ ├── golang/
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── proto/
│ │ │ ├── buffer.go
│ │ │ ├── defaults.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── extensions.go
│ │ │ ├── properties.go
│ │ │ ├── proto.go
│ │ │ ├── registry.go
│ │ │ ├── text_decode.go
│ │ │ ├── text_encode.go
│ │ │ ├── wire.go
│ │ │ └── wrappers.go
│ │ └── ptypes/
│ │ ├── any/
│ │ │ └── any.pb.go
│ │ ├── struct/
│ │ │ └── struct.pb.go
│ │ └── wrappers/
│ │ └── wrappers.pb.go
│ ├── google/
│ │ ├── pprof/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ └── profile/
│ │ │ ├── encode.go
│ │ │ ├── filter.go
│ │ │ ├── index.go
│ │ │ ├── legacy_java_profile.go
│ │ │ ├── legacy_profile.go
│ │ │ ├── merge.go
│ │ │ ├── profile.go
│ │ │ ├── proto.go
│ │ │ └── prune.go
│ │ └── uuid/
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── marshal.go
│ │ ├── node.go
│ │ ├── node_js.go
│ │ ├── node_net.go
│ │ ├── null.go
│ │ ├── sql.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ ├── version4.go
│ │ ├── version6.go
│ │ └── version7.go
│ ├── gorilla/
│ │ └── websocket/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── client.go
│ │ ├── compression.go
│ │ ├── conn.go
│ │ ├── doc.go
│ │ ├── join.go
│ │ ├── json.go
│ │ ├── mask.go
│ │ ├── mask_safe.go
│ │ ├── prepared.go
│ │ ├── proxy.go
│ │ ├── server.go
│ │ ├── tls_handshake.go
│ │ ├── tls_handshake_116.go
│ │ ├── util.go
│ │ └── x_net_proxy.go
│ ├── grafana/
│ │ ├── k6-cloud-openapi-client-go/
│ │ │ └── k6/
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api_authorization.go
│ │ │ ├── api_load_tests.go
│ │ │ ├── api_load_zones.go
│ │ │ ├── api_projects.go
│ │ │ ├── api_schedules.go
│ │ │ ├── api_test_runs.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── model_allowed_load_zone_api_model.go
│ │ │ ├── model_allowed_load_zone_to_update_api_model.go
│ │ │ ├── model_allowed_load_zones_list_api_model.go
│ │ │ ├── model_allowed_project_api_model.go
│ │ │ ├── model_allowed_project_to_update_api_model.go
│ │ │ ├── model_allowed_projects_list_api_model.go
│ │ │ ├── model_authentication_response.go
│ │ │ ├── model_base_total_vuh.go
│ │ │ ├── model_browser_vuh.go
│ │ │ ├── model_cloud_options.go
│ │ │ ├── model_cost_breakdown_api_model.go
│ │ │ ├── model_create_project_api_model.go
│ │ │ ├── model_create_schedule_request.go
│ │ │ ├── model_distribution_zone_api_model.go
│ │ │ ├── model_error_api_model.go
│ │ │ ├── model_error_details_api_model.go
│ │ │ ├── model_error_response_api_model.go
│ │ │ ├── model_frequency.go
│ │ │ ├── model_load_test_api_model.go
│ │ │ ├── model_load_test_list_response.go
│ │ │ ├── model_load_zone_api_model.go
│ │ │ ├── model_load_zone_distribution_api_model.go
│ │ │ ├── model_load_zones_list_api_model.go
│ │ │ ├── model_move_load_test_api_model.go
│ │ │ ├── model_node_api_model.go
│ │ │ ├── model_options.go
│ │ │ ├── model_options_cloud.go
│ │ │ ├── model_patch_load_test_api_model.go
│ │ │ ├── model_patch_project_api_model.go
│ │ │ ├── model_patch_project_limits_request.go
│ │ │ ├── model_patch_test_run_api_model.go
│ │ │ ├── model_project_api_model.go
│ │ │ ├── model_project_limits_api_model.go
│ │ │ ├── model_project_limits_list_response.go
│ │ │ ├── model_project_list_response.go
│ │ │ ├── model_protocol_vuh.go
│ │ │ ├── model_reduction_rate.go
│ │ │ ├── model_reduction_rate_breakdown_value.go
│ │ │ ├── model_schedule_api_model.go
│ │ │ ├── model_schedule_cron.go
│ │ │ ├── model_schedule_list_response.go
│ │ │ ├── model_schedule_recurrence_rule.go
│ │ │ ├── model_status_api_model.go
│ │ │ ├── model_status_extra_api_model.go
│ │ │ ├── model_test_cost_api_model.go
│ │ │ ├── model_test_cost_breakdown_api_model.go
│ │ │ ├── model_test_run_api_model.go
│ │ │ ├── model_test_run_distribution_api_model.go
│ │ │ ├── model_test_run_list_response.go
│ │ │ ├── model_total_vuh.go
│ │ │ ├── model_update_allowed_load_zones_list_api_model.go
│ │ │ ├── model_update_allowed_projects_list_api_model.go
│ │ │ ├── model_validate_options_request.go
│ │ │ ├── model_validate_options_response.go
│ │ │ ├── model_weekday.go
│ │ │ ├── response.go
│ │ │ └── utils.go
│ │ ├── k6build/
│ │ │ ├── Dockerfile
│ │ │ ├── LICENSE
│ │ │ ├── build.go
│ │ │ ├── error.go
│ │ │ └── pkg/
│ │ │ ├── api/
│ │ │ │ └── api.go
│ │ │ └── client/
│ │ │ └── client.go
│ │ ├── k6provider/
│ │ │ ├── LICENSE
│ │ │ ├── download.go
│ │ │ ├── k6binary.go
│ │ │ ├── k6binary_windows.go
│ │ │ ├── lock.go
│ │ │ ├── lock_nix.go
│ │ │ ├── lock_windows.go
│ │ │ ├── provider.go
│ │ │ ├── pruner.go
│ │ │ └── util.go
│ │ ├── sobek/
│ │ │ ├── .tc39_test262_checkout.sh
│ │ │ ├── LICENSE
│ │ │ ├── array.go
│ │ │ ├── array_sparse.go
│ │ │ ├── ast/
│ │ │ │ ├── README.markdown
│ │ │ │ └── node.go
│ │ │ ├── builtin_array.go
│ │ │ ├── builtin_bigint.go
│ │ │ ├── builtin_boolean.go
│ │ │ ├── builtin_date.go
│ │ │ ├── builtin_error.go
│ │ │ ├── builtin_function.go
│ │ │ ├── builtin_global.go
│ │ │ ├── builtin_json.go
│ │ │ ├── builtin_map.go
│ │ │ ├── builtin_math.go
│ │ │ ├── builtin_number.go
│ │ │ ├── builtin_object.go
│ │ │ ├── builtin_promise.go
│ │ │ ├── builtin_proxy.go
│ │ │ ├── builtin_reflect.go
│ │ │ ├── builtin_regexp.go
│ │ │ ├── builtin_set.go
│ │ │ ├── builtin_string.go
│ │ │ ├── builtin_symbol.go
│ │ │ ├── builtin_typedarrays.go
│ │ │ ├── builtin_weakmap.go
│ │ │ ├── builtin_weakset.go
│ │ │ ├── compiler.go
│ │ │ ├── compiler_expr.go
│ │ │ ├── compiler_stmt.go
│ │ │ ├── date.go
│ │ │ ├── date_parser.go
│ │ │ ├── destruct.go
│ │ │ ├── extract_failed_tests.sh
│ │ │ ├── file/
│ │ │ │ ├── README.markdown
│ │ │ │ └── file.go
│ │ │ ├── ftoa/
│ │ │ │ ├── LICENSE_LUCENE
│ │ │ │ ├── common.go
│ │ │ │ ├── ftoa.go
│ │ │ │ ├── ftobasestr.go
│ │ │ │ ├── ftostr.go
│ │ │ │ └── internal/
│ │ │ │ └── fast/
│ │ │ │ ├── LICENSE_V8
│ │ │ │ ├── cachedpower.go
│ │ │ │ ├── common.go
│ │ │ │ ├── diyfp.go
│ │ │ │ └── dtoa.go
│ │ │ ├── func.go
│ │ │ ├── ipow.go
│ │ │ ├── map.go
│ │ │ ├── modules.go
│ │ │ ├── modules_namespace.go
│ │ │ ├── modules_sourcetext.go
│ │ │ ├── object.go
│ │ │ ├── object_args.go
│ │ │ ├── object_dynamic.go
│ │ │ ├── object_goarray_reflect.go
│ │ │ ├── object_gomap.go
│ │ │ ├── object_gomap_reflect.go
│ │ │ ├── object_goreflect.go
│ │ │ ├── object_goslice.go
│ │ │ ├── object_goslice_reflect.go
│ │ │ ├── object_template.go
│ │ │ ├── parser/
│ │ │ │ ├── README.markdown
│ │ │ │ ├── error.go
│ │ │ │ ├── expression.go
│ │ │ │ ├── lexer.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── regexp.go
│ │ │ │ ├── scope.go
│ │ │ │ └── statement.go
│ │ │ ├── profiler.go
│ │ │ ├── proxy.go
│ │ │ ├── regexp.go
│ │ │ ├── runtime.go
│ │ │ ├── staticcheck.conf
│ │ │ ├── string.go
│ │ │ ├── string_ascii.go
│ │ │ ├── string_imported.go
│ │ │ ├── string_unicode.go
│ │ │ ├── token/
│ │ │ │ ├── README.markdown
│ │ │ │ ├── token.go
│ │ │ │ ├── token_const.go
│ │ │ │ └── tokenfmt
│ │ │ ├── typedarrays.go
│ │ │ ├── unistring/
│ │ │ │ └── string.go
│ │ │ ├── value.go
│ │ │ └── vm.go
│ │ ├── xk6-dashboard/
│ │ │ ├── LICENSE
│ │ │ └── dashboard/
│ │ │ ├── aggregate.go
│ │ │ ├── assets.go
│ │ │ ├── builtin.go
│ │ │ ├── command.go
│ │ │ ├── customize.go
│ │ │ ├── event.go
│ │ │ ├── extension.go
│ │ │ ├── meter.go
│ │ │ ├── options.go
│ │ │ ├── process.go
│ │ │ ├── record.go
│ │ │ ├── registry.go
│ │ │ ├── replay.go
│ │ │ ├── report.go
│ │ │ ├── sse.go
│ │ │ └── web.go
│ │ ├── xk6-dashboard-assets/
│ │ │ ├── .prettierignore
│ │ │ ├── LICENSE
│ │ │ ├── assets.go
│ │ │ ├── eslint.config.mjs
│ │ │ ├── packages/
│ │ │ │ ├── config/
│ │ │ │ │ └── dist/
│ │ │ │ │ └── config.json
│ │ │ │ ├── report/
│ │ │ │ │ └── dist/
│ │ │ │ │ └── index.html
│ │ │ │ └── ui/
│ │ │ │ └── dist/
│ │ │ │ ├── assets/
│ │ │ │ │ ├── index-Bjd4tSYO.css
│ │ │ │ │ └── index-CGQSjC8K.js
│ │ │ │ └── index.html
│ │ │ └── script.js
│ │ └── xk6-redis/
│ │ ├── LICENSE
│ │ └── redis/
│ │ ├── client.go
│ │ ├── module.go
│ │ └── options.go
│ ├── grpc-ecosystem/
│ │ ├── go-grpc-middleware/
│ │ │ ├── LICENSE
│ │ │ ├── retry/
│ │ │ │ ├── backoff.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── options.go
│ │ │ │ └── retry.go
│ │ │ └── util/
│ │ │ ├── backoffutils/
│ │ │ │ └── backoff.go
│ │ │ └── metautils/
│ │ │ ├── doc.go
│ │ │ └── nicemd.go
│ │ └── grpc-gateway/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ └── httprule/
│ │ │ ├── BUILD.bazel
│ │ │ ├── compile.go
│ │ │ ├── fuzz.go
│ │ │ ├── parse.go
│ │ │ └── types.go
│ │ ├── runtime/
│ │ │ ├── BUILD.bazel
│ │ │ ├── context.go
│ │ │ ├── convert.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── fieldmask.go
│ │ │ ├── handler.go
│ │ │ ├── marshal_httpbodyproto.go
│ │ │ ├── marshal_json.go
│ │ │ ├── marshal_jsonpb.go
│ │ │ ├── marshal_proto.go
│ │ │ ├── marshaler.go
│ │ │ ├── marshaler_registry.go
│ │ │ ├── mux.go
│ │ │ ├── pattern.go
│ │ │ ├── proto2_convert.go
│ │ │ └── query.go
│ │ └── utilities/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── pattern.go
│ │ ├── readerfactory.go
│ │ ├── string_array_flag.go
│ │ └── trie.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── influxdata/
│ │ └── influxdb1-client/
│ │ ├── LICENSE
│ │ ├── models/
│ │ │ ├── inline_fnv.go
│ │ │ ├── inline_strconv_parse.go
│ │ │ ├── points.go
│ │ │ ├── rows.go
│ │ │ ├── statistic.go
│ │ │ ├── time.go
│ │ │ └── uint_support.go
│ │ ├── pkg/
│ │ │ └── escape/
│ │ │ ├── bytes.go
│ │ │ └── strings.go
│ │ └── v2/
│ │ ├── client.go
│ │ └── udp.go
│ ├── jhump/
│ │ └── protoreflect/
│ │ ├── LICENSE
│ │ ├── desc/
│ │ │ ├── cache.go
│ │ │ ├── convert.go
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor_no_unsafe.go
│ │ │ ├── descriptor_unsafe.go
│ │ │ ├── doc.go
│ │ │ ├── imports.go
│ │ │ ├── internal/
│ │ │ │ ├── proto3_optional.go
│ │ │ │ ├── protoutil/
│ │ │ │ │ └── protoutil.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── source_info.go
│ │ │ │ └── util.go
│ │ │ ├── load.go
│ │ │ ├── sourceinfo/
│ │ │ │ ├── registry.go
│ │ │ │ └── update.go
│ │ │ └── wrap.go
│ │ ├── grpcreflect/
│ │ │ ├── adapt.go
│ │ │ ├── client.go
│ │ │ ├── doc.go
│ │ │ └── server.go
│ │ ├── internal/
│ │ │ ├── standard_files.go
│ │ │ └── unrecognized.go
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ ├── reparse/
│ │ │ │ └── reparse.go
│ │ │ ├── sort/
│ │ │ │ └── sort.go
│ │ │ └── util.go
│ │ ├── protoresolve/
│ │ │ ├── combine.go
│ │ │ ├── desc_protos.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── helpers.go
│ │ │ ├── kind.go
│ │ │ ├── registry.go
│ │ │ ├── resolvers.go
│ │ │ └── types.go
│ │ └── sourceinfo/
│ │ ├── doc.go
│ │ ├── registry.go
│ │ └── update.go
│ ├── josharian/
│ │ └── intern/
│ │ ├── intern.go
│ │ └── license.md
│ ├── klauspost/
│ │ └── compress/
│ │ ├── .gitattributes
│ │ ├── LICENSE
│ │ ├── SECURITY.md
│ │ ├── compressible.go
│ │ ├── flate/
│ │ │ ├── deflate.go
│ │ │ ├── dict_decoder.go
│ │ │ ├── fast_encoder.go
│ │ │ ├── huffman_bit_writer.go
│ │ │ ├── huffman_code.go
│ │ │ ├── huffman_sortByFreq.go
│ │ │ ├── huffman_sortByLiteral.go
│ │ │ ├── inflate.go
│ │ │ ├── inflate_gen.go
│ │ │ ├── level1.go
│ │ │ ├── level2.go
│ │ │ ├── level3.go
│ │ │ ├── level4.go
│ │ │ ├── level5.go
│ │ │ ├── level6.go
│ │ │ ├── matchlen_generic.go
│ │ │ ├── regmask_amd64.go
│ │ │ ├── regmask_other.go
│ │ │ ├── stateless.go
│ │ │ └── token.go
│ │ ├── fse/
│ │ │ ├── bitreader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── bytereader.go
│ │ │ ├── compress.go
│ │ │ ├── decompress.go
│ │ │ └── fse.go
│ │ ├── gen.sh
│ │ ├── gzip/
│ │ │ ├── gunzip.go
│ │ │ └── gzip.go
│ │ ├── huff0/
│ │ │ ├── bitreader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── compress.go
│ │ │ ├── decompress.go
│ │ │ ├── decompress_amd64.go
│ │ │ ├── decompress_amd64.s
│ │ │ ├── decompress_generic.go
│ │ │ └── huff0.go
│ │ ├── internal/
│ │ │ ├── cpuinfo/
│ │ │ │ ├── cpuinfo.go
│ │ │ │ ├── cpuinfo_amd64.go
│ │ │ │ └── cpuinfo_amd64.s
│ │ │ ├── le/
│ │ │ │ ├── le.go
│ │ │ │ ├── unsafe_disabled.go
│ │ │ │ └── unsafe_enabled.go
│ │ │ ├── race/
│ │ │ │ ├── norace.go
│ │ │ │ └── race.go
│ │ │ └── snapref/
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── decode_other.go
│ │ │ ├── encode.go
│ │ │ ├── encode_other.go
│ │ │ └── snappy.go
│ │ ├── s2/
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── decode_amd64.s
│ │ │ ├── decode_arm64.s
│ │ │ ├── decode_asm.go
│ │ │ ├── decode_other.go
│ │ │ ├── dict.go
│ │ │ ├── encode.go
│ │ │ ├── encode_all.go
│ │ │ ├── encode_amd64.go
│ │ │ ├── encode_best.go
│ │ │ ├── encode_better.go
│ │ │ ├── encode_go.go
│ │ │ ├── encodeblock_amd64.go
│ │ │ ├── encodeblock_amd64.s
│ │ │ ├── index.go
│ │ │ ├── lz4convert.go
│ │ │ ├── lz4sconvert.go
│ │ │ ├── reader.go
│ │ │ ├── s2.go
│ │ │ └── writer.go
│ │ ├── s2sx.mod
│ │ ├── s2sx.sum
│ │ ├── snappy/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ └── snappy.go
│ │ └── zstd/
│ │ ├── bitreader.go
│ │ ├── bitwriter.go
│ │ ├── blockdec.go
│ │ ├── blockenc.go
│ │ ├── blocktype_string.go
│ │ ├── bytebuf.go
│ │ ├── bytereader.go
│ │ ├── decodeheader.go
│ │ ├── decoder.go
│ │ ├── decoder_options.go
│ │ ├── dict.go
│ │ ├── enc_base.go
│ │ ├── enc_best.go
│ │ ├── enc_better.go
│ │ ├── enc_dfast.go
│ │ ├── enc_fast.go
│ │ ├── encoder.go
│ │ ├── encoder_options.go
│ │ ├── framedec.go
│ │ ├── frameenc.go
│ │ ├── fse_decoder.go
│ │ ├── fse_decoder_amd64.go
│ │ ├── fse_decoder_amd64.s
│ │ ├── fse_decoder_generic.go
│ │ ├── fse_encoder.go
│ │ ├── fse_predefined.go
│ │ ├── hash.go
│ │ ├── history.go
│ │ ├── internal/
│ │ │ └── xxhash/
│ │ │ ├── LICENSE.txt
│ │ │ ├── xxhash.go
│ │ │ ├── xxhash_amd64.s
│ │ │ ├── xxhash_arm64.s
│ │ │ ├── xxhash_asm.go
│ │ │ ├── xxhash_other.go
│ │ │ └── xxhash_safe.go
│ │ ├── matchlen_amd64.go
│ │ ├── matchlen_amd64.s
│ │ ├── matchlen_generic.go
│ │ ├── seqdec.go
│ │ ├── seqdec_amd64.go
│ │ ├── seqdec_amd64.s
│ │ ├── seqdec_generic.go
│ │ ├── seqenc.go
│ │ ├── simple_go124.go
│ │ ├── snappy.go
│ │ ├── zip.go
│ │ └── zstd.go
│ ├── mailru/
│ │ └── easyjson/
│ │ ├── LICENSE
│ │ ├── buffer/
│ │ │ └── pool.go
│ │ ├── helpers.go
│ │ ├── jlexer/
│ │ │ ├── bytestostr.go
│ │ │ ├── bytestostr_nounsafe.go
│ │ │ ├── error.go
│ │ │ └── lexer.go
│ │ ├── jwriter/
│ │ │ └── writer.go
│ │ ├── raw.go
│ │ └── unknown_fields.go
│ ├── mattn/
│ │ ├── go-colorable/
│ │ │ ├── LICENSE
│ │ │ ├── colorable_others.go
│ │ │ ├── colorable_windows.go
│ │ │ ├── go.test.sh
│ │ │ └── noncolorable.go
│ │ └── go-isatty/
│ │ ├── LICENSE
│ │ ├── doc.go
│ │ ├── go.test.sh
│ │ ├── isatty_bsd.go
│ │ ├── isatty_others.go
│ │ ├── isatty_plan9.go
│ │ ├── isatty_solaris.go
│ │ ├── isatty_tcgets.go
│ │ └── isatty_windows.go
│ ├── mccutchen/
│ │ └── go-httpbin/
│ │ └── v2/
│ │ ├── LICENSE
│ │ └── httpbin/
│ │ ├── digest/
│ │ │ └── digest.go
│ │ ├── doc.go
│ │ ├── handlers.go
│ │ ├── helpers.go
│ │ ├── httpbin.go
│ │ ├── middleware.go
│ │ ├── options.go
│ │ ├── responses.go
│ │ ├── static/
│ │ │ ├── moby.html
│ │ │ ├── sample.xml
│ │ │ └── utf8.html
│ │ ├── static_assets.go
│ │ └── websocket/
│ │ └── websocket.go
│ ├── mstoykov/
│ │ ├── atlas/
│ │ │ ├── LICENSE
│ │ │ └── atlas.go
│ │ ├── envconfig/
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── doc.go
│ │ │ ├── env_os.go
│ │ │ ├── env_syscall.go
│ │ │ ├── envconfig.go
│ │ │ └── usage.go
│ │ └── k6-taskqueue-lib/
│ │ ├── LICENSE
│ │ └── taskqueue/
│ │ └── queuer.go
│ ├── munnerz/
│ │ └── goautoneg/
│ │ ├── LICENSE
│ │ └── autoneg.go
│ ├── nu7hatch/
│ │ └── gouuid/
│ │ ├── COPYING
│ │ └── uuid.go
│ ├── pkg/
│ │ └── browser/
│ │ ├── LICENSE
│ │ ├── browser.go
│ │ ├── browser_darwin.go
│ │ ├── browser_freebsd.go
│ │ ├── browser_linux.go
│ │ ├── browser_netbsd.go
│ │ ├── browser_openbsd.go
│ │ ├── browser_unsupported.go
│ │ └── browser_windows.go
│ ├── pmezard/
│ │ └── go-difflib/
│ │ ├── LICENSE
│ │ └── difflib/
│ │ └── difflib.go
│ ├── prometheus/
│ │ ├── client_golang/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── internal/
│ │ │ │ └── github.com/
│ │ │ │ └── golang/
│ │ │ │ └── gddo/
│ │ │ │ ├── LICENSE
│ │ │ │ └── httputil/
│ │ │ │ ├── header/
│ │ │ │ │ └── header.go
│ │ │ │ └── negotiate.go
│ │ │ └── prometheus/
│ │ │ ├── build_info_collector.go
│ │ │ ├── collector.go
│ │ │ ├── collectorfunc.go
│ │ │ ├── counter.go
│ │ │ ├── desc.go
│ │ │ ├── doc.go
│ │ │ ├── expvar_collector.go
│ │ │ ├── fnv.go
│ │ │ ├── gauge.go
│ │ │ ├── get_pid.go
│ │ │ ├── get_pid_gopherjs.go
│ │ │ ├── go_collector.go
│ │ │ ├── go_collector_go116.go
│ │ │ ├── go_collector_latest.go
│ │ │ ├── histogram.go
│ │ │ ├── internal/
│ │ │ │ ├── almost_equal.go
│ │ │ │ ├── difflib.go
│ │ │ │ ├── go_collector_options.go
│ │ │ │ ├── go_runtime_metrics.go
│ │ │ │ └── metric.go
│ │ │ ├── labels.go
│ │ │ ├── metric.go
│ │ │ ├── num_threads.go
│ │ │ ├── num_threads_gopherjs.go
│ │ │ ├── observer.go
│ │ │ ├── process_collector.go
│ │ │ ├── process_collector_darwin.go
│ │ │ ├── process_collector_mem_cgo_darwin.c
│ │ │ ├── process_collector_mem_cgo_darwin.go
│ │ │ ├── process_collector_mem_nocgo_darwin.go
│ │ │ ├── process_collector_not_supported.go
│ │ │ ├── process_collector_procfsenabled.go
│ │ │ ├── process_collector_windows.go
│ │ │ ├── promhttp/
│ │ │ │ ├── delegator.go
│ │ │ │ ├── http.go
│ │ │ │ ├── instrument_client.go
│ │ │ │ ├── instrument_server.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── compression.go
│ │ │ │ └── option.go
│ │ │ ├── registry.go
│ │ │ ├── summary.go
│ │ │ ├── timer.go
│ │ │ ├── untyped.go
│ │ │ ├── value.go
│ │ │ ├── vec.go
│ │ │ ├── vnext.go
│ │ │ └── wrap.go
│ │ ├── client_model/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── go/
│ │ │ └── metrics.pb.go
│ │ ├── common/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── expfmt/
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── expfmt.go
│ │ │ │ ├── fuzz.go
│ │ │ │ ├── openmetrics_create.go
│ │ │ │ ├── text_create.go
│ │ │ │ └── text_parse.go
│ │ │ └── model/
│ │ │ ├── alert.go
│ │ │ ├── fingerprinting.go
│ │ │ ├── fnv.go
│ │ │ ├── labels.go
│ │ │ ├── labelset.go
│ │ │ ├── labelset_string.go
│ │ │ ├── metadata.go
│ │ │ ├── metric.go
│ │ │ ├── model.go
│ │ │ ├── signature.go
│ │ │ ├── silence.go
│ │ │ ├── time.go
│ │ │ ├── value.go
│ │ │ ├── value_float.go
│ │ │ ├── value_histogram.go
│ │ │ └── value_type.go
│ │ └── procfs/
│ │ ├── LICENSE
│ │ ├── MAINTAINERS.md
│ │ ├── Makefile.common
│ │ ├── NOTICE
│ │ ├── SECURITY.md
│ │ ├── arp.go
│ │ ├── buddyinfo.go
│ │ ├── cmdline.go
│ │ ├── cpuinfo.go
│ │ ├── cpuinfo_armx.go
│ │ ├── cpuinfo_loong64.go
│ │ ├── cpuinfo_mipsx.go
│ │ ├── cpuinfo_others.go
│ │ ├── cpuinfo_ppcx.go
│ │ ├── cpuinfo_riscvx.go
│ │ ├── cpuinfo_s390x.go
│ │ ├── cpuinfo_x86.go
│ │ ├── crypto.go
│ │ ├── doc.go
│ │ ├── fs.go
│ │ ├── fs_statfs_notype.go
│ │ ├── fs_statfs_type.go
│ │ ├── fscache.go
│ │ ├── internal/
│ │ │ ├── fs/
│ │ │ │ └── fs.go
│ │ │ └── util/
│ │ │ ├── parse.go
│ │ │ ├── readfile.go
│ │ │ ├── sysreadfile.go
│ │ │ ├── sysreadfile_compat.go
│ │ │ └── valueparser.go
│ │ ├── ipvs.go
│ │ ├── kernel_random.go
│ │ ├── loadavg.go
│ │ ├── mdstat.go
│ │ ├── meminfo.go
│ │ ├── mountinfo.go
│ │ ├── mountstats.go
│ │ ├── net_conntrackstat.go
│ │ ├── net_dev.go
│ │ ├── net_dev_snmp6.go
│ │ ├── net_ip_socket.go
│ │ ├── net_protocols.go
│ │ ├── net_route.go
│ │ ├── net_sockstat.go
│ │ ├── net_softnet.go
│ │ ├── net_tcp.go
│ │ ├── net_tls_stat.go
│ │ ├── net_udp.go
│ │ ├── net_unix.go
│ │ ├── net_wireless.go
│ │ ├── net_xfrm.go
│ │ ├── netstat.go
│ │ ├── proc.go
│ │ ├── proc_cgroup.go
│ │ ├── proc_cgroups.go
│ │ ├── proc_environ.go
│ │ ├── proc_fdinfo.go
│ │ ├── proc_interrupts.go
│ │ ├── proc_io.go
│ │ ├── proc_limits.go
│ │ ├── proc_maps.go
│ │ ├── proc_netstat.go
│ │ ├── proc_ns.go
│ │ ├── proc_psi.go
│ │ ├── proc_smaps.go
│ │ ├── proc_snmp.go
│ │ ├── proc_snmp6.go
│ │ ├── proc_stat.go
│ │ ├── proc_status.go
│ │ ├── proc_sys.go
│ │ ├── schedstat.go
│ │ ├── slab.go
│ │ ├── softirqs.go
│ │ ├── stat.go
│ │ ├── swaps.go
│ │ ├── thread.go
│ │ ├── ttar
│ │ ├── vm.go
│ │ └── zoneinfo.go
│ ├── r3labs/
│ │ └── sse/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── client.go
│ │ ├── event.go
│ │ ├── event_log.go
│ │ ├── http.go
│ │ ├── server.go
│ │ ├── stream.go
│ │ └── subscriber.go
│ ├── redis/
│ │ └── go-redis/
│ │ └── v9/
│ │ ├── LICENSE
│ │ ├── RELEASE-NOTES.md
│ │ ├── RELEASING.md
│ │ ├── acl_commands.go
│ │ ├── adapters.go
│ │ ├── auth/
│ │ │ ├── auth.go
│ │ │ └── reauth_credentials_listener.go
│ │ ├── bitmap_commands.go
│ │ ├── cluster_commands.go
│ │ ├── command.go
│ │ ├── commands.go
│ │ ├── doc.go
│ │ ├── error.go
│ │ ├── generic_commands.go
│ │ ├── geo_commands.go
│ │ ├── hash_commands.go
│ │ ├── hyperloglog_commands.go
│ │ ├── internal/
│ │ │ ├── arg.go
│ │ │ ├── auth/
│ │ │ │ └── streaming/
│ │ │ │ ├── conn_reauth_credentials_listener.go
│ │ │ │ ├── cred_listeners.go
│ │ │ │ ├── manager.go
│ │ │ │ └── pool_hook.go
│ │ │ ├── hashtag/
│ │ │ │ └── hashtag.go
│ │ │ ├── hscan/
│ │ │ │ ├── hscan.go
│ │ │ │ └── structmap.go
│ │ │ ├── interfaces/
│ │ │ │ └── interfaces.go
│ │ │ ├── internal.go
│ │ │ ├── log.go
│ │ │ ├── maintnotifications/
│ │ │ │ └── logs/
│ │ │ │ └── log_messages.go
│ │ │ ├── once.go
│ │ │ ├── pool/
│ │ │ │ ├── conn.go
│ │ │ │ ├── conn_check.go
│ │ │ │ ├── conn_check_dummy.go
│ │ │ │ ├── conn_state.go
│ │ │ │ ├── hooks.go
│ │ │ │ ├── pool.go
│ │ │ │ ├── pool_single.go
│ │ │ │ ├── pool_sticky.go
│ │ │ │ ├── pubsub.go
│ │ │ │ └── want_conn.go
│ │ │ ├── proto/
│ │ │ │ ├── reader.go
│ │ │ │ ├── redis_errors.go
│ │ │ │ ├── scan.go
│ │ │ │ └── writer.go
│ │ │ ├── rand/
│ │ │ │ └── rand.go
│ │ │ ├── redis.go
│ │ │ ├── semaphore.go
│ │ │ ├── util/
│ │ │ │ ├── convert.go
│ │ │ │ ├── math.go
│ │ │ │ ├── safe.go
│ │ │ │ ├── strconv.go
│ │ │ │ ├── type.go
│ │ │ │ └── unsafe.go
│ │ │ └── util.go
│ │ ├── iterator.go
│ │ ├── json.go
│ │ ├── list_commands.go
│ │ ├── maintnotifications/
│ │ │ ├── FEATURES.md
│ │ │ ├── circuit_breaker.go
│ │ │ ├── config.go
│ │ │ ├── errors.go
│ │ │ ├── example_hooks.go
│ │ │ ├── handoff_worker.go
│ │ │ ├── hooks.go
│ │ │ ├── manager.go
│ │ │ ├── pool_hook.go
│ │ │ ├── push_notification_handler.go
│ │ │ └── state.go
│ │ ├── options.go
│ │ ├── osscluster.go
│ │ ├── osscluster_commands.go
│ │ ├── pipeline.go
│ │ ├── probabilistic.go
│ │ ├── pubsub.go
│ │ ├── pubsub_commands.go
│ │ ├── push/
│ │ │ ├── errors.go
│ │ │ ├── handler.go
│ │ │ ├── handler_context.go
│ │ │ ├── processor.go
│ │ │ ├── push.go
│ │ │ └── registry.go
│ │ ├── push_notifications.go
│ │ ├── redis.go
│ │ ├── result.go
│ │ ├── ring.go
│ │ ├── script.go
│ │ ├── scripting_commands.go
│ │ ├── search_builders.go
│ │ ├── search_commands.go
│ │ ├── sentinel.go
│ │ ├── set_commands.go
│ │ ├── sortedset_commands.go
│ │ ├── stream_commands.go
│ │ ├── string_commands.go
│ │ ├── timeseries_commands.go
│ │ ├── tx.go
│ │ ├── universal.go
│ │ ├── vectorset_commands.go
│ │ └── version.go
│ ├── serenize/
│ │ └── snaker/
│ │ ├── LICENSE.txt
│ │ └── snaker.go
│ ├── sirupsen/
│ │ └── logrus/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── alt_exit.go
│ │ ├── buffer_pool.go
│ │ ├── doc.go
│ │ ├── entry.go
│ │ ├── exported.go
│ │ ├── formatter.go
│ │ ├── hooks/
│ │ │ └── test/
│ │ │ └── test.go
│ │ ├── hooks.go
│ │ ├── json_formatter.go
│ │ ├── logger.go
│ │ ├── logrus.go
│ │ ├── terminal_check_appengine.go
│ │ ├── terminal_check_bsd.go
│ │ ├── terminal_check_js.go
│ │ ├── terminal_check_no_terminal.go
│ │ ├── terminal_check_notappengine.go
│ │ ├── terminal_check_solaris.go
│ │ ├── terminal_check_unix.go
│ │ ├── terminal_check_windows.go
│ │ ├── text_formatter.go
│ │ └── writer.go
│ ├── spf13/
│ │ ├── afero/
│ │ │ ├── LICENSE.txt
│ │ │ ├── afero.go
│ │ │ ├── basepath.go
│ │ │ ├── cacheOnReadFs.go
│ │ │ ├── const_bsds.go
│ │ │ ├── const_win_unix.go
│ │ │ ├── copyOnWriteFs.go
│ │ │ ├── httpFs.go
│ │ │ ├── ioutil.go
│ │ │ ├── lstater.go
│ │ │ ├── match.go
│ │ │ ├── mem/
│ │ │ │ ├── dir.go
│ │ │ │ ├── dirmap.go
│ │ │ │ └── file.go
│ │ │ ├── memmap.go
│ │ │ ├── os.go
│ │ │ ├── path.go
│ │ │ ├── readonlyfs.go
│ │ │ ├── regexpfs.go
│ │ │ ├── unionFile.go
│ │ │ └── util.go
│ │ ├── cobra/
│ │ │ ├── .mailmap
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONDUCT.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── MAINTAINERS
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completions.md
│ │ │ ├── bash_completionsV2.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── completions.go
│ │ │ ├── fish_completions.go
│ │ │ ├── fish_completions.md
│ │ │ ├── powershell_completions.go
│ │ │ ├── powershell_completions.md
│ │ │ ├── projects_using_cobra.md
│ │ │ ├── shell_completions.go
│ │ │ ├── shell_completions.md
│ │ │ ├── user_guide.md
│ │ │ ├── zsh_completions.go
│ │ │ └── zsh_completions.md
│ │ └── pflag/
│ │ ├── LICENSE
│ │ ├── bool.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float32_slice.go
│ │ ├── float64.go
│ │ ├── float64_slice.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int32_slice.go
│ │ ├── int64.go
│ │ ├── int64_slice.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_int64.go
│ │ ├── string_to_string.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ └── uint_slice.go
│ ├── stretchr/
│ │ └── testify/
│ │ ├── LICENSE
│ │ ├── assert/
│ │ │ ├── assertion_compare.go
│ │ │ ├── assertion_format.go
│ │ │ ├── assertion_forward.go
│ │ │ ├── assertion_order.go
│ │ │ ├── assertions.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── forward_assertions.go
│ │ │ ├── http_assertions.go
│ │ │ └── yaml/
│ │ │ ├── yaml_custom.go
│ │ │ ├── yaml_default.go
│ │ │ └── yaml_fail.go
│ │ └── require/
│ │ ├── doc.go
│ │ ├── forward_requirements.go
│ │ ├── require.go
│ │ ├── require_forward.go
│ │ └── requirements.go
│ └── tidwall/
│ ├── gjson/
│ │ ├── LICENSE
│ │ ├── SYNTAX.md
│ │ └── gjson.go
│ ├── match/
│ │ ├── LICENSE
│ │ └── match.go
│ └── pretty/
│ ├── LICENSE
│ └── pretty.go
├── go.opentelemetry.io/
│ ├── auto/
│ │ └── sdk/
│ │ ├── LICENSE
│ │ ├── VERSIONING.md
│ │ ├── doc.go
│ │ ├── internal/
│ │ │ └── telemetry/
│ │ │ ├── attr.go
│ │ │ ├── doc.go
│ │ │ ├── id.go
│ │ │ ├── number.go
│ │ │ ├── resource.go
│ │ │ ├── scope.go
│ │ │ ├── span.go
│ │ │ ├── status.go
│ │ │ ├── traces.go
│ │ │ └── value.go
│ │ ├── limit.go
│ │ ├── span.go
│ │ ├── tracer.go
│ │ └── tracer_provider.go
│ ├── otel/
│ │ ├── .codespellignore
│ │ ├── .codespellrc
│ │ ├── .gitattributes
│ │ ├── .lycheeignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── RELEASING.md
│ │ ├── VERSIONING.md
│ │ ├── attribute/
│ │ │ ├── doc.go
│ │ │ ├── encoder.go
│ │ │ ├── filter.go
│ │ │ ├── hash.go
│ │ │ ├── internal/
│ │ │ │ ├── attribute.go
│ │ │ │ └── xxhash/
│ │ │ │ └── xxhash.go
│ │ │ ├── iterator.go
│ │ │ ├── key.go
│ │ │ ├── kv.go
│ │ │ ├── rawhelpers.go
│ │ │ ├── set.go
│ │ │ ├── type_string.go
│ │ │ └── value.go
│ │ ├── baggage/
│ │ │ ├── baggage.go
│ │ │ ├── context.go
│ │ │ └── doc.go
│ │ ├── codes/
│ │ │ ├── codes.go
│ │ │ └── doc.go
│ │ ├── dependencies.Dockerfile
│ │ ├── doc.go
│ │ ├── error_handler.go
│ │ ├── exporters/
│ │ │ └── otlp/
│ │ │ ├── otlpmetric/
│ │ │ │ ├── otlpmetricgrpc/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── client.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── exporter.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ │ ├── gen.go
│ │ │ │ │ │ ├── oconf/
│ │ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ │ └── tls.go
│ │ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ │ ├── retry/
│ │ │ │ │ │ │ └── retry.go
│ │ │ │ │ │ └── transform/
│ │ │ │ │ │ ├── attribute.go
│ │ │ │ │ │ ├── error.go
│ │ │ │ │ │ └── metricdata.go
│ │ │ │ │ └── version.go
│ │ │ │ └── otlpmetrichttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── oconf/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ ├── retry/
│ │ │ │ │ │ └── retry.go
│ │ │ │ │ └── transform/
│ │ │ │ │ ├── attribute.go
│ │ │ │ │ ├── error.go
│ │ │ │ │ └── metricdata.go
│ │ │ │ └── version.go
│ │ │ └── otlptrace/
│ │ │ ├── LICENSE
│ │ │ ├── clients.go
│ │ │ ├── doc.go
│ │ │ ├── exporter.go
│ │ │ ├── internal/
│ │ │ │ └── tracetransform/
│ │ │ │ ├── attribute.go
│ │ │ │ ├── instrumentation.go
│ │ │ │ ├── resource.go
│ │ │ │ └── span.go
│ │ │ ├── otlptracegrpc/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── otlpconfig/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ └── retry/
│ │ │ │ │ └── retry.go
│ │ │ │ └── options.go
│ │ │ ├── otlptracehttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── otlpconfig/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ └── retry/
│ │ │ │ │ └── retry.go
│ │ │ │ └── options.go
│ │ │ └── version.go
│ │ ├── handler.go
│ │ ├── internal/
│ │ │ ├── baggage/
│ │ │ │ ├── baggage.go
│ │ │ │ └── context.go
│ │ │ └── global/
│ │ │ ├── handler.go
│ │ │ ├── instruments.go
│ │ │ ├── internal_logging.go
│ │ │ ├── meter.go
│ │ │ ├── propagator.go
│ │ │ ├── state.go
│ │ │ └── trace.go
│ │ ├── internal_logging.go
│ │ ├── metric/
│ │ │ ├── LICENSE
│ │ │ ├── asyncfloat64.go
│ │ │ ├── asyncint64.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ └── embedded.go
│ │ │ ├── instrument.go
│ │ │ ├── meter.go
│ │ │ ├── noop/
│ │ │ │ └── noop.go
│ │ │ ├── syncfloat64.go
│ │ │ └── syncint64.go
│ │ ├── metric.go
│ │ ├── propagation/
│ │ │ ├── baggage.go
│ │ │ ├── doc.go
│ │ │ ├── propagation.go
│ │ │ └── trace_context.go
│ │ ├── propagation.go
│ │ ├── sdk/
│ │ │ ├── LICENSE
│ │ │ ├── instrumentation/
│ │ │ │ ├── doc.go
│ │ │ │ ├── library.go
│ │ │ │ └── scope.go
│ │ │ ├── internal/
│ │ │ │ └── x/
│ │ │ │ ├── features.go
│ │ │ │ └── x.go
│ │ │ ├── metric/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── aggregation.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── env.go
│ │ │ │ ├── exemplar/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── exemplar.go
│ │ │ │ │ ├── filter.go
│ │ │ │ │ ├── fixed_size_reservoir.go
│ │ │ │ │ ├── histogram_reservoir.go
│ │ │ │ │ ├── reservoir.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── value.go
│ │ │ │ ├── exemplar.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── instrument.go
│ │ │ │ ├── instrumentkind_string.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── aggregate/
│ │ │ │ │ │ ├── aggregate.go
│ │ │ │ │ │ ├── atomic.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── drop.go
│ │ │ │ │ │ ├── exemplar.go
│ │ │ │ │ │ ├── exponential_histogram.go
│ │ │ │ │ │ ├── filtered_reservoir.go
│ │ │ │ │ │ ├── histogram.go
│ │ │ │ │ │ ├── lastvalue.go
│ │ │ │ │ │ ├── limit.go
│ │ │ │ │ │ └── sum.go
│ │ │ │ │ ├── observ/
│ │ │ │ │ │ └── instrumentation.go
│ │ │ │ │ ├── reservoir/
│ │ │ │ │ │ ├── concurrent_safe.go
│ │ │ │ │ │ └── doc.go
│ │ │ │ │ └── reuse_slice.go
│ │ │ │ ├── manual_reader.go
│ │ │ │ ├── meter.go
│ │ │ │ ├── metricdata/
│ │ │ │ │ ├── data.go
│ │ │ │ │ ├── temporality.go
│ │ │ │ │ └── temporality_string.go
│ │ │ │ ├── periodic_reader.go
│ │ │ │ ├── pipeline.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── version.go
│ │ │ │ └── view.go
│ │ │ ├── resource/
│ │ │ │ ├── auto.go
│ │ │ │ ├── builtin.go
│ │ │ │ ├── config.go
│ │ │ │ ├── container.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── env.go
│ │ │ │ ├── host_id.go
│ │ │ │ ├── host_id_bsd.go
│ │ │ │ ├── host_id_darwin.go
│ │ │ │ ├── host_id_exec.go
│ │ │ │ ├── host_id_linux.go
│ │ │ │ ├── host_id_readfile.go
│ │ │ │ ├── host_id_unsupported.go
│ │ │ │ ├── host_id_windows.go
│ │ │ │ ├── os.go
│ │ │ │ ├── os_release_darwin.go
│ │ │ │ ├── os_release_unix.go
│ │ │ │ ├── os_unix.go
│ │ │ │ ├── os_unsupported.go
│ │ │ │ ├── os_windows.go
│ │ │ │ ├── process.go
│ │ │ │ └── resource.go
│ │ │ ├── trace/
│ │ │ │ ├── batch_span_processor.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── evictedqueue.go
│ │ │ │ ├── id_generator.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── env/
│ │ │ │ │ │ └── env.go
│ │ │ │ │ └── observ/
│ │ │ │ │ ├── batch_span_processor.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── simple_span_processor.go
│ │ │ │ │ └── tracer.go
│ │ │ │ ├── link.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── sampler_env.go
│ │ │ │ ├── sampling.go
│ │ │ │ ├── simple_span_processor.go
│ │ │ │ ├── snapshot.go
│ │ │ │ ├── span.go
│ │ │ │ ├── span_exporter.go
│ │ │ │ ├── span_limits.go
│ │ │ │ ├── span_processor.go
│ │ │ │ └── tracer.go
│ │ │ └── version.go
│ │ ├── semconv/
│ │ │ ├── v1.20.0/
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── exception.go
│ │ │ │ ├── http.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── schema.go
│ │ │ │ └── trace.go
│ │ │ ├── v1.24.0/
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── exception.go
│ │ │ │ ├── metric.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── schema.go
│ │ │ │ └── trace.go
│ │ │ ├── v1.37.0/
│ │ │ │ ├── MIGRATION.md
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── error_type.go
│ │ │ │ ├── exception.go
│ │ │ │ └── schema.go
│ │ │ └── v1.39.0/
│ │ │ ├── MIGRATION.md
│ │ │ ├── attribute_group.go
│ │ │ ├── doc.go
│ │ │ ├── error_type.go
│ │ │ ├── exception.go
│ │ │ ├── otelconv/
│ │ │ │ └── metric.go
│ │ │ └── schema.go
│ │ ├── trace/
│ │ │ ├── LICENSE
│ │ │ ├── auto.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ └── embedded.go
│ │ │ ├── hex.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── nonrecording.go
│ │ │ ├── noop/
│ │ │ │ └── noop.go
│ │ │ ├── noop.go
│ │ │ ├── provider.go
│ │ │ ├── span.go
│ │ │ ├── trace.go
│ │ │ ├── tracer.go
│ │ │ └── tracestate.go
│ │ ├── trace.go
│ │ ├── verify_released_changelog.sh
│ │ └── version.go
│ └── proto/
│ └── otlp/
│ ├── LICENSE
│ ├── collector/
│ │ ├── metrics/
│ │ │ └── v1/
│ │ │ ├── metrics_service.pb.go
│ │ │ ├── metrics_service.pb.gw.go
│ │ │ └── metrics_service_grpc.pb.go
│ │ └── trace/
│ │ └── v1/
│ │ ├── trace_service.pb.go
│ │ ├── trace_service.pb.gw.go
│ │ └── trace_service_grpc.pb.go
│ ├── common/
│ │ └── v1/
│ │ └── common.pb.go
│ ├── metrics/
│ │ └── v1/
│ │ └── metrics.pb.go
│ ├── resource/
│ │ └── v1/
│ │ └── resource.pb.go
│ └── trace/
│ └── v1/
│ └── trace.pb.go
├── go.uber.org/
│ └── goleak/
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── doc.go
│ ├── internal/
│ │ └── stack/
│ │ ├── doc.go
│ │ ├── scan.go
│ │ └── stacks.go
│ ├── leaks.go
│ ├── options.go
│ ├── testmain.go
│ └── tracestack_new.go
├── go.yaml.in/
│ └── yaml/
│ └── v2/
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── md4/
│ │ │ ├── md4.go
│ │ │ └── md4block.go
│ │ ├── ocsp/
│ │ │ └── ocsp.go
│ │ ├── ripemd160/
│ │ │ ├── ripemd160.go
│ │ │ └── ripemd160block.go
│ │ └── x509roots/
│ │ └── fallback/
│ │ ├── LICENSE
│ │ ├── bundle/
│ │ │ ├── bundle.der
│ │ │ ├── bundle.go
│ │ │ └── roots.go
│ │ └── fallback.go
│ ├── net/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── context/
│ │ │ └── context.go
│ │ ├── html/
│ │ │ ├── atom/
│ │ │ │ ├── atom.go
│ │ │ │ └── table.go
│ │ │ ├── const.go
│ │ │ ├── doc.go
│ │ │ ├── doctype.go
│ │ │ ├── entity.go
│ │ │ ├── escape.go
│ │ │ ├── foreign.go
│ │ │ ├── iter.go
│ │ │ ├── node.go
│ │ │ ├── parse.go
│ │ │ ├── render.go
│ │ │ └── token.go
│ │ ├── http/
│ │ │ └── httpguts/
│ │ │ ├── guts.go
│ │ │ └── httplex.go
│ │ ├── http2/
│ │ │ ├── ascii.go
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── config.go
│ │ │ ├── config_go125.go
│ │ │ ├── config_go126.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── gotrack.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ ├── static_table.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── transport.go
│ │ │ ├── unencrypted.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority_rfc7540.go
│ │ │ ├── writesched_priority_rfc9218.go
│ │ │ ├── writesched_random.go
│ │ │ └── writesched_roundrobin.go
│ │ ├── idna/
│ │ │ ├── go118.go
│ │ │ ├── idna10.0.0.go
│ │ │ ├── idna9.0.0.go
│ │ │ ├── pre_go118.go
│ │ │ ├── punycode.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── trie.go
│ │ │ ├── trie12.0.0.go
│ │ │ ├── trie13.0.0.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ ├── httpcommon/
│ │ │ │ ├── ascii.go
│ │ │ │ ├── headermap.go
│ │ │ │ └── request.go
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ └── trace/
│ │ ├── events.go
│ │ ├── histogram.go
│ │ └── trace.go
│ ├── sync/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── errgroup/
│ │ │ └── errgroup.go
│ │ └── semaphore/
│ │ └── semaphore.go
│ ├── sys/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_bsd_386.s
│ │ │ ├── asm_bsd_amd64.s
│ │ │ ├── asm_bsd_arm.s
│ │ │ ├── asm_bsd_arm64.s
│ │ │ ├── asm_bsd_ppc64.s
│ │ │ ├── asm_bsd_riscv64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_loong64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_openbsd_mips64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── asm_zos_s390x.s
│ │ │ ├── auxv.go
│ │ │ ├── auxv_unsupported.go
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── bpxsvc_zos.go
│ │ │ ├── bpxsvc_zos.s
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dev_zos.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── fdset.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ifreq_linux.go
│ │ │ ├── ioctl_linux.go
│ │ │ ├── ioctl_signed.go
│ │ │ ├── ioctl_unsigned.go
│ │ │ ├── ioctl_zos.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mmap_nomremap.go
│ │ │ ├── mremap.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── ptrace_darwin.go
│ │ │ ├── ptrace_ios.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_dragonfly.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── sockcmsg_unix_other.go
│ │ │ ├── sockcmsg_zos.go
│ │ │ ├── symaddr_zos_s390x.s
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ ├── syscall_hurd.go
│ │ │ ├── syscall_hurd_386.go
│ │ │ ├── syscall_illumos.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_alarm.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gc_arm.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_loong64.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_openbsd_libc.go
│ │ │ ├── syscall_openbsd_mips64.go
│ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── syscall_zos_s390x.go
│ │ │ ├── sysvshm_linux.go
│ │ │ ├── sysvshm_unix.go
│ │ │ ├── sysvshm_unix_other.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── vgetrandom_linux.go
│ │ │ ├── vgetrandom_unsupported.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ ├── zerrors_linux.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_loong64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zerrors_zos_s390x.go
│ │ │ ├── zptrace_armnn_linux.go
│ │ │ ├── zptrace_linux_arm64.go
│ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ ├── zptrace_x86_linux.go
│ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ ├── zsyscall_linux.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_loong64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_386.s
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsyscall_zos_s390x.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_loong64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ ├── zsysnum_zos_s390x.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ ├── ztypes_linux.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_loong64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ ├── ztypes_solaris_amd64.go
│ │ │ └── ztypes_zos_s390x.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── registry/
│ │ │ ├── key.go
│ │ │ ├── mksyscall.go
│ │ │ ├── syscall.go
│ │ │ ├── value.go
│ │ │ └── zsyscall_windows.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── setupapi_windows.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── types_windows_arm64.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── term/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── codereview.cfg
│ │ ├── term.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_unsupported.go
│ │ ├── term_windows.go
│ │ └── terminal.go
│ ├── text/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── cases/
│ │ │ ├── cases.go
│ │ │ ├── context.go
│ │ │ ├── fold.go
│ │ │ ├── icu.go
│ │ │ ├── info.go
│ │ │ ├── map.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── collate/
│ │ │ ├── collate.go
│ │ │ ├── index.go
│ │ │ ├── option.go
│ │ │ ├── sort.go
│ │ │ └── tables.go
│ │ ├── internal/
│ │ │ ├── colltab/
│ │ │ │ ├── collelem.go
│ │ │ │ ├── colltab.go
│ │ │ │ ├── contract.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── numeric.go
│ │ │ │ ├── table.go
│ │ │ │ ├── trie.go
│ │ │ │ └── weighter.go
│ │ │ ├── internal.go
│ │ │ ├── language/
│ │ │ │ ├── common.go
│ │ │ │ ├── compact/
│ │ │ │ │ ├── compact.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── parents.go
│ │ │ │ │ ├── tables.go
│ │ │ │ │ └── tags.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── coverage.go
│ │ │ │ ├── language.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── match.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── match.go
│ │ │ └── tag/
│ │ │ └── tag.go
│ │ ├── language/
│ │ │ ├── coverage.go
│ │ │ ├── doc.go
│ │ │ ├── language.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ ├── bidirule.go
│ │ │ ├── bidirule10.0.0.go
│ │ │ └── bidirule9.0.0.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── norm/
│ │ │ ├── composition.go
│ │ │ ├── forminfo.go
│ │ │ ├── input.go
│ │ │ ├── iter.go
│ │ │ ├── normalize.go
│ │ │ ├── readwriter.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── transform.go
│ │ │ └── trie.go
│ │ └── rangetable/
│ │ ├── merge.go
│ │ ├── rangetable.go
│ │ ├── tables10.0.0.go
│ │ ├── tables11.0.0.go
│ │ ├── tables12.0.0.go
│ │ ├── tables13.0.0.go
│ │ ├── tables15.0.0.go
│ │ └── tables9.0.0.go
│ └── time/
│ ├── LICENSE
│ ├── PATENTS
│ └── rate/
│ ├── rate.go
│ └── sometimes.go
├── google.golang.org/
│ ├── genproto/
│ │ └── googleapis/
│ │ ├── api/
│ │ │ ├── LICENSE
│ │ │ └── httpbody/
│ │ │ └── httpbody.pb.go
│ │ └── rpc/
│ │ ├── LICENSE
│ │ ├── errdetails/
│ │ │ └── error_details.pb.go
│ │ └── status/
│ │ └── status.pb.go
│ ├── grpc/
│ │ ├── AUTHORS
│ │ ├── CODE-OF-CONDUCT.md
│ │ ├── GOVERNANCE.md
│ │ ├── LICENSE
│ │ ├── MAINTAINERS.md
│ │ ├── SECURITY.md
│ │ ├── attributes/
│ │ │ └── attributes.go
│ │ ├── backoff/
│ │ │ └── backoff.go
│ │ ├── backoff.go
│ │ ├── balancer/
│ │ │ ├── balancer.go
│ │ │ ├── base/
│ │ │ │ ├── balancer.go
│ │ │ │ └── base.go
│ │ │ ├── conn_state_evaluator.go
│ │ │ ├── endpointsharding/
│ │ │ │ └── endpointsharding.go
│ │ │ ├── grpclb/
│ │ │ │ └── state/
│ │ │ │ └── state.go
│ │ │ ├── pickfirst/
│ │ │ │ ├── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ └── pickfirst.go
│ │ │ ├── roundrobin/
│ │ │ │ └── roundrobin.go
│ │ │ └── subconn.go
│ │ ├── balancer_wrapper.go
│ │ ├── binarylog/
│ │ │ └── grpc_binarylog_v1/
│ │ │ └── binarylog.pb.go
│ │ ├── call.go
│ │ ├── channelz/
│ │ │ └── channelz.go
│ │ ├── clientconn.go
│ │ ├── codec.go
│ │ ├── codes/
│ │ │ ├── code_string.go
│ │ │ └── codes.go
│ │ ├── connectivity/
│ │ │ └── connectivity.go
│ │ ├── credentials/
│ │ │ ├── credentials.go
│ │ │ ├── insecure/
│ │ │ │ └── insecure.go
│ │ │ └── tls.go
│ │ ├── dialoptions.go
│ │ ├── doc.go
│ │ ├── encoding/
│ │ │ ├── encoding.go
│ │ │ ├── encoding_v2.go
│ │ │ ├── gzip/
│ │ │ │ └── gzip.go
│ │ │ ├── internal/
│ │ │ │ └── internal.go
│ │ │ └── proto/
│ │ │ └── proto.go
│ │ ├── experimental/
│ │ │ └── stats/
│ │ │ ├── metricregistry.go
│ │ │ └── metrics.go
│ │ ├── grpclog/
│ │ │ ├── component.go
│ │ │ ├── grpclog.go
│ │ │ ├── internal/
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── logger.go
│ │ │ └── loggerv2.go
│ │ ├── health/
│ │ │ ├── client.go
│ │ │ ├── grpc_health_v1/
│ │ │ │ ├── health.pb.go
│ │ │ │ └── health_grpc.pb.go
│ │ │ ├── logging.go
│ │ │ ├── producer.go
│ │ │ └── server.go
│ │ ├── interceptor.go
│ │ ├── internal/
│ │ │ ├── backoff/
│ │ │ │ └── backoff.go
│ │ │ ├── balancer/
│ │ │ │ └── gracefulswitch/
│ │ │ │ ├── config.go
│ │ │ │ └── gracefulswitch.go
│ │ │ ├── balancerload/
│ │ │ │ └── load.go
│ │ │ ├── binarylog/
│ │ │ │ ├── binarylog.go
│ │ │ │ ├── binarylog_testutil.go
│ │ │ │ ├── env_config.go
│ │ │ │ ├── method_logger.go
│ │ │ │ └── sink.go
│ │ │ ├── buffer/
│ │ │ │ └── unbounded.go
│ │ │ ├── channelz/
│ │ │ │ ├── channel.go
│ │ │ │ ├── channelmap.go
│ │ │ │ ├── funcs.go
│ │ │ │ ├── logging.go
│ │ │ │ ├── server.go
│ │ │ │ ├── socket.go
│ │ │ │ ├── subchannel.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_nonlinux.go
│ │ │ │ └── trace.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── spiffe.go
│ │ │ │ ├── syscallconn.go
│ │ │ │ └── util.go
│ │ │ ├── envconfig/
│ │ │ │ ├── envconfig.go
│ │ │ │ ├── observability.go
│ │ │ │ └── xds.go
│ │ │ ├── experimental.go
│ │ │ ├── grpclog/
│ │ │ │ └── prefix_logger.go
│ │ │ ├── grpcsync/
│ │ │ │ ├── callback_serializer.go
│ │ │ │ ├── event.go
│ │ │ │ └── pubsub.go
│ │ │ ├── grpcutil/
│ │ │ │ ├── compressor.go
│ │ │ │ ├── encode_duration.go
│ │ │ │ ├── grpcutil.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── method.go
│ │ │ │ └── regex.go
│ │ │ ├── idle/
│ │ │ │ └── idle.go
│ │ │ ├── internal.go
│ │ │ ├── metadata/
│ │ │ │ └── metadata.go
│ │ │ ├── pretty/
│ │ │ │ └── pretty.go
│ │ │ ├── proxyattributes/
│ │ │ │ └── proxyattributes.go
│ │ │ ├── resolver/
│ │ │ │ ├── config_selector.go
│ │ │ │ ├── delegatingresolver/
│ │ │ │ │ └── delegatingresolver.go
│ │ │ │ ├── dns/
│ │ │ │ │ ├── dns_resolver.go
│ │ │ │ │ └── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ ├── passthrough/
│ │ │ │ │ └── passthrough.go
│ │ │ │ └── unix/
│ │ │ │ └── unix.go
│ │ │ ├── serviceconfig/
│ │ │ │ ├── duration.go
│ │ │ │ └── serviceconfig.go
│ │ │ ├── stats/
│ │ │ │ ├── labels.go
│ │ │ │ ├── metrics_recorder_list.go
│ │ │ │ └── stats.go
│ │ │ ├── status/
│ │ │ │ └── status.go
│ │ │ ├── syscall/
│ │ │ │ ├── syscall_linux.go
│ │ │ │ └── syscall_nonlinux.go
│ │ │ ├── tcp_keepalive_others.go
│ │ │ ├── tcp_keepalive_unix.go
│ │ │ ├── tcp_keepalive_windows.go
│ │ │ └── transport/
│ │ │ ├── bdp_estimator.go
│ │ │ ├── client_stream.go
│ │ │ ├── controlbuf.go
│ │ │ ├── defaults.go
│ │ │ ├── flowcontrol.go
│ │ │ ├── handler_server.go
│ │ │ ├── http2_client.go
│ │ │ ├── http2_server.go
│ │ │ ├── http_util.go
│ │ │ ├── logging.go
│ │ │ ├── networktype/
│ │ │ │ └── networktype.go
│ │ │ ├── proxy.go
│ │ │ ├── server_stream.go
│ │ │ └── transport.go
│ │ ├── keepalive/
│ │ │ └── keepalive.go
│ │ ├── mem/
│ │ │ ├── buffer_pool.go
│ │ │ ├── buffer_slice.go
│ │ │ └── buffers.go
│ │ ├── metadata/
│ │ │ └── metadata.go
│ │ ├── peer/
│ │ │ └── peer.go
│ │ ├── picker_wrapper.go
│ │ ├── preloader.go
│ │ ├── reflection/
│ │ │ ├── adapt.go
│ │ │ ├── grpc_reflection_v1/
│ │ │ │ ├── reflection.pb.go
│ │ │ │ └── reflection_grpc.pb.go
│ │ │ ├── grpc_reflection_v1alpha/
│ │ │ │ ├── reflection.pb.go
│ │ │ │ └── reflection_grpc.pb.go
│ │ │ ├── internal/
│ │ │ │ └── internal.go
│ │ │ └── serverreflection.go
│ │ ├── resolver/
│ │ │ ├── dns/
│ │ │ │ └── dns_resolver.go
│ │ │ ├── map.go
│ │ │ └── resolver.go
│ │ ├── resolver_wrapper.go
│ │ ├── rpc_util.go
│ │ ├── server.go
│ │ ├── service_config.go
│ │ ├── serviceconfig/
│ │ │ └── serviceconfig.go
│ │ ├── stats/
│ │ │ ├── handlers.go
│ │ │ ├── metrics.go
│ │ │ └── stats.go
│ │ ├── status/
│ │ │ └── status.go
│ │ ├── stream.go
│ │ ├── stream_interfaces.go
│ │ ├── tap/
│ │ │ └── tap.go
│ │ ├── test/
│ │ │ └── bufconn/
│ │ │ └── bufconn.go
│ │ ├── trace.go
│ │ ├── trace_notrace.go
│ │ ├── trace_withtrace.go
│ │ └── version.go
│ └── protobuf/
│ ├── LICENSE
│ ├── PATENTS
│ ├── encoding/
│ │ ├── protodelim/
│ │ │ └── protodelim.go
│ │ ├── protojson/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ └── well_known_types.go
│ │ ├── prototext/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ └── encode.go
│ │ └── protowire/
│ │ └── wire.go
│ ├── internal/
│ │ ├── descfmt/
│ │ │ └── stringer.go
│ │ ├── descopts/
│ │ │ └── options.go
│ │ ├── detrand/
│ │ │ └── rand.go
│ │ ├── editiondefaults/
│ │ │ ├── defaults.go
│ │ │ └── editions_defaults.binpb
│ │ ├── editionssupport/
│ │ │ └── editions.go
│ │ ├── encoding/
│ │ │ ├── defval/
│ │ │ │ └── default.go
│ │ │ ├── json/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ └── encode.go
│ │ │ ├── messageset/
│ │ │ │ └── messageset.go
│ │ │ ├── tag/
│ │ │ │ └── tag.go
│ │ │ └── text/
│ │ │ ├── decode.go
│ │ │ ├── decode_number.go
│ │ │ ├── decode_string.go
│ │ │ ├── decode_token.go
│ │ │ ├── doc.go
│ │ │ └── encode.go
│ │ ├── errors/
│ │ │ └── errors.go
│ │ ├── filedesc/
│ │ │ ├── build.go
│ │ │ ├── desc.go
│ │ │ ├── desc_init.go
│ │ │ ├── desc_lazy.go
│ │ │ ├── desc_list.go
│ │ │ ├── desc_list_gen.go
│ │ │ ├── editions.go
│ │ │ ├── placeholder.go
│ │ │ └── presence.go
│ │ ├── filetype/
│ │ │ └── build.go
│ │ ├── flags/
│ │ │ ├── flags.go
│ │ │ ├── proto_legacy_disable.go
│ │ │ └── proto_legacy_enable.go
│ │ ├── genid/
│ │ │ ├── any_gen.go
│ │ │ ├── api_gen.go
│ │ │ ├── descriptor_gen.go
│ │ │ ├── doc.go
│ │ │ ├── duration_gen.go
│ │ │ ├── empty_gen.go
│ │ │ ├── field_mask_gen.go
│ │ │ ├── go_features_gen.go
│ │ │ ├── goname.go
│ │ │ ├── map_entry.go
│ │ │ ├── name.go
│ │ │ ├── source_context_gen.go
│ │ │ ├── struct_gen.go
│ │ │ ├── timestamp_gen.go
│ │ │ ├── type_gen.go
│ │ │ ├── wrappers.go
│ │ │ └── wrappers_gen.go
│ │ ├── impl/
│ │ │ ├── api_export.go
│ │ │ ├── api_export_opaque.go
│ │ │ ├── bitmap.go
│ │ │ ├── bitmap_race.go
│ │ │ ├── checkinit.go
│ │ │ ├── codec_extension.go
│ │ │ ├── codec_field.go
│ │ │ ├── codec_field_opaque.go
│ │ │ ├── codec_gen.go
│ │ │ ├── codec_map.go
│ │ │ ├── codec_message.go
│ │ │ ├── codec_message_opaque.go
│ │ │ ├── codec_messageset.go
│ │ │ ├── codec_tables.go
│ │ │ ├── codec_unsafe.go
│ │ │ ├── convert.go
│ │ │ ├── convert_list.go
│ │ │ ├── convert_map.go
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ ├── enum.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── lazy.go
│ │ │ ├── legacy_enum.go
│ │ │ ├── legacy_export.go
│ │ │ ├── legacy_extension.go
│ │ │ ├── legacy_file.go
│ │ │ ├── legacy_message.go
│ │ │ ├── merge.go
│ │ │ ├── merge_gen.go
│ │ │ ├── message.go
│ │ │ ├── message_opaque.go
│ │ │ ├── message_opaque_gen.go
│ │ │ ├── message_reflect.go
│ │ │ ├── message_reflect_field.go
│ │ │ ├── message_reflect_field_gen.go
│ │ │ ├── message_reflect_gen.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_opaque.go
│ │ │ ├── presence.go
│ │ │ └── validate.go
│ │ ├── order/
│ │ │ ├── order.go
│ │ │ └── range.go
│ │ ├── pragma/
│ │ │ └── pragma.go
│ │ ├── protolazy/
│ │ │ ├── bufferreader.go
│ │ │ ├── lazy.go
│ │ │ └── pointer_unsafe.go
│ │ ├── set/
│ │ │ └── ints.go
│ │ ├── strs/
│ │ │ ├── strings.go
│ │ │ └── strings_unsafe.go
│ │ └── version/
│ │ └── version.go
│ ├── proto/
│ │ ├── checkinit.go
│ │ ├── decode.go
│ │ ├── decode_gen.go
│ │ ├── doc.go
│ │ ├── encode.go
│ │ ├── encode_gen.go
│ │ ├── equal.go
│ │ ├── extension.go
│ │ ├── merge.go
│ │ ├── messageset.go
│ │ ├── proto.go
│ │ ├── proto_methods.go
│ │ ├── proto_reflect.go
│ │ ├── reset.go
│ │ ├── size.go
│ │ ├── size_gen.go
│ │ ├── wrapperopaque.go
│ │ └── wrappers.go
│ ├── protoadapt/
│ │ └── convert.go
│ ├── reflect/
│ │ ├── protodesc/
│ │ │ ├── desc.go
│ │ │ ├── desc_init.go
│ │ │ ├── desc_resolve.go
│ │ │ ├── desc_validate.go
│ │ │ ├── editions.go
│ │ │ └── proto.go
│ │ ├── protoreflect/
│ │ │ ├── methods.go
│ │ │ ├── proto.go
│ │ │ ├── source.go
│ │ │ ├── source_gen.go
│ │ │ ├── type.go
│ │ │ ├── value.go
│ │ │ ├── value_equal.go
│ │ │ ├── value_union.go
│ │ │ └── value_unsafe.go
│ │ └── protoregistry/
│ │ └── registry.go
│ ├── runtime/
│ │ ├── protoiface/
│ │ │ ├── legacy.go
│ │ │ └── methods.go
│ │ └── protoimpl/
│ │ ├── impl.go
│ │ └── version.go
│ └── types/
│ ├── descriptorpb/
│ │ └── descriptor.pb.go
│ ├── dynamicpb/
│ │ ├── dynamic.go
│ │ └── types.go
│ ├── gofeaturespb/
│ │ └── go_features.pb.go
│ ├── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── apipb/
│ │ │ └── api.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ ├── emptypb/
│ │ │ └── empty.pb.go
│ │ ├── fieldmaskpb/
│ │ │ └── field_mask.pb.go
│ │ ├── sourcecontextpb/
│ │ │ └── source_context.pb.go
│ │ ├── structpb/
│ │ │ └── struct.pb.go
│ │ ├── timestamppb/
│ │ │ └── timestamp.pb.go
│ │ ├── typepb/
│ │ │ └── type.pb.go
│ │ └── wrapperspb/
│ │ └── wrappers.pb.go
│ └── pluginpb/
│ └── plugin.pb.go
├── gopkg.in/
│ ├── cenkalti/
│ │ └── backoff.v1/
│ │ ├── LICENSE
│ │ ├── backoff.go
│ │ ├── context.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── tries.go
│ ├── guregu/
│ │ └── null.v3/
│ │ ├── LICENSE
│ │ ├── bool.go
│ │ ├── float.go
│ │ ├── int.go
│ │ ├── string.go
│ │ └── time.go
│ ├── validator.v2/
│ │ ├── LICENSE
│ │ ├── builtins.go
│ │ ├── doc.go
│ │ └── validator.go
│ └── yaml.v3/
│ ├── LICENSE
│ ├── NOTICE
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
└── modules.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .codecov.yaml
================================================
coverage:
status:
project:
default:
target: auto
threshold: 0.3%
windows:
target: auto
flags: [windows]
ubuntu:
target: auto
flags: [ubuntu]
flags:
windows:
ubuntu:
================================================
FILE: .dockerignore
================================================
k6
dist
================================================
FILE: .editorconfig
================================================
root = true
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
indent_size = 4
[*.md]
indent_style = space
trim_trailing_whitespace = false
[*.yml]
indent_style = space
indent_size = 2
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yaml
================================================
name: Bug report
description: Use this template for reporting bugs. Please search existing issues first.
labels: bug
body:
- type: textarea
attributes:
label: Brief summary
validations:
required: true
- type: markdown
attributes:
value: '## Environment'
- type: input
attributes:
label: k6 version
validations:
required: true
- type: input
attributes:
label: OS
description: e.g. Windows 10, Arch Linux, macOS 11, etc.
validations:
required: true
- type: input
attributes:
label: Docker version and image (if applicable)
- type: markdown
attributes:
value: '## Detailed issue description'
- type: textarea
attributes:
label: Steps to reproduce the problem
validations:
required: true
- type: textarea
attributes:
label: Expected behaviour
validations:
required: true
- type: textarea
attributes:
label: Actual behaviour
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: k6 Community Forum
url: https://community.grafana.com/c/grafana-k6/70
about: Please ask and answer questions here.
- name: k6 Documentation
url: https://github.com/grafana/k6-docs
about: Please add any documentation related issues here.
================================================
FILE: .github/ISSUE_TEMPLATE/feat_req.yaml
================================================
name: Feature Request
description: Use this template for suggesting new features.
labels: feature
body:
- type: textarea
attributes:
label: Feature Description
description: A clear and concise description of the problem or missing capability
validations:
required: true
- type: textarea
attributes:
label: Suggested Solution (optional)
description: If you have a solution in mind, please describe it.
- type: textarea
attributes:
label: Already existing or connected issues / PRs (optional)
description: If you have found some issues or pull requests that are related to your new issue, please link them here.
================================================
FILE: .github/ISSUE_TEMPLATE/release.md
================================================
---
name: k6 Release
about: k6 release accommodates activities and a checklist with the k6 open-source release process.
title: 'k6 release v1.x.0'
labels: ["release"]
---
**Release Date**:
25th May 2026 **<- WRITE HERE THE UPDATED RELEASE DATE**
## Release Activities
### At the beginning of the cycle
- [ ] Create a new `release-v{major}.{minor}.0` branch.
- [ ] Add a new release notes file using the available [template](https://github.com/grafana/k6/blob/master/release%20notes/template.md) to the [repository's `release notes` folder](https://github.com/grafana/k6/blob/master/release%20notes).
- [ ] Go through the potential [dependencies updates](https://github.com/grafana/k6/blob/master/Dependencies.md) and create a dedicated PR if any of them is relevant to this release.
- [ ] Create a new `release-v{major}.{minor}.0` branch on the [grafana/k6-DefinitelyTyped](https://github.com/grafana/k6-DefinitelyTyped) fork repository.
- [ ] Bump the version in [types/k6/package.json](https://github.com/grafana/k6-DefinitelyTyped/blob/master/types/k6/package.json#L4) to the next one.
- [ ] [Lock the conversation](https://docs.github.com/en/communities/moderating-comments-and-conversations/locking-conversations) of the current issue to prevent any abuse or misuse of the issue. Note, it still allow the maintainers to edit the issue's description and to add comments.
### Release Preparation
#### ~ 2 weeks before the release date
- [ ] Ensure that all PRs from a release milestone are merged.
- [ ] Ensure experimental modules (if needed) have been updated to their latest version.
#### ~ 1 week before the release date
- [ ] Ensure that all merged PRs referenced in the release notes are linked to the release milestone.
- [ ] Ensure all PRs in the `k6-docs` repository related to new or modified functionalities introduced by the new version have been created.
- [ ] Ensure all PRs in the `k6` repository, part of the current [milestone](https://github.com/grafana/k6/milestones), have been merged.
- [ ] Open a PR with the release notes for the new version
- [ ] Ask teams that might have contributed to the release (e.g., k6-ecosystem, k6-docs, k6-devrel teams) to contribute their notes and review the existing ones.
- [ ] Remember to mention and thank [external contributors](https://github.com/search?q=user%3Agrafana+repo%3Ak6+milestone%3A%22v1.3.0%22+-author%3Amstoykov+-author%3Aoleiade+-author%3Ana--+-author%3Acodebien+-author%3Aolegbespalov+-author%3Aandrewslotin+-author%3Ajoanlopez+-author%3Aankur22+-author%3Ainancgumus+-author%3aszkiba+-author%3aAgnesToulet+-author%3Adependabot%5Bbot%5D&type=pullrequests). (**<- Update the query with the correct milestone version**).
- [ ] Share the release notes PR with the k6 open-source teams. Request contributions from all affected teams (k6-chaos, k6-docs, k6-devrel, etc.) and any other stakeholders involved in the new release.
- [ ] Open a separate PR for bumping [the k6 Go project's version](https://github.com/grafana/k6/blob/master/internal/build/version.go#L6).
- [ ] Open a PR in the `DefinitelyTyped/DefinitelyTyped` repository using the release branch created in the grafana/k6-DefinitelyTyped fork to update the k6 type definitions for the new release.
- [ ] Open a PR to add the new k6 version to the extensions registry (similar to [this one](https://github.com/grafana/k6-extension-registry/pull/104) for v1.3.0).
#### ~ 1 day before the release date
- [ ] Ensure all PRs in the `k6-docs` repository related to new or modified functionalities introduced by the new version have been merged.
### Release Day
#### Documentation
- [ ] Open and merge a PR from `main` in the `k6-docs` repository:
- [ ] Creating a new `v{major}.{minor}.0` file in the [next release notes folder](https://github.com/grafana/k6-docs/tree/main/docs/sources/k6/next/release-notes) and copy/paste the main sections of the release notes (new features, deprecations and roadmap).
- [ ] Copying the current k6's `next` (including the newly created release note file) to a folder named with the k6 version (e.g., `v1.3.x`).
- [ ] Ensure the `k6` repository release notes PR contains the correct links to the docs.
#### In k6 repository
- [ ] Merge the PR bumping [the k6 Go project's version](https://github.com/grafana/k6/blob/master/lib/consts/consts.go#L11-L12).
- [ ] Merge the release notes PR.
- [ ] Pull locally the previously merged changes.
- [ ] Create a new long-lived `v{major}.{minor}.x` release branch from the `master` branch.
- [ ] Create and push a new tag of the form `v{major}.{minor}.0`.
!!! Update the below when making the issue
```
git checkout master && git pull && git checkout -b v1.3.x && git tag v1.3.0 -m "v1.3.0" && git push origin v1.3.0
```
#### In k6-extension-registry
- [ ] Merge the PR adding [the new k6 version](https://github.com/grafana/k6-extension-registry/blob/main/registry.yaml#L8).
#### Announcements
- [ ] Notify the larger team in the #k6 and #k6-changelog channels, letting them know that the release is published by linking the release on GitHub.
- [ ] Close the release's milestone.
## Wrapping Release
- [ ] Ensure the `DefinitelyTyped/DefinitelyTyped` PR(s) are merged.
- [ ] Ensure to sync `grafana/k6-DefinitelyTyped` fork with the latest changes from the `DefinitelyTyped/DefinitelyTyped` repository.
- [ ] Update the k6 repository's `.github/ISSUE_TEMPLATE/release.md` in the event steps from this checklist were incorrect or missing.
================================================
FILE: .github/actions/lint/action.yml
================================================
name: golangci-lint-k6
description: Run golangci-lint with the k6 ruleset
runs:
using: composite
steps:
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.26.x
check-latest: true
- name: Get golangci-lint version and download rules
shell: bash
env:
GITHUB_ACTION_REF: ${{ github.action_ref }}
GITHUB_HEAD_REF: ${{ github.head_ref }}
REPO_FULL_NAME: ${{ github.event.pull_request.head.repo.full_name }}
run: |
branch="master"
if [ "${REPO_FULL_NAME}" = "grafana/k6" ]; then
branch="${GITHUB_ACTION_REF:-${GITHUB_HEAD_REF}}"
fi
rules_url="https://raw.githubusercontent.com/grafana/k6/${branch}/.golangci.yml"
echo "Downloading '${rules_url}' ..."
curl --silent --show-error --fail --no-location "${rules_url}" --output "${{ github.action_path }}/.golangci.yml"
echo "GolangCIVersion=$(head -n 1 "${{ github.action_path }}/.golangci.yml" | tr -d '# ')" >> "${GITHUB_OUTPUT}"
id: getenv
- name: golangci-lint
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
version: ${{ steps.getenv.outputs.GolangCIVersion }}
args: "--config=${{ github.action_path }}/.golangci.yml"
================================================
FILE: .github/actions/test/action.yml
================================================
name: "Test"
description: "Run all tests except ones in browser/tests package"
inputs:
platform:
description: "matrix.platform value (used for windows/arm detection)."
required: true
use_gotip:
description: "whether to set up gotip env variables or not"
required: false
default: "false"
runs:
using: "composite"
steps:
- name: Run tests
shell: bash
env:
PLATFORM: ${{ inputs.platform }}
USE_GOTIP: ${{ inputs.use_gotip }}
run: |
set -x
if [[ ${USE_GOTIP} == 'true' ]]; then
export GOROOT="$HOME/sdk/gotip"
export GOPATH="$HOME/go"
export PATH="$HOME/sdk/gotip/bin:$HOME/go/bin:$PATH" > /dev/null
fi
which go
go version
export GOMAXPROCS=2
args=("-p" "2" "-race")
# Run with less concurrency on Windows/ARM to minimize flakiness.
if [[ "${PLATFORM}" == windows* || "${PLATFORM}" == *arm ]]; then
args[1]="1"
export GOMAXPROCS=1
if [[ "${PLATFORM}" == windows* ]]; then
unset args[2]
fi
fi
go test "${args[@]}" -timeout 1600s `go list ./... | grep -v browser/tests`
================================================
FILE: .github/actions/test-browser/action.yml
================================================
name: "Test browser"
description: "Run only tests in browser/tests package without parallel execution"
inputs:
use_gotip:
description: "whether to set up gotip env variables or not"
required: false
default: "false"
runs:
using: "composite"
steps:
- name: Run tests
shell: bash
env:
USE_GOTIP: ${{ inputs.use_gotip }}
run: |
set -x
if [[ ${USE_GOTIP} == 'true' ]]; then
export GOROOT="$HOME/sdk/gotip"
export GOPATH="$HOME/go"
export PATH="$HOME/sdk/gotip/bin:$HOME/go/bin:$PATH" > /dev/null
fi
which go
go version
export GOMAXPROCS=1
go test -p 1 -timeout 1600s ./internal/js/modules/k6/browser/tests/...
================================================
FILE: .github/actions/test-common/action.yml
================================================
name: "Test common"
description: "Pre-test steps: Go install and optional Chromium install"
inputs:
go_version:
description: "Go version (eg 1.26.x) or gotip."
required: false
default: "1.26.x"
platform:
description: "matrix.platform value (used for windows/arm detection)."
required: true
runs:
using: "composite"
steps:
- name: Install Go
if: ${{ inputs.go_version != 'gotip' }}
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: ${{ inputs.go_version }}
check-latest: true
- name: Download and install Go tip
if: ${{ inputs.go_version == 'gotip' }}
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PLATFORM: ${{ inputs.platform }}
run: |
gh release download ${PLATFORM} --repo grafana/gotip --pattern 'go.zip'
unzip go.zip -d $HOME/sdk
- name: Install chromium
# This is only needed on arm images, chromium comes preinstalled on amd64 runner images.
if: ${{contains(inputs.platform, 'arm') }}
shell: bash
run: |
sudo apt update && sudo apt install chromium-browser
chromium --version || true
================================================
FILE: .github/pull_request_template.md
================================================
## What?
<!-- A short (or detailed) description of what this PR does. -->
## Why?
<!-- A short (or detailed) explanation of why these changes are made and needed. -->
## Checklist
<!--
If you haven't read the contributing guidelines https://github.com/grafana/k6/blob/master/CONTRIBUTING.md
and code of conduct https://github.com/grafana/k6/blob/master/CODE_OF_CONDUCT.md yet, please do so
-->
- [ ] I have performed a self-review of my code.
- [ ] I have commented on my code, particularly in hard-to-understand areas.
- [ ] I have added tests for my changes.
- [ ] I have run linter and tests locally (`make check`) and all pass.
## Checklist: Documentation (only for k6 maintainers and if relevant)
**Please do not merge this PR until the following items are filled out.**
- [ ] I have added the correct milestone and labels to the PR.
- [ ] I have updated the release notes: _link_
- [ ] I have updated or added an issue to the [k6-documentation](https://github.com/grafana/k6-docs): grafana/k6-docs#NUMBER if applicable
- [ ] I have updated or added an issue to the [TypeScript definitions](https://github.com/grafana/k6-DefinitelyTyped/tree/master/types/k6): grafana/k6-DefinitelyTyped#NUMBER if applicable
<!-- - [ ] Any other relevant item -->
## Related PR(s)/Issue(s)
<!-- - <https://github.com/grafana/...> -->
<!-- Does it close an issue? -->
<!-- Closes #ISSUE-ID -->
<!-- Thanks for your contribution! 🙏🏼 -->
================================================
FILE: .github/workflows/browser_e2e.yml
================================================
name: E2E
on:
# Enable manually triggering this workflow via the API or web UI
workflow_dispatch:
push:
branches:
- main
pull_request:
schedule:
# At 06:00 AM UTC from Monday through Friday
- cron: '0 6 * * 1-5'
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
test:
strategy:
fail-fast: false
matrix:
go: [stable, tip]
platform: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.x
- name: Install Go tip
if: matrix.go == 'tip'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release download ${{ matrix.platform }} --repo grafana/gotip --pattern 'go.zip'
unzip go.zip -d $HOME/sdk
echo "GOROOT=$HOME/sdk/gotip" >> "$GITHUB_ENV"
echo "GOPATH=$HOME/go" >> "$GITHUB_ENV"
echo "$HOME/go/bin" >> "$GITHUB_PATH"
echo "$HOME/sdk/gotip/bin" >> "$GITHUB_PATH"
- name: Install chromium
# This is only needed on arm images, chromium comes preinstalled on amd64 runner images.
if: contains(matrix.platform, 'arm')
run: |
sudo apt update && sudo apt install chromium-browser
chromium --version
- name: Build k6
run: |
which go
go version
go build .
./k6 version
- name: Run E2E tests
run: |
set -x
if [ "$RUNNER_OS" == "Linux" ] && [ "$RUNNER_ARCH" == "X64" ]; then
export K6_BROWSER_EXECUTABLE_PATH=/usr/bin/google-chrome
fi
export K6_BROWSER_HEADLESS=true
export K6_NO_USAGE_REPORT=true
for f in examples/browser/*.js; do
if [ "$f" == "examples/browser/hosts.js" ] && [ "$RUNNER_OS" == "Windows" ]; then
echo "skipping $f on Windows"
continue
fi
./k6 run -q "$f"
done
- name: Check screenshot
# TODO: Do something more sophisticated?
run: test -s screenshot.png
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
workflow_dispatch:
inputs:
k6_version:
description: 'The version of the release, it must use the semantic versioning format with the v prefix. It is a development release so it is suggested to append a build metadata (e.g. v0.38.0-dev).'
required: true
go_version:
description: 'Go version for building binaries'
default: '1.x'
required: true
push:
branches:
- master
tags:
- v*
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
env:
APP_NAME: "k6"
DOCKER_IMAGE_ID: "grafana/k6"
GHCR_IMAGE_ID: ${{ github.repository }}
DEFAULT_GO_VERSION: "1.26.x"
jobs:
configure:
runs-on: ubuntu-latest
outputs:
k6_version: ${{ steps.get_k6_version.outputs.k6_version }}
go_version: ${{ steps.get_go_version.outputs.go_version }}
sign_windows_artifacts: ${{ steps.determine_windows_signing.outputs.sign_windows_artifacts }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
persist-credentials: false
- name: Get the k6 version
id: get_k6_version
env:
INPUT_K6_VERSION: ${{ github.event.inputs.k6_version }}
run: |
set -x # Show exactly what commands are executed
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]] && [[ "${INPUT_K6_VERSION}" != "" ]]; then
VERSION="${INPUT_K6_VERSION}"
echo "Building custom dev build with version '${VERSION}' from manual workflow_dispatch..."
elif [[ "${GITHUB_REF}" =~ ^refs/tags/v.+$ ]]; then
VERSION="${GITHUB_REF##*/}"
echo "Building real version tag '${GITHUB_REF}', parsed '${VERSION}' as the actual version..."
else
VERSION="$(git describe --tags --always --long --dirty)"
echo "Building a non-version ref '${GITHUB_REF}', use '${VERSION}' as the version instead..."
fi
echo "VERSION=${VERSION}"
echo "k6_version=${VERSION}" >> $GITHUB_OUTPUT
- name: Get the used Go version
id: get_go_version
env:
INPUT_GO_VERSION: ${{ github.event.inputs.go_version }}
run: |
set -x # Show exactly what commands are executed
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]] && [[ "${INPUT_GO_VERSION}" != "" ]]; then
GO_VERSION="${INPUT_GO_VERSION}"
echo "Using custom Go version '${GO_VERSION}' from manual workflow_dispatch..."
else
GO_VERSION="${DEFAULT_GO_VERSION}"
echo "Using the default Go version '${GO_VERSION}'..."
fi
echo "GO_VERSION=${GO_VERSION}"
echo "go_version=${GO_VERSION}" >> $GITHUB_OUTPUT
# Secrets are unavailable when building from project forks, so this
# will fail for external PRs, even if we wanted to do it. And we don't.
# We are only going to sign packages that are built from the default branch
# or a version tag, or manually triggered dev builds, so we have enough
# assurance that package signing works, but don't sign every PR build.
- name: Determine whether to sign the Windows artifacts
id: determine_windows_signing
env:
SIGN_FILES: ${{ github.ref_name == github.event.repository.default_branch || startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch' }}
run: |
set -x # Show exactly what commands are executed
if [[ "${SIGN_FILES}" == "true" ]]; then
echo "Windows artifacts will be signed"
sign_windows_artifacts="true"
else
echo "Windows artifacts will not be signed"
sign_windows_artifacts="false"
fi
echo "sign_windows_artifacts=${sign_windows_artifacts}" >> ${GITHUB_OUTPUT}
build:
runs-on: ubuntu-latest
needs: [configure]
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
persist-credentials: false
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: ${{ needs.configure.outputs.go_version }}
check-latest: true
cache: false # against cache-poisoning
- name: Install nfpm (dep and rpm package builder)
run: |
go install github.com/goreleaser/nfpm/v2/cmd/nfpm@v2.16.0
- name: Install goversioninfo (.syso file creator)
run: |
go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.4.0
- name: Generate Windows binary metadata (.syso files)
run: |
IFS=. read -a version_parts <<< "${VERSION#v}"
IFS=- read -a version_patch <<< "${version_parts[2]}"
# Need a blank versioninfo.json for the CLI overrides to work.
echo '{}' > versioninfo.json
set -x
goversioninfo -64 \
-platform-specific=true \
-charset="1200" \
-company="Raintank Inc. d.b.a. Grafana Labs" \
-copyright="© Raintank Inc. d.b.a. Grafana Labs. Licensed under AGPL." \
-description="A modern load testing tool, using Go and JavaScript" \
-icon=packaging/k6.ico \
-internal-name="k6" \
-original-name="k6.exe" \
-product-name="k6" \
-translation="0x0409" \
-ver-major="${version_parts[0]}" \
-ver-minor="${version_parts[1]}" \
-ver-patch="${version_patch[0]}" \
-special-build=$(IFS='-'; echo "${version_patch[*]:1}";) \
-product-version="${VERSION#v}"
set +x
ls -lah | grep -i syso
- name: Build
run: |
go version
./build-release.sh "dist" "${VERSION}"
- name: Upload artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: binaries
path: dist/
retention-days: 7
build-docker:
permissions:
contents: read
packages: write
id-token: write
runs-on: ubuntu-latest
needs: [configure]
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
persist-credentials: false
- name: Build
run: |
docker buildx create \
--name multibuilder \
--platform linux/amd64,linux/arm64 \
--bootstrap --use
docker buildx build \
--target release \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID .
- name: Check
run: |
docker buildx build --load -t $DOCKER_IMAGE_ID .
# Assert that simple cases works for the new built image
docker run $DOCKER_IMAGE_ID version
docker run $DOCKER_IMAGE_ID --help
docker run $DOCKER_IMAGE_ID help
docker run $DOCKER_IMAGE_ID run --help
docker run $DOCKER_IMAGE_ID inspect --help
docker run $DOCKER_IMAGE_ID status --help
docker run $DOCKER_IMAGE_ID stats --help
docker run $DOCKER_IMAGE_ID scale --help
docker run $DOCKER_IMAGE_ID pause --help
docker run $DOCKER_IMAGE_ID resume --help
- name: Login to DockerHub
if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v') }}
uses: grafana/shared-workflows/actions/dockerhub-login@081a366728379fd0426b9cfef190e9a21c2d5418 # dockerhub-login/v1.0.3
- name: Login to GitHub Container Registry
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
registry: ghcr.io
username: ${{ env.GITHUB_ACTOR }}
password: ${{ env.GITHUB_TOKEN }}
if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v') }}
- name: Publish k6:master images
if: ${{ github.ref == 'refs/heads/master' }}
run: |
echo "Publish $GHCR_IMAGE_ID:master* images"
docker buildx build --push \
--target release \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:master \
-t ghcr.io/$GHCR_IMAGE_ID:master .
docker buildx build --push \
--target with-browser \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:master-with-browser \
-t ghcr.io/$GHCR_IMAGE_ID:master-with-browser .
- name: Publish tagged version images
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
run: |
VERSION="${VERSION#v}"
echo "Publish $GHCR_IMAGE_ID:$VERSION images"
docker buildx build --push \
--target release \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:$VERSION \
-t ghcr.io/$GHCR_IMAGE_ID:$VERSION .
docker buildx build --push \
--target with-browser \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:$VERSION-with-browser \
-t ghcr.io/$GHCR_IMAGE_ID:$VERSION-with-browser .
# We also want to tag the latest stable version as latest
echo "Publish $GHCR_IMAGE_ID:latest"
docker buildx build --push \
--target release \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:latest \
-t ghcr.io/$GHCR_IMAGE_ID:latest .
docker buildx build --push \
--target with-browser \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_ID:latest-with-browser \
-t ghcr.io/$GHCR_IMAGE_ID:latest-with-browser .
# Forks, PRs etc. won't actually sign the binary, but the workflow will run most of the same steps as
# GitHub Actions workflows don't support conditional `needs` so we have to run the signing step unconditionally.
sign-binaries:
permissions:
contents: read
actions: read
id-token: write # Required for Vault
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
environment:
name: azure-trusted-signing
runs-on: windows-latest
defaults:
run:
shell: pwsh
needs: [configure, build]
outputs:
binary_artifact_name: ${{ steps.assign-artifact-names.outputs.binary-artifact-name }}
windows_binary_artifact_name: ${{ steps.assign-artifact-names.outputs.windows-binary-artifact-name }}
steps:
- name: Download binaries
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: binaries
path: dist
- name: Unzip Windows binary
run: |
Expand-Archive -Path ".\dist\k6-${env:VERSION}-windows-amd64.zip" -DestinationPath .\packaging\
- name: Upload artifact for Windows installer build
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: windows-binary
path: 'packaging/k6-${{ env.VERSION }}-windows-amd64/k6.exe'
retention-days: 7
if-no-files-found: error
- name: Get secrets for Azure Trusted Signing
uses: grafana/shared-workflows/actions/get-vault-secrets@f1614b210386ac420af6807a997ac7f6d96e477a # get-vault-secrets/v1.3.1
id: get-signing-secrets
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
export_env: false
repo_secrets: |
client-id=azure-trusted-signing:client-id
subscription-id=azure-trusted-signing:subscription-id
tenant-id=azure-trusted-signing:tenant-id
- name: Sign Windows binary
uses: grafana/shared-workflows/actions/azure-trusted-signing@e86cdb1c0a8cf5df57d3078f285261f7c9577174 # azure-trusted-signing/v1.0.0
id: sign-artifacts
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
application-description: 'Grafana k6'
artifact-to-sign: 'windows-binary'
azure-client-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).client-id }}
azure-subscription-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).subscription-id }}
azure-tenant-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).tenant-id }}
signed-artifact-name: 'windows-binary-signed'
- name: Download signed Windows binary
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
name: ${{ steps.sign-artifacts.outputs.artifact-name }}
path: 'packaging/k6-${{ env.VERSION }}-windows-amd64'
# Re-zip the signed Windows binary to replace the original unsigned version
- name: Zip signed Windows binary
if: needs.configure.outputs.sign_windows_artifacts == 'true'
run: |
Compress-Archive -Path ".\packaging\*" -DestinationPath ".\dist\k6-${env:VERSION}-windows-amd64.zip" -Force
- name: Upload signed artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
name: binaries-signed
path: dist/
retention-days: 7
if-no-files-found: error
- name: Assign artifact name for Windows binary for installer build
id: assign-artifact-names
env:
BINARY_ARTIFACT_NAME: ${{ needs.configure.outputs.sign_windows_artifacts == 'true' && 'binaries-signed' || 'binaries' }}
WINDOWS_BINARY_ARTIFACT_NAME: ${{ needs.configure.outputs.sign_windows_artifacts == 'true' && steps.sign-artifacts.outputs.artifact-name || 'windows-binary' }}
run: |
echo "binary-artifact-name=${env:BINARY_ARTIFACT_NAME}" >> ${env:GITHUB_OUTPUT}
echo "windows-binary-artifact-name=${env:WINDOWS_BINARY_ARTIFACT_NAME}" >> ${env:GITHUB_OUTPUT}
package:
permissions:
contents: read
actions: read
runs-on: windows-latest
defaults:
run:
shell: pwsh
needs: [configure, build, sign-binaries]
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install pandoc
uses: crazy-max/ghaction-chocolatey@2526f467ccbd337d307fe179959cabbeca0bc8c0 # v3.4.0
with:
args: install -y pandoc
- name: Install wix tools
run: |
curl -Lso wix311-binaries.zip https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip
Expand-Archive -Path .\wix311-binaries.zip -DestinationPath .\wix311\
echo "$pwd\wix311" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: Download Windows binary
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ needs.sign-binaries.outputs.windows_binary_artifact_name }}
path: packaging
- name: Create the MSI package
run: |
$env:VERSION = $env:VERSION -replace 'v(\d+\.\d+\.\d+).*','$1'
pandoc -s -f markdown -t rtf -o packaging\LICENSE.rtf LICENSE.md
cd .\packaging
candle.exe -arch x64 "-dVERSION=${env:VERSION}" k6.wxs
light.exe -ext WixUIExtension k6.wixobj
- name: Rename MSI package
# To keep it consistent with the other artifacts
run: move "packaging\k6.msi" "packaging\k6-${env:VERSION}-windows-amd64.msi"
- name: Upload Windows installer
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: binaries-windows
path: |
packaging/k6-*.msi
retention-days: 7
if-no-files-found: error
# Forks, PRs etc. won't actually sign the installer, but the workflow will run most of the same steps as
# GitHub Actions workflows don't support conditional `needs` so we have to run the signing step unconditionally.
sign-packages:
permissions:
actions: read
contents: read
id-token: write # Required for Vault
environment:
name: azure-trusted-signing
outputs:
artifact_name: ${{ steps.assign-artifact-name.outputs.artifact-name }}
runs-on: windows-latest
defaults:
run:
shell: pwsh
needs: [configure, package]
steps:
- name: Download Windows artifacts
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
name: binaries-windows
path: packaging
- name: Get secrets for Azure Trusted Signing
uses: grafana/shared-workflows/actions/get-vault-secrets@f1614b210386ac420af6807a997ac7f6d96e477a # get-vault-secrets/v1.3.1
id: get-signing-secrets
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
export_env: false
repo_secrets: |
client-id=azure-trusted-signing:client-id
subscription-id=azure-trusted-signing:subscription-id
tenant-id=azure-trusted-signing:tenant-id
- name: Sign Windows installer
uses: grafana/shared-workflows/actions/azure-trusted-signing@e86cdb1c0a8cf5df57d3078f285261f7c9577174 # azure-trusted-signing/v1.0.0
id: sign-artifacts
if: needs.configure.outputs.sign_windows_artifacts == 'true'
with:
application-description: 'Grafana k6'
artifact-to-sign: 'binaries-windows'
azure-client-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).client-id }}
azure-subscription-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).subscription-id }}
azure-tenant-id: ${{ fromJSON(steps.get-signing-secrets.outputs.secrets).tenant-id }}
signed-artifact-name: 'binaries-windows-signed'
- name: Assign artifact name for Windows installer
id: assign-artifact-name
env:
ARTIFACT_NAME: ${{ needs.configure.outputs.sign_windows_artifacts == 'true' && steps.sign-artifacts.outputs.artifact-name || 'binaries-windows' }}
run: |
echo "artifact-name=${env:ARTIFACT_NAME}" >> ${env:GITHUB_OUTPUT}
publish-github:
runs-on: ubuntu-latest
needs: [configure, sign-binaries, sign-packages]
if: ${{ startsWith(github.ref, 'refs/tags/v') && github.event_name != 'workflow_dispatch' }}
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
permissions:
actions: read
contents: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Download binaries
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ needs.sign-binaries.outputs.binary_artifact_name }}
path: dist
- name: Download Windows binaries
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ needs.sign-packages.outputs.artifact_name }}
path: dist
- name: Generate checksum file
run: cd dist && sha256sum * > "k6-${VERSION}-checksums.txt"
- name: Anchore SBOM Action
continue-on-error: true
uses: anchore/sbom-action@28d71544de8eaf1b958d335707167c5f783590ad # v0.22.2
with:
artifact-name: k6-${{ env.VERSION }}-spdx.json
upload-release-assets: false
output-file: dist/k6-${{ env.VERSION }}-spdx.json
- name: Create release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -x
assets=()
for asset in ./dist/*; do
assets+=("$asset")
done
gh release create "$VERSION" "${assets[@]}" --target "$GITHUB_SHA" -F "./release notes/${VERSION}.md"
submit-winget-manifest:
needs: [configure, publish-github]
runs-on: windows-2025
permissions:
contents: read
id-token: write
steps:
- name: Install WingetCreate
shell: pwsh
run: |
Import-Module Appx -UseWindowsPowerShell
$appxBundleFile = Join-Path ${env:RUNNER_TEMP} "wingetcreate.msixbundle"
Invoke-WebRequest https://aka.ms/wingetcreate/latest/msixbundle -OutFile $appxBundleFile
Add-AppxPackage $appxBundleFile
- name: Get WinGet token
uses: grafana/shared-workflows/actions/get-vault-secrets@f1614b210386ac420af6807a997ac7f6d96e477a # get-vault-secrets/v1.3.1
id: get-token
with:
export_env: false
common_secrets: |
token=winget-packages:token
- name: Submit WinGet Manifest
env:
PACKAGE_ID: GrafanaLabs.k6
PACKAGE_VERSION: ${{ needs.configure.outputs.k6_version }}
WINGET_CREATE_GITHUB_TOKEN: ${{ fromJSON(steps.get-token.outputs.secrets).token }}
shell: pwsh
run: |
wingetcreate token --store
wingetcreate update ${env:PACKAGE_ID} `
--urls "${env:GITHUB_SERVER_URL}/${env:GITHUB_REPOSITORY}/releases/download/${env:PACKAGE_VERSION}/k6-${env:PACKAGE_VERSION}-windows-amd64.msi" `
--version ${env:PACKAGE_VERSION}.TrimStart("v") `
--submit
publish-packages:
runs-on: ubuntu-latest
needs: [configure, sign-binaries, sign-packages]
if: ${{ startsWith(github.ref, 'refs/tags/v') && github.event_name != 'workflow_dispatch' }}
env:
VERSION: ${{ needs.configure.outputs.k6_version }}
permissions:
actions: read
contents: read
packages: write
id-token: write # Required for Vault
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Download binaries
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ needs.sign-binaries.outputs.binary_artifact_name }}
path: dist
- name: Download Windows binaries
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: ${{ needs.sign-packages.outputs.artifact_name }}
path: dist
- name: Rename binaries
# To be consistent with the filenames used in dl.k6.io
run: |
mv "dist/k6-$VERSION-windows-amd64.msi" "dist/k6-$VERSION-amd64.msi"
mv "dist/k6-$VERSION-linux-amd64.rpm" "dist/k6-$VERSION-amd64.rpm"
mv "dist/k6-$VERSION-linux-amd64.deb" "dist/k6-$VERSION-amd64.deb"
- uses: grafana/shared-workflows/actions/get-vault-secrets@f1614b210386ac420af6807a997ac7f6d96e477a # get-vault-secrets/v1.3.1
with:
repo_secrets: |
IAM_ROLE_ARN=deploy:packager-iam-role
AWS_CF_DISTRIBUTION=cloudfront:AWS_CF_DISTRIBUTION
PGP_SIGN_KEY_PASSPHRASE=pgp:PGP_SIGN_KEY_PASSPHRASE
PGP_SIGN_KEY=pgp:PGP_SIGN_KEY
S3_BUCKET=s3:AWS_S3_BUCKET
- uses: grafana/shared-workflows/actions/aws-auth@85022085ed5314601c05d10e846de56bdd71e369 # aws-auth/v1.0.3
with:
aws-region: "us-east-2"
role-arn: ${{ env.IAM_ROLE_ARN }}
set-creds-in-environment: true
- name: Setup docker compose environment
run: |
cat > packaging/.env <<EOF
AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
AWS_CF_DISTRIBUTION="${AWS_CF_DISTRIBUTION}"
AWS_DEFAULT_REGION=us-east-2
AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}
PGP_SIGN_KEY_PASSPHRASE=${PGP_SIGN_KEY_PASSPHRASE}
S3_BUCKET=${S3_BUCKET}
EOF
echo "${PGP_SIGN_KEY}" > packaging/sign-key.gpg
- name: Login to GitHub Container Registry
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
registry: ghcr.io
username: ${{ env.GITHUB_ACTOR }}
password: ${{ env.GITHUB_TOKEN }}
- name: Publish packages
run: |
cd packaging
docker compose pull packager
docker compose run --rm packager
================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"
on:
push:
branches: [ master ]
permissions:
contents: read
security-events: write
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
with:
languages: go
- name: CodeQL Analysis
uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
================================================
FILE: .github/workflows/issue-auto-assign.yml
================================================
name: "Auto assign maintainer to issue"
on:
# makes this workflow re-usable
workflow_call:
issues:
types: [opened]
issue_comment:
types: [created]
permissions:
issues: write
jobs:
assign-user:
runs-on: ubuntu-latest
# issue_comment triggers for both, issues and prs,
# as we need to run only on issues, it filter out prs.
if: ${{ !github.event.issue.pull_request }}
steps:
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
script: |
const assignees = ['ankur22', 'codebien', 'inancgumus', 'joanlopez', 'mstoykov', 'oleiade', 'szkiba'];
const teamMembers = assignees.concat(['andrewslotin']);
const assigneeCount = 1;
// Do not automatically assign users if someone was already assigned or it was opened by a team member
if (context.payload.issue.assignees.length > 0 || teamMembers.includes(context.actor)) {
return;
}
const crypto = require("node:crypto");
const getNRandom = (n, array) => {
let result = new Array();
for (;n > 0 && array.length > 0; n--) {
const chosen = array[crypto.randomInt(array.length)];
result.push(chosen);
array = array.filter(el => el != chosen);
}
return result;
}
github.rest.issues.addAssignees({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
assignees: getNRandom(assigneeCount, assignees),
});
github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: ["triage"]
});
================================================
FILE: .github/workflows/lint.yml
================================================
name: Lint
on:
# Enable manually triggering this workflow via the API or web UI
workflow_dispatch:
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
deps:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
fetch-depth: 0
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.26.x
check-latest: true
- name: Check dependencies
run: |
go version
test -z "$(go mod tidy && go mod vendor && git status --porcelain)"
go mod verify
- name: Check code generation
run: |
make generate
test -z "$(git status --porcelain | tee >(cat 1>&2))"
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
fetch-depth: 0
- name: Run linters
uses: ./.github/actions/lint/
================================================
FILE: .github/workflows/packager.yml
================================================
name: k6packager
on:
# Enable manually triggering this workflow via the API or web UI
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # weekly (Sundays at 00:00)
defaults:
run:
shell: bash
jobs:
publish-packager:
runs-on: ubuntu-latest
env:
VERSION: 0.0.4
DOCKER_IMAGE_ID: ghcr.io/grafana/k6packager
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: read
id-token: write
packages: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Build
run: |
cd packaging
docker compose build packager
- name: Login to GitHub Container Registry
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
with:
registry: ghcr.io
username: ${{ env.GITHUB_ACTOR }}
password: ${{ env.GITHUB_TOKEN }}
- name: Publish
run: |
docker push "${DOCKER_IMAGE_ID}:latest"
docker tag "${DOCKER_IMAGE_ID}" "${DOCKER_IMAGE_ID}:${VERSION}"
docker push "${DOCKER_IMAGE_ID}:${VERSION}"
================================================
FILE: .github/workflows/publish-techdocs.yaml
================================================
name: Publish TechDocs
on:
push:
branches:
- master
paths:
- 'docs/docs/**'
- 'docs/mkdocs.yml'
- 'catalog-info.yaml'
- '.github/workflows/publish-techdocs.yaml'
concurrency:
group: '${{ github.workflow }}-${{ github.ref }}'
cancel-in-progress: true
permissions: {}
jobs:
publish-docs:
uses: grafana/shared-workflows/.github/workflows/publish-techdocs.yaml@main
permissions:
contents: read
id-token: write
with:
namespace: default
kind: component
name: k6
default-working-directory: .
================================================
FILE: .github/workflows/stale.yml
================================================
name: Close stale PRs
on:
schedule:
- cron: "0 8 * * 1" # once per week, at 08:00 on Mondays
permissions:
pull-requests: write
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Run stale action
uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
operations-per-run: 50
ascending: true # process oldest PRs first
days-before-pr-stale: 61
days-before-pr-close: 7
stale-pr-label: stale
exempt-pr-labels: "wip"
stale-pr-message: |
This pull request has been automatically marked as stale because it has not had
activity in the last two months. It will be closed in one week if no further activity occurs. Please
feel free to give a status update or ping for review. Thank you for your contributions!
close-pr-message: |
Closing this pull request due to two months of inactivity after being marked stale. Thank you for your contributions!
================================================
FILE: .github/workflows/summary-code-generation.yml
================================================
name: Summary code generation
on:
push:
branches:
- master
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
check-generated-code:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install cog
run: |
COG_VERSION="v0.0.46"
curl -sSL "https://github.com/grafana/cog/releases/download/${COG_VERSION}/cog_Linux_x86_64.tar.gz" \
| sudo tar -xz -C /usr/local/bin
cog --version
- name: Checkout schemas
run: |
./internal/lib/summary/machinereadable/checkout.sh
- name: Generate code
run: |
./internal/lib/summary/machinereadable/generate.sh
- name: Check for uncommitted changes
run: |
# Check if there are any changes in the Git working directory
if ! git diff --exit-code; then
echo "❌ Generated code is not up-to-date!"
echo ""
echo "The following files have uncommitted changes:"
git diff --name-only
echo ""
echo "Please run the following commands to update the generated code:"
echo " ./internal/lib/summary/machinereadable/checkout.sh"
echo " ./internal/lib/summary/machinereadable/generate.sh"
echo ""
echo "Then commit the changes."
exit 1
fi
# Also check for untracked files
if [ -n "$(git ls-files --others --exclude-standard internal/lib/summary/machinereadable/ | grep -v k6-summary/)" ]; then
echo "❌ There are untracked generated files!"
echo ""
echo "Untracked files:"
git ls-files --others --exclude-standard internal/lib/summary/machinereadable/ | grep -v k6-summary/
echo ""
echo "Please run the generation scripts and commit all generated files."
exit 1
fi
echo "✅ Generated code is up-to-date!"
================================================
FILE: .github/workflows/tc39.yml
================================================
name: TC39
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
paths:
- 'js/**'
- 'internal/js/**'
- 'vendor/github.com/grafana/sobek/**'
- 'vendor/github.com/evanw/esbuild**'
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
tc39:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.26.x
check-latest: true
- name: Run tests
run: |
set -x
cd internal/js/tc39
sh checkout.sh
go test -timeout 1h
================================================
FILE: .github/workflows/test-browser.yml
================================================
name: Browser tests
on:
push:
branches:
- master
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
test-prev:
if: ${{ github.ref == 'refs/heads/master' }}
strategy:
fail-fast: false
matrix:
go-version: [1.25.x]
platform:
[ubuntu-22.04, ubuntu-arm64-large, github-hosted-windows-x64-large]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: ${{ matrix.go-version }}
platform: ${{ matrix.platform }}
- name: Get the k6 version
id: get_k6_version
run: |
echo "Running tests on '${GITHUB_REF}' with '$(git describe --tags --always --long --dirty)' checked out..."
- name: Run tests
uses: ./.github/actions/test-browser
test-tip:
strategy:
fail-fast: false
matrix:
include:
- platform: ubuntu-22.04
gotip_platform: ubuntu-22.04
- platform: ubuntu-arm64-large
gotip_platform: ubuntu-24.04-arm
- platform: github-hosted-windows-x64-large
gotip_platform: windows-latest
runs-on: ${{ matrix.platform }}
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: "gotip"
platform: ${{ matrix.gotip_platform }}
- name: Run tests
uses: ./.github/actions/test-browser
with:
use_gotip: "true"
test-latest:
strategy:
fail-fast: false
matrix:
go-version: [1.26.x]
platform:
[ubuntu-22.04, ubuntu-arm64-large, github-hosted-windows-x64-large]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: ${{ matrix.go-version }}
platform: ${{ matrix.platform }}
- name: Run tests
uses: ./.github/actions/test-browser
================================================
FILE: .github/workflows/test.yml
================================================
name: Test
on:
push:
branches:
- master
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
test-prev:
if: ${{ github.ref == 'refs/heads/master' }}
strategy:
fail-fast: false
matrix:
go-version: [1.25.x]
platform: [ubuntu-22.04, ubuntu-24.04-arm, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: ${{ matrix.go-version }}
platform: ${{ matrix.platform }}
- name: Get the k6 version
id: get_k6_version
run: |
echo "Running tests on '${GITHUB_REF}' with '$(git describe --tags --always --long --dirty)' checked out..."
- name: Run tests
uses: ./.github/actions/test
with:
platform: ${{ matrix.platform }}
test-tip:
strategy:
fail-fast: false
matrix:
platform: [ubuntu-22.04, ubuntu-24.04-arm, windows-latest]
runs-on: ${{ matrix.platform }}
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: "gotip"
platform: ${{ matrix.platform }}
- name: Run tests
uses: ./.github/actions/test
with:
use_gotip: "true"
platform: ${{ matrix.platform }}
test-latest:
strategy:
fail-fast: false
matrix:
go-version: [1.26.x]
platform: [ubuntu-22.04, ubuntu-24.04-arm, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Run common test steps
uses: ./.github/actions/test-common
with:
go_version: ${{ matrix.go-version }}
platform: ${{ matrix.platform }}
- name: Run tests
uses: ./.github/actions/test
with:
platform: ${{ matrix.platform }}
================================================
FILE: .github/workflows/wpt.yml
================================================
name: Web Platform Tests
on:
workflow_dispatch:
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install Go
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.26.x
check-latest: true
# TODO: combine WebPlatform tests checkout & patch into the single step
- name: Run Streams Tests
run: |
set -x
cd internal/js/modules/k6/experimental/streams/tests
sh checkout.sh
go test -race ../...
- name: Run Webcrypto Tests
run: |
set -x
cd internal/js/modules/k6/webcrypto/tests
sh checkout.sh
go test -race ./...
================================================
FILE: .github/workflows/xk6-tests/xk6-js-test/go.mod
================================================
module github.com/grafana/xk6-js-test
go 1.23.0
toolchain go1.23.7
require go.k6.io/k6 v0.57.0
require (
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/dlclark/regexp2 v1.11.4 // indirect
github.com/evanw/esbuild v0.24.2 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
github.com/google/pprof v0.0.0-20230728192033-2ba5b33183c6 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grafana/sobek v0.0.0-20241024150027-d91f02b05e9b // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd // indirect
github.com/onsi/ginkgo v1.16.5 // indirect
github.com/onsi/gomega v1.27.1 // indirect
github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/afero v1.1.2 // indirect
go.opentelemetry.io/otel v1.31.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect
go.opentelemetry.io/otel/metric v1.31.0 // indirect
go.opentelemetry.io/otel/sdk v1.31.0 // indirect
go.opentelemetry.io/otel/trace v1.31.0 // indirect
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.9.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
google.golang.org/grpc v1.69.4 // indirect
google.golang.org/protobuf v1.36.3 // indirect
gopkg.in/guregu/null.v3 v3.3.0 // indirect
)
================================================
FILE: .github/workflows/xk6-tests/xk6-js-test/go.sum
================================================
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/evanw/esbuild v0.24.2 h1:PQExybVBrjHjN6/JJiShRGIXh1hWVm6NepVnhZhrt0A=
github.com/evanw/esbuild v0.24.2/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-sourcemap/sourcemap v2.1.4+incompatible h1:a+iTbH5auLKxaNwQFg0B+TCYl6lbukKPc7b5x0n1s6Q=
github.com/go-sourcemap/sourcemap v2.1.4+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20230728192033-2ba5b33183c6 h1:ZgoomqkdjGbQ3+qQXCkvYMCDvGDNg2k5JJDjjdTB6jY=
github.com/google/pprof v0.0.0-20230728192033-2ba5b33183c6/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafana/sobek v0.0.0-20241024150027-d91f02b05e9b h1:hzfIt1lf19Zx1jIYdeHvuWS266W+jL+7dxbpvH2PZMQ=
github.com/grafana/sobek v0.0.0-20241024150027-d91f02b05e9b/go.mod h1:FmcutBFPLiGgroH42I4/HBahv7GxVjODcVWFTw1ISes=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa h1:lx8ZnNPwjkXSzOROz0cg69RlErRXs+L3eDkggASWKLo=
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa/go.mod h1:fhpOYavp5g2K74XDl/ao2y4KvhqVtKlkg1e+0UaQv7I=
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd h1:AC3N94irbx2kWGA8f/2Ks7EQl2LxKIRQYuT9IJDwgiI=
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd/go.mod h1:9vRHVuLCjoFfE3GT06X0spdOAO+Zzo4AMjdIwUHBvAk=
github.com/mstoykov/envconfig v1.5.0 h1:E2FgWf73BQt0ddgn7aoITkQHmgwAcHup1s//MsS5/f8=
github.com/mstoykov/envconfig v1.5.0/go.mod h1:vk/d9jpexY2Z9Bb0uB4Ndesss1Sr0Z9ZiGUrg5o9VGk=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY=
github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.27.1 h1:rfztXRbg6nv/5f+Raen9RcGoSecHIFgBBLQK3Wdj754=
github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e h1:zWKUYT07mGmVBH+9UgnHXd/ekCK99C8EbDSAt5qsjXE=
github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.k6.io/k6 v0.57.0 h1:l1jivNtbCQYNhgvl+O6SfzwabqNlazr8OLYjxm8lNGw=
go.k6.io/k6 v0.57.0/go.mod h1:AXTOq8X59VqigGvoI59Al/+8F/5h4iHO0CoX0lNbq/4=
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc=
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 h1:fVoAXEKA4+yufmbdVYv+SE73+cPZbbbe8paLsHfkK+U=
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53/go.mod h1:riSXTwQ4+nqmPGtobMFyW5FqVAmIs0St6VPp4Ug7CE4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/guregu/null.v3 v3.3.0 h1:8j3ggqq+NgKt/O7mbFVUFKUMWN+l1AmT5jQmJ6nPh2c=
gopkg.in/guregu/null.v3 v3.3.0/go.mod h1:E4tX2Qe3h7QdL+uZ3a0vqvYwKQsRSQKM5V4YltdgH9Y=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
================================================
FILE: .github/workflows/xk6-tests/xk6-js-test/jstest.go
================================================
package jstest
import (
"fmt"
"time"
"go.k6.io/k6/js/modules"
"go.k6.io/k6/metrics"
)
func init() {
modules.Register("k6/x/jsexttest", New())
}
type (
RootModule struct{}
// JSTest is meant to test xk6 and the JS extension sub-system of k6.
JSTest struct {
vu modules.VU
foos *metrics.Metric
}
)
// Ensure the interfaces are implemented correctly.
var (
_ modules.Module = &RootModule{}
_ modules.Instance = &JSTest{}
)
// New returns a pointer to a new RootModule instance.
func New() *RootModule {
return &RootModule{}
}
// NewModuleInstance implements the modules.Module interface and returns
// a new instance for each VU.
func (*RootModule) NewModuleInstance(vu modules.VU) modules.Instance {
return &JSTest{
vu: vu,
foos: vu.InitEnv().Registry.MustNewMetric("foos", metrics.Counter),
}
}
// Exports implements the modules.Instance interface and returns the exports
// of the JS module.
func (j *JSTest) Exports() modules.Exports {
return modules.Exports{Default: j}
}
// Foo emits a foo metric
func (j *JSTest) Foo(arg float64) (bool, error) {
state := j.vu.State()
if state == nil {
return false, fmt.Errorf("the VU State is not available in the init context")
}
ctx := j.vu.Context()
tags := state.Tags.GetCurrentValues().Tags.With("foo", "bar")
metrics.PushIfNotDone(ctx, state.Samples, metrics.Sample{
Time: time.Now(),
TimeSeries: metrics.TimeSeries{Metric: j.foos, Tags: tags},
Value: arg,
})
return true, nil
}
================================================
FILE: .github/workflows/xk6-tests/xk6-output-test/go.mod
================================================
module github.com/grafana/xk6-output-test
go 1.23.0
toolchain go1.23.7
require go.k6.io/k6 v0.57.0
require (
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/afero v1.1.2 // indirect
go.opentelemetry.io/otel v1.31.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect
go.opentelemetry.io/otel/metric v1.31.0 // indirect
go.opentelemetry.io/otel/sdk v1.31.0 // indirect
go.opentelemetry.io/otel/trace v1.31.0 // indirect
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.9.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
google.golang.org/grpc v1.69.4 // indirect
google.golang.org/protobuf v1.36.3 // indirect
gopkg.in/guregu/null.v3 v3.3.0 // indirect
)
================================================
FILE: .github/workflows/xk6-tests/xk6-output-test/go.sum
================================================
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa h1:lx8ZnNPwjkXSzOROz0cg69RlErRXs+L3eDkggASWKLo=
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa/go.mod h1:fhpOYavp5g2K74XDl/ao2y4KvhqVtKlkg1e+0UaQv7I=
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd h1:AC3N94irbx2kWGA8f/2Ks7EQl2LxKIRQYuT9IJDwgiI=
github.com/mstoykov/atlas v0.0.0-20220811071828-388f114305dd/go.mod h1:9vRHVuLCjoFfE3GT06X0spdOAO+Zzo4AMjdIwUHBvAk=
github.com/mstoykov/envconfig v1.5.0 h1:E2FgWf73BQt0ddgn7aoITkQHmgwAcHup1s//MsS5/f8=
github.com/mstoykov/envconfig v1.5.0/go.mod h1:vk/d9jpexY2Z9Bb0uB4Ndesss1Sr0Z9ZiGUrg5o9VGk=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
go.k6.io/k6 v0.57.0 h1:l1jivNtbCQYNhgvl+O6SfzwabqNlazr8OLYjxm8lNGw=
go.k6.io/k6 v0.57.0/go.mod h1:AXTOq8X59VqigGvoI59Al/+8F/5h4iHO0CoX0lNbq/4=
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc=
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 h1:fVoAXEKA4+yufmbdVYv+SE73+cPZbbbe8paLsHfkK+U=
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53/go.mod h1:riSXTwQ4+nqmPGtobMFyW5FqVAmIs0St6VPp4Ug7CE4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/guregu/null.v3 v3.3.0 h1:8j3ggqq+NgKt/O7mbFVUFKUMWN+l1AmT5jQmJ6nPh2c=
gopkg.in/guregu/null.v3 v3.3.0/go.mod h1:E4tX2Qe3h7QdL+uZ3a0vqvYwKQsRSQKM5V4YltdgH9Y=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
================================================
FILE: .github/workflows/xk6-tests/xk6-output-test/outputtest.go
================================================
package outputtest
import (
"io"
"strconv"
"go.k6.io/k6/metrics"
"go.k6.io/k6/output"
)
func init() {
output.RegisterExtension("outputtest", func(params output.Params) (output.Output, error) {
return &Output{params: params}, nil
})
}
// Output is meant to test xk6 and the output extension sub-system of k6.
type Output struct {
params output.Params
calcResult float64
outputFile io.WriteCloser
}
// Description returns a human-readable description of the output.
func (o *Output) Description() string {
return "test output extension"
}
// Start opens the specified output file.
func (o *Output) Start() error {
out, err := o.params.FS.Create(o.params.ConfigArgument)
if err != nil {
return err
}
o.outputFile = out
return nil
}
// AddMetricSamples just plucks out the metric we're interested in.
func (o *Output) AddMetricSamples(sampleContainers []metrics.SampleContainer) {
for _, sc := range sampleContainers {
for _, sample := range sc.GetSamples() {
if sample.Metric.Name == "foos" {
o.calcResult += sample.Value
}
}
}
}
// Stop saves the dummy results and closes the file.
func (o *Output) Stop() error {
_, err := o.outputFile.Write([]byte(strconv.FormatFloat(o.calcResult, 'f', 0, 64)))
if err != nil {
return err
}
return o.outputFile.Close()
}
================================================
FILE: .github/workflows/xk6-tests/xk6-test.js
================================================
import { check } from 'k6';
import jsexttest from 'k6/x/jsexttest';
export let options = {
iterations: 5,
thresholds: {
checks: ['rate===1'],
}
};
export function handleSummary(data) {
return {
'summary-results.txt': data.metrics.foos.values.count.toString(),
};
}
export default function () {
check(null, {
"foo is true": () => jsexttest.foo(__ITER),
});
}
================================================
FILE: .github/workflows/xk6.yml
================================================
name: xk6
on:
# Enable manually triggering this workflow via the API or web UI
workflow_dispatch:
push:
branches:
- master
pull_request:
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
test-xk6:
strategy:
fail-fast: false
matrix:
go: [stable, tip]
platform: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Install Go
if: matrix.go != 'tip'
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6
with:
go-version: 1.26.x
check-latest: true
- name: Download Go tip
if: matrix.go == 'tip'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release download ${{ matrix.platform }} --repo grafana/gotip --pattern 'go.zip'
- name: Install Go tip
if: matrix.go == 'tip'
run: |
unzip go.zip -d $HOME/sdk
echo "GOROOT=$HOME/sdk/gotip" >> "$GITHUB_ENV"
echo "GOPATH=$HOME/go" >> "$GITHUB_ENV"
echo "$HOME/go/bin" >> "$GITHUB_PATH"
echo "$HOME/sdk/gotip/bin" >> "$GITHUB_PATH"
- name: Run tests
env:
PR_REPO: ${{ github.event.pull_request.head.repo.full_name }}
run: |
set -x
which go
go version
export CGO_ENABLED=0
COMMIT_ID="${{ github.event.pull_request.head.sha }}"
if [[ "$COMMIT_ID" == "" ]]; then
COMMIT_ID="$(git rev-parse HEAD)" # branch, not PR merge commit
fi
echo "COMMIT_ID=$COMMIT_ID"
cd .github/workflows/xk6-tests
go install go.k6.io/xk6/cmd/xk6@master
if [ "${{ github.event_name }}" == "pull_request" -a \
"${PR_REPO}" != "${{ github.repository }}" ]; then
export XK6_K6_REPO="github.com/${PR_REPO}"
fi
# The following is a workaround for Windows, cause when using 'shell: bash', the PATH is expressed
# with ':' as separator, but Go code, running on a Windows OS, expects ';' as separator.
XPATH="$PATH"
if [[ "${{ matrix.platform }}" == "windows-latest" || "${{ matrix.platform }}" == "windows-latest" ]]; then
XPATH="$HOME/sdk/gotip/bin;$XPATH"
fi
PATH="$XPATH" \
GOPRIVATE="go.k6.io/k6" xk6 build "$COMMIT_ID" \
--output ./k6ext \
--with github.com/grafana/xk6-js-test="$(pwd)/xk6-js-test" \
--with github.com/grafana/xk6-output-test="$(pwd)/xk6-output-test"
export K6_NO_USAGE_REPORT=true
./k6ext version
./k6ext run --out outputtest=output-results.txt xk6-test.js
OUTPUT_RESULT="$(cat output-results.txt)"
if [[ "$OUTPUT_RESULT" != "10" ]]; then
echo "output result was not as expected: $OUTPUT_RESULT"
exit 11
fi
SUMMARY_RESULT="$(cat summary-results.txt)"
if [[ "$SUMMARY_RESULT" != "10" ]]; then
echo "summary result was not as expected: $SUMMARY_RESULT"
exit 12
fi
================================================
FILE: .github/zizmor.yml
================================================
# This is also used as the default configuration for the Zizmor reusable
# workflow.
rules:
unpinned-uses:
config:
policies:
actions/*: any # trust GitHub
grafana/*: any # trust Grafana
================================================
FILE: .gitignore
================================================
/k6
/k6.exe
/dist
/pkg-build
/internal/lib/summary/machinereadable/k6-summary
/internal/js/tc39/TestTC39
/internal/js/modules/k6/experimental/streams/tests/wpt
/internal/js/modules/k6/webcrypto/tests/wpt/
/.protoc
.vscode
*.sublime-workspace
*.log
*.syso
.idea
*.DS_Store
# Excluding as it is the file generated by the k6 init command
/script.js
/versioninfo.json
/vendor/**/.editorconfig
/vendor/**/*.jpg
/vendor/**/*.json
# Excluding as it is required (embedded) configuration file for web-dashboard
!/vendor/github.com/grafana/xk6-dashboard/dashboard/assets/packages/config/dist/config.json
!/vendor/github.com/grafana/xk6-dashboard-assets/packages/config/dist/config.json
/vendor/github.com/grafana/xk6-dashboard-assets/yarn.lock
/vendor/**/.*.json
/vendor/**/Makefile
/vendor/**/*.png
/vendor/**/*.tmpl
/vendor/**/*.txt
!/vendor/**/*LICENSE*
!/vendor/modules.txt
/vendor/**/*.y*ml
/vendor/**/.*.y*ml
/vendor/**/CODEOWNERS
/vendor/**/CONTRIBUTING.md
/vendor/**/CODE_OF_CONDUCT.md
/vendor/**/README.md
/vendor/**/.gitignore
/vendor/github.com/dlclark/regexp2/testoutput1
/packaging/.env
/packaging/*.gpg
================================================
FILE: .golangci.yml
================================================
# v2.10.1
# Please don't remove the first line. It uses in CI to determine the golangci version
version: "2"
linters:
default: none
enable:
- asasalint
- asciicheck
- bidichk
- bodyclose
- canonicalheader
- contextcheck
- copyloopvar
- cyclop
- dogsled
- dupl
- durationcheck
- errcheck
- errchkjson
- errname
- errorlint
- exhaustive
- fatcontext
- forbidigo
- forcetypeassert
- funlen
- gocheckcompilerdirectives
- gochecknoglobals
- gocognit
- goconst
- gocritic
- gomoddirectives
- goprintffuncname
- gosec
- govet
- importas
- ineffassign
- interfacebloat
- lll
- makezero
- misspell
- modernize
- nakedret
- nestif
- nilerr
- nilnil
- noctx
- nolintlint
- nosprintfhostport
- paralleltest
- prealloc
- predeclared
- promlinter
- reassign
- revive
- rowserrcheck
- sqlclosecheck
- staticcheck
- tparallel
- unconvert
- unparam
- unused
- usestdlibvars
- usetesting
- wastedassign
- whitespace
settings:
cyclop:
max-complexity: 25
dupl:
threshold: 150
exhaustive:
default-signifies-exhaustive: true
forbidigo:
forbid:
- pattern: ^(fmt\\.Print(|f|ln)|print|println)$
- pattern: ^os\.(.*)$(# Using anything except Signal and SyscallError from the os package is forbidden )?
- pattern: ^syscall\.[^A-Z_]+$(# Using anything except constants from the syscall package is forbidden )?
- pattern: ^logrus\.Logger$
- pattern: ^afero\.(.*)$(# Using afero outside of the fsext package is forbidden )?
funlen:
lines: 80
statements: 60
goconst:
min-len: 10
min-occurrences: 4
usetesting:
os-setenv: true
exclusions:
generated: lax
rules:
- linters:
- canonicalheader
- cyclop
- dupl
- forcetypeassert
- funlen
- gocognit
- lll
- gosec
path: _(test|gen)\.go
- linters:
- contextcheck
- revive
path: js\/modules\/k6\/browser\/.*\.go
- linters:
- revive
path: js\/modules\/k6\/html\/.*\.go
text: 'exported: exported '
- linters:
- paralleltest
- tparallel
path: js\/modules\/k6\/html\/.*\.go
- linters:
- paralleltest
- tparallel
path: js\/modules\/k6\/http\/.*_test\.go
- linters:
- forbidigo
text: use of `os\.(SyscallError|Signal|Interrupt)` forbidden
- linters:
- forbidigo
text: use of `afero\.(.*)` forbidden
path: lib/fsext/.*\.go
- linters:
- revive
text: avoid meaningless package names
- linters:
- revive
text: avoid package names that conflict with Go standard library
paths:
- third_party$
- builtin$
- examples$
issues:
max-issues-per-linter: 0
max-same-issues: 0
formatters:
enable:
- gofmt
- gofumpt
- goimports
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
================================================
FILE: AGENTS.md
================================================
@CLAUDE.md
================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
k6 is a modern load testing tool built in Go. It allows developers to write JavaScript test scripts to simulate user behavior and measure system performance. The tool features configurable load generation, multiple protocol support (HTTP, WebSockets, gRPC, Browser), and flexible metrics output.
## Common Development Commands
### Building and Testing
```bash
# Build the k6 binary
make build
# or
go build
# Run all tests with race detection
make tests
# or
go test -race -timeout 210s ./...
# Run linting
make lint
# Run both linting and tests
make check
# Format code
make format
```
### Single Test Execution
```bash
# Run tests for a specific package
go test ./lib/executor/
go test ./internal/js/modules/k6/http/
go test -v -run TestSpecificFunction ./path/to/package/
# Run browser tests (requires special setup)
go test ./internal/js/modules/k6/browser/tests/
```
### Code Generation
```bash
# Install tools and regenerate generated code
make generate-tools-installs
make generate
```
### Working with Examples
```bash
# Run gRPC server example
make grpc-server-run
# Test scripts are in examples/ directory
./k6 run examples/http_get.js
./k6 run examples/browser/querying.js
```
## Architecture Overview
### Core Components
**Main Entry Point**: `main.go` → `cmd/execute.go` → `internal/cmd/root.go`
- The CLI is built with Cobra and organized into subcommands in `internal/cmd/`
- Key commands: `run`, `archive`, `cloud`, `inspect`, `new`, `pause`, `resume`, `scale`, `stats`, `status`, `version`
**JavaScript Runtime**: `internal/js/` and `js/`
- `internal/js/`: Core JavaScript execution engine using Sobek (Goja fork)
- `js/modules/`: Built-in k6 modules (http, browser, crypto, etc.)
- `js/common/`: Shared JavaScript runtime utilities
**Load Testing Core**: `lib/`
- `lib/executor/`: Different execution strategies (constant VUs, ramping, arrival rate, etc.)
- `lib/netext/`: Network extensions and HTTP transport
- `lib/types/`: Core type definitions
- `lib/options.go`: Test configuration options
**Outputs**: `internal/output/` and `output/`
- Multiple output formats: JSON, CSV, InfluxDB, Prometheus, Cloud, OpenTelemetry
- Each output has its own package with config and implementation
**Browser Testing**: `internal/js/modules/k6/browser/`
- CDP-based browser automation using chromium
- Page, frame, element handle abstractions
- Browser context and session management
### Key Patterns
**Module System**: k6 modules are Go packages that expose JavaScript APIs
- `internal/js/modules/k6/`: Built-in k6 modules
- Modules follow a mapping pattern to bridge Go and JavaScript
- Example: `k6/http` module maps HTTP functionality
**Executor Pattern**: Different load testing strategies implemented as executors
- `constant-vus`: Fixed number of virtual users
- `ramping-vus`: Gradually increasing/decreasing VUs
- `constant-arrival-rate`: Fixed rate of iterations
- `per-vu-iterations`: Fixed iterations per VU
**Extension System**: `ext/` package allows extending k6 with custom functionality
- Extensions can add new JavaScript modules
- Used by xk6 ecosystem for community extensions
## Testing Structure
**Unit Tests**: Co-located with source code (`*_test.go`)
**Integration Tests**: `internal/cmd/tests/` for CLI integration tests
**Browser E2E Tests**: `internal/js/modules/k6/browser/tests/` with static HTML fixtures
**TC39/WPT Conformance**: `internal/js/tc39/` and modules with WPT test suites
## Important Configuration Files
- `.golangci.yml`: Linter configuration (version pinned at top)
- `Makefile`: Build targets and development commands
- `go.mod`: Go module dependencies (use Go 1.23+)
- `Dependencies.md`: Dependency update policy and guidelines
- `modtools_frozen.yml`: Dependencies that should not be auto-updated
## Development Guidelines
**Code Style**:
- Use `gofmt -s` for formatting
- Follow golangci-lint rules (run `make lint`)
- Comments should wrap at 100 characters
**Dependencies**:
- Update direct dependencies only after releases
- Some dependencies are intentionally frozen (see Dependencies.md)
- Use `modtools check --direct-only` to check for updates
**Testing**:
- All new code should have tests
- Use `go test -race` for concurrency testing
- Browser tests require additional setup and fixtures
**Generated Code**:
- Several files are auto-generated (look for `*_gen.go`)
- Run `make generate` after modifying source templates
- Protobuf definitions in `internal/cloudapi/insights/proto/`
## Git Workflow and Branching Strategy
**Branching Strategy**:
- Create a new branch for each feature or bugfix
- Branch names must be descriptive and reflect the problem being solved
- Examples: `fix-http-timeout-handling`, `add-websocket-compression`, `improve-browser-element-selection`
- Base new branches off the `master` branch
**Allowed Git Commands**:
```bash
# Create and switch to new branch
git checkout -b descriptive-branch-name
git switch -c descriptive-branch-name
# Regular commits (using user from git config)
git add .
git commit -m "descriptive commit message"
# Push branch to remote
git push origin branch-name
git push -u origin branch-name # first push with upstream
# Check status and view changes
git status
git diff
git log
```
**Strictly Forbidden Git Operations**:
- **NO force pushes**: `git push --force`, `git push -f`
- **NO history modification**: `git reset --hard`, `git rebase`, `git rebase -i`
- **NO direct pushes to master**: `git push origin master`
- **NO commit author overrides**: Always use the default git config user
**Commit Guidelines**:
- All commits must be created on behalf of the user listed in Git config (default behavior)
- Write clear, descriptive commit messages that could be included in a changelog
- Close related issues with commit messages: `Closes #123`, `Fixes #456`
- Follow existing commit message style in the repository
**Pull Request Process**:
- Create pull requests from feature branches to `master`
- Ensure all tests pass before creating PR
- Follow the existing PR template and guidelines
## Common File Locations
**CLI Commands**: `internal/cmd/` (run.go, cloud.go, etc.)
**HTTP Module**: `js/modules/k6/http/` and `internal/js/modules/k6/http/`
**Browser Module**: `internal/js/modules/k6/browser/`
**Metrics**: `metrics/` package for metric definitions
**Examples**: `examples/` directory with various test script examples
**Test Data**: `internal/cmd/testdata/` and module-specific test fixtures
================================================
FILE: CODEOWNERS
================================================
# by default the k6-core team is the owner of all files
* @grafana/k6-core
# The release notes are shared across different teams,
# especially with the browser team.
# It turned out to be less noisy if the author picks manually every time
# the best reviewers based on the context of the working area.
/release\ notes/
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting our Developer Relations team, avocados@k6.io.
All complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to k6
Thank you for your interest in contributing to k6!
(ノ◕ヮ◕)ノ*:・゚✧
Before you begin, make sure to familiarize yourself with the [Code of Conduct](CODE_OF_CONDUCT.md). If you've previously contributed to other open source project, you may recognize it as the classic [Contributor Covenant](https://contributor-covenant.org/).
If you want to chat with the team or the community, you can [join our community forums](https://community.k6.io/).
> **Note:** To disclose security issues, refer to [SECURITY.md](https://github.com/grafana/k6?tab=security-ov-file).
## Filing issues
Don't be afraid to file issues! Nobody can fix a bug we don't know exists, or add a feature we didn't think of.
The worst that can happen is that someone closes it and points you in the right direction.
That said, "how do I..."-type questions are often more suited for community forums.
## Contributing code
If you'd like to contribute code to k6, this is the basic procedure. Make sure to follow the [style guide](#code-style) described below.
1. Find an issue you'd like to fix. If there is none already, or you'd like to add a feature, please open one, and we can talk about how to do it. Out of respect for your time, please start a discussion regarding any bigger contributions either in a GitHub Issue, in the community forums **before** you get started on the implementation.
Remember, there's more to software development than code; if it's not properly planned, stuff gets messy real fast.
2. Create a fork and open a feature branch - `feature/my-cool-feature` is the classic way to name these, but it really doesn't matter.
3. Create a pull request!
4. Sign the [Contributor License Agreement](https://cla-assistant.io/grafana/k6) (the process is integrated with the pull request flow through cla-assistant.io).
5. We will discuss implementation details until everyone is happy, then a maintainer will merge it.
### Development setup
To get a basic development environment for Go and k6 up and running, first make sure you have **[Git](https://git-scm.com/downloads)** and **[Go](https://golang.org/doc/install)** (see our [go.mod](https://github.com/grafana/k6/blob/master/go.mod#L3) for minimum required version) installed and working properly.
We recommend using the Git command-line interface to download the source code for the k6:
* Open a terminal and run `git clone https://github.com/grafana/k6.git`. This command downloads k6's sources to a new `k6` directory in your current directory.
* Open the `k6` directory in your favorite code editor.
For alternative ways of cloning the k6 repository, please refer to [GitHub's cloning a repository](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository) documentation.
#### Running the linter
We make use of the [golangci-lint](https://github.com/golangci/golangci-lint) tool to lint the code in CI. The actual version you can find in our [`.golangci.yml`](https://github.com/grafana/k6/blob/master/.golangci.yml#L1). To run it locally, first [install it](https://golangci-lint.run/welcome/install/#local-installation), then run:
```bash
make lint
```
#### Running the test suite
To exercise the entire test suite, please run the following command
```bash
make tests
```
#### Dependencies
Consult [Dependencies.md](Dependencies.md) to find out more about how we manage k6's dependencies, and our policy regarding dependencies management and update.
#### Code style
As you'd expect, please adhere to good ol' `gofmt` (there are plugins for most editors that can autocorrect this), but also `gofmt -s` (code simplification), and don't leave unused functions laying around.
Continuous integration will catch all of this if you don't, and it's fine to just fix linter complaints with another commit, but you can also run the linter yourself:
```bash
make check
```
Comments in the source should wrap at 100 characters, but there's no maximum length or need to be brief here - please include anything one might need to know in order to understand the code, that you could reasonably expect any reader to not already know (you probably don't need to explain what a goroutine is).
#### Commit format
We don't have any explicit rules about commit message formatting, but try to write something that could be included as-is in a changelog.
If your commit closes an issue, please [close it with your commit message](https://help.github.com/articles/closing-issues-via-commit-messages/), for example:
```text
Added this really rad feature
Closes #420
```
#### Language and text formatting
Any human-readable text you add must be non-gendered and should be fairly concise without devolving into grammatical horrors, dropped words, and shorthands. This isn't Twitter, you don't have a character cap, but don't write a novel where a single sentence would suffice.
If you're writing a longer block of text to a terminal, wrap it at 80 characters - this ensures it will display properly at the de facto default terminal size of 80x25. As an example, this is the help text of the `scale` sub-command:
```text
Scale will change the number of active VUs of a running test.
It is an error to scale a test beyond vus-max; this is because instantiating
new VUs is a very expensive operation, which may skew test results if done
during a running test. To raise vus-max, use --max/-m.
Endpoint: /v1/status
```
================================================
FILE: Dependencies.md
================================================
# Updating dependencies in k6
k6 has a not small amount of dependencies, some of which are used more than others which affects how often if at all they should be updated.
Some original discussions can be found in [this issue](https://github.com/grafana/k6/issues/1933).
## General rule
The general rule is to update *direct* dependencies just after the release has been made.
This is mostly so that we keep up with dependencies for which we want new features or bug fixes and can be skipped on case by case basis if there is no bandwidth to be done or any other good reason.
For example some dependencies that were in the middle of big updates were skipped as they didn't add anything of value at the time, but were being updated day after day seemingly fixing bugs added the previous day. As in that case that wasn't a dependency we wanted to be on top off - we skipped it.
Through the rest of the development cycle dependencies shouldn't be updated unless:
1. required for development
2. a particular bug fix/feature is really important
The last part predominantly goes for `golang.org/x/*` and particularly `golang.org/x/net` which usually have updates through the development of Go itself.
[Sobek](https://github.com/grafana/sobek) has special considerations as it's heavily used and bug fixes there or new features usually have high impact on k6. Which means that we usually try to update it whenever something new lands there.
As the stability of any k6 release is pretty essential, this should be done only when adequate testing can be done, and in general, the changelog for each dependency should be consulted on what has changed.
The latter also serves as a time to open/close issues that are related to the updates. There might be a bug fix for an open issue - we should test it and close the issue. Or there might be new functionality that can be used - probably an issue should be open.
## Go versions
We aim to support a building of the k6 binary with the two latest versions of golang, which reflects the support [policy](https://go.dev/doc/devel/release#policy) of the Go team.
## Exceptions
There are some dependencies that we really don't use all that much, intend on removing and as a general note don't need anything else from them. Given that we currently have no problems that updates will fix - we prefer to not update them as not to introduce bugs. Also, for some they bring additional dependencies that we do not want, which is just one more reason not to update them.
List (as of March 2022):
- github.com/andybalholm/cascadia - a dependency of `github.com/PuerkitoBio/goquery`
- github.com/sirupsen/logrus - it's in maintenance mode and we want to remove it - also no update for a long time, but also no bugs.
- github.com/spf13/afero - there are plans to be [replaced by io/fs](https://github.com/grafana/k6/issues/1079) and we don't need anything from it. We have already worked around some bugs so updating might break something
- github.com/spf13/cobra - none of the newer features are particularly needed, but adds a bunch of new dependencies.
- github.com/spf13/pflag - similar to above
- gopkg.in/guregu/null.v3 - no new interesting features and we probably want to drop it in favor of [croconf](https://github.com/grafana/croconf)
- gopkg.in/yaml.v3 - no new features wanted - actually used directly in only one place to output yaml to stdout.
## How to do it
For updating dependencies we recommend to use [modtools](https://github.com/dop251/modtools).
Running `modtools check --direct-only` will give you a list of packages that aren't frozen (the ones above in the exceptions). Alternatively just running `go get <dependency>` for each direct dependency, which also will tell you if there was an update.
Then take a look at the changelog between the versions.
You can use the command `modtools check --direct-only` provided you, to update it. Run tests and if relevant check that bugs are fixed or any other verification that is appropriate.
Commit dependencies one by one with a message like `Update <dependency> from vX.Y.Z to vX.Y.Z` and a relevant changelog for k6. Sometimes that means "nothing of relevance for k6", sometimes it means a list of bug fixes or new features.
It's preferable to make multiple PRs - in most cases you can split them in three:
- update for Sobek - which usually needs to happen.
- update for `golang.org/x/*` - also again happen literally every release
- everything else - this in general doesn't include more than 5-6 small updates.
Further splitting is recommended if PRs become too big.
When updating Sobek it's recommended to run the tc39 tests in `js/tc39`. And if needed, update the breaking ones as explained in an [Introduction to a k6's TC39 testing](./js/tc39/README.md).
================================================
FILE: Dockerfile
================================================
FROM --platform=$BUILDPLATFORM golang:1.26.1-alpine@sha256:2389ebfa5b7f43eeafbd6be0c3700cc46690ef842ad962f6c5bd6be49ed82039 as builder
WORKDIR $GOPATH/src/go.k6.io/k6
COPY . .
ARG TARGETOS TARGETARCH
RUN apk --no-cache add git=~2
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -trimpath -o /usr/bin/k6
# Runtime stage
FROM alpine:3.23.3@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 as release
RUN adduser -D -u 12345 -g 12345 k6
COPY --from=builder /usr/bin/k6 /usr/bin/k6
USER 12345
WORKDIR /home/k6
ENTRYPOINT ["k6"]
# Browser-enabled bundle
FROM release as with-browser
USER root
COPY --from=release /usr/bin/k6 /usr/bin/k6
RUN apk --no-cache add chromium chromium-swiftshader
USER 12345
ENV CHROME_BIN=/usr/bin/chromium-browser
ENV CHROME_PATH=/usr/lib/chromium/
ENV K6_BROWSER_HEADLESS=true
# no-sandbox chrome arg is required to run chrome browser in
# alpine and avoids the usage of SYS_ADMIN Docker capability
ENV K6_BROWSER_ARGS=no-sandbox
ENTRYPOINT ["k6"]
================================================
FILE: LICENSE.md
================================================
### GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains
free software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing
under this license.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public
License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your
version supports such interaction) an opportunity to receive the
Corresponding Source of your version by providing access to the
Corresponding Source from a network server at no charge, through some
standard or customary means of facilitating copying of software. This
Corresponding Source shall include the Corresponding Source for any
work covered by version 3 of the GNU General Public License that is
incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for
the specific requirements.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU AGPL, see <http://www.gnu.org/licenses/>.
================================================
FILE: Makefile
================================================
MAKEFLAGS += --silent
GOLANGCI_LINT_VERSION = $(shell head -n 1 .golangci.yml | tr -d '\# ')
PROTOC_VERSION := 21.12
ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
PROTOC_ARCHIVE := protoc-$(PROTOC_VERSION)-win64.zip
else
UNAME := $(shell uname)
ifeq ($(UNAME),Linux)
DETECTED_OS := Linux
PROTOC_ARCHIVE := protoc-$(PROTOC_VERSION)-linux-x86_64.zip
else ifeq ($(UNAME),Darwin)
DETECTED_OS := Darwin
PROTOC_ARCHIVE := protoc-$(PROTOC_VERSION)-osx-universal_binary.zip
endif
endif
PROTOC_DOWNLOAD_URL := https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/$(PROTOC_ARCHIVE)
proto-dependencies:
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
@if [ -z "$(DETECTED_OS)" ]; then \
echo "Error: Can't install protoc on your OS, please install protoc-$(PROTOC_VERSION) manually." >&2; \
exit 1; \
fi
@echo "Downloading $(PROTOC_ARCHIVE)"
curl --show-error --fail --no-location -LO $(PROTOC_DOWNLOAD_URL)
unzip -o $(PROTOC_ARCHIVE) -d ./.protoc
rm $(PROTOC_ARCHIVE)
generate-tools-installs: proto-dependencies
go install github.com/mstoykov/enumer@v0.0.1 # TODO figure out if we shouldn't move to a different fork
go install mvdan.cc/gofumpt@v0.8.0 # TODO maybe just use go fmt for this case
go install github.com/mailru/easyjson/easyjson@v0.7.7 # TODO remove this in the future
generate: generate-tools-installs
PATH="$(PWD)/.protoc/bin:$(PATH)" go generate ./...
all: clean format tests build
## build: Builds the 'k6' binary.
build:
go build
## format: Applies Go formatting to code.
format:
find . -name '*.go' -exec gofmt -s -w {} +
## grpc-server-run: Runs the gRPC server example.
grpc-server-run:
go run -mod=mod examples/grpc_server/*.go
## check-linter-version: Checks if the linter version is the same as the one specified in the linter config.
check-linter-version:
(golangci-lint version | grep -E "version v?$(shell head -n 1 .golangci.yml | tr -d '\# v')") || echo "Your installation of golangci-lint is different from the one that is specified in k6's linter config (there it's $(shell head -n 1 .golangci.yml | tr -d '\# ')). Results could be different in the CI."
## lint: Runs the linters.
lint: check-linter-version
echo "Running linters..."
golangci-lint run ./...
## tests: Executes any unit tests.
tests:
go test -race -timeout 210s ./...
## check: Runs the linters and tests.
check: lint tests
## help: Prints a list of available build targets.
help:
echo "Usage: make <OPTIONS> ... <TARGETS>"
echo ""
echo "Available targets are:"
echo ''
sed -n 's/^##//p' ${PWD}/Makefile | column -t -s ':' | sed -e 's/^/ /'
echo
echo "Targets run by default are: `sed -n 's/^all: //p' ./Makefile | sed -e 's/ /, /g' | sed -e 's/\(.*\), /\1, and /'`"
## clean: Removes any previously created build artifacts.
clean:
@echo "cleaning"
rm -f ./k6
.PHONY: build format lint tests check check-linter-version help
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://grafana.com/oss/k6/">
<picture>
<img src="assets/logo.svg" alt="Grafana k6" width="210" height="210" /><br>
</picture>
<br>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/grafana-labs-dark-theme.svg">
<source media="(prefers-color-scheme: light)" srcset="assets/grafana-labs.svg">
<img src="assets/grafana-labs.svg" alt="Grafana Labs" width="210" />
</picture>
<br>
</a>
</p>
<h3 align="center">Like unit testing, for performance</h3>
<p align="center">Modern load testing for developers and testers in the DevOps era.</p>
<p align="center">
<a href="https://github.com/grafana/k6/releases"><img src="https://img.shields.io/github/release/grafana/k6.svg" alt="Github release"></a>
<a href="https://github.com/grafana/k6/actions/workflows/all.yml"><img src="https://github.com/grafana/k6/actions/workflows/build.yml/badge.svg" alt="Build status"></a>
<a href="https://goreportcard.com/report/github.com/grafana/k6"><img src="https://goreportcard.com/badge/github.com/grafana/k6" alt="Go Report Card"></a>
<a href="https://codecov.io/gh/grafana/k6"><img src="https://img.shields.io/codecov/c/github/grafana/k6/master.svg" alt="Codecov branch"></a>
<br>
<a href="https://twitter.com/k6_io"><img src="https://img.shields.io/badge/twitter-@k6_io-55acee.svg" alt="@k6_io on Twitter"></a>
</p>
<p align="center">
<a href="https://github.com/grafana/k6/releases">Download</a> ·
<a href="https://grafana.com/docs/k6/latest/">Documentation</a> ·
<a href="https://community.grafana.com/c/grafana-k6/70">Community Forum</a> ·
<a href="https://github.com/orgs/grafana/projects/443/views/1">Public Roadmap</a>
</p>
<br/>
<img src="assets/github-hr.png" alt="---" />
<br/>
**k6** is a modern load-testing tool, built on [our years of experience](https://k6.io/about) in the performance and testing industries.
It's built to be powerful, extensible, and full-featured. The key design goal is to provide **the best developer experience**.
Its core features are:
- **Configurable load generation.** Even lower-end machines can simulate lots of traffic.
- **Tests as code.** Reuse scripts, modularize logic, version control, and integrate tests with your CI.
- **A full-featured API.** The scripting API is packed with features that help you simulate real application traffic.
- **An embedded JavaScript engine.** The performance of Go, the scripting familiarity of JavaScript.
- **Multiple Protocol support**. HTTP, WebSockets, gRPC, Browser, and more.
- **Large extension ecosystem.** You can extend k6 to support your needs. And many people have already shared their extensions with the community! [Explore](https://grafana.com/docs/k6/latest/extensions/explore) the available extensions.
- **Flexible metrics storage and visualization**. Summary statistics or granular metrics, exported to the service of your choice.
- **Native integration with Grafana cloud**. [SaaS solution](https://grafana.com/products/cloud/k6/) for test execution, metrics correlation, data analysis, and more.
This is what load testing looks like in the 21st century.
## Example script
```js
import http from "k6/http";
import { check, sleep } from "k6";
// Test configuration
export const options = {
thresholds: {
// Assert that 99% of requests finish within 3000ms.
http_req_duration: ["p(99) < 3000"],
},
// Ramp the number of virtual users up and down
stages: [
{ duration: "30s", target: 15 },
{ duration: "1m", target: 15 },
{ duration: "20s", target: 0 },
],
};
// Simulated user behavior
export default function () {
let res = http.get("https://quickpizza.grafana.com");
// Validate response status
check(res, { "status was 200": (r) => r.status == 200 });
sleep(1);
}
```
You can run scripts like this on the CLI, or in your CI, or across a Kubernetes cluster.
> [!NOTE]
> Don't want to write code ?
>
> We got you! Meet [k6 Studio](https://github.com/grafana/k6-studio), a desktop application made to help you generate k6 scripts without having to touch code!
## Documentation
The docs cover all aspects of using k6. Some highlights include:
- [Get Started](https://grafana.com/docs/k6/latest/). Install, run a test, inspect results.
- [HTTP requests](https://grafana.com/docs/k6/latest/using-k6/http-requests/). Have your virtual users use HTTP methods.
Or, check the other [Protocols](https://grafana.com/docs/k6/latest/using-k6/protocols/).
- [Thresholds](https://grafana.com/docs/k6/latest/using-k6/thresholds/). Set goals for your test, and codify your SLOs.
- [Options](https://grafana.com/docs/k6/latest/using-k6/k6-options/). Configure your load, duration, TLS certificates, and much, much more.
- [Scenarios](https://grafana.com/docs/k6/latest/using-k6/scenarios/).
Choose how to model your workload: open models, closed models, constant RPS, fixed iterations, and more.
- [Results output](https://grafana.com/docs/k6/latest/results-output/). Study, filter, and export your test results.
- [JavaScript API](https://grafana.com/docs/k6/latest/javascript-api/). Reference and examples of all k6 modules.
- [Extensions](https://grafana.com/docs/k6/latest/extensions/). Extend k6 for new protocols and use cases.
These links barely scratch the surface! If you're looking for conceptual information, you can read about [Test types](https://grafana.com/docs/k6/latest/testing-guides/test-types/), [Test strategies](https://grafana.com/docs/k6/latest/testing-guides/), or one of the many informative [Blog posts](https://k6.io/blog).
## Roadmap
Our team is dedicated to continuously improving and providing the best user experience possible. The [public roadmap](https://github.com/orgs/grafana/projects/443/views/1) covers user-oriented features, UX improvements and JavaScript support that our team will focus on. Remember that timeframes and priorities may shift, but we believe it's important to share our vision.
We hope it provides a clear overview of our plans for future development. We welcome feedback, corrections, and suggestions via GitHub to make it more comprehensive, accessible, and valuable for the community.
It's worth mentioning that we consider [upvotes (thumbs-up)](https://github.com/grafana/k6/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc) to be one of the essential metrics for determining community needs. If you want to show us the importance of a feature, please give it a thumbs-up.
## Contribute
If you want to contribute or help with the development of k6, start by reading [CONTRIBUTING.md](CONTRIBUTING.md). Before you start coding, it might be a good idea to first discuss your plans and implementation details with the k6 maintainers—especially when it comes to big changes and features. You can do this in the [GitHub issue](https://github.com/grafana/k6/issues) for the problem you're solving (create one if it doesn't exist).
> **Note:** To disclose security issues, refer to [SECURITY.md](https://github.com/grafana/k6?tab=security-ov-file).
## Support
To get help, report bugs, suggest features, and discuss k6 with others, refer to [SUPPORT.md](SUPPORT.md).
## License
k6 is distributed under the [AGPL-3.0 license](https://github.com/grafana/k6/blob/master/LICENSE.md).
================================================
FILE: SUPPORT.md
================================================
# Support
Types of questions and where to ask:
- How do I? -- the Discourse forum at [community.k6.io](https://community.k6.io/) or [Stack Overflow](https://stackoverflow.com/questions/tagged/k6) (use tags: k6, javascript, load-testing)
- I got this error, why? -- [community.k6.io](https://community.k6.io/) or [Stack Overflow](https://stackoverflow.com/questions/tagged/k6)
- I got this error and I'm sure it's a bug -- [open a new issue](https://github.com/grafana/k6/issues), if there isn't one for this specific bug already
- I have an idea/request -- search the [GitHub issues](https://github.com/grafana/k6/issues) to see if it was already requested and give the issue a :+1: if so. If it wasn't, search [community.k6.io](https://community.k6.io/) or post a forum thread to discuss the idea with the developers before creating a GitHub issue.
- Why do you? -- [community.k6.io](https://community.k6.io/)
- When will you? -- check the [public roadmap](https://github.com/orgs/grafana/projects/443/views/1). They are not development promises, they are insights of what is on the radar for the team.
If your questions are related to the commercial [Grafana Cloud k6](https://grafana.com/products/cloud/k6) service, check the available options on the dedicated page on [Grafana Cloud documentation](https://grafana.com/docs/grafana-cloud/account-management/support).
================================================
FILE: api/v1/client/client.go
================================================
// Package client provides a simple go-client for the k6's REST API.
package client
import (
"bytes"
"context"
"encoding/json"
"io"
"net/http"
"net/url"
"github.com/sirupsen/logrus"
v1 "go.k6.io/k6/api/v1"
)
// Client is a simple HTTP client for the REST API.
type Client struct {
BaseURL *url.URL
httpClient *http.Client
logger *logrus.Entry
}
// Option function are helpers that enable the flexible configuration of the
// REST API client.
type Option func(*Client)
// New returns a newly configured REST API Client.
func New(base string, options ...Option) (*Client, error) {
baseURL, err := url.Parse("http://" + base)
if err != nil {
return nil, err
}
c := &Client{
BaseURL: baseURL,
httpClient: http.DefaultClient,
}
for _, option := range options {
option(c)
}
return c, nil
}
// WithHTTPClient configures the supplied HTTP client to be used when making
// REST API requests.
func WithHTTPClient(httpClient *http.Client) Option {
return Option(func(c *Client) {
c.httpClient = httpClient
})
}
// WithLogger sets the specified logger to the client.
func WithLogger(logger *logrus.Entry) Option {
return Option(func(c *Client) {
c.logger = logger
})
}
// CallAPI executes the desired REST API request.
// it's expected that the body and out are the structs that follows the JSON:API
func (c *Client) CallAPI(ctx context.Context, method string, rel *url.URL, body, out any) (err error) {
if c.logger != nil {
c.logger.Debugf("[REST API] Making a %s request to '%s'", method, rel.String())
defer func() {
if err != nil {
c.logger.WithError(err).Error("[REST API] Error")
}
}()
}
var bodyReader io.ReadCloser
if body != nil {
var bodyData []byte
switch val := body.(type) {
case []byte:
bodyData = val
case string:
bodyData = []byte(val)
default:
bodyData, err = json.Marshal(body)
if err != nil {
return err
}
}
bodyReader = io.NopCloser(bytes.NewBuffer(bodyData))
}
req := &http.Request{
Method: method,
URL: c.BaseURL.ResolveReference(rel),
Body: bodyReader,
}
req = req.WithContext(ctx)
res, err := c.httpClient.Do(req) //nolint:gosec
if err != nil {
return err
}
defer func() { _ = res.Body.Close() }()
data, err := io.ReadAll(res.Body)
if err != nil {
return err
}
if res.StatusCode >= 400 {
var errs v1.ErrorResponse
if err := json.Unmarshal(data, &errs); err != nil {
return err
}
return errs.Errors[0]
}
if out != nil {
return json.Unmarshal(data, out)
}
return nil
}
================================================
FILE: api/v1/client/metrics.go
================================================
package client
import (
"context"
"net/http"
"net/url"
v1 "go.k6.io/k6/api/v1"
)
// Metrics returns the current metrics summary.
func (c *Client) Metrics(ctx context.Context) (ret []v1.Metric, err error) {
var resp v1.MetricsJSONAPI
err = c.CallAPI(ctx, http.MethodGet, &url.URL{Path: "/v1/metrics"}, nil, &resp)
if err != nil {
return ret, err
}
return resp.Metrics(), nil
}
================================================
FILE: api/v1/client/status.go
================================================
package client
import (
"context"
"net/http"
"net/url"
v1 "go.k6.io/k6/api/v1"
)
// Status returns the current k6 status.
func (c *Client) Status(ctx context.Context) (ret v1.Status, err error) {
var resp v1.StatusJSONAPI
if err = c.CallAPI(ctx, http.MethodGet, &url.URL{Path: "/v1/status"}, nil, &resp); err != nil {
return ret, err
}
return resp.Status(), nil
}
// SetStatus tries to change the current status and returns the new one if it
// was successful.
func (c *Client) SetStatus(ctx context.Context, patch v1.Status) (ret v1.Status, err error) {
var resp v1.StatusJSONAPI
apiURL := &url.URL{Path: "/v1/status"}
if err = c.CallAPI(ctx, http.MethodPatch, apiURL, v1.NewStatusJSONAPI(patch), &resp); err != nil {
return ret, err
}
return resp.Status(), nil
}
================================================
FILE: api/v1/control_surface.go
================================================
package v1
import (
"context"
"go.k6.io/k6/internal/execution"
"go.k6.io/k6/internal/metrics/engine"
"go.k6.io/k6/lib"
"go.k6.io/k6/metrics"
)
// ControlSurface includes the methods the REST API can use to control and
// communicate with the rest of k6.
type ControlSurface struct {
RunCtx context.Context
Samples chan metrics.SampleContainer
MetricsEngine *engine.MetricsEngine
Scheduler *execution.Scheduler
RunState *lib.TestRunState
}
================================================
FILE: api/v1/errors.go
================================================
package v1
import (
"encoding/json"
"fmt"
"net/http"
"strconv"
)
// Error is an api error
type Error struct {
Status string `json:"status,omitempty"`
Title string `json:"title,omitempty"`
Detail string `json:"detail,omitempty"`
}
func (e Error) Error() string {
return fmt.Sprintf("%s: %s", e.Title, e.Detail)
}
// ErrorResponse is a struct wrapper around multiple errors
type ErrorResponse struct {
Errors []Error `json:"errors"`
}
func apiError(rw http.ResponseWriter, title, detail string, status int) {
doc := ErrorResponse{
Errors: []Error{
{
Status: strconv.Itoa(status),
Title: title,
Detail: detail,
},
},
}
data, err := json.Marshal(doc)
if err != nil {
panic(err)
}
rw.WriteHeader(status)
_, _ = rw.Write(data)
}
================================================
FILE: api/v1/group.go
================================================
package v1
import (
"fmt"
"go.k6.io/k6/lib"
)
// Check represents a k6's check in a k6 REST API
type Check struct {
ID string `json:"id" yaml:"id"`
Path string `json:"path" yaml:"path"`
Name string `json:"name" yaml:"name"`
Passes int64 `json:"passes" yaml:"passes"`
Fails int64 `json:"fails" yaml:"fails"`
}
// NewCheck constructs a new v1.Check struct that is used for
// a check representation in a k6 REST API
func NewCheck(c *lib.Check) Check {
return Check{
ID: c.ID,
Path: c.Path,
Name: c.Name,
Passes: c.Passes,
Fails: c.Fails,
}
}
// Group represents a k6's group in a k6 REST API
type Group struct {
ID string `json:"-" yaml:"id"`
Path string `json:"path" yaml:"path"`
Name string `json:"name" yaml:"name"`
Checks []Check `json:"checks" yaml:"checks"`
Parent *Group `json:"-" yaml:"-"`
ParentID string `json:"-" yaml:"parent-id"`
Groups []*Group `json:"-" yaml:"-"`
GroupIDs []string `json:"-" yaml:"group-ids"`
}
// NewGroup constructs a new v1.Group struct that is used for
// a group representation in a k6 REST API
func NewGroup(g *lib.Group, parent *Group) *Group {
group := &Group{
ID: g.ID,
Path: g.Path,
Name: g.Name,
}
if parent != nil {
group.Parent = parent
group.ParentID = parent.ID
} else if g.Parent != nil {
group.Parent = NewGroup(g.Parent, nil)
group.ParentID = g.Parent.ID
}
for _, gp := range g.Groups {
group.Groups = append(group.Groups, NewGroup(gp, group))
group.GroupIDs = append(group.GroupIDs, gp.ID)
}
for _, c := range g.Checks {
group.Checks = append(group.Checks, NewCheck(c))
}
return group
}
// SetToManyReferenceIDs sets to-many relations (groups) for a group
func (g *Group) SetToManyReferenceIDs(name string, ids []string) error {
switch name {
case "groups":
g.Groups = nil
g.GroupIDs = ids
return nil
default:
return fmt.Errorf("unknown to many relation: %s", name)
}
}
// SetToOneReferenceID sets to-one relation (parent) for a group
func (g *Group) SetToOneReferenceID(name, id string) error {
switch name {
case "parent":
g.Parent = nil
g.ParentID = id
return nil
default:
return fmt.Errorf("unknown to one relation: %s", name)
}
}
// FlattenGroup flattens a group and all its subgroups
// into a slice of groups
func FlattenGroup(g *Group) []*Group {
groups := make([]*Group, 0, 1+len(g.Groups))
groups = append(groups, g)
for _, gp := range g.Groups {
groups = append(groups, FlattenGroup(gp)...)
}
return groups
}
================================================
FILE: api/v1/group_jsonapi.go
================================================
package v1
import "encoding/json"
type groupJSONAPI struct {
Data groupData `json:"data"`
}
type groupsJSONAPI struct {
Data []groupData `json:"data"`
}
type groupData struct {
Type string `json:"type"`
ID string `json:"id"`
Attributes Group `json:"attributes"`
Relationships groupRelations `json:"relationships"`
}
type groupRelations struct {
Groups struct {
Data []groupRelation `json:"data"`
} `json:"groups"`
Parent struct {
Data *groupRelation `json:"data"`
} `json:"parent"`
}
type groupRelation struct {
Type string `json:"type"`
ID string `json:"id"`
}
// UnmarshalJSON unmarshal group data properly (extract the ID)
func (g *groupData) UnmarshalJSON(data []byte) error {
var raw struct {
Type string `json:"type"`
ID string `json:"id"`
Attributes Group `json:"attributes"`
Relationships groupRelations `json:"relationships"`
}
if err := json.Unmarshal(data, &raw); err != nil {
return err
}
g.ID = raw.ID
g.Type = raw.Type
g.Relationships = raw.Relationships
g.Attributes = raw.Attributes
if g.Attributes.ID == "" {
g.Attributes.ID = raw.ID
}
if g.Relationships.Parent.Data != nil {
g.Attributes.ParentID = g.Relationships.Parent.Data.ID
}
g.Attributes.GroupIDs = make([]string, 0, len(g.Relationships.Groups.Data))
for _, rel := range g.Relationships.Groups.Data {
g.Attributes.GroupIDs = append(g.Attributes.GroupIDs, rel.ID)
}
return nil
}
func newGroupJSONAPI(g *Group) groupJSONAPI {
return groupJSONAPI{
Data: newGroupData(g),
}
}
func newGroupsJSONAPI(groups []*Group) groupsJSONAPI {
envelop := groupsJSONAPI{
Data: make([]groupData, 0, len(groups)),
}
for _, g := range groups {
envelop.Data = append(envelop.Data, newGroupData(g))
}
return envelop
}
func newGroupData(group *Group) groupData {
data := groupData{
Type: "groups",
ID: group.ID,
Attributes: *group,
Relationships: groupRelations{
Groups: struct {
Data []groupRelation `json:"data"`
}{
Data: make([]groupRelation, 0, len(group.Groups)),
},
Parent: struct {
Data *groupRelation `json:"data"`
}{},
},
}
if group.Parent != nil {
data.Relationships.Parent.Data = &groupRelation{
Type: "groups",
ID: group.Parent.ID,
}
}
for _, gp := range group.Groups {
data.Relationships.Groups.Data = append(data.Relationships.Groups.Data, groupRelation{
ID: gp.ID,
Type: "groups",
})
}
return data
}
================================================
FILE: api/v1/group_routes.go
================================================
package v1
import (
"encoding/json"
"net/http"
)
func handleGetGroups(cs *ControlSurface, rw http.ResponseWriter, _ *http.Request) {
root := NewGroup(cs.RunState.GroupSummary.Group(), nil)
groups := FlattenGroup(root)
data, err := json.Marshal(newGroupsJSONAPI(groups))
if err != nil {
apiError(rw, "Encoding error", err.Error(), http.StatusInternalServerError)
return
}
_, _ = rw.Write(data)
}
func handleGetGroup(cs *ControlSurface, rw http.ResponseWriter, _ *http.Request, id string) {
root := NewGroup(cs.RunState.GroupSummary.Group(), nil)
groups := FlattenGroup(root)
var group *Group
for _, g := range groups {
if g.ID == id {
group = g
break
}
}
if group == nil {
apiError(rw, "Not Found", "No group with that ID was found", http.StatusNotFound)
return
}
data, err := json.Marshal(newGroupJSONAPI(group))
if err != nil {
apiError(rw, "Encoding error", err.Error(), http.StatusInternalServerError)
return
}
_, _ = rw.Write(data)
}
================================================
FILE: api/v1/group_routes_test.go
================================================
package v1
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.k6.io/k6/internal/execution"
"go.k6.io/k6/internal/execution/local"
"go.k6.io/k6/internal/lib/testutils"
"go.k6.io/k6/internal/lib/testutils/minirunner"
"go.k6.io/k6/internal/metrics/engine"
"go.k6.io/k6/internal/usage"
"go.k6.io/k6/lib"
"go.k6.io/k6/metrics"
)
func getTestPreInitState(tb testing.TB) *lib.TestPreInitState {
reg := metrics.NewRegistry()
logger := testutils.NewLogger(tb)
return &lib.TestPreInitState{
Logger: logger,
RuntimeOptions: lib.RuntimeOptions{},
Registry: reg,
BuiltinMetrics: metrics.RegisterBuiltinMetrics(reg),
Usage: usage.New(),
}
}
func getTestRunState(tb testing.TB, options lib.Options, runner lib.Runner) *lib.TestRunState {
require.NoError(tb, runner.SetOptions(runner.GetOptions().Apply(options)))
piState := getTestPreInitState(tb)
return &lib.TestRunState{
TestPreInitState: piState,
Options: options,
Runner: runner,
GroupSummary: lib.NewGroupSummary(piState.Logger),
RunTags: piState.Registry.RootTagSet().WithTagsFromMap(options.RunTags),
}
}
func getControlSurface(tb testing.TB, testState *lib.TestRunState) *ControlSurface {
execScheduler, err := execution.NewScheduler(testState, local.NewController())
require.NoError(tb, err)
me, err := engine.NewMetricsEngine(testState.Registry, testState.Logger)
require.NoError(tb, err)
ctx, cancel := context.WithCancel(context.Background())
tb.Cleanup(cancel)
ctx, _ = execution.NewTestRunContext(ctx, testState.Logger)
return &ControlSurface{
RunCtx: ctx,
Samples: make(chan metrics.SampleContainer, 1000),
MetricsEngine: me,
Scheduler: execScheduler,
RunState: testState,
}
}
func TestGetGroups(t *testing.T) {
t.Parallel()
cs := getControlSurface(t, getTestRunState(t, lib.Options{}, &minirunner.MiniRunner{}))
require.NoError(t, cs.RunState.GroupSummary.Start())
cs.RunState.GroupSummary.AddMetricSamples([]metrics.SampleContainer{
metrics.Sample{
TimeSeries: metrics.TimeSeries{
Metric: cs.RunState.BuiltinMetrics.GroupDuration,
Tags: cs.RunState.Registry.RootTagSet().With("group", "::group 1"),
},
},
metrics.Sample{
TimeSeries: metrics.TimeSeries{
Metric: cs.RunState.BuiltinMetrics.GroupDuration,
Tags: cs.RunState.Registry.RootTagSet().With("group", ""),
},
},
metrics.Sample{
TimeSeries: metrics.TimeSeries{
Metric: cs.RunState.BuiltinMetrics.GroupDuration,
Tags: cs.RunState.Registry.RootTagSet().With("group", "::group 1::group 2"),
},
},
})
require.NoError(t, cs.RunState.GroupSummary.Stop())
g0, err := lib.NewGroup("", nil)
assert.NoError(t, err)
g1, err := g0.Group("group 1")
assert.NoError(t, err)
g2, err := g1.Group("group 2")
assert.NoError(t, err)
t.Run("list", func(t *testing.T) {
t.Parallel()
rw := httptest.NewRecorder()
NewHandler(cs).ServeHTTP(rw, httptest.NewRequest(http.MethodGet, "/v1/groups", nil))
res := rw.Result()
t.Cleanup(func() {
assert.NoError(t, res.Body.Close())
})
body := rw.Body.Bytes()
assert.Equal(t, http.StatusOK, res.StatusCode)
assert.NotEmpty(t, body)
t.Run("document", func(t *testing.T) {
t.Parallel()
var doc groupsJSONAPI
assert.NoError(t, json.Unmarshal(body, &doc))
if assert.NotEmpty(t, doc.Data) {
assert.Equal(t, "groups", doc.Data[0].Type)
}
})
t.Run("groups", func(t *testing.T) {
t.Parallel()
var envelop groupsJSONAPI
require.NoError(t, json.Unmarshal(body, &envelop))
require.Len(t, envelop.Data, 3)
for _, data := range envelop.Data {
current := data.Attributes
switch current.ID {
case g0.ID:
assert.Equal(t, "", current.Name)
assert.Nil(t, current.Parent)
assert.Equal(t, "", current.ParentID)
assert.Len(t, current.GroupIDs, 1)
assert.EqualValues(t, []string{g1.ID}, current.GroupIDs)
case g1.ID:
assert.Equal(t, "group 1", current.Name)
assert.Nil(t, current.Parent)
assert.Equal(t, g0.ID, current.ParentID)
assert.EqualValues(t, []string{g2.ID}, current.GroupIDs)
case g2.ID:
assert.Equal(t, "group 2", current.Name)
assert.Nil(t, current.Parent)
assert.Equal(t, g1.ID, current.ParentID)
assert.EqualValues(t, []string{}, current.GroupIDs)
default:
assert.Fail(t, "Unknown ID: "+current.ID)
}
}
})
})
for _, gp := range []*lib.Group{g0, g1, g2} {
t.Run(gp.Name, func(t *testing.T) {
t.Parallel()
rw := httptest.NewRecorder()
NewHandler(cs).ServeHTTP(rw, httptest.NewRequest(http.MethodGet, "/v1/groups/"+gp.ID, nil))
res := rw.Result()
t.Cleanup(func() {
assert.NoError(t, res.Body.Close())
})
assert.Equal(t, http.StatusOK, res.StatusCode)
})
}
}
================================================
FILE: api/v1/group_test.go
================================================
package v1
import (
"testing"
"github.com/stretchr/testify/assert"
"go.k6.io/k6/lib"
)
func TestNewCheck(t *testing.T) {
t.Parallel()
og, err := lib.NewGroup("", nil)
assert.NoError(t, err)
oc, err := lib.NewCheck("my check", og)
assert.NoError(t, err)
oc.Passes = 1234
oc.Fails = 5678
c := NewCheck(oc)
assert.Equal(t, oc.ID, c.ID)
assert.Equal(t, "my check", c.Name)
assert.Equal(t, int64(1234), c.Passes)
assert.Equal(t, int64(5678), c.Fails)
}
func TestNewGroup(t *testing.T) {
t.Parallel()
t.Run("simple", func(t *testing.T) {
t.Parallel()
og, err := lib.NewGroup("My Group", nil)
assert.NoError(t, err)
g := NewGroup(og, nil)
assert.Equal(t, og.ID, g.ID)
assert.Equal(t, og.Name, g.Name)
assert.Nil(t, g.Parent)
assert.Empty(t, g.Groups)
})
t.Run("groups", func(t *testing.T) {
t.Parallel()
root, _ := lib.NewGroup("My Group", nil)
child, _ := root.Group("Child")
inner, _ := child.Group("Inner")
g := NewGroup(root, nil)
assert.Equal(t, root.ID, g.ID)
assert.Equal(t, "My Group", g.Name)
assert.Nil(t, g.Parent)
assert.Len(t, g.Groups, 1)
assert.Len(t, g.Checks, 0)
assert.Equal(t, "Child", g.Groups[0].Name)
assert.Equal(t, child.ID, g.Groups[0].ID)
assert.Equal(t, "My Group", g.Groups[0].Parent.Name)
assert.Equal(t, root.ID, g.Groups[0].Parent.ID)
assert.Equal(t, "Inner", g.Groups[0].Groups[0].Name)
assert.Equal(t, inner.ID, g.Groups[0].Groups[0].ID)
assert.Equal(t, "Child", g.Groups[0].Groups[0].Parent.Name)
assert.Equal(t, child.ID, g.Groups[0].Groups[0].Parent.ID)
assert.Equal(t, "My Group", g.Groups[0].Groups[0].Parent.Parent.Name)
assert.Equal(t, root.ID, g.Groups[0].Groups[0].Parent.Parent.ID)
})
t.Run("checks", func(t *testing.T) {
t.Parallel()
og, _ := lib.NewGroup("My Group", nil)
check, _ := og.Check("my check")
g := NewGroup(og, nil)
assert.Equal(t, og.ID, g.ID)
assert.Equal(t, "My Group", g.Name)
assert.Nil(t, g.Parent)
assert.Len(t, g.Groups, 0)
assert.Len(t, g.Checks, 1)
assert.Equal(t, check.ID, g.Checks[0].ID)
assert.Equal(t, "my check", g.Checks[0].Name)
})
}
func TestFlattenGroup(t *testing.T) {
t.Parallel()
t.Run("blank", func(t *testing.T) {
t.Parallel()
g := &Group{}
assert.EqualValues(t, []*Group{g}, FlattenGroup(g))
})
t.Run("one level", func(t *testing.T) {
t.Parallel()
g := &Group{}
g1 := &Group{Parent: g}
g2 := &Group{Parent: g}
g.Groups = []*Group{g1, g2}
assert.EqualValues(t, []*Group{g, g1, g2}, FlattenGroup(g))
})
t.Run("two levels", func(t *testing.T) {
t.Parallel()
g := &Group{}
g1 := &Group{Parent: g}
g1a := &Group{Parent: g1}
g1b := &Group{Parent: g1}
g1.Groups = []*Group{g1a, g1b}
g2 := &Group{Parent: g}
g.Groups = []*Group{g1, g2}
assert.EqualValues(t, []*Group{g, g1, g1a, g1b, g2}, FlattenGroup(g))
})
}
================================================
FILE: api/v1/metric.go
================================================
package v1
import (
"bytes"
"encoding/json"
"time"
"gopkg.in/guregu/null.v3"
"go.k6.io/k6/metrics"
)
// NullMetricType a nullable metric struct
type NullMetricType struct {
Type metrics.MetricType
Valid bool
}
// MarshalJSON implements the json.Marshaler interface.
func (t NullMetricType) MarshalJSON() ([]byte, error) {
if !t.Valid {
return []byte("null"), nil
}
return t.Type.MarshalJSON()
}
// UnmarshalJSON implements the json.Unmarshaler interface.
func (t *NullMetricType) UnmarshalJSON(data []byte) error {
if bytes.Equal(data, []byte("null")) {
t.Valid = false
return nil
}
t.Valid = true
return json.Unmarshal(data, &t.Type)
}
// NullValueType a nullable metric value struct
type NullValueType struct {
Type metrics.ValueType
Valid bool
}
// MarshalJSON implements the json.Marshaler interface.
func (t NullValueType) MarshalJSON() ([]byte, error) {
if !t.Valid {
return []byte("null"), nil
}
return t.Type.MarshalJSON()
}
// UnmarshalJSON implements the json.Unmarshaler interface.
func (t *NullValueType) UnmarshalJSON(data []byte) error {
if bytes.Equal(data, []byte("null")) {
t.Valid = false
return nil
}
t.Valid = true
return json.Unmarshal(data, &t.Type)
}
// Metric represents a metric that is being collected by k6.
type Metric struct {
Name string `json:"-" yaml:"name"`
Type NullMetricType `json:"type" yaml:"type"`
Contains NullValueType `json:"contains" yaml:"contains"`
Tainted null.Bool `json:"tainted" yaml:"tainted"`
Sample map[string]float64 `json:"sample" yaml:"sample"`
}
// NewMetric constructs a new v1.Metric struct that is used for
// a metric representation in a k6 REST API
func NewMetric(m *metrics.Metric, t time.Duration) Metric {
return Metric{
Name: m.Name,
Type: NullMetricType{m.Type, true},
Contains: NullValueType{m.Contains, true},
Tainted: m.Tainted,
Sample: m.Sink.Format(t),
}
}
================================================
FILE: api/v1/metric_jsonapi.go
================================================
package v1
import (
"time"
"go.k6.io/k6/metrics"
)
// MetricsJSONAPI is JSON API envelop for metrics
type MetricsJSONAPI struct {
Data []metricData `json:"data"`
}
type metricJSONAPI struct {
Data metricData `json:"data"`
}
type metricData struct {
Type string `json:"type"`
ID string `json:"id"`
Attributes Metric `json:"attributes"`
}
func newMetricEnvelope(m *metrics.Metric, t time.Duration) metricJSONAPI {
return metricJSONAPI{
Data: newMetricData(m, t),
}
}
func newMetricsJSONAPI(list map[string]*metrics.Metric, t time.Duration) MetricsJSONAPI {
metrics := make([]metricData, 0, len(list))
for _, m := range list {
metrics = append(metrics, newMetricData(m, t))
}
return MetricsJSONAPI{
Data: metrics,
}
}
func newMetricData(m *metrics.Metric, t time.Duration) metricData {
metric := NewMetric(m, t)
return metricData{
Type: "metrics",
ID: metric.Name,
Attributes: metric,
}
}
// Metrics extract the []v1.Metric from the JSON API envelop
func (m MetricsJSONAPI) Metrics() []Metric {
list := make([]Metric, 0, len(m.Data))
for _, metric := range m.Data {
m := metric.Attributes
m.Name = metric.ID
list = append(list, m)
}
return list
}
================================================
FILE: api/v1/metric_routes.go
================================================
package v1
import (
"encoding/json"
"net/http"
"time"
)
func handleGetMetrics(cs *ControlSurface, rw http.ResponseWriter, _ *http.Request) {
var t time.Duration
if cs.Scheduler != nil {
t = cs.Scheduler.GetState().GetCurrentTestRunDuration()
}
cs.MetricsEngine.MetricsLock.Lock()
metrics := newMetricsJSONAPI(cs.MetricsEngine.ObservedMetrics, t)
cs.MetricsEngine.MetricsLock.Unlock()
data, err := json.Marshal(metrics)
if err != nil {
apiError(rw, "Encoding error", err.Error(), http.StatusInternalServerError)
return
}
_, _ = rw.Write(data)
}
func handleGetMetric(cs *ControlSurface, rw http.ResponseWriter, _ *http.Request, id string) {
var t time.Duration
if cs.Scheduler != nil {
t = cs.Scheduler.GetState().GetCurrentTestRunDuration()
}
cs.MetricsEngine.MetricsLock.Lock()
metric, ok := cs.MetricsEngine.ObservedMetrics[id]
if !ok {
cs.MetricsEngine.MetricsLock.Unlock()
apiError(rw, "Not Found", "No metric with that ID was found", http.StatusNotFound)
return
}
wrappedMetric := newMetricEnvelope(metric, t)
cs.MetricsEngine.MetricsLock.Unlock()
data, err := json.Marshal(wrappedMetric)
if err != nil {
apiError(rw, "Encoding error", err.Error(), http.StatusInternalServerError)
return
}
_, _ = rw.Write(data)
}
================================================
FILE: api/v1/metric_routes_test.go
================================================
package v1
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/guregu/null.v3"
"go.k6.io/k6/internal/lib/testutils/minirunner"
"go.k6.io/k6/lib"
"go.k6.io/k6/metrics"
)
func TestGetMetrics(t *testing.T) {
t.Parallel()
testState := getTestRunState(t, lib.Options{}, &minirunner.MiniRunner{})
testMetric, err := testState.Registry.NewMetric("my_metric", metrics.Trend, metrics.Time)
require.NoError(t, err)
cs := getControlSurface(t, testState)
cs.MetricsEngine.ObservedMetrics = map[string]*metrics.Metric{
"my_metric": testMetric,
}
cs.MetricsEngine.ObservedMetrics["my_metric"].Tainted = null.BoolFrom(true)
rw := httptest.NewRecorder()
NewHandler(cs).ServeHTTP(rw, httptest.NewRequest(http.MethodGet, "/v1/metrics", nil))
res := rw.Result()
t.Cleanup(func() {
assert.NoError(t, res.Body.Close())
})
assert.Equal(t, http.StatusOK, res.StatusCode)
t.Run("document", func(t *testing.T) {
t.Parallel()
var doc MetricsJSONAPI
assert.NoError(t, json.Unmarshal(rw.Body.Bytes(), &doc))
if !assert.NotNil(t, doc.Data) {
return
}
assert.Equal(t, "metrics", doc.Data[0].Type)
})
t.Run("metrics", func(t *testing.T) {
t.Parallel()
var envelop MetricsJSONAPI
assert.NoError(t, json.Unmarshal(rw.Body.Bytes(), &envelop))
metricsData := envelop.Data
if !assert.Len(t, metricsData, 1) {
return
}
metric := metricsData[0].Attributes
assert.Equal(t, "my_metric", metricsData[0].ID)
assert.True(t, metric.Type.Valid)
assert.Equal(t, metrics.Trend, metric.Type.Type)
assert.True(t, metric.Contains.Valid)
assert.Equal(t, metrics.Time, metric.Contains.Type)
assert.True(t, metric.Tainted.Valid)
assert.True(t, metric.Tainted.Bool)
resMetrics := envelop.Metrics()
assert.Len(t, resMetrics, 1)
assert.Equal(t, "my_metric", resMetrics[0].Name)
})
}
func TestGetMetric(t *testing.T) {
t.Parallel()
testState := getTestRunState(t, lib.Options{}, &minirunner.MiniRunner{})
testMetric, err := testState.Registry.NewMetric("my_metric", metrics.Trend, metrics.Time)
require.NoError(t, err)
cs := getControlSurface(t, testState)
cs.MetricsEngine.ObservedMetrics = map[string]*metrics.Metric{
"my_metric": testMetric,
}
cs.MetricsEngine.ObservedMetrics["my_metric"].Tainted = null.BoolFrom(true)
t.Run("nonexistent", func(t *testing.T) {
t.Parallel()
rw := httptest.NewRecorder()
NewHandler(cs).ServeHTTP(rw, httptest.NewRequest(http.MethodGet, "/v1/metrics/notreal", nil))
res := rw.Result()
t.Cleanup(func() {
assert.NoError(t, res.Body.Close())
})
assert.Equal(t, http.StatusNotFound, r
gitextract_i428iejx/
├── .codecov.yaml
├── .dockerignore
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yaml
│ │ ├── config.yml
│ │ ├── feat_req.yaml
│ │ └── release.md
│ ├── actions/
│ │ ├── lint/
│ │ │ └── action.yml
│ │ ├── test/
│ │ │ └── action.yml
│ │ ├── test-browser/
│ │ │ └── action.yml
│ │ └── test-common/
│ │ └── action.yml
│ ├── pull_request_template.md
│ ├── workflows/
│ │ ├── browser_e2e.yml
│ │ ├── build.yml
│ │ ├── codeql-analysis.yml
│ │ ├── issue-auto-assign.yml
│ │ ├── lint.yml
│ │ ├── packager.yml
│ │ ├── publish-techdocs.yaml
│ │ ├── stale.yml
│ │ ├── summary-code-generation.yml
│ │ ├── tc39.yml
│ │ ├── test-browser.yml
│ │ ├── test.yml
│ │ ├── wpt.yml
│ │ ├── xk6-tests/
│ │ │ ├── xk6-js-test/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── jstest.go
│ │ │ ├── xk6-output-test/
│ │ │ │ ├── go.mod
│ │ │ │ ├── go.sum
│ │ │ │ └── outputtest.go
│ │ │ └── xk6-test.js
│ │ └── xk6.yml
│ └── zizmor.yml
├── .gitignore
├── .golangci.yml
├── AGENTS.md
├── CLAUDE.md
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dependencies.md
├── Dockerfile
├── LICENSE.md
├── Makefile
├── README.md
├── SUPPORT.md
├── api/
│ └── v1/
│ ├── client/
│ │ ├── client.go
│ │ ├── metrics.go
│ │ └── status.go
│ ├── control_surface.go
│ ├── errors.go
│ ├── group.go
│ ├── group_jsonapi.go
│ ├── group_routes.go
│ ├── group_routes_test.go
│ ├── group_test.go
│ ├── metric.go
│ ├── metric_jsonapi.go
│ ├── metric_routes.go
│ ├── metric_routes_test.go
│ ├── metric_test.go
│ ├── routes.go
│ ├── setup_jsonapi.go
│ ├── setup_teardown_routes.go
│ ├── setup_teardown_routes_test.go
│ ├── status.go
│ ├── status_jsonapi.go
│ ├── status_routes.go
│ └── status_routes_test.go
├── build-release.sh
├── catalog-info.yaml
├── cloudapi/
│ ├── api.go
│ ├── api_test.go
│ ├── client.go
│ ├── cloudapi_easyjson.go
│ ├── config.go
│ ├── config_test.go
│ ├── doc.go
│ ├── errors.go
│ ├── errors_test.go
│ ├── logs.go
│ ├── logs_test.go
│ ├── run_status.go
│ ├── util.go
│ └── util_test.go
├── cmd/
│ ├── execute.go
│ ├── state/
│ │ ├── doc.go
│ │ ├── env.go
│ │ └── state.go
│ └── tests/
│ └── global_state.go
├── docs/
│ ├── design/
│ │ ├── 018-new-http-api.md
│ │ ├── 019-file-api.md
│ │ └── 020-distributed-execution-and-test-suites.md
│ └── mkdocs.yml
├── errext/
│ ├── abort_reason.go
│ ├── errext_test.go
│ ├── exception.go
│ ├── exit_code.go
│ ├── exitcodes/
│ │ └── codes.go
│ ├── format.go
│ ├── format_test.go
│ ├── hint.go
│ └── interrupt_error.go
├── examples/
│ ├── base64.js
│ ├── browser/
│ │ ├── colorscheme.js
│ │ ├── cookies.js
│ │ ├── device_emulation.js
│ │ ├── dispatch.js
│ │ ├── elementstate.js
│ │ ├── evaluate.js
│ │ ├── fillform.js
│ │ ├── framelocator.js
│ │ ├── getattribute.js
│ │ ├── grant_permission.js
│ │ ├── hosts.js
│ │ ├── keyboard.js
│ │ ├── locator.js
│ │ ├── locator_filter.js
│ │ ├── locator_pom.js
│ │ ├── mouse.js
│ │ ├── multiple-scenario.js
│ │ ├── page_waitForEvent.js
│ │ ├── pageon-metric.js
│ │ ├── pageon-request.js
│ │ ├── pageon-requestfailed.js
│ │ ├── pageon-requestfinished.js
│ │ ├── pageon.js
│ │ ├── querying.js
│ │ ├── route.js
│ │ ├── route_continue.js
│ │ ├── screenshot.js
│ │ ├── shadowdom.js
│ │ ├── throttle.js
│ │ ├── touchscreen.js
│ │ ├── useragent.js
│ │ ├── waitForEvent.js
│ │ └── waitforfunction.js
│ ├── config.json
│ ├── cookies.js
│ ├── crypto.js
│ ├── custom_metrics.js
│ ├── docker-compose/
│ │ ├── influxdb-v1/
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── grafana/
│ │ │ │ ├── dashboards/
│ │ │ │ │ ├── dashboard.yml
│ │ │ │ │ └── performance-test-dasboard.json
│ │ │ │ └── datasources/
│ │ │ │ └── datasource.yml
│ │ │ └── script.js
│ │ └── opentelemetry/
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── grafana/
│ │ │ ├── alloy/
│ │ │ │ └── config.alloy
│ │ │ ├── dashboards/
│ │ │ │ ├── dashboards.yaml
│ │ │ │ └── k6-prometheus.json
│ │ │ └── datasources/
│ │ │ └── datasource.yaml
│ │ └── script.js
│ ├── enhanced/
│ │ ├── abort.ts
│ │ ├── script.ts
│ │ └── user.ts
│ ├── es6sample.js
│ ├── experimental/
│ │ ├── csv-parse.js
│ │ ├── csv-parser.js
│ │ ├── data.csv
│ │ ├── docker-compose.yml
│ │ ├── fs/
│ │ │ ├── bonjour.txt
│ │ │ └── fs.js
│ │ ├── redis.js
│ │ └── streams.js
│ ├── grafana_dashboard_influxdb.json
│ ├── graphql.js
│ ├── grpc_client_streaming.js
│ ├── grpc_healthcheck.js
│ ├── grpc_invoke.js
│ ├── grpc_reflection.js
│ ├── grpc_server/
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── main.go
│ ├── grpc_server_streaming.js
│ ├── html_form_post.js
│ ├── http_2.js
│ ├── http_basic_auth.js
│ ├── http_batch.js
│ ├── http_digest_auth.js
│ ├── http_get.js
│ ├── http_verbs.js
│ ├── json.js
│ ├── jwt.js
│ ├── localhost.js
│ ├── logging.js
│ ├── malicious.js
│ ├── ocsp.js
│ ├── pantheon.js
│ ├── pantheontest.js
│ ├── redirects.js
│ ├── secrets/
│ │ ├── file.secret
│ │ ├── mock_server.go
│ │ ├── multi-source.test.js
│ │ ├── secrets.test.js
│ │ ├── totp.test.js
│ │ ├── url-config.json
│ │ └── url-source.test.js
│ ├── source_map/
│ │ ├── issue_1804/
│ │ │ ├── imported.js
│ │ │ └── main.js
│ │ └── typescript_template/
│ │ ├── test1.js
│ │ └── test1.ts
│ ├── stages.js
│ ├── tagging.js
│ ├── thresholds.js
│ ├── thresholds_readme_example.js
│ ├── timers.js
│ ├── tls_skip_cert_verification.js
│ ├── tlsconfig.js
│ ├── webcrypto/
│ │ ├── README.md
│ │ ├── derive_bits/
│ │ │ ├── derive-bits-ecdh.js
│ │ │ └── derive-bits-pbkdf2.js
│ │ ├── derive_key/
│ │ │ └── derive-key-pbkdf2.js
│ │ ├── digest.js
│ │ ├── encrypt_decrypt/
│ │ │ ├── encrypt-decrypt-aes-cbc.js
│ │ │ ├── encrypt-decrypt-aes-ctr.js
│ │ │ ├── encrypt-decrypt-aes-gcm.js
│ │ │ └── encrypt-decrypt-rsa.js
│ │ ├── generateKey/
│ │ │ ├── generateKey-RSA-PSS.js
│ │ │ ├── generateKey-RSASSA-PKCS1-v1_5.js
│ │ │ ├── generateKey-aes.js
│ │ │ ├── generateKey-ecdh.js
│ │ │ ├── generateKey-ecdsa.js
│ │ │ └── generateKey-hmac.js
│ │ ├── getRandomValues.js
│ │ ├── import_export/
│ │ │ ├── export-ecdh-keys.js
│ │ │ ├── export-ecdsa-keys.js
│ │ │ ├── export-rsa-spki.js
│ │ │ ├── import-ecdh-key.js
│ │ │ ├── import-ecdsa-keys.js
│ │ │ ├── import-export-aes-key.js
│ │ │ ├── import-export-hmac-key.js
│ │ │ ├── import-export-jwk-aes-key.js
│ │ │ ├── import-export-jwk-aes-static-key.js
│ │ │ ├── import-export-jwk-ecdsa.js
│ │ │ ├── import-export-jwk-hmac-key.js
│ │ │ ├── import-export-jwk-hmac-static-key.js
│ │ │ ├── import-jwk-base64-decrypt.js
│ │ │ └── import-raw-base64-decrypt.js
│ │ ├── randomUUID.js
│ │ └── sign_verify/
│ │ ├── sign-verify-ecdsa.js
│ │ ├── sign-verify-hmac.js
│ │ ├── verify-spki-ecdsa-invalid.js
│ │ ├── verify-spki-ecdsa-valid.js
│ │ └── verify-spki-rsa-valid.js
│ ├── websocket.js
│ └── websockets/
│ ├── test-echo.js
│ └── ws.js
├── ext/
│ ├── doc.go
│ └── ext.go
├── go.mod
├── go.sum
├── internal/
│ ├── api/
│ │ ├── server.go
│ │ └── server_test.go
│ ├── build/
│ │ └── version.go
│ ├── cloudapi/
│ │ ├── insights/
│ │ │ ├── client.go
│ │ │ ├── client_test.go
│ │ │ ├── doc.go
│ │ │ ├── domain.go
│ │ │ ├── mappers.go
│ │ │ ├── mappers_test.go
│ │ │ └── proto/
│ │ │ ├── gen.go
│ │ │ └── v1/
│ │ │ ├── common/
│ │ │ │ ├── common.pb.go
│ │ │ │ └── common.proto
│ │ │ ├── ingester/
│ │ │ │ ├── ingester.pb.go
│ │ │ │ ├── ingester.proto
│ │ │ │ └── ingester_grpc.pb.go
│ │ │ ├── k6/
│ │ │ │ ├── labels.pb.go
│ │ │ │ ├── labels.proto
│ │ │ │ ├── request_metadata.pb.go
│ │ │ │ └── request_metadata.proto
│ │ │ └── trace/
│ │ │ ├── labels.pb.go
│ │ │ ├── labels.proto
│ │ │ ├── span.pb.go
│ │ │ └── span.proto
│ │ └── v6/
│ │ ├── api.go
│ │ ├── api_test.go
│ │ ├── client.go
│ │ ├── client_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ └── errors_test.go
│ ├── cmd/
│ │ ├── archive.go
│ │ ├── archive_test.go
│ │ ├── builtin_output_gen.go
│ │ ├── cloud.go
│ │ ├── cloud_login.go
│ │ ├── cloud_run.go
│ │ ├── cloud_test.go
│ │ ├── cloud_upload.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── config_consolidation_test.go
│ │ ├── config_test.go
│ │ ├── deps.go
│ │ ├── deps_test.go
│ │ ├── doc.go
│ │ ├── inspect.go
│ │ ├── launcher.go
│ │ ├── launcher_test.go
│ │ ├── login.go
│ │ ├── login_cloud.go
│ │ ├── login_influxdb.go
│ │ ├── new.go
│ │ ├── new_test.go
│ │ ├── options.go
│ │ ├── options_test.go
│ │ ├── outputs.go
│ │ ├── outputs_cloud.go
│ │ ├── outputs_test.go
│ │ ├── pause.go
│ │ ├── report.go
│ │ ├── report_test.go
│ │ ├── resume.go
│ │ ├── root.go
│ │ ├── root_test.go
│ │ ├── run.go
│ │ ├── run_test.go
│ │ ├── runtime_options.go
│ │ ├── runtime_options_test.go
│ │ ├── scale.go
│ │ ├── stats.go
│ │ ├── status.go
│ │ ├── stdlog_integration_test.go
│ │ ├── subcommand.go
│ │ ├── subcommand_test.go
│ │ ├── templates/
│ │ │ ├── browser.js
│ │ │ ├── minimal.js
│ │ │ ├── protocol.js
│ │ │ └── templates.go
│ │ ├── test_load.go
│ │ ├── test_load_test.go
│ │ ├── testdata/
│ │ │ ├── abort.js
│ │ │ ├── abort_initerr.js
│ │ │ ├── abort_initvu.js
│ │ │ ├── abort_teardown.js
│ │ │ ├── example.har
│ │ │ ├── example.js
│ │ │ ├── fail.js
│ │ │ ├── initerr.js
│ │ │ ├── invalidconfig/
│ │ │ │ ├── invalid.json
│ │ │ │ ├── invalid_option.js
│ │ │ │ ├── invalid_scenario.js
│ │ │ │ └── option_env.js
│ │ │ ├── summary/
│ │ │ │ ├── api.js
│ │ │ │ ├── browser.js
│ │ │ │ ├── grpc.js
│ │ │ │ ├── main.js
│ │ │ │ └── ws.js
│ │ │ └── thresholds/
│ │ │ ├── empty_sink_no_nan.js
│ │ │ ├── malformed_expression.js
│ │ │ ├── name_contains_tokens.js
│ │ │ ├── non_existing_metric.js
│ │ │ ├── thresholds_on_submetric_without_samples.js
│ │ │ └── unsupported_aggregation_method.js
│ │ ├── tests/
│ │ │ ├── cmd_cloud_login_test.go
│ │ │ ├── cmd_cloud_run_test.go
│ │ │ ├── cmd_cloud_test.go
│ │ │ ├── cmd_cloud_upload_test.go
│ │ │ ├── cmd_run_grpc_test.go
│ │ │ ├── cmd_run_test.go
│ │ │ ├── doc.go
│ │ │ ├── eventloop_test.go
│ │ │ ├── events/
│ │ │ │ └── events.go
│ │ │ ├── grpc.go
│ │ │ ├── test_state.go
│ │ │ ├── tests.go
│ │ │ └── tests_test.go
│ │ ├── ui.go
│ │ ├── ui_test.go
│ │ ├── ui_unix.go
│ │ ├── ui_windows.go
│ │ ├── version.go
│ │ └── version_test.go
│ ├── ds/
│ │ └── histogram/
│ │ ├── doc.go
│ │ ├── hdr.go
│ │ └── hdr_test.go
│ ├── event/
│ │ ├── doc.go
│ │ ├── event.go
│ │ ├── system.go
│ │ ├── system_test.go
│ │ ├── type.go
│ │ └── type_gen.go
│ ├── execution/
│ │ ├── abort.go
│ │ ├── controller.go
│ │ ├── local/
│ │ │ └── controller.go
│ │ ├── pkg.go
│ │ ├── scheduler.go
│ │ ├── scheduler_ext_exec_test.go
│ │ ├── scheduler_ext_test.go
│ │ └── scheduler_int_test.go
│ ├── js/
│ │ ├── bundle.go
│ │ ├── bundle_test.go
│ │ ├── compiler/
│ │ │ ├── compiler.go
│ │ │ ├── compiler_test.go
│ │ │ ├── enhanced.go
│ │ │ └── enhanced_test.go
│ │ ├── console.go
│ │ ├── console_test.go
│ │ ├── doc.go
│ │ ├── empty_iterations_bench_test.go
│ │ ├── esm_vs_commonjs_test.go
│ │ ├── eventloop/
│ │ │ ├── eventloop.go
│ │ │ └── eventloop_test.go
│ │ ├── http_bench_test.go
│ │ ├── init_and_modules_test.go
│ │ ├── initcontext.go
│ │ ├── initcontext_test.go
│ │ ├── jsmodules.go
│ │ ├── module_loading_test.go
│ │ ├── modules/
│ │ │ └── k6/
│ │ │ ├── browser/
│ │ │ │ ├── browser/
│ │ │ │ │ ├── browser_context_mapping.go
│ │ │ │ │ ├── browser_context_options_test.go
│ │ │ │ │ ├── browser_mapping.go
│ │ │ │ │ ├── console_message_mapping.go
│ │ │ │ │ ├── element_handle_mapping.go
│ │ │ │ │ ├── file_persister.go
│ │ │ │ │ ├── file_persister_test.go
│ │ │ │ │ ├── frame_locator_mapping.go
│ │ │ │ │ ├── frame_mapping.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── helpers_test.go
│ │ │ │ │ ├── js_handle_mapping.go
│ │ │ │ │ ├── keyboard_mapping.go
│ │ │ │ │ ├── locator_mapping.go
│ │ │ │ │ ├── mapping.go
│ │ │ │ │ ├── mapping_test.go
│ │ │ │ │ ├── metric_event_mapping.go
│ │ │ │ │ ├── module.go
│ │ │ │ │ ├── module_test.go
│ │ │ │ │ ├── modulevu.go
│ │ │ │ │ ├── mouse_mapping.go
│ │ │ │ │ ├── mouse_mapping_test.go
│ │ │ │ │ ├── page_mapping.go
│ │ │ │ │ ├── page_mapping_test.go
│ │ │ │ │ ├── registry.go
│ │ │ │ │ ├── registry_test.go
│ │ │ │ │ ├── request_mapping.go
│ │ │ │ │ ├── response_mapping.go
│ │ │ │ │ ├── route_mapping.go
│ │ │ │ │ ├── route_options_test.go
│ │ │ │ │ ├── touchscreen_mapping.go
│ │ │ │ │ └── worker_mapping.go
│ │ │ │ ├── chromium/
│ │ │ │ │ ├── browser.go
│ │ │ │ │ ├── browser_type.go
│ │ │ │ │ └── browser_type_test.go
│ │ │ │ ├── common/
│ │ │ │ │ ├── barrier.go
│ │ │ │ │ ├── barrier_test.go
│ │ │ │ │ ├── browser.go
│ │ │ │ │ ├── browser_context.go
│ │ │ │ │ ├── browser_context_options.go
│ │ │ │ │ ├── browser_context_test.go
│ │ │ │ │ ├── browser_options.go
│ │ │ │ │ ├── browser_options_test.go
│ │ │ │ │ ├── browser_process.go
│ │ │ │ │ ├── browser_process_meta.go
│ │ │ │ │ ├── browser_process_test.go
│ │ │ │ │ ├── browser_test.go
│ │ │ │ │ ├── connection.go
│ │ │ │ │ ├── connection_test.go
│ │ │ │ │ ├── consts.go
│ │ │ │ │ ├── context.go
│ │ │ │ │ ├── context_test.go
│ │ │ │ │ ├── device.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── element_handle.go
│ │ │ │ │ ├── element_handle_options.go
│ │ │ │ │ ├── element_handle_test.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── event_emitter.go
│ │ │ │ │ ├── event_emitter_test.go
│ │ │ │ │ ├── execution_context.go
│ │ │ │ │ ├── frame.go
│ │ │ │ │ ├── frame_manager.go
│ │ │ │ │ ├── frame_options.go
│ │ │ │ │ ├── frame_options_test.go
│ │ │ │ │ ├── frame_session.go
│ │ │ │ │ ├── frame_test.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── helpers_test.go
│ │ │ │ │ ├── hooks.go
│ │ │ │ │ ├── http.go
│ │ │ │ │ ├── http_test.go
│ │ │ │ │ ├── js/
│ │ │ │ │ │ ├── actions.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── embedded_scripts.go
│ │ │ │ │ │ ├── injected_script.js
│ │ │ │ │ │ ├── query_all.js
│ │ │ │ │ │ ├── scroll_into_view.js
│ │ │ │ │ │ ├── selectors.go
│ │ │ │ │ │ ├── web_vital_iife.js
│ │ │ │ │ │ └── web_vital_init.js
│ │ │ │ │ ├── js_handle.go
│ │ │ │ │ ├── keyboard.go
│ │ │ │ │ ├── keyboard_test.go
│ │ │ │ │ ├── kill_linux.go
│ │ │ │ │ ├── kill_other.go
│ │ │ │ │ ├── layout.go
│ │ │ │ │ ├── layout_test.go
│ │ │ │ │ ├── lifecycle.go
│ │ │ │ │ ├── lifecycle_test.go
│ │ │ │ │ ├── locator.go
│ │ │ │ │ ├── locator_options.go
│ │ │ │ │ ├── mouse.go
│ │ │ │ │ ├── mouse_options.go
│ │ │ │ │ ├── network_manager.go
│ │ │ │ │ ├── network_manager_test.go
│ │ │ │ │ ├── network_profile.go
│ │ │ │ │ ├── page.go
│ │ │ │ │ ├── page_options.go
│ │ │ │ │ ├── page_test.go
│ │ │ │ │ ├── remote_object.go
│ │ │ │ │ ├── remote_object_test.go
│ │ │ │ │ ├── screenshotter.go
│ │ │ │ │ ├── selectors.go
│ │ │ │ │ ├── selectors_test.go
│ │ │ │ │ ├── session.go
│ │ │ │ │ ├── session_test.go
│ │ │ │ │ ├── timeout.go
│ │ │ │ │ ├── timeout_test.go
│ │ │ │ │ ├── touchscreen.go
│ │ │ │ │ ├── trace.go
│ │ │ │ │ └── worker.go
│ │ │ │ ├── env/
│ │ │ │ │ └── env.go
│ │ │ │ ├── k6error/
│ │ │ │ │ └── internal.go
│ │ │ │ ├── k6ext/
│ │ │ │ │ ├── context.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── k6test/
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── executor.go
│ │ │ │ │ │ └── vu.go
│ │ │ │ │ ├── metrics.go
│ │ │ │ │ └── panic.go
│ │ │ │ ├── keyboardlayout/
│ │ │ │ │ ├── layout.go
│ │ │ │ │ └── us.go
│ │ │ │ ├── log/
│ │ │ │ │ └── logger.go
│ │ │ │ ├── storage/
│ │ │ │ │ ├── file_persister.go
│ │ │ │ │ ├── file_persister_test.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── storage_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── browser_context_options_test.go
│ │ │ │ │ ├── browser_context_test.go
│ │ │ │ │ ├── browser_test.go
│ │ │ │ │ ├── browser_type_test.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── element_handle_test.go
│ │ │ │ │ ├── frame_manager_test.go
│ │ │ │ │ ├── frame_test.go
│ │ │ │ │ ├── get_by_test.go
│ │ │ │ │ ├── goroutine_leak_test.go
│ │ │ │ │ ├── js_handle_get_properties_test.go
│ │ │ │ │ ├── js_handle_test.go
│ │ │ │ │ ├── keyboard_test.go
│ │ │ │ │ ├── launch_options_slowmo_test.go
│ │ │ │ │ ├── lifecycle_wait_test.go
│ │ │ │ │ ├── locator_test.go
│ │ │ │ │ ├── logrus_hook.go
│ │ │ │ │ ├── mouse_test.go
│ │ │ │ │ ├── network_manager_test.go
│ │ │ │ │ ├── page_test.go
│ │ │ │ │ ├── remote_obj_test.go
│ │ │ │ │ ├── setinputfiles_test.go
│ │ │ │ │ ├── static/
│ │ │ │ │ │ ├── concealed_link.html
│ │ │ │ │ │ ├── dialog.html
│ │ │ │ │ │ ├── embedded_iframe.html
│ │ │ │ │ │ ├── get_by_alt_text.html
│ │ │ │ │ │ ├── get_by_label.html
│ │ │ │ │ │ ├── get_by_placeholder.html
│ │ │ │ │ │ ├── get_by_role_edge_cases.html
│ │ │ │ │ │ ├── get_by_role_explicit.html
│ │ │ │ │ │ ├── get_by_role_implicit.html
│ │ │ │ │ │ ├── get_by_testid.html
│ │ │ │ │ │ ├── get_by_text.html
│ │ │ │ │ │ ├── get_by_title.html
│ │ │ │ │ │ ├── hide_unhide.html
│ │ │ │ │ │ ├── iframe_home.html
│ │ │ │ │ │ ├── iframe_signin.html
│ │ │ │ │ │ ├── iframe_test_main.html
│ │ │ │ │ │ ├── iframe_test_nested1.html
│ │ │ │ │ │ ├── iframe_test_nested2.html
│ │ │ │ │ │ ├── lifecycle.html
│ │ │ │ │ │ ├── lifecycle_main_frame.html
│ │ │ │ │ │ ├── lifecycle_no_ping_js.html
│ │ │ │ │ │ ├── locator_nesting.html
│ │ │ │ │ │ ├── locators.html
│ │ │ │ │ │ ├── mouse_helper.js
│ │ │ │ │ │ ├── nav_in_doc.html
│ │ │ │ │ │ ├── non_clickable.html
│ │ │ │ │ │ ├── page1.html
│ │ │ │ │ │ ├── page2.html
│ │ │ │ │ │ ├── page_with_iframe.html
│ │ │ │ │ │ ├── ping.html
│ │ │ │ │ │ ├── react-dom.development.js
│ │ │ │ │ │ ├── react.development.js
│ │ │ │ │ │ ├── react_input.html
│ │ │ │ │ │ ├── select_options.html
│ │ │ │ │ │ ├── shadow_and_doc_frag.html
│ │ │ │ │ │ ├── shadow_dom_link.html
│ │ │ │ │ │ ├── usual.html
│ │ │ │ │ │ ├── visible.html
│ │ │ │ │ │ ├── wait_for.html
│ │ │ │ │ │ ├── wait_until.html
│ │ │ │ │ │ ├── waitfornavigation_test.html
│ │ │ │ │ │ └── web_vitals.html
│ │ │ │ │ ├── test_browser.go
│ │ │ │ │ ├── test_browser_proxy.go
│ │ │ │ │ ├── test_browser_test.go
│ │ │ │ │ ├── tracing_test.go
│ │ │ │ │ ├── webvital_test.go
│ │ │ │ │ └── ws/
│ │ │ │ │ └── server.go
│ │ │ │ └── trace/
│ │ │ │ └── trace.go
│ │ │ ├── crypto/
│ │ │ │ ├── crypto.go
│ │ │ │ ├── crypto_test.go
│ │ │ │ └── x509/
│ │ │ │ ├── x509.go
│ │ │ │ └── x509_test.go
│ │ │ ├── data/
│ │ │ │ ├── data.go
│ │ │ │ ├── data_test.go
│ │ │ │ ├── share.go
│ │ │ │ └── share_test.go
│ │ │ ├── encoding/
│ │ │ │ ├── encoding.go
│ │ │ │ └── encoding_test.go
│ │ │ ├── execution/
│ │ │ │ ├── execution.go
│ │ │ │ └── execution_test.go
│ │ │ ├── experimental/
│ │ │ │ ├── README.md
│ │ │ │ ├── csv/
│ │ │ │ │ ├── module.go
│ │ │ │ │ ├── module_test.go
│ │ │ │ │ ├── reader.go
│ │ │ │ │ └── reader_test.go
│ │ │ │ ├── experimental.go
│ │ │ │ ├── fs/
│ │ │ │ │ ├── cache.go
│ │ │ │ │ ├── cache_test.go
│ │ │ │ │ ├── errors.go
│ │ │ │ │ ├── errors_gen.go
│ │ │ │ │ ├── file.go
│ │ │ │ │ ├── file_test.go
│ │ │ │ │ ├── module.go
│ │ │ │ │ └── module_test.go
│ │ │ │ └── streams/
│ │ │ │ ├── errors.go
│ │ │ │ ├── errors_gen.go
│ │ │ │ ├── goja.go
│ │ │ │ ├── module.go
│ │ │ │ ├── module_test.go
│ │ │ │ ├── queue.go
│ │ │ │ ├── readable_stream_controller.go
│ │ │ │ ├── readable_stream_default_controller.go
│ │ │ │ ├── readable_stream_default_reader.go
│ │ │ │ ├── readable_stream_reader.go
│ │ │ │ ├── readable_streams.go
│ │ │ │ ├── readable_streams_test.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── checkout.sh
│ │ │ │ │ ├── reentrant-strategies.any.js.patch
│ │ │ │ │ ├── rs-test-templates.js.patch
│ │ │ │ │ └── testharness.js.patch
│ │ │ │ └── underlying_source.go
│ │ │ ├── grpc/
│ │ │ │ ├── client.go
│ │ │ │ ├── client_test.go
│ │ │ │ ├── client_types_test.go
│ │ │ │ ├── grpc.go
│ │ │ │ ├── helpers_test.go
│ │ │ │ ├── listeners.go
│ │ │ │ ├── metrics.go
│ │ │ │ ├── params.go
│ │ │ │ ├── params_test.go
│ │ │ │ ├── stream.go
│ │ │ │ ├── stream_test.go
│ │ │ │ └── teststate_test.go
│ │ │ ├── k6.go
│ │ │ ├── k6_test.go
│ │ │ ├── marshalling_test.go
│ │ │ ├── metrics/
│ │ │ │ ├── metrics.go
│ │ │ │ └── metrics_test.go
│ │ │ ├── secrets/
│ │ │ │ ├── secrets.go
│ │ │ │ └── secrets_test.go
│ │ │ ├── timers/
│ │ │ │ └── timers.go
│ │ │ ├── webcrypto/
│ │ │ │ ├── aes.go
│ │ │ │ ├── algorithm.go
│ │ │ │ ├── base64.go
│ │ │ │ ├── bits.go
│ │ │ │ ├── cmd_run_test.go
│ │ │ │ ├── crypto.go
│ │ │ │ ├── elliptic_curve.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── errors.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── hmac.go
│ │ │ │ ├── jwk.go
│ │ │ │ ├── key.go
│ │ │ │ ├── module.go
│ │ │ │ ├── params.go
│ │ │ │ ├── pbkdf2.go
│ │ │ │ ├── rsa.go
│ │ │ │ ├── signer.go
│ │ │ │ ├── sobek.go
│ │ │ │ ├── sobek_test.go
│ │ │ │ ├── subtle_crypto.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── checkout.sh
│ │ │ │ │ ├── generate-patches.sh
│ │ │ │ │ ├── subtle_crypto_test.go
│ │ │ │ │ ├── test_setup_test.go
│ │ │ │ │ ├── util/
│ │ │ │ │ │ └── helpers.js
│ │ │ │ │ └── wpt-patches/
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__ecdh_bits.js.patch
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__pbkdf2.js.patch
│ │ │ │ │ ├── WebCryptoAPI__derive_bits_keys__pbkdf2_vectors.js.patch
│ │ │ │ │ ├── WebCryptoAPI__encrypt_decrypt__aes_gcm_vectors.js.patch
│ │ │ │ │ ├── WebCryptoAPI__generateKey__failures.js.patch
│ │ │ │ │ ├── WebCryptoAPI__generateKey__successes.js.patch
│ │ │ │ │ ├── WebCryptoAPI__getRandomValues.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__ec_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__rsa_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__import_export__symmetric_importKey.https.any.js.patch
│ │ │ │ │ ├── WebCryptoAPI__sign_verify__ecdsa_vectors.js.patch
│ │ │ │ │ └── WebCryptoAPI__sign_verify__rsa_pss_vectors.js.patch
│ │ │ │ └── types.go
│ │ │ ├── websockets/
│ │ │ │ ├── autobahn_tests/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── fuzzingserver.json
│ │ │ │ │ ├── reports/
│ │ │ │ │ │ └── .gitkeep
│ │ │ │ │ └── script.js
│ │ │ │ ├── blob.go
│ │ │ │ ├── blob_test.go
│ │ │ │ ├── events/
│ │ │ │ │ └── events.go
│ │ │ │ ├── helpers.go
│ │ │ │ ├── listeners.go
│ │ │ │ ├── main_test.go
│ │ │ │ ├── params.go
│ │ │ │ ├── websockets.go
│ │ │ │ └── websockets_test.go
│ │ │ └── ws/
│ │ │ ├── ws.go
│ │ │ └── ws_test.go
│ │ ├── modules_vu.go
│ │ ├── path_resolution_test.go
│ │ ├── runner.go
│ │ ├── runner_test.go
│ │ ├── share_test.go
│ │ ├── summary-legacy.js
│ │ ├── summary-wrapper.js
│ │ ├── summary.go
│ │ ├── summary.js
│ │ ├── summary_test.go
│ │ ├── tc39/
│ │ │ ├── README.md
│ │ │ ├── breaking_test_errors-stripTypes=false.json
│ │ │ ├── breaking_test_errors-stripTypes=true.json
│ │ │ ├── checkout.sh
│ │ │ ├── tc39_norace_test.go
│ │ │ ├── tc39_race_test.go
│ │ │ └── tc39_test.go
│ │ ├── tc55/
│ │ │ └── timers/
│ │ │ ├── timers.go
│ │ │ └── timers_test.go
│ │ ├── timeout_error.go
│ │ └── timeout_error_test.go
│ ├── lib/
│ │ ├── consts/
│ │ │ └── js.go
│ │ ├── netext/
│ │ │ └── grpcext/
│ │ │ ├── conn.go
│ │ │ ├── conn_test.go
│ │ │ ├── reflect.go
│ │ │ └── stream.go
│ │ ├── strvals/
│ │ │ ├── doc.go
│ │ │ ├── parser.go
│ │ │ └── parser_test.go
│ │ ├── summary/
│ │ │ ├── doc.go
│ │ │ ├── machine_readable.go
│ │ │ ├── machinereadable/
│ │ │ │ ├── checkout.sh
│ │ │ │ ├── clean.sh
│ │ │ │ ├── cog/
│ │ │ │ │ ├── builder.go
│ │ │ │ │ └── errors.go
│ │ │ │ ├── cog-templates/
│ │ │ │ │ └── schema_version_const.go.tmpl
│ │ │ │ ├── cog.yaml
│ │ │ │ ├── countervalues_builder_gen.go
│ │ │ │ ├── gaugevalues_builder_gen.go
│ │ │ │ ├── generate.sh
│ │ │ │ ├── metric_builder_gen.go
│ │ │ │ ├── ratevalues_builder_gen.go
│ │ │ │ ├── schema_version_const.go
│ │ │ │ ├── summary_builder_gen.go
│ │ │ │ ├── summarysummaryconfig_builder_gen.go
│ │ │ │ ├── summarysummarymetadata_builder_gen.go
│ │ │ │ ├── summarysummaryresults_builder_gen.go
│ │ │ │ ├── summarysummaryresultschecks_builder_gen.go
│ │ │ │ ├── summarysummaryresultschecksresults_builder_gen.go
│ │ │ │ ├── trendvalues_builder_gen.go
│ │ │ │ └── types_gen.go
│ │ │ └── summary.go
│ │ ├── testutils/
│ │ │ ├── fs.go
│ │ │ ├── grpcservice/
│ │ │ │ ├── route_guide.pb.go
│ │ │ │ ├── route_guide.proto
│ │ │ │ ├── route_guide_grpc.pb.go
│ │ │ │ └── service.go
│ │ │ ├── httpmultibin/
│ │ │ │ ├── grpc_any_testing/
│ │ │ │ │ ├── any_test.pb.go
│ │ │ │ │ └── any_test.proto
│ │ │ │ ├── grpc_protoset_testing/
│ │ │ │ │ ├── test.protoset
│ │ │ │ │ ├── test_message.proto
│ │ │ │ │ └── test_service.proto
│ │ │ │ ├── grpc_testing/
│ │ │ │ │ ├── nested_types.proto
│ │ │ │ │ ├── test.pb.go
│ │ │ │ │ ├── test.proto
│ │ │ │ │ └── test_grpc.pb.go
│ │ │ │ ├── grpc_wrappers_testing/
│ │ │ │ │ ├── service.go
│ │ │ │ │ ├── test.pb.go
│ │ │ │ │ ├── test.proto
│ │ │ │ │ └── test_grpc.pb.go
│ │ │ │ ├── httpmultibin.go
│ │ │ │ └── nested_types/
│ │ │ │ └── nested_types.proto
│ │ │ ├── logrus_hook.go
│ │ │ ├── minirunner/
│ │ │ │ └── minirunner.go
│ │ │ ├── mockoutput/
│ │ │ │ └── mockoutput.go
│ │ │ ├── mockresolver/
│ │ │ │ └── resolver.go
│ │ │ ├── test_output.go
│ │ │ └── untar.go
│ │ └── trace/
│ │ ├── doc.go
│ │ ├── otel.go
│ │ └── otel_test.go
│ ├── loader/
│ │ ├── filesystems.go
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── readsource.go
│ │ └── readsource_test.go
│ ├── log/
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── levels.go
│ │ ├── levels_test.go
│ │ ├── log.go
│ │ ├── loki.go
│ │ └── loki_test.go
│ ├── metrics/
│ │ └── engine/
│ │ ├── engine.go
│ │ ├── engine_test.go
│ │ ├── ingester.go
│ │ └── ingester_test.go
│ ├── output/
│ │ ├── cloud/
│ │ │ ├── expv2/
│ │ │ │ ├── integration/
│ │ │ │ │ ├── integration_test.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── metricset.json
│ │ │ │ └── pbcloud/
│ │ │ │ ├── gen.go
│ │ │ │ ├── metric.pb.go
│ │ │ │ └── metric.proto
│ │ │ ├── insights/
│ │ │ │ ├── collect.go
│ │ │ │ ├── collect_test.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── enable.go
│ │ │ │ ├── flush.go
│ │ │ │ └── flush_test.go
│ │ │ ├── output.go
│ │ │ └── output_test.go
│ │ ├── csv/
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── doc.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ └── time_format_gen.go
│ │ ├── influxdb/
│ │ │ ├── bench_test.go
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ ├── util.go
│ │ │ └── util_test.go
│ │ ├── json/
│ │ │ ├── benchmark_test.go
│ │ │ ├── json.go
│ │ │ ├── json_easyjson.go
│ │ │ ├── json_test.go
│ │ │ └── wrapper.go
│ │ ├── opentelemetry/
│ │ │ ├── attribute.go
│ │ │ ├── config.go
│ │ │ ├── config_test.go
│ │ │ ├── exporter.go
│ │ │ ├── output.go
│ │ │ ├── output_test.go
│ │ │ ├── registry.go
│ │ │ └── tls.go
│ │ ├── prometheusrw/
│ │ │ ├── remote/
│ │ │ │ ├── client.go
│ │ │ │ └── client_test.go
│ │ │ ├── remotewrite/
│ │ │ │ ├── config.go
│ │ │ │ ├── config_test.go
│ │ │ │ ├── prometheus.go
│ │ │ │ ├── prometheus_test.go
│ │ │ │ ├── remotewrite.go
│ │ │ │ ├── remotewrite_test.go
│ │ │ │ ├── trend.go
│ │ │ │ └── trend_test.go
│ │ │ ├── sigv4/
│ │ │ │ ├── const.go
│ │ │ │ ├── sigv4.go
│ │ │ │ ├── sigv4_test.go
│ │ │ │ ├── tripper.go
│ │ │ │ ├── tripper_test.go
│ │ │ │ ├── util_test.go
│ │ │ │ └── utils.go
│ │ │ └── stale/
│ │ │ └── stale.go
│ │ └── summary/
│ │ ├── data.go
│ │ ├── data_test.go
│ │ ├── doc.go
│ │ ├── summary.go
│ │ └── summary_test.go
│ ├── secretsource/
│ │ ├── file/
│ │ │ ├── file.go
│ │ │ └── file_test.go
│ │ ├── init.go
│ │ ├── mock/
│ │ │ └── mock.go
│ │ └── url/
│ │ ├── url.go
│ │ └── url_test.go
│ ├── ui/
│ │ ├── banner.go
│ │ ├── console/
│ │ │ ├── doc.go
│ │ │ └── writer.go
│ │ ├── doc.go
│ │ ├── form.go
│ │ ├── form_fields.go
│ │ ├── form_fields_test.go
│ │ ├── form_test.go
│ │ └── pb/
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── progressbar.go
│ │ └── progressbar_test.go
│ └── usage/
│ ├── usage.go
│ └── usage_test.go
├── js/
│ ├── common/
│ │ ├── bridge.go
│ │ ├── bridge_test.go
│ │ ├── event.go
│ │ ├── frozen_object.go
│ │ ├── frozen_object_test.go
│ │ ├── init_error.go
│ │ ├── initenv.go
│ │ ├── interrupt_error.go
│ │ ├── randsource.go
│ │ ├── tags.go
│ │ ├── util.go
│ │ └── util_test.go
│ ├── modules/
│ │ ├── cjsmodule.go
│ │ ├── gomodule.go
│ │ ├── gomodule_basic.go
│ │ ├── k6/
│ │ │ ├── html/
│ │ │ │ ├── element.go
│ │ │ │ ├── element_test.go
│ │ │ │ ├── elements.go
│ │ │ │ ├── elements_gen.go
│ │ │ │ ├── elements_gen_test.go
│ │ │ │ ├── elements_test.go
│ │ │ │ ├── gen/
│ │ │ │ │ └── gen_elements.go
│ │ │ │ ├── html.go
│ │ │ │ ├── html_test.go
│ │ │ │ ├── serialize.go
│ │ │ │ ├── serialize_test.go
│ │ │ │ └── util.go
│ │ │ └── http/
│ │ │ ├── async_request_test.go
│ │ │ ├── batch_test.go
│ │ │ ├── cookiejar.go
│ │ │ ├── doc.go
│ │ │ ├── file.go
│ │ │ ├── file_test.go
│ │ │ ├── http.go
│ │ │ ├── http_test.go
│ │ │ ├── request.go
│ │ │ ├── request_test.go
│ │ │ ├── response.go
│ │ │ ├── response_callback.go
│ │ │ ├── response_callback_test.go
│ │ │ ├── response_test.go
│ │ │ └── tls_test.go
│ │ ├── modules.go
│ │ ├── require_impl.go
│ │ ├── resolution.go
│ │ └── unknown.go
│ ├── modulestest/
│ │ ├── compile.go
│ │ ├── modulestest.go
│ │ └── runtime.go
│ └── promises/
│ ├── promises.go
│ └── promises_test.go
├── lib/
│ ├── archive.go
│ ├── archive_test.go
│ ├── buffer_pool.go
│ ├── buffer_pool_test.go
│ ├── compatibility_mode_gen.go
│ ├── context.go
│ ├── doc.go
│ ├── execution.go
│ ├── execution_segment.go
│ ├── execution_segment_test.go
│ ├── execution_status_gen.go
│ ├── executor/
│ │ ├── base_config.go
│ │ ├── base_executor.go
│ │ ├── common_test.go
│ │ ├── constant_arrival_rate.go
│ │ ├── constant_arrival_rate_test.go
│ │ ├── constant_vus.go
│ │ ├── constant_vus_test.go
│ │ ├── execution_config_shortcuts.go
│ │ ├── execution_test.go
│ │ ├── executors_test.go
│ │ ├── externally_controlled.go
│ │ ├── externally_controlled_test.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── per_vu_iterations.go
│ │ ├── per_vu_iterations_test.go
│ │ ├── ramping_arrival_rate.go
│ │ ├── ramping_arrival_rate_test.go
│ │ ├── ramping_vus.go
│ │ ├── ramping_vus_test.go
│ │ ├── shared_iterations.go
│ │ ├── shared_iterations_test.go
│ │ ├── vu_handle.go
│ │ └── vu_handle_test.go
│ ├── executors.go
│ ├── fsext/
│ │ ├── afero_links.go
│ │ ├── cacheonread.go
│ │ ├── changepathfs.go
│ │ ├── changepathfs_test.go
│ │ ├── filepath.go
│ │ ├── filepath_unix_test.go
│ │ ├── filepath_windows_test.go
│ │ ├── trimpathseparator_test.go
│ │ └── walk.go
│ ├── helpers.go
│ ├── helpers_test.go
│ ├── limiter.go
│ ├── limiter_test.go
│ ├── models.go
│ ├── models_test.go
│ ├── netext/
│ │ ├── dialer.go
│ │ ├── dialer_test.go
│ │ ├── httpext/
│ │ │ ├── batch.go
│ │ │ ├── compression.go
│ │ │ ├── compression_type_gen.go
│ │ │ ├── digest_transport.go
│ │ │ ├── error_codes.go
│ │ │ ├── error_codes_syscall_posix.go
│ │ │ ├── error_codes_syscall_windows.go
│ │ │ ├── error_codes_test.go
│ │ │ ├── httpdebug_transport.go
│ │ │ ├── request.go
│ │ │ ├── request_test.go
│ │ │ ├── response.go
│ │ │ ├── response_type_gen.go
│ │ │ ├── tracer.go
│ │ │ ├── tracer_test.go
│ │ │ ├── transport.go
│ │ │ ├── transport_test.go
│ │ │ └── url.go
│ │ ├── resolver.go
│ │ ├── resolver_test.go
│ │ └── tls.go
│ ├── old_archive_test.go
│ ├── options.go
│ ├── options_test.go
│ ├── runner.go
│ ├── runtime_options.go
│ ├── state_test.go
│ ├── summary.go
│ ├── test_state.go
│ ├── tlsconfig.go
│ ├── types/
│ │ ├── dns.go
│ │ ├── dns_policy_gen.go
│ │ ├── dns_select_gen.go
│ │ ├── hostnametrie.go
│ │ ├── hostnametrie_test.go
│ │ ├── hosts.go
│ │ ├── hosts_test.go
│ │ ├── ipblock.go
│ │ ├── ipblock_test.go
│ │ ├── net.go
│ │ ├── trie.go
│ │ ├── trie_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── vu_state.go
│ └── vu_state_test.go
├── main.go
├── metrics/
│ ├── builtin.go
│ ├── metric.go
│ ├── metric_test.go
│ ├── metric_type.go
│ ├── package.go
│ ├── registry.go
│ ├── registry_test.go
│ ├── sample.go
│ ├── sample_test.go
│ ├── sink.go
│ ├── sink_test.go
│ ├── system_tag.go
│ ├── system_tag_gen.go
│ ├── system_tag_test.go
│ ├── tags.go
│ ├── tags_test.go
│ ├── thresholds.go
│ ├── thresholds_parser.go
│ ├── thresholds_parser_test.go
│ ├── thresholds_test.go
│ ├── units.go
│ └── value_type.go
├── modtools_frozen.yml
├── output/
│ ├── cloud/
│ │ └── expv2/
│ │ ├── collect.go
│ │ ├── collect_test.go
│ │ ├── flush.go
│ │ ├── flush_test.go
│ │ ├── hdr.go
│ │ ├── hdr_test.go
│ │ ├── mapping.go
│ │ ├── mapping_test.go
│ │ ├── metrics_client.go
│ │ ├── metrics_client_test.go
│ │ ├── output.go
│ │ ├── output_test.go
│ │ ├── sink.go
│ │ └── sink_test.go
│ ├── extensions.go
│ ├── helpers.go
│ ├── helpers_test.go
│ ├── manager.go
│ └── types.go
├── packaging/
│ ├── Dockerfile
│ ├── bin/
│ │ ├── create-deb-repo.sh
│ │ ├── create-msi-repo.sh
│ │ ├── create-rpm-repo.sh
│ │ ├── entrypoint.sh
│ │ └── generate_index.py
│ ├── docker-compose.yml
│ ├── k6-rpm-repo.spec
│ ├── k6-rpm.repo
│ ├── k6.wxs
│ └── nfpm.yaml
├── release notes/
│ ├── template.md
│ ├── v0.19.0.md
│ ├── v0.20.0.md
│ ├── v0.21.0.md
│ ├── v0.21.1.md
│ ├── v0.22.0.md
│ ├── v0.22.1.md
│ ├── v0.23.0.md
│ ├── v0.23.1.md
│ ├── v0.24.0.md
│ ├── v0.25.0.md
│ ├── v0.25.1.md
│ ├── v0.26.0.md
│ ├── v0.26.1.md
│ ├── v0.26.2.md
│ ├── v0.27.0.md
│ ├── v0.27.1.md
│ ├── v0.28.0.md
│ ├── v0.29.0.md
│ ├── v0.30.0.md
│ ├── v0.31.0.md
│ ├── v0.31.1.md
│ ├── v0.32.0.md
│ ├── v0.33.0.md
│ ├── v0.34.0.md
│ ├── v0.34.1.md
│ ├── v0.35.0.md
│ ├── v0.36.0.md
│ ├── v0.37.0.md
│ ├── v0.38.0.md
│ ├── v0.38.1.md
│ ├── v0.38.2.md
│ ├── v0.38.3.md
│ ├── v0.39.0.md
│ ├── v0.40.0.md
│ ├── v0.41.0.md
│ ├── v0.42.0.md
│ ├── v0.43.0.md
│ ├── v0.43.1.md
│ ├── v0.44.0.md
│ ├── v0.44.1.md
│ ├── v0.45.0.md
│ ├── v0.46.0.md
│ ├── v0.47.0.md
│ ├── v0.48.0.md
│ ├── v0.49.0.md
│ ├── v0.50.0.md
│ ├── v0.51.0.md
│ ├── v0.52.0.md
│ ├── v0.53.0.md
│ ├── v0.54.0.md
│ ├── v0.55.0.md
│ ├── v0.55.1.md
│ ├── v0.55.2.md
│ ├── v0.56.0.md
│ ├── v0.57.0.md
│ ├── v0.58.0.md
│ ├── v0.59.0.md
│ ├── v1.0.0-rc1.md
│ ├── v1.0.0-rc2.md
│ ├── v1.0.0.md
│ ├── v1.1.0.md
│ ├── v1.2.0.md
│ ├── v1.2.1.md
│ ├── v1.3.0.md
│ ├── v1.4.0.md
│ ├── v1.5.0.md
│ ├── v1.6.0.md
│ └── v1.6.1.md
├── renovate.json
├── secretsource/
│ ├── doc.go
│ ├── extension.go
│ ├── hook.go
│ ├── hook_test.go
│ └── manager.go
├── subcommand/
│ └── extension.go
└── vendor/
├── buf.build/
│ └── gen/
│ └── go/
│ ├── gogo/
│ │ └── protobuf/
│ │ └── protocolbuffers/
│ │ └── go/
│ │ ├── LICENSE
│ │ └── gogoproto/
│ │ ├── gogo.pb.go
│ │ └── gogo_protoopaque.pb.go
│ └── prometheus/
│ └── prometheus/
│ └── protocolbuffers/
│ └── go/
│ ├── remote.pb.go
│ ├── remote_protoopaque.pb.go
│ ├── types.pb.go
│ └── types_protoopaque.pb.go
├── github.com/
│ ├── Azure/
│ │ └── go-ntlmssp/
│ │ ├── LICENSE
│ │ ├── SECURITY.md
│ │ ├── authenticate_message.go
│ │ ├── authheader.go
│ │ ├── avids.go
│ │ ├── challenge_message.go
│ │ ├── messageheader.go
│ │ ├── negotiate_flags.go
│ │ ├── negotiate_message.go
│ │ ├── negotiator.go
│ │ ├── nlmp.go
│ │ ├── unicode.go
│ │ ├── varfield.go
│ │ └── version.go
│ ├── Masterminds/
│ │ └── semver/
│ │ └── v3/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE.txt
│ │ ├── SECURITY.md
│ │ ├── collection.go
│ │ ├── constraints.go
│ │ ├── doc.go
│ │ └── version.go
│ ├── PuerkitoBio/
│ │ └── goquery/
│ │ ├── .gitattributes
│ │ ├── LICENSE
│ │ ├── array.go
│ │ ├── doc.go
│ │ ├── expand.go
│ │ ├── filter.go
│ │ ├── iteration.go
│ │ ├── manipulation.go
│ │ ├── property.go
│ │ ├── query.go
│ │ ├── traversal.go
│ │ ├── type.go
│ │ └── utilities.go
│ ├── Soontao/
│ │ └── goHttpDigestClient/
│ │ ├── LICENSE
│ │ ├── challenge.go
│ │ ├── client.go
│ │ └── rfc2617.go
│ ├── andybalholm/
│ │ ├── brotli/
│ │ │ ├── LICENSE
│ │ │ ├── backward_references.go
│ │ │ ├── backward_references_hq.go
│ │ │ ├── bit_cost.go
│ │ │ ├── bit_reader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── block_splitter.go
│ │ │ ├── block_splitter_command.go
│ │ │ ├── block_splitter_distance.go
│ │ │ ├── block_splitter_literal.go
│ │ │ ├── brotli_bit_stream.go
│ │ │ ├── cluster.go
│ │ │ ├── cluster_command.go
│ │ │ ├── cluster_distance.go
│ │ │ ├── cluster_literal.go
│ │ │ ├── command.go
│ │ │ ├── compress_fragment.go
│ │ │ ├── compress_fragment_two_pass.go
│ │ │ ├── constants.go
│ │ │ ├── context.go
│ │ │ ├── decode.go
│ │ │ ├── dictionary.go
│ │ │ ├── dictionary_hash.go
│ │ │ ├── encode.go
│ │ │ ├── encoder.go
│ │ │ ├── encoder_dict.go
│ │ │ ├── entropy_encode.go
│ │ │ ├── entropy_encode_static.go
│ │ │ ├── fast_log.go
│ │ │ ├── find_match_length.go
│ │ │ ├── h10.go
│ │ │ ├── h5.go
│ │ │ ├── h6.go
│ │ │ ├── hash.go
│ │ │ ├── hash_composite.go
│ │ │ ├── hash_forgetful_chain.go
│ │ │ ├── hash_longest_match_quickly.go
│ │ │ ├── hash_rolling.go
│ │ │ ├── histogram.go
│ │ │ ├── http.go
│ │ │ ├── huffman.go
│ │ │ ├── literal_cost.go
│ │ │ ├── matchfinder/
│ │ │ │ ├── emitter.go
│ │ │ │ ├── m0.go
│ │ │ │ ├── m4.go
│ │ │ │ ├── matchfinder.go
│ │ │ │ ├── pathfinder.go
│ │ │ │ └── textencoder.go
│ │ │ ├── memory.go
│ │ │ ├── metablock.go
│ │ │ ├── metablock_command.go
│ │ │ ├── metablock_distance.go
│ │ │ ├── metablock_literal.go
│ │ │ ├── params.go
│ │ │ ├── platform.go
│ │ │ ├── prefix.go
│ │ │ ├── prefix_dec.go
│ │ │ ├── quality.go
│ │ │ ├── reader.go
│ │ │ ├── ringbuffer.go
│ │ │ ├── state.go
│ │ │ ├── static_dict.go
│ │ │ ├── static_dict_lut.go
│ │ │ ├── symbol_list.go
│ │ │ ├── transform.go
│ │ │ ├── utf8_util.go
│ │ │ ├── util.go
│ │ │ ├── write_bits.go
│ │ │ └── writer.go
│ │ └── cascadia/
│ │ ├── LICENSE
│ │ ├── parser.go
│ │ ├── pseudo_classes.go
│ │ ├── selector.go
│ │ ├── serialize.go
│ │ └── specificity.go
│ ├── beorn7/
│ │ └── perks/
│ │ ├── LICENSE
│ │ └── quantile/
│ │ └── stream.go
│ ├── bufbuild/
│ │ └── protocompile/
│ │ ├── .protoc_version
│ │ ├── LICENSE
│ │ ├── ast/
│ │ │ ├── doc.go
│ │ │ ├── enum.go
│ │ │ ├── field.go
│ │ │ ├── file.go
│ │ │ ├── file_info.go
│ │ │ ├── identifiers.go
│ │ │ ├── message.go
│ │ │ ├── no_source.go
│ │ │ ├── node.go
│ │ │ ├── options.go
│ │ │ ├── ranges.go
│ │ │ ├── service.go
│ │ │ ├── values.go
│ │ │ └── walk.go
│ │ ├── compiler.go
│ │ ├── doc.go
│ │ ├── go.work
│ │ ├── go.work.sum
│ │ ├── internal/
│ │ │ ├── editions/
│ │ │ │ └── editions.go
│ │ │ ├── featuresext/
│ │ │ │ ├── cpp_features.protoset
│ │ │ │ ├── featuresext.go
│ │ │ │ └── java_features.protoset
│ │ │ ├── message_context.go
│ │ │ ├── messageset/
│ │ │ │ └── messageset.go
│ │ │ ├── norace.go
│ │ │ ├── options.go
│ │ │ ├── race.go
│ │ │ ├── tags.go
│ │ │ ├── types.go
│ │ │ └── util.go
│ │ ├── linker/
│ │ │ ├── descriptors.go
│ │ │ ├── doc.go
│ │ │ ├── files.go
│ │ │ ├── linker.go
│ │ │ ├── pathkey_no_unsafe.go
│ │ │ ├── pathkey_unsafe.go
│ │ │ ├── pool.go
│ │ │ ├── resolve.go
│ │ │ ├── symbols.go
│ │ │ └── validate.go
│ │ ├── options/
│ │ │ ├── options.go
│ │ │ ├── source_retention_options.go
│ │ │ └── target_types.go
│ │ ├── parser/
│ │ │ ├── ast.go
│ │ │ ├── clone.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── lexer.go
│ │ │ ├── parser.go
│ │ │ ├── proto.y
│ │ │ ├── proto.y.go
│ │ │ ├── result.go
│ │ │ └── validate.go
│ │ ├── protoutil/
│ │ │ ├── editions.go
│ │ │ └── protos.go
│ │ ├── reporter/
│ │ │ ├── errors.go
│ │ │ └── reporter.go
│ │ ├── resolver.go
│ │ ├── sourceinfo/
│ │ │ └── source_code_info.go
│ │ ├── std_imports.go
│ │ ├── supported_editions.go
│ │ └── walk/
│ │ └── walk.go
│ ├── cenkalti/
│ │ └── backoff/
│ │ └── v5/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── backoff.go
│ │ ├── error.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── timer.go
│ ├── cespare/
│ │ └── xxhash/
│ │ └── v2/
│ │ ├── LICENSE.txt
│ │ ├── testall.sh
│ │ ├── xxhash.go
│ │ ├── xxhash_amd64.s
│ │ ├── xxhash_arm64.s
│ │ ├── xxhash_asm.go
│ │ ├── xxhash_other.go
│ │ ├── xxhash_safe.go
│ │ └── xxhash_unsafe.go
│ ├── chromedp/
│ │ ├── cdproto/
│ │ │ ├── LICENSE
│ │ │ ├── accessibility/
│ │ │ │ ├── accessibility.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── animation/
│ │ │ │ ├── animation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── audits/
│ │ │ │ ├── audits.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── autofill/
│ │ │ │ ├── autofill.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── backgroundservice/
│ │ │ │ ├── backgroundservice.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── bluetoothemulation/
│ │ │ │ ├── bluetoothemulation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── browser/
│ │ │ │ ├── browser.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── cachestorage/
│ │ │ │ ├── cachestorage.go
│ │ │ │ └── types.go
│ │ │ ├── cast/
│ │ │ │ ├── cast.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── cdp/
│ │ │ │ └── types.go
│ │ │ ├── cdproto.go
│ │ │ ├── css/
│ │ │ │ ├── css.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── debugger/
│ │ │ │ ├── debugger.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── deviceaccess/
│ │ │ │ ├── deviceaccess.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── deviceorientation/
│ │ │ │ └── deviceorientation.go
│ │ │ ├── dom/
│ │ │ │ ├── dom.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── domdebugger/
│ │ │ │ ├── domdebugger.go
│ │ │ │ └── types.go
│ │ │ ├── domsnapshot/
│ │ │ │ ├── domsnapshot.go
│ │ │ │ └── types.go
│ │ │ ├── domstorage/
│ │ │ │ ├── domstorage.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── emulation/
│ │ │ │ ├── emulation.go
│ │ │ │ ├── events.go
│ │ │ │ └── types.go
│ │ │ ├── eventbreakpoints/
│ │ │ │ └── eventbreakpoints.go
│ │ │ ├── extensions/
│ │ │ │ ├── extensions.go
│ │ │ │ └── types.go
│ │ │ ├── fedcm/
│ │ │ │ ├── events.go
│ │ │ │ ├── fedcm.go
│ │ │ │ └── types.go
│ │ │ ├── fetch/
│ │ │ │ ├── events.go
│ │ │ │ ├── fetch.go
│ │ │ │ └── types.go
│ │ │ ├── filesystem/
│ │ │ │ ├── filesystem.go
│ │ │ │ └── types.go
│ │ │ ├── headlessexperimental/
│ │ │ │ ├── headlessexperimental.go
│ │ │ │ └── types.go
│ │ │ ├── heapprofiler/
│ │ │ │ ├── events.go
│ │ │ │ ├── heapprofiler.go
│ │ │ │ └── types.go
│ │ │ ├── indexeddb/
│ │ │ │ ├── indexeddb.go
│ │ │ │ └── types.go
│ │ │ ├── input/
│ │ │ │ ├── events.go
│ │ │ │ ├── input.go
│ │ │ │ └── types.go
│ │ │ ├── inspector/
│ │ │ │ ├── events.go
│ │ │ │ ├── inspector.go
│ │ │ │ └── types.go
│ │ │ ├── io/
│ │ │ │ ├── io.go
│ │ │ │ └── types.go
│ │ │ ├── layertree/
│ │ │ │ ├── events.go
│ │ │ │ ├── layertree.go
│ │ │ │ └── types.go
│ │ │ ├── log/
│ │ │ │ ├── events.go
│ │ │ │ ├── log.go
│ │ │ │ └── types.go
│ │ │ ├── media/
│ │ │ │ ├── events.go
│ │ │ │ ├── media.go
│ │ │ │ └── types.go
│ │ │ ├── memory/
│ │ │ │ ├── memory.go
│ │ │ │ └── types.go
│ │ │ ├── network/
│ │ │ │ ├── events.go
│ │ │ │ ├── network.go
│ │ │ │ └── types.go
│ │ │ ├── overlay/
│ │ │ │ ├── events.go
│ │ │ │ ├── overlay.go
│ │ │ │ └── types.go
│ │ │ ├── page/
│ │ │ │ ├── events.go
│ │ │ │ ├── page.go
│ │ │ │ └── types.go
│ │ │ ├── performance/
│ │ │ │ ├── events.go
│ │ │ │ ├── performance.go
│ │ │ │ └── types.go
│ │ │ ├── performancetimeline/
│ │ │ │ ├── events.go
│ │ │ │ ├── performancetimeline.go
│ │ │ │ └── types.go
│ │ │ ├── preload/
│ │ │ │ ├── events.go
│ │ │ │ ├── preload.go
│ │ │ │ └── types.go
│ │ │ ├── profiler/
│ │ │ │ ├── events.go
│ │ │ │ ├── profiler.go
│ │ │ │ └── types.go
│ │ │ ├── pwa/
│ │ │ │ ├── pwa.go
│ │ │ │ └── types.go
│ │ │ ├── runtime/
│ │ │ │ ├── events.go
│ │ │ │ ├── runtime.go
│ │ │ │ └── types.go
│ │ │ ├── security/
│ │ │ │ ├── events.go
│ │ │ │ ├── security.go
│ │ │ │ └── types.go
│ │ │ ├── serviceworker/
│ │ │ │ ├── events.go
│ │ │ │ ├── serviceworker.go
│ │ │ │ └── types.go
│ │ │ ├── storage/
│ │ │ │ ├── events.go
│ │ │ │ ├── storage.go
│ │ │ │ └── types.go
│ │ │ ├── systeminfo/
│ │ │ │ ├── systeminfo.go
│ │ │ │ └── types.go
│ │ │ ├── target/
│ │ │ │ ├── events.go
│ │ │ │ ├── target.go
│ │ │ │ └── types.go
│ │ │ ├── tethering/
│ │ │ │ ├── events.go
│ │ │ │ └── tethering.go
│ │ │ ├── tracing/
│ │ │ │ ├── events.go
│ │ │ │ ├── tracing.go
│ │ │ │ └── types.go
│ │ │ ├── webaudio/
│ │ │ │ ├── events.go
│ │ │ │ ├── types.go
│ │ │ │ └── webaudio.go
│ │ │ └── webauthn/
│ │ │ ├── events.go
│ │ │ ├── types.go
│ │ │ └── webauthn.go
│ │ └── sysutil/
│ │ ├── LICENSE
│ │ ├── sysutil.go
│ │ ├── sysutil_bsd.go
│ │ ├── sysutil_linux.go
│ │ ├── sysutil_other.go
│ │ ├── sysutil_windows.go
│ │ ├── timeval.go
│ │ └── timeval32.go
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── LICENSE
│ │ └── spew/
│ │ ├── bypass.go
│ │ ├── bypasssafe.go
│ │ ├── common.go
│ │ ├── config.go
│ │ ├── doc.go
│ │ ├── dump.go
│ │ ├── format.go
│ │ └── spew.go
│ ├── dgryski/
│ │ └── go-rendezvous/
│ │ ├── LICENSE
│ │ └── rdv.go
│ ├── dlclark/
│ │ └── regexp2/
│ │ ├── ATTRIB
│ │ ├── LICENSE
│ │ ├── fastclock.go
│ │ ├── match.go
│ │ ├── regexp.go
│ │ ├── replace.go
│ │ ├── runner.go
│ │ └── syntax/
│ │ ├── charclass.go
│ │ ├── code.go
│ │ ├── escape.go
│ │ ├── fuzz.go
│ │ ├── parser.go
│ │ ├── prefix.go
│ │ ├── replacerdata.go
│ │ ├── tree.go
│ │ └── writer.go
│ ├── evanw/
│ │ └── esbuild/
│ │ ├── LICENSE.md
│ │ ├── internal/
│ │ │ ├── api_helpers/
│ │ │ │ └── use_timer.go
│ │ │ ├── ast/
│ │ │ │ └── ast.go
│ │ │ ├── bundler/
│ │ │ │ └── bundler.go
│ │ │ ├── cache/
│ │ │ │ ├── cache.go
│ │ │ │ ├── cache_ast.go
│ │ │ │ └── cache_fs.go
│ │ │ ├── compat/
│ │ │ │ ├── compat.go
│ │ │ │ ├── css_table.go
│ │ │ │ └── js_table.go
│ │ │ ├── config/
│ │ │ │ ├── config.go
│ │ │ │ └── globals.go
│ │ │ ├── css_ast/
│ │ │ │ ├── css_ast.go
│ │ │ │ └── css_decl_table.go
│ │ │ ├── css_lexer/
│ │ │ │ └── css_lexer.go
│ │ │ ├── css_parser/
│ │ │ │ ├── css_color_spaces.go
│ │ │ │ ├── css_decls.go
│ │ │ │ ├── css_decls_animation.go
│ │ │ │ ├── css_decls_border_radius.go
│ │ │ │ ├── css_decls_box.go
│ │ │ │ ├── css_decls_box_shadow.go
│ │ │ │ ├── css_decls_color.go
│ │ │ │ ├── css_decls_composes.go
│ │ │ │ ├── css_decls_container.go
│ │ │ │ ├── css_decls_font.go
│ │ │ │ ├── css_decls_font_family.go
│ │ │ │ ├── css_decls_font_weight.go
│ │ │ │ ├── css_decls_gradient.go
│ │ │ │ ├── css_decls_list_style.go
│ │ │ │ ├── css_decls_transform.go
│ │ │ │ ├── css_nesting.go
│ │ │ │ ├── css_parser.go
│ │ │ │ ├── css_parser_media.go
│ │ │ │ ├── css_parser_selector.go
│ │ │ │ └── css_reduce_calc.go
│ │ │ ├── css_printer/
│ │ │ │ └── css_printer.go
│ │ │ ├── fs/
│ │ │ │ ├── error_other.go
│ │ │ │ ├── error_wasm+windows.go
│ │ │ │ ├── filepath.go
│ │ │ │ ├── fs.go
│ │ │ │ ├── fs_mock.go
│ │ │ │ ├── fs_real.go
│ │ │ │ ├── fs_zip.go
│ │ │ │ ├── iswin_other.go
│ │ │ │ ├── iswin_wasm.go
│ │ │ │ ├── iswin_windows.go
│ │ │ │ ├── modkey_other.go
│ │ │ │ └── modkey_unix.go
│ │ │ ├── graph/
│ │ │ │ ├── graph.go
│ │ │ │ ├── input.go
│ │ │ │ └── meta.go
│ │ │ ├── helpers/
│ │ │ │ ├── bitset.go
│ │ │ │ ├── comment.go
│ │ │ │ ├── dataurl.go
│ │ │ │ ├── float.go
│ │ │ │ ├── glob.go
│ │ │ │ ├── hash.go
│ │ │ │ ├── joiner.go
│ │ │ │ ├── mime.go
│ │ │ │ ├── path.go
│ │ │ │ ├── quote.go
│ │ │ │ ├── serializer.go
│ │ │ │ ├── stack.go
│ │ │ │ ├── strings.go
│ │ │ │ ├── timer.go
│ │ │ │ ├── typos.go
│ │ │ │ ├── utf.go
│ │ │ │ └── waitgroup.go
│ │ │ ├── js_ast/
│ │ │ │ ├── js_ast.go
│ │ │ │ ├── js_ast_helpers.go
│ │ │ │ ├── js_ident.go
│ │ │ │ └── unicode.go
│ │ │ ├── js_lexer/
│ │ │ │ ├── js_lexer.go
│ │ │ │ └── tables.go
│ │ │ ├── js_parser/
│ │ │ │ ├── global_name_parser.go
│ │ │ │ ├── js_parser.go
│ │ │ │ ├── js_parser_lower.go
│ │ │ │ ├── js_parser_lower_class.go
│ │ │ │ ├── json_parser.go
│ │ │ │ ├── sourcemap_parser.go
│ │ │ │ └── ts_parser.go
│ │ │ ├── js_printer/
│ │ │ │ └── js_printer.go
│ │ │ ├── linker/
│ │ │ │ ├── debug.go
│ │ │ │ └── linker.go
│ │ │ ├── logger/
│ │ │ │ ├── logger.go
│ │ │ │ ├── logger_darwin.go
│ │ │ │ ├── logger_linux.go
│ │ │ │ ├── logger_other.go
│ │ │ │ ├── logger_windows.go
│ │ │ │ └── msg_ids.go
│ │ │ ├── renamer/
│ │ │ │ └── renamer.go
│ │ │ ├── resolver/
│ │ │ │ ├── dataurl.go
│ │ │ │ ├── package_json.go
│ │ │ │ ├── resolver.go
│ │ │ │ ├── tsconfig_json.go
│ │ │ │ └── yarnpnp.go
│ │ │ ├── runtime/
│ │ │ │ └── runtime.go
│ │ │ ├── sourcemap/
│ │ │ │ └── sourcemap.go
│ │ │ └── xxhash/
│ │ │ ├── LICENSE.txt
│ │ │ ├── xxhash.go
│ │ │ └── xxhash_other.go
│ │ └── pkg/
│ │ └── api/
│ │ ├── api.go
│ │ ├── api_impl.go
│ │ ├── api_js_table.go
│ │ ├── favicon.go
│ │ ├── serve_other.go
│ │ ├── serve_wasm.go
│ │ └── watcher.go
│ ├── fatih/
│ │ └── color/
│ │ ├── LICENSE.md
│ │ ├── color.go
│ │ ├── color_windows.go
│ │ └── doc.go
│ ├── go-json-experiment/
│ │ └── json/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── arshal.go
│ │ ├── arshal_any.go
│ │ ├── arshal_default.go
│ │ ├── arshal_funcs.go
│ │ ├── arshal_inlined.go
│ │ ├── arshal_methods.go
│ │ ├── arshal_time.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ ├── fields.go
│ │ ├── fold.go
│ │ ├── intern.go
│ │ ├── internal/
│ │ │ ├── internal.go
│ │ │ ├── jsonflags/
│ │ │ │ └── flags.go
│ │ │ ├── jsonopts/
│ │ │ │ └── options.go
│ │ │ └── jsonwire/
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ └── wire.go
│ │ ├── jsontext/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ ├── errors.go
│ │ │ ├── export.go
│ │ │ ├── options.go
│ │ │ ├── pools.go
│ │ │ ├── quote.go
│ │ │ ├── state.go
│ │ │ ├── token.go
│ │ │ └── value.go
│ │ ├── migrate.sh
│ │ └── options.go
│ ├── go-logr/
│ │ ├── logr/
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── SECURITY.md
│ │ │ ├── context.go
│ │ │ ├── context_noslog.go
│ │ │ ├── context_slog.go
│ │ │ ├── discard.go
│ │ │ ├── funcr/
│ │ │ │ ├── funcr.go
│ │ │ │ └── slogsink.go
│ │ │ ├── logr.go
│ │ │ ├── sloghandler.go
│ │ │ ├── slogr.go
│ │ │ └── slogsink.go
│ │ └── stdr/
│ │ ├── LICENSE
│ │ └── stdr.go
│ ├── go-sourcemap/
│ │ └── sourcemap/
│ │ ├── LICENSE
│ │ ├── consumer.go
│ │ ├── internal/
│ │ │ └── base64vlq/
│ │ │ └── base64vlq.go
│ │ └── mappings.go
│ ├── golang/
│ │ └── protobuf/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── proto/
│ │ │ ├── buffer.go
│ │ │ ├── defaults.go
│ │ │ ├── deprecated.go
│ │ │ ├── discard.go
│ │ │ ├── extensions.go
│ │ │ ├── properties.go
│ │ │ ├── proto.go
│ │ │ ├── registry.go
│ │ │ ├── text_decode.go
│ │ │ ├── text_encode.go
│ │ │ ├── wire.go
│ │ │ └── wrappers.go
│ │ └── ptypes/
│ │ ├── any/
│ │ │ └── any.pb.go
│ │ ├── struct/
│ │ │ └── struct.pb.go
│ │ └── wrappers/
│ │ └── wrappers.pb.go
│ ├── google/
│ │ ├── pprof/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ └── profile/
│ │ │ ├── encode.go
│ │ │ ├── filter.go
│ │ │ ├── index.go
│ │ │ ├── legacy_java_profile.go
│ │ │ ├── legacy_profile.go
│ │ │ ├── merge.go
│ │ │ ├── profile.go
│ │ │ ├── proto.go
│ │ │ └── prune.go
│ │ └── uuid/
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── marshal.go
│ │ ├── node.go
│ │ ├── node_js.go
│ │ ├── node_net.go
│ │ ├── null.go
│ │ ├── sql.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ ├── version4.go
│ │ ├── version6.go
│ │ └── version7.go
│ ├── gorilla/
│ │ └── websocket/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── client.go
│ │ ├── compression.go
│ │ ├── conn.go
│ │ ├── doc.go
│ │ ├── join.go
│ │ ├── json.go
│ │ ├── mask.go
│ │ ├── mask_safe.go
│ │ ├── prepared.go
│ │ ├── proxy.go
│ │ ├── server.go
│ │ ├── tls_handshake.go
│ │ ├── tls_handshake_116.go
│ │ ├── util.go
│ │ └── x_net_proxy.go
│ ├── grafana/
│ │ ├── k6-cloud-openapi-client-go/
│ │ │ └── k6/
│ │ │ ├── .openapi-generator-ignore
│ │ │ ├── api_authorization.go
│ │ │ ├── api_load_tests.go
│ │ │ ├── api_load_zones.go
│ │ │ ├── api_projects.go
│ │ │ ├── api_schedules.go
│ │ │ ├── api_test_runs.go
│ │ │ ├── client.go
│ │ │ ├── configuration.go
│ │ │ ├── model_allowed_load_zone_api_model.go
│ │ │ ├── model_allowed_load_zone_to_update_api_model.go
│ │ │ ├── model_allowed_load_zones_list_api_model.go
│ │ │ ├── model_allowed_project_api_model.go
│ │ │ ├── model_allowed_project_to_update_api_model.go
│ │ │ ├── model_allowed_projects_list_api_model.go
│ │ │ ├── model_authentication_response.go
│ │ │ ├── model_base_total_vuh.go
│ │ │ ├── model_browser_vuh.go
│ │ │ ├── model_cloud_options.go
│ │ │ ├── model_cost_breakdown_api_model.go
│ │ │ ├── model_create_project_api_model.go
│ │ │ ├── model_create_schedule_request.go
│ │ │ ├── model_distribution_zone_api_model.go
│ │ │ ├── model_error_api_model.go
│ │ │ ├── model_error_details_api_model.go
│ │ │ ├── model_error_response_api_model.go
│ │ │ ├── model_frequency.go
│ │ │ ├── model_load_test_api_model.go
│ │ │ ├── model_load_test_list_response.go
│ │ │ ├── model_load_zone_api_model.go
│ │ │ ├── model_load_zone_distribution_api_model.go
│ │ │ ├── model_load_zones_list_api_model.go
│ │ │ ├── model_move_load_test_api_model.go
│ │ │ ├── model_node_api_model.go
│ │ │ ├── model_options.go
│ │ │ ├── model_options_cloud.go
│ │ │ ├── model_patch_load_test_api_model.go
│ │ │ ├── model_patch_project_api_model.go
│ │ │ ├── model_patch_project_limits_request.go
│ │ │ ├── model_patch_test_run_api_model.go
│ │ │ ├── model_project_api_model.go
│ │ │ ├── model_project_limits_api_model.go
│ │ │ ├── model_project_limits_list_response.go
│ │ │ ├── model_project_list_response.go
│ │ │ ├── model_protocol_vuh.go
│ │ │ ├── model_reduction_rate.go
│ │ │ ├── model_reduction_rate_breakdown_value.go
│ │ │ ├── model_schedule_api_model.go
│ │ │ ├── model_schedule_cron.go
│ │ │ ├── model_schedule_list_response.go
│ │ │ ├── model_schedule_recurrence_rule.go
│ │ │ ├── model_status_api_model.go
│ │ │ ├── model_status_extra_api_model.go
│ │ │ ├── model_test_cost_api_model.go
│ │ │ ├── model_test_cost_breakdown_api_model.go
│ │ │ ├── model_test_run_api_model.go
│ │ │ ├── model_test_run_distribution_api_model.go
│ │ │ ├── model_test_run_list_response.go
│ │ │ ├── model_total_vuh.go
│ │ │ ├── model_update_allowed_load_zones_list_api_model.go
│ │ │ ├── model_update_allowed_projects_list_api_model.go
│ │ │ ├── model_validate_options_request.go
│ │ │ ├── model_validate_options_response.go
│ │ │ ├── model_weekday.go
│ │ │ ├── response.go
│ │ │ └── utils.go
│ │ ├── k6build/
│ │ │ ├── Dockerfile
│ │ │ ├── LICENSE
│ │ │ ├── build.go
│ │ │ ├── error.go
│ │ │ └── pkg/
│ │ │ ├── api/
│ │ │ │ └── api.go
│ │ │ └── client/
│ │ │ └── client.go
│ │ ├── k6provider/
│ │ │ ├── LICENSE
│ │ │ ├── download.go
│ │ │ ├── k6binary.go
│ │ │ ├── k6binary_windows.go
│ │ │ ├── lock.go
│ │ │ ├── lock_nix.go
│ │ │ ├── lock_windows.go
│ │ │ ├── provider.go
│ │ │ ├── pruner.go
│ │ │ └── util.go
│ │ ├── sobek/
│ │ │ ├── .tc39_test262_checkout.sh
│ │ │ ├── LICENSE
│ │ │ ├── array.go
│ │ │ ├── array_sparse.go
│ │ │ ├── ast/
│ │ │ │ ├── README.markdown
│ │ │ │ └── node.go
│ │ │ ├── builtin_array.go
│ │ │ ├── builtin_bigint.go
│ │ │ ├── builtin_boolean.go
│ │ │ ├── builtin_date.go
│ │ │ ├── builtin_error.go
│ │ │ ├── builtin_function.go
│ │ │ ├── builtin_global.go
│ │ │ ├── builtin_json.go
│ │ │ ├── builtin_map.go
│ │ │ ├── builtin_math.go
│ │ │ ├── builtin_number.go
│ │ │ ├── builtin_object.go
│ │ │ ├── builtin_promise.go
│ │ │ ├── builtin_proxy.go
│ │ │ ├── builtin_reflect.go
│ │ │ ├── builtin_regexp.go
│ │ │ ├── builtin_set.go
│ │ │ ├── builtin_string.go
│ │ │ ├── builtin_symbol.go
│ │ │ ├── builtin_typedarrays.go
│ │ │ ├── builtin_weakmap.go
│ │ │ ├── builtin_weakset.go
│ │ │ ├── compiler.go
│ │ │ ├── compiler_expr.go
│ │ │ ├── compiler_stmt.go
│ │ │ ├── date.go
│ │ │ ├── date_parser.go
│ │ │ ├── destruct.go
│ │ │ ├── extract_failed_tests.sh
│ │ │ ├── file/
│ │ │ │ ├── README.markdown
│ │ │ │ └── file.go
│ │ │ ├── ftoa/
│ │ │ │ ├── LICENSE_LUCENE
│ │ │ │ ├── common.go
│ │ │ │ ├── ftoa.go
│ │ │ │ ├── ftobasestr.go
│ │ │ │ ├── ftostr.go
│ │ │ │ └── internal/
│ │ │ │ └── fast/
│ │ │ │ ├── LICENSE_V8
│ │ │ │ ├── cachedpower.go
│ │ │ │ ├── common.go
│ │ │ │ ├── diyfp.go
│ │ │ │ └── dtoa.go
│ │ │ ├── func.go
│ │ │ ├── ipow.go
│ │ │ ├── map.go
│ │ │ ├── modules.go
│ │ │ ├── modules_namespace.go
│ │ │ ├── modules_sourcetext.go
│ │ │ ├── object.go
│ │ │ ├── object_args.go
│ │ │ ├── object_dynamic.go
│ │ │ ├── object_goarray_reflect.go
│ │ │ ├── object_gomap.go
│ │ │ ├── object_gomap_reflect.go
│ │ │ ├── object_goreflect.go
│ │ │ ├── object_goslice.go
│ │ │ ├── object_goslice_reflect.go
│ │ │ ├── object_template.go
│ │ │ ├── parser/
│ │ │ │ ├── README.markdown
│ │ │ │ ├── error.go
│ │ │ │ ├── expression.go
│ │ │ │ ├── lexer.go
│ │ │ │ ├── parser.go
│ │ │ │ ├── regexp.go
│ │ │ │ ├── scope.go
│ │ │ │ └── statement.go
│ │ │ ├── profiler.go
│ │ │ ├── proxy.go
│ │ │ ├── regexp.go
│ │ │ ├── runtime.go
│ │ │ ├── staticcheck.conf
│ │ │ ├── string.go
│ │ │ ├── string_ascii.go
│ │ │ ├── string_imported.go
│ │ │ ├── string_unicode.go
│ │ │ ├── token/
│ │ │ │ ├── README.markdown
│ │ │ │ ├── token.go
│ │ │ │ ├── token_const.go
│ │ │ │ └── tokenfmt
│ │ │ ├── typedarrays.go
│ │ │ ├── unistring/
│ │ │ │ └── string.go
│ │ │ ├── value.go
│ │ │ └── vm.go
│ │ ├── xk6-dashboard/
│ │ │ ├── LICENSE
│ │ │ └── dashboard/
│ │ │ ├── aggregate.go
│ │ │ ├── assets.go
│ │ │ ├── builtin.go
│ │ │ ├── command.go
│ │ │ ├── customize.go
│ │ │ ├── event.go
│ │ │ ├── extension.go
│ │ │ ├── meter.go
│ │ │ ├── options.go
│ │ │ ├── process.go
│ │ │ ├── record.go
│ │ │ ├── registry.go
│ │ │ ├── replay.go
│ │ │ ├── report.go
│ │ │ ├── sse.go
│ │ │ └── web.go
│ │ ├── xk6-dashboard-assets/
│ │ │ ├── .prettierignore
│ │ │ ├── LICENSE
│ │ │ ├── assets.go
│ │ │ ├── eslint.config.mjs
│ │ │ ├── packages/
│ │ │ │ ├── config/
│ │ │ │ │ └── dist/
│ │ │ │ │ └── config.json
│ │ │ │ ├── report/
│ │ │ │ │ └── dist/
│ │ │ │ │ └── index.html
│ │ │ │ └── ui/
│ │ │ │ └── dist/
│ │ │ │ ├── assets/
│ │ │ │ │ ├── index-Bjd4tSYO.css
│ │ │ │ │ └── index-CGQSjC8K.js
│ │ │ │ └── index.html
│ │ │ └── script.js
│ │ └── xk6-redis/
│ │ ├── LICENSE
│ │ └── redis/
│ │ ├── client.go
│ │ ├── module.go
│ │ └── options.go
│ ├── grpc-ecosystem/
│ │ ├── go-grpc-middleware/
│ │ │ ├── LICENSE
│ │ │ ├── retry/
│ │ │ │ ├── backoff.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── options.go
│ │ │ │ └── retry.go
│ │ │ └── util/
│ │ │ ├── backoffutils/
│ │ │ │ └── backoff.go
│ │ │ └── metautils/
│ │ │ ├── doc.go
│ │ │ └── nicemd.go
│ │ └── grpc-gateway/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ └── httprule/
│ │ │ ├── BUILD.bazel
│ │ │ ├── compile.go
│ │ │ ├── fuzz.go
│ │ │ ├── parse.go
│ │ │ └── types.go
│ │ ├── runtime/
│ │ │ ├── BUILD.bazel
│ │ │ ├── context.go
│ │ │ ├── convert.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── fieldmask.go
│ │ │ ├── handler.go
│ │ │ ├── marshal_httpbodyproto.go
│ │ │ ├── marshal_json.go
│ │ │ ├── marshal_jsonpb.go
│ │ │ ├── marshal_proto.go
│ │ │ ├── marshaler.go
│ │ │ ├── marshaler_registry.go
│ │ │ ├── mux.go
│ │ │ ├── pattern.go
│ │ │ ├── proto2_convert.go
│ │ │ └── query.go
│ │ └── utilities/
│ │ ├── BUILD.bazel
│ │ ├── doc.go
│ │ ├── pattern.go
│ │ ├── readerfactory.go
│ │ ├── string_array_flag.go
│ │ └── trie.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── influxdata/
│ │ └── influxdb1-client/
│ │ ├── LICENSE
│ │ ├── models/
│ │ │ ├── inline_fnv.go
│ │ │ ├── inline_strconv_parse.go
│ │ │ ├── points.go
│ │ │ ├── rows.go
│ │ │ ├── statistic.go
│ │ │ ├── time.go
│ │ │ └── uint_support.go
│ │ ├── pkg/
│ │ │ └── escape/
│ │ │ ├── bytes.go
│ │ │ └── strings.go
│ │ └── v2/
│ │ ├── client.go
│ │ └── udp.go
│ ├── jhump/
│ │ └── protoreflect/
│ │ ├── LICENSE
│ │ ├── desc/
│ │ │ ├── cache.go
│ │ │ ├── convert.go
│ │ │ ├── descriptor.go
│ │ │ ├── descriptor_no_unsafe.go
│ │ │ ├── descriptor_unsafe.go
│ │ │ ├── doc.go
│ │ │ ├── imports.go
│ │ │ ├── internal/
│ │ │ │ ├── proto3_optional.go
│ │ │ │ ├── protoutil/
│ │ │ │ │ └── protoutil.go
│ │ │ │ ├── registry.go
│ │ │ │ ├── source_info.go
│ │ │ │ └── util.go
│ │ │ ├── load.go
│ │ │ ├── sourceinfo/
│ │ │ │ ├── registry.go
│ │ │ │ └── update.go
│ │ │ └── wrap.go
│ │ ├── grpcreflect/
│ │ │ ├── adapt.go
│ │ │ ├── client.go
│ │ │ ├── doc.go
│ │ │ └── server.go
│ │ ├── internal/
│ │ │ ├── standard_files.go
│ │ │ └── unrecognized.go
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── internal/
│ │ │ ├── reparse/
│ │ │ │ └── reparse.go
│ │ │ ├── sort/
│ │ │ │ └── sort.go
│ │ │ └── util.go
│ │ ├── protoresolve/
│ │ │ ├── combine.go
│ │ │ ├── desc_protos.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── helpers.go
│ │ │ ├── kind.go
│ │ │ ├── registry.go
│ │ │ ├── resolvers.go
│ │ │ └── types.go
│ │ └── sourceinfo/
│ │ ├── doc.go
│ │ ├── registry.go
│ │ └── update.go
│ ├── josharian/
│ │ └── intern/
│ │ ├── intern.go
│ │ └── license.md
│ ├── klauspost/
│ │ └── compress/
│ │ ├── .gitattributes
│ │ ├── LICENSE
│ │ ├── SECURITY.md
│ │ ├── compressible.go
│ │ ├── flate/
│ │ │ ├── deflate.go
│ │ │ ├── dict_decoder.go
│ │ │ ├── fast_encoder.go
│ │ │ ├── huffman_bit_writer.go
│ │ │ ├── huffman_code.go
│ │ │ ├── huffman_sortByFreq.go
│ │ │ ├── huffman_sortByLiteral.go
│ │ │ ├── inflate.go
│ │ │ ├── inflate_gen.go
│ │ │ ├── level1.go
│ │ │ ├── level2.go
│ │ │ ├── level3.go
│ │ │ ├── level4.go
│ │ │ ├── level5.go
│ │ │ ├── level6.go
│ │ │ ├── matchlen_generic.go
│ │ │ ├── regmask_amd64.go
│ │ │ ├── regmask_other.go
│ │ │ ├── stateless.go
│ │ │ └── token.go
│ │ ├── fse/
│ │ │ ├── bitreader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── bytereader.go
│ │ │ ├── compress.go
│ │ │ ├── decompress.go
│ │ │ └── fse.go
│ │ ├── gen.sh
│ │ ├── gzip/
│ │ │ ├── gunzip.go
│ │ │ └── gzip.go
│ │ ├── huff0/
│ │ │ ├── bitreader.go
│ │ │ ├── bitwriter.go
│ │ │ ├── compress.go
│ │ │ ├── decompress.go
│ │ │ ├── decompress_amd64.go
│ │ │ ├── decompress_amd64.s
│ │ │ ├── decompress_generic.go
│ │ │ └── huff0.go
│ │ ├── internal/
│ │ │ ├── cpuinfo/
│ │ │ │ ├── cpuinfo.go
│ │ │ │ ├── cpuinfo_amd64.go
│ │ │ │ └── cpuinfo_amd64.s
│ │ │ ├── le/
│ │ │ │ ├── le.go
│ │ │ │ ├── unsafe_disabled.go
│ │ │ │ └── unsafe_enabled.go
│ │ │ ├── race/
│ │ │ │ ├── norace.go
│ │ │ │ └── race.go
│ │ │ └── snapref/
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── decode_other.go
│ │ │ ├── encode.go
│ │ │ ├── encode_other.go
│ │ │ └── snappy.go
│ │ ├── s2/
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── decode_amd64.s
│ │ │ ├── decode_arm64.s
│ │ │ ├── decode_asm.go
│ │ │ ├── decode_other.go
│ │ │ ├── dict.go
│ │ │ ├── encode.go
│ │ │ ├── encode_all.go
│ │ │ ├── encode_amd64.go
│ │ │ ├── encode_best.go
│ │ │ ├── encode_better.go
│ │ │ ├── encode_go.go
│ │ │ ├── encodeblock_amd64.go
│ │ │ ├── encodeblock_amd64.s
│ │ │ ├── index.go
│ │ │ ├── lz4convert.go
│ │ │ ├── lz4sconvert.go
│ │ │ ├── reader.go
│ │ │ ├── s2.go
│ │ │ └── writer.go
│ │ ├── s2sx.mod
│ │ ├── s2sx.sum
│ │ ├── snappy/
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTORS
│ │ │ ├── LICENSE
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ └── snappy.go
│ │ └── zstd/
│ │ ├── bitreader.go
│ │ ├── bitwriter.go
│ │ ├── blockdec.go
│ │ ├── blockenc.go
│ │ ├── blocktype_string.go
│ │ ├── bytebuf.go
│ │ ├── bytereader.go
│ │ ├── decodeheader.go
│ │ ├── decoder.go
│ │ ├── decoder_options.go
│ │ ├── dict.go
│ │ ├── enc_base.go
│ │ ├── enc_best.go
│ │ ├── enc_better.go
│ │ ├── enc_dfast.go
│ │ ├── enc_fast.go
│ │ ├── encoder.go
│ │ ├── encoder_options.go
│ │ ├── framedec.go
│ │ ├── frameenc.go
│ │ ├── fse_decoder.go
│ │ ├── fse_decoder_amd64.go
│ │ ├── fse_decoder_amd64.s
│ │ ├── fse_decoder_generic.go
│ │ ├── fse_encoder.go
│ │ ├── fse_predefined.go
│ │ ├── hash.go
│ │ ├── history.go
│ │ ├── internal/
│ │ │ └── xxhash/
│ │ │ ├── LICENSE.txt
│ │ │ ├── xxhash.go
│ │ │ ├── xxhash_amd64.s
│ │ │ ├── xxhash_arm64.s
│ │ │ ├── xxhash_asm.go
│ │ │ ├── xxhash_other.go
│ │ │ └── xxhash_safe.go
│ │ ├── matchlen_amd64.go
│ │ ├── matchlen_amd64.s
│ │ ├── matchlen_generic.go
│ │ ├── seqdec.go
│ │ ├── seqdec_amd64.go
│ │ ├── seqdec_amd64.s
│ │ ├── seqdec_generic.go
│ │ ├── seqenc.go
│ │ ├── simple_go124.go
│ │ ├── snappy.go
│ │ ├── zip.go
│ │ └── zstd.go
│ ├── mailru/
│ │ └── easyjson/
│ │ ├── LICENSE
│ │ ├── buffer/
│ │ │ └── pool.go
│ │ ├── helpers.go
│ │ ├── jlexer/
│ │ │ ├── bytestostr.go
│ │ │ ├── bytestostr_nounsafe.go
│ │ │ ├── error.go
│ │ │ └── lexer.go
│ │ ├── jwriter/
│ │ │ └── writer.go
│ │ ├── raw.go
│ │ └── unknown_fields.go
│ ├── mattn/
│ │ ├── go-colorable/
│ │ │ ├── LICENSE
│ │ │ ├── colorable_others.go
│ │ │ ├── colorable_windows.go
│ │ │ ├── go.test.sh
│ │ │ └── noncolorable.go
│ │ └── go-isatty/
│ │ ├── LICENSE
│ │ ├── doc.go
│ │ ├── go.test.sh
│ │ ├── isatty_bsd.go
│ │ ├── isatty_others.go
│ │ ├── isatty_plan9.go
│ │ ├── isatty_solaris.go
│ │ ├── isatty_tcgets.go
│ │ └── isatty_windows.go
│ ├── mccutchen/
│ │ └── go-httpbin/
│ │ └── v2/
│ │ ├── LICENSE
│ │ └── httpbin/
│ │ ├── digest/
│ │ │ └── digest.go
│ │ ├── doc.go
│ │ ├── handlers.go
│ │ ├── helpers.go
│ │ ├── httpbin.go
│ │ ├── middleware.go
│ │ ├── options.go
│ │ ├── responses.go
│ │ ├── static/
│ │ │ ├── moby.html
│ │ │ ├── sample.xml
│ │ │ └── utf8.html
│ │ ├── static_assets.go
│ │ └── websocket/
│ │ └── websocket.go
│ ├── mstoykov/
│ │ ├── atlas/
│ │ │ ├── LICENSE
│ │ │ └── atlas.go
│ │ ├── envconfig/
│ │ │ ├── LICENSE
│ │ │ ├── MAINTAINERS
│ │ │ ├── doc.go
│ │ │ ├── env_os.go
│ │ │ ├── env_syscall.go
│ │ │ ├── envconfig.go
│ │ │ └── usage.go
│ │ └── k6-taskqueue-lib/
│ │ ├── LICENSE
│ │ └── taskqueue/
│ │ └── queuer.go
│ ├── munnerz/
│ │ └── goautoneg/
│ │ ├── LICENSE
│ │ └── autoneg.go
│ ├── nu7hatch/
│ │ └── gouuid/
│ │ ├── COPYING
│ │ └── uuid.go
│ ├── pkg/
│ │ └── browser/
│ │ ├── LICENSE
│ │ ├── browser.go
│ │ ├── browser_darwin.go
│ │ ├── browser_freebsd.go
│ │ ├── browser_linux.go
│ │ ├── browser_netbsd.go
│ │ ├── browser_openbsd.go
│ │ ├── browser_unsupported.go
│ │ └── browser_windows.go
│ ├── pmezard/
│ │ └── go-difflib/
│ │ ├── LICENSE
│ │ └── difflib/
│ │ └── difflib.go
│ ├── prometheus/
│ │ ├── client_golang/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── internal/
│ │ │ │ └── github.com/
│ │ │ │ └── golang/
│ │ │ │ └── gddo/
│ │ │ │ ├── LICENSE
│ │ │ │ └── httputil/
│ │ │ │ ├── header/
│ │ │ │ │ └── header.go
│ │ │ │ └── negotiate.go
│ │ │ └── prometheus/
│ │ │ ├── build_info_collector.go
│ │ │ ├── collector.go
│ │ │ ├── collectorfunc.go
│ │ │ ├── counter.go
│ │ │ ├── desc.go
│ │ │ ├── doc.go
│ │ │ ├── expvar_collector.go
│ │ │ ├── fnv.go
│ │ │ ├── gauge.go
│ │ │ ├── get_pid.go
│ │ │ ├── get_pid_gopherjs.go
│ │ │ ├── go_collector.go
│ │ │ ├── go_collector_go116.go
│ │ │ ├── go_collector_latest.go
│ │ │ ├── histogram.go
│ │ │ ├── internal/
│ │ │ │ ├── almost_equal.go
│ │ │ │ ├── difflib.go
│ │ │ │ ├── go_collector_options.go
│ │ │ │ ├── go_runtime_metrics.go
│ │ │ │ └── metric.go
│ │ │ ├── labels.go
│ │ │ ├── metric.go
│ │ │ ├── num_threads.go
│ │ │ ├── num_threads_gopherjs.go
│ │ │ ├── observer.go
│ │ │ ├── process_collector.go
│ │ │ ├── process_collector_darwin.go
│ │ │ ├── process_collector_mem_cgo_darwin.c
│ │ │ ├── process_collector_mem_cgo_darwin.go
│ │ │ ├── process_collector_mem_nocgo_darwin.go
│ │ │ ├── process_collector_not_supported.go
│ │ │ ├── process_collector_procfsenabled.go
│ │ │ ├── process_collector_windows.go
│ │ │ ├── promhttp/
│ │ │ │ ├── delegator.go
│ │ │ │ ├── http.go
│ │ │ │ ├── instrument_client.go
│ │ │ │ ├── instrument_server.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── compression.go
│ │ │ │ └── option.go
│ │ │ ├── registry.go
│ │ │ ├── summary.go
│ │ │ ├── timer.go
│ │ │ ├── untyped.go
│ │ │ ├── value.go
│ │ │ ├── vec.go
│ │ │ ├── vnext.go
│ │ │ └── wrap.go
│ │ ├── client_model/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ └── go/
│ │ │ └── metrics.pb.go
│ │ ├── common/
│ │ │ ├── LICENSE
│ │ │ ├── NOTICE
│ │ │ ├── expfmt/
│ │ │ │ ├── decode.go
│ │ │ │ ├── encode.go
│ │ │ │ ├── expfmt.go
│ │ │ │ ├── fuzz.go
│ │ │ │ ├── openmetrics_create.go
│ │ │ │ ├── text_create.go
│ │ │ │ └── text_parse.go
│ │ │ └── model/
│ │ │ ├── alert.go
│ │ │ ├── fingerprinting.go
│ │ │ ├── fnv.go
│ │ │ ├── labels.go
│ │ │ ├── labelset.go
│ │ │ ├── labelset_string.go
│ │ │ ├── metadata.go
│ │ │ ├── metric.go
│ │ │ ├── model.go
│ │ │ ├── signature.go
│ │ │ ├── silence.go
│ │ │ ├── time.go
│ │ │ ├── value.go
│ │ │ ├── value_float.go
│ │ │ ├── value_histogram.go
│ │ │ └── value_type.go
│ │ └── procfs/
│ │ ├── LICENSE
│ │ ├── MAINTAINERS.md
│ │ ├── Makefile.common
│ │ ├── NOTICE
│ │ ├── SECURITY.md
│ │ ├── arp.go
│ │ ├── buddyinfo.go
│ │ ├── cmdline.go
│ │ ├── cpuinfo.go
│ │ ├── cpuinfo_armx.go
│ │ ├── cpuinfo_loong64.go
│ │ ├── cpuinfo_mipsx.go
│ │ ├── cpuinfo_others.go
│ │ ├── cpuinfo_ppcx.go
│ │ ├── cpuinfo_riscvx.go
│ │ ├── cpuinfo_s390x.go
│ │ ├── cpuinfo_x86.go
│ │ ├── crypto.go
│ │ ├── doc.go
│ │ ├── fs.go
│ │ ├── fs_statfs_notype.go
│ │ ├── fs_statfs_type.go
│ │ ├── fscache.go
│ │ ├── internal/
│ │ │ ├── fs/
│ │ │ │ └── fs.go
│ │ │ └── util/
│ │ │ ├── parse.go
│ │ │ ├── readfile.go
│ │ │ ├── sysreadfile.go
│ │ │ ├── sysreadfile_compat.go
│ │ │ └── valueparser.go
│ │ ├── ipvs.go
│ │ ├── kernel_random.go
│ │ ├── loadavg.go
│ │ ├── mdstat.go
│ │ ├── meminfo.go
│ │ ├── mountinfo.go
│ │ ├── mountstats.go
│ │ ├── net_conntrackstat.go
│ │ ├── net_dev.go
│ │ ├── net_dev_snmp6.go
│ │ ├── net_ip_socket.go
│ │ ├── net_protocols.go
│ │ ├── net_route.go
│ │ ├── net_sockstat.go
│ │ ├── net_softnet.go
│ │ ├── net_tcp.go
│ │ ├── net_tls_stat.go
│ │ ├── net_udp.go
│ │ ├── net_unix.go
│ │ ├── net_wireless.go
│ │ ├── net_xfrm.go
│ │ ├── netstat.go
│ │ ├── proc.go
│ │ ├── proc_cgroup.go
│ │ ├── proc_cgroups.go
│ │ ├── proc_environ.go
│ │ ├── proc_fdinfo.go
│ │ ├── proc_interrupts.go
│ │ ├── proc_io.go
│ │ ├── proc_limits.go
│ │ ├── proc_maps.go
│ │ ├── proc_netstat.go
│ │ ├── proc_ns.go
│ │ ├── proc_psi.go
│ │ ├── proc_smaps.go
│ │ ├── proc_snmp.go
│ │ ├── proc_snmp6.go
│ │ ├── proc_stat.go
│ │ ├── proc_status.go
│ │ ├── proc_sys.go
│ │ ├── schedstat.go
│ │ ├── slab.go
│ │ ├── softirqs.go
│ │ ├── stat.go
│ │ ├── swaps.go
│ │ ├── thread.go
│ │ ├── ttar
│ │ ├── vm.go
│ │ └── zoneinfo.go
│ ├── r3labs/
│ │ └── sse/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── client.go
│ │ ├── event.go
│ │ ├── event_log.go
│ │ ├── http.go
│ │ ├── server.go
│ │ ├── stream.go
│ │ └── subscriber.go
│ ├── redis/
│ │ └── go-redis/
│ │ └── v9/
│ │ ├── LICENSE
│ │ ├── RELEASE-NOTES.md
│ │ ├── RELEASING.md
│ │ ├── acl_commands.go
│ │ ├── adapters.go
│ │ ├── auth/
│ │ │ ├── auth.go
│ │ │ └── reauth_credentials_listener.go
│ │ ├── bitmap_commands.go
│ │ ├── cluster_commands.go
│ │ ├── command.go
│ │ ├── commands.go
│ │ ├── doc.go
│ │ ├── error.go
│ │ ├── generic_commands.go
│ │ ├── geo_commands.go
│ │ ├── hash_commands.go
│ │ ├── hyperloglog_commands.go
│ │ ├── internal/
│ │ │ ├── arg.go
│ │ │ ├── auth/
│ │ │ │ └── streaming/
│ │ │ │ ├── conn_reauth_credentials_listener.go
│ │ │ │ ├── cred_listeners.go
│ │ │ │ ├── manager.go
│ │ │ │ └── pool_hook.go
│ │ │ ├── hashtag/
│ │ │ │ └── hashtag.go
│ │ │ ├── hscan/
│ │ │ │ ├── hscan.go
│ │ │ │ └── structmap.go
│ │ │ ├── interfaces/
│ │ │ │ └── interfaces.go
│ │ │ ├── internal.go
│ │ │ ├── log.go
│ │ │ ├── maintnotifications/
│ │ │ │ └── logs/
│ │ │ │ └── log_messages.go
│ │ │ ├── once.go
│ │ │ ├── pool/
│ │ │ │ ├── conn.go
│ │ │ │ ├── conn_check.go
│ │ │ │ ├── conn_check_dummy.go
│ │ │ │ ├── conn_state.go
│ │ │ │ ├── hooks.go
│ │ │ │ ├── pool.go
│ │ │ │ ├── pool_single.go
│ │ │ │ ├── pool_sticky.go
│ │ │ │ ├── pubsub.go
│ │ │ │ └── want_conn.go
│ │ │ ├── proto/
│ │ │ │ ├── reader.go
│ │ │ │ ├── redis_errors.go
│ │ │ │ ├── scan.go
│ │ │ │ └── writer.go
│ │ │ ├── rand/
│ │ │ │ └── rand.go
│ │ │ ├── redis.go
│ │ │ ├── semaphore.go
│ │ │ ├── util/
│ │ │ │ ├── convert.go
│ │ │ │ ├── math.go
│ │ │ │ ├── safe.go
│ │ │ │ ├── strconv.go
│ │ │ │ ├── type.go
│ │ │ │ └── unsafe.go
│ │ │ └── util.go
│ │ ├── iterator.go
│ │ ├── json.go
│ │ ├── list_commands.go
│ │ ├── maintnotifications/
│ │ │ ├── FEATURES.md
│ │ │ ├── circuit_breaker.go
│ │ │ ├── config.go
│ │ │ ├── errors.go
│ │ │ ├── example_hooks.go
│ │ │ ├── handoff_worker.go
│ │ │ ├── hooks.go
│ │ │ ├── manager.go
│ │ │ ├── pool_hook.go
│ │ │ ├── push_notification_handler.go
│ │ │ └── state.go
│ │ ├── options.go
│ │ ├── osscluster.go
│ │ ├── osscluster_commands.go
│ │ ├── pipeline.go
│ │ ├── probabilistic.go
│ │ ├── pubsub.go
│ │ ├── pubsub_commands.go
│ │ ├── push/
│ │ │ ├── errors.go
│ │ │ ├── handler.go
│ │ │ ├── handler_context.go
│ │ │ ├── processor.go
│ │ │ ├── push.go
│ │ │ └── registry.go
│ │ ├── push_notifications.go
│ │ ├── redis.go
│ │ ├── result.go
│ │ ├── ring.go
│ │ ├── script.go
│ │ ├── scripting_commands.go
│ │ ├── search_builders.go
│ │ ├── search_commands.go
│ │ ├── sentinel.go
│ │ ├── set_commands.go
│ │ ├── sortedset_commands.go
│ │ ├── stream_commands.go
│ │ ├── string_commands.go
│ │ ├── timeseries_commands.go
│ │ ├── tx.go
│ │ ├── universal.go
│ │ ├── vectorset_commands.go
│ │ └── version.go
│ ├── serenize/
│ │ └── snaker/
│ │ ├── LICENSE.txt
│ │ └── snaker.go
│ ├── sirupsen/
│ │ └── logrus/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── alt_exit.go
│ │ ├── buffer_pool.go
│ │ ├── doc.go
│ │ ├── entry.go
│ │ ├── exported.go
│ │ ├── formatter.go
│ │ ├── hooks/
│ │ │ └── test/
│ │ │ └── test.go
│ │ ├── hooks.go
│ │ ├── json_formatter.go
│ │ ├── logger.go
│ │ ├── logrus.go
│ │ ├── terminal_check_appengine.go
│ │ ├── terminal_check_bsd.go
│ │ ├── terminal_check_js.go
│ │ ├── terminal_check_no_terminal.go
│ │ ├── terminal_check_notappengine.go
│ │ ├── terminal_check_solaris.go
│ │ ├── terminal_check_unix.go
│ │ ├── terminal_check_windows.go
│ │ ├── text_formatter.go
│ │ └── writer.go
│ ├── spf13/
│ │ ├── afero/
│ │ │ ├── LICENSE.txt
│ │ │ ├── afero.go
│ │ │ ├── basepath.go
│ │ │ ├── cacheOnReadFs.go
│ │ │ ├── const_bsds.go
│ │ │ ├── const_win_unix.go
│ │ │ ├── copyOnWriteFs.go
│ │ │ ├── httpFs.go
│ │ │ ├── ioutil.go
│ │ │ ├── lstater.go
│ │ │ ├── match.go
│ │ │ ├── mem/
│ │ │ │ ├── dir.go
│ │ │ │ ├── dirmap.go
│ │ │ │ └── file.go
│ │ │ ├── memmap.go
│ │ │ ├── os.go
│ │ │ ├── path.go
│ │ │ ├── readonlyfs.go
│ │ │ ├── regexpfs.go
│ │ │ ├── unionFile.go
│ │ │ └── util.go
│ │ ├── cobra/
│ │ │ ├── .mailmap
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONDUCT.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── MAINTAINERS
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completions.md
│ │ │ ├── bash_completionsV2.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── completions.go
│ │ │ ├── fish_completions.go
│ │ │ ├── fish_completions.md
│ │ │ ├── powershell_completions.go
│ │ │ ├── powershell_completions.md
│ │ │ ├── projects_using_cobra.md
│ │ │ ├── shell_completions.go
│ │ │ ├── shell_completions.md
│ │ │ ├── user_guide.md
│ │ │ ├── zsh_completions.go
│ │ │ └── zsh_completions.md
│ │ └── pflag/
│ │ ├── LICENSE
│ │ ├── bool.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float32_slice.go
│ │ ├── float64.go
│ │ ├── float64_slice.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int32_slice.go
│ │ ├── int64.go
│ │ ├── int64_slice.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_int64.go
│ │ ├── string_to_string.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ └── uint_slice.go
│ ├── stretchr/
│ │ └── testify/
│ │ ├── LICENSE
│ │ ├── assert/
│ │ │ ├── assertion_compare.go
│ │ │ ├── assertion_format.go
│ │ │ ├── assertion_forward.go
│ │ │ ├── assertion_order.go
│ │ │ ├── assertions.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── forward_assertions.go
│ │ │ ├── http_assertions.go
│ │ │ └── yaml/
│ │ │ ├── yaml_custom.go
│ │ │ ├── yaml_default.go
│ │ │ └── yaml_fail.go
│ │ └── require/
│ │ ├── doc.go
│ │ ├── forward_requirements.go
│ │ ├── require.go
│ │ ├── require_forward.go
│ │ └── requirements.go
│ └── tidwall/
│ ├── gjson/
│ │ ├── LICENSE
│ │ ├── SYNTAX.md
│ │ └── gjson.go
│ ├── match/
│ │ ├── LICENSE
│ │ └── match.go
│ └── pretty/
│ ├── LICENSE
│ └── pretty.go
├── go.opentelemetry.io/
│ ├── auto/
│ │ └── sdk/
│ │ ├── LICENSE
│ │ ├── VERSIONING.md
│ │ ├── doc.go
│ │ ├── internal/
│ │ │ └── telemetry/
│ │ │ ├── attr.go
│ │ │ ├── doc.go
│ │ │ ├── id.go
│ │ │ ├── number.go
│ │ │ ├── resource.go
│ │ │ ├── scope.go
│ │ │ ├── span.go
│ │ │ ├── status.go
│ │ │ ├── traces.go
│ │ │ └── value.go
│ │ ├── limit.go
│ │ ├── span.go
│ │ ├── tracer.go
│ │ └── tracer_provider.go
│ ├── otel/
│ │ ├── .codespellignore
│ │ ├── .codespellrc
│ │ ├── .gitattributes
│ │ ├── .lycheeignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── RELEASING.md
│ │ ├── VERSIONING.md
│ │ ├── attribute/
│ │ │ ├── doc.go
│ │ │ ├── encoder.go
│ │ │ ├── filter.go
│ │ │ ├── hash.go
│ │ │ ├── internal/
│ │ │ │ ├── attribute.go
│ │ │ │ └── xxhash/
│ │ │ │ └── xxhash.go
│ │ │ ├── iterator.go
│ │ │ ├── key.go
│ │ │ ├── kv.go
│ │ │ ├── rawhelpers.go
│ │ │ ├── set.go
│ │ │ ├── type_string.go
│ │ │ └── value.go
│ │ ├── baggage/
│ │ │ ├── baggage.go
│ │ │ ├── context.go
│ │ │ └── doc.go
│ │ ├── codes/
│ │ │ ├── codes.go
│ │ │ └── doc.go
│ │ ├── dependencies.Dockerfile
│ │ ├── doc.go
│ │ ├── error_handler.go
│ │ ├── exporters/
│ │ │ └── otlp/
│ │ │ ├── otlpmetric/
│ │ │ │ ├── otlpmetricgrpc/
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── client.go
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── exporter.go
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ │ ├── gen.go
│ │ │ │ │ │ ├── oconf/
│ │ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ │ └── tls.go
│ │ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ │ ├── retry/
│ │ │ │ │ │ │ └── retry.go
│ │ │ │ │ │ └── transform/
│ │ │ │ │ │ ├── attribute.go
│ │ │ │ │ │ ├── error.go
│ │ │ │ │ │ └── metricdata.go
│ │ │ │ │ └── version.go
│ │ │ │ └── otlpmetrichttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── oconf/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ ├── retry/
│ │ │ │ │ │ └── retry.go
│ │ │ │ │ └── transform/
│ │ │ │ │ ├── attribute.go
│ │ │ │ │ ├── error.go
│ │ │ │ │ └── metricdata.go
│ │ │ │ └── version.go
│ │ │ └── otlptrace/
│ │ │ ├── LICENSE
│ │ │ ├── clients.go
│ │ │ ├── doc.go
│ │ │ ├── exporter.go
│ │ │ ├── internal/
│ │ │ │ └── tracetransform/
│ │ │ │ ├── attribute.go
│ │ │ │ ├── instrumentation.go
│ │ │ │ ├── resource.go
│ │ │ │ └── span.go
│ │ │ ├── otlptracegrpc/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── otlpconfig/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ └── retry/
│ │ │ │ │ └── retry.go
│ │ │ │ └── options.go
│ │ │ ├── otlptracehttp/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── envconfig/
│ │ │ │ │ │ └── envconfig.go
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── otlpconfig/
│ │ │ │ │ │ ├── envconfig.go
│ │ │ │ │ │ ├── options.go
│ │ │ │ │ │ ├── optiontypes.go
│ │ │ │ │ │ └── tls.go
│ │ │ │ │ ├── partialsuccess.go
│ │ │ │ │ └── retry/
│ │ │ │ │ └── retry.go
│ │ │ │ └── options.go
│ │ │ └── version.go
│ │ ├── handler.go
│ │ ├── internal/
│ │ │ ├── baggage/
│ │ │ │ ├── baggage.go
│ │ │ │ └── context.go
│ │ │ └── global/
│ │ │ ├── handler.go
│ │ │ ├── instruments.go
│ │ │ ├── internal_logging.go
│ │ │ ├── meter.go
│ │ │ ├── propagator.go
│ │ │ ├── state.go
│ │ │ └── trace.go
│ │ ├── internal_logging.go
│ │ ├── metric/
│ │ │ ├── LICENSE
│ │ │ ├── asyncfloat64.go
│ │ │ ├── asyncint64.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ └── embedded.go
│ │ │ ├── instrument.go
│ │ │ ├── meter.go
│ │ │ ├── noop/
│ │ │ │ └── noop.go
│ │ │ ├── syncfloat64.go
│ │ │ └── syncint64.go
│ │ ├── metric.go
│ │ ├── propagation/
│ │ │ ├── baggage.go
│ │ │ ├── doc.go
│ │ │ ├── propagation.go
│ │ │ └── trace_context.go
│ │ ├── propagation.go
│ │ ├── sdk/
│ │ │ ├── LICENSE
│ │ │ ├── instrumentation/
│ │ │ │ ├── doc.go
│ │ │ │ ├── library.go
│ │ │ │ └── scope.go
│ │ │ ├── internal/
│ │ │ │ └── x/
│ │ │ │ ├── features.go
│ │ │ │ └── x.go
│ │ │ ├── metric/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── aggregation.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── config.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── env.go
│ │ │ │ ├── exemplar/
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── exemplar.go
│ │ │ │ │ ├── filter.go
│ │ │ │ │ ├── fixed_size_reservoir.go
│ │ │ │ │ ├── histogram_reservoir.go
│ │ │ │ │ ├── reservoir.go
│ │ │ │ │ ├── storage.go
│ │ │ │ │ └── value.go
│ │ │ │ ├── exemplar.go
│ │ │ │ ├── exporter.go
│ │ │ │ ├── instrument.go
│ │ │ │ ├── instrumentkind_string.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── aggregate/
│ │ │ │ │ │ ├── aggregate.go
│ │ │ │ │ │ ├── atomic.go
│ │ │ │ │ │ ├── doc.go
│ │ │ │ │ │ ├── drop.go
│ │ │ │ │ │ ├── exemplar.go
│ │ │ │ │ │ ├── exponential_histogram.go
│ │ │ │ │ │ ├── filtered_reservoir.go
│ │ │ │ │ │ ├── histogram.go
│ │ │ │ │ │ ├── lastvalue.go
│ │ │ │ │ │ ├── limit.go
│ │ │ │ │ │ └── sum.go
│ │ │ │ │ ├── observ/
│ │ │ │ │ │ └── instrumentation.go
│ │ │ │ │ ├── reservoir/
│ │ │ │ │ │ ├── concurrent_safe.go
│ │ │ │ │ │ └── doc.go
│ │ │ │ │ └── reuse_slice.go
│ │ │ │ ├── manual_reader.go
│ │ │ │ ├── meter.go
│ │ │ │ ├── metricdata/
│ │ │ │ │ ├── data.go
│ │ │ │ │ ├── temporality.go
│ │ │ │ │ └── temporality_string.go
│ │ │ │ ├── periodic_reader.go
│ │ │ │ ├── pipeline.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── version.go
│ │ │ │ └── view.go
│ │ │ ├── resource/
│ │ │ │ ├── auto.go
│ │ │ │ ├── builtin.go
│ │ │ │ ├── config.go
│ │ │ │ ├── container.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── env.go
│ │ │ │ ├── host_id.go
│ │ │ │ ├── host_id_bsd.go
│ │ │ │ ├── host_id_darwin.go
│ │ │ │ ├── host_id_exec.go
│ │ │ │ ├── host_id_linux.go
│ │ │ │ ├── host_id_readfile.go
│ │ │ │ ├── host_id_unsupported.go
│ │ │ │ ├── host_id_windows.go
│ │ │ │ ├── os.go
│ │ │ │ ├── os_release_darwin.go
│ │ │ │ ├── os_release_unix.go
│ │ │ │ ├── os_unix.go
│ │ │ │ ├── os_unsupported.go
│ │ │ │ ├── os_windows.go
│ │ │ │ ├── process.go
│ │ │ │ └── resource.go
│ │ │ ├── trace/
│ │ │ │ ├── batch_span_processor.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── evictedqueue.go
│ │ │ │ ├── id_generator.go
│ │ │ │ ├── internal/
│ │ │ │ │ ├── env/
│ │ │ │ │ │ └── env.go
│ │ │ │ │ └── observ/
│ │ │ │ │ ├── batch_span_processor.go
│ │ │ │ │ ├── doc.go
│ │ │ │ │ ├── simple_span_processor.go
│ │ │ │ │ └── tracer.go
│ │ │ │ ├── link.go
│ │ │ │ ├── provider.go
│ │ │ │ ├── sampler_env.go
│ │ │ │ ├── sampling.go
│ │ │ │ ├── simple_span_processor.go
│ │ │ │ ├── snapshot.go
│ │ │ │ ├── span.go
│ │ │ │ ├── span_exporter.go
│ │ │ │ ├── span_limits.go
│ │ │ │ ├── span_processor.go
│ │ │ │ └── tracer.go
│ │ │ └── version.go
│ │ ├── semconv/
│ │ │ ├── v1.20.0/
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── exception.go
│ │ │ │ ├── http.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── schema.go
│ │ │ │ └── trace.go
│ │ │ ├── v1.24.0/
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── event.go
│ │ │ │ ├── exception.go
│ │ │ │ ├── metric.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── schema.go
│ │ │ │ └── trace.go
│ │ │ ├── v1.37.0/
│ │ │ │ ├── MIGRATION.md
│ │ │ │ ├── attribute_group.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── error_type.go
│ │ │ │ ├── exception.go
│ │ │ │ └── schema.go
│ │ │ └── v1.39.0/
│ │ │ ├── MIGRATION.md
│ │ │ ├── attribute_group.go
│ │ │ ├── doc.go
│ │ │ ├── error_type.go
│ │ │ ├── exception.go
│ │ │ ├── otelconv/
│ │ │ │ └── metric.go
│ │ │ └── schema.go
│ │ ├── trace/
│ │ │ ├── LICENSE
│ │ │ ├── auto.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── embedded/
│ │ │ │ └── embedded.go
│ │ │ ├── hex.go
│ │ │ ├── internal/
│ │ │ │ └── telemetry/
│ │ │ │ ├── attr.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── id.go
│ │ │ │ ├── number.go
│ │ │ │ ├── resource.go
│ │ │ │ ├── scope.go
│ │ │ │ ├── span.go
│ │ │ │ ├── status.go
│ │ │ │ ├── traces.go
│ │ │ │ └── value.go
│ │ │ ├── nonrecording.go
│ │ │ ├── noop/
│ │ │ │ └── noop.go
│ │ │ ├── noop.go
│ │ │ ├── provider.go
│ │ │ ├── span.go
│ │ │ ├── trace.go
│ │ │ ├── tracer.go
│ │ │ └── tracestate.go
│ │ ├── trace.go
│ │ ├── verify_released_changelog.sh
│ │ └── version.go
│ └── proto/
│ └── otlp/
│ ├── LICENSE
│ ├── collector/
│ │ ├── metrics/
│ │ │ └── v1/
│ │ │ ├── metrics_service.pb.go
│ │ │ ├── metrics_service.pb.gw.go
│ │ │ └── metrics_service_grpc.pb.go
│ │ └── trace/
│ │ └── v1/
│ │ ├── trace_service.pb.go
│ │ ├── trace_service.pb.gw.go
│ │ └── trace_service_grpc.pb.go
│ ├── common/
│ │ └── v1/
│ │ └── common.pb.go
│ ├── metrics/
│ │ └── v1/
│ │ └── metrics.pb.go
│ ├── resource/
│ │ └── v1/
│ │ └── resource.pb.go
│ └── trace/
│ └── v1/
│ └── trace.pb.go
├── go.uber.org/
│ └── goleak/
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── doc.go
│ ├── internal/
│ │ └── stack/
│ │ ├── doc.go
│ │ ├── scan.go
│ │ └── stacks.go
│ ├── leaks.go
│ ├── options.go
│ ├── testmain.go
│ └── tracestack_new.go
├── go.yaml.in/
│ └── yaml/
│ └── v2/
│ ├── LICENSE
│ ├── LICENSE.libyaml
│ ├── NOTICE
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── md4/
│ │ │ ├── md4.go
│ │ │ └── md4block.go
│ │ ├── ocsp/
│ │ │ └── ocsp.go
│ │ ├── ripemd160/
│ │ │ ├── ripemd160.go
│ │ │ └── ripemd160block.go
│ │ └── x509roots/
│ │ └── fallback/
│ │ ├── LICENSE
│ │ ├── bundle/
│ │ │ ├── bundle.der
│ │ │ ├── bundle.go
│ │ │ └── roots.go
│ │ └── fallback.go
│ ├── net/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── context/
│ │ │ └── context.go
│ │ ├── html/
│ │ │ ├── atom/
│ │ │ │ ├── atom.go
│ │ │ │ └── table.go
│ │ │ ├── const.go
│ │ │ ├── doc.go
│ │ │ ├── doctype.go
│ │ │ ├── entity.go
│ │ │ ├── escape.go
│ │ │ ├── foreign.go
│ │ │ ├── iter.go
│ │ │ ├── node.go
│ │ │ ├── parse.go
│ │ │ ├── render.go
│ │ │ └── token.go
│ │ ├── http/
│ │ │ └── httpguts/
│ │ │ ├── guts.go
│ │ │ └── httplex.go
│ │ ├── http2/
│ │ │ ├── ascii.go
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── config.go
│ │ │ ├── config_go125.go
│ │ │ ├── config_go126.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── gotrack.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ ├── static_table.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── transport.go
│ │ │ ├── unencrypted.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority_rfc7540.go
│ │ │ ├── writesched_priority_rfc9218.go
│ │ │ ├── writesched_random.go
│ │ │ └── writesched_roundrobin.go
│ │ ├── idna/
│ │ │ ├── go118.go
│ │ │ ├── idna10.0.0.go
│ │ │ ├── idna9.0.0.go
│ │ │ ├── pre_go118.go
│ │ │ ├── punycode.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── trie.go
│ │ │ ├── trie12.0.0.go
│ │ │ ├── trie13.0.0.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ ├── httpcommon/
│ │ │ │ ├── ascii.go
│ │ │ │ ├── headermap.go
│ │ │ │ └── request.go
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ └── trace/
│ │ ├── events.go
│ │ ├── histogram.go
│ │ └── trace.go
│ ├── sync/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── errgroup/
│ │ │ └── errgroup.go
│ │ └── semaphore/
│ │ └── semaphore.go
│ ├── sys/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_bsd_386.s
│ │ │ ├── asm_bsd_amd64.s
│ │ │ ├── asm_bsd_arm.s
│ │ │ ├── asm_bsd_arm64.s
│ │ │ ├── asm_bsd_ppc64.s
│ │ │ ├── asm_bsd_riscv64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_loong64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_openbsd_mips64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── asm_zos_s390x.s
│ │ │ ├── auxv.go
│ │ │ ├── auxv_unsupported.go
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── bpxsvc_zos.go
│ │ │ ├── bpxsvc_zos.s
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dev_zos.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── fdset.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ifreq_linux.go
│ │ │ ├── ioctl_linux.go
│ │ │ ├── ioctl_signed.go
│ │ │ ├── ioctl_unsigned.go
│ │ │ ├── ioctl_zos.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mmap_nomremap.go
│ │ │ ├── mremap.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── ptrace_darwin.go
│ │ │ ├── ptrace_ios.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_dragonfly.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── sockcmsg_unix_other.go
│ │ │ ├── sockcmsg_zos.go
│ │ │ ├── symaddr_zos_s390x.s
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ ├── syscall_hurd.go
│ │ │ ├── syscall_hurd_386.go
│ │ │ ├── syscall_illumos.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_alarm.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gc_arm.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_loong64.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_openbsd_libc.go
│ │ │ ├── syscall_openbsd_mips64.go
│ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── syscall_zos_s390x.go
│ │ │ ├── sysvshm_linux.go
│ │ │ ├── sysvshm_unix.go
│ │ │ ├── sysvshm_unix_other.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── vgetrandom_linux.go
│ │ │ ├── vgetrandom_unsupported.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ ├── zerrors_linux.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_loong64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zerrors_zos_s390x.go
│ │ │ ├── zptrace_armnn_linux.go
│ │ │ ├── zptrace_linux_arm64.go
│ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ ├── zptrace_x86_linux.go
│ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ ├── zsyscall_linux.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_loong64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_386.s
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsyscall_zos_s390x.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_loong64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ ├── zsysnum_zos_s390x.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ ├── ztypes_linux.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_loong64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ ├── ztypes_solaris_amd64.go
│ │ │ └── ztypes_zos_s390x.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── registry/
│ │ │ ├── key.go
│ │ │ ├── mksyscall.go
│ │ │ ├── syscall.go
│ │ │ ├── value.go
│ │ │ └── zsyscall_windows.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── setupapi_windows.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── types_windows_arm64.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── term/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── codereview.cfg
│ │ ├── term.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_unsupported.go
│ │ ├── term_windows.go
│ │ └── terminal.go
│ ├── text/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── cases/
│ │ │ ├── cases.go
│ │ │ ├── context.go
│ │ │ ├── fold.go
│ │ │ ├── icu.go
│ │ │ ├── info.go
│ │ │ ├── map.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── collate/
│ │ │ ├── collate.go
│ │ │ ├── index.go
│ │ │ ├── option.go
│ │ │ ├── sort.go
│ │ │ └── tables.go
│ │ ├── internal/
│ │ │ ├── colltab/
│ │ │ │ ├── collelem.go
│ │ │ │ ├── colltab.go
│ │ │ │ ├── contract.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── numeric.go
│ │ │ │ ├── table.go
│ │ │ │ ├── trie.go
│ │ │ │ └── weighter.go
│ │ │ ├── internal.go
│ │ │ ├── language/
│ │ │ │ ├── common.go
│ │ │ │ ├── compact/
│ │ │ │ │ ├── compact.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── parents.go
│ │ │ │ │ ├── tables.go
│ │ │ │ │ └── tags.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── coverage.go
│ │ │ │ ├── language.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── match.go
│ │ │ │ ├── parse.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── match.go
│ │ │ └── tag/
│ │ │ └── tag.go
│ │ ├── language/
│ │ │ ├── coverage.go
│ │ │ ├── doc.go
│ │ │ ├── language.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── secure/
│ │ │ └── bidirule/
│ │ │ ├── bidirule.go
│ │ │ ├── bidirule10.0.0.go
│ │ │ └── bidirule9.0.0.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ └── unicode/
│ │ ├── bidi/
│ │ │ ├── bidi.go
│ │ │ ├── bracket.go
│ │ │ ├── core.go
│ │ │ ├── prop.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── norm/
│ │ │ ├── composition.go
│ │ │ ├── forminfo.go
│ │ │ ├── input.go
│ │ │ ├── iter.go
│ │ │ ├── normalize.go
│ │ │ ├── readwriter.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables11.0.0.go
│ │ │ ├── tables12.0.0.go
│ │ │ ├── tables13.0.0.go
│ │ │ ├── tables15.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── transform.go
│ │ │ └── trie.go
│ │ └── rangetable/
│ │ ├── merge.go
│ │ ├── rangetable.go
│ │ ├── tables10.0.0.go
│ │ ├── tables11.0.0.go
│ │ ├── tables12.0.0.go
│ │ ├── tables13.0.0.go
│ │ ├── tables15.0.0.go
│ │ └── tables9.0.0.go
│ └── time/
│ ├── LICENSE
│ ├── PATENTS
│ └── rate/
│ ├── rate.go
│ └── sometimes.go
├── google.golang.org/
│ ├── genproto/
│ │ └── googleapis/
│ │ ├── api/
│ │ │ ├── LICENSE
│ │ │ └── httpbody/
│ │ │ └── httpbody.pb.go
│ │ └── rpc/
│ │ ├── LICENSE
│ │ ├── errdetails/
│ │ │ └── error_details.pb.go
│ │ └── status/
│ │ └── status.pb.go
│ ├── grpc/
│ │ ├── AUTHORS
│ │ ├── CODE-OF-CONDUCT.md
│ │ ├── GOVERNANCE.md
│ │ ├── LICENSE
│ │ ├── MAINTAINERS.md
│ │ ├── SECURITY.md
│ │ ├── attributes/
│ │ │ └── attributes.go
│ │ ├── backoff/
│ │ │ └── backoff.go
│ │ ├── backoff.go
│ │ ├── balancer/
│ │ │ ├── balancer.go
│ │ │ ├── base/
│ │ │ │ ├── balancer.go
│ │ │ │ └── base.go
│ │ │ ├── conn_state_evaluator.go
│ │ │ ├── endpointsharding/
│ │ │ │ └── endpointsharding.go
│ │ │ ├── grpclb/
│ │ │ │ └── state/
│ │ │ │ └── state.go
│ │ │ ├── pickfirst/
│ │ │ │ ├── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ └── pickfirst.go
│ │ │ ├── roundrobin/
│ │ │ │ └── roundrobin.go
│ │ │ └── subconn.go
│ │ ├── balancer_wrapper.go
│ │ ├── binarylog/
│ │ │ └── grpc_binarylog_v1/
│ │ │ └── binarylog.pb.go
│ │ ├── call.go
│ │ ├── channelz/
│ │ │ └── channelz.go
│ │ ├── clientconn.go
│ │ ├── codec.go
│ │ ├── codes/
│ │ │ ├── code_string.go
│ │ │ └── codes.go
│ │ ├── connectivity/
│ │ │ └── connectivity.go
│ │ ├── credentials/
│ │ │ ├── credentials.go
│ │ │ ├── insecure/
│ │ │ │ └── insecure.go
│ │ │ └── tls.go
│ │ ├── dialoptions.go
│ │ ├── doc.go
│ │ ├── encoding/
│ │ │ ├── encoding.go
│ │ │ ├── encoding_v2.go
│ │ │ ├── gzip/
│ │ │ │ └── gzip.go
│ │ │ ├── internal/
│ │ │ │ └── internal.go
│ │ │ └── proto/
│ │ │ └── proto.go
│ │ ├── experimental/
│ │ │ └── stats/
│ │ │ ├── metricregistry.go
│ │ │ └── metrics.go
│ │ ├── grpclog/
│ │ │ ├── component.go
│ │ │ ├── grpclog.go
│ │ │ ├── internal/
│ │ │ │ ├── grpclog.go
│ │ │ │ ├── logger.go
│ │ │ │ └── loggerv2.go
│ │ │ ├── logger.go
│ │ │ └── loggerv2.go
│ │ ├── health/
│ │ │ ├── client.go
│ │ │ ├── grpc_health_v1/
│ │ │ │ ├── health.pb.go
│ │ │ │ └── health_grpc.pb.go
│ │ │ ├── logging.go
│ │ │ ├── producer.go
│ │ │ └── server.go
│ │ ├── interceptor.go
│ │ ├── internal/
│ │ │ ├── backoff/
│ │ │ │ └── backoff.go
│ │ │ ├── balancer/
│ │ │ │ └── gracefulswitch/
│ │ │ │ ├── config.go
│ │ │ │ └── gracefulswitch.go
│ │ │ ├── balancerload/
│ │ │ │ └── load.go
│ │ │ ├── binarylog/
│ │ │ │ ├── binarylog.go
│ │ │ │ ├── binarylog_testutil.go
│ │ │ │ ├── env_config.go
│ │ │ │ ├── method_logger.go
│ │ │ │ └── sink.go
│ │ │ ├── buffer/
│ │ │ │ └── unbounded.go
│ │ │ ├── channelz/
│ │ │ │ ├── channel.go
│ │ │ │ ├── channelmap.go
│ │ │ │ ├── funcs.go
│ │ │ │ ├── logging.go
│ │ │ │ ├── server.go
│ │ │ │ ├── socket.go
│ │ │ │ ├── subchannel.go
│ │ │ │ ├── syscall_linux.go
│ │ │ │ ├── syscall_nonlinux.go
│ │ │ │ └── trace.go
│ │ │ ├── credentials/
│ │ │ │ ├── credentials.go
│ │ │ │ ├── spiffe.go
│ │ │ │ ├── syscallconn.go
│ │ │ │ └── util.go
│ │ │ ├── envconfig/
│ │ │ │ ├── envconfig.go
│ │ │ │ ├── observability.go
│ │ │ │ └── xds.go
│ │ │ ├── experimental.go
│ │ │ ├── grpclog/
│ │ │ │ └── prefix_logger.go
│ │ │ ├── grpcsync/
│ │ │ │ ├── callback_serializer.go
│ │ │ │ ├── event.go
│ │ │ │ └── pubsub.go
│ │ │ ├── grpcutil/
│ │ │ │ ├── compressor.go
│ │ │ │ ├── encode_duration.go
│ │ │ │ ├── grpcutil.go
│ │ │ │ ├── metadata.go
│ │ │ │ ├── method.go
│ │ │ │ └── regex.go
│ │ │ ├── idle/
│ │ │ │ └── idle.go
│ │ │ ├── internal.go
│ │ │ ├── metadata/
│ │ │ │ └── metadata.go
│ │ │ ├── pretty/
│ │ │ │ └── pretty.go
│ │ │ ├── proxyattributes/
│ │ │ │ └── proxyattributes.go
│ │ │ ├── resolver/
│ │ │ │ ├── config_selector.go
│ │ │ │ ├── delegatingresolver/
│ │ │ │ │ └── delegatingresolver.go
│ │ │ │ ├── dns/
│ │ │ │ │ ├── dns_resolver.go
│ │ │ │ │ └── internal/
│ │ │ │ │ └── internal.go
│ │ │ │ ├── passthrough/
│ │ │ │ │ └── passthrough.go
│ │ │ │ └── unix/
│ │ │ │ └── unix.go
│ │ │ ├── serviceconfig/
│ │ │ │ ├── duration.go
│ │ │ │ └── serviceconfig.go
│ │ │ ├── stats/
│ │ │ │ ├── labels.go
│ │ │ │ ├── metrics_recorder_list.go
│ │ │ │ └── stats.go
│ │ │ ├── status/
│ │ │ │ └── status.go
│ │ │ ├── syscall/
│ │ │ │ ├── syscall_linux.go
│ │ │ │ └── syscall_nonlinux.go
│ │ │ ├── tcp_keepalive_others.go
│ │ │ ├── tcp_keepalive_unix.go
│ │ │ ├── tcp_keepalive_windows.go
│ │ │ └── transport/
│ │ │ ├── bdp_estimator.go
│ │ │ ├── client_stream.go
│ │ │ ├── controlbuf.go
│ │ │ ├── defaults.go
│ │ │ ├── flowcontrol.go
│ │ │ ├── handler_server.go
│ │ │ ├── http2_client.go
│ │ │ ├── http2_server.go
│ │ │ ├── http_util.go
│ │ │ ├── logging.go
│ │ │ ├── networktype/
│ │ │ │ └── networktype.go
│ │ │ ├── proxy.go
│ │ │ ├── server_stream.go
│ │ │ └── transport.go
│ │ ├── keepalive/
│ │ │ └── keepalive.go
│ │ ├── mem/
│ │ │ ├── buffer_pool.go
│ │ │ ├── buffer_slice.go
│ │ │ └── buffers.go
│ │ ├── metadata/
│ │ │ └── metadata.go
│ │ ├── peer/
│ │ │ └── peer.go
│ │ ├── picker_wrapper.go
│ │ ├── preloader.go
│ │ ├── reflection/
│ │ │ ├── adapt.go
│ │ │ ├── grpc_reflection_v1/
│ │ │ │ ├── reflection.pb.go
│ │ │ │ └── reflection_grpc.pb.go
│ │ │ ├── grpc_reflection_v1alpha/
│ │ │ │ ├── reflection.pb.go
│ │ │ │ └── reflection_grpc.pb.go
│ │ │ ├── internal/
│ │ │ │ └── internal.go
│ │ │ └── serverreflection.go
│ │ ├── resolver/
│ │ │ ├── dns/
│ │ │ │ └── dns_resolver.go
│ │ │ ├── map.go
│ │ │ └── resolver.go
│ │ ├── resolver_wrapper.go
│ │ ├── rpc_util.go
│ │ ├── server.go
│ │ ├── service_config.go
│ │ ├── serviceconfig/
│ │ │ └── serviceconfig.go
│ │ ├── stats/
│ │ │ ├── handlers.go
│ │ │ ├── metrics.go
│ │ │ └── stats.go
│ │ ├── status/
│ │ │ └── status.go
│ │ ├── stream.go
│ │ ├── stream_interfaces.go
│ │ ├── tap/
│ │ │ └── tap.go
│ │ ├── test/
│ │ │ └── bufconn/
│ │ │ └── bufconn.go
│ │ ├── trace.go
│ │ ├── trace_notrace.go
│ │ ├── trace_withtrace.go
│ │ └── version.go
│ └── protobuf/
│ ├── LICENSE
│ ├── PATENTS
│ ├── encoding/
│ │ ├── protodelim/
│ │ │ └── protodelim.go
│ │ ├── protojson/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ ├── encode.go
│ │ │ └── well_known_types.go
│ │ ├── prototext/
│ │ │ ├── decode.go
│ │ │ ├── doc.go
│ │ │ └── encode.go
│ │ └── protowire/
│ │ └── wire.go
│ ├── internal/
│ │ ├── descfmt/
│ │ │ └── stringer.go
│ │ ├── descopts/
│ │ │ └── options.go
│ │ ├── detrand/
│ │ │ └── rand.go
│ │ ├── editiondefaults/
│ │ │ ├── defaults.go
│ │ │ └── editions_defaults.binpb
│ │ ├── editionssupport/
│ │ │ └── editions.go
│ │ ├── encoding/
│ │ │ ├── defval/
│ │ │ │ └── default.go
│ │ │ ├── json/
│ │ │ │ ├── decode.go
│ │ │ │ ├── decode_number.go
│ │ │ │ ├── decode_string.go
│ │ │ │ ├── decode_token.go
│ │ │ │ └── encode.go
│ │ │ ├── messageset/
│ │ │ │ └── messageset.go
│ │ │ ├── tag/
│ │ │ │ └── tag.go
│ │ │ └── text/
│ │ │ ├── decode.go
│ │ │ ├── decode_number.go
│ │ │ ├── decode_string.go
│ │ │ ├── decode_token.go
│ │ │ ├── doc.go
│ │ │ └── encode.go
│ │ ├── errors/
│ │ │ └── errors.go
│ │ ├── filedesc/
│ │ │ ├── build.go
│ │ │ ├── desc.go
│ │ │ ├── desc_init.go
│ │ │ ├── desc_lazy.go
│ │ │ ├── desc_list.go
│ │ │ ├── desc_list_gen.go
│ │ │ ├── editions.go
│ │ │ ├── placeholder.go
│ │ │ └── presence.go
│ │ ├── filetype/
│ │ │ └── build.go
│ │ ├── flags/
│ │ │ ├── flags.go
│ │ │ ├── proto_legacy_disable.go
│ │ │ └── proto_legacy_enable.go
│ │ ├── genid/
│ │ │ ├── any_gen.go
│ │ │ ├── api_gen.go
│ │ │ ├── descriptor_gen.go
│ │ │ ├── doc.go
│ │ │ ├── duration_gen.go
│ │ │ ├── empty_gen.go
│ │ │ ├── field_mask_gen.go
│ │ │ ├── go_features_gen.go
│ │ │ ├── goname.go
│ │ │ ├── map_entry.go
│ │ │ ├── name.go
│ │ │ ├── source_context_gen.go
│ │ │ ├── struct_gen.go
│ │ │ ├── timestamp_gen.go
│ │ │ ├── type_gen.go
│ │ │ ├── wrappers.go
│ │ │ └── wrappers_gen.go
│ │ ├── impl/
│ │ │ ├── api_export.go
│ │ │ ├── api_export_opaque.go
│ │ │ ├── bitmap.go
│ │ │ ├── bitmap_race.go
│ │ │ ├── checkinit.go
│ │ │ ├── codec_extension.go
│ │ │ ├── codec_field.go
│ │ │ ├── codec_field_opaque.go
│ │ │ ├── codec_gen.go
│ │ │ ├── codec_map.go
│ │ │ ├── codec_message.go
│ │ │ ├── codec_message_opaque.go
│ │ │ ├── codec_messageset.go
│ │ │ ├── codec_tables.go
│ │ │ ├── codec_unsafe.go
│ │ │ ├── convert.go
│ │ │ ├── convert_list.go
│ │ │ ├── convert_map.go
│ │ │ ├── decode.go
│ │ │ ├── encode.go
│ │ │ ├── enum.go
│ │ │ ├── equal.go
│ │ │ ├── extension.go
│ │ │ ├── lazy.go
│ │ │ ├── legacy_enum.go
│ │ │ ├── legacy_export.go
│ │ │ ├── legacy_extension.go
│ │ │ ├── legacy_file.go
│ │ │ ├── legacy_message.go
│ │ │ ├── merge.go
│ │ │ ├── merge_gen.go
│ │ │ ├── message.go
│ │ │ ├── message_opaque.go
│ │ │ ├── message_opaque_gen.go
│ │ │ ├── message_reflect.go
│ │ │ ├── message_reflect_field.go
│ │ │ ├── message_reflect_field_gen.go
│ │ │ ├── message_reflect_gen.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_opaque.go
│ │ │ ├── presence.go
│ │ │ └── validate.go
│ │ ├── order/
│ │ │ ├── order.go
│ │ │ └── range.go
│ │ ├── pragma/
│ │ │ └── pragma.go
│ │ ├── protolazy/
│ │ │ ├── bufferreader.go
│ │ │ ├── lazy.go
│ │ │ └── pointer_unsafe.go
│ │ ├── set/
│ │ │ └── ints.go
│ │ ├── strs/
│ │ │ ├── strings.go
│ │ │ └── strings_unsafe.go
│ │ └── version/
│ │ └── version.go
│ ├── proto/
│ │ ├── checkinit.go
│ │ ├── decode.go
│ │ ├── decode_gen.go
│ │ ├── doc.go
│ │ ├── encode.go
│ │ ├── encode_gen.go
│ │ ├── equal.go
│ │ ├── extension.go
│ │ ├── merge.go
│ │ ├── messageset.go
│ │ ├── proto.go
│ │ ├── proto_methods.go
│ │ ├── proto_reflect.go
│ │ ├── reset.go
│ │ ├── size.go
│ │ ├── size_gen.go
│ │ ├── wrapperopaque.go
│ │ └── wrappers.go
│ ├── protoadapt/
│ │ └── convert.go
│ ├── reflect/
│ │ ├── protodesc/
│ │ │ ├── desc.go
│ │ │ ├── desc_init.go
│ │ │ ├── desc_resolve.go
│ │ │ ├── desc_validate.go
│ │ │ ├── editions.go
│ │ │ └── proto.go
│ │ ├── protoreflect/
│ │ │ ├── methods.go
│ │ │ ├── proto.go
│ │ │ ├── source.go
│ │ │ ├── source_gen.go
│ │ │ ├── type.go
│ │ │ ├── value.go
│ │ │ ├── value_equal.go
│ │ │ ├── value_union.go
│ │ │ └── value_unsafe.go
│ │ └── protoregistry/
│ │ └── registry.go
│ ├── runtime/
│ │ ├── protoiface/
│ │ │ ├── legacy.go
│ │ │ └── methods.go
│ │ └── protoimpl/
│ │ ├── impl.go
│ │ └── version.go
│ └── types/
│ ├── descriptorpb/
│ │ └── descriptor.pb.go
│ ├── dynamicpb/
│ │ ├── dynamic.go
│ │ └── types.go
│ ├── gofeaturespb/
│ │ └── go_features.pb.go
│ ├── known/
│ │ ├── anypb/
│ │ │ └── any.pb.go
│ │ ├── apipb/
│ │ │ └── api.pb.go
│ │ ├── durationpb/
│ │ │ └── duration.pb.go
│ │ ├── emptypb/
│ │ │ └── empty.pb.go
│ │ ├── fieldmaskpb/
│ │ │ └── field_mask.pb.go
│ │ ├── sourcecontextpb/
│ │ │ └── source_context.pb.go
│ │ ├── structpb/
│ │ │ └── struct.pb.go
│ │ ├── timestamppb/
│ │ │ └── timestamp.pb.go
│ │ ├── typepb/
│ │ │ └── type.pb.go
│ │ └── wrapperspb/
│ │ └── wrappers.pb.go
│ └── pluginpb/
│ └── plugin.pb.go
├── gopkg.in/
│ ├── cenkalti/
│ │ └── backoff.v1/
│ │ ├── LICENSE
│ │ ├── backoff.go
│ │ ├── context.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── tries.go
│ ├── guregu/
│ │ └── null.v3/
│ │ ├── LICENSE
│ │ ├── bool.go
│ │ ├── float.go
│ │ ├── int.go
│ │ ├── string.go
│ │ └── time.go
│ ├── validator.v2/
│ │ ├── LICENSE
│ │ ├── builtins.go
│ │ ├── doc.go
│ │ └── validator.go
│ └── yaml.v3/
│ ├── LICENSE
│ ├── NOTICE
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
└── modules.txt
Showing preview only (2,170K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (23101 symbols across 1203 files)
FILE: .github/workflows/xk6-tests/xk6-js-test/jstest.go
function init (line 11) | func init() {
type RootModule (line 16) | type RootModule struct
method NewModuleInstance (line 39) | func (*RootModule) NewModuleInstance(vu modules.VU) modules.Instance {
type JSTest (line 19) | type JSTest struct
method Exports (line 48) | func (j *JSTest) Exports() modules.Exports {
method Foo (line 53) | func (j *JSTest) Foo(arg float64) (bool, error) {
function New (line 33) | func New() *RootModule {
FILE: .github/workflows/xk6-tests/xk6-output-test/outputtest.go
function init (line 11) | func init() {
type Output (line 18) | type Output struct
method Description (line 25) | func (o *Output) Description() string {
method Start (line 30) | func (o *Output) Start() error {
method AddMetricSamples (line 41) | func (o *Output) AddMetricSamples(sampleContainers []metrics.SampleCon...
method Stop (line 52) | func (o *Output) Stop() error {
FILE: .github/workflows/xk6-tests/xk6-test.js
function handleSummary (line 12) | function handleSummary(data) {
FILE: api/v1/client/client.go
type Client (line 18) | type Client struct
method CallAPI (line 63) | func (c *Client) CallAPI(ctx context.Context, method string, rel *url....
type Option (line 26) | type Option
function New (line 29) | func New(base string, options ...Option) (*Client, error) {
function WithHTTPClient (line 48) | func WithHTTPClient(httpClient *http.Client) Option {
function WithLogger (line 55) | func WithLogger(logger *logrus.Entry) Option {
FILE: api/v1/client/metrics.go
method Metrics (line 12) | func (c *Client) Metrics(ctx context.Context) (ret []v1.Metric, err erro...
FILE: api/v1/client/status.go
method Status (line 12) | func (c *Client) Status(ctx context.Context) (ret v1.Status, err error) {
method SetStatus (line 24) | func (c *Client) SetStatus(ctx context.Context, patch v1.Status) (ret v1...
FILE: api/v1/control_surface.go
type ControlSurface (line 14) | type ControlSurface struct
FILE: api/v1/errors.go
type Error (line 11) | type Error struct
method Error (line 17) | func (e Error) Error() string {
type ErrorResponse (line 22) | type ErrorResponse struct
function apiError (line 26) | func apiError(rw http.ResponseWriter, title, detail string, status int) {
FILE: api/v1/group.go
type Check (line 10) | type Check struct
function NewCheck (line 20) | func NewCheck(c *lib.Check) Check {
type Group (line 31) | type Group struct
method SetToManyReferenceIDs (line 72) | func (g *Group) SetToManyReferenceIDs(name string, ids []string) error {
method SetToOneReferenceID (line 84) | func (g *Group) SetToOneReferenceID(name, id string) error {
function NewGroup (line 45) | func NewGroup(g *lib.Group, parent *Group) *Group {
function FlattenGroup (line 97) | func FlattenGroup(g *Group) []*Group {
FILE: api/v1/group_jsonapi.go
type groupJSONAPI (line 5) | type groupJSONAPI struct
type groupsJSONAPI (line 9) | type groupsJSONAPI struct
type groupData (line 13) | type groupData struct
method UnmarshalJSON (line 35) | func (g *groupData) UnmarshalJSON(data []byte) error {
type groupRelations (line 20) | type groupRelations struct
type groupRelation (line 29) | type groupRelation struct
function newGroupJSONAPI (line 68) | func newGroupJSONAPI(g *Group) groupJSONAPI {
function newGroupsJSONAPI (line 74) | func newGroupsJSONAPI(groups []*Group) groupsJSONAPI {
function newGroupData (line 86) | func newGroupData(group *Group) groupData {
FILE: api/v1/group_routes.go
function handleGetGroups (line 8) | func handleGetGroups(cs *ControlSurface, rw http.ResponseWriter, _ *http...
function handleGetGroup (line 20) | func handleGetGroup(cs *ControlSurface, rw http.ResponseWriter, _ *http....
FILE: api/v1/group_routes_test.go
function getTestPreInitState (line 23) | func getTestPreInitState(tb testing.TB) *lib.TestPreInitState {
function getTestRunState (line 35) | func getTestRunState(tb testing.TB, options lib.Options, runner lib.Runn...
function getControlSurface (line 47) | func getControlSurface(tb testing.TB, testState *lib.TestRunState) *Cont...
function TestGetGroups (line 67) | func TestGetGroups(t *testing.T) {
FILE: api/v1/group_test.go
function TestNewCheck (line 11) | func TestNewCheck(t *testing.T) {
function TestNewGroup (line 28) | func TestNewGroup(t *testing.T) {
function TestFlattenGroup (line 87) | func TestFlattenGroup(t *testing.T) {
FILE: api/v1/metric.go
type NullMetricType (line 14) | type NullMetricType struct
method MarshalJSON (line 20) | func (t NullMetricType) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 28) | func (t *NullMetricType) UnmarshalJSON(data []byte) error {
type NullValueType (line 38) | type NullValueType struct
method MarshalJSON (line 44) | func (t NullValueType) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 52) | func (t *NullValueType) UnmarshalJSON(data []byte) error {
type Metric (line 62) | type Metric struct
function NewMetric (line 74) | func NewMetric(m *metrics.Metric, t time.Duration) Metric {
FILE: api/v1/metric_jsonapi.go
type MetricsJSONAPI (line 10) | type MetricsJSONAPI struct
method Metrics (line 53) | func (m MetricsJSONAPI) Metrics() []Metric {
type metricJSONAPI (line 14) | type metricJSONAPI struct
type metricData (line 18) | type metricData struct
function newMetricEnvelope (line 24) | func newMetricEnvelope(m *metrics.Metric, t time.Duration) metricJSONAPI {
function newMetricsJSONAPI (line 30) | func newMetricsJSONAPI(list map[string]*metrics.Metric, t time.Duration)...
function newMetricData (line 42) | func newMetricData(m *metrics.Metric, t time.Duration) metricData {
FILE: api/v1/metric_routes.go
function handleGetMetrics (line 9) | func handleGetMetrics(cs *ControlSurface, rw http.ResponseWriter, _ *htt...
function handleGetMetric (line 27) | func handleGetMetric(cs *ControlSurface, rw http.ResponseWriter, _ *http...
FILE: api/v1/metric_routes_test.go
function TestGetMetrics (line 18) | func TestGetMetrics(t *testing.T) {
function TestGetMetric (line 77) | func TestGetMetric(t *testing.T) {
FILE: api/v1/metric_test.go
function TestNullMetricTypeJSON (line 14) | func TestNullMetricTypeJSON(t *testing.T) {
function TestNullValueTypeJSON (line 52) | func TestNullValueTypeJSON(t *testing.T) {
function TestNewMetric (line 88) | func TestNewMetric(t *testing.T) {
FILE: api/v1/routes.go
function NewHandler (line 9) | func NewHandler(cs *ControlSurface) http.Handler {
FILE: api/v1/setup_jsonapi.go
type setUpJSONAPI (line 3) | type setUpJSONAPI struct
type setUpData (line 7) | type setUpData struct
function newSetUpJSONAPI (line 13) | func newSetUpJSONAPI(setup any) setUpJSONAPI {
FILE: api/v1/setup_teardown_routes.go
type NullSetupData (line 10) | type NullSetupData struct
type SetupData (line 16) | type SetupData struct
function handleSetupDataOutput (line 20) | func handleSetupDataOutput(rw http.ResponseWriter, setupData json.RawMes...
function handleGetSetupData (line 39) | func handleGetSetupData(cs *ControlSurface, rw http.ResponseWriter, _ *h...
function handleSetSetupData (line 44) | func handleSetSetupData(cs *ControlSurface, rw http.ResponseWriter, r *h...
function handleRunSetup (line 70) | func handleRunSetup(cs *ControlSurface, rw http.ResponseWriter, r *http....
function handleRunTeardown (line 83) | func handleRunTeardown(cs *ControlSurface, rw http.ResponseWriter, r *ht...
FILE: api/v1/setup_teardown_routes_test.go
function TestSetupData (line 28) | func TestSetupData(t *testing.T) {
FILE: api/v1/status.go
type Status (line 10) | type Status struct
function newStatus (line 21) | func newStatus(cs *ControlSurface) Status {
FILE: api/v1/status_jsonapi.go
type StatusJSONAPI (line 4) | type StatusJSONAPI struct
method Status (line 20) | func (s StatusJSONAPI) Status() Status {
function NewStatusJSONAPI (line 9) | func NewStatusJSONAPI(s Status) StatusJSONAPI {
type statusData (line 24) | type statusData struct
function newStatusJSONAPIFromEngine (line 30) | func newStatusJSONAPIFromEngine(cs *ControlSurface) StatusJSONAPI {
FILE: api/v1/status_routes.go
function handleGetStatus (line 16) | func handleGetStatus(cs *ControlSurface, rw http.ResponseWriter, _ *http...
function getFirstExternallyControlledExecutor (line 27) | func getFirstExternallyControlledExecutor(execScheduler *execution.Sched...
function handlePatchStatus (line 37) | func handlePatchStatus(cs *ControlSurface, rw http.ResponseWriter, r *ht...
FILE: api/v1/status_routes_test.go
function TestGetStatus (line 26) | func TestGetStatus(t *testing.T) {
function TestPatchStatus (line 66) | func TestPatchStatus(t *testing.T) {
FILE: cloudapi/api.go
type ResultStatus (line 15) | type ResultStatus
constant ResultStatusPassed (line 19) | ResultStatusPassed ResultStatus = 0
constant ResultStatusFailed (line 21) | ResultStatusFailed ResultStatus = 1
type ThresholdResult (line 25) | type ThresholdResult
type TestRun (line 28) | type TestRun struct
type LogEntry (line 41) | type LogEntry struct
type CreateTestRunResponse (line 47) | type CreateTestRunResponse struct
type TestProgressResponse (line 54) | type TestProgressResponse struct
type LoginResponse (line 62) | type LoginResponse struct
type ValidateTokenResponse (line 67) | type ValidateTokenResponse struct
method handleLogEntriesFromCloud (line 73) | func (c *Client) handleLogEntriesFromCloud(ctrr CreateTestRunResponse) {
method CreateTestRun (line 87) | func (c *Client) CreateTestRun(testRun *TestRun) (*CreateTestRunResponse...
method makeCreateTestRunRequest (line 115) | func (c *Client) makeCreateTestRunRequest(url string, testRun *TestRun) ...
method StartCloudTestRun (line 167) | func (c *Client) StartCloudTestRun(name string, projectID int64, arc *li...
method UploadTestOnly (line 178) | func (c *Client) UploadTestOnly(name string, projectID int64, arc *lib.A...
method uploadArchive (line 188) | func (c *Client) uploadArchive(fields [][2]string, arc *lib.Archive) (*C...
method TestFinished (line 230) | func (c *Client) TestFinished(referenceID string, thresholds ThresholdRe...
method GetTestProgress (line 257) | func (c *Client) GetTestProgress(referenceID string) (*TestProgressRespo...
method StopCloudTestRun (line 273) | func (c *Client) StopCloudTestRun(referenceID string) error {
type validateOptionsRequest (line 282) | type validateOptionsRequest struct
method ValidateOptions (line 287) | func (c *Client) ValidateOptions(options lib.Options) error {
type loginRequest (line 297) | type loginRequest struct
method Login (line 303) | func (c *Client) Login(email string, password string) (*LoginResponse, e...
type validateTokenRequest (line 319) | type validateTokenRequest struct
method ValidateToken (line 324) | func (c *Client) ValidateToken() (*ValidateTokenResponse, error) {
FILE: cloudapi/api_test.go
function TestNewClient (line 29) | func TestNewClient(t *testing.T) {
function TestCreateTestRun (line 41) | func TestCreateTestRun(t *testing.T) {
function TestFinished (line 368) | func TestFinished(t *testing.T) {
function TestIdempotencyKey (line 387) | func TestIdempotencyKey(t *testing.T) {
function fprint (line 415) | func fprint(t *testing.T, w io.Writer, format string) int {
FILE: cloudapi/client.go
constant RetryInterval (line 20) | RetryInterval = 500 * time.Millisecond
constant MaxRetries (line 22) | MaxRetries = 3
constant k6IdempotencyKeyHeader (line 24) | k6IdempotencyKeyHeader = "K6-Idempotency-Key"
type Client (line 28) | type Client struct
method SetStackID (line 56) | func (c *Client) SetStackID(stackID int64) {
method BaseURL (line 61) | func (c *Client) BaseURL() string {
method NewRequest (line 69) | func (c *Client) NewRequest(method, url string, data any) (*http.Reque...
method Do (line 90) | func (c *Client) Do(req *http.Request, v any) error {
method prepareHeaders (line 126) | func (c *Client) prepareHeaders(req *http.Request) {
method do (line 146) | func (c *Client) do(req *http.Request, v any, attempt int) (retry bool...
function NewClient (line 42) | func NewClient(logger logrus.FieldLogger, token, host, version string, t...
function CheckResponse (line 182) | func CheckResponse(r *http.Response) error {
function shouldRetry (line 217) | func shouldRetry(resp *http.Response, err error, attempt, maxAttempts in...
function shouldAddIdempotencyKey (line 233) | func shouldAddIdempotencyKey(req *http.Request) bool {
function randomStrHex (line 244) | func randomStrHex() string {
FILE: cloudapi/cloudapi_easyjson.go
function easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi (line 20) | func easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi(in *jlexer.Lexer, out *msgSt...
function easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi (line 103) | func easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi(out *jwriter.Writer, in msgS...
method MarshalEasyJSON (line 155) | func (v msgStreams) MarshalEasyJSON(w *jwriter.Writer) {
method UnmarshalEasyJSON (line 160) | func (v *msgStreams) UnmarshalEasyJSON(l *jlexer.Lexer) {
function easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi1 (line 163) | func easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi1(in *jlexer.Lexer, out *msgD...
function easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi1 (line 210) | func easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi1(out *jwriter.Writer, in msg...
method MarshalEasyJSON (line 244) | func (v msgDroppedEntries) MarshalEasyJSON(w *jwriter.Writer) {
method UnmarshalEasyJSON (line 249) | func (v *msgDroppedEntries) UnmarshalEasyJSON(l *jlexer.Lexer) {
function easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi2 (line 252) | func easyjsonC9ac27e5DecodeGoK6IoK6Cloudapi2(in *jlexer.Lexer, out *msg) {
function easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi2 (line 327) | func easyjsonC9ac27e5EncodeGoK6IoK6Cloudapi2(out *jwriter.Writer, in msg) {
method MarshalEasyJSON (line 367) | func (v msg) MarshalEasyJSON(w *jwriter.Writer) {
method UnmarshalEasyJSON (line 372) | func (v *msg) UnmarshalEasyJSON(l *jlexer.Lexer) {
FILE: cloudapi/config.go
constant LegacyCloudConfigKey (line 15) | LegacyCloudConfigKey = "loadimpact"
type Config (line 20) | type Config struct
method Apply (line 111) | func (c Config) Apply(cfg Config) Config {
function NewConfig (line 75) | func NewConfig() Config {
function GetConsolidatedConfig (line 194) | func GetConsolidatedConfig(
function mergeFromCloudOptionAndExternal (line 245) | func mergeFromCloudOptionAndExternal(
function GetTemporaryCloudConfig (line 289) | func GetTemporaryCloudConfig(
function pickSource (line 310) | func pickSource(
FILE: cloudapi/config_test.go
function TestConfigApply (line 15) | func TestConfigApply(t *testing.T) {
function TestGetConsolidatedConfig (line 58) | func TestGetConsolidatedConfig(t *testing.T) {
function TestGetConsolidatedConfig_WithLegacyOnly (line 88) | func TestGetConsolidatedConfig_WithLegacyOnly(t *testing.T) {
function TestGetConsolidatedConfig_LegacyHasLowerPriority (line 104) | func TestGetConsolidatedConfig_LegacyHasLowerPriority(t *testing.T) {
function TestGetConsolidatedConfig_EnvHasHigherPriority (line 120) | func TestGetConsolidatedConfig_EnvHasHigherPriority(t *testing.T) {
FILE: cloudapi/errors.go
type ResponseError (line 18) | type ResponseError struct
method Error (line 32) | func (e ResponseError) Error() string {
function contains (line 28) | func contains(s []string, e string) bool {
FILE: cloudapi/errors_test.go
function TestContains (line 9) | func TestContains(t *testing.T) {
function TestErrorResponse_Error (line 18) | func TestErrorResponse_Error(t *testing.T) {
FILE: cloudapi/logs.go
type msg (line 23) | type msg struct
method Log (line 42) | func (m *msg) Log(logger logrus.FieldLogger) int64 {
type msgStreams (line 29) | type msgStreams struct
type msgDroppedEntries (line 35) | type msgDroppedEntries struct
function labelsToLogrusFields (line 83) | func labelsToLogrusFields(labels map[string]string) logrus.Fields {
method logtailConn (line 93) | func (c *Config) logtailConn(ctx context.Context, referenceID string, si...
method StreamLogsToLogger (line 121) | func (c *Config) StreamLogsToLogger(
type sleeper (line 211) | type sleeper interface
type sleeperFunc (line 216) | type sleeperFunc
method Sleep (line 218) | func (sfn sleeperFunc) Sleep(d time.Duration) {
function retry (line 227) | func retry(s sleeper, attempts int, interval, maxDuration time.Duration,...
FILE: cloudapi/logs_test.go
function TestMsgParsing (line 27) | func TestMsgParsing(t *testing.T) {
function TestMSGLog (line 74) | func TestMSGLog(t *testing.T) {
function TestRetry (line 120) | func TestRetry(t *testing.T) {
function TestStreamLogsToLogger (line 194) | func TestStreamLogsToLogger(t *testing.T) {
FILE: cloudapi/run_status.go
type RunStatus (line 5) | type RunStatus
constant RunStatusCreated (line 9) | RunStatusCreated RunStatus = -2
constant RunStatusValidated (line 10) | RunStatusValidated RunStatus = -1
constant RunStatusQueued (line 11) | RunStatusQueued RunStatus = 0
constant RunStatusInitializing (line 12) | RunStatusInitializing RunStatus = 1
constant RunStatusRunning (line 13) | RunStatusRunning RunStatus = 2
constant RunStatusFinished (line 14) | RunStatusFinished RunStatus = 3
constant RunStatusTimedOut (line 15) | RunStatusTimedOut RunStatus = 4
constant RunStatusAbortedUser (line 16) | RunStatusAbortedUser RunStatus = 5
constant RunStatusAbortedSystem (line 17) | RunStatusAbortedSystem RunStatus = 6
constant RunStatusAbortedScriptError (line 18) | RunStatusAbortedScriptError RunStatus = 7
constant RunStatusAbortedThreshold (line 19) | RunStatusAbortedThreshold RunStatus = 8
constant RunStatusAbortedLimit (line 20) | RunStatusAbortedLimit RunStatus = 9
constant RunStatusArchived (line 21) | RunStatusArchived RunStatus = 10
FILE: cloudapi/util.go
function URLForResults (line 4) | func URLForResults(refID string, config Config) string {
FILE: cloudapi/util_test.go
function TestURLForResults (line 11) | func TestURLForResults(t *testing.T) {
FILE: cmd/execute.go
function Execute (line 13) | func Execute() {
FILE: cmd/state/env.go
function ParseEnvKeyValue (line 6) | func ParseEnvKeyValue(kv string) (string, string) {
function BuildEnvMap (line 15) | func BuildEnvMap(environ []string) map[string]string {
FILE: cmd/state/state.go
constant AutoExtensionResolution (line 29) | AutoExtensionResolution = "K6_AUTO_EXTENSION_RESOLUTION"
constant DependenciesManifest (line 32) | DependenciesManifest = "K6_DEPENDENCIES_MANIFEST"
constant communityExtensionsCatalog (line 35) | communityExtensionsCatalog = "oss"
constant defaultBuildServiceURL (line 38) | defaultBuildServiceURL = "https://ingest.k6.io/builder/api/v1"
constant defaultConfigFileName (line 40) | defaultConfigFileName = "config.json"
constant defaultBinaryCacheDir (line 41) | defaultBinaryCacheDir = "builds"
type GlobalState (line 57) | type GlobalState struct
function NewGlobalState (line 93) | func NewGlobalState(ctx context.Context) *GlobalState {
type GlobalFlags (line 176) | type GlobalFlags struct
function GetDefaultFlags (line 195) | func GetDefaultFlags(homeDir string, cacheDir string) GlobalFlags {
function getFlags (line 208) | func getFlags(defaultFlags GlobalFlags, env map[string]string, args []st...
FILE: cmd/tests/global_state.go
function NewGlobalTestState (line 15) | func NewGlobalTestState(tb testing.TB) *GlobalTestState {
FILE: errext/abort_reason.go
type AbortReason (line 7) | type AbortReason
constant AbortedByUser (line 11) | AbortedByUser AbortReason = iota + 1
constant AbortedByThreshold (line 12) | AbortedByThreshold
constant AbortedByThresholdsAfterTestEnd (line 13) | AbortedByThresholdsAfterTestEnd
constant AbortedByScriptError (line 14) | AbortedByScriptError
constant AbortedByScriptAbort (line 15) | AbortedByScriptAbort
constant AbortedByTimeout (line 16) | AbortedByTimeout
constant AbortedByOutput (line 17) | AbortedByOutput
type HasAbortReason (line 21) | type HasAbortReason interface
function WithAbortReasonIfNone (line 30) | func WithAbortReasonIfNone(err error, abortReason AbortReason) error {
type withAbortReasonError (line 42) | type withAbortReasonError struct
method Unwrap (line 47) | func (ar withAbortReasonError) Unwrap() error {
method AbortReason (line 51) | func (ar withAbortReasonError) AbortReason() AbortReason {
FILE: errext/errext_test.go
function assertHasHint (line 13) | func assertHasHint(t *testing.T, err error, hint string) {
function assertHasExitCode (line 20) | func assertHasExitCode(t *testing.T, err error, exitcode exitcodes.ExitC...
function TestErrextHelpers (line 27) | func TestErrextHelpers(t *testing.T) {
FILE: errext/exception.go
type Exception (line 6) | type Exception interface
FILE: errext/exit_code.go
type HasExitCode (line 14) | type HasExitCode interface
function WithExitCodeIfNone (line 23) | func WithExitCodeIfNone(err error, exitCode exitcodes.ExitCode) error {
type withExitCodeError (line 36) | type withExitCodeError struct
method Unwrap (line 41) | func (wh withExitCodeError) Unwrap() error {
method ExitCode (line 45) | func (wh withExitCodeError) ExitCode() exitcodes.ExitCode {
FILE: errext/exitcodes/codes.go
type ExitCode (line 5) | type ExitCode
constant CloudTestRunFailed (line 11) | CloudTestRunFailed ExitCode = 97
constant CloudFailedToGetProgress (line 15) | CloudFailedToGetProgress ExitCode = 98
constant ThresholdsHaveFailed (line 18) | ThresholdsHaveFailed ExitCode = 99
constant SetupTimeout (line 21) | SetupTimeout ExitCode = 100
constant TeardownTimeout (line 24) | TeardownTimeout ExitCode = 101
constant GenericTimeout (line 27) | GenericTimeout ExitCode = 102
constant ScriptStoppedFromRESTAPI (line 31) | ScriptStoppedFromRESTAPI ExitCode = 103
constant InvalidConfig (line 34) | InvalidConfig ExitCode = 104
constant ExternalAbort (line 39) | ExternalAbort ExitCode = 105
constant CannotStartRESTAPI (line 42) | CannotStartRESTAPI ExitCode = 106
constant ScriptException (line 46) | ScriptException ExitCode = 107
constant ScriptAborted (line 50) | ScriptAborted ExitCode = 108
constant GoPanic (line 53) | GoPanic ExitCode = 109
constant MarkedAsFailed (line 56) | MarkedAsFailed ExitCode = 110
FILE: errext/format.go
function Format (line 10) | func Format(err error) (string, map[string]any) {
FILE: errext/format_test.go
function TestFormat (line 12) | func TestFormat(t *testing.T) {
type fakeExceptionError (line 54) | type fakeExceptionError struct
method StackTrace (line 60) | func (e fakeExceptionError) StackTrace() string {
method AbortReason (line 64) | func (e fakeExceptionError) AbortReason() errext.AbortReason {
method Unwrap (line 68) | func (e fakeExceptionError) Unwrap() error {
FILE: errext/hint.go
type HasHint (line 8) | type HasHint interface
function WithHint (line 17) | func WithHint(err error, hint string) error {
type withHintError (line 24) | type withHintError struct
method Unwrap (line 29) | func (wh withHintError) Unwrap() error {
method Hint (line 33) | func (wh withHintError) Hint() string {
FILE: errext/interrupt_error.go
type InterruptError (line 10) | type InterruptError struct
method Error (line 20) | func (i *InterruptError) Error() string {
method ExitCode (line 25) | func (i *InterruptError) ExitCode() exitcodes.ExitCode {
method AbortReason (line 31) | func (i *InterruptError) AbortReason() AbortReason {
constant AbortTest (line 36) | AbortTest = "test aborted"
constant MarkedAsFailedTest (line 39) | MarkedAsFailedTest = "test marked as failed"
function IsInterruptError (line 42) | func IsInterruptError(err error) bool {
FILE: examples/browser/locator_pom.js
class Bet (line 28) | class Bet {
method constructor (line 29) | constructor(page) {
method goto (line 36) | goto() {
method heads (line 40) | heads() {
method tails (line 47) | tails() {
method current (line 54) | current() {
FILE: examples/browser/multiple-scenario.js
function messages (line 35) | async function messages() {
function news (line 45) | async function news() {
FILE: examples/browser/throttle.js
function normal (line 43) | async function normal() {
function networkThrottled (line 54) | async function networkThrottled() {
function cpuThrottled (line 67) | async function cpuThrottled() {
FILE: examples/enhanced/user.ts
type User (line 1) | interface User {
class UserAccount (line 6) | class UserAccount implements User {
method constructor (line 10) | constructor(name: string) {
function newUser (line 16) | function newUser(name: string): User {
FILE: examples/experimental/redis.js
function measureRedisPerformance (line 31) | async function measureRedisPerformance() {
function setup (line 51) | async function setup() {
function measureUsingRedisData (line 55) | async function measureUsingRedisData() {
function teardown (line 69) | async function teardown() {
function handleSummary (line 73) | function handleSummary(data) {
FILE: examples/experimental/streams.js
function numbersStream (line 4) | function numbersStream() {
FILE: examples/grpc_client_streaming.js
constant COORD_FACTOR (line 4) | const COORD_FACTOR = 1e7;
constant GRPC_ADDR (line 9) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
constant GRPC_PROTO_PATH (line 10) | const GRPC_PROTO_PATH = __ENV.GRPC_PROTO_PATH || '../lib/testutils/grpcs...
FILE: examples/grpc_healthcheck.js
constant GRPC_ADDR (line 8) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
FILE: examples/grpc_invoke.js
constant GRPC_ADDR (line 8) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
constant GRPC_PROTO_PATH (line 9) | const GRPC_PROTO_PATH = __ENV.GRPC_PROTO_PATH || '../internal/lib/testut...
FILE: examples/grpc_reflection.js
constant GRPC_ADDR (line 8) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
FILE: examples/grpc_server/main.go
function main (line 49) | func main() {
FILE: examples/grpc_server_streaming.js
constant COORD_FACTOR (line 4) | const COORD_FACTOR = 1e7;
constant GRPC_ADDR (line 9) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
constant GRPC_PROTO_PATH (line 10) | const GRPC_PROTO_PATH = __ENV.GRPC_PROTO_PATH || '../internal/lib/testut...
FILE: examples/jwt.js
function sign (line 11) | function sign(data, hashAlg, secret) {
function encode (line 20) | function encode(payload, secret, algorithm) {
function decode (line 28) | function decode(token, secret, algorithm) {
FILE: examples/pantheon.js
function doFrontPage (line 119) | function doFrontPage() {
function doLogin (line 130) | function doLogin() {
function doCategory (line 164) | function doCategory(category) {
function doProductPage (line 177) | function doProductPage(product) {
function addProductToCart (line 194) | function addProductToCart(url, productID, formID, formBuildID, formToken) {
function doCheckout (line 212) | function doCheckout() {
function doLogout (line 321) | function doLogout() {
FILE: examples/pantheontest.js
function thinktime (line 144) | function thinktime(t) {
function firstpage (line 150) | function firstpage() {
function loginpage (line 164) | function loginpage() {
function do_login (line 181) | function do_login(username, password) {
function carrypage (line 203) | function carrypage() {
function drupalbag (line 214) | function drupalbag() {
function add_drupalbag (line 228) | function add_drupalbag() {
function cartreview (line 251) | function cartreview() {
function cartsubmit (line 266) | function cartsubmit() {
function checkout (line 293) | function checkout() {
function shipping (line 324) | function shipping() {
function review_submit (line 348) | function review_submit() {
function logout (line 374) | function logout() {
function page_dependencies (line 397) | function page_dependencies(cached) {
FILE: examples/secrets/mock_server.go
constant serverAddr (line 32) | serverAddr = ":8888"
constant expectedToken (line 34) | expectedToken = "Bearer YOUR_API_TOKEN_HERE"
constant readTimeout (line 35) | readTimeout = 10 * time.Second
constant writeTimeout (line 36) | writeTimeout = 10 * time.Second
type secretResponse (line 40) | type secretResponse struct
function main (line 45) | func main() {
function createSecretHandler (line 105) | func createSecretHandler(mockSecrets map[string]string) http.HandlerFunc {
function getSecretKeys (line 179) | func getSecretKeys(secrets map[string]string) []string {
FILE: examples/source_map/issue_1804/imported.js
function f1 (line 1) | function f1() {
function f2 (line 5) | function f2() {
function f3 (line 9) | function f3() {
FILE: examples/source_map/typescript_template/test1.ts
function coolThrow (line 1) | function coolThrow(s: string) {
FILE: examples/timers.js
function timeout (line 6) | function timeout() {
function pad (line 25) | function pad(number) {
function logline (line 29) | function logline(now) {
FILE: examples/webcrypto/derive_bits/derive-bits-ecdh.js
function deriveSharedSecret (line 38) | async function deriveSharedSecret(privateKey, publicKey) {
FILE: examples/webcrypto/derive_bits/derive-bits-pbkdf2.js
function stringToArrayBuffer (line 1) | function stringToArrayBuffer(str) {
FILE: examples/webcrypto/derive_key/derive-key-pbkdf2.js
function stringToArrayBuffer (line 1) | function stringToArrayBuffer(str) {
FILE: examples/webcrypto/digest.js
function arrayBufferToHex (line 12) | function arrayBufferToHex(buffer) {
function stringToArrayBuffer (line 18) | function stringToArrayBuffer(s) {
FILE: examples/webcrypto/encrypt_decrypt/encrypt-decrypt-aes-cbc.js
function arrayBufferToHex (line 38) | function arrayBufferToHex(buffer) {
function stringToArrayBuffer (line 44) | function stringToArrayBuffer(str) {
FILE: examples/webcrypto/encrypt_decrypt/encrypt-decrypt-aes-ctr.js
function arrayBufferToHex (line 40) | function arrayBufferToHex(buffer) {
function string2ArrayBuffer (line 46) | function string2ArrayBuffer(str) {
FILE: examples/webcrypto/encrypt_decrypt/encrypt-decrypt-aes-gcm.js
function arrayBufferToHex (line 38) | function arrayBufferToHex(buffer) {
function string2ArrayBuffer (line 44) | function string2ArrayBuffer(str) {
FILE: examples/webcrypto/encrypt_decrypt/encrypt-decrypt-rsa.js
function arrayBufferToHex (line 44) | function arrayBufferToHex(buffer) {
function stringToArrayBuffer (line 50) | function stringToArrayBuffer(str) {
FILE: examples/webcrypto/import_export/import-ecdh-key.js
function deriveSharedSecret (line 47) | async function deriveSharedSecret(privateKey, publicKey) {
FILE: examples/webcrypto/sign_verify/sign-verify-hmac.js
function string2ArrayBuffer (line 28) | function string2ArrayBuffer(str) {
FILE: examples/websockets/test-echo.js
constant CLOSED_STATE (line 3) | const CLOSED_STATE = 3
FILE: examples/websockets/ws.js
function startWSWorker (line 12) | function startWSWorker(id) {
FILE: ext/ext.go
type ExtensionType (line 23) | type ExtensionType
method String (line 33) | func (e ExtensionType) String() string {
constant JSExtension (line 27) | JSExtension ExtensionType = iota + 1
constant OutputExtension (line 28) | OutputExtension
constant SecretSourceExtension (line 29) | SecretSourceExtension
constant SubcommandExtension (line 30) | SubcommandExtension
type Extension (line 49) | type Extension struct
method String (line 55) | func (e Extension) String() string {
function Register (line 62) | func Register(name string, typ ExtensionType, mod any) {
function Get (line 87) | func Get(typ ExtensionType) map[string]*Extension {
function GetAll (line 104) | func GetAll() []*Extension {
function extractModuleInfo (line 133) | func extractModuleInfo(mod any) (path, version string) {
function init (line 165) | func init() {
FILE: internal/api/server.go
function newHandler (line 23) | func newHandler(cs *v1.ControlSurface, profilingEnabled bool) http.Handl...
function injectProfilerHandler (line 34) | func injectProfilerHandler(mux *http.ServeMux, profilingEnabled bool) {
function GetServer (line 52) | func GetServer(
type wrappedResponseWriter (line 75) | type wrappedResponseWriter struct
method WriteHeader (line 80) | func (w *wrappedResponseWriter) WriteHeader(status int) {
function withLoggingHandler (line 86) | func withLoggingHandler(l logrus.FieldLogger, next http.Handler) http.Ha...
function handlePing (line 95) | func handlePing(logger logrus.FieldLogger) http.Handler {
FILE: internal/api/server_test.go
function testHTTPHandler (line 16) | func testHTTPHandler(rw http.ResponseWriter, _ *http.Request) {
function TestLogger (line 23) | func TestLogger(t *testing.T) {
function TestPing (line 57) | func TestPing(t *testing.T) {
FILE: internal/build/version.go
constant Version (line 6) | Version = "1.6.1"
FILE: internal/cloudapi/insights/client.go
constant testRunIDHeader (line 24) | testRunIDHeader = "X-K6TestRun-Id"
constant authorizationHeader (line 25) | authorizationHeader = "Authorization"
type ClientConfig (line 37) | type ClientConfig struct
type ClientConnectConfig (line 47) | type ClientConnectConfig struct
type ClientAuthConfig (line 55) | type ClientAuthConfig struct
type ClientTLSConfig (line 63) | type ClientTLSConfig struct
type ClientRetryConfig (line 69) | type ClientRetryConfig struct
type ClientBackoffConfig (line 77) | type ClientBackoffConfig struct
type Client (line 84) | type Client struct
method Dial (line 135) | func (c *Client) Dial(ctx context.Context) error {
method IngestRequestMetadatasBatch (line 163) | func (c *Client) IngestRequestMetadatasBatch(ctx context.Context, requ...
method Close (line 192) | func (c *Client) Close() error {
function NewDefaultClientConfigForTestRun (line 92) | func NewDefaultClientConfigForTestRun(ingesterHost, authToken string, te...
function NewClient (line 125) | func NewClient(cfg ClientConfig) *Client {
function dialOptionsFromClientConfig (line 207) | func dialOptionsFromClientConfig(cfg ClientConfig) ([]grpc.DialOption, e...
function retryInterceptor (line 250) | func retryInterceptor(retryConfig ClientRetryConfig) (grpc.UnaryClientIn...
function retryableStatusCodes (line 271) | func retryableStatusCodes(retryableStatusCodes string) ([]codes.Code, er...
type perRPCCredentials (line 288) | type perRPCCredentials struct
method GetRequestMetadata (line 303) | func (c perRPCCredentials) GetRequestMetadata(_ context.Context, _ ......
method RequireTransportSecurity (line 307) | func (c perRPCCredentials) RequireTransportSecurity() bool {
function newPerRPCCredentials (line 293) | func newPerRPCCredentials(cfg ClientAuthConfig) perRPCCredentials {
FILE: internal/cloudapi/insights/client_test.go
function newMockListener (line 19) | func newMockListener(t *testing.T, ingesterServer ingester.IngesterServi...
function newMockContextDialer (line 34) | func newMockContextDialer(t *testing.T, l *bufconn.Listener) func(contex...
type mockWorkingIngesterServer (line 42) | type mockWorkingIngesterServer struct
method BatchCreateRequestMetadatas (line 50) | func (s *mockWorkingIngesterServer) BatchCreateRequestMetadatas(ctx co...
type mockFailingIngesterServer (line 72) | type mockFailingIngesterServer struct
method BatchCreateRequestMetadatas (line 77) | func (m *mockFailingIngesterServer) BatchCreateRequestMetadatas(_ cont...
type fatalError (line 81) | type fatalError struct
method Error (line 83) | func (*fatalError) Error() string { return "context dialer error" }
method Temporary (line 84) | func (*fatalError) Temporary() bool { return false }
function TestClient_Dial_ReturnsNoErrorWithWorkingDialer (line 86) | func TestClient_Dial_ReturnsNoErrorWithWorkingDialer(t *testing.T) {
function TestClient_Dial_ReturnsErrorWhenCalledTwice (line 108) | func TestClient_Dial_ReturnsErrorWhenCalledTwice(t *testing.T) {
function TestClient_Dial_ReturnsNoErrorWithFailingDialer (line 132) | func TestClient_Dial_ReturnsNoErrorWithFailingDialer(t *testing.T) {
function TestClient_Dial_ReturnsErrorWithoutRetryableStatusCodes (line 158) | func TestClient_Dial_ReturnsErrorWithoutRetryableStatusCodes(t *testing....
function TestClient_Dial_ReturnsErrorWithInvalidRetryableStatusCodes (line 179) | func TestClient_Dial_ReturnsErrorWithInvalidRetryableStatusCodes(t *test...
function TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorWithWorkingServerAndNonCancelledContextAndNoData (line 201) | func TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorWithWorkingSer...
function TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorWithWorkingServerAndNonCancelledContextAndData (line 226) | func TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorWithWorkingSer...
function TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithWorkingServerAndCancelledContext (line 267) | func TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithWorkingServe...
function TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithUninitializedClient (line 303) | func TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithUninitialize...
function TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithFailingServerAndNonCancelledContext (line 335) | func TestClient_IngestRequestMetadatasBatch_ReturnsErrorWithFailingServe...
function TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorAfterRetrySeveralTimes (line 368) | func TestClient_IngestRequestMetadatasBatch_ReturnsNoErrorAfterRetrySeve...
function TestClient_IngestRequestMetadatasBatch_ReturnsErrorAfterExhaustingMaxRetryAttempts (line 417) | func TestClient_IngestRequestMetadatasBatch_ReturnsErrorAfterExhaustingM...
function TestClient_Close_ReturnsNoErrorWhenClosedOnce (line 464) | func TestClient_Close_ReturnsNoErrorWhenClosedOnce(t *testing.T) {
function TestClient_Close_ReturnsNoErrorWhenClosedTwice (line 486) | func TestClient_Close_ReturnsNoErrorWhenClosedTwice(t *testing.T) {
FILE: internal/cloudapi/insights/domain.go
type TestRunLabels (line 8) | type TestRunLabels struct
type ProtocolLabels (line 15) | type ProtocolLabels interface
type ProtocolHTTPLabels (line 20) | type ProtocolHTTPLabels struct
method IsProtocolLabels (line 27) | func (ProtocolHTTPLabels) IsProtocolLabels() {
type RequestMetadatas (line 32) | type RequestMetadatas
type RequestMetadata (line 35) | type RequestMetadata struct
FILE: internal/cloudapi/insights/mappers.go
function newBatchCreateRequestMetadatasRequest (line 11) | func newBatchCreateRequestMetadatasRequest(
function newCreateRequestMetadataRequest (line 29) | func newCreateRequestMetadataRequest(requestMetadata RequestMetadata) (*...
function setProtocolLabels (line 51) | func setProtocolLabels(rm *k6.RequestMetadata, labels ProtocolLabels) er...
FILE: internal/cloudapi/insights/mappers_test.go
function Test_newBatchCreateRequestMetadatasRequest_CorrectlyMapsDomainTypeToProtoDefinition (line 13) | func Test_newBatchCreateRequestMetadatasRequest_CorrectlyMapsDomainTypeT...
FILE: internal/cloudapi/insights/proto/v1/common/common.pb.go
constant _ (line 34) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 36) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type AnyValue (line 42) | type AnyValue struct
method Reset (line 62) | func (x *AnyValue) Reset() {
method String (line 71) | func (x *AnyValue) String() string {
method ProtoMessage (line 75) | func (*AnyValue) ProtoMessage() {}
method ProtoReflect (line 77) | func (x *AnyValue) ProtoReflect() protoreflect.Message {
method Descriptor (line 90) | func (*AnyValue) Descriptor() ([]byte, []int) {
method GetValue (line 94) | func (m *AnyValue) GetValue() isAnyValue_Value {
method GetStringValue (line 101) | func (x *AnyValue) GetStringValue() string {
method GetBoolValue (line 108) | func (x *AnyValue) GetBoolValue() bool {
method GetIntValue (line 115) | func (x *AnyValue) GetIntValue() int64 {
method GetDoubleValue (line 122) | func (x *AnyValue) GetDoubleValue() float64 {
method GetArrayValue (line 129) | func (x *AnyValue) GetArrayValue() *ArrayValue {
method GetKvlistValue (line 136) | func (x *AnyValue) GetKvlistValue() *KeyValueList {
method GetBytesValue (line 143) | func (x *AnyValue) GetBytesValue() []byte {
type isAnyValue_Value (line 150) | type isAnyValue_Value interface
type AnyValue_StringValue (line 154) | type AnyValue_StringValue struct
method isAnyValue_Value (line 182) | func (*AnyValue_StringValue) isAnyValue_Value() {}
type AnyValue_BoolValue (line 158) | type AnyValue_BoolValue struct
method isAnyValue_Value (line 184) | func (*AnyValue_BoolValue) isAnyValue_Value() {}
type AnyValue_IntValue (line 162) | type AnyValue_IntValue struct
method isAnyValue_Value (line 186) | func (*AnyValue_IntValue) isAnyValue_Value() {}
type AnyValue_DoubleValue (line 166) | type AnyValue_DoubleValue struct
method isAnyValue_Value (line 188) | func (*AnyValue_DoubleValue) isAnyValue_Value() {}
type AnyValue_ArrayValue (line 170) | type AnyValue_ArrayValue struct
method isAnyValue_Value (line 190) | func (*AnyValue_ArrayValue) isAnyValue_Value() {}
type AnyValue_KvlistValue (line 174) | type AnyValue_KvlistValue struct
method isAnyValue_Value (line 192) | func (*AnyValue_KvlistValue) isAnyValue_Value() {}
type AnyValue_BytesValue (line 178) | type AnyValue_BytesValue struct
method isAnyValue_Value (line 194) | func (*AnyValue_BytesValue) isAnyValue_Value() {}
type ArrayValue (line 198) | type ArrayValue struct
method Reset (line 207) | func (x *ArrayValue) Reset() {
method String (line 216) | func (x *ArrayValue) String() string {
method ProtoMessage (line 220) | func (*ArrayValue) ProtoMessage() {}
method ProtoReflect (line 222) | func (x *ArrayValue) ProtoReflect() protoreflect.Message {
method Descriptor (line 235) | func (*ArrayValue) Descriptor() ([]byte, []int) {
method GetValues (line 239) | func (x *ArrayValue) GetValues() []*AnyValue {
type KeyValueList (line 251) | type KeyValueList struct
method Reset (line 263) | func (x *KeyValueList) Reset() {
method String (line 272) | func (x *KeyValueList) String() string {
method ProtoMessage (line 276) | func (*KeyValueList) ProtoMessage() {}
method ProtoReflect (line 278) | func (x *KeyValueList) ProtoReflect() protoreflect.Message {
method Descriptor (line 291) | func (*KeyValueList) Descriptor() ([]byte, []int) {
method GetValues (line 295) | func (x *KeyValueList) GetValues() []*KeyValue {
type KeyValue (line 304) | type KeyValue struct
method Reset (line 313) | func (x *KeyValue) Reset() {
method String (line 322) | func (x *KeyValue) String() string {
method ProtoMessage (line 326) | func (*KeyValue) ProtoMessage() {}
method ProtoReflect (line 328) | func (x *KeyValue) ProtoReflect() protoreflect.Message {
method Descriptor (line 341) | func (*KeyValue) Descriptor() ([]byte, []int) {
method GetKey (line 345) | func (x *KeyValue) GetKey() string {
method GetValue (line 352) | func (x *KeyValue) GetValue() *AnyValue {
function file_v1_common_common_proto_rawDescGZIP (line 417) | func file_v1_common_common_proto_rawDescGZIP() []byte {
function init (line 444) | func init() { file_v1_common_common_proto_init() }
function file_v1_common_common_proto_init (line 445) | func file_v1_common_common_proto_init() {
FILE: internal/cloudapi/insights/proto/v1/ingester/ingester.pb.go
constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type BatchCreateRequestMetadatasRequest (line 25) | type BatchCreateRequestMetadatasRequest struct
method Reset (line 33) | func (x *BatchCreateRequestMetadatasRequest) Reset() {
method String (line 42) | func (x *BatchCreateRequestMetadatasRequest) String() string {
method ProtoMessage (line 46) | func (*BatchCreateRequestMetadatasRequest) ProtoMessage() {}
method ProtoReflect (line 48) | func (x *BatchCreateRequestMetadatasRequest) ProtoReflect() protorefle...
method Descriptor (line 61) | func (*BatchCreateRequestMetadatasRequest) Descriptor() ([]byte, []int) {
method GetRequests (line 65) | func (x *BatchCreateRequestMetadatasRequest) GetRequests() []*CreateRe...
type CreateRequestMetadataRequest (line 72) | type CreateRequestMetadataRequest struct
method Reset (line 80) | func (x *CreateRequestMetadataRequest) Reset() {
method String (line 89) | func (x *CreateRequestMetadataRequest) String() string {
method ProtoMessage (line 93) | func (*CreateRequestMetadataRequest) ProtoMessage() {}
method ProtoReflect (line 95) | func (x *CreateRequestMetadataRequest) ProtoReflect() protoreflect.Mes...
method Descriptor (line 108) | func (*CreateRequestMetadataRequest) Descriptor() ([]byte, []int) {
method GetRequestMetadata (line 112) | func (x *CreateRequestMetadataRequest) GetRequestMetadata() *k6.Reques...
type BatchCreateRequestMetadatasResponse (line 119) | type BatchCreateRequestMetadatasResponse struct
method Reset (line 127) | func (x *BatchCreateRequestMetadatasResponse) Reset() {
method String (line 136) | func (x *BatchCreateRequestMetadatasResponse) String() string {
method ProtoMessage (line 140) | func (*BatchCreateRequestMetadatasResponse) ProtoMessage() {}
method ProtoReflect (line 142) | func (x *BatchCreateRequestMetadatasResponse) ProtoReflect() protorefl...
method Descriptor (line 155) | func (*BatchCreateRequestMetadatasResponse) Descriptor() ([]byte, []in...
method GetRequestMetadatas (line 159) | func (x *BatchCreateRequestMetadatasResponse) GetRequestMetadatas() []...
type BatchCreateSpansRequest (line 166) | type BatchCreateSpansRequest struct
method Reset (line 174) | func (x *BatchCreateSpansRequest) Reset() {
method String (line 183) | func (x *BatchCreateSpansRequest) String() string {
method ProtoMessage (line 187) | func (*BatchCreateSpansRequest) ProtoMessage() {}
method ProtoReflect (line 189) | func (x *BatchCreateSpansRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 202) | func (*BatchCreateSpansRequest) Descriptor() ([]byte, []int) {
method GetRequests (line 206) | func (x *BatchCreateSpansRequest) GetRequests() []*CreateSpanRequest {
type CreateSpanRequest (line 213) | type CreateSpanRequest struct
method Reset (line 221) | func (x *CreateSpanRequest) Reset() {
method String (line 230) | func (x *CreateSpanRequest) String() string {
method ProtoMessage (line 234) | func (*CreateSpanRequest) ProtoMessage() {}
method ProtoReflect (line 236) | func (x *CreateSpanRequest) ProtoReflect() protoreflect.Message {
method Descriptor (line 249) | func (*CreateSpanRequest) Descriptor() ([]byte, []int) {
method GetSpan (line 253) | func (x *CreateSpanRequest) GetSpan() *trace.Span {
type BatchCreateSpansResponse (line 260) | type BatchCreateSpansResponse struct
method Reset (line 268) | func (x *BatchCreateSpansResponse) Reset() {
method String (line 277) | func (x *BatchCreateSpansResponse) String() string {
method ProtoMessage (line 281) | func (*BatchCreateSpansResponse) ProtoMessage() {}
method ProtoReflect (line 283) | func (x *BatchCreateSpansResponse) ProtoReflect() protoreflect.Message {
method Descriptor (line 296) | func (*BatchCreateSpansResponse) Descriptor() ([]byte, []int) {
method GetSpans (line 300) | func (x *BatchCreateSpansResponse) GetSpans() []*trace.Span {
function file_v1_ingester_ingester_proto_rawDescGZIP (line 393) | func file_v1_ingester_ingester_proto_rawDescGZIP() []byte {
function init (line 429) | func init() { file_v1_ingester_ingester_proto_init() }
function file_v1_ingester_ingester_proto_init (line 430) | func file_v1_ingester_ingester_proto_init() {
FILE: internal/cloudapi/insights/proto/v1/ingester/ingester_grpc.pb.go
constant _ (line 19) | _ = grpc.SupportPackageIsVersion7
constant IngesterService_BatchCreateRequestMetadatas_FullMethodName (line 22) | IngesterService_BatchCreateRequestMetadatas_FullMethodName = "/k6.cloud....
constant IngesterService_BatchCreateSpans_FullMethodName (line 23) | IngesterService_BatchCreateSpans_FullMethodName = "/k6.cloud....
type IngesterServiceClient (line 29) | type IngesterServiceClient interface
type ingesterServiceClient (line 34) | type ingesterServiceClient struct
method BatchCreateRequestMetadatas (line 42) | func (c *ingesterServiceClient) BatchCreateRequestMetadatas(ctx contex...
method BatchCreateSpans (line 51) | func (c *ingesterServiceClient) BatchCreateSpans(ctx context.Context, ...
function NewIngesterServiceClient (line 38) | func NewIngesterServiceClient(cc grpc.ClientConnInterface) IngesterServi...
type IngesterServiceServer (line 63) | type IngesterServiceServer interface
type UnimplementedIngesterServiceServer (line 70) | type UnimplementedIngesterServiceServer struct
method BatchCreateRequestMetadatas (line 73) | func (UnimplementedIngesterServiceServer) BatchCreateRequestMetadatas(...
method BatchCreateSpans (line 76) | func (UnimplementedIngesterServiceServer) BatchCreateSpans(context.Con...
method mustEmbedUnimplementedIngesterServiceServer (line 79) | func (UnimplementedIngesterServiceServer) mustEmbedUnimplementedIngest...
type UnsafeIngesterServiceServer (line 84) | type UnsafeIngesterServiceServer interface
function RegisterIngesterServiceServer (line 88) | func RegisterIngesterServiceServer(s grpc.ServiceRegistrar, srv Ingester...
function _IngesterService_BatchCreateRequestMetadatas_Handler (line 92) | func _IngesterService_BatchCreateRequestMetadatas_Handler(srv interface{...
function _IngesterService_BatchCreateSpans_Handler (line 110) | func _IngesterService_BatchCreateSpans_Handler(srv interface{}, ctx cont...
FILE: internal/cloudapi/insights/proto/v1/k6/labels.pb.go
constant _ (line 18) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 20) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type TestRunLabels (line 23) | type TestRunLabels struct
method Reset (line 33) | func (x *TestRunLabels) Reset() {
method String (line 42) | func (x *TestRunLabels) String() string {
method ProtoMessage (line 46) | func (*TestRunLabels) ProtoMessage() {}
method ProtoReflect (line 48) | func (x *TestRunLabels) ProtoReflect() protoreflect.Message {
method Descriptor (line 61) | func (*TestRunLabels) Descriptor() ([]byte, []int) {
method GetID (line 65) | func (x *TestRunLabels) GetID() int64 {
method GetScenario (line 72) | func (x *TestRunLabels) GetScenario() string {
method GetGroup (line 79) | func (x *TestRunLabels) GetGroup() string {
type HTTPLabels (line 86) | type HTTPLabels struct
method Reset (line 96) | func (x *HTTPLabels) Reset() {
method String (line 105) | func (x *HTTPLabels) String() string {
method ProtoMessage (line 109) | func (*HTTPLabels) ProtoMessage() {}
method ProtoReflect (line 111) | func (x *HTTPLabels) ProtoReflect() protoreflect.Message {
method Descriptor (line 124) | func (*HTTPLabels) Descriptor() ([]byte, []int) {
method GetUrl (line 128) | func (x *HTTPLabels) GetUrl() string {
method GetMethod (line 135) | func (x *HTTPLabels) GetMethod() string {
method GetStatusCode (line 142) | func (x *HTTPLabels) GetStatusCode() int64 {
function file_v1_k6_labels_proto_rawDescGZIP (line 177) | func file_v1_k6_labels_proto_rawDescGZIP() []byte {
function init (line 197) | func init() { file_v1_k6_labels_proto_init() }
function file_v1_k6_labels_proto_init (line 198) | func file_v1_k6_labels_proto_init() {
FILE: internal/cloudapi/insights/proto/v1/k6/request_metadata.pb.go
constant _ (line 18) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 20) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type RequestMetadata (line 23) | type RequestMetadata struct
method Reset (line 38) | func (x *RequestMetadata) Reset() {
method String (line 47) | func (x *RequestMetadata) String() string {
method ProtoMessage (line 51) | func (*RequestMetadata) ProtoMessage() {}
method ProtoReflect (line 53) | func (x *RequestMetadata) ProtoReflect() protoreflect.Message {
method Descriptor (line 66) | func (*RequestMetadata) Descriptor() ([]byte, []int) {
method GetTraceID (line 70) | func (x *RequestMetadata) GetTraceID() string {
method GetStartTimeUnixNano (line 77) | func (x *RequestMetadata) GetStartTimeUnixNano() int64 {
method GetEndTimeUnixNano (line 84) | func (x *RequestMetadata) GetEndTimeUnixNano() int64 {
method GetTestRunLabels (line 91) | func (x *RequestMetadata) GetTestRunLabels() *TestRunLabels {
method GetProtocolLabels (line 98) | func (m *RequestMetadata) GetProtocolLabels() isRequestMetadata_Protoc...
method GetHTTPLabels (line 105) | func (x *RequestMetadata) GetHTTPLabels() *HTTPLabels {
type isRequestMetadata_ProtocolLabels (line 112) | type isRequestMetadata_ProtocolLabels interface
type RequestMetadata_HTTPLabels (line 116) | type RequestMetadata_HTTPLabels struct
method isRequestMetadata_ProtocolLabels (line 120) | func (*RequestMetadata_HTTPLabels) isRequestMetadata_ProtocolLabels() {}
function file_v1_k6_request_metadata_proto_rawDescGZIP (line 161) | func file_v1_k6_request_metadata_proto_rawDescGZIP() []byte {
function init (line 184) | func init() { file_v1_k6_request_metadata_proto_init() }
function file_v1_k6_request_metadata_proto_init (line 185) | func file_v1_k6_request_metadata_proto_init() {
FILE: internal/cloudapi/insights/proto/v1/trace/labels.pb.go
constant _ (line 18) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 20) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type SpanLabels (line 23) | type SpanLabels struct
method Reset (line 34) | func (x *SpanLabels) Reset() {
method String (line 43) | func (x *SpanLabels) String() string {
method ProtoMessage (line 47) | func (*SpanLabels) ProtoMessage() {}
method ProtoReflect (line 49) | func (x *SpanLabels) ProtoReflect() protoreflect.Message {
method Descriptor (line 62) | func (*SpanLabels) Descriptor() ([]byte, []int) {
method GetName (line 66) | func (x *SpanLabels) GetName() string {
method GetServiceName (line 73) | func (x *SpanLabels) GetServiceName() string {
method GetKind (line 80) | func (x *SpanLabels) GetKind() SpanKind {
method GetStatusCode (line 87) | func (x *SpanLabels) GetStatusCode() SpanStatusCode {
function file_v1_trace_labels_proto_rawDescGZIP (line 127) | func file_v1_trace_labels_proto_rawDescGZIP() []byte {
function init (line 150) | func init() { file_v1_trace_labels_proto_init() }
function file_v1_trace_labels_proto_init (line 151) | func file_v1_trace_labels_proto_init() {
FILE: internal/cloudapi/insights/proto/v1/trace/span.pb.go
constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
type SpanKind (line 25) | type SpanKind
method Enum (line 64) | func (x SpanKind) Enum() *SpanKind {
method String (line 70) | func (x SpanKind) String() string {
method Descriptor (line 74) | func (SpanKind) Descriptor() protoreflect.EnumDescriptor {
method Type (line 78) | func (SpanKind) Type() protoreflect.EnumType {
method Number (line 82) | func (x SpanKind) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 87) | func (SpanKind) EnumDescriptor() ([]byte, []int) {
constant SpanKind_SPAN_KIND_UNSPECIFIED (line 29) | SpanKind_SPAN_KIND_UNSPECIFIED SpanKind = 0
constant SpanKind_SPAN_KIND_INTERNAL (line 32) | SpanKind_SPAN_KIND_INTERNAL SpanKind = 1
constant SpanKind_SPAN_KIND_SERVER (line 35) | SpanKind_SPAN_KIND_SERVER SpanKind = 2
constant SpanKind_SPAN_KIND_CLIENT (line 37) | SpanKind_SPAN_KIND_CLIENT SpanKind = 3
constant SpanKind_SPAN_KIND_PRODUCER (line 39) | SpanKind_SPAN_KIND_PRODUCER SpanKind = 4
constant SpanKind_SPAN_KIND_CONSUMER (line 41) | SpanKind_SPAN_KIND_CONSUMER SpanKind = 5
type SpanStatusCode (line 93) | type SpanStatusCode
method Enum (line 118) | func (x SpanStatusCode) Enum() *SpanStatusCode {
method String (line 124) | func (x SpanStatusCode) String() string {
method Descriptor (line 128) | func (SpanStatusCode) Descriptor() protoreflect.EnumDescriptor {
method Type (line 132) | func (SpanStatusCode) Type() protoreflect.EnumType {
method Number (line 136) | func (x SpanStatusCode) Number() protoreflect.EnumNumber {
method EnumDescriptor (line 141) | func (SpanStatusCode) EnumDescriptor() ([]byte, []int) {
constant SpanStatusCode_STATUS_CODE_UNSET (line 97) | SpanStatusCode_STATUS_CODE_UNSET SpanStatusCode = 0
constant SpanStatusCode_STATUS_CODE_OK (line 99) | SpanStatusCode_STATUS_CODE_OK SpanStatusCode = 1
constant SpanStatusCode_STATUS_CODE_ERROR (line 101) | SpanStatusCode_STATUS_CODE_ERROR SpanStatusCode = 2
type Span (line 145) | type Span struct
method Reset (line 172) | func (x *Span) Reset() {
method String (line 181) | func (x *Span) String() string {
method ProtoMessage (line 185) | func (*Span) ProtoMessage() {}
method ProtoReflect (line 187) | func (x *Span) ProtoReflect() protoreflect.Message {
method Descriptor (line 200) | func (*Span) Descriptor() ([]byte, []int) {
method GetTraceID (line 204) | func (x *Span) GetTraceID() string {
method GetSpanID (line 211) | func (x *Span) GetSpanID() string {
method GetStartTimeUnixNano (line 218) | func (x *Span) GetStartTimeUnixNano() int64 {
method GetEndTimeUnixNano (line 225) | func (x *Span) GetEndTimeUnixNano() int64 {
method GetName (line 232) | func (x *Span) GetName() string {
method GetServiceName (line 239) | func (x *Span) GetServiceName() string {
method GetKind (line 246) | func (x *Span) GetKind() SpanKind {
method GetStatusCode (line 253) | func (x *Span) GetStatusCode() SpanStatusCode {
method GetAttributes (line 260) | func (x *Span) GetAttributes() []*common.KeyValue {
function file_v1_trace_span_proto_rawDescGZIP (line 328) | func file_v1_trace_span_proto_rawDescGZIP() []byte {
function init (line 354) | func init() { file_v1_trace_span_proto_init() }
function file_v1_trace_span_proto_init (line 355) | func file_v1_trace_span_proto_init() {
FILE: internal/cloudapi/v6/api.go
method ValidateToken (line 14) | func (c *Client) ValidateToken(stackURL string) (_ *k6cloud.Authenticati...
FILE: internal/cloudapi/v6/api_test.go
function TestValidateToken (line 16) | func TestValidateToken(t *testing.T) {
function fprint (line 105) | func fprint(t *testing.T, w io.Writer, format string) int {
FILE: internal/cloudapi/v6/client.go
constant RetryInterval (line 16) | RetryInterval = 500 * time.Millisecond
constant MaxRetries (line 18) | MaxRetries = 3
type Client (line 22) | type Client struct
method SetStackID (line 65) | func (c *Client) SetStackID(stackID int64) {
method BaseURL (line 70) | func (c *Client) BaseURL() string {
function NewClient (line 35) | func NewClient(logger logrus.FieldLogger, token, host, version string, t...
function CheckResponse (line 77) | func CheckResponse(r *http.Response) error {
FILE: internal/cloudapi/v6/client_test.go
function TestCheckResponse (line 14) | func TestCheckResponse(t *testing.T) {
function mustParseURL (line 98) | func mustParseURL(t *testing.T, rawURL string) *url.URL {
FILE: internal/cloudapi/v6/config.go
type Config (line 17) | type Config struct
method Apply (line 105) | func (c Config) Apply(cfg Config) Config {
function NewConfig (line 69) | func NewConfig() Config {
function GetConsolidatedConfig (line 174) | func GetConsolidatedConfig(
function mergeFromCloudOption (line 212) | func mergeFromCloudOption(
function GetTemporaryCloudConfig (line 249) | func GetTemporaryCloudConfig(cloudConfig json.RawMessage) (map[string]an...
FILE: internal/cloudapi/v6/config_test.go
function TestConfigApply (line 15) | func TestConfigApply(t *testing.T) {
function TestGetConsolidatedConfig (line 56) | func TestGetConsolidatedConfig(t *testing.T) {
function TestGetConsolidatedConfig_EnvHasHigherPriority (line 81) | func TestGetConsolidatedConfig_EnvHasHigherPriority(t *testing.T) {
FILE: internal/cloudapi/v6/errors.go
type ResponseError (line 19) | type ResponseError struct
method Error (line 24) | func (e ResponseError) Error() string {
FILE: internal/cloudapi/v6/errors_test.go
function TestResponseError_Error (line 11) | func TestResponseError_Error(t *testing.T) {
FILE: internal/cmd/archive.go
type cmdArchive (line 11) | type cmdArchive struct
method run (line 18) | func (c *cmdArchive) run(cmd *cobra.Command, args []string) error {
method flagSet (line 59) | func (c *cmdArchive) flagSet() *pflag.FlagSet {
function getCmdArchive (line 79) | func getCmdArchive(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/archive_test.go
function TestArchiveThresholds (line 17) | func TestArchiveThresholds(t *testing.T) {
function TestArchiveContainsEnv (line 93) | func TestArchiveContainsEnv(t *testing.T) {
function TestArchiveContainsLegacyCloudSettings (line 126) | func TestArchiveContainsLegacyCloudSettings(t *testing.T) {
function TestArchiveContainsCloudSettings (line 180) | func TestArchiveContainsCloudSettings(t *testing.T) {
function TestArchiveNotContainsEnv (line 230) | func TestArchiveNotContainsEnv(t *testing.T) {
function TestArchiveStdout (line 257) | func TestArchiveStdout(t *testing.T) {
FILE: internal/cmd/builtin_output_gen.go
constant _builtinOutputName (line 10) | _builtinOutputName = "cloudcsvdatadogexperimental-prometheus-rwinfluxdbj...
constant _builtinOutputLowerName (line 14) | _builtinOutputLowerName = "cloudcsvdatadogexperimental-prometheus-rwinfl...
method String (line 16) | func (i builtinOutput) String() string {
function _builtinOutputNoOp (line 25) | func _builtinOutputNoOp() {
function builtinOutputString (line 83) | func builtinOutputString(s string) (builtinOutput, error) {
function builtinOutputValues (line 95) | func builtinOutputValues() []builtinOutput {
function builtinOutputStrings (line 100) | func builtinOutputStrings() []string {
method IsAbuiltinOutput (line 107) | func (i builtinOutput) IsAbuiltinOutput() bool {
FILE: internal/cmd/cloud.go
type cmdCloud (line 40) | type cmdCloud struct
method preRun (line 48) | func (c *cmdCloud) preRun(cmd *cobra.Command, _ []string) error {
method run (line 89) | func (c *cmdCloud) run(cmd *cobra.Command, args []string) error {
method flagSet (line 363) | func (c *cmdCloud) flagSet() *pflag.FlagSet {
function getCmdCloud (line 383) | func getCmdCloud(gs *state.GlobalState) *cobra.Command {
function resolveDefaultProjectID (line 455) | func resolveDefaultProjectID(
function resolveAndSetProjectID (line 481) | func resolveAndSetProjectID(
FILE: internal/cmd/cloud_login.go
constant cloudLoginCommandName (line 22) | cloudLoginCommandName = "login"
type cmdCloudLogin (line 24) | type cmdCloudLogin struct
method run (line 70) | func (c *cmdCloudLogin) run(cmd *cobra.Command, _ []string) error {
function getCmdCloudLogin (line 28) | func getCmdCloudLogin(gs *state.GlobalState) *cobra.Command {
function printConfig (line 192) | func printConfig(gs *state.GlobalState, cloudConf cloudapi.Config) {
function validateInputs (line 218) | func validateInputs(
function validateTokenV1 (line 262) | func validateTokenV1(gs *state.GlobalState, config cloudapi.Config, toke...
function validateTokenV6 (line 288) | func validateTokenV6(
function normalizeStackURL (line 316) | func normalizeStackURL(stackInput string) string {
function stripGrafanaNetSuffix (line 327) | func stripGrafanaNetSuffix(s string) string {
FILE: internal/cmd/cloud_run.go
constant cloudRunCommandName (line 17) | cloudRunCommandName string = "run"
type cmdCloudRun (line 19) | type cmdCloudRun struct
method preRun (line 100) | func (c *cmdCloudRun) preRun(cmd *cobra.Command, args []string) error {
method run (line 129) | func (c *cmdCloudRun) run(cmd *cobra.Command, args []string) error {
method flagSet (line 155) | func (c *cmdCloudRun) flagSet() *pflag.FlagSet {
function getCmdCloudRun (line 46) | func getCmdCloudRun(cloudCmd *cmdCloud) *cobra.Command {
function getCloudRunLocalExecutionConfig (line 184) | func getCloudRunLocalExecutionConfig(flags *pflag.FlagSet) (Config, erro...
FILE: internal/cmd/cloud_test.go
function TestResolveDefaultProjectID (line 18) | func TestResolveDefaultProjectID(t *testing.T) {
function TestResolveAndSetProjectID (line 114) | func TestResolveAndSetProjectID(t *testing.T) {
FILE: internal/cmd/cloud_upload.go
constant cloudUploadCommandName (line 10) | cloudUploadCommandName = "upload"
type cmdCloudUpload (line 12) | type cmdCloudUpload struct
method preRun (line 47) | func (c *cmdCloudUpload) preRun(cmd *cobra.Command, args []string) err...
method run (line 52) | func (c *cmdCloudUpload) run(cmd *cobra.Command, args []string) error {
method flagSet (line 57) | func (c *cmdCloudUpload) flagSet() *pflag.FlagSet {
function getCmdCloudUpload (line 21) | func getCmdCloudUpload(cloudCmd *cmdCloud) *cobra.Command {
FILE: internal/cmd/common.go
function must (line 28) | func must(err error) {
function getNullBool (line 36) | func getNullBool(flags *pflag.FlagSet, key string) null.Bool {
function getNullInt64 (line 44) | func getNullInt64(flags *pflag.FlagSet, key string) null.Int {
function getNullDuration (line 52) | func getNullDuration(flags *pflag.FlagSet, key string) types.NullDuration {
function getNullString (line 62) | func getNullString(flags *pflag.FlagSet, key string) null.String {
function exactArgsWithMsg (line 71) | func exactArgsWithMsg(n int, msg string) cobra.PositionalArgs {
function printToStdout (line 80) | func printToStdout(gs *state.GlobalState, s string) {
function getExampleText (line 86) | func getExampleText(gs *state.GlobalState, tpl string) string {
function handleTestAbortSignals (line 98) | func handleTestAbortSignals(gs *state.GlobalState, gracefulStopHandler, ...
FILE: internal/cmd/config.go
function configFlagSet (line 28) | func configFlagSet() *pflag.FlagSet {
type Config (line 42) | type Config struct
method Validate (line 62) | func (c Config) Validate() []error {
method Apply (line 71) | func (c Config) Apply(cfg Config) Config {
function getPartialConfig (line 95) | func getPartialConfig(flags *pflag.FlagSet) (Config, error) {
function getConfig (line 105) | func getConfig(flags *pflag.FlagSet) (Config, error) {
function readDiskConfig (line 131) | func readDiskConfig(gs *state.GlobalState) (Config, error) {
function legacyConfigFilePath (line 156) | func legacyConfigFilePath(gs *state.GlobalState) string {
function readLegacyDiskConfig (line 161) | func readLegacyDiskConfig(gs *state.GlobalState) (Config, error) {
function writeDiskConfig (line 181) | func writeDiskConfig(gs *state.GlobalState, conf Config) error {
function readEnvConfig (line 195) | func readEnvConfig(envMap map[string]string) (Config, error) {
function loadConfigFile (line 212) | func loadConfigFile(gs *state.GlobalState) (Config, error) {
function getConsolidatedConfig (line 248) | func getConsolidatedConfig(gs *state.GlobalState, cliConf Config, runner...
function warnOnShortHandOverride (line 285) | func warnOnShortHandOverride(a, b lib.Options, bName string, logger logr...
function applyDefault (line 298) | func applyDefault(conf Config) Config {
function deriveAndValidateConfig (line 324) | func deriveAndValidateConfig(
function validateConfig (line 335) | func validateConfig(conf Config, isExecutable func(string) bool) error {
function consolidateErrorMessage (line 347) | func consolidateErrorMessage(errList []error, title string) error {
function validateScenarioConfig (line 360) | func validateScenarioConfig(conf lib.ExecutorConfig, isExecutable func(s...
function migrateLegacyConfigFileIfAny (line 373) | func migrateLegacyConfigFileIfAny(gs *state.GlobalState) error {
function checkIfMigrationCompleted (line 410) | func checkIfMigrationCompleted(gs *state.GlobalState) bool {
FILE: internal/cmd/config_consolidation_test.go
function verifyOneIterPerOneVU (line 21) | func verifyOneIterPerOneVU(t *testing.T, c Config) {
function verifySharedIters (line 32) | func verifySharedIters(vus, iters null.Int) func(t *testing.T, c Config) {
function verifyConstLoopingVUs (line 46) | func verifyConstLoopingVUs(vus null.Int, duration time.Duration) func(t ...
function verifyExternallyExecuted (line 60) | func verifyExternallyExecuted(scenarioName string, vus null.Int, duratio...
function verifyRampingVUs (line 73) | func verifyRampingVUs(startVus null.Int, stages []executor.Stage) func(t...
function buildStages (line 93) | func buildStages(durationsAndVUs ...int64) []executor.Stage {
type file (line 108) | type file struct
function getFS (line 112) | func getFS(files []file) fsext.Fs {
type opts (line 120) | type opts struct
type exp (line 130) | type exp struct
type configConsolidationTestCase (line 140) | type configConsolidationTestCase struct
function getConfigConsolidationTestCases (line 146) | func getConfigConsolidationTestCases() []configConsolidationTestCase {
function runTestCase (line 505) | func runTestCase(t *testing.T, testCase configConsolidationTestCase, sub...
function TestConfigConsolidation (line 579) | func TestConfigConsolidation(t *testing.T) {
FILE: internal/cmd/config_test.go
type testCmdData (line 25) | type testCmdData struct
type testCmdTest (line 30) | type testCmdTest struct
function TestConfigCmd (line 36) | func TestConfigCmd(t *testing.T) {
function TestConfigEnv (line 81) | func TestConfigEnv(t *testing.T) {
function TestConfigApply (line 124) | func TestConfigApply(t *testing.T) {
function TestDeriveAndValidateConfig (line 146) | func TestDeriveAndValidateConfig(t *testing.T) {
function TestReadDiskConfigWithDefaultFlags (line 208) | func TestReadDiskConfigWithDefaultFlags(t *testing.T) {
function TestReadDiskConfigCustomFilePath (line 229) | func TestReadDiskConfigCustomFilePath(t *testing.T) {
function TestReadDiskConfigNotFoundSilenced (line 251) | func TestReadDiskConfigNotFoundSilenced(t *testing.T) {
function TestReadDiskConfigNotJSONExtension (line 271) | func TestReadDiskConfigNotJSONExtension(t *testing.T) {
function TestReadDiskConfigNotJSONContentError (line 293) | func TestReadDiskConfigNotJSONContentError(t *testing.T) {
function TestReadDiskConfigNotFoundErrorWithCustomPath (line 310) | func TestReadDiskConfigNotFoundErrorWithCustomPath(t *testing.T) {
function TestWriteDiskConfigWithDefaultFlags (line 327) | func TestWriteDiskConfigWithDefaultFlags(t *testing.T) {
function TestWriteDiskConfigOverwrite (line 347) | func TestWriteDiskConfigOverwrite(t *testing.T) {
function TestWriteDiskConfigCustomPath (line 367) | func TestWriteDiskConfigCustomPath(t *testing.T) {
function TestWriteDiskConfigNoJSONContentError (line 384) | func TestWriteDiskConfigNoJSONContentError(t *testing.T) {
function TestMigrateLegacyConfigFileIfAny (line 406) | func TestMigrateLegacyConfigFileIfAny(t *testing.T) {
function TestMigrateLegacyConfigFileIfAnyWhenFileDoesNotExist (line 436) | func TestMigrateLegacyConfigFileIfAnyWhenFileDoesNotExist(t *testing.T) {
function TestLoadConfig (line 455) | func TestLoadConfig(t *testing.T) {
FILE: internal/cmd/deps.go
type depsCmd (line 18) | type depsCmd struct
method run (line 44) | func (c *depsCmd) run(cmd *cobra.Command, args []string) error {
method outputJSON (line 74) | func (c *depsCmd) outputJSON(depsMap map[string]string, imports []stri...
method outputHumanReadable (line 97) | func (c *depsCmd) outputHumanReadable(depsMap map[string]string, impor...
function getCmdDeps (line 23) | func getCmdDeps(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/deps_test.go
function TestGetCmdDeps (line 17) | func TestGetCmdDeps(t *testing.T) {
function TestGetCmdDepsHumanReadable (line 159) | func TestGetCmdDepsHumanReadable(t *testing.T) {
function prependCWDToFileMap (line 189) | func prependCWDToFileMap(cwd string, files map[string][]byte) map[string...
FILE: internal/cmd/inspect.go
function getCmdInspect (line 14) | func getCmdInspect(gs *state.GlobalState) *cobra.Command {
function inspectOutputWithExecRequirements (line 64) | func inspectOutputWithExecRequirements(
FILE: internal/cmd/launcher.go
type commandExecutor (line 27) | type commandExecutor interface
type provisioner (line 32) | type provisioner interface
function constraintsMapToProvisionDependency (line 36) | func constraintsMapToProvisionDependency(deps map[string]*semver.Constra...
type customBinary (line 53) | type customBinary struct
method run (line 60) | func (b *customBinary) run(gs *state.GlobalState) error {
function isCustomBuildRequired (line 127) | func isCustomBuildRequired(deps dependencies, k6Version string, exts []*...
type k6buildProvisioner (line 168) | type k6buildProvisioner struct
method provision (line 176) | func (p *k6buildProvisioner) provision(deps map[string]string) (comman...
function newK6BuildProvisioner (line 172) | func newK6BuildProvisioner(gs *state.GlobalState) provisioner {
function getProviderConfig (line 195) | func getProviderConfig(gs *state.GlobalState) k6provider.Config {
function formatDependencies (line 213) | func formatDependencies(deps map[string]string) string {
function extractToken (line 223) | func extractToken(gs *state.GlobalState) (string, error) {
function processUseDirectives (line 237) | func processUseDirectives(name string, text []byte, deps dependencies) e...
function findDirectives (line 271) | func findDirectives(text []byte) []string {
function parseManifest (line 310) | func parseManifest(manifestString string) (dependencies, error) {
FILE: internal/cmd/launcher_test.go
function TestIsCustomBuildRequired (line 17) | func TestIsCustomBuildRequired(t *testing.T) {
function TestGetProviderConfig (line 106) | func TestGetProviderConfig(t *testing.T) {
function TestProcessUseDirectives (line 150) | func TestProcessUseDirectives(t *testing.T) {
function TestFindDirectives (line 269) | func TestFindDirectives(t *testing.T) {
function TestDependenciesApplyManifest (line 323) | func TestDependenciesApplyManifest(t *testing.T) {
FILE: internal/cmd/login.go
function getCmdLogin (line 10) | func getCmdLogin(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/login_cloud.go
function getCmdLoginCloud (line 21) | func getCmdLoginCloud(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/login_influxdb.go
function getCmdLoginInfluxDB (line 18) | func getCmdLoginInfluxDB(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/new.go
constant defaultNewScriptName (line 15) | defaultNewScriptName = "script.js"
type newScriptCmd (line 17) | type newScriptCmd struct
method flagSet (line 24) | func (c *newScriptCmd) flagSet() *pflag.FlagSet {
method run (line 33) | func (c *newScriptCmd) run(_ *cobra.Command, args []string) (err error) {
function getCmdNewScript (line 98) | func getCmdNewScript(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/new_test.go
function TestNewScriptCmd (line 13) | func TestNewScriptCmd(t *testing.T) {
function TestNewScriptCmd_FileExists_NoOverwrite (line 63) | func TestNewScriptCmd_FileExists_NoOverwrite(t *testing.T) {
function TestNewScriptCmd_FileExists_Overwrite (line 80) | func TestNewScriptCmd_FileExists_Overwrite(t *testing.T) {
function TestNewScriptCmd_InvalidTemplateType (line 97) | func TestNewScriptCmd_InvalidTemplateType(t *testing.T) {
function TestNewScriptCmd_ProjectID (line 113) | func TestNewScriptCmd_ProjectID(t *testing.T) {
function TestNewScriptCmd_LocalTemplate (line 127) | func TestNewScriptCmd_LocalTemplate(t *testing.T) {
function TestNewScriptCmd_LocalTemplateWith_ProjectID (line 149) | func TestNewScriptCmd_LocalTemplateWith_ProjectID(t *testing.T) {
function TestNewScriptCmd_LocalTemplate_NonExistentFile (line 176) | func TestNewScriptCmd_LocalTemplate_NonExistentFile(t *testing.T) {
function TestNewScriptCmd_LocalTemplate_SyntaxError (line 198) | func TestNewScriptCmd_LocalTemplate_SyntaxError(t *testing.T) {
FILE: internal/cmd/options.go
function optionFlagSet (line 23) | func optionFlagSet() *pflag.FlagSet {
function getOptions (line 81) | func getOptions(flags *pflag.FlagSet) (lib.Options, error) {
function parseTagNameValue (line 251) | func parseTagNameValue(nv string) (string, string, error) {
FILE: internal/cmd/options_test.go
function TestParseTagKeyValue (line 9) | func TestParseTagKeyValue(t *testing.T) {
FILE: internal/cmd/outputs.go
type builtinOutput (line 28) | type builtinOutput
constant builtinOutputCloud (line 31) | builtinOutputCloud builtinOutput = iota
constant builtinOutputCSV (line 32) | builtinOutputCSV
constant builtinOutputDatadog (line 33) | builtinOutputDatadog
constant builtinOutputExperimentalPrometheusRW (line 34) | builtinOutputExperimentalPrometheusRW
constant builtinOutputInfluxdb (line 35) | builtinOutputInfluxdb
constant builtinOutputJSON (line 36) | builtinOutputJSON
constant builtinOutputKafka (line 37) | builtinOutputKafka
constant builtinOutputStatsd (line 38) | builtinOutputStatsd
constant builtinOutputExperimentalOpentelemetry (line 39) | builtinOutputExperimentalOpentelemetry
constant builtinOutputOpentelemetry (line 40) | builtinOutputOpentelemetry
constant builtinOutputSummary (line 41) | builtinOutputSummary
function getAllOutputConstructors (line 45) | func getAllOutputConstructors() (map[string]output.Constructor, error) {
function getPossibleIDList (line 99) | func getPossibleIDList(constrs map[string]output.Constructor) string {
function createOutputs (line 111) | func createOutputs(
FILE: internal/cmd/outputs_cloud.go
constant defaultTestName (line 23) | defaultTestName = "k6 test"
constant testRunIDKey (line 24) | testRunIDKey = "K6_CLOUDRUN_TEST_RUN_ID"
function createCloudTest (line 36) | func createCloudTest(gs *state.GlobalState, test *loadedAndConfiguredTes...
function validateRequiredSystemTags (line 176) | func validateRequiredSystemTags(scriptTags *metrics.SystemTagSet) error {
function cloudConfToRawMessage (line 198) | func cloudConfToRawMessage(conf cloudapi.Config) (json.RawMessage, error) {
FILE: internal/cmd/outputs_test.go
function TestBuiltinOutputString (line 9) | func TestBuiltinOutputString(t *testing.T) {
FILE: internal/cmd/pause.go
function getCmdPause (line 12) | func getCmdPause(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/report.go
function createReport (line 16) | func createReport(u *usage.Usage, execScheduler *execution.Scheduler) ma...
function reportUsage (line 36) | func reportUsage(ctx context.Context, execScheduler *execution.Scheduler...
function isCI (line 67) | func isCI(lookupEnv func(key string) (val string, ok bool)) bool {
FILE: internal/cmd/report_test.go
function TestCreateReport (line 19) | func TestCreateReport(t *testing.T) {
FILE: internal/cmd/resume.go
function getCmdResume (line 12) | func getCmdResume(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/root.go
constant waitLoggerCloseTimeout (line 30) | waitLoggerCloseTimeout = time.Second * 5
function getDocsURL (line 32) | func getDocsURL() string {
function getRootUsageTemplate (line 42) | func getRootUsageTemplate() string {
function ExecuteWithGlobalState (line 83) | func ExecuteWithGlobalState(gs *state.GlobalState) {
type rootCommand (line 88) | type rootCommand struct
method persistentPreRunE (line 145) | func (c *rootCommand) persistentPreRunE(_ *cobra.Command, _ []string) ...
method execute (line 156) | func (c *rootCommand) execute() {
method stopLoggers (line 240) | func (c *rootCommand) stopLoggers() {
method setupLoggers (line 313) | func (c *rootCommand) setupLoggers(stop <-chan struct{}) error {
method setLoggerHook (line 403) | func (c *rootCommand) setLoggerHook(ctx context.Context, h log.AsyncHo...
function newRootCommand (line 98) | func newRootCommand(gs *state.GlobalState) *rootCommand {
function handleUnsatisfiedDependencies (line 207) | func handleUnsatisfiedDependencies(err error, c *rootCommand) (exitcodes...
function rootCmdPersistentFlagSet (line 254) | func rootCmdPersistentFlagSet(gs *state.GlobalState) *pflag.FlagSet {
type RawFormatter (line 303) | type RawFormatter struct
method Format (line 306) | func (f RawFormatter) Format(entry *logrus.Entry) ([]byte, error) {
function createSecretSources (line 411) | func createSecretSources(gs *state.GlobalState) (map[string]secretsource...
function extractNameAndDefault (line 468) | func extractNameAndDefault(config string) (name string, isDefault bool, ...
FILE: internal/cmd/root_test.go
function TestRootCommandHelpDisplayCommands (line 11) | func TestRootCommandHelpDisplayCommands(t *testing.T) {
FILE: internal/cmd/run.go
type cmdRun (line 41) | type cmdRun struct
method run (line 63) | func (c *cmdRun) run(cmd *cobra.Command, args []string) (err error) {
method flagSet (line 533) | func (c *cmdRun) flagSet() *pflag.FlagSet {
method setupTracerProvider (line 542) | func (c *cmdRun) setupTracerProvider(ctx context.Context, test *loaded...
constant waitEventDoneTimeout (line 53) | waitEventDoneTimeout = 30 * time.Minute
constant waitForTracerProviderStopTimeout (line 57) | waitForTracerProviderStopTimeout = 3 * time.Minute
function getSummaryMode (line 520) | func getSummaryMode(runtimeOptions lib.RuntimeOptions) (summary.Mode, bo...
function getCmdRun (line 558) | func getCmdRun(gs *state.GlobalState) *cobra.Command {
function handleSummaryResult (line 602) | func handleSummaryResult(fs fsext.Fs, stdOut, stdErr io.Writer, result m...
FILE: internal/cmd/run_test.go
type mockWriter (line 27) | type mockWriter struct
method Write (line 32) | func (fw mockWriter) Write(p []byte) (n int, err error) {
function getFiles (line 41) | func getFiles(t *testing.T, fileSystem fsext.Fs) map[string]*bytes.Buffer {
function assertEqual (line 60) | func assertEqual(t *testing.T, exp string, actual io.Reader) {
function initVars (line 66) | func initVars() (
function TestHandleSummaryResultSimple (line 72) | func TestHandleSummaryResultSimple(t *testing.T) {
function TestHandleSummaryResultError (line 90) | func TestHandleSummaryResultError(t *testing.T) {
function TestRunScriptErrorsAndAbort (line 116) | func TestRunScriptErrorsAndAbort(t *testing.T) {
function TestInvalidOptionsThresholdErrExitCode (line 274) | func TestInvalidOptionsThresholdErrExitCode(t *testing.T) {
function TestThresholdsRuntimeBehavior (line 317) | func TestThresholdsRuntimeBehavior(t *testing.T) {
FILE: internal/cmd/runtime_options.go
function runtimeOptionFlagSet (line 22) | func runtimeOptionFlagSet(includeSysEnv bool) *pflag.FlagSet {
function getRuntimeOptions (line 54) | func getRuntimeOptions(
function runtimeOptionsFromFlags (line 82) | func runtimeOptionsFromFlags(flags *pflag.FlagSet) lib.RuntimeOptions {
function populateRuntimeOptionsFromEnv (line 98) | func populateRuntimeOptionsFromEnv(opts lib.RuntimeOptions, environment ...
function saveBoolFromEnv (line 162) | func saveBoolFromEnv(env map[string]string, varName string, placeholder ...
FILE: internal/cmd/runtime_options_test.go
type runtimeOptionsTestCase (line 21) | type runtimeOptionsTestCase struct
function testRuntimeOptionsCase (line 29) | func testRuntimeOptionsCase(t *testing.T, tc runtimeOptionsTestCase) {
function TestRuntimeOptions (line 112) | func TestRuntimeOptions(t *testing.T) {
FILE: internal/cmd/scale.go
function getCmdScale (line 13) | func getCmdScale(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/stats.go
function getCmdStats (line 10) | func getCmdStats(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/status.go
function getCmdStatus (line 10) | func getCmdStatus(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/stdlog_integration_test.go
function TestStdLogOutputIsSet (line 16) | func TestStdLogOutputIsSet(t *testing.T) {
FILE: internal/cmd/subcommand.go
function getX (line 42) | func getX(gs *state.GlobalState) *cobra.Command {
function extensionSubcommands (line 83) | func extensionSubcommands(gs *state.GlobalState) []*cobra.Command {
function getCmdForExtension (line 95) | func getCmdForExtension(extension *ext.Extension, gs *state.GlobalState)...
function dependenciesFromSubcommand (line 120) | func dependenciesFromSubcommand(gs *state.GlobalState, subcommand string...
FILE: internal/cmd/subcommand_test.go
function TestExtensionSubcommands (line 14) | func TestExtensionSubcommands(t *testing.T) {
function TestXCommandHelpDisplayCommands (line 60) | func TestXCommandHelpDisplayCommands(t *testing.T) {
function Test_dependenciesFromSubcommand (line 96) | func Test_dependenciesFromSubcommand(t *testing.T) {
function registerTestSubcommandExtensions (line 140) | func registerTestSubcommandExtensions(t *testing.T) {
FILE: internal/cmd/templates/browser.js
constant BASE_URL (line 6) | const BASE_URL = __ENV.BASE_URL || "https://quickpizza.grafana.com";
function setup (line 27) | function setup() {
FILE: internal/cmd/templates/protocol.js
constant BASE_URL (line 5) | const BASE_URL = __ENV.BASE_URL || 'https://quickpizza.grafana.com';
function setup (line 23) | function setup() {
FILE: internal/cmd/templates/templates.go
constant MinimalTemplate (line 27) | MinimalTemplate = "minimal"
constant ProtocolTemplate (line 28) | ProtocolTemplate = "protocol"
constant BrowserTemplate (line 29) | BrowserTemplate = "browser"
type TemplateManager (line 33) | type TemplateManager struct
method GetTemplate (line 66) | func (tm *TemplateManager) GetTemplate(tpl string) (*template.Template...
function NewTemplateManager (line 41) | func NewTemplateManager(fs fsext.Fs) (*TemplateManager, error) {
function isFilePath (line 109) | func isFilePath(path string) bool {
type TemplateArgs (line 114) | type TemplateArgs struct
function ExecuteTemplate (line 120) | func ExecuteTemplate(w io.Writer, tmpl *template.Template, args Template...
FILE: internal/cmd/test_load.go
constant testTypeJS (line 37) | testTypeJS = "js"
constant testTypeArchive (line 38) | testTypeArchive = "archive"
type loadedTest (line 43) | type loadedTest struct
method prepareFirstRunner (line 134) | func (lt *loadedTest) prepareFirstRunner(gs *state.GlobalState) error {
method continueInitialization (line 229) | func (lt *loadedTest) continueInitialization(gs *state.GlobalState) er...
method Dependencies (line 250) | func (lt *loadedTest) Dependencies() dependencies {
method Imports (line 254) | func (lt *loadedTest) Imports() []string {
method consolidateDeriveAndValidateConfig (line 464) | func (lt *loadedTest) consolidateDeriveAndValidateConfig(
function loadLocalTestWithoutRunner (line 59) | func loadLocalTestWithoutRunner(gs *state.GlobalState, cmd *cobra.Comman...
function loadLocalTest (line 120) | func loadLocalTest(gs *state.GlobalState, cmd *cobra.Command, args []str...
function resolveModulesDependencies (line 258) | func resolveModulesDependencies(
function collectTestDependencies (line 291) | func collectTestDependencies(
function analyseUseContraints (line 321) | func analyseUseContraints(imports []string, fileSystems map[string]fsext...
type dependencies (line 352) | type dependencies
method update (line 354) | func (d dependencies) update(dep string, constraint *semver.Constraint...
method applyManifest (line 367) | func (d dependencies) applyManifest(manifest dependencies) error {
method String (line 384) | func (d dependencies) String() string {
function dependenciesFromMap (line 401) | func dependenciesFromMap(input map[string]string) (dependencies, error) {
function extractUnknownModules (line 417) | func extractUnknownModules(err error) (dependencies, error) {
type binaryIsNotSatisfyingDependenciesError (line 436) | type binaryIsNotSatisfyingDependenciesError struct
method Error (line 440) | func (r binaryIsNotSatisfyingDependenciesError) Error() string {
function readSource (line 446) | func readSource(gs *state.GlobalState, filename string) (*loader.SourceD...
function detectTestType (line 457) | func detectTestType(data []byte) string {
type loadedAndConfiguredTest (line 516) | type loadedAndConfiguredTest struct
method buildTestRunState (line 541) | func (lct *loadedAndConfiguredTest) buildTestRunState(
function loadAndConfigureLocalTest (line 522) | func loadAndConfigureLocalTest(
function loadSystemCertPool (line 535) | func loadSystemCertPool(logger logrus.FieldLogger) {
type syncWriter (line 570) | type syncWriter struct
method Write (line 575) | func (cw *syncWriter) Write(b []byte) (int, error) {
FILE: internal/cmd/test_load_test.go
constant fakerJs (line 14) | fakerJs = `
constant scriptJS (line 24) | scriptJS = `
function TestAnalyseUseConstraints (line 34) | func TestAnalyseUseConstraints(t *testing.T) {
FILE: internal/cmd/testdata/abort_teardown.js
function teardown (line 7) | function teardown() {
FILE: internal/cmd/testdata/summary/api.js
function apiTest (line 7) | function apiTest() {
FILE: internal/cmd/testdata/summary/browser.js
function browserTest (line 3) | async function browserTest() {
FILE: internal/cmd/testdata/summary/grpc.js
constant GRPC_ADDR (line 4) | const GRPC_ADDR = __ENV.GRPC_ADDR || '127.0.0.1:10000';
constant GRPC_PROTO_PATH (line 5) | const GRPC_PROTO_PATH = __ENV.GRPC_PROTO_PATH || '../../../lib/testutils...
function grpcTest (line 11) | function grpcTest() {
FILE: internal/cmd/testdata/summary/ws.js
function wsTest (line 16) | function wsTest() {
function startWSWorker (line 22) | function startWSWorker(id) {
FILE: internal/cmd/tests/cmd_cloud_login_test.go
constant validToken (line 18) | validToken = "valid-token"
constant validStackID (line 19) | validStackID = 1234
constant validStack (line 20) | validStack = "valid-stack"
constant validStackURL (line 21) | validStackURL = "https://valid-stack.grafana.net"
constant defaultProjectID (line 22) | defaultProjectID = 5678
function TestCloudLoginWithArgs (line 25) | func TestCloudLoginWithArgs(t *testing.T) {
function mockValidateTokenServer (line 124) | func mockValidateTokenServer(t *testing.T) *httptest.Server {
FILE: internal/cmd/tests/cmd_cloud_run_test.go
function TestK6CloudRun (line 22) | func TestK6CloudRun(t *testing.T) {
function setupK6CloudRunCmd (line 27) | func setupK6CloudRunCmd(cliFlags []string) []string {
function TestCloudRunCommandIncompatibleFlags (line 31) | func TestCloudRunCommandIncompatibleFlags(t *testing.T) {
function TestCloudRunLocalExecution (line 70) | func TestCloudRunLocalExecution(t *testing.T) {
function makeTestState (line 202) | func makeTestState(tb testing.TB, script string, cliFlags []string, expE...
function parseMultipartRequest (line 216) | func parseMultipartRequest(r *http.Request) (map[string]string, error) {
FILE: internal/cmd/tests/cmd_cloud_test.go
function TestK6Cloud (line 23) | func TestK6Cloud(t *testing.T) {
function setupK6CloudCmd (line 28) | func setupK6CloudCmd(cliFlags []string) []string {
type setupCommandFunc (line 32) | type setupCommandFunc
function runCloudTests (line 34) | func runCloudTests(t *testing.T, setupCmd setupCommandFunc) {
function cloudTestStartSimple (line 283) | func cloudTestStartSimple(tb testing.TB, testRunID int) http.Handler {
function getMockCloud (line 291) | func getMockCloud(
function getSimpleCloudTestState (line 325) | func getSimpleCloudTestState(t *testing.T, script []byte, setupCmd setup...
FILE: internal/cmd/tests/cmd_cloud_upload_test.go
function TestK6CloudUpload (line 21) | func TestK6CloudUpload(t *testing.T) {
function setupK6CloudUploadCmd (line 155) | func setupK6CloudUploadCmd(cliFlags []string) []string {
FILE: internal/cmd/tests/cmd_run_grpc_test.go
constant projectRootPath (line 15) | projectRootPath = "../../../"
function TestGRPCInputOutput (line 19) | func TestGRPCInputOutput(t *testing.T) {
FILE: internal/cmd/tests/cmd_run_test.go
function TestVersion (line 39) | func TestVersion(t *testing.T) {
function TestSimpleTestStdin (line 66) | func TestSimpleTestStdin(t *testing.T) {
function TestBinaryNameStdout (line 82) | func TestBinaryNameStdout(t *testing.T) {
function TestBinaryNameHelpStdout (line 96) | func TestBinaryNameHelpStdout(t *testing.T) {
function TestStdoutAndStderrAreEmptyWithQuietAndHandleSummary (line 136) | func TestStdoutAndStderrAreEmptyWithQuietAndHandleSummary(t *testing.T) {
function TestStdoutAndStderrAreEmptyWithQuietAndLogsForwarded (line 154) | func TestStdoutAndStderrAreEmptyWithQuietAndLogsForwarded(t *testing.T) {
function TestRelativeLogPathWithSetupAndTeardown (line 224) | func TestRelativeLogPathWithSetupAndTeardown(t *testing.T) {
function TestWrongCliFlagIterations (line 250) | func TestWrongCliFlagIterations(t *testing.T) {
function TestWrongEnvVarIterations (line 262) | func TestWrongEnvVarIterations(t *testing.T) {
function getSingleFileTestState (line 280) | func getSingleFileTestState(tb testing.TB, script string, cliFlags []str...
function TestMetricsAndThresholds (line 293) | func TestMetricsAndThresholds(t *testing.T) {
function TestThresholdsWithCustomPercentile (line 385) | func TestThresholdsWithCustomPercentile(t *testing.T) {
function TestSSLKEYLOGFILEAbsolute (line 417) | func TestSSLKEYLOGFILEAbsolute(t *testing.T) {
function TestSSLKEYLOGFILEARelative (line 423) | func TestSSLKEYLOGFILEARelative(t *testing.T) {
function testSSLKEYLOGFILE (line 429) | func testSSLKEYLOGFILE(t *testing.T, ts *GlobalTestState, filePath strin...
function TestThresholdDeprecationWarnings (line 460) | func TestThresholdDeprecationWarnings(t *testing.T) {
function TestExecutionTestOptionsDefaultValues (line 500) | func TestExecutionTestOptionsDefaultValues(t *testing.T) {
function TestSubMetricThresholdNoData (line 520) | func TestSubMetricThresholdNoData(t *testing.T) {
function getTestServer (line 548) | func getTestServer(tb testing.TB, routes map[string]http.Handler) *httpt...
function getCloudTestEndChecker (line 567) | func getCloudTestEndChecker(
function getSimpleCloudOutputTestState (line 614) | func getSimpleCloudOutputTestState(
function TestSetupTeardownThresholds (line 629) | func TestSetupTeardownThresholds(t *testing.T) {
function TestThresholdsFailed (line 708) | func TestThresholdsFailed(t *testing.T) {
function TestAbortedByThreshold (line 750) | func TestAbortedByThreshold(t *testing.T) {
function TestAbortedByUserWithGoodThresholds (line 793) | func TestAbortedByUserWithGoodThresholds(t *testing.T) {
function asyncWaitForStdoutAndRun (line 855) | func asyncWaitForStdoutAndRun(
function injectMockSignalNotifier (line 893) | func injectMockSignalNotifier(ts *GlobalTestState) (sendSignal chan os.S...
function asyncWaitForStdoutAndStopTestWithInterruptSignal (line 910) | func asyncWaitForStdoutAndStopTestWithInterruptSignal(
function asyncWaitForStdoutAndStopTestFromRESTAPI (line 921) | func asyncWaitForStdoutAndStopTestFromRESTAPI(
function TestAbortedByUserWithRestAPI (line 943) | func TestAbortedByUserWithRestAPI(t *testing.T) {
function TestAbortedByScriptSetupErrorWithDependency (line 979) | func TestAbortedByScriptSetupErrorWithDependency(t *testing.T) {
function TestAbortedByUnknownModules (line 1027) | func TestAbortedByUnknownModules(t *testing.T) {
function TestRunFromNotBaseDirectory (line 1055) | func TestRunFromNotBaseDirectory(t *testing.T) {
function TestRunCSVParseConcurrentFromMultipleModules (line 1081) | func TestRunCSVParseConcurrentFromMultipleModules(t *testing.T) {
function TestRunFromSeparateDriveWindows (line 1138) | func TestRunFromSeparateDriveWindows(t *testing.T) {
function runTestWithNoLinger (line 1167) | func runTestWithNoLinger(_ *testing.T, ts *GlobalTestState) {
function runTestWithLinger (line 1171) | func runTestWithLinger(t *testing.T, ts *GlobalTestState) {
function TestAbortedByScriptSetupError (line 1177) | func TestAbortedByScriptSetupError(t *testing.T) {
function TestAbortedByScriptTeardownError (line 1215) | func TestAbortedByScriptTeardownError(t *testing.T) {
function testAbortedByScriptError (line 1254) | func testAbortedByScriptError(t *testing.T, script string, runTest func(...
function TestAbortedByTestAbortFirstInitCode (line 1269) | func TestAbortedByTestAbortFirstInitCode(t *testing.T) {
function TestAbortedByTestAbortInNonFirstInitCode (line 1288) | func TestAbortedByTestAbortInNonFirstInitCode(t *testing.T) {
function TestAbortedByScriptAbortInVUCode (line 1307) | func TestAbortedByScriptAbortInVUCode(t *testing.T) {
function TestAbortedByScriptAbortInVUCodeInGroup (line 1328) | func TestAbortedByScriptAbortInVUCodeInGroup(t *testing.T) {
function TestAbortedByScriptAbortInSetup (line 1352) | func TestAbortedByScriptAbortInSetup(t *testing.T) {
function TestAbortedByScriptAbortInTeardown (line 1373) | func TestAbortedByScriptAbortInTeardown(t *testing.T) {
function testAbortedByScriptTestAbort (line 1395) | func testAbortedByScriptTestAbort(t *testing.T, script string, runTest f...
function TestAbortedByInterruptDuringVUInit (line 1412) | func TestAbortedByInterruptDuringVUInit(t *testing.T) {
function TestAbortedByInterruptWhenPaused (line 1444) | func TestAbortedByInterruptWhenPaused(t *testing.T) {
function TestAbortedByScriptInitError (line 1465) | func TestAbortedByScriptInitError(t *testing.T) {
function TestMetricTagAndSetupDataIsolation (line 1495) | func TestMetricTagAndSetupDataIsolation(t *testing.T) {
function getSampleValues (line 1592) | func getSampleValues(t *testing.T, jsonOutput []byte, metric string, tag...
function sum (line 1644) | func sum(vals []float64) (sum float64) {
function TestActiveVUsCount (line 1651) | func TestActiveVUsCount(t *testing.T) {
function TestMinIterationDuration (line 1722) | func TestMinIterationDuration(t *testing.T) {
function TestMetricNameError (line 1759) | func TestMetricNameError(t *testing.T) {
function TestRunTags (line 1794) | func TestRunTags(t *testing.T) {
function TestRunWithCloudOutputOverrides (line 1902) | func TestRunWithCloudOutputOverrides(t *testing.T) {
function TestRunWithCloudOutputCustomConfigAndOverridesLegacyCloudOption (line 1927) | func TestRunWithCloudOutputCustomConfigAndOverridesLegacyCloudOption(t *...
function TestRunWithCloudOutputCustomConfigAndOverrides (line 1979) | func TestRunWithCloudOutputCustomConfigAndOverrides(t *testing.T) {
function TestPrometheusRemoteWriteOutput (line 2029) | func TestPrometheusRemoteWriteOutput(t *testing.T) {
function BenchmarkReadResponseBody (line 2045) | func BenchmarkReadResponseBody(b *testing.B) {
function TestUIRenderOutput (line 2087) | func TestUIRenderOutput(t *testing.T) {
function TestUIRenderWebDashboard (line 2119) | func TestUIRenderWebDashboard(t *testing.T) {
function TestRunStaticArchives (line 2164) | func TestRunStaticArchives(t *testing.T) {
function TestBadLogOutput (line 2197) | func TestBadLogOutput(t *testing.T) {
function TestEventSystemOK (line 2222) | func TestEventSystemOK(t *testing.T) {
function TestEventSystemError (line 2279) | func TestEventSystemError(t *testing.T) {
function BenchmarkRun (line 2381) | func BenchmarkRun(b *testing.B) {
function BenchmarkRunEvents (line 2404) | func BenchmarkRunEvents(b *testing.B) {
function TestBrowserPermissions (line 2444) | func TestBrowserPermissions(t *testing.T) {
function TestBrowserExperimentalImport (line 2516) | func TestBrowserExperimentalImport(t *testing.T) {
function TestSetupTimeout (line 2548) | func TestSetupTimeout(t *testing.T) {
function TestTypeScriptSupport (line 2580) | func TestTypeScriptSupport(t *testing.T) {
function TestTypeScriptSupportWithoutAutomaticExtensionResolution (line 2609) | func TestTypeScriptSupportWithoutAutomaticExtensionResolution(t *testing...
function TestBasicSecrets (line 2639) | func TestBasicSecrets(t *testing.T) {
function TestMultipleSecretSources (line 2667) | func TestMultipleSecretSources(t *testing.T) {
function TestK6SecretSourceEnvVar (line 2708) | func TestK6SecretSourceEnvVar(t *testing.T) {
function TestSummaryExport (line 2917) | func TestSummaryExport(t *testing.T) {
function TestHandleSummary (line 3036) | func TestHandleSummary(t *testing.T) {
function TestGroupsOrderInFullSummary (line 3116) | func TestGroupsOrderInFullSummary(t *testing.T) {
function TestGroupsOrderInFullSummaryWithScenario (line 3160) | func TestGroupsOrderInFullSummaryWithScenario(t *testing.T) {
function TestInvalidSummaryModeAbortsTheExecution (line 3212) | func TestInvalidSummaryModeAbortsTheExecution(t *testing.T) {
function TestMachineReadableSummary (line 3233) | func TestMachineReadableSummary(t *testing.T) {
function TestSpaceInPath (line 3434) | func TestSpaceInPath(t *testing.T) {
FILE: internal/cmd/tests/eventloop_test.go
function TestEventLoop (line 11) | func TestEventLoop(t *testing.T) {
function TestEventLoopCrossScenario (line 57) | func TestEventLoopCrossScenario(t *testing.T) {
function TestEventLoopDoesntCrossIterations (line 93) | func TestEventLoopDoesntCrossIterations(t *testing.T) {
function eventLoopTest (line 121) | func eventLoopTest(t *testing.T, script []byte, testHandle func(logLines...
FILE: internal/cmd/tests/events/events.go
type RootModule (line 13) | type RootModule struct
method NewModuleInstance (line 44) | func (rm *RootModule) NewModuleInstance(vu modules.VU) modules.Instance {
type Events (line 25) | type Events struct
method Exports (line 102) | func (e *Events) Exports() modules.Exports {
function New (line 33) | func New(globalEvents, vuEvents []event.Type) *RootModule {
FILE: internal/cmd/tests/grpc.go
type GRPC (line 15) | type GRPC struct
function NewGRPC (line 22) | func NewGRPC(t testing.TB) *GRPC {
FILE: internal/cmd/tests/test_state.go
type GlobalTestState (line 30) | type GlobalTestState struct
method ReparseFlags (line 128) | func (ts *GlobalTestState) ReparseFlags() {
function NewGlobalTestState (line 44) | func NewGlobalTestState(tb testing.TB) *GlobalTestState {
function getFlags (line 138) | func getFlags(defaultFlags state.GlobalFlags, env map[string]string, arg...
function getFreeBindAddr (line 142) | func getFreeBindAddr(tb testing.TB) string {
FILE: internal/cmd/tests/tests.go
type blockingTransport (line 13) | type blockingTransport struct
method RoundTrip (line 19) | func (bt *blockingTransport) RoundTrip(req *http.Request) (*http.Respo...
function Main (line 33) | func Main(m *testing.M) {
FILE: internal/cmd/tests/tests_test.go
function TestMain (line 12) | func TestMain(m *testing.M) {
function TestRootCommand (line 16) | func TestRootCommand(t *testing.T) {
function TestLoginCloudNotPanicking (line 37) | func TestLoginCloudNotPanicking(t *testing.T) {
FILE: internal/cmd/ui.go
constant maxLeftLength (line 31) | maxLeftLength = 30
constant termPadding (line 34) | termPadding = 1
constant defaultTermWidth (line 35) | defaultTermWidth = 80
function setColor (line 38) | func setColor(noColor bool, c *color.Color) *color.Color {
function getColor (line 50) | func getColor(noColor bool, attributes ...color.Attribute) *color.Color {
function getBanner (line 54) | func getBanner(noColor bool, isTrueColor bool) string {
function isTrueColor (line 64) | func isTrueColor(env map[string]string) bool {
function printBanner (line 75) | func printBanner(gs *state.GlobalState) {
function printBar (line 87) | func printBar(gs *state.GlobalState, bar *pb.ProgressBar) {
function modifyAndPrintBar (line 110) | func modifyAndPrintBar(gs *state.GlobalState, bar *pb.ProgressBar, optio...
function printExecutionDescription (line 117) | func printExecutionDescription(
function renderMultipleBars (line 185) | func renderMultipleBars(
function showProgress (line 279) | func showProgress(ctx context.Context, gs *state.GlobalState, pbs []*pb....
function yamlPrint (line 397) | func yamlPrint(w io.Writer, v any) error {
FILE: internal/cmd/ui_test.go
function createTestProgressBars (line 15) | func createTestProgressBars(num, padding, colIdx int) []*pb.ProgressBar {
function TestRenderMultipleBars (line 40) | func TestRenderMultipleBars(t *testing.T) {
FILE: internal/cmd/ui_unix.go
function getWinchSignal (line 10) | func getWinchSignal() os.Signal {
FILE: internal/cmd/ui_windows.go
function getWinchSignal (line 10) | func getWinchSignal() os.Signal {
FILE: internal/cmd/version.go
constant commitKey (line 18) | commitKey = "commit"
constant commitDirtyKey (line 19) | commitDirtyKey = "commit_dirty"
constant mainK6Path (line 20) | mainK6Path = "go.k6.io/k6"
function fullVersion (line 25) | func fullVersion() string {
function versionDetails (line 49) | func versionDetails() map[string]any {
function versionString (line 97) | func versionString() string {
function versionDetailsWithExtensions (line 113) | func versionDetailsWithExtensions(exts []*ext.Extension) (map[string]any...
type versionCmd (line 166) | type versionCmd struct
method run (line 171) | func (c *versionCmd) run(cmd *cobra.Command, _ []string) error {
function getCmdVersion (line 191) | func getCmdVersion(gs *state.GlobalState) *cobra.Command {
FILE: internal/cmd/version_test.go
function TestVersionFlag (line 16) | func TestVersionFlag(t *testing.T) {
function TestVersionSubCommand (line 37) | func TestVersionSubCommand(t *testing.T) {
function TestVersionJSONSubCommand (line 58) | func TestVersionJSONSubCommand(t *testing.T) {
function TestVersionDetailsWithExtensions (line 88) | func TestVersionDetailsWithExtensions(t *testing.T) {
FILE: internal/ds/histogram/hdr.go
constant defaultMinimumResolution (line 12) | defaultMinimumResolution = .001
constant lowestTrackable (line 18) | lowestTrackable = 0
type Hdr (line 31) | type Hdr struct
method Add (line 73) | func (h *Hdr) Add(v float64) {
method addToBucket (line 80) | func (h *Hdr) addToBucket(v float64) {
function NewHdr (line 63) | func NewHdr() *Hdr {
function resolveBucketIndex (line 107) | func resolveBucketIndex(val float64) uint32 {
FILE: internal/ds/histogram/hdr_test.go
function TestResolveBucketIndex (line 11) | func TestResolveBucketIndex(t *testing.T) {
function TestHistogramAddWithSimpleValues (line 55) | func TestHistogramAddWithSimpleValues(t *testing.T) {
function TestHistogramAddWithUntrackables (line 140) | func TestHistogramAddWithUntrackables(t *testing.T) {
function TestHistogramAddWithMultipleOccurances (line 162) | func TestHistogramAddWithMultipleOccurances(t *testing.T) {
function TestHistogramAddWithNegativeNum (line 184) | func TestHistogramAddWithNegativeNum(t *testing.T) {
function TestHistogramAddWithMultipleNegativeNums (line 203) | func TestHistogramAddWithMultipleNegativeNums(t *testing.T) {
function TestHistogramAddWithZeroToOneValues (line 223) | func TestHistogramAddWithZeroToOneValues(t *testing.T) {
function TestNewHistogram (line 243) | func TestNewHistogram(t *testing.T) {
FILE: internal/event/event.go
type Event (line 6) | type Event struct
FILE: internal/event/system.go
type Subscriber (line 13) | type Subscriber interface
type System (line 20) | type System struct
method Subscribe (line 45) | func (s *System) Subscribe(events ...Type) (subID uint64, eventsCh <-c...
method Emit (line 74) | func (s *System) Emit(event *Event) (wait func(context.Context) error) {
method Unsubscribe (line 125) | func (s *System) Unsubscribe(subID uint64) {
method UnsubscribeAll (line 147) | func (s *System) UnsubscribeAll() {
function NewEventSystem (line 34) | func NewEventSystem(eventBuffer int, logger logrus.FieldLogger) *System {
FILE: internal/event/system_test.go
function TestEventSystem (line 17) | func TestEventSystem(t *testing.T) {
function processEvents (line 262) | func processEvents(ctx context.Context, es *System, sid uint64, evtCh <-...
FILE: internal/event/type.go
type Type (line 6) | type Type
constant Init (line 10) | Init Type = iota + 1
constant TestStart (line 12) | TestStart
constant TestEnd (line 14) | TestEnd
constant IterStart (line 16) | IterStart
constant IterEnd (line 18) | IterEnd
constant Exit (line 20) | Exit
type ExitData (line 33) | type ExitData struct
type IterData (line 38) | type IterData struct
FILE: internal/event/type_gen.go
constant _TypeName (line 9) | _TypeName = "InitTestStartTestEndIterStartIterEndExit"
method String (line 13) | func (i Type) String() string {
function TypeString (line 34) | func TypeString(s string) (Type, error) {
function TypeValues (line 42) | func TypeValues() []Type {
method IsAType (line 47) | func (i Type) IsAType() bool {
FILE: internal/execution/abort.go
type testAbortKey (line 14) | type testAbortKey struct
type testAbortController (line 16) | type testAbortController struct
method abort (line 24) | func (tac *testAbortController) abort(err error) {
method getReason (line 38) | func (tac *testAbortController) getReason() error {
function NewTestRunContext (line 49) | func NewTestRunContext(
function AbortTestRun (line 64) | func AbortTestRun(ctx context.Context, err error) bool {
function GetCancelReasonIfTestAborted (line 77) | func GetCancelReasonIfTestAborted(ctx context.Context) error {
FILE: internal/execution/controller.go
type Controller (line 5) | type Controller interface
function SignalAndWait (line 35) | func SignalAndWait(c Controller, eventID string) error {
function SignalErrorOrWait (line 47) | func SignalErrorOrWait(c Controller, eventID string, err error) error {
FILE: internal/execution/local/controller.go
type Controller (line 12) | type Controller struct
method GetOrCreateData (line 20) | func (c *Controller) GetOrCreateData(_ string, callback func() ([]byte...
method Subscribe (line 33) | func (c *Controller) Subscribe(_ string) func() error {
method Signal (line 43) | func (c *Controller) Signal(_ string, _ error) error {
function NewController (line 15) | func NewController() *Controller {
FILE: internal/execution/scheduler.go
type Scheduler (line 22) | type Scheduler struct
method GetState (line 95) | func (e *Scheduler) GetState() *lib.ExecutionState {
method GetExecutors (line 101) | func (e *Scheduler) GetExecutors() []lib.Executor {
method GetExecutorConfigs (line 107) | func (e *Scheduler) GetExecutorConfigs() []lib.ExecutorConfig {
method GetInitProgressBar (line 114) | func (e *Scheduler) GetInitProgressBar() *pb.ProgressBar {
method GetExecutionPlan (line 120) | func (e *Scheduler) GetExecutionPlan() []lib.ExecutionStep {
method initVU (line 127) | func (e *Scheduler) initVU(
method getRunStats (line 144) | func (e *Scheduler) getRunStats() string {
method initVUsConcurrently (line 162) | func (e *Scheduler) initVUsConcurrently(
method emitVUsAndVUsMax (line 199) | func (e *Scheduler) emitVUsAndVUsMax(ctx context.Context, out chan<- m...
method initVUsAndExecutors (line 254) | func (e *Scheduler) initVUsAndExecutors(ctx context.Context, samplesOu...
method runExecutor (line 331) | func (e *Scheduler) runExecutor(
method Init (line 381) | func (e *Scheduler) Init(
method Run (line 419) | func (e *Scheduler) Run(globalCtx, runCtx context.Context, samplesOut ...
method SetPaused (line 576) | func (e *Scheduler) SetPaused(pause bool) error {
function NewScheduler (line 38) | func NewScheduler(trs *lib.TestRunState, controller Controller) (*Schedu...
FILE: internal/execution/scheduler_ext_exec_test.go
function TestExecutionInfoVUSharing (line 24) | func TestExecutionInfoVUSharing(t *testing.T) {
function TestExecutionInfoScenarioIter (line 139) | func TestExecutionInfoScenarioIter(t *testing.T) {
function TestSharedIterationsStable (line 240) | func TestSharedIterationsStable(t *testing.T) {
function TestExecutionInfoAll (line 317) | func TestExecutionInfoAll(t *testing.T) {
FILE: internal/execution/scheduler_ext_test.go
function getTestPreInitState (line 38) | func getTestPreInitState(tb testing.TB) *lib.TestPreInitState {
function getTestRunState (line 49) | func getTestRunState(
function newTestScheduler (line 62) | func newTestScheduler(
function TestSchedulerRun (line 103) | func TestSchedulerRun(t *testing.T) {
function TestSchedulerRunNonDefault (line 113) | func TestSchedulerRunNonDefault(t *testing.T) {
function TestSchedulerRunEnv (line 175) | func TestSchedulerRunEnv(t *testing.T) {
function TestSchedulerSystemTags (line 293) | func TestSchedulerSystemTags(t *testing.T) {
function TestSchedulerRunCustomTags (line 395) | func TestSchedulerRunCustomTags(t *testing.T) {
function TestSchedulerRunCustomConfigNoCrossover (line 525) | func TestSchedulerRunCustomConfigNoCrossover(t *testing.T) {
function TestSchedulerSetupTeardownRun (line 722) | func TestSchedulerSetupTeardownRun(t *testing.T) {
function TestSchedulerStages (line 815) | func TestSchedulerStages(t *testing.T) {
function TestSchedulerEndTime (line 861) | func TestSchedulerEndTime(t *testing.T) {
function TestSchedulerRuntimeErrors (line 886) | func TestSchedulerRuntimeErrors(t *testing.T) {
function TestSchedulerEndErrors (line 918) | func TestSchedulerEndErrors(t *testing.T) {
function TestSchedulerEndIterations (line 952) | func TestSchedulerEndIterations(t *testing.T) {
function TestSchedulerIsRunning (line 1011) | func TestSchedulerIsRunning(t *testing.T) {
function TestDNSResolverCache (line 1035) | func TestDNSResolverCache(t *testing.T) {
function TestRealTimeAndSetupTeardownMetrics (line 1148) | func TestRealTimeAndSetupTeardownMetrics(t *testing.T) {
function TestNewSchedulerHasWork (line 1360) | func TestNewSchedulerHasWork(t *testing.T) {
FILE: internal/execution/scheduler_int_test.go
function getBogusTestRunState (line 15) | func getBogusTestRunState(tb testing.TB) *lib.TestRunState {
type pausableExecutor (line 33) | type pausableExecutor struct
method SetPaused (line 38) | func (p pausableExecutor) SetPaused(bool) error {
function TestSetPaused (line 42) | func TestSetPaused(t *testing.T) {
FILE: internal/js/bundle.go
type Bundle (line 36) | type Bundle struct
method makeArchive (line 162) | func (b *Bundle) makeArchive() *lib.Archive {
method populateExports (line 185) | func (b *Bundle) populateExports(updateOptions bool, bi *BundleInstanc...
method Instantiate (line 257) | func (b *Bundle) Instantiate(ctx context.Context, vuID uint64) (*Bundl...
method instantiate (line 308) | func (b *Bundle) instantiate(vuImpl *moduleVUImpl, vuID uint64) (*Bund...
method setupJSRuntime (line 405) | func (b *Bundle) setupJSRuntime(rt *sobek.Runtime, vuID uint64, logger...
method setInitGlobals (line 456) | func (b *Bundle) setInitGlobals(rt *sobek.Runtime, vu *moduleVUImpl, m...
type BundleInstance (line 51) | type BundleInstance struct
method getCallableExport (line 61) | func (bi *BundleInstance) getCallableExport(name string) sobek.Callable {
method getExported (line 67) | func (bi *BundleInstance) getExported(name string) sobek.Value {
method manipulateOptions (line 280) | func (bi *BundleInstance) manipulateOptions(options lib.Options) error {
function NewBundle (line 82) | func NewBundle(
function newBundle (line 88) | func newBundle(
function NewBundleFromArchive (line 141) | func NewBundleFromArchive(
function beautifyOptionsJSONUnmarshalError (line 243) | func beautifyOptionsJSONUnmarshalError(data []byte, err error) error {
function newCompiler (line 299) | func newCompiler(preInitState *lib.TestPreInitState, filesystems map[str...
function registerGlobals (line 396) | func registerGlobals(vuImpl *moduleVUImpl) error {
type requireImpl (line 444) | type requireImpl struct
method require (line 449) | func (r *requireImpl) require(specifier string) (*sobek.Object, error) {
function generateFileLoad (line 532) | func generateFileLoad(logger logrus.FieldLogger, filesystems map[string]...
function NewModuleResolver (line 549) | func NewModuleResolver(pwd *url.URL, preInitState *lib.TestPreInitState,...
FILE: internal/js/bundle_test.go
constant isWindows (line 33) | isWindows = runtime.GOOS == "windows"
function getTestPreInitState (line 35) | func getTestPreInitState(tb testing.TB, logger logrus.FieldLogger, rtOpt...
function getSimpleBundle (line 53) | func getSimpleBundle(tb testing.TB, filename, data string, opts ...any) ...
function getSimpleBundleFromArchive (line 87) | func getSimpleBundleFromArchive(tb testing.TB, arc *lib.Archive, opts .....
function getSimpleBundleStdin (line 108) | func getSimpleBundleStdin(tb testing.TB, pwd *url.URL, data string, opts...
function TestNewBundle (line 144) | func TestNewBundle(t *testing.T) {
function getArchive (line 543) | func getArchive(tb testing.TB, data string, rtOpts lib.RuntimeOptions) (...
function TestNewBundleFromArchive (line 551) | func TestNewBundleFromArchive(t *testing.T) {
function TestOpen (line 654) | func TestOpen(t *testing.T) {
function TestBundleInstantiate (line 815) | func TestBundleInstantiate(t *testing.T) {
function TestBundleEnv (line 869) | func TestBundleEnv(t *testing.T) {
function TestBundleNotSharable (line 903) | func TestBundleNotSharable(t *testing.T) {
function TestBundleMakeArchive (line 942) | func TestBundleMakeArchive(t *testing.T) {
function TestGlobalTimers (line 1000) | func TestGlobalTimers(t *testing.T) {
function TestTopLevelAwaitErrors (line 1036) | func TestTopLevelAwaitErrors(t *testing.T) {
FILE: internal/js/compiler/compiler.go
type Compiler (line 22) | type Compiler struct
method WithUsage (line 40) | func (c *Compiler) WithUsage(u *usage.Usage) {
method Parse (line 66) | func (c *Compiler) Parse(
function New (line 29) | func New(logger logrus.FieldLogger) *Compiler {
type Options (line 45) | type Options struct
type parsingState (line 50) | type parsingState struct
method parseImpl (line 83) | func (ps *parsingState) parseImpl(src, filename string, commonJSWrap b...
method wrap (line 143) | func (ps *parsingState) wrap(code, filename string) string {
method sourceMapLoader (line 167) | func (ps *parsingState) sourceMapLoader(path string) ([]byte, error) {
method updateInlineSourceMap (line 191) | func (ps *parsingState) updateInlineSourceMap(code string, index int) ...
method increaseMappingsByOne (line 216) | func (ps *parsingState) increaseMappingsByOne(sourceMap []byte) ([]byt...
constant usageParsedFilesKey (line 79) | usageParsedFilesKey = "usage/parsedFiles"
constant usageParsedTSFilesKey (line 80) | usageParsedTSFilesKey = "usage/parsedTSFiles"
constant internalSourceMapURL (line 161) | internalSourceMapURL = "k6://internal-should-not-leak/file.map"
FILE: internal/js/compiler/compiler_test.go
function TestCompile (line 16) | func TestCompile(t *testing.T) {
function TestCorruptSourceMap (line 116) | func TestCorruptSourceMap(t *testing.T) {
function TestMinimalSourceMap (line 147) | func TestMinimalSourceMap(t *testing.T) {
FILE: internal/js/compiler/enhanced.go
function StripTypes (line 11) | func StripTypes(src, filename string) (code string, srcMap []byte, err e...
function esbuildCheckError (line 34) | func esbuildCheckError(result *api.TransformResult) (bool, error) {
FILE: internal/js/compiler/enhanced_test.go
function Test_esbuildTransform_js (line 14) | func Test_esbuildTransform_js(t *testing.T) {
function Test_esbuildTransform_ts (line 24) | func Test_esbuildTransform_ts(t *testing.T) {
function TestCompile_experimental_enhanced (line 36) | func TestCompile_experimental_enhanced(t *testing.T) {
FILE: internal/js/console.go
type console (line 17) | type console struct
method log (line 42) | func (c console) log(level logrus.Level, args ...sobek.Value) {
method Log (line 66) | func (c console) Log(args ...sobek.Value) {
method Debug (line 70) | func (c console) Debug(args ...sobek.Value) {
method Info (line 74) | func (c console) Info(args ...sobek.Value) {
method Warn (line 78) | func (c console) Warn(args ...sobek.Value) {
method Error (line 82) | func (c console) Error(args ...sobek.Value) {
method valueString (line 96) | func (c console) valueString(v sobek.Value) string {
method traverseValue (line 127) | func (c console) traverseValue(sb *strings.Builder, v sobek.Value, see...
function newConsole (line 22) | func newConsole(logger logrus.FieldLogger) *console {
function newFileConsole (line 27) | func newFileConsole(filepath string, formatter logrus.Formatter, level l...
constant functionLog (line 87) | functionLog = "[object Function]"
constant circularLog (line 88) | circularLog = "[Circular]"
function formatDate (line 210) | func formatDate(sb *strings.Builder, obj *sobek.Object) {
function formatPrimitive (line 223) | func formatPrimitive(sb *strings.Builder, v sobek.Value) {
function isBinaryData (line 235) | func isBinaryData(obj *sobek.Object) bool {
function formatBinaryData (line 261) | func formatBinaryData(sb *strings.Builder, obj *sobek.Object) {
function typedArrayName (line 309) | func typedArrayName(exportType reflect.Type) string {
FILE: internal/js/console_test.go
function TestConsoleContext (line 27) | func TestConsoleContext(t *testing.T) {
function getSimpleRunner (line 48) | func getSimpleRunner(tb testing.TB, filename, data string, opts ...any) ...
function getSimpleArchiveRunner (line 92) | func getSimpleArchiveRunner(tb testing.TB, arc *lib.Archive, opts ...any...
function extractLogger (line 128) | func extractLogger(vu lib.ActiveVU) *logrus.Logger {
function TestConsoleLogWithSobekNativeObject (line 144) | func TestConsoleLogWithSobekNativeObject(t *testing.T) {
function TestConsoleLogObjectsWithGoTypes (line 164) | func TestConsoleLogObjectsWithGoTypes(t *testing.T) {
function TestConsoleLog (line 221) | func TestConsoleLog(t *testing.T) {
function TestConsoleLogWithGoValues (line 383) | func TestConsoleLogWithGoValues(t *testing.T) { //nolint:tparallel // ac...
function TestConsoleLevels (line 435) | func TestConsoleLevels(t *testing.T) {
function TestFileConsole (line 494) | func TestFileConsole(t *testing.T) {
FILE: internal/js/empty_iterations_bench_test.go
function BenchmarkEmptyIteration (line 12) | func BenchmarkEmptyIteration(b *testing.B) {
FILE: internal/js/esm_vs_commonjs_test.go
function TestReturnInCommonJSModule (line 11) | func TestReturnInCommonJSModule(t *testing.T) {
function TestReturnInESMModule (line 23) | func TestReturnInESMModule(t *testing.T) {
FILE: internal/js/eventloop/eventloop.go
type EventLoop (line 26) | type EventLoop struct
method wakeup (line 53) | func (e *EventLoop) wakeup() {
method RegisterCallback (line 116) | func (e *EventLoop) RegisterCallback() (enqueueCallback func(func() er...
method promiseRejectionTracker (line 136) | func (e *EventLoop) promiseRejectionTracker(p *sobek.Promise, op sobek...
method popAll (line 146) | func (e *EventLoop) popAll() (queue []func() error, awaiting bool) {
method putInfront (line 155) | func (e *EventLoop) putInfront(queue []func() error) {
method Start (line 164) | func (e *EventLoop) Start(firstCallback func() error) error {
method WaitOnRegistered (line 207) | func (e *EventLoop) WaitOnRegistered() {
function New (line 42) | func New(vu modules.VU) *EventLoop {
FILE: internal/js/eventloop/eventloop_test.go
function TestBasicEventLoop (line 17) | func TestBasicEventLoop(t *testing.T) {
function TestEventLoopRegistered (line 37) | func TestEventLoopRegistered(t *testing.T) {
function TestEventLoopWaitOnRegistered (line 61) | func TestEventLoopWaitOnRegistered(t *testing.T) {
function TestEventLoopAllCallbacksGetCalled (line 88) | func TestEventLoopAllCallbacksGetCalled(t *testing.T) {
function TestEventLoopPanicOnDoubleCallback (line 127) | func TestEventLoopPanicOnDoubleCallback(t *testing.T) {
function TestEventLoopRejectUndefined (line 153) | func TestEventLoopRejectUndefined(t *testing.T) {
function TestEventLoopRejectString (line 165) | func TestEventLoopRejectString(t *testing.T) {
function TestEventLoopRejectSyntaxError (line 177) | func TestEventLoopRejectSyntaxError(t *testing.T) {
function TestEventLoopRejectGoError (line 189) | func TestEventLoopRejectGoError(t *testing.T) {
function TestEventLoopRejectThrow (line 205) | func TestEventLoopRejectThrow(t *testing.T) {
function TestEventLoopAsyncAwait (line 222) | func TestEventLoopAsyncAwait(t *testing.T) {
FILE: internal/js/http_bench_test.go
function BenchmarkHTTPRequests (line 17) | func BenchmarkHTTPRequests(b *testing.B) {
function BenchmarkHTTPRequestsBase (line 53) | func BenchmarkHTTPRequestsBase(b *testing.B) {
FILE: internal/js/init_and_modules_test.go
type CheckModule (line 25) | type CheckModule struct
method InitCtx (line 31) | func (cm *CheckModule) InitCtx(_ context.Context) {
method VuCtx (line 35) | func (cm *CheckModule) VuCtx(_ context.Context) {
function TestNewJSRunnerWithCustomModule (line 41) | func TestNewJSRunnerWithCustomModule(t *testing.T) {
FILE: internal/js/initcontext.go
constant cantBeUsedOutsideInitContextMsg (line 16) | cantBeUsedOutsideInitContextMsg = `the "%s" function is only available i...
function openImpl (line 22) | func openImpl(rt *sobek.Runtime, fs fsext.Fs, basePWD *url.URL, filename...
function readFile (line 37) | func readFile(fileSystem fsext.Fs, filename string) (data []byte, err er...
function allowOnlyOpenedFiles (line 60) | func allowOnlyOpenedFiles(fs fsext.Fs) {
function generateSourceMapLoader (line 69) | func generateSourceMapLoader(logger logrus.FieldLogger, filesystems map[...
FILE: internal/js/initcontext_test.go
function TestRequire (line 27) | func TestRequire(t *testing.T) {
function createAndReadFile (line 201) | func createAndReadFile(t *testing.T, file string, content []byte, expect...
function TestInitContextOpen (line 230) | func TestInitContextOpen(t *testing.T) {
function TestRequestWithBinaryFile (line 291) | func TestRequestWithBinaryFile(t *testing.T) {
function TestRequestWithMultipleBinaryFiles (line 374) | func TestRequestWithMultipleBinaryFiles(t *testing.T) {
function Test__VU (line 515) | func Test__VU(t *testing.T) {
function TestSourceMaps (line 529) | func TestSourceMaps(t *testing.T) {
function TestSourceMapsCJS (line 563) | func TestSourceMapsCJS(t *testing.T) {
function TestSourceMapsExternal (line 597) | func TestSourceMapsExternal(t *testing.T) {
function TestSourceMapsInlinedCJS (line 627) | func TestSourceMapsInlinedCJS(t *testing.T) {
function TestImportModificationsAreConsistentBetweenFiles (line 697) | func TestImportModificationsAreConsistentBetweenFiles(t *testing.T) {
function TestCacheAbsolutePathsNotRelative (line 727) | func TestCacheAbsolutePathsNotRelative(t *testing.T) {
FILE: internal/js/jsmodules.go
function getInternalJSModules (line 32) | func getInternalJSModules() map[string]any {
function getJSModules (line 88) | func getJSModules() map[string]any {
type removedModule (line 100) | type removedModule struct
method NewModuleInstance (line 108) | func (rm *removedModule) NewModuleInstance(vu modules.VU) modules.Inst...
function newRemovedModule (line 104) | func newRemovedModule(errMsg string) modules.Module {
type warnExperimentalModule (line 114) | type warnExperimentalModule struct
method NewModuleInstance (line 127) | func (w *warnExperimentalModule) NewModuleInstance(vu modules.VU) modu...
function newWarnExperimentalModule (line 120) | func newWarnExperimentalModule(base modules.Module, msg string) modules....
FILE: internal/js/module_loading_test.go
function newDevNullSampleChannel (line 21) | func newDevNullSampleChannel() chan metrics.SampleContainer {
function TestLoadOnceGlobalVars (line 30) | func TestLoadOnceGlobalVars(t *testing.T) {
function TestLoadExportsIsntUsableInModule (line 113) | func TestLoadExportsIsntUsableInModule(t *testing.T) {
function TestLoadDoesntBreakHTTPGet (line 158) | func TestLoadDoesntBreakHTTPGet(t *testing.T) {
function TestLoadGlobalVarsAreNotSharedBetweenVUs (line 203) | func TestLoadGlobalVarsAreNotSharedBetweenVUs(t *testing.T) {
function TestLoadCycle (line 255) | func TestLoadCycle(t *testing.T) {
function TestLoadCycleBinding (line 307) | func TestLoadCycleBinding(t *testing.T) {
function TestBrowserified (line 367) | func TestBrowserified(t *testing.T) {
function TestLoadingUnexistingModuleDoesntPanic (line 429) | func TestLoadingUnexistingModuleDoesntPanic(t *testing.T) {
function TestLoadingSourceMapsDoesntErrorOut (line 470) | func TestLoadingSourceMapsDoesntErrorOut(t *testing.T) {
function TestOptionsAreGloballyReadable (line 504) | func TestOptionsAreGloballyReadable(t *testing.T) {
function TestOptionsAreNotGloballyWritable (line 555) | func TestOptionsAreNotGloballyWritable(t *testing.T) {
function TestDefaultNamedExports (line 592) | func TestDefaultNamedExports(t *testing.T) {
function TestStarImport (line 599) | func TestStarImport(t *testing.T) {
function TestIndirectExportDefault (line 666) | func TestIndirectExportDefault(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/browser_context_mapping.go
function mapBrowserContext (line 17) | func mapBrowserContext(vu moduleVU, bc *common.BrowserContext) mapping {...
type waitForEventOptions (line 182) | type waitForEventOptions struct
function parseWaitForEventOptions (line 192) | func parseWaitForEventOptions(
FILE: internal/js/modules/k6/browser/browser/browser_context_options_test.go
function TestBrowserContextOptionsPermissions (line 13) | func TestBrowserContextOptionsPermissions(t *testing.T) {
function TestBrowserContextSetGeolocation (line 27) | func TestBrowserContextSetGeolocation(t *testing.T) {
function TestBrowserContextDefaultOptions (line 47) | func TestBrowserContextDefaultOptions(t *testing.T) {
function TestBrowserContextAllOptions (line 69) | func TestBrowserContextAllOptions(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/browser_mapping.go
function mapBrowser (line 14) | func mapBrowser(vu moduleVU) mapping {
function initBrowserContext (line 98) | func initBrowserContext(bctx *common.BrowserContext, testRunID string) e...
function parseBrowserContextOptions (line 113) | func parseBrowserContextOptions(rt *sobek.Runtime, opts sobek.Value) (*c...
FILE: internal/js/modules/k6/browser/browser/console_message_mapping.go
function mapConsoleMessage (line 8) | func mapConsoleMessage(vu moduleVU, event common.PageEvent) mapping {
FILE: internal/js/modules/k6/browser/browser/element_handle_mapping.go
function mapElementHandle (line 14) | func mapElementHandle(vu moduleVU, eh *common.ElementHandle) mapping { /...
FILE: internal/js/modules/k6/browser/browser/file_persister.go
type presignedURLConfig (line 13) | type presignedURLConfig struct
function newScreenshotPersister (line 22) | func newScreenshotPersister(envLookup env.LookupFunc) (filePersister, er...
function parsePresignedURLEnvVar (line 41) | func parsePresignedURLEnvVar(envVarValue string) (presignedURLConfig, er...
FILE: internal/js/modules/k6/browser/browser/file_persister_test.go
function Test_newScreenshotPersister (line 12) | func Test_newScreenshotPersister(t *testing.T) {
function Test_parsePresignedURLEnvVar (line 67) | func Test_parsePresignedURLEnvVar(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/frame_locator_mapping.go
function mapFrameLocator (line 12) | func mapFrameLocator(vu moduleVU, fl *common.FrameLocator) mapping {
FILE: internal/js/modules/k6/browser/browser/frame_mapping.go
function mapFrame (line 16) | func mapFrame(vu moduleVU, f *common.Frame) mapping {
FILE: internal/js/modules/k6/browser/browser/helpers.go
function panicIfFatalError (line 19) | func panicIfFatalError(ctx context.Context, err error) {
function mergeWith (line 26) | func mergeWith[T any](rt *sobek.Runtime, src T, v sobek.Value) error {
function exportTo (line 36) | func exportTo[T any](rt *sobek.Runtime, obj sobek.Value) (T, error) {
function exportArg (line 47) | func exportArg(gv sobek.Value) any {
function exportArgs (line 55) | func exportArgs(gargs []sobek.Value) []any {
function sobekEmptyString (line 66) | func sobekEmptyString(v sobek.Value) bool {
function newRegExMatcher (line 75) | func newRegExMatcher(ctx context.Context, vu moduleVU, tq *taskqueue.Tas...
function promise (line 91) | func promise(vu moduleVU, fn func() (result any, reason error)) *sobek.P...
function queueTask (line 108) | func queueTask[T any](
function newTaskQueue (line 138) | func newTaskQueue(vu moduleVU) (*taskqueue.TaskQueue, context.Context, c...
FILE: internal/js/modules/k6/browser/browser/helpers_test.go
function TestSobekEmptyString (line 10) | func TestSobekEmptyString(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/js_handle_mapping.go
function mapJSHandle (line 12) | func mapJSHandle(vu moduleVU, jsh common.JSHandleAPI) mapping {
FILE: internal/js/modules/k6/browser/browser/keyboard_mapping.go
function mapKeyboard (line 11) | func mapKeyboard(vu moduleVU, kb *common.Keyboard) mapping {
FILE: internal/js/modules/k6/browser/browser/locator_mapping.go
function mapLocator (line 16) | func mapLocator(vu moduleVU, lo *common.Locator) mapping {
function parseLocatorOptions (line 427) | func parseLocatorOptions(rt *sobek.Runtime, opts sobek.Value) *common.Lo...
FILE: internal/js/modules/k6/browser/browser/mapping.go
function mapBrowserToSobek (line 25) | func mapBrowserToSobek(vu moduleVU) *sobek.Object {
function parseFrameClickOptions (line 40) | func parseFrameClickOptions(
function ConvertSelectOptionValues (line 50) | func ConvertSelectOptionValues(rt *sobek.Runtime, values sobek.Value) ([...
function extractSelectOptionFromMap (line 131) | func extractSelectOptionFromMap(v map[string]any) (*common.SelectOption,...
FILE: internal/js/modules/k6/browser/browser/mapping_test.go
function customMappings (line 24) | func customMappings() map[string]string {
function TestMappings (line 54) | func TestMappings(t *testing.T) {
function toFirstLetterLower (line 239) | func toFirstLetterLower(s string) string {
function isCustomMapping (line 262) | func isCustomMapping(customMappings map[string]string, typ, method strin...
type browserAPI (line 277) | type browserAPI interface
type browserContextAPI (line 290) | type browserContextAPI interface
type pageAPI (line 310) | type pageAPI interface
type consoleMessageAPI (line 394) | type consoleMessageAPI interface
type metricEventAPI (line 402) | type metricEventAPI interface
type frameAPI (line 407) | type frameAPI interface
type elementHandleAPI (line 470) | type elementHandleAPI interface
type frameLocatorAPI (line 510) | type frameLocatorAPI interface
type requestAPI (line 523) | type requestAPI interface
type responseAPI (line 542) | type responseAPI interface
type locatorAPI (line 563) | type locatorAPI interface
type keyboardAPI (line 613) | type keyboardAPI interface
type touchscreenAPI (line 622) | type touchscreenAPI interface
type mouseAPI (line 627) | type mouseAPI interface
type workerAPI (line 636) | type workerAPI interface
FILE: internal/js/modules/k6/browser/browser/metric_event_mapping.go
function mapMetricEvent (line 10) | func mapMetricEvent(vu moduleVU, event common.PageEvent) mapping {
FILE: internal/js/modules/k6/browser/browser/module.go
type filePersister (line 26) | type filePersister interface
type RootModule (line 32) | type RootModule struct
method NewModuleInstance (line 69) | func (m *RootModule) NewModuleInstance(vu k6modules.VU) k6modules.Inst...
method initialize (line 109) | func (m *RootModule) initialize(vu k6modules.VU) {
type JSModule (line 42) | type JSModule struct
type ModuleInstance (line 49) | type ModuleInstance struct
method Exports (line 103) | func (mi *ModuleInstance) Exports() k6modules.Exports {
function New (line 60) | func New() *RootModule {
FILE: internal/js/modules/k6/browser/browser/module_test.go
function TestModuleNew (line 14) | func TestModuleNew(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/modulevu.go
type moduleVU (line 16) | type moduleVU struct
method browser (line 30) | func (vu moduleVU) browser() (*common.Browser, error) {
method Context (line 34) | func (vu moduleVU) Context() context.Context {
FILE: internal/js/modules/k6/browser/browser/mouse_mapping.go
function mapMouse (line 13) | func mapMouse(vu moduleVU, m *common.Mouse) mapping {
function parseMouseClickOptions (line 65) | func parseMouseClickOptions(rt *sobek.Runtime, opts sobek.Value) (*commo...
function parseMouseDblClickOptions (line 98) | func parseMouseDblClickOptions(rt *sobek.Runtime, opts sobek.Value) (*co...
function parseMouseDownUpOptions (line 124) | func parseMouseDownUpOptions(rt *sobek.Runtime, opts sobek.Value) (*comm...
function parseMouseMoveOptions (line 150) | func parseMouseMoveOptions(rt *sobek.Runtime, opts sobek.Value) (*common...
FILE: internal/js/modules/k6/browser/browser/mouse_mapping_test.go
function TestParseMouseClickOptions (line 13) | func TestParseMouseClickOptions(t *testing.T) {
function TestParseMouseDblClickOptions (line 65) | func TestParseMouseDblClickOptions(t *testing.T) {
function TestParseMouseDownUpOptions (line 112) | func TestParseMouseDownUpOptions(t *testing.T) {
function TestParseMouseMoveOptions (line 159) | func TestParseMouseMoveOptions(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/page_mapping.go
function mapPage (line 21) | func mapPage(vu moduleVU, p *common.Page) mapping { //nolint:gocognit,cy...
function mapPageOn (line 773) | func mapPageOn(vu moduleVU, p *common.Page) func(common.PageEventName, s...
function parseWaitForFunctionArgs (line 816) | func parseWaitForFunctionArgs(
function parseStringOrRegex (line 844) | func parseStringOrRegex(v sobek.Value, doubleQuote bool) string {
function parseGetByRoleOptions (line 862) | func parseGetByRoleOptions(ctx context.Context, opts sobek.Value) *commo...
function parseGetByBaseOptions (line 909) | func parseGetByBaseOptions(
function mapPageRoute (line 937) | func mapPageRoute(vu moduleVU, p *common.Page) func(sobek.Value, sobek.C...
function mapWaitForURL (line 963) | func mapWaitForURL(vu moduleVU, target interface {
function mapWaitForNavigation (line 985) | func mapWaitForNavigation(vu moduleVU, target interface {
function parsePageWaitForResponseOptions (line 1015) | func parsePageWaitForResponseOptions(
function parsePageWaitForRequestOptions (line 1037) | func parsePageWaitForRequestOptions(
function parsePageWaitForEventOptions (line 1061) | func parsePageWaitForEventOptions(
function parseSize (line 1098) | func parseSize(rt *sobek.Runtime, opts sobek.Value) (*common.Size, error) {
function parsePageEmulateMediaOptions (line 1134) | func parsePageEmulateMediaOptions(
FILE: internal/js/modules/k6/browser/browser/page_mapping_test.go
function TestParseStringOrRegex (line 14) | func TestParseStringOrRegex(t *testing.T) {
function TestParseSize (line 56) | func TestParseSize(t *testing.T) {
function TestParsePageEmulateMediaOptions (line 133) | func TestParsePageEmulateMediaOptions(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/registry.go
type pidRegistry (line 36) | type pidRegistry struct
method registerPid (line 42) | func (r *pidRegistry) registerPid(pid int) {
method Pids (line 50) | func (r *pidRegistry) Pids() []int {
type remoteRegistry (line 62) | type remoteRegistry struct
method isRemoteBrowser (line 158) | func (r *remoteRegistry) isRemoteBrowser() (string, bool) {
function newRemoteRegistry (line 73) | func newRemoteRegistry(envLookup env.LookupFunc) (*remoteRegistry, error) {
function checkForBrowserWSURLs (line 91) | func checkForBrowserWSURLs(envLookup env.LookupFunc) (bool, []string) {
function checkForScenarios (line 114) | func checkForScenarios(envLookup env.LookupFunc) (bool, []string, error) {
type browserRegistry (line 172) | type browserRegistry struct
method handleIterEvents (line 253) | func (r *browserRegistry) handleIterEvents(
method handleExitEvent (line 327) | func (r *browserRegistry) handleExitEvent(exitCh <-chan *k6event.Event...
method setBrowser (line 343) | func (r *browserRegistry) setBrowser(id int64, b *common.Browser) {
method getBrowser (line 350) | func (r *browserRegistry) getBrowser(id int64) (*common.Browser, error) {
method deleteBrowser (line 361) | func (r *browserRegistry) deleteBrowser(id int64) {
method browserCount (line 373) | func (r *browserRegistry) browserCount() int {
method clear (line 380) | func (r *browserRegistry) clear() {
method initTracesRegistry (line 393) | func (r *browserRegistry) initTracesRegistry() {
method stopTracesRegistry (line 403) | func (r *browserRegistry) stopTracesRegistry() {
type browserBuildFunc (line 185) | type browserBuildFunc
function newBrowserRegistry (line 196) | func newBrowserRegistry(
function isBrowserIter (line 412) | func isBrowserIter(vu k6modules.VU) bool {
type trace (line 420) | type trace struct
type tracesRegistry (line 426) | type tracesRegistry struct
method startIterationTrace (line 440) | func (r *tracesRegistry) startIterationTrace(ctx context.Context, data...
method endIterationTrace (line 462) | func (r *tracesRegistry) endIterationTrace(iter int64) {
method stop (line 472) | func (r *tracesRegistry) stop() {
method iterationTracesCount (line 485) | func (r *tracesRegistry) iterationTracesCount() int {
function newTracesRegistry (line 433) | func newTracesRegistry(tracer *browsertrace.Tracer) *tracesRegistry {
function parseTracesMetadata (line 492) | func parseTracesMetadata(envLookup env.LookupFunc) (map[string]string, e...
type taskQueueRegistry (line 513) | type taskQueueRegistry struct
method get (line 533) | func (t *taskQueueRegistry) get(ctx context.Context, targetID string) ...
method close (line 554) | func (t *taskQueueRegistry) close(targetID string) {
function newTaskQueueRegistry (line 520) | func newTaskQueueRegistry(vu k6modules.VU) *taskQueueRegistry {
FILE: internal/js/modules/k6/browser/browser/registry_test.go
function TestPidRegistry (line 19) | func TestPidRegistry(t *testing.T) {
function TestIsRemoteBrowser (line 43) | func TestIsRemoteBrowser(t *testing.T) {
function TestBrowserRegistry (line 193) | func TestBrowserRegistry(t *testing.T) {
function TestParseTracesMetadata (line 322) | func TestParseTracesMetadata(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/request_mapping.go
function mapRequestEvent (line 9) | func mapRequestEvent(vu moduleVU, event common.PageEvent) mapping {
function mapRequest (line 16) | func mapRequest(vu moduleVU, r *common.Request) mapping {
FILE: internal/js/modules/k6/browser/browser/response_mapping.go
function mapResponseEvent (line 9) | func mapResponseEvent(vu moduleVU, event common.PageEvent) mapping {
function mapResponse (line 16) | func mapResponse(vu moduleVU, r *common.Response) mapping {
FILE: internal/js/modules/k6/browser/browser/route_mapping.go
function mapRoute (line 15) | func mapRoute(vu moduleVU, route *common.Route) mapping {
function parseContinueOptions (line 46) | func parseContinueOptions(ctx context.Context, opts sobek.Value) (common...
function parseFulfillOptions (line 74) | func parseFulfillOptions(ctx context.Context, opts sobek.Value) (common....
function parseHeaders (line 105) | func parseHeaders(headers *sobek.Object) []common.HTTPHeader {
FILE: internal/js/modules/k6/browser/browser/route_options_test.go
function TestParseContinueOptions (line 14) | func TestParseContinueOptions(t *testing.T) {
function TestParseFulfillOptions (line 109) | func TestParseFulfillOptions(t *testing.T) {
FILE: internal/js/modules/k6/browser/browser/touchscreen_mapping.go
function mapTouchscreen (line 10) | func mapTouchscreen(vu moduleVU, ts *common.Touchscreen) mapping {
FILE: internal/js/modules/k6/browser/browser/worker_mapping.go
function mapWorker (line 8) | func mapWorker(_ moduleVU, w *common.Worker) mapping {
FILE: internal/js/modules/k6/browser/chromium/browser.go
type Browser (line 9) | type Browser struct
FILE: internal/js/modules/k6/browser/chromium/browser_type.go
type BrowserType (line 27) | type BrowserType struct
method init (line 54) | func (b *BrowserType) init(
method initContext (line 87) | func (b *BrowserType) initContext(ctx context.Context) context.Context {
method Connect (line 106) | func (b *BrowserType) Connect(ctx, vuCtx context.Context, wsEndpoint s...
method connect (line 124) | func (b *BrowserType) connect(
method link (line 146) | func (b *BrowserType) link(
method Launch (line 172) | func (b *BrowserType) Launch(ctx, vuCtx context.Context) (_ *common.Br...
method launch (line 190) | func (b *BrowserType) launch(
method tmpdir (line 230) | func (b *BrowserType) tmpdir() string {
method Name (line 236) | func (b *BrowserType) Name() string {
method allocate (line 241) | func (b *BrowserType) allocate(
function NewBrowserType (line 40) | func NewBrowserType(vu k6modules.VU) *BrowserType {
function executablePath (line 275) | func executablePath(
function parseArgs (line 323) | func parseArgs(flags map[string]any) ([]string, error) {
function parseStringArg (line 349) | func parseStringArg(flag string, value string) string {
function prepareFlags (line 358) | func prepareFlags(lopts *common.BrowserOptions, k6opts *k6lib.Options) (...
function ignoreDefaultArgsFlags (line 406) | func ignoreDefaultArgsFlags(flags map[string]any, toIgnore []string) {
function setFlagsFromArgs (line 415) | func setFlagsFromArgs(flags map[string]any, args []string) {
function setFlagsFromK6Options (line 429) | func setFlagsFromK6Options(flags map[string]any, k6opts *k6lib.Options) ...
function makeLogger (line 470) | func makeLogger(ctx context.Context, envLookup env.LookupFunc) (*log.Log...
FILE: internal/js/modules/k6/browser/chromium/browser_type_test.go
function TestBrowserTypePrepareFlags (line 20) | func TestBrowserTypePrepareFlags(t *testing.T) {
function TestExecutablePath (line 156) | func TestExecutablePath(t *testing.T) {
function TestParseArgs (line 253) | func TestParseArgs(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/barrier.go
type Barrier (line 9) | type Barrier struct
method AddFrameNavigation (line 23) | func (b *Barrier) AddFrameNavigation(frame *Frame) {
method Wait (line 44) | func (b *Barrier) Wait(ctx context.Context) error {
function NewBarrier (line 15) | func NewBarrier() *Barrier {
FILE: internal/js/modules/k6/browser/common/barrier_test.go
function TestBarrier (line 13) | func TestBarrier(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/browser.go
constant BrowserStateOpen (line 23) | BrowserStateOpen int64 = iota
constant BrowserStateClosed (line 24) | BrowserStateClosed
type Browser (line 28) | type Browser struct
method connect (line 142) | func (b *Browser) connect() error {
method disposeContext (line 173) | func (b *Browser) disposeContext(id cdp.BrowserContextID) error {
method getDefaultBrowserContextOrMatchedID (line 187) | func (b *Browser) getDefaultBrowserContextOrMatchedID(id cdp.BrowserCo...
method getPages (line 198) | func (b *Browser) getPages() []*Page {
method initEvents (line 208) | func (b *Browser) initEvents() error {
method connectionOnAttachedToTarget (line 270) | func (b *Browser) connectionOnAttachedToTarget(eva *target.EventAttach...
method onAttachedToTarget (line 289) | func (b *Browser) onAttachedToTarget(ev *target.EventAttachedToTarget)...
method attachNewPage (line 372) | func (b *Browser) attachNewPage(p *Page, ev *target.EventAttachedToTar...
method isAttachedPageValid (line 407) | func (b *Browser) isAttachedPageValid(ev *target.EventAttachedToTarget...
method isPageAttachmentErrorIgnorable (line 436) | func (b *Browser) isPageAttachmentErrorIgnorable(ev *target.EventAttac...
method onDetachedFromTarget (line 483) | func (b *Browser) onDetachedFromTarget(ev *target.EventDetachedFromTar...
method newPageInContext (line 507) | func (b *Browser) newPageInContext(id cdp.BrowserContextID) (*Page, er...
method Close (line 572) | func (b *Browser) Close() {
method CloseContext (line 650) | func (b *Browser) CloseContext() error {
method Context (line 658) | func (b *Browser) Context() *BrowserContext {
method IsConnected (line 664) | func (b *Browser) IsConnected() bool {
method NewContext (line 669) | func (b *Browser) NewContext(opts *BrowserContextOptions) (*BrowserCon...
method NewPage (line 698) | func (b *Browser) NewPage(opts *BrowserContextOptions) (*Page, error) {
method On (line 717) | func (b *Browser) On(event string) (bool, error) {
method UserAgent (line 731) | func (b *Browser) UserAgent() string {
method Version (line 736) | func (b *Browser) Version() string {
method fetchVersion (line 746) | func (b *Browser) fetchVersion() (browserVersion, error) {
method WsURL (line 775) | func (b *Browser) WsURL() string {
type browserVersion (line 81) | type browserVersion struct
function NewBrowser (line 90) | func NewBrowser(
function newBrowser (line 113) | func newBrowser(
FILE: internal/js/modules/k6/browser/common/browser_context.go
type waitForEventType (line 24) | type waitForEventType
type Cookie (line 29) | type Cookie struct
type CookieSameSite (line 45) | type CookieSameSite
constant CookieSameSiteStrict (line 51) | CookieSameSiteStrict CookieSameSite = "Strict"
constant CookieSameSiteLax (line 55) | CookieSameSiteLax CookieSameSite = "Lax"
constant CookieSameSiteNone (line 59) | CookieSameSiteNone CookieSameSite = "None"
constant waitForEventTypePage (line 65) | waitForEventTypePage = "page"
type BrowserContext (line 72) | type BrowserContext struct
method setDownloadsPath (line 94) | func (b *BrowserContext) setDownloadsPath(path string) error {
method cleanup (line 110) | func (b *BrowserContext) cleanup() error {
method AddInitScript (line 164) | func (b *BrowserContext) AddInitScript(script string) error {
method applyAllInitScripts (line 178) | func (b *BrowserContext) applyAllInitScripts(p *Page) error {
method Browser (line 189) | func (b *BrowserContext) Browser() *Browser {
method ClearPermissions (line 194) | func (b *BrowserContext) ClearPermissions() error {
method Close (line 206) | func (b *BrowserContext) Close() error {
method GrantPermissions (line 219) | func (b *BrowserContext) GrantPermissions(permissions []string, opts G...
method NewPage (line 257) | func (b *BrowserContext) NewPage() (*Page, error) {
method Pages (line 272) | func (b *BrowserContext) Pages() []*Page {
method SetDefaultNavigationTimeout (line 277) | func (b *BrowserContext) SetDefaultNavigationTimeout(timeout int64) {
method SetDefaultTimeout (line 284) | func (b *BrowserContext) SetDefaultTimeout(timeout int64) {
method SetGeolocation (line 291) | func (b *BrowserContext) SetGeolocation(g *Geolocation) error {
method SetHTTPCredentials (line 314) | func (b *BrowserContext) SetHTTPCredentials(hc Credentials) error {
method SetOffline (line 330) | func (b *BrowserContext) SetOffline(offline bool) error {
method Timeout (line 347) | func (b *BrowserContext) Timeout() time.Duration {
method WaitForEvent (line 352) | func (b *BrowserContext) WaitForEvent(event string, f func(p *Page) (b...
method waitForEvent (line 358) | func (b *BrowserContext) waitForEvent(
method runWaitForEventHandler (line 395) | func (b *BrowserContext) runWaitForEventHandler(
method getSession (line 449) | func (b *BrowserContext) getSession(id target.SessionID) *Session {
method AddCookies (line 455) | func (b *BrowserContext) AddCookies(cookies []*Cookie) error {
method ClearCookies (line 506) | func (b *BrowserContext) ClearCookies() error {
method Cookies (line 523) | func (b *BrowserContext) Cookies(urls ...string) ([]*Cookie, error) {
constant artifactsDirectory (line 89) | artifactsDirectory = "k6browser-artifacts-"
function NewBrowserContext (line 120) | func NewBrowserContext(
function filterCookies (line 571) | func filterCookies(cookies []*Cookie, urls ...string) ([]*Cookie, error) {
function shouldKeepCookie (line 630) | func shouldKeepCookie(c *Cookie, uri *url.URL) bool {
function parseURLs (line 672) | func parseURLs(urls ...string) ([]*url.URL, error) {
FILE: internal/js/modules/k6/browser/common/browser_context_options.go
type BrowserContextOptions (line 6) | type BrowserContextOptions struct
function DefaultBrowserContextOptions (line 31) | func DefaultBrowserContextOptions() *BrowserContextOptions {
type Geolocation (line 46) | type Geolocation struct
method Validate (line 53) | func (g *Geolocation) Validate() error {
type GrantPermissionsOptions (line 67) | type GrantPermissionsOptions struct
FILE: internal/js/modules/k6/browser/common/browser_context_test.go
function TestNewBrowserContext (line 16) | func TestNewBrowserContext(t *testing.T) {
function TestSetDownloadsPath (line 50) | func TestSetDownloadsPath(t *testing.T) {
function TestFilterCookies (line 81) | func TestFilterCookies(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/browser_options.go
constant optType (line 18) | optType = "type"
type BrowserOptions (line 21) | type BrowserOptions struct
method Parse (line 58) | func (bo *BrowserOptions) Parse(
method shouldIgnoreIfBrowserIsRemote (line 118) | func (bo *BrowserOptions) shouldIgnoreIfBrowserIsRemote(opt string) bo...
function NewLocalBrowserOptions (line 38) | func NewLocalBrowserOptions() *BrowserOptions {
function NewRemoteBrowserOptions (line 48) | func NewRemoteBrowserOptions() *BrowserOptions {
function parseBoolOpt (line 134) | func parseBoolOpt(k, v string) (bool, error) {
function parseTimeOpt (line 143) | func parseTimeOpt(k, v string) (time.Duration, error) {
function parseListOpt (line 152) | func parseListOpt(v string) []string {
FILE: internal/js/modules/k6/browser/common/browser_options_test.go
function TestBrowserOptionsParse (line 15) | func TestBrowserOptionsParse(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/browser_process.go
type BrowserProcess (line 18) | type BrowserProcess struct
method handleClose (line 94) | func (p *BrowserProcess) handleClose(ctx context.Context) {
method didLoseConnection (line 109) | func (p *BrowserProcess) didLoseConnection() {
method isConnected (line 113) | func (p *BrowserProcess) isConnected() bool {
method GracefulClose (line 124) | func (p *BrowserProcess) GracefulClose() {
method Terminate (line 130) | func (p *BrowserProcess) Terminate() {
method WsURL (line 136) | func (p *BrowserProcess) WsURL() string {
method Pid (line 141) | func (p *BrowserProcess) Pid() int {
method Cleanup (line 147) | func (p *BrowserProcess) Cleanup() error {
function NewLocalBrowserProcess (line 37) | func NewLocalBrowserProcess(
function NewRemoteBrowserProcess (line 75) | func NewRemoteBrowserProcess(
type command (line 151) | type command struct
function execute (line 157) | func execute(
function parseDevToolsURL (line 208) | func parseDevToolsURL(ctx context.Context, cmd command) (_ string, err e...
type devToolsURLParser (line 235) | type devToolsURLParser struct
method scan (line 242) | func (p *devToolsURLParser) scan() bool {
method err (line 262) | func (p *devToolsURLParser) err() error {
FILE: internal/js/modules/k6/browser/common/browser_process_meta.go
constant unknownProcessPid (line 10) | unknownProcessPid = -1
type browserProcessMeta (line 16) | type browserProcessMeta interface
type localBrowserProcessMeta (line 23) | type localBrowserProcessMeta struct
method Pid (line 40) | func (l *localBrowserProcessMeta) Pid() int {
method Cleanup (line 46) | func (l *localBrowserProcessMeta) Cleanup() error {
function newLocalBrowserProcessMeta (line 30) | func newLocalBrowserProcessMeta(
type remoteBrowserProcessMeta (line 52) | type remoteBrowserProcessMeta struct
method Pid (line 61) | func (r *remoteBrowserProcessMeta) Pid() int {
method Cleanup (line 67) | func (r *remoteBrowserProcessMeta) Cleanup() error {
function newRemoteBrowserProcessMeta (line 56) | func newRemoteBrowserProcessMeta() *remoteBrowserProcessMeta {
FILE: internal/js/modules/k6/browser/common/browser_process_test.go
type mockCommand (line 13) | type mockCommand struct
type mockReader (line 18) | type mockReader struct
method Read (line 24) | func (r *mockReader) Read(p []byte) (n int, err error) {
function TestParseDevToolsURL (line 39) | func TestParseDevToolsURL(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/browser_test.go
function TestBrowserNewPageInContext (line 18) | func TestBrowserNewPageInContext(t *testing.T) {
type fakeConn (line 192) | type fakeConn struct
method Execute (line 197) | func (c fakeConn) Execute(
FILE: internal/js/modules/k6/browser/common/connection.go
constant wsWriteBufferSize (line 24) | wsWriteBufferSize = 1 << 20
type msgID (line 33) | type msgID struct
method newID (line 43) | func (m *msgID) newID() int64 {
type msgIDGenerator (line 47) | type msgIDGenerator interface
type executorEmitter (line 51) | type executorEmitter interface
type connection (line 56) | type connection interface
type session (line 63) | type session interface
type Action (line 73) | type Action interface
type ActionFunc (line 78) | type ActionFunc
method Do (line 81) | func (f ActionFunc) Do(ctx context.Context) error {
type Connection (line 117) | type Connection struct
method close (line 197) | func (c *Connection) close(code int) error {
method closeSession (line 235) | func (c *Connection) closeSession(sid target.SessionID, tid target.ID)...
method closeAllSessions (line 251) | func (c *Connection) closeAllSessions() {
method createSession (line 262) | func (c *Connection) createSession(info *target.Info) (*Session, error) {
method handleIOError (line 282) | func (c *Connection) handleIOError(err error) {
method getSession (line 312) | func (c *Connection) getSession(id target.SessionID) *Session {
method findTargetIDForLog (line 321) | func (c *Connection) findTargetIDForLog(id target.SessionID) target.ID {
method recvLoop (line 333) | func (c *Connection) recvLoop() {
method stopWaitingForDebugger (line 461) | func (c *Connection) stopWaitingForDebugger(sid target.SessionID) {
method send (line 473) | func (c *Connection) send(
method sendLoop (line 539) | func (c *Connection) sendLoop() {
method Close (line 576) | func (c *Connection) Close() {
method Execute (line 583) | func (c *Connection) Execute(
method IgnoreIOErrors (line 636) | func (c *Connection) IgnoreIOErrors() {
method isClosing (line 640) | func (c *Connection) isClosing() (s bool) {
function NewConnection (line 144) | func NewConnection(
FILE: internal/js/modules/k6/browser/common/connection_test.go
function TestConnection (line 21) | func TestConnection(t *testing.T) {
function TestConnectionClosureAbnormal (line 39) | func TestConnectionClosureAbnormal(t *testing.T) {
function TestConnectionSendRecv (line 60) | func TestConnectionSendRecv(t *testing.T) {
function TestConnectionCreateSession (line 81) | func TestConnectionCreateSession(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/consts.go
constant DefaultLocale (line 8) | DefaultLocale string = "en-US"
constant DefaultScreenWidth (line 9) | DefaultScreenWidth int64 = 1280
constant DefaultScreenHeight (line 10) | DefaultScreenHeight int64 = 720
constant DefaultTimeout (line 11) | DefaultTimeout time.Duration = 30 * time.Second
constant LifeCycleNetworkIdleTimeout (line 15) | LifeCycleNetworkIdleTimeout time.Duration = 500 * time.Millisecond
constant StrictModeOff (line 19) | StrictModeOff = false
FILE: internal/js/modules/k6/browser/common/context.go
type ctxKey (line 9) | type ctxKey
constant ctxKeyBrowserOptions (line 12) | ctxKeyBrowserOptions ctxKey = iota
constant ctxKeyHooks (line 13) | ctxKeyHooks
constant ctxKeyIterationID (line 14) | ctxKeyIterationID
constant ctxKeyTracer (line 15) | ctxKeyTracer
function WithHooks (line 18) | func WithHooks(ctx context.Context, hooks *Hooks) context.Context {
function GetHooks (line 22) | func GetHooks(ctx context.Context) *Hooks {
function WithIterationID (line 31) | func WithIterationID(ctx context.Context, iterID string) context.Context {
function GetIterationID (line 36) | func GetIterationID(ctx context.Context) string {
function WithBrowserOptions (line 42) | func WithBrowserOptions(ctx context.Context, opts *BrowserOptions) conte...
function GetBrowserOptions (line 47) | func GetBrowserOptions(ctx context.Context) *BrowserOptions {
function WithTracer (line 59) | func WithTracer(ctx context.Context, tracer Tracer) context.Context {
function GetTracer (line 64) | func GetTracer(ctx context.Context) Tracer {
function contextWithDoneChan (line 77) | func contextWithDoneChan(ctx context.Context, done chan struct{}) contex...
function ContextErr (line 90) | func ContextErr(ctx context.Context) error {
FILE: internal/js/modules/k6/browser/common/context_test.go
function TestContextWithDoneChan (line 11) | func TestContextWithDoneChan(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/device.go
type Device (line 4) | type Device struct
function GetDevices (line 16) | func GetDevices() map[string]Device {
FILE: internal/js/modules/k6/browser/common/element_handle.go
constant resultDone (line 32) | resultDone = "done"
constant resultNeedsInput (line 33) | resultNeedsInput = "needsinput"
type elementHandleActionFunc (line 37) | type elementHandleActionFunc
type elementHandlePointerActionFunc (line 38) | type elementHandlePointerActionFunc
type retryablePointerActionFunc (line 39) | type retryablePointerActionFunc
type evalFunc (line 43) | type evalFunc
type ElementHandle (line 47) | type ElementHandle struct
method String (line 56) | func (h *ElementHandle) String() string {
method boundingBox (line 63) | func (h *ElementHandle) boundingBox() (*Rect, error) {
method translatePointToPage (line 91) | func (h *ElementHandle) translatePointToPage(apiCtx context.Context, p...
method checkHitTargetAt (line 135) | func (h *ElementHandle) checkHitTargetAt(apiCtx context.Context, point...
method checkElementState (line 184) | func (h *ElementHandle) checkElementState(_ context.Context, state str...
method click (line 209) | func (h *ElementHandle) click(p *Position, opts *MouseClickOptions) er...
method clickablePoint (line 216) | func (h *ElementHandle) clickablePoint() (*Position, error) {
method dblclick (line 224) | func (h *ElementHandle) dblclick(p *Position, opts *MouseClickOptions)...
method DefaultTimeout (line 229) | func (h *ElementHandle) DefaultTimeout() time.Duration {
method dispatchEvent (line 233) | func (h *ElementHandle) dispatchEvent(_ context.Context, typ string, e...
method fill (line 248) | func (h *ElementHandle) fill(_ context.Context, value string) error {
method focus (line 279) | func (h *ElementHandle) focus(apiCtx context.Context, resetSelectionIf...
method getAttribute (line 305) | func (h *ElementHandle) getAttribute(apiCtx context.Context, name stri...
method hover (line 318) | func (h *ElementHandle) hover(_ context.Context, p *Position) error {
method innerHTML (line 322) | func (h *ElementHandle) innerHTML(apiCtx context.Context) (any, error) {
method innerText (line 335) | func (h *ElementHandle) innerText(apiCtx context.Context) (any, error) {
method inputValue (line 349) | func (h *ElementHandle) inputValue(apiCtx context.Context) (any, error) {
method isChecked (line 366) | func (h *ElementHandle) isChecked(apiCtx context.Context, timeout time...
method isDisabled (line 370) | func (h *ElementHandle) isDisabled(apiCtx context.Context, timeout tim...
method isEditable (line 374) | func (h *ElementHandle) isEditable(apiCtx context.Context, timeout tim...
method isEnabled (line 378) | func (h *ElementHandle) isEnabled(apiCtx context.Context, timeout time...
method isHidden (line 382) | func (h *ElementHandle) isHidden(apiCtx context.Context) (bool, error) {
method isVisible (line 386) | func (h *ElementHandle) isVisible(apiCtx context.Context) (bool, error) {
method offsetPosition (line 390) | func (h *ElementHandle) offsetPosition(apiCtx context.Context, offset ...
method ownerFrame (line 426) | func (h *ElementHandle) ownerFrame(apiCtx context.Context) (*Frame, er...
method scrollRectIntoViewIfNeeded (line 448) | func (h *ElementHandle) scrollRectIntoViewIfNeeded(apiCtx context.Cont...
method press (line 463) | func (h *ElementHandle) press(apiCtx context.Context, key string, opts...
method selectOption (line 475) | func (h *ElementHandle) selectOption(apiCtx context.Context, values []...
method selectText (line 498) | func (h *ElementHandle) selectText(apiCtx context.Context) error {
method textContent (line 520) | func (h *ElementHandle) textContent(apiCtx context.Context) (any, erro...
method typ (line 533) | func (h *ElementHandle) typ(apiCtx context.Context, text string, opts ...
method waitAndScrollIntoViewIfNeeded (line 545) | func (h *ElementHandle) waitAndScrollIntoViewIfNeeded(
method waitForElementState (line 568) | func (h *ElementHandle) waitForElementState(
method stepIntoFrame (line 601) | func (h *ElementHandle) stepIntoFrame(
method waitForSelector (line 632) | func (h *ElementHandle) waitForSelector(
method count (line 687) | func (h *ElementHandle) count(apiCtx context.Context, selector string)...
method findFrameNavigationIndex (line 741) | func (h *ElementHandle) findFrameNavigationIndex(selector *Selector) i...
method splitSelectorAtFrame (line 751) | func (h *ElementHandle) splitSelectorAtFrame(selector *Selector, frame...
method reconstructSelector (line 768) | func (h *ElementHandle) reconstructSelector(selector *Selector) string {
method AsElement (line 786) | func (h *ElementHandle) AsElement() *ElementHandle {
method BoundingBox (line 791) | func (h *ElementHandle) BoundingBox() (*Rect, error) {
method Click (line 805) | func (h *ElementHandle) Click(opts *ElementHandleClickOptions) error {
method ContentFrame (line 821) | func (h *ElementHandle) ContentFrame() (*Frame, error) {
method Dblclick (line 843) | func (h *ElementHandle) Dblclick(opts *ElementHandleDblclickOptions) e...
method DispatchEvent (line 858) | func (h *ElementHandle) DispatchEvent(typ string, eventInit any) error {
method Fill (line 876) | func (h *ElementHandle) Fill(value string, opts *ElementHandleBaseOpti...
method Focus (line 894) | func (h *ElementHandle) Focus() error {
method GetAttribute (line 913) | func (h *ElementHandle) GetAttribute(name string) (string, bool, error) {
method Hover (line 941) | func (h *ElementHandle) Hover(opts *ElementHandleHoverOptions) error {
method InnerHTML (line 956) | func (h *ElementHandle) InnerHTML() (string, error) {
method InnerText (line 980) | func (h *ElementHandle) InnerText() (string, error) {
method InputValue (line 1004) | func (h *ElementHandle) InputValue(opts *ElementHandleBaseOptions) (st...
method IsChecked (line 1023) | func (h *ElementHandle) IsChecked() (bool, error) {
method IsDisabled (line 1034) | func (h *ElementHandle) IsDisabled() (bool, error) {
method IsEditable (line 1045) | func (h *ElementHandle) IsEditable() (bool, error) {
method IsEnabled (line 1056) | func (h *ElementHandle) IsEnabled() (bool, error) {
method IsHidden (line 1067) | func (h *ElementHandle) IsHidden() (bool, error) {
method IsVisible (line 1078) | func (h *ElementHandle) IsVisible() (bool, error) {
method OwnerFrame (line 1089) | func (h *ElementHandle) OwnerFrame() (_ *Frame, rerr error) {
method Press (line 1140) | func (h *ElementHandle) Press(key string, opts *ElementHandlePressOpti...
method Query (line 1158) | func (h *ElementHandle) Query(selector string, strict bool) (_ *Elemen...
method QueryAll (line 1220) | func (h *ElementHandle) QueryAll(selector string) ([]*ElementHandle, e...
method queryAll (line 1229) | func (h *ElementHandle) queryAll(selector string, eval evalFunc) (_ []...
method SetChecked (line 1298) | func (h *ElementHandle) SetChecked(checked bool, opts *ElementHandleSe...
method Uncheck (line 1314) | func (h *ElementHandle) Uncheck(opts *ElementHandleSetCheckedOptions) ...
method Check (line 1320) | func (h *ElementHandle) Check(opts *ElementHandleSetCheckedOptions) er...
method setChecked (line 1324) | func (h *ElementHandle) setChecked(apiCtx context.Context, checked boo...
method Screenshot (line 1350) | func (h *ElementHandle) Screenshot(
method ScrollIntoViewIfNeeded (line 1373) | func (h *ElementHandle) ScrollIntoViewIfNeeded(opts *ElementHandleBase...
method SelectOption (line 1385) | func (h *ElementHandle) SelectOption(values []any, opts *ElementHandle...
method SelectText (line 1407) | func (h *ElementHandle) SelectText(opts *ElementHandleBaseOptions) err...
method SetInputFiles (line 1424) | func (h *ElementHandle) SetInputFiles(files *Files, opts *ElementHandl...
method setInputFiles (line 1436) | func (h *ElementHandle) setInputFiles(apiCtx context.Context, files *F...
method Tap (line 1467) | func (h *ElementHandle) Tap(opts *ElementHandleTapOptions) error {
method tap (line 1482) | func (h *ElementHandle) tap(_ context.Context, p *Position) error {
method TextContent (line 1488) | func (h *ElementHandle) TextContent() (string, bool, error) {
method Timeout (line 1516) | func (h *ElementHandle) Timeout() time.Duration {
method Type (line 1521) | func (h *ElementHandle) Type(text string, opts *ElementHandleTypeOptio...
method WaitForElementState (line 1538) | func (h *ElementHandle) WaitForElementState(state string, opts *Elemen...
method WaitForSelector (line 1548) | func (h *ElementHandle) WaitForSelector(selector string, opts *FrameWa...
method evalWithScript (line 1559) | func (h *ElementHandle) evalWithScript(
method eval (line 1571) | func (h *ElementHandle) eval(
method newAction (line 1579) | func (h *ElementHandle) newAction(
method newPointerAction (line 1629) | func (h *ElementHandle) newPointerAction(
function retryPointerAction (line 1744) | func retryPointerAction(
function errorFromDOMError (line 1787) | func errorFromDOMError(v any) error {
FILE: internal/js/modules/k6/browser/common/element_handle_options.go
type ElementHandleBaseOptions (line 16) | type ElementHandleBaseOptions struct
method Parse (line 151) | func (o *ElementHandleBaseOptions) Parse(ctx context.Context, opts sob...
type ElementHandleBasePointerOptions (line 22) | type ElementHandleBasePointerOptions struct
method Parse (line 179) | func (o *ElementHandleBasePointerOptions) Parse(ctx context.Context, o...
type ScrollPosition (line 33) | type ScrollPosition
constant ScrollPositionStart (line 37) | ScrollPositionStart ScrollPosition = "start"
constant ScrollPositionCenter (line 39) | ScrollPositionCenter ScrollPosition = "center"
constant ScrollPositionEnd (line 41) | ScrollPositionEnd ScrollPosition = "end"
constant ScrollPositionNearest (line 43) | ScrollPositionNearest ScrollPosition = "nearest"
constant optionButton (line 47) | optionButton = "button"
constant optionDelay (line 48) | optionDelay = "delay"
constant optionClickCount (line 49) | optionClickCount = "clickCount"
constant optionModifiers (line 50) | optionModifiers = "modifiers"
type ScrollIntoViewOptions (line 55) | type ScrollIntoViewOptions struct
type ElementHandleCheckOptions (line 67) | type ElementHandleCheckOptions struct
method Parse (line 210) | func (o *ElementHandleCheckOptions) Parse(ctx context.Context, opts so...
type ElementHandleClickOptions (line 71) | type ElementHandleClickOptions struct
method Parse (line 286) | func (o *ElementHandleClickOptions) Parse(ctx context.Context, opts so...
method ToMouseClickOptions (line 317) | func (o *ElementHandleClickOptions) ToMouseClickOptions() *MouseClickO...
type ElementHandleDblclickOptions (line 79) | type ElementHandleDblclickOptions struct
method Parse (line 335) | func (o *ElementHandleDblclickOptions) Parse(ctx context.Context, opts...
method ToMouseClickOptions (line 360) | func (o *ElementHandleDblclickOptions) ToMouseClickOptions() *MouseCli...
type ElementHandleHoverOptions (line 86) | type ElementHandleHoverOptions struct
method Parse (line 376) | func (o *ElementHandleHoverOptions) Parse(ctx context.Context, opts so...
type File (line 92) | type File struct
type Files (line 99) | type Files struct
method addFile (line 222) | func (f *Files) addFile(ctx context.Context, file sobek.Value) error {
method Parse (line 243) | func (f *Files) Parse(ctx context.Context, files sobek.Value) error {
type ElementHandleSetInputFilesOptions (line 104) | type ElementHandleSetInputFilesOptions struct
method Parse (line 267) | func (o *ElementHandleSetInputFilesOptions) Parse(ctx context.Context,...
type ElementHandlePressOptions (line 108) | type ElementHandlePressOptions struct
method Parse (line 405) | func (o *ElementHandlePressOptions) Parse(ctx context.Context, opts so...
method ToBaseOptions (line 423) | func (o *ElementHandlePressOptions) ToBaseOptions() *ElementHandleBase...
type ElementHandleScreenshotOptions (line 114) | type ElementHandleScreenshotOptions struct
method Parse (line 442) | func (o *ElementHandleScreenshotOptions) Parse(ctx context.Context, op...
type ElementHandleSetCheckedOptions (line 122) | type ElementHandleSetCheckedOptions struct
method Parse (line 486) | func (o *ElementHandleSetCheckedOptions) Parse(ctx context.Context, op...
type ElementHandleTapOptions (line 127) | type ElementHandleTapOptions struct
method Parse (line 512) | func (o *ElementHandleTapOptions) Parse(ctx context.Context, opts sobe...
type ElementHandleTypeOptions (line 132) | type ElementHandleTypeOptions struct
method Parse (line 541) | func (o *ElementHandleTypeOptions) Parse(ctx context.Context, opts sob...
method ToBaseOptions (line 559) | func (o *ElementHandleTypeOptions) ToBaseOptions() *ElementHandleBaseO...
type ElementHandleWaitForElementStateOptions (line 138) | type ElementHandleWaitForElementStateOptions struct
method Parse (line 574) | func (o *ElementHandleWaitForElementStateOptions) Parse(ctx context.Co...
function NewElementHandleBaseOptions (line 142) | func NewElementHandleBaseOptions(defaultTimeout time.Duration) *ElementH...
function NewElementHandleBasePointerOptions (line 170) | func NewElementHandleBasePointerOptions(defaultTimeout time.Duration) *E...
function NewElementHandleCheckOptions (line 203) | func NewElementHandleCheckOptions(defaultTimeout time.Duration) *Element...
function NewElementHandleSetInputFilesOptions (line 215) | func NewElementHandleSetInputFilesOptions(defaultTimeout time.Duration) ...
function NewElementHandleClickOptions (line 275) | func NewElementHandleClickOptions(defaultTimeout time.Duration) *Element...
function NewElementHandleDblclickOptions (line 325) | func NewElementHandleDblclickOptions(defaultTimeout time.Duration) *Elem...
function NewElementHandleHoverOptions (line 368) | func NewElementHandleHoverOptions(defaultTimeout time.Duration) *Element...
function NewElementHandlePressOptions (line 396) | func NewElementHandlePressOptions(defaultTimeout time.Duration) *Element...
function NewElementHandleScreenshotOptions (line 431) | func NewElementHandleScreenshotOptions(defaultTimeout time.Duration) *El...
function NewElementHandleSetCheckedOptions (line 478) | func NewElementHandleSetCheckedOptions(defaultTimeout time.Duration) *El...
function NewElementHandleTapOptions (line 504) | func NewElementHandleTapOptions(defaultTimeout time.Duration) *ElementHa...
function NewElementHandleTypeOptions (line 532) | func NewElementHandleTypeOptions(defaultTimeout time.Duration) *ElementH...
function NewElementHandleWaitForElementStateOptions (line 567) | func NewElementHandleWaitForElementStateOptions(defaultTimeout time.Dura...
type ElementHandleDispatchEventOptions (line 588) | type ElementHandleDispatchEventOptions struct
function NewElementHandleDispatchEventOptions (line 593) | func NewElementHandleDispatchEventOptions(defaultTimeout time.Duration) ...
FILE: internal/js/modules/k6/browser/common/element_handle_test.go
function TestErrorFromDOMError (line 15) | func TestErrorFromDOMError(t *testing.T) {
function TestQueryAll (line 38) | func TestQueryAll(t *testing.T) {
type jsHandleStub (line 227) | type jsHandleStub struct
method AsElement (line 236) | func (s *jsHandleStub) AsElement() *ElementHandle {
method Dispose (line 243) | func (s *jsHandleStub) Dispose() error {
method GetProperties (line 248) | func (s *jsHandleStub) GetProperties() (map[string]JSHandleAPI, error) {
FILE: internal/js/modules/k6/browser/common/errors.go
type Error (line 10) | type Error
method Error (line 13) | func (e Error) Error() string {
constant ErrUnexpectedRemoteObjectWithID (line 19) | ErrUnexpectedRemoteObjectWithID Error = "cannot extract value when remot...
constant ErrChannelClosed (line 20) | ErrChannelClosed Error = "channel closed"
constant ErrFrameDetached (line 21) | ErrFrameDetached Error = "frame detached"
constant ErrJSHandleDisposed (line 22) | ErrJSHandleDisposed Error = "JS handle is disposed"
constant ErrJSHandleInvalid (line 23) | ErrJSHandleInvalid Error = "JS handle is invalid"
constant ErrTargetCrashed (line 24) | ErrTargetCrashed Error = "Target has crashed"
constant ErrTimedOut (line 25) | ErrTimedOut Error = "timed out"
constant ErrWrongExecutionContext (line 26) | ErrWrongExecutionContext Error = "JS handles can be evaluated onl...
type BigIntParseError (line 29) | type BigIntParseError struct
method Error (line 34) | func (e BigIntParseError) Error() string {
method Is (line 39) | func (e BigIntParseError) Is(target error) bool {
method Unwrap (line 45) | func (e BigIntParseError) Unwrap() error {
type UnserializableValueError (line 49) | type UnserializableValueError struct
method Error (line 54) | func (e UnserializableValueError) Error() string {
FILE: internal/js/modules/k6/browser/common/event_emitter.go
constant EventBrowserDisconnected (line 11) | EventBrowserDisconnected string = "disconnected"
constant EventBrowserContextPage (line 15) | EventBrowserContextPage string = "page"
constant EventConnectionClose (line 19) | EventConnectionClose string = "close"
constant EventFrameNavigation (line 23) | EventFrameNavigation string = "navigation"
constant EventFrameAddLifecycle (line 24) | EventFrameAddLifecycle string = "addlifecycle"
type Event (line 28) | type Event struct
type NavigationEvent (line 38) | type NavigationEvent struct
type queue (line 45) | type queue struct
type eventHandler (line 52) | type eventHandler struct
type EventEmitter (line 59) | type EventEmitter interface
type syncFunc (line 67) | type syncFunc
type BaseEventEmitter (line 70) | type BaseEventEmitter struct
method syncAll (line 96) | func (e *BaseEventEmitter) syncAll(ctx context.Context) {
method sync (line 110) | func (e *BaseEventEmitter) sync(fn func()) {
method emit (line 124) | func (e *BaseEventEmitter) emit(event string, data any) {
method on (line 178) | func (e *BaseEventEmitter) on(ctx context.Context, events []string, ch...
method onAll (line 193) | func (e *BaseEventEmitter) onAll(ctx context.Context, ch chan Event) {
function NewBaseEventEmitter (line 81) | func NewBaseEventEmitter(ctx context.Context) BaseEventEmitter {
FILE: internal/js/modules/k6/browser/common/event_emitter_test.go
function TestEventEmitterSpecificEvent (line 13) | func TestEventEmitterSpecificEvent(t *testing.T) {
function TestEventEmitterAllEvents (line 69) | func TestEventEmitterAllEvents(t *testing.T) {
function TestBaseEventEmitter (line 123) | func TestBaseEventEmitter(t *testing.T) {
FILE: internal/js/modules/k6/browser/common/execution_context.go
constant evaluationScriptURL (line 19) | evaluationScriptURL = "__xk6_browser_evaluation_script__"
constant devToolsServerErrorCode (line 22) | devToolsServerErrorCode = -32000
type executionWorld (line 24) | type executionWorld
method valid (line 31) | func (ew executionWorld) valid() bool {
constant mainWorld (line 27) | mainWorld executionWorld = "main"
constant utilityWorld (line 28) | utilityWorld executionWorld = "utility"
type evalOptions (line 35) | type evalOptions struct
method String (line 39) | func (ea evalOptions) String() string {
type ExecutionContext (line 44) | type ExecutionContext struct
method adoptBackendNodeID (line 89) | func (e *ExecutionContext) adoptBackendNodeID(backendNodeID cdp.Backen...
method adoptElementHandle (line 120) | func (e *ExecutionContext) adoptElementHandle(eh *ElementHandle) (*Ele...
method eval (line 159) | func (e *ExecutionContext) eval(
method getInjectedScript (line 260) | func (e *ExecutionContext) getInjectedScript(apiCtx context.Context) (...
method Eval (line 298) | func (e *ExecutionContext) Eval(apiCtx context.Context, js string, arg...
method EvalHandle (line 314) | func (e *ExecutionContext) EvalHandle(apiCtx context.Context, js strin...
method Frame (line 341) | func (e *ExecutionContext) Frame() *Frame {
method ID (line 346) | func (e *ExecutionContext) ID() runtime.ExecutionContextID {
function NewExecutionContext (line 61) | func NewExecutionContext(
FILE: internal/js/modules/k6/browser/common/frame.go
constant maxRetry (line 23) | maxRetry = 1
type DocumentInfo (line 25) | type DocumentInfo struct
type DOMElementState (line 31) | type DOMElementState
method String (line 41) | func (s DOMElementState) String() string {
method MarshalJSON (line 60) | func (s DOMElementState) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 68) | func (s *DOMElementState) UnmarshalJSON(b []byte) error {
constant DOMElementStateAttached (line 35) | DOMElementStateAttached DOMElementState = iota
constant DOMElementStateDetached (line 36) | DOMElementStateDetached
constant DOMElementStateVisible (line 37) | DOMElementStateVisible
constant DOMElementStateHidden (line 38) | DOMElementStateHidden
type Frame (line 80) | type Frame struct
method String (line 123) | func (f *Frame) String() string {
method addChildFrame (line 163) | func (f *Frame) addChildFrame(child *Frame) {
method addRequest (line 174) | func (f *Frame) addRequest(id network.RequestID) {
method deleteRequest (line 183) | func (f *Frame) deleteRequest(id network.RequestID) {
method clearLifecycle (line 192) | func (f *Frame) clearLifecycle() {
method detach (line 220) | func (f *Frame) detach() error {
method defaultTimeout (line 242) | func (f *Frame) defaultTimeout() time.Duration {
method document (line 246) | func (f *Frame) document() (*ElementHandle, error) {
method cachedDocumentHandle (line 269) | func (f *Frame) cachedDocumentHandle() (*ElementHandle, bool) {
method newDocumentHandle (line 278) | func (f *Frame) newDocumentHandle() (*ElementHandle, error) {
method hasContext (line 302) | func (f *Frame) hasContext(world executionWorld) bool {
method hasLifecycleEventFired (line 309) | func (f *Frame) hasLifecycleEventFired(event LifecycleEvent) bool {
method navigated (line 316) | func (f *Frame) navigated(name string, url string, loaderID string) {
method nullContext (line 326) | func (f *Frame) nullContext(execCtxID runtime.ExecutionContextID) {
method onLifecycleEvent (line 342) | func (f *Frame) onLifecycleEvent(event LifecycleEvent) {
method onLoadingStarted (line 355) | func (f *Frame) onLoadingStarted() {
method onLoadingStopped (line 361) | func (f *Frame) onLoadingStopped() {
method position (line 373) | func (f *Frame) position() (*Position, error) {
method removeChildFrame (line 394) | func (f *Frame) removeChildFrame(child *Frame) {
method setContext (line 404) | func (f *Frame) setContext(world executionWorld, execCtx frameExecutio...
method setID (line 448) | func (f *Frame) setID(id cdp.FrameID) {
method waitForExecutionContext (line 455) | func (f *Frame) waitForExecutionContext(world executionWorld) {
method waitForSelectorRetry (line 473) | func (f *Frame) waitForSelectorRetry(
method waitForSelector (line 491) | func (f *Frame) waitForSelector(selector string, opts *FrameWaitForSel...
method waitFor (line 535) | func (f *Frame) waitFor(
method boundingBox (line 572) | func (f *Frame) boundingBox(selector string, opts *FrameBaseOptions) (...
method ChildFrames (line 593) | func (f *Frame) ChildFrames() []*Frame {
method Click (line 605) | func (f *Frame) Click(selector string, opts *FrameClickOptions) error {
method click (line 617) | func (f *Frame) click(selector string, opts *FrameClickOptions) error {
method count (line 631) | func (f *Frame) count(selector string) (int, error) {
method Check (line 648) | func (f *Frame) Check(selector string, popts *FrameCheckOptions) error {
method check (line 660) | func (f *Frame) check(selector string, opts *FrameCheckOptions) error {
method setChecked (line 674) | func (f *Frame) setChecked(selector string, checked bool, opts *FrameC...
method SetChecked (line 689) | func (f *Frame) SetChecked(selector string, checked bool, popts *Frame...
method Uncheck (line 702) | func (f *Frame) Uncheck(selector string, popts *FrameUncheckOptions) e...
method uncheck (line 714) | func (f *Frame) uncheck(selector string, opts *FrameUncheckOptions) er...
method IsChecked (line 730) | func (f *Frame) IsChecked(selector string, opts *FrameIsCheckedOptions...
method isChecked (line 741) | func (f *Frame) isChecked(selector string, opts *FrameIsCheckedOptions...
method Content (line 766) | func (f *Frame) Content() (string, error) {
method Dblclick (line 793) | func (f *Frame) Dblclick(selector string, popts *FrameDblclickOptions)...
method dblclick (line 807) | func (f *Frame) dblclick(selector string, opts *FrameDblclickOptions) ...
method DispatchEvent (line 822) | func (f *Frame) DispatchEvent(selector, typ string, eventInit any, opt...
method dispatchEvent (line 835) | func (f *Frame) dispatchEvent(selector, typ string, eventInit any, opt...
method EvaluateWithContext (line 857) | func (f *Frame) EvaluateWithContext(ctx context.Context, pageFunc stri...
method Evaluate (line 877) | func (f *Frame) Evaluate(pageFunc string, args ...any) (any, error) {
method EvaluateGlobal (line 884) | func (f *Frame) EvaluateGlobal(ctx context.Context, js string) error {
method EvaluateHandle (line 902) | func (f *Frame) EvaluateHandle(pageFunc string, args ...any) (handle J...
method Fill (line 928) | func (f *Frame) Fill(selector, value string, popts *FrameFillOptions) ...
method fill (line 940) | func (f *Frame) fill(selector, value string, opts *FrameFillOptions) e...
method Focus (line 957) | func (f *Frame) Focus(selector string, popts *FrameBaseOptions) error {
method focus (line 969) | func (f *Frame) focus(selector string, opts *FrameBaseOptions) error {
method FrameElement (line 985) | func (f *Frame) FrameElement() (*ElementHandle, error) {
method GetAttribute (line 997) | func (f *Frame) GetAttribute(selector, name string, popts *FrameBaseOp...
method getAttribute (line 1008) | func (f *Frame) getAttribute(selector, name string, opts *FrameBaseOpt...
method GetByRole (line 1033) | func (f *Frame) GetByRole(role string, opts *GetByRoleOptions) *Locator {
method buildAttributeSelector (line 1061) | func (f *Frame) buildAttributeSelector(attrName, attrValue string, opt...
method buildRoleSelector (line 1082) | func (f *Frame) buildRoleSelector(role string, opts *GetByRoleOptions)...
method mapGetByRoleOptions (line 1098) | func (f *Frame) mapGetByRoleOptions(opts *GetByRoleOptions) map[string...
method buildLabelSelector (line 1146) | func (f *Frame) buildLabelSelector(label string, opts *GetByBaseOption...
method buildTestIDSelector (line 1162) | func (f *Frame) buildTestIDSelector(testID string) string {
method buildTextSelector (line 1172) | func (f *Frame) buildTextSelector(text string, opts *GetByBaseOptions)...
method GetByAltText (line 1187) | func (f *Frame) GetByAltText(alt string, opts *GetByBaseOptions) *Loca...
method GetByLabel (line 1195) | func (f *Frame) GetByLabel(label string, opts *GetByBaseOptions) *Loca...
method GetByPlaceholder (line 1202) | func (f *Frame) GetByPlaceholder(placeholder string, opts *GetByBaseOp...
method GetByTitle (line 1209) | func (f *Frame) GetByTitle(title string, opts *GetByBaseOptions) *Loca...
method GetByTestID (line 1216) | func (f *Frame) GetByTestID(testID string) *Locator {
method GetByText (line 1223) | func (f *Frame) GetByText(text string, opts *GetByBaseOptions) *Locator {
method Referrer (line 1232) | func (f *Frame) Referrer() string {
method NavigationTimeout (line 1239) | func (f *Frame) NavigationTimeout() time.Duration {
method Goto (line 1244) | func (f *Frame) Goto(url string, opts *FrameGotoOptions) (*Response, e...
method Hover (line 1261) | func (f *Frame) Hover(selector string, popts *FrameHoverOptions) error {
method hover (line 1273) | func (f *Frame) hover(selector string, opts *FrameHoverOptions) error {
method InnerHTML (line 1289) | func (f *Frame) InnerHTML(selector string, popts *FrameInnerHTMLOption...
method innerHTML (line 1300) | func (f *Frame) innerHTML(selector string, opts *FrameInnerHTMLOptions...
method InnerText (line 1325) | func (f *Frame) InnerText(selector string, popts *FrameInnerTextOption...
method innerText (line 1336) | func (f *Frame) innerText(selector string, opts *FrameInnerTextOptions...
method InputValue (line 1360) | func (f *Frame) InputValue(selector string, popts *FrameInputValueOpti...
method inputValue (line 1371) | func (f *Frame) inputValue(selector string, opts *FrameInputValueOptio...
method IsDetached (line 1392) | func (f *Frame) IsDetached() bool {
method setDetached (line 1400) | func (f *Frame) setDetached(detached bool) {
method IsEditable (line 1409) | func (f *Frame) IsEditable(selector string, opts *FrameIsEditableOptio...
method isEditable (line 1420) | func (f *Frame) isEditable(selector string, opts *FrameIsEditableOptio...
method IsEnabled (line 1446) | func (f *Frame) IsEnabled(selector string, opts *FrameIsEnabledOptions...
method isEnabled (line 1457) | func (f *Frame) isEnabled(selector string, opts *FrameIsEnabledOptions...
method IsDisabled (line 1483) | func (f *Frame) IsDisabled(selector string, opts *FrameIsDisabledOptio...
method isDisabled (line 1494) | func (f *Frame) isDisabled(selector string, opts *FrameIsDisabledOptio...
method IsHidden (line 1520) | func (f *Frame) IsHidden(selector string, opts *FrameIsHiddenOptions) ...
method isHidden (line 1531) | func (f *Frame) isHidden(selector string, opts *FrameIsHiddenOptions) ...
method IsVisible (line 1549) | func (f *Frame) IsVisible(selector string, opts *FrameIsVisibleOptions...
method isVisible (line 1560) | func (f *Frame) isVisible(selector string, opts *FrameIsVisibleOptions...
method ID (line 1577) | func (f *Frame) ID() string {
method Locator (line 1585) | func (f *Frame) Locator(selector string, opts *LocatorOptions) *Locator {
method FrameLocator (line 1592) | func (f *Frame) FrameLocator(selector string) *FrameLocator {
method LoaderID (line 1599) | func (f *Frame) LoaderID() string {
method Name (line 1607) | func (f *Frame) Name() string {
method Query (line 1616) | func (f *Frame) Query(selector string, strict bool) (*ElementHandle, e...
method QueryAll (line 1627) | func (f *Frame) QueryAll(selector string) ([]*ElementHandle, error) {
method Page (line 1638) | func (f *Frame) Page() *Page {
method ParentFrame (line 1643) | func (f *Frame) ParentFrame() *Frame {
method Press (line 1648) | func (f *Frame) Press(selector, key string, opts *FramePressOptions) e...
method press (line 1660) | func (f *Frame) press(selector, key string, opts *FramePressOptions) e...
method SelectOption (line 1677) | func (f *Frame) SelectOption(selector string, values []any, popts *Fra...
method selectOption (line 1690) | func (f *Frame) selectOption(selector string, values []any, opts *Fram...
method SetContent (line 1731) | func (f *Frame) SetContent(html string, _ *FrameSetContentOptions) err...
method SetInputFiles (line 1760) | func (f *Frame) SetInputFiles(selector string, pfiles *Files, popts *F...
method Tap (line 1773) | func (f *Frame) Tap(selector string, opts *FrameTapOptions) error {
method tap (line 1785) | func (f *Frame) tap(selector string, opts *FrameTapOptions) error {
method setInputFiles (line 1799) | func (f *Frame) setInputFiles(selector string, files *Files, opts *Fra...
method TextContent (line 1819) | func (f *Frame) TextContent(selector string, popts *FrameTextContentOp...
method textContent (line 1830) | func (f *Frame) textContent(selector string, opts *FrameTextContentOpt...
method Timeout (line 1855) | func (f *Frame) Timeout() time.Duration {
method Title (line 1860) | func (f *Frame) Title() (string, error) {
method Type (line 1877) | func (f *Frame) Type(selector, text string, popts *FrameTypeOptions) e...
method typ (line 1889) | func (f *Frame) typ(selector, text string, opts *FrameTypeOptions) err...
method URL (line 1905) | func (f *Frame) URL() string {
method setURL (line 1917) | func (f *Frame) setURL(url string) {
method WaitForFunction (line 1925) | func (f *Frame) WaitForFunction(js string, opts *FrameWaitForFunctionO...
method waitForFunction (line 1947) | func (f *Frame) waitForFunction(
method WaitForLoadState (line 2006) | func (f *Frame) WaitForLoadState(state string, popts *FrameWaitForLoad...
method WaitForNavigation (line 2049) | func (f *Frame) WaitForNavigation(opts *FrameWaitForNavigationOptions,...
method handleWaitForNavigationTimeoutErrorFn (line 2150) | func (f *Frame) handleWaitForNavigationTimeoutErrorFn(opts *FrameWaitF...
method WaitForSelector (line 2170) | func (f *Frame) WaitForSelector(selector string, popts *FrameWaitForSe...
method WaitForTimeout (line 2180) | func (f *Frame) WaitForTimeout(timeout int64) {
method WaitForURL (line 2194) | func (f *Frame) WaitForURL(urlPattern string, opts *FrameWaitForURLOpt...
method adoptBackendNodeID (line 2220) | func (f *Frame) adoptBackendNodeID(world executionWorld, id cdp.Backen...
method evaluate (line 2233) | func (f *Frame) evaluate(
method evaluateWithSelector (line 2256) | func (f *Frame) evaluateWithSelector(selector string, pageFunc string,...
method evaluateHandleWithSelector (line 2273) | func (f *Frame) evaluateHandleWithSelector(selector string, pageFunc s...
method runActionOnSelector (line 2331) | func (f *Frame) runActionOnSelector(
method newAction (line 2357) | func (f *Frame) newAction(
method newPointerAction (line 2390) | func (f *Frame) newPointerAction(
function NewFrame (line 132) | func NewFrame(
function isQuotedText (line 1043) | func isQuotedText(s string) bool {
type frameExecutionContext (line 2297) | type frameExecutionContext interface
FILE: internal/js/modules/k6/browser/common/frame_manager.go
type FrameManager (line 18) | type FrameManager struct
method addBarrier (line 69) | func (m *FrameManager) addBarrier(b *Barrier) {
method removeBarrier (line 77) | func (m *FrameManager) removeBarrier(b *Barrier) {
method frameAbortedNavigation (line 92) | func (m *FrameManager) frameAbortedNavigation(frameID cdp.FrameID, err...
method frameAttached (line 133) | func (m *FrameManager) frameAttached(frameID cdp.FrameID, parentFrameI...
method frameDetached (line 158) | func (m *FrameManager) frameDetached(frameID cdp.FrameID, reason cdppa...
method frameLifecycleEvent (line 198) | func (m *FrameManager) frameLifecycleEvent(frameID cdp.FrameID, event ...
method frameLoadingStarted (line 209) | func (m *FrameManager) frameLoadingStarted(frameID cdp.FrameID) {
method frameLoadingStopped (line 219) | func (m *FrameManager) frameLoadingStopped(frameID cdp.FrameID) {
method frameNavigated (line 230) | func (m *FrameManager) frameNavigated(
method frameNavigatedWithinDocument (line 354) | func (m *FrameManager) frameNavigatedWithinDocument(frameID cdp.FrameI...
method frameRequestedNavigation (line 376) | func (m *FrameManager) frameRequestedNavigation(frameID cdp.FrameID, u...
method getFrameByID (line 426) | func (m *FrameManager) getFrameByID(id cdp.Fr
Copy disabled (too large)
Download .json
Condensed preview — 3946 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (17,394K chars).
[
{
"path": ".codecov.yaml",
"chars": 242,
"preview": "coverage:\n status:\n project:\n default:\n target: auto\n threshold: 0.3%\n windows:\n targ"
},
{
"path": ".dockerignore",
"chars": 8,
"preview": "k6\ndist\n"
},
{
"path": ".editorconfig",
"chars": 237,
"preview": "root = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nindent_style = tab\nindent_"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yaml",
"chars": 1022,
"preview": "name: Bug report\ndescription: Use this template for reporting bugs. Please search existing issues first.\nlabels: bug\nbod"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 307,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: k6 Community Forum\n url: https://community.grafana.com/c/grafana-"
},
{
"path": ".github/ISSUE_TEMPLATE/feat_req.yaml",
"chars": 674,
"preview": "name: Feature Request\ndescription: Use this template for suggesting new features.\nlabels: feature\nbody:\n - type: textar"
},
{
"path": ".github/ISSUE_TEMPLATE/release.md",
"chars": 5490,
"preview": "---\nname: k6 Release\nabout: k6 release accommodates activities and a checklist with the k6 open-source release process.\n"
},
{
"path": ".github/actions/lint/action.yml",
"chars": 1353,
"preview": "name: golangci-lint-k6\ndescription: Run golangci-lint with the k6 ruleset\n\nruns:\n using: composite\n steps:\n - name:"
},
{
"path": ".github/actions/test/action.yml",
"chars": 1204,
"preview": "name: \"Test\"\ndescription: \"Run all tests except ones in browser/tests package\"\n\ninputs:\n platform:\n description: \"ma"
},
{
"path": ".github/actions/test-browser/action.yml",
"chars": 743,
"preview": "name: \"Test browser\"\ndescription: \"Run only tests in browser/tests package without parallel execution\"\n\ninputs:\n use_go"
},
{
"path": ".github/actions/test-common/action.yml",
"chars": 1215,
"preview": "name: \"Test common\"\ndescription: \"Pre-test steps: Go install and optional Chromium install\"\n\ninputs:\n go_version:\n d"
},
{
"path": ".github/pull_request_template.md",
"chars": 1440,
"preview": "## What?\n\n<!-- A short (or detailed) description of what this PR does. -->\n\n## Why?\n\n<!-- A short (or detailed) explanat"
},
{
"path": ".github/workflows/browser_e2e.yml",
"chars": 2391,
"preview": "name: E2E\non:\n # Enable manually triggering this workflow via the API or web UI\n workflow_dispatch:\n push:\n branch"
},
{
"path": ".github/workflows/build.yml",
"chars": 25133,
"preview": "name: Build\non:\n workflow_dispatch:\n inputs:\n k6_version:\n description: 'The version of the release, it "
},
{
"path": ".github/workflows/codeql-analysis.yml",
"chars": 607,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ master ]\n\npermissions:\n contents: read\n security-events: write\n\njobs:\n an"
},
{
"path": ".github/workflows/issue-auto-assign.yml",
"chars": 1899,
"preview": "name: \"Auto assign maintainer to issue\"\non:\n # makes this workflow re-usable\n workflow_call:\n issues:\n types: [ope"
},
{
"path": ".github/workflows/lint.yml",
"chars": 1200,
"preview": "name: Lint\non:\n # Enable manually triggering this workflow via the API or web UI\n workflow_dispatch:\n pull_request:\n\n"
},
{
"path": ".github/workflows/packager.yml",
"chars": 1254,
"preview": "name: k6packager\non:\n # Enable manually triggering this workflow via the API or web UI\n workflow_dispatch:\n schedule:"
},
{
"path": ".github/workflows/publish-techdocs.yaml",
"chars": 579,
"preview": "name: Publish TechDocs\non:\n push:\n branches:\n - master\n paths:\n - 'docs/docs/**'\n - 'docs/mkdocs.y"
},
{
"path": ".github/workflows/stale.yml",
"chars": 1080,
"preview": "name: Close stale PRs\n\non:\n schedule:\n - cron: \"0 8 * * 1\" # once per week, at 08:00 on Mondays\n\npermissions:\n pull"
},
{
"path": ".github/workflows/summary-code-generation.yml",
"chars": 2126,
"preview": "name: Summary code generation\n\non:\n push:\n branches:\n - master\n pull_request:\n\ndefaults:\n run:\n shell: bas"
},
{
"path": ".github/workflows/tc39.yml",
"chars": 838,
"preview": "name: TC39\non:\n workflow_dispatch:\n push:\n branches:\n - master\n pull_request:\n paths:\n - 'js/**"
},
{
"path": ".github/workflows/test-browser.yml",
"chars": 2565,
"preview": "name: Browser tests\non:\n push:\n branches:\n - master\n pull_request:\n\ndefaults:\n run:\n shell: bash\n\npermissi"
},
{
"path": ".github/workflows/test.yml",
"chars": 2418,
"preview": "name: Test\non:\n push:\n branches:\n - master\n pull_request:\n\ndefaults:\n run:\n shell: bash\n\npermissions:\n co"
},
{
"path": ".github/workflows/wpt.yml",
"chars": 948,
"preview": "name: Web Platform Tests\non:\n workflow_dispatch:\n pull_request:\n\ndefaults:\n run:\n shell: bash\n\npermissions:\n cont"
},
{
"path": ".github/workflows/xk6-tests/xk6-js-test/go.mod",
"chars": 2189,
"preview": "module github.com/grafana/xk6-js-test\n\ngo 1.23.0\n\ntoolchain go1.23.7\n\nrequire go.k6.io/k6 v0.57.0\n\nrequire (\n\tgithub.com"
},
{
"path": ".github/workflows/xk6-tests/xk6-js-test/go.sum",
"chars": 17720,
"preview": "github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=\ngithub.com/Masterminds/semver/v3"
},
{
"path": ".github/workflows/xk6-tests/xk6-js-test/jstest.go",
"chars": 1492,
"preview": "package jstest\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"go.k6.io/k6/js/modules\"\n\t\"go.k6.io/k6/metrics\"\n)\n\nfunc init() {\n\tmodules.Regi"
},
{
"path": ".github/workflows/xk6-tests/xk6-output-test/go.mod",
"chars": 1724,
"preview": "module github.com/grafana/xk6-output-test\n\ngo 1.23.0\n\ntoolchain go1.23.7\n\nrequire go.k6.io/k6 v0.57.0\n\nrequire (\n\tgithub"
},
{
"path": ".github/workflows/xk6-tests/xk6-output-test/go.sum",
"chars": 8892,
"preview": "github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=\ngithub.com/andybalholm/brotli v1.1."
},
{
"path": ".github/workflows/xk6-tests/xk6-output-test/outputtest.go",
"chars": 1309,
"preview": "package outputtest\n\nimport (\n\t\"io\"\n\t\"strconv\"\n\n\t\"go.k6.io/k6/metrics\"\n\t\"go.k6.io/k6/output\"\n)\n\nfunc init() {\n\toutput.Reg"
},
{
"path": ".github/workflows/xk6-tests/xk6-test.js",
"chars": 414,
"preview": "\nimport { check } from 'k6';\nimport jsexttest from 'k6/x/jsexttest';\n\nexport let options = {\n iterations: 5,\n thre"
},
{
"path": ".github/workflows/xk6.yml",
"chars": 3331,
"preview": "name: xk6\non:\n # Enable manually triggering this workflow via the API or web UI\n workflow_dispatch:\n push:\n branch"
},
{
"path": ".github/zizmor.yml",
"chars": 216,
"preview": "# This is also used as the default configuration for the Zizmor reusable\n# workflow.\n\nrules:\n unpinned-uses:\n config"
},
{
"path": ".gitignore",
"chars": 1111,
"preview": "/k6\n/k6.exe\n/dist\n/pkg-build\n/internal/lib/summary/machinereadable/k6-summary\n/internal/js/tc39/TestTC39\n/internal/js/mo"
},
{
"path": ".golangci.yml",
"chars": 3266,
"preview": "# v2.10.1\n# Please don't remove the first line. It uses in CI to determine the golangci version\nversion: \"2\"\nlinters:\n "
},
{
"path": "AGENTS.md",
"chars": 10,
"preview": "@CLAUDE.md"
},
{
"path": "CLAUDE.md",
"chars": 6613,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "CODEOWNERS",
"chars": 320,
"preview": "# by default the k6-core team is the owner of all files\n* @grafana/k6-core\n\n# The release notes are shared across differ"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3233,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 5453,
"preview": "# Contributing to k6\n\nThank you for your interest in contributing to k6!\n\n(ノ◕ヮ◕)ノ*:・゚✧\n\nBefore you begin, make sure to f"
},
{
"path": "Dependencies.md",
"chars": 4778,
"preview": "# Updating dependencies in k6\n\nk6 has a not small amount of dependencies, some of which are used more than others which "
},
{
"path": "Dockerfile",
"chars": 1019,
"preview": "FROM --platform=$BUILDPLATFORM golang:1.26.1-alpine@sha256:2389ebfa5b7f43eeafbd6be0c3700cc46690ef842ad962f6c5bd6be49ed82"
},
{
"path": "LICENSE.md",
"chars": 34280,
"preview": "### GNU AFFERO GENERAL PUBLIC LICENSE\n\nVersion 3, 19 November 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc.\n<h"
},
{
"path": "Makefile",
"chars": 3023,
"preview": "MAKEFLAGS += --silent\nGOLANGCI_LINT_VERSION = $(shell head -n 1 .golangci.yml | tr -d '\\# ')\nPROTOC_VERSION := 21.12\n\nif"
},
{
"path": "README.md",
"chars": 7308,
"preview": "<p align=\"center\">\n <a href=\"https://grafana.com/oss/k6/\">\n <picture>\n <img src=\"assets/logo.svg\" alt=\"Grafana "
},
{
"path": "SUPPORT.md",
"chars": 1373,
"preview": "# Support\n\nTypes of questions and where to ask:\n\n- How do I? -- the Discourse forum at [community.k6.io](https://communi"
},
{
"path": "api/v1/client/client.go",
"chars": 2538,
"preview": "// Package client provides a simple go-client for the k6's REST API.\npackage client\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"enco"
},
{
"path": "api/v1/client/metrics.go",
"chars": 392,
"preview": "package client\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/url\"\n\n\tv1 \"go.k6.io/k6/api/v1\"\n)\n\n// Metrics returns the current m"
},
{
"path": "api/v1/client/status.go",
"chars": 790,
"preview": "package client\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/url\"\n\n\tv1 \"go.k6.io/k6/api/v1\"\n)\n\n// Status returns the current k6"
},
{
"path": "api/v1/control_surface.go",
"chars": 474,
"preview": "package v1\n\nimport (\n\t\"context\"\n\n\t\"go.k6.io/k6/internal/execution\"\n\t\"go.k6.io/k6/internal/metrics/engine\"\n\t\"go.k6.io/k6/"
},
{
"path": "api/v1/errors.go",
"chars": 770,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n)\n\n// Error is an api error\ntype Error struct {\n\tSta"
},
{
"path": "api/v1/group.go",
"chars": 2510,
"preview": "package v1\n\nimport (\n\t\"fmt\"\n\n\t\"go.k6.io/k6/lib\"\n)\n\n// Check represents a k6's check in a k6 REST API\ntype Check struct {"
},
{
"path": "api/v1/group_jsonapi.go",
"chars": 2528,
"preview": "package v1\n\nimport \"encoding/json\"\n\ntype groupJSONAPI struct {\n\tData groupData `json:\"data\"`\n}\n\ntype groupsJSONAPI struc"
},
{
"path": "api/v1/group_routes.go",
"chars": 985,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"net/http\"\n)\n\nfunc handleGetGroups(cs *ControlSurface, rw http.ResponseWriter, _ "
},
{
"path": "api/v1/group_routes_test.go",
"chars": 4904,
"preview": "package v1\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/stretchr/test"
},
{
"path": "api/v1/group_test.go",
"chars": 2844,
"preview": "package v1\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\n\t\"go.k6.io/k6/lib\"\n)\n\nfunc TestNewCheck(t *testi"
},
{
"path": "api/v1/metric.go",
"chars": 1917,
"preview": "package v1\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"time\"\n\n\t\"gopkg.in/guregu/null.v3\"\n\n\t\"go.k6.io/k6/metrics\"\n)\n\n// NullMet"
},
{
"path": "api/v1/metric_jsonapi.go",
"chars": 1225,
"preview": "package v1\n\nimport (\n\t\"time\"\n\n\t\"go.k6.io/k6/metrics\"\n)\n\n// MetricsJSONAPI is JSON API envelop for metrics\ntype MetricsJS"
},
{
"path": "api/v1/metric_routes.go",
"chars": 1269,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"time\"\n)\n\nfunc handleGetMetrics(cs *ControlSurface, rw http.ResponseW"
},
{
"path": "api/v1/metric_routes_test.go",
"chars": 3735,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\""
},
{
"path": "api/v1/metric_test.go",
"chars": 2259,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/re"
},
{
"path": "api/v1/routes.go",
"chars": 1982,
"preview": "// Package v1 implements the v1 of the k6's REST API\npackage v1\n\nimport (\n\t\"net/http\"\n)\n\n// NewHandler returns the top h"
},
{
"path": "api/v1/setup_jsonapi.go",
"chars": 376,
"preview": "package v1\n\ntype setUpJSONAPI struct {\n\tData setUpData `json:\"data\"`\n}\n\ntype setUpData struct {\n\tType string `json"
},
{
"path": "api/v1/setup_teardown_routes.go",
"chars": 2591,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n)\n\n// NullSetupData is wrapper around null to satisfy jsonapi\nty"
},
{
"path": "api/v1/setup_teardown_routes_test.go",
"chars": 5764,
"preview": "package v1\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"testing\"\n\t\"time\"\n\n\t\""
},
{
"path": "api/v1/status.go",
"chars": 1112,
"preview": "package v1\n\nimport (\n\t\"gopkg.in/guregu/null.v3\"\n\n\t\"go.k6.io/k6/lib\"\n)\n\n// Status represents the current status of the te"
},
{
"path": "api/v1/status_jsonapi.go",
"chars": 719,
"preview": "package v1\n\n// StatusJSONAPI is JSON API envelop for metrics\ntype StatusJSONAPI struct {\n\tData statusData `json:\"data\"`\n"
},
{
"path": "api/v1/status_routes.go",
"chars": 3071,
"preview": "package v1\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"go.k6.io/k6/errext\"\n\t\"go.k6.io/k6/errext/exi"
},
{
"path": "api/v1/status_routes_test.go",
"chars": 6045,
"preview": "package v1\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"git"
},
{
"path": "build-release.sh",
"chars": 2321,
"preview": "#!/bin/bash\n\nset -eEuo pipefail\n\neval \"$(go env)\"\n\nset -x\nexport OUT_DIR=\"${1-dist}\"\n# To override the latest git tag as"
},
{
"path": "catalog-info.yaml",
"chars": 308,
"preview": "apiVersion: backstage.io/v1alpha1\nkind: Component\nmetadata:\n name: k6\n title: k6\n description: |\n k6 is a modern l"
},
{
"path": "cloudapi/api.go",
"chars": 9638,
"preview": "package cloudapi\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"strconv\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"go."
},
{
"path": "cloudapi/api_test.go",
"chars": 12262,
"preview": "package cloudapi\n\nimport (\n\t\"archive/tar\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httpte"
},
{
"path": "cloudapi/client.go",
"chars": 5292,
"preview": "package cloudapi\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t"
},
{
"path": "cloudapi/cloudapi_easyjson.go",
"chars": 7920,
"preview": "// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.\n\npackage cloudapi\n\nimport (\n\tjson \"encoding/json"
},
{
"path": "cloudapi/config.go",
"chars": 11951,
"preview": "package cloudapi\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"time\"\n\n\t\"github.com/mstoykov/envconfig\"\n\t\"gopkg.in/guregu/null.v3"
},
{
"path": "cloudapi/config_test.go",
"chars": 4375,
"preview": "package cloudapi\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stret"
},
{
"path": "cloudapi/doc.go",
"chars": 323,
"preview": "// Package cloudapi contains several things related to the k6 cloud - various\n// data and config structures, a REST API "
},
{
"path": "cloudapi/errors.go",
"chars": 1912,
"preview": "package cloudapi\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"slices\"\n\t\"strings\"\n)\n\nvar (\n\terrNotAuthorized = errors.New("
},
{
"path": "cloudapi/errors_test.go",
"chars": 632,
"preview": "package cloudapi\n\nimport (\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n)\n\nfunc TestContains(t *testing.T) {\n\tt.Par"
},
{
"path": "cloudapi/logs.go",
"chars": 6648,
"preview": "package cloudapi\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/rand\" // nosemgrep: math-random-used // This is being used r"
},
{
"path": "cloudapi/logs_test.go",
"chars": 11199,
"preview": "package cloudapi\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/"
},
{
"path": "cloudapi/run_status.go",
"chars": 816,
"preview": "package cloudapi\n\n// RunStatus values are used to tell the cloud output how a local test run\n// ended, and to get that i"
},
{
"path": "cloudapi/util.go",
"chars": 270,
"preview": "package cloudapi\n\n// URLForResults returns the cloud URL with the test run results.\nfunc URLForResults(refID string, con"
},
{
"path": "cloudapi/util_test.go",
"chars": 570,
"preview": "package cloudapi\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/require\"\n\t\"gopkg.in/guregu/null.v3\"\n)\n\nfunc "
},
{
"path": "cmd/execute.go",
"chars": 439,
"preview": "// Package cmd is here to provide a way for xk6 to build a binary with added extensions\npackage cmd\n\nimport (\n\t\"context\""
},
{
"path": "cmd/state/doc.go",
"chars": 210,
"preview": "// Package state contains the types and functionality used for keeping track of\n// cmd-related values that are used glob"
},
{
"path": "cmd/state/env.go",
"chars": 554,
"preview": "package state\n\nimport \"strings\"\n\n// ParseEnvKeyValue splits an environment variable string into key and value.\nfunc Pars"
},
{
"path": "cmd/state/state.go",
"chars": 8316,
"preview": "package state\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strconv\"\n\t\"sync\"\n\n\t\"go.k"
},
{
"path": "cmd/tests/global_state.go",
"chars": 490,
"preview": "// Package tests contains types needed for running integration tests that run k6 commands.\npackage tests\n\nimport (\n\t\"tes"
},
{
"path": "docs/design/018-new-http-api.md",
"chars": 23050,
"preview": "# New HTTP API\n\n## Authors\nThe k6 core team\n\n## Why is this needed?\n\nThe HTTP API (in k6 <=v0.43.0) used by k6 scripts h"
},
{
"path": "docs/design/019-file-api.md",
"chars": 10862,
"preview": "# Introduce a File API module for k6\n\n| | "
},
{
"path": "docs/design/020-distributed-execution-and-test-suites.md",
"chars": 51065,
"preview": "# Distributed Execution\n\nNative distributed execution https://github.com/grafana/k6/issues/140 is simultaneously the old"
},
{
"path": "docs/mkdocs.yml",
"chars": 265,
"preview": "# To run locally\n# npx @techdocs/cli serve -v -c ./docs/mkdocs.yml\n# \nsite_name: 'k6 Internal Documentation'\nrepo_url: h"
},
{
"path": "errext/abort_reason.go",
"chars": 1470,
"preview": "package errext\n\nimport \"errors\"\n\n// AbortReason is used to signal to outputs what type of error caused the test\n// run t"
},
{
"path": "errext/errext_test.go",
"chars": 2048,
"preview": "package errext\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testif"
},
{
"path": "errext/exception.go",
"chars": 286,
"preview": "// Package errext contains extensions for normal Go errors that are used in k6.\npackage errext\n\n// Exception represents "
},
{
"path": "errext/exit_code.go",
"chars": 1297,
"preview": "package errext\n\nimport (\n\t\"errors\"\n\n\t\"go.k6.io/k6/errext/exitcodes\"\n)\n\n// ExitCode is the code with which the applicatio"
},
{
"path": "errext/exitcodes/codes.go",
"chars": 2049,
"preview": "// Package exitcodes contains the constants representing possible k6 exit error codes.\npackage exitcodes\n\n// ExitCode is"
},
{
"path": "errext/format.go",
"chars": 580,
"preview": "package errext\n\nimport (\n\t\"errors\"\n)\n\n// Format formats the given error as a message (string) and a map of fields.\n// In"
},
{
"path": "errext/format_test.go",
"chars": 1696,
"preview": "package errext_test\n\nimport (\n\t\"errors\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/assert\"\n\n\t\"go.k6.io/k6/errext\"\n)\n\nfunc"
},
{
"path": "errext/hint.go",
"chars": 1063,
"preview": "package errext\n\nimport \"errors\"\n\n// HasHint is a wrapper around an error with an attached user hint. These hints\n// can "
},
{
"path": "errext/interrupt_error.go",
"chars": 1141,
"preview": "package errext\n\nimport (\n\t\"errors\"\n\n\t\"go.k6.io/k6/errext/exitcodes\"\n)\n\n// InterruptError is an error that halts engine e"
},
{
"path": "examples/base64.js",
"chars": 1335,
"preview": "import { check } from \"k6\";\nimport encoding from \"k6/encoding\";\n\nexport default function() {\n // Standard base64 enco"
},
{
"path": "examples/browser/colorscheme.js",
"chars": 859,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/cookies.js",
"chars": 3653,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/device_emulation.js",
"chars": 1472,
"preview": "import { browser, devices } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexp"
},
{
"path": "examples/browser/dispatch.js",
"chars": 895,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/elementstate.js",
"chars": 2088,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/evaluate.js",
"chars": 1011,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/fillform.js",
"chars": 1647,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/framelocator.js",
"chars": 1751,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'k6';\n\nexport const options = {\n scenarios: {\n ui: {\n "
},
{
"path": "examples/browser/getattribute.js",
"chars": 823,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/grant_permission.js",
"chars": 739,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/hosts.js",
"chars": 752,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/keyboard.js",
"chars": 752,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/locator.js",
"chars": 2255,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/locator_filter.js",
"chars": 1807,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/locator_pom.js",
"chars": 1782,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/mouse.js",
"chars": 753,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/multiple-scenario.js",
"chars": 1047,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n messages: {\n executor: 'constant"
},
{
"path": "examples/browser/page_waitForEvent.js",
"chars": 1206,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n browser: {\n executor: 'shared-it"
},
{
"path": "examples/browser/pageon-metric.js",
"chars": 689,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/pageon-request.js",
"chars": 538,
"preview": "import { browser } from 'k6/browser'\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iteratio"
},
{
"path": "examples/browser/pageon-requestfailed.js",
"chars": 944,
"preview": "import { browser } from 'k6/browser'\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'sha"
},
{
"path": "examples/browser/pageon-requestfinished.js",
"chars": 906,
"preview": "import { browser } from 'k6/browser'\n\nexport const options = {\n\tscenarios: {\n\t\tui: {\n\t\t\texecutor: 'shared-iterations',\n\t"
},
{
"path": "examples/browser/pageon.js",
"chars": 1187,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/querying.js",
"chars": 959,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/route.js",
"chars": 1861,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'k6';\n\nexport const options = {\n scenarios: {\n ui: {\n "
},
{
"path": "examples/browser/route_continue.js",
"chars": 899,
"preview": "import { sleep } from 'k6';\nimport { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1."
},
{
"path": "examples/browser/screenshot.js",
"chars": 738,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/shadowdom.js",
"chars": 1027,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/throttle.js",
"chars": 1897,
"preview": "import { browser, networkProfiles } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n normal: {\n exec"
},
{
"path": "examples/browser/touchscreen.js",
"chars": 920,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n ui: {\n executor: 'shared-iterati"
},
{
"path": "examples/browser/useragent.js",
"chars": 1227,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/browser/waitForEvent.js",
"chars": 842,
"preview": "import { browser } from 'k6/browser';\n\nexport const options = {\n scenarios: {\n browser: {\n executor: 'shared-it"
},
{
"path": "examples/browser/waitforfunction.js",
"chars": 1010,
"preview": "import { browser } from 'k6/browser';\nimport { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';\n\nexport const"
},
{
"path": "examples/config.json",
"chars": 115,
"preview": "{\n \"vus\": 100,\n \"collectors\": {\n \"influxdb\": {\n \"tagsAsFields\": [\"vu\",\"iter\", \"url\", \"name\"]\n }\n }\n}\n"
},
{
"path": "examples/cookies.js",
"chars": 5046,
"preview": "import http from \"k6/http\";\nimport { check, group } from \"k6\";\n\nexport let options = {\n maxRedirects: 3\n};\n\nexport de"
},
{
"path": "examples/crypto.js",
"chars": 335,
"preview": "import crypto from 'k6/crypto';\n\nexport default function() {\n // Shorthand API\n let hash = crypto.sha1(\"some text\""
},
{
"path": "examples/custom_metrics.js",
"chars": 1408,
"preview": "import http from \"k6/http\";\nimport { Counter, Gauge, Rate, Trend } from \"k6/metrics\";\nimport { check } from \"k6\";\n\n/*\n *"
},
{
"path": "examples/docker-compose/influxdb-v1/README.md",
"chars": 507,
"preview": "# InfluxDB v1\n\nThis example shows how to use the k6 performance test with InfluxDB v1.\n\n## Prerequisites\n\n- Docker\n- Doc"
},
{
"path": "examples/docker-compose/influxdb-v1/docker-compose.yml",
"chars": 626,
"preview": "version: '3.4'\n\nnetworks:\n grafana:\n\nservices:\n influxdb:\n image: influxdb:1.8@sha256:299ebda2c7e308dbef42e26ac9b8f"
},
{
"path": "examples/docker-compose/influxdb-v1/grafana/dashboards/dashboard.yml",
"chars": 184,
"preview": "\napiVersion: 1\n\nproviders:\n- name: 'myinfluxdb'\n orgId: 1\n folder: ''\n type: file\n disableDeletion: false\n editable"
},
{
"path": "examples/docker-compose/influxdb-v1/grafana/dashboards/performance-test-dasboard.json",
"chars": 6305,
"preview": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": \"-- Grafana --\",\n \"enable\""
},
{
"path": "examples/docker-compose/influxdb-v1/grafana/datasources/datasource.yml",
"chars": 166,
"preview": "apiVersion: 1\n\ndatasources:\n - name: myinfluxdb\n type: influxdb\n access: proxy\n database: k6\n orgId: 1\n "
},
{
"path": "examples/docker-compose/influxdb-v1/script.js",
"chars": 249,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function () {\n check(http.get(\"https://quickpiz"
},
{
"path": "examples/docker-compose/opentelemetry/README.md",
"chars": 868,
"preview": "# OpenTelemetry Output\n\nThis example demonstrates how to integrate k6 performance testing with OpenTelemetry. The test m"
},
{
"path": "examples/docker-compose/opentelemetry/docker-compose.yml",
"chars": 1331,
"preview": "networks:\n k6:\n\nservices:\n prometheus:\n image: prom/prometheus:v3.5.0@sha256:63805ebb8d2b3920190daf1cb14a60871b16fd"
},
{
"path": "examples/docker-compose/opentelemetry/grafana/alloy/config.alloy",
"chars": 1316,
"preview": "// expose OTEL receivers\n// https://grafana.com/docs/alloy/latest/reference/components/otelcol.receiver.otlp/\notelcol.re"
},
{
"path": "examples/docker-compose/opentelemetry/grafana/dashboards/dashboards.yaml",
"chars": 392,
"preview": "# For configuration options, see\n# https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards\n\nap"
},
{
"path": "examples/docker-compose/opentelemetry/grafana/dashboards/k6-prometheus.json",
"chars": 52869,
"preview": "{\n \"annotations\": {\n \"list\": [\n {\n \"builtIn\": 1,\n \"datasource\": {\n \"type\": \"grafana\",\n "
},
{
"path": "examples/docker-compose/opentelemetry/grafana/datasources/datasource.yaml",
"chars": 387,
"preview": "# For configuration options, see \n# https://grafana.com/docs/grafana/latest/administration/provisioning/#example-data-"
},
{
"path": "examples/docker-compose/opentelemetry/script.js",
"chars": 383,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport const options = {\n vus: 10,\n duration: '3m',\n thresho"
},
{
"path": "examples/enhanced/abort.ts",
"chars": 93,
"preview": "import exec from \"k6/execution\";\n\nexport default function () {\n\texec.test.abort(\"failed\");\n}\n"
},
{
"path": "examples/enhanced/script.ts",
"chars": 127,
"preview": "import { User, newUser } from \"./user.ts\";\n\nexport default () => {\n\tconst user: User = newUser(\"John\");\n\tconsole.log(use"
},
{
"path": "examples/enhanced/user.ts",
"chars": 332,
"preview": "interface User {\n\tname: string;\n\tid: number;\n}\n\nclass UserAccount implements User {\n\tname: string;\n\tid: number;\n\n\tconstr"
},
{
"path": "examples/es6sample.js",
"chars": 1513,
"preview": "import { group, check, sleep } from \"k6\";\nimport { Counter, Rate } from \"k6/metrics\";\nimport http from \"k6/http\";\n\nexpor"
},
{
"path": "examples/experimental/csv-parse.js",
"chars": 785,
"preview": "import { open } from 'k6/experimental/fs'\nimport csv from 'k6/experimental/csv'\nimport { scenario } from 'k6/execution'\n"
},
{
"path": "examples/experimental/csv-parser.js",
"chars": 757,
"preview": "import { open } from 'k6/experimental/fs'\nimport csv from 'k6/experimental/csv'\n\nexport const options = {\n\titerations: 1"
},
{
"path": "examples/experimental/data.csv",
"chars": 215,
"preview": "firstname,lastname,age\nfariha,ehlenfeldt,72\nqudratullah,gillfillan,50\njeleah,rodina,41\nthaisia,nowalk,99\njoey-lynn,wilsf"
},
{
"path": "examples/experimental/docker-compose.yml",
"chars": 206,
"preview": "version: '3.3'\n\nservices:\n k6-experimental-redis:\n image: 'redis:alpine@sha256:59b6e694653476de2c992937ebe1c64182af4"
},
{
"path": "examples/experimental/fs/bonjour.txt",
"chars": 23,
"preview": "Bonjour, tout le monde!"
},
{
"path": "examples/experimental/fs/fs.js",
"chars": 1110,
"preview": "import { open, SeekMode } from \"k6/experimental/fs\";\n\nexport const options = {\n\tvus: 100,\n\titerations: 1000,\n};\n\n// Each"
},
{
"path": "examples/experimental/redis.js",
"chars": 2416,
"preview": "import { check } from 'k6';\nimport http from 'k6/http';\nimport redis from 'k6/experimental/redis';\nimport exec from 'k6/"
},
{
"path": "examples/experimental/streams.js",
"chars": 672,
"preview": "import { ReadableStream } from 'k6/experimental/streams'\nimport { setTimeout } from 'k6/timers'\n\nfunction numbersStream("
},
{
"path": "examples/grafana_dashboard_influxdb.json",
"chars": 25491,
"preview": "{\n \"__inputs\": [\n {\n \"name\": \"DS_K6\",\n \"label\": \"k6\",\n \"description\": \"\",\n \"type\": \"datasource\","
},
{
"path": "examples/graphql.js",
"chars": 1244,
"preview": "import http from \"k6/http\";\nimport { sleep } from \"k6\";\n\nlet accessToken = \"YOUR_GITHUB_ACCESS_TOKEN\";\n\nexport default f"
},
{
"path": "examples/grpc_client_streaming.js",
"chars": 3491,
"preview": "import { Client, Stream } from 'k6/net/grpc';\nimport { sleep } from 'k6';\n\nconst COORD_FACTOR = 1e7;\n// to run this samp"
},
{
"path": "examples/grpc_healthcheck.js",
"chars": 604,
"preview": "import grpc from 'k6/net/grpc';\nimport { check } from \"k6\";\n\n// to run this sample, you need to start the grpc server fi"
},
{
"path": "examples/grpc_invoke.js",
"chars": 882,
"preview": "import grpc from 'k6/net/grpc';\nimport { check } from \"k6\";\n\n// to run this sample, you need to start the grpc server fi"
},
{
"path": "examples/grpc_reflection.js",
"chars": 737,
"preview": "import grpc from 'k6/net/grpc';\nimport {check} from \"k6\";\n\n// to run this sample, you need to start the grpc server firs"
},
{
"path": "examples/grpc_server/go.mod",
"chars": 462,
"preview": "module go.k6.io/k6/examples/grpc_server\n\ngo 1.24.0\n\ntoolchain go1.24.7\n\nreplace go.k6.io/k6 => ../../\n\nrequire (\n\tgo.k6."
},
{
"path": "examples/grpc_server/go.sum",
"chars": 3122,
"preview": "github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=\ngithub.com/go-logr/logr v1.4.3/go.mod h1:"
},
{
"path": "examples/grpc_server/main.go",
"chars": 2698,
"preview": "/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may n"
},
{
"path": "examples/grpc_server_streaming.js",
"chars": 1468,
"preview": "import { Client, Stream } from 'k6/net/grpc';\nimport { sleep } from 'k6';\n\nconst COORD_FACTOR = 1e7;\n// to run this samp"
},
{
"path": "examples/html_form_post.js",
"chars": 1032,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\n// Our form data, to be URL-encoded and POSTed\nconst form_data "
},
{
"path": "examples/http_2.js",
"chars": 249,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function () {\n check(http.get(\"https://quickpiz"
},
{
"path": "examples/http_basic_auth.js",
"chars": 987,
"preview": "import encoding from \"k6/encoding\";\nimport http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function() {"
},
{
"path": "examples/http_batch.js",
"chars": 437,
"preview": "import { check } from 'k6';\nimport http from 'k6/http';\n\nexport default function() {\n const responses = http.batch([\n "
},
{
"path": "examples/http_digest_auth.js",
"chars": 542,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function() {\n // Passing username and passwor"
},
{
"path": "examples/http_get.js",
"chars": 107,
"preview": "import http from 'k6/http';\n\nexport default function () {\n http.get('https://quickpizza.grafana.com');\n};\n"
},
{
"path": "examples/http_verbs.js",
"chars": 1861,
"preview": "import http from \"k6/http\";\nimport { check, group } from \"k6\";\n\n/*\n * k6 supports all standard HTTP verbs/methods:\n * CO"
},
{
"path": "examples/json.js",
"chars": 562,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function() {\n // Send a JSON encoded POST req"
},
{
"path": "examples/jwt.js",
"chars": 1588,
"preview": "import crypto from \"k6/crypto\";\nimport encoding from \"k6/encoding\";\nimport {sleep} from \"k6\";\n\nconst algToHash = {\n H"
},
{
"path": "examples/localhost.js",
"chars": 844,
"preview": "import { group, check } from \"k6\";\nimport http from \"k6/http\";\n\nexport let options = {\n\tthresholds: {\n\t\t'http_req_durati"
},
{
"path": "examples/logging.js",
"chars": 197,
"preview": "export default function() {\n\tconsole.log(\"log\", \"a\", \"b\");\n\tconsole.debug(\"debug\", \"a\", \"b\");\n\tconsole.info(\"info\", \"a\","
},
{
"path": "examples/malicious.js",
"chars": 76,
"preview": "export default function() {\n\twhile (true) {\n\t\t// do nothing, forever!!\n\t}\n}\n"
},
{
"path": "examples/ocsp.js",
"chars": 246,
"preview": "import http from \"k6/http\";\nimport { check } from \"k6\";\n\nexport default function() {\n let res = http.get(\"https://sta"
},
{
"path": "examples/pantheon.js",
"chars": 20000,
"preview": "//\n// This is an advanced k6 script sample that simulates users\n// logging into an e-commerce site and purchasing things"
},
{
"path": "examples/pantheontest.js",
"chars": 28591,
"preview": "import { group, check, sleep } from \"k6\";\nimport http from \"k6/http\";\n\nexport let options = {\n maxRedirects: 10\n};\n\n/"
},
{
"path": "examples/redirects.js",
"chars": 740,
"preview": "import http from \"k6/http\";\nimport {check} from \"k6\";\n\nexport let options = {\n // Max redirects to follow (default is"
},
{
"path": "examples/secrets/file.secret",
"chars": 22,
"preview": "cool=some\nelse=source\n"
},
{
"path": "examples/secrets/mock_server.go",
"chars": 5761,
"preview": "// Package main implements a mock HTTP secrets server for testing k6's URL secret source.\n//\n// The server mimics a secr"
},
{
"path": "examples/secrets/multi-source.test.js",
"chars": 590,
"preview": "// k6 run --secret-source=mock=default,cool=\"cool secret\" --secret-source=mock=name=another,cool=\"not cool secret\" multi"
},
{
"path": "examples/secrets/secrets.test.js",
"chars": 363,
"preview": "// k6 run --secret-source=file=file.secret secrets.test.js\nimport secrets from \"k6/secrets\";\n\nexport default async () =>"
},
{
"path": "examples/secrets/totp.test.js",
"chars": 1005,
"preview": "// TOTP generation with secrets API\n//\n// Run with:\n// k6 run --secret-source=mock=totp_secret=\"GEZDGNBVGY3TQOJQGEZDGN"
},
{
"path": "examples/secrets/url-config.json",
"chars": 231,
"preview": "{\n \"urlTemplate\": \"http://localhost:8888/secrets/{key}/decrypt\",\n \"headers\": {\n \"Authorization\": \"Bearer YOUR_API_T"
},
{
"path": "examples/secrets/url-source.test.js",
"chars": 4327,
"preview": "// Example: Using URL-based secret source with local mock server\n//\n// SETUP:\n// ======\n// 1. Start the mock server in a"
}
]
// ... and 3746 more files (download for full content)
About this extraction
This page contains the full source code of the grafana/k6 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3946 files (53.5 MB), approximately 4.2M tokens, and a symbol index with 23101 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.