diff --git a/docs/docs/cli/creating-environments.md b/docs/docs/cli/creating-environments.md deleted file mode 100644 index e3437bb03d..0000000000 --- a/docs/docs/cli/creating-environments.md +++ /dev/null @@ -1,31 +0,0 @@ -# Defining Environments as Text Files - -This page showcases how to create and edit environments with the CLI. - -:::tip -[To read more about environments check out environment concepts.](../concepts/variable-sets.md) -::: - -Just like Data Stores, you can also manage your environments using the CLI and definition files. - -A definition file looks like the following: - -```yaml -type: Environment -spec: - name: Production - description: Production env variables - values: - - key: URL - value: https://app-production.company.com - - key: API_KEY - value: mysecret -``` - -In order to apply this configuration to your Tracetest instance, make sure to have your [CLI configured](./configuring-your-cli.md) and run: - -```sh -tracetest apply environment -f -``` - -> If the file contains the property `spec.id`, the operation will be considered an environment udpate. If you try to apply an environment and you get an error: `could not apply environment: 404 Not Found`, it means the provided id doesn't exist. Either update the id to reference an existing environment, or just remove the property from the file, so Tracetest will create a new environmenta and a new id. diff --git a/docs/docs/cli/creating-test-outputs.md b/docs/docs/cli/creating-test-outputs.md index 5fd37e519b..e01b71e82b 100644 --- a/docs/docs/cli/creating-test-outputs.md +++ b/docs/docs/cli/creating-test-outputs.md @@ -1,10 +1,10 @@ # Defining Test Outputs in Text Files -Outputs are really useful when running [Transactions](../concepts/transactions). They allow for exporting values from a test so they become available in the [Environment Variables](../concepts/variable-sets.md) of the current transaction. +Outputs are really useful when running [Transactions](../concepts/transactions). They allow for exporting values from a test so they become available in the [Variable Sets](../concepts/variable-sets.md) of the current transaction. ## Outputs are Expression Results -An output exports the result of an [Expression](../concepts/expressions) and assigns it to a name, so it can be injected into the environment variables of a running transaction. +An output exports the result of an [Expression](../concepts/expressions) and assigns it to a name, so it can be injected into the variable set of a running transaction. A `selector` is needed only if the provided expression refers to a/some span/s attribute or meta attributes. It can be defined using the following YAML definition: diff --git a/docs/docs/cli/creating-variable-sets.md b/docs/docs/cli/creating-variable-sets.md new file mode 100644 index 0000000000..783883734e --- /dev/null +++ b/docs/docs/cli/creating-variable-sets.md @@ -0,0 +1,31 @@ +# Defining Variable Sets as Text Files + +This page showcases how to create and edit variable sets with the CLI. + +:::tip +[To read more about variable sets check out variable sets concepts.](../concepts/variable-sets.md) +::: + +Just like Data Stores, you can also manage your variable sets using the CLI and definition files. + +A definition file looks like the following: + +```yaml +type: VariableSet +spec: + name: Production + description: Production env variables + values: + - key: URL + value: https://app-production.company.com + - key: API_KEY + value: mysecret +``` + +In order to apply this configuration to your Tracetest instance, make sure to have your [CLI configured](./configuring-your-cli.md) and run: + +```sh +tracetest apply variableset -f +``` + +> If the file contains the property `spec.id`, the operation will be considered a variable set update. If you try to apply a variable set and you get the error: `could not apply variableset: 404 Not Found`, it means the provided ID doesn't exist. Either update the ID to reference an existing variable set or remove the property from the file. Tracetest will create a new variable set and a new ID. diff --git a/docs/docs/cli/running-tests.md b/docs/docs/cli/running-tests.md index 56b876595e..1232b445f6 100644 --- a/docs/docs/cli/running-tests.md +++ b/docs/docs/cli/running-tests.md @@ -186,24 +186,24 @@ The JUnit output file would then contain the JUnit result, for example: ``` -## Running a Test That Uses Environment Variables +## Running a Test That Uses Variable Sets -There are two ways of referencing an environment when running a test. +There are two ways of referencing a variable set when running a test. -You can reference an existing environment using its id. For example, given this defined environment with an id of 'testenv': +You can reference an existing variable set using its id. For example, given this defined variable set with an id of 'testenv': ![testenv](../img/show-environment-definition.png) -We can run a test and specify that environment with this command: +We can run a test and specify that variable set with this command: ```sh tracetest run test -f path/to/test.yaml -e testenv ``` -You can also reference an environment resource file which will be used to create a new environment or update an existing one. For example, if you have a file named local.env with this content: +You can also reference a variable set resource file which will be used to create a new variable set or update an existing one. For example, if you have a file named local.env with this content: ```yaml -type: Environment +type: VariableSet spec: id: local.env name: local.env @@ -215,9 +215,9 @@ spec: ``` ```sh -tracetest run test -f path/to/test.yaml -e path/to/local.env +tracetest run test -f path/to/test.yaml --vars path/to/local.env ``` -If you use the environment resource approach, a new environment will be created in Tracetest. +If you use the variable set resource approach, a new variable set will be created in Tracetest. The second approach is very useful if you are running tests from a CI pipeline. diff --git a/docs/docs/cli/running-transactions.md b/docs/docs/cli/running-transactions.md index 252d104fda..cabaf9696c 100644 --- a/docs/docs/cli/running-transactions.md +++ b/docs/docs/cli/running-transactions.md @@ -21,24 +21,24 @@ tracetest run transaction -f path/to/transaction.yaml ✔ Pokeshop - List (http://localhost:11633/test/QvPjBH_4g/run/4/test) ``` -## Running a Transaction That Uses Environment Variables +## Running a Transaction That Uses Variable Sets -There are two ways of referencing an environment when running a transaction. +There are two ways of referencing a variable set when running a transaction. -You can reference an existing environment using its id. For example, given this defined environment with an id of `'testenv'`: +You can reference an existing variable set using its id. For example, given this defined variable set with an id of `'testenv'`: ![testenv](../img/show-environment-definition.png) -We can run a transaction and specify that environment with this command: +We can run a transaction and specify that variable set with this command: ```sh -tracetest run transaction -f path/to/transaction.yaml -e testenv +tracetest run transaction -f path/to/transaction.yaml --vars testenv ``` -You can also reference an environment resource file which will be used to create a new environment or update an existing one. For example, if you have a file named `local.env` with this content: +You can also reference a variable set resource file which will be used to create a new variable set or update an existing one. For example, if you have a file named `local.env` with this content: ```yaml -type: Environment +type: VariableSet spec: id: local.env name: local.env @@ -50,9 +50,9 @@ spec: ``` ```sh -tracetest run test -f path/to/transaction.yaml -e path/to/local.env +tracetest run test -f path/to/transaction.yaml --vars path/to/local.env ``` -If you use the environment resource approach, a new environment will be created in Tracetest. +If you use the variable set resource approach, a new variable set will be created in Tracetest. The second approach is very useful if you are running tests from a CI pipeline. diff --git a/docs/docs/cli/undefined-variables.md b/docs/docs/cli/undefined-variables.md index 8a2072f1e6..24eedd315f 100644 --- a/docs/docs/cli/undefined-variables.md +++ b/docs/docs/cli/undefined-variables.md @@ -13,29 +13,29 @@ POKEID: POKENAME: ``` -Undefined variables are dependent on the environment selected and whether or not the variable is defined in the current environment. Select the environment to run the test or transaction by passing it into the test run command. +Undefined variables are dependent on the variable set selected and whether or not the variable is defined in the current variable set. Select the variable set to run the test or transaction by passing it into the test run command. ```sh -tracetest list environment +tracetest list variableset ``` ```text title="Output:" ID NAME DESCRIPTION --------- --------- ------------- - testenv testenv testenv + testvars testvars testvars ``` ```sh -tracetest get environment --id testenv +tracetest get variableset --id testvars ``` ```text title="Output:" --- -type: Environment +type: VariableSet spec: - id: testenv - name: testenv - description: testenv + id: testvars + name: testvars + description: testvars values: - key: POKEID value: "42" @@ -44,7 +44,7 @@ spec: ``` ```sh -tracetest run test -f path/to/test.yaml -e testenv +tracetest run test -f path/to/test.yaml --vars testvars ``` ```text title="Output:" diff --git a/docs/docs/concepts/ad-hoc-testing.md b/docs/docs/concepts/ad-hoc-testing.md index 4ad9ecf104..17f18419c2 100644 --- a/docs/docs/concepts/ad-hoc-testing.md +++ b/docs/docs/concepts/ad-hoc-testing.md @@ -1,6 +1,6 @@ # Ad-hoc Testing -This page showcases use-cases for undefined variables and how to enable ad-hoc testing by utilizing environments and undefined variabled. +This page showcases use-cases for undefined variables and how to enable ad-hoc testing by utilizing variable sets and undefined variables. :::tip [Check out how to configure ad-hoc testing with undefined variables with the **Web UI** here.](../web-ui/undefined-variables.md) @@ -24,15 +24,15 @@ In Tracetest, undefined variables can be used in both the UI and CLI. ## **Undefined Variables Transaction with Multiple Tests Example** -1. Create an HTTP Pokemon list test that uses environment variables for hostname and the SKIP query parameter: +1. Create an HTTP Pokemon list test that uses variables for hostname and the SKIP query parameter: ![Create Pokemon List](../img/pokeshop-list.png) -2. Within the test, create test spec assertions that use environment variables for comparators, something like: `http.status_code = "${env:STATUS_CODE}"`: +1. Within the test, create test spec assertions that use variables for comparators, something like: `http.status_code = "${env:STATUS_CODE}"`: ![Create Test Spec Assertionsl](../img/create-test-spec-assertions.png) -3. Create a GRPC Pokemon add test that uses environment variables for hostname and Pokemon name: +1. Create a GRPC Pokemon add test that uses variables for hostname and Pokemon name: ![Create GRPC](../img/create-grpc.png) diff --git a/docs/docs/concepts/environments.md b/docs/docs/concepts/environments.md deleted file mode 100644 index f7407657d3..0000000000 --- a/docs/docs/concepts/environments.md +++ /dev/null @@ -1,66 +0,0 @@ -# Environments - -A common use case for tests is to assert the same behavior across multiple environments (dev, staging, and production, for example). To make sure all environments will have the same behavior, it is important that the tests executed against those environments test the same aspects. To reduce the risks of diverging tests, Tracetest allows you to organize different environments configurations using global objects called **Environments**. - -## How Environments Work - -Environments are objects containing variables that can be referenced by tests. You can use a single test and provide the information on which environment object will be used to run the test. To illustrate this, consider an app that is deployed in three stages: `dev`, `staging`, and `production`. We can execute the same test in all those environments, however, both `URL` and `credentials` change from environment to environment. To run the same test against the three deployments of the app, you can create three environments: - -```yaml -# dev.env -type: Environment -spec: - name: dev.env - id: dev.env - values: - - key: URL - value: https://app-dev.com - - key: API_TOKEN - value: dev-key -``` - -```yaml -# staging.env -type: Environment -spec: - name: staging.env - id: staging.env - values: - - key: URL - value: https://app-staging.com - - key: API_TOKEN - value: staging-key -``` - -```yaml -# production.env -type: Environment -spec: - name: production.env - id: production.env - values: - - key: URL - value: https://app-prod.com - - key: API_TOKEN - value: prod-key -``` - -Now consider the following test: - -```yaml -type: Test -specs: - name: Test user creation - trigger: - type: http - httpRequest: - url: "${env:URL}/api/users" - method: POST - body: '{}' - authentication: - type: bearer - bearer: - token: "${env:API_TOKEN}" -``` - -Both `env:URL` and `env:API_TOKEN` would be replaced by the variables defined in the chosen environment where the test will run. So, if the chosen environment was `dev.env`, its values would be replaced by `https://app-dev.com` and `dev-key`, respectively. diff --git a/docs/docs/concepts/expressions.md b/docs/docs/concepts/expressions.md index 8676306551..c310b09d8a 100644 --- a/docs/docs/concepts/expressions.md +++ b/docs/docs/concepts/expressions.md @@ -32,7 +32,7 @@ attr:product.stock = attr:product.stok_before_purchase - attr:product.number_bou ### **String Interpolation** -Some tests might require strings to be compared, but maybe you need to generate a dynamic string that relies on a dynamic value. This might be used in an assertion or even in the request body referencing an environment variable. +Some tests might require strings to be compared, but maybe you need to generate a dynamic string that relies on a dynamic value. This might be used in an assertion or even in the request body referencing a variable. ```css attr:error.message = "Could not withdraw ${attr:withdraw.amount}, your balance is insufficient." diff --git a/docs/docs/concepts/transactions.md b/docs/docs/concepts/transactions.md index d8258d2e1f..ab117b567c 100644 --- a/docs/docs/concepts/transactions.md +++ b/docs/docs/concepts/transactions.md @@ -9,13 +9,13 @@ A transaction is defined as a group of steps that are executed in the defined or The main benefit of using transactions is to chain tests together and use values obtained from a test in a subsequent test. ### How Values are Shared by Tests -When a transaction is run, a context object is created with information about that specific run. One of those pieces of information is an `environment variables` object, which is empty by default. If the transaction is run when referencing an [environment](./environments), all values from the selected environments will be copied to the `environment variables` object. +When a transaction is run, a context object is created with information about that specific run. One of those pieces of information is a `variable set` object, which is empty by default. If the transaction is run when referencing an [variable set](./variable-sets.md), all values from the selected variable sets will be copied to the `variable set` object. -When a test is executed within a transaction, if it generates any outputs, its outputs will be injected into the transaction context environment variables object. After the outputs are injected, all subsequent tests to be run within the transaction will be able to reference those values. +When a test is executed within a transaction, if it generates any outputs, its outputs will be injected into the transaction context variable set object. After the outputs are injected, all subsequent tests to be run within the transaction will be able to reference those values. -> :information_source: Outputs generated by steps don't modify the selected [environment](./environments). It only modifies the transaction run context object. +> :information_source: Outputs generated by steps don't modify the selected [variable set](./variable-sets.md). It only modifies the transaction run context object. -Consider you have 3 tests within a transaction: A, B, and C. Tests A and B generate outputs called A_OUTPUT and B_OUTPUT, respectively. When running the transaction, we provide an environment which contains a `HOST` environment variable. The execution of test A would only be able to reference `env:HOST`. B would be able to reference `env:HOST`, and `env:A_OUTPUT`. While C would be able to reference all three environment variables: `env:HOST`, `env:A_OUTPUT`, `env:B_OUTPUT`. +Consider you have 3 tests within a transaction: A, B, and C. Tests A and B generate outputs called A_OUTPUT and B_OUTPUT, respectively. When running the transaction, we provide a variable set which contains a `HOST` variable. The execution of test A would only be able to reference `env:HOST`. B would be able to reference `env:HOST`, and `env:A_OUTPUT`. While C would be able to reference all three variables: `env:HOST`, `env:A_OUTPUT`, `env:B_OUTPUT`. > :information_source: A single test can contain as many outputs as you like. @@ -29,7 +29,7 @@ outputs: expression: attr:tracetest.time.start ``` -This would create an output called `TIME_CANCEL_SUBSCRIPTION_MESSAGE_OBTAINED` that is obtained by reading the attribute `tracetest.time.start` from the span with `name` equal to `Process request from cancel subscription queue`. This value would would then be injected into the environment variables of that transaction to be accessed by other tests within the same transaction run. +This would create an output called `TIME_CANCEL_SUBSCRIPTION_MESSAGE_OBTAINED` that is obtained by reading the attribute `tracetest.time.start` from the span with `name` equal to `Process request from cancel subscription queue`. This value would then be injected into the variables of that transaction to be accessed by other tests within the same transaction run. ### Transactions Execution Flow diff --git a/docs/docs/concepts/variable-sets.md b/docs/docs/concepts/variable-sets.md index ad03811cd5..19878a5381 100644 --- a/docs/docs/concepts/variable-sets.md +++ b/docs/docs/concepts/variable-sets.md @@ -8,7 +8,7 @@ Variable sets are objects containing variables that can be referenced by tests. ```yaml # dev.env -type: Environment +type: VariableSet spec: name: dev.env id: dev.env @@ -21,7 +21,7 @@ spec: ```yaml # staging.env -type: Environment +type: VariableSet spec: name: staging.env id: staging.env @@ -34,7 +34,7 @@ spec: ```yaml # production.env -type: Environment +type: VariableSet spec: name: production.env id: production.env @@ -63,4 +63,4 @@ specs: token: "${env:API_TOKEN}" ``` -Both `env:URL` and `env:API_TOKEN` would be replaced by the variables defined in the chosen environment where the test will run. So, if the chosen environment was `dev.env`, its values would be replaced by `https://app-dev.com` and `dev-key`, respectively. +Both `env:URL` and `env:API_TOKEN` would be replaced by the variables defined in the chosen variable set where the test will run. So, if the chosen variable set was `dev.env`, its values would be replaced by `https://app-dev.com` and `dev-key`, respectively. diff --git a/docs/docs/configuration/tracetest-analyzer.md b/docs/docs/configuration/tracetest-analyzer.md index 76a8ab67ef..936cdcb83f 100644 --- a/docs/docs/configuration/tracetest-analyzer.md +++ b/docs/docs/configuration/tracetest-analyzer.md @@ -52,4 +52,4 @@ Here, you can also set the thresholds for `Otel Semantic Conventions`, `Common P ## Tracetest Analyzer in the CLI -You can use Tracetest Analyzer in the CLI to analyze per individual test. Visit the [Creating Transactions](/docs/docs/web-ui/creating-transactions.md) page for details. +You can use Tracetest Analyzer in the CLI to analyze per individual test. Visit the [Creating Transactions](../web-ui/creating-transactions.md) page for details. diff --git a/docs/docs/environment-variables.md b/docs/docs/environment-variables.md deleted file mode 100644 index 59efcad43a..0000000000 --- a/docs/docs/environment-variables.md +++ /dev/null @@ -1,3 +0,0 @@ -# Environment Variables - -TODO diff --git a/docs/docs/img/all-vars.png b/docs/docs/img/all-vars.png new file mode 100644 index 0000000000..995c6d0d32 Binary files /dev/null and b/docs/docs/img/all-vars.png differ diff --git a/docs/docs/img/create-vars-form.png b/docs/docs/img/create-vars-form.png new file mode 100644 index 0000000000..86ed0f3010 Binary files /dev/null and b/docs/docs/img/create-vars-form.png differ diff --git a/docs/docs/img/data-vars.png b/docs/docs/img/data-vars.png new file mode 100644 index 0000000000..3aadd062e4 Binary files /dev/null and b/docs/docs/img/data-vars.png differ diff --git a/docs/docs/img/definition-vars.png b/docs/docs/img/definition-vars.png new file mode 100644 index 0000000000..9025138e23 Binary files /dev/null and b/docs/docs/img/definition-vars.png differ diff --git a/docs/docs/web-ui/creating-environments.md b/docs/docs/web-ui/creating-environments.md deleted file mode 100644 index 24b2a8de42..0000000000 --- a/docs/docs/web-ui/creating-environments.md +++ /dev/null @@ -1,23 +0,0 @@ -# Creating Environments - -This page showcases how to create and edit environments in the Web UI. - -:::tip -[To read more about variable sets check out the variable sets concepts guide.](../concepts/variable-sets.md) -::: - -![](https://res.cloudinary.com/djwdcmwdz/image/upload/v1685967319/docs/demo.tracetest.io_transaction_QZ3ejgl4R_run_2_oproo4.png) - -On the environments page, click **Create Environment**. - -![](https://res.cloudinary.com/djwdcmwdz/image/upload/v1685967361/docs/demo.tracetest.io_transaction_QZ3ejgl4R_run_2_1_omab6p.png) - -To create an environment, click **Create**. - -You can also edit an environment by clicking on the three dots and clicking **Edit**. - -![](https://res.cloudinary.com/djwdcmwdz/image/upload/v1685967449/docs/Screenshot_2023-06-05_at_14.17.25_rmirjt.png) - -To export a YAML definition of an environment, click **Environment Definition**: - -![](https://res.cloudinary.com/djwdcmwdz/image/upload/v1685967413/docs/demo.tracetest.io_transaction_QZ3ejgl4R_run_2_2_l4tajt.png) diff --git a/docs/docs/web-ui/creating-transactions.md b/docs/docs/web-ui/creating-transactions.md index d332171155..977168ecf9 100644 --- a/docs/docs/web-ui/creating-transactions.md +++ b/docs/docs/web-ui/creating-transactions.md @@ -23,8 +23,6 @@ Next, select which tests to run in the transaction and click **Create & Run**: The transaction will start: ![Running Transaction](../img/running-transaction.png) - - On the automate tab, you find methods to automate the current transaction, including the YAML test file and the CLI command for Tracetest. diff --git a/docs/docs/web-ui/creating-variable-sets.md b/docs/docs/web-ui/creating-variable-sets.md new file mode 100644 index 0000000000..1b76b70364 --- /dev/null +++ b/docs/docs/web-ui/creating-variable-sets.md @@ -0,0 +1,23 @@ +# Creating Variable Sets + +This page showcases how to create and edit variable sets in the Web UI. + +:::tip +[To read more about variable sets check out the variable sets concepts guide.](../concepts/variable-sets.md) +::: + +![](../img/all-vars.png) + +On the variable sets page, click **Create Variable Set**. + +![](../img/create-vars-form.png) + +To create a variable set, click **Create**. + +You can also edit a variable set by clicking on the three dots and clicking **Edit**. + +![](../img/data-vars.png) + +To export a YAML definition of a variable set, click **Variable Set Definition**: + +![](../img/definition-vars.png) diff --git a/docs/sidebars.js b/docs/sidebars.js index cab58b7b1d..7aab0a723d 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -614,8 +614,8 @@ const sidebars = { }, { type: "doc", - id: "web-ui/creating-environments", - label: "Creating Environments", + id: "web-ui/creating-variable-sets", + label: "Creating Variable Sets", }, ], }, @@ -692,8 +692,8 @@ const sidebars = { }, { type: "doc", - id: "cli/creating-environments", - label: "Creating Environments", + id: "cli/creating-variable-sets", + label: "Creating Variable Sets", }, { type: "category", diff --git a/go.work.sum b/go.work.sum index 062c67662f..e25a401c25 100644 --- a/go.work.sum +++ b/go.work.sum @@ -143,6 +143,7 @@ github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= @@ -186,7 +187,6 @@ github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHF github.com/jackc/pgtype v1.6.2 h1:b3pDeuhbbzBYcg5kwNmNDun4pFUD/0AAr1kLXZLeNt8= github.com/jackc/pgx/v4 v4.10.1 h1:/6Q3ye4myIj6AaplUm+eRcz4OhK9HAvFf4ePsG40LJY= github.com/jackc/puddle v1.1.3 h1:JnPg/5Q9xVJGfjsO5CPUOjnJps1JaRUm8I9FXVCFK94= -github.com/jackc/puddle/v2 v2.2.0 h1:RdcDk92EJBuBS55nQMMYFXTxwstHug4jkhT5pq8VxPk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/knadh/koanf v1.4.3/go.mod h1:5FAkuykKXZvLqhAbP4peWgM5CTcZmn7L1d27k/a+kfg= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=