Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package chezmoi for openSUSE:Factory checked in at 2023-07-18 22:07:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chezmoi (Old) and /work/SRC/openSUSE:Factory/.chezmoi.new.3193 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chezmoi" Tue Jul 18 22:07:43 2023 rev:29 rq:1099108 version:2.35.0 Changes: -------- --- /work/SRC/openSUSE:Factory/chezmoi/chezmoi.changes 2023-07-05 15:31:18.666833653 +0200 +++ /work/SRC/openSUSE:Factory/.chezmoi.new.3193/chezmoi.changes 2023-07-18 22:07:53.642911743 +0200 @@ -1,0 +2,9 @@ +Mon Jul 17 14:20:09 UTC 2023 - Filippo Bonazzi <filippo.bona...@suse.com> + +- Update to version 2.35.0: + * feat: Add archive-file externals + * fix: Never consider localhost.localdomain in /etc/hosts as the FQDN + * feat: Add support for HCP Vault Secrets + * chore: Miscellaneous fixes + +------------------------------------------------------------------- Old: ---- chezmoi-2.34.3.obscpio New: ---- chezmoi-2.35.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chezmoi.spec ++++++ --- /var/tmp/diff_new_pack.d1SIHW/_old 2023-07-18 22:07:54.706917691 +0200 +++ /var/tmp/diff_new_pack.d1SIHW/_new 2023-07-18 22:07:54.714917736 +0200 @@ -17,7 +17,7 @@ Name: chezmoi -Version: 2.34.3 +Version: 2.35.0 Release: 0 Summary: A multi-host manager for dotfiles License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.d1SIHW/_old 2023-07-18 22:07:54.762918004 +0200 +++ /var/tmp/diff_new_pack.d1SIHW/_new 2023-07-18 22:07:54.766918027 +0200 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/twpayne/chezmoi.git</param> - <param name="revision">v2.34.3</param> + <param name="revision">v2.35.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> </service> ++++++ chezmoi-2.34.3.obscpio -> chezmoi-2.35.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/.github/workflows/govulncheck.yml new/chezmoi-2.35.0/.github/workflows/govulncheck.yml --- old/chezmoi-2.34.3/.github/workflows/govulncheck.yml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/.github/workflows/govulncheck.yml 2023-07-14 18:22:53.000000000 +0200 @@ -1,5 +1,13 @@ name: govulncheck on: + pull_request: + branches: + - master + push: + branches: + - master + tags: + - v* schedule: - cron: 22 2 * * * jobs: @@ -11,12 +19,6 @@ id: go-version run: | echo go-version="$(awk '/GO_VERSION:/ { print $2 }' .github/workflows/main.yml | tr -d \')" >> "${GITHUB_OUTPUT}" - - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 + - uses: golang/govulncheck-action@dd3ead030e4f2cf713062f7a3395191802364e13 with: - go-version: ${{ steps.go-version.outputs.go-version }} - - name: install - run: | - go install golang.org/x/vuln/cmd/govulncheck@latest - - name: run - run: | - govulncheck ./... + go-version-input: ${{ steps.go-version.outputs.go-version }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/.github/workflows/main.yml new/chezmoi-2.35.0/.github/workflows/main.yml --- old/chezmoi-2.34.3/.github/workflows/main.yml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/.github/workflows/main.yml 2023-07-14 18:22:53.000000000 +0200 @@ -11,7 +11,7 @@ env: ACTIONLINT_VERSION: 1.6.25 AGE_VERSION: 1.1.1 - GO_VERSION: 1.20.5 + GO_VERSION: 1.20.6 GOFUMPT_VERSION: 0.4.0 GOLANGCI_LINT_VERSION: 1.53.3 GOLINES_VERSION: 0.11.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/.github/workflows/winget.yml new/chezmoi-2.35.0/.github/workflows/winget.yml --- old/chezmoi-2.34.3/.github/workflows/winget.yml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/.github/workflows/winget.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -name: Publish to Winget -on: - release: - types: [released] - -jobs: - publish: - runs-on: windows-latest # Action can only run on Windows - steps: - - uses: vedantmgoyal2009/winget-releaser@v2 - with: - identifier: twpayne.chezmoi - installers-regex: '_windows_\w+\.zip$' - token: ${{ secrets.WINGET_TOKEN }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/.goreleaser.yaml new/chezmoi-2.35.0/.goreleaser.yaml --- old/chezmoi-2.34.3/.goreleaser.yaml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/.goreleaser.yaml 2023-07-14 18:22:53.000000000 +0200 @@ -244,3 +244,38 @@ prefix_template: '{{ .ProjectName }}-{{ .Version }}/' files: - COMMIT + +winget: +- name: chezmoi + publisher: twpayne + publisher_url: https://github.com/twpayne + short_description: Manage your dotfiles across multiple diverse machines, securely. + license: MIT + commit_author: + name: Tom Payne + email: twpa...@gmail.com + homepage: https://chezmoi.io + license_url: https://github.com/twpayne/chezmoi/blob/master/LICENSE + copyright: Copyright (c) 2018-2023 Tom Payne + release_notes: '{{ .Changelog }}' + release_notes_url: 'https://github.com/twpayne/chezmoi/releases/tag/{{ .Tag }}' + tags: + - cli + - configuration + - dotbot + - dotfile + - dotfiles + - stow + - yadm + author: Tom Payne + publisher_support_url: https://github.com/twpayne/chezmoi/issues + repository: + owner: twpayne + name: winget-pkgs + token: ${{ secrets.WINGET_TOKEN }} + pull_request: + enabled: true + base: + owner: microsoft + name: winget-pkgs + branch: master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/configuration-file/variables.md.yaml 2023-07-14 18:22:53.000000000 +0200 @@ -215,6 +215,22 @@ symmetric: type: bool description: Use symmetric GPG encryption + hcpVaultSecrets: + applicationName: + type: string + description: Default application name if none is specified + args: + type: '[]string' + description: Extra args to HCP Vault Secrets CLI command + command: + default: '`vlt`' + description: HCP Vault Secrets CLI command + organizationId: + type: string + description: Default organization ID if none is specified + projectId: + type: string + description: Default project ID if none is specified hooks: '*command*`.post.args`': type: '[]string' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/special-files-and-directories/chezmoiexternal-format.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/special-files-and-directories/chezmoiexternal-format.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/special-files-and-directories/chezmoiexternal-format.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/special-files-and-directories/chezmoiexternal-format.md 2023-07-14 18:22:53.000000000 +0200 @@ -13,32 +13,33 @@ Entries are indexed by target name relative to the directory of the `.chezmoiexternal.$FORMAT` file, and must have a `type` and a `url` field. -`type` can be either `file`, `archive`, or `git-repo`. If the entry's parent -directories do not already exist in the source state then chezmoi will create -them as regular directories. +`type` can be either `file`, `archive`, `archive-file`, or `git-repo`. If the +entry's parent directories do not already exist in the source state then chezmoi +will create them as regular directories. Entries may have the following fields: -| Variable | Type | Default value | Description | -| ----------------- | -------- | ------------- | ------------------------------------------------------------- | -| `type` | string | *none* | External type (`file`, `archive`, or `git-repo`) | -| `encrypted` | bool | `false` | Whether the external is encrypted | -| `exact` | bool | `false` | Add `exact_` attribute to directories in archive | -| `exclude` | []string | *none* | Patterns to exclude from archive | -| `executable` | bool | `false` | Add `executable_` attribute to file | -| `format` | string | *autodetect* | Format of archive | -| `include` | []string | *none* | Patterns to include from archive | -| `refreshPeriod` | duration | `0` | Refresh period | -| `stripComponents` | int | `0` | Number of leading directory components to strip from archives | -| `url` | string | *none* | URL | -| `checksum.sha256` | string | *none* | Expected SHA256 checksum of data | -| `checksum.sha384` | string | *none* | Expected SHA384 checksum of data | -| `checksum.sha512` | string | *none* | Expected SHA512 checksum of data | -| `checksum.size` | int | *none* | Expected size of data | -| `clone.args` | []string | *none* | Extra args to `git clone` | -| `filter.command` | string | *none* | Command to filter contents | -| `filter.args` | []string | *none* | Extra args to command to filter contents | -| `pull.args` | []string | *none* | Extra args to `git pull` | +| Variable | Type | Default value | Description | +| ----------------- | -------- | ------------- | ---------------------------------------------------------------- | +| `type` | string | *none* | External type (`file`, `archive`, `archive-file`, or `git-repo`) | +| `encrypted` | bool | `false` | Whether the external is encrypted | +| `exact` | bool | `false` | Add `exact_` attribute to directories in archive | +| `exclude` | []string | *none* | Patterns to exclude from archive | +| `executable` | bool | `false` | Add `executable_` attribute to file | +| `format` | string | *autodetect* | Format of archive | +| `path` | string | *none* | Path to file in archive | +| `include` | []string | *none* | Patterns to include from archive | +| `refreshPeriod` | duration | `0` | Refresh period | +| `stripComponents` | int | `0` | Number of leading directory components to strip from archives | +| `url` | string | *none* | URL | +| `checksum.sha256` | string | *none* | Expected SHA256 checksum of data | +| `checksum.sha384` | string | *none* | Expected SHA384 checksum of data | +| `checksum.sha512` | string | *none* | Expected SHA512 checksum of data | +| `checksum.size` | int | *none* | Expected size of data | +| `clone.args` | []string | *none* | Extra args to `git clone` | +| `filter.command` | string | *none* | Command to filter contents | +| `filter.args` | []string | *none* | Extra args to command to filter contents | +| `pull.args` | []string | *none* | Extra args to `git pull` | If any of the optional `checksum.sha256`, `checksum.sha384`, or `checksum.sha512` fields are set, chezmoi will verify that the downloaded data @@ -84,6 +85,12 @@ Excluded archive members do not generate source state entries, and, if they are directories, all of their children are also excluded. +If `type` is `archive-file` then the target is a file or symlink with the +contents of the entry `path` in the archive at `url`. The optional integer field +`stripComponents` will remove leading path components from the members of the +archive before comparing them with `path`. The behavior of `format` is the same +as for `archive`. + If `type` is `git-repo` then chezmoi will run `git clone $URL $TARGET_NAME` with the optional `clone.args` if the target does not exist. If the target exists, then chezmoi will run `git pull` with the optional `pull.args` to @@ -120,6 +127,10 @@ url = "https://github.com/romkatv/powerlevel10k/archive/v1.15.0.tar.gz" exact = true stripComponents = 1 + [".local/bin/age"] + type = "archive-file" + url = "https://github.com/FiloSottile/age/releases/download/v1.1.1/age-v1.1.1-{{ .chezmoi.os }}-{{ .chezmoi.arch }}.tar.gz" + path = "age/age" ["www/adminer/plugins"] type = "archive" url = "https://api.github.com/repos/vrana/adminer/tarball" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/1password-functions/onepassword.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/1password-functions/onepassword.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/1password-functions/onepassword.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/1password-functions/onepassword.md 2023-07-14 18:22:53.000000000 +0200 @@ -15,6 +15,10 @@ If there is no valid session in the environment, by default you will be interactively prompted to sign in. +The 1password CLI command can be set with the `onePassword.command` config +variable, and extra arguments can be specified with the `onePassword.args` +config variable. + !!! example ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecret.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecret.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecret.md 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecret.md 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,16 @@ +# `hcpVaultSecret` *key* [*application-name* [*project-id* [*organization-id*]]] + +`hcpVaultSecret` returns the plaintext secret from [HCP Vault +Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets) using `vlt +secrets get --plaintext`. + +If any of *application-name*, *project-id*, or *organization-id* are empty or +omitted, then chezmoi will use the value from the +`hcpVaultSecret.applicationName`, `hcpVaultSecret.projectId`, and +`hcpVaultSecret.organizationId` config variables if they are set and not empty. + +!!! example + + ``` + {{ hcpVaultSecret "username" }} + ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecretJson.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecretJson.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecretJson.md 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/hcpVaultSecretJson.md 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,16 @@ +# `hcpVaultSecretJson` *key* [*application-name* [*project-id* [*organization-id*]]] + +`hcpVaultSecretJson` returns structured data from [HCP Vault +Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets) using `vlt +secrets get --format=json`. + +If any of *application-name*, *project-id*, or *organization-id* are empty or omitted, then +chezmoi will use the value from the `hcpVaultSecret.applicationName`, +`hcpVaultSecret.projectId`, and `hcpVaultSecret.organizationId` config variables +if they are set and not empty. + +!!! example + + ``` + {{ (hcpVaultSecretJson "secret_name" "application_name").created_by.email }} + ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/index.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/index.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/index.md 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/hcp-vault-secrets-functions/index.md 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,10 @@ +# HCP Vault Secrets + +chezmoi includes support for [HCP Vault +Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets) using the `vlt` +CLI to expose data through the `hcpVaultSecret` and `hcpVaultSecretJson` +template functions. + +!!! warning + + HCP Vault Secrets is in beta and chezmoi's interface to it may change. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/passhole-functions/index.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/passhole-functions/index.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/passhole-functions/index.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/passhole-functions/index.md 2023-07-14 18:22:53.000000000 +0200 @@ -1,4 +1,4 @@ # Passhole -chezmoi includes support for [Keepass](https://keepass.info/) using the +chezmoi includes support for [KeePass](https://keepass.info/) using the [Passhole CLI](https://github.com/Evidlo/passhole) (`ph`). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/passhole-functions/passhole.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/passhole-functions/passhole.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/reference/templates/passhole-functions/passhole.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/reference/templates/passhole-functions/passhole.md 2023-07-14 18:22:53.000000000 +0200 @@ -1,6 +1,6 @@ # passhole *path* *field* -`passhole` returns the *field* of *path* from a [Keepass](https://keypass.info/) +`passhole` returns the *field* of *path* from a [KeePass](https://keepass.info/) database using [passhole](https://github.com/Evidlo/passhole)'s `ph` command. !!! example diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/include-files-from-elsewhere.md 2023-07-14 18:22:53.000000000 +0200 @@ -113,24 +113,20 @@ ## Extract a single file from an archive -You can extract a single file from an archive using the `$ENTRY.filter.command` -and `$ENTRY.filter.args` variables in `.chezmoiexternal.$FORMAT`, for example: +You can extract a single file from an archive using the `archive-file` type in +`.chezmoiexternal.$FORMAT`, for example: ```toml title="~/.local/share/chezmoi/.chezmoiexternal.toml" -{{ $ageVersion := "1.0.0" -}} +{{ $ageVersion := "1.1.1" -}} [".local/bin/age"] - type = "file" + type = "archive-file" url = "https://github.com/FiloSottile/age/releases/download/v{{ $ageVersion }}/age-v{{ $ageVersion }}-{{ .chezmoi.os }}-{{ .chezmoi.arch }}.tar.gz" - executable = true - refreshPeriod = "168h" - [".local/bin/age".filter] - command = "tar" - args = ["--extract", "--file", "/dev/stdin", "--gzip", "--to-stdout", "age/age"] + path = "age/age" ``` This will extract the single archive member `age/age` from the given URL (which is computed for the current OS and architecture) to the target -`./local/bin/age` and set its executable bit. +`./local/bin/age`. ## Import archives diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/custom.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/custom.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/custom.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/custom.md 2023-07-14 18:22:53.000000000 +0200 @@ -7,13 +7,14 @@ output respectively. All of the above secret managers can be supported in this way: -| Secret Manager | `secret.command` | Template skeleton | -| --------------- | ---------------- | -------------------------------------------------- | -| 1Password | `op` | `{{ secretJSON "get" "item" "$ID" }}` | -| Bitwarden | `bw` | `{{ secretJSON "get" "$ID" }}` | -| HashiCorp Vault | `vault` | `{{ secretJSON "kv" "get" "-format=json" "$ID" }}` | -| LastPass | `lpass` | `{{ secretJSON "show" "--json" "$ID" }}` | -| KeePassXC | `keepassxc-cli` | Not possible (interactive command only) | -| Keeper | `keeper` | `{{ secretJSON "get" "--format=json" "$ID" }}` | -| pass | `pass` | `{{ secret "show" "$ID" }}` | -| passhole | `ph` | `{{ secret "$ID" "password" }}` | +| Secret Manager | `secret.command` | Template skeleton | +| ----------------- | ---------------- | -------------------------------------------------- | +| 1Password | `op` | `{{ secretJSON "get" "item" "$ID" }}` | +| Bitwarden | `bw` | `{{ secretJSON "get" "$ID" }}` | +| HashiCorp Vault | `vault` | `{{ secretJSON "kv" "get" "-format=json" "$ID" }}` | +| HCP Vault Secrets | `vlt` | `{{ secret "secrets" "get" "--plaintext" "$ID }}` | +| LastPass | `lpass` | `{{ secretJSON "show" "--json" "$ID" }}` | +| KeePassXC | `keepassxc-cli` | Not possible (interactive command only) | +| Keeper | `keeper` | `{{ secretJSON "get" "--format=json" "$ID" }}` | +| pass | `pass` | `{{ secret "show" "$ID" }}` | +| passhole | `ph` | `{{ secret "$ID" "password" }}` | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/hcp-vault-secrets.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/hcp-vault-secrets.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/hcp-vault-secrets.md 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/hcp-vault-secrets.md 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,47 @@ +# HCP Vault Secrets + +chezmoi includes support for [HCP Vault +Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets) using the `vlt` +CLI to expose data through the `hcpVaultSecret` and `hcpVaultSecretJson` +template functions. + +!!! warning + + HCP Vault Secrets is in beta and chezmoi's interface to it may change. + +Log in using: + +```console +$ vlt login +``` + +The output of the `vlt secrets get --plaintext $SECRET_NAME` is available as the +`hcpVaultSecret` function, for example: + +``` +{{ hcpVaultSecret "secret_name" "application_name" "project_id" "organization_id" }} +``` + +You can set the default values for the application name, project ID, and +organization ID in your config file, for example: + +```toml title="~/.config/chezmoi/chezmoi.toml" +[hcpVaultSecrets] + organizationId = "bf479eab-a292-4b46-92df-e22f5c47eadc" + projectId = "5907a2fa-d26a-462a-8705-74dfe967e87d" + applicationName = "my-application" +``` + +With these default values, you can omit them in the call to `hcpVaultSecret`, for example: + +``` +{{ hcpVaultSecret "secret_name" }} +{{ hcpVaultSecret "other_secret_name" "other_application_name" }} +``` + +Structured data from `vlt secrets get --format=json $SECRET_NAME` is available +as the `hcpVaultSecretJson` template function, for example: + +``` +{{ (hcpVaultSecretJson "secret_name").created_by.email }} +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/keepassxc.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/keepassxc.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/user-guide/password-managers/keepassxc.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/user-guide/password-managers/keepassxc.md 2023-07-14 18:22:53.000000000 +0200 @@ -28,7 +28,7 @@ !!! info - The KeepassXC CLI does not currently support any persistent login, which + The KeePassXC CLI does not currently support any persistent login, which means that you will have to enter your password every time you run chezmoi. Support for non-password authentication methods (e.g. YubiKey) is currently diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/docs/what-does-chezmoi-do.md new/chezmoi-2.35.0/assets/chezmoi.io/docs/what-does-chezmoi-do.md --- old/chezmoi-2.34.3/assets/chezmoi.io/docs/what-does-chezmoi-do.md 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/docs/what-does-chezmoi-do.md 2023-07-14 18:22:53.000000000 +0200 @@ -45,9 +45,10 @@ [1Password](https://1password.com/), [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/), [Bitwarden](https://bitwarden.com/), [Dashlane](https://www.dashlane.com/), -[gopass](https://www.gopass.pw/), [KeePassXC](https://keepassxc.org/), -[Keeper](https://www.keepersecurity.com/), [LastPass](https://lastpass.com/), -[pass](https://www.passwordstore.org/), +[gopass](https://www.gopass.pw/), [HCP Vault +Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets), +[KeePassXC](https://keepassxc.org/), [Keeper](https://www.keepersecurity.com/), +[LastPass](https://lastpass.com/), [pass](https://www.passwordstore.org/), [passhole](https://github.com/Evidlo/passhole), [Vault](https://www.vaultproject.io/), Keychain, [Keyring](https://wiki.gnome.org/Projects/GnomeKeyring), or any command-line diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/chezmoi.io/mkdocs.yml new/chezmoi-2.35.0/assets/chezmoi.io/mkdocs.yml --- old/chezmoi-2.34.3/assets/chezmoi.io/mkdocs.yml 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/chezmoi.io/mkdocs.yml 2023-07-14 18:22:53.000000000 +0200 @@ -65,6 +65,7 @@ - Dashlane: user-guide/password-managers/dashlane.md - ejson: user-guide/password-managers/ejson.md - gopass: user-guide/password-managers/gopass.md + - Hashicorp Vault Secrets: user-guide/password-managers/hcp-vault-secrets.md - KeePassXC: user-guide/password-managers/keepassxc.md - Keychain and Windows Credentials Manager: user-guide/password-managers/keychain-and-windows-credentials-manager.md - Keeper: user-guide/password-managers/keeper.md @@ -254,6 +255,10 @@ - reference/templates/gopass-functions/index.md - gopass: reference/templates/gopass-functions/gopass.md - gopassRaw: reference/templates/gopass-functions/gopassRaw.md + - HCP Vault Secrets functions: + - reference/templates/hcp-vault-secrets-functions/index.md + - hcpVaultSecret: reference/templates/hcp-vault-secrets-functions/hcpVaultSecret.md + - hcpVaultSecretJson: reference/templates/hcp-vault-secrets-functions/hcpVaultSecretJson.md - KeePassXC functions: - reference/templates/keepassxc-functions/index.md - keepassxc: reference/templates/keepassxc-functions/keepassxc.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/images/144px.svg new/chezmoi-2.35.0/assets/images/144px.svg --- old/chezmoi-2.34.3/assets/images/144px.svg 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/images/144px.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Creator: CorelDRAW X7 --> -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="12.1918mm" height="9.9906mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" -viewBox="0 0 1219 999" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <style type="text/css"> - <![CDATA[ - .fil1 {fill:url(#id0)} - .fil0 {fill:url(#id1)} - ]]> - </style> - <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="678.83" y1="533.54" x2="532.87" y2="437.45"> - <stop offset="0" style="stop-opacity:1; stop-color:#4D4B4A"/> - <stop offset="1" style="stop-opacity:1; stop-color:#84807D"/> - </linearGradient> - <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="#id0" x1="1029.01" y1="775.63" x2="190.17" y2="223.43"> - </linearGradient> - </defs> - <g id="Layer_x0020_1"> - <metadata id="CorelCorpID_0Corel-Layer"/> - <g id="_1036550208"> - <path class="fil0" d="M634 25l244 206 245 205 91 77 -119 0 -153 0 0 258c98,23 192,60 279,108 -191,-54 -401,-75 -618,-54 -218,21 -420,82 -597,172 81,-68 171,-125 270,-167 -2,1 -4,2 -6,2l0 -319 -153 0 -119 0 91 -77 245 -205 244 -206 28 -23 28 23zm308 746c-3,-1 -6,-2 -9,-2 3,0 6,1 9,2zm-10 -3c-3,0 -6,-1 -9,-2 3,1 6,2 9,2zm-10 -2c-3,0 -6,-1 -9,-2 3,1 6,2 9,2zm-10 -2c-3,0 -6,-1 -8,-1 2,0 5,1 8,1zm-11 -2c-2,0 -5,-1 -7,-1 2,0 5,1 7,1zm-9 -2c-3,0 -5,-1 -8,-1 3,0 5,1 8,1zm-11 -2c-2,0 -4,0 -7,-1 3,1 5,1 7,1zm-10 -1c-2,-1 -4,-1 -6,-1 2,0 4,0 6,1zm-10 -2c-2,0 -4,-1 -6,-1l0 -140 0 -101 0 -87 121 0 -154 -129 -216 -182 -217 182 -153 129 121 0 0 87 0 101 0 185 0 0c76,-26 155,-43 238,-51 90,-9 179,-6 266,7zm-549 60c-1,1 -3,1 -4,2 1,-1 3,-1 4,-2zm-9 4c-1,0 -3,1 -5,1 2,0 4,-1 5,-1zm-9 3c-2,1 -4,2 -6,3 2,-1 4,-2 6,-3zm-9 4c-2,1 -4,2 -6,2 2,0 4,-1 6,-2z"/> - <path class="fil1" d="M532 445c0,-40 33,-73 74,-73 40,0 73,33 73,73 0,28 -14,52 -36,64l7 13 45 77 -89 0 -89 0 45 -77 7 -13c-22,-12 -37,-36 -37,-64z"/> - </g> - </g> -</svg> Binary files old/chezmoi-2.34.3/assets/images/256px.png and new/chezmoi-2.35.0/assets/images/256px.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/images/256px.svg new/chezmoi-2.35.0/assets/images/256px.svg --- old/chezmoi-2.34.3/assets/images/256px.svg 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/images/256px.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Creator: CorelDRAW X7 --> -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="21.6746mm" height="17.6952mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" -viewBox="0 0 2167 1770" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <style type="text/css"> - <![CDATA[ - .fil0 {fill:url(#id0)} - .fil1 {fill:url(#id1)} - ]]> - </style> - <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="1827.19" y1="1374.16" x2="340.28" y2="395.35"> - <stop offset="0" style="stop-opacity:1; stop-color:#4D4B4A"/> - <stop offset="1" style="stop-opacity:1; stop-color:#84807D"/> - </linearGradient> - <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="#id0" x1="1206.46" y1="945.05" x2="947.73" y2="774.73"> - </linearGradient> - </defs> - <g id="Layer_x0020_1"> - <metadata id="CorelCorpID_0Corel-Layer"/> - <g id="_601534368"> - <path class="fil0" d="M1127 44l433 364 433 365 161 136 -211 0 -271 0 0 457c174,40 341,106 496,192 -339,-97 -711,-134 -1097,-96 -385,37 -743,145 -1057,305 143,-121 304,-221 478,-297 -4,2 -7,3 -10,5l0 -566 -271 0 -211 0 161 -136 433 -365 434 -364 49 -42 50 42zm545 1321c-5,-1 -10,-2 -16,-3 6,1 11,2 16,3zm-17 -4c-6,-1 -11,-2 -16,-3 5,1 10,2 16,3zm-18 -3c-5,-2 -10,-3 -15,-4 5,1 10,2 15,4zm-18 -4c-5,-1 -9,-2 -14,-3 5,1 9,2 14,3zm-18 -4c-4,-1 -9,-2 -14,-2 5,0 10,1 14,2zm-18 -3c-4,-1 -8,-2 -13,-3 5,1 9,2 13,3zm-17 -3c-5,-1 -9,-2 -13,-3 4,1 8,2 13,3zm-19 -4c-4,0 -7,-1 -11,-1 4,0 7,1 11,1zm-18 -2c-4,-1 -7,-2 -11,-2l0 -248 0 -179 0 -154 214 0 -271 -229 -384 -323 -384 323 -271 229 214 0 0 154 0 179 0 327 0 0c134,-45 275,-76 422,-91 160,-15 318,-10 471,14zm-972 106c-3,1 -6,2 -8,3 2,-1 5,-2 8,-3zm-17 6c-2,1 -5,2 -8,4 3,-2 6,-3 8,-4zm-15 7c-4,1 -7,2 -11,4 4,-2 7,-3 11,-4zm-17 6c-3,2 -7,3 -10,5 3,-2 7,-3 10,-5z"/> - <path class="fil1" d="M947 789c0,-72 58,-130 130,-130 72,0 131,58 131,130 0,48 -27,90 -66,113l14 23 78 136 -157 0 -157 0 79 -136 13 -23c-39,-23 -65,-65 -65,-113z"/> - </g> - </g> -</svg> Binary files old/chezmoi-2.34.3/assets/images/512px.png and new/chezmoi-2.35.0/assets/images/512px.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/images/512px.svg new/chezmoi-2.35.0/assets/images/512px.svg --- old/chezmoi-2.34.3/assets/images/512px.svg 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/images/512px.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Creator: CorelDRAW X7 --> -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="43.3492mm" height="35.306mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" -viewBox="0 0 4335 3531" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <style type="text/css"> - <![CDATA[ - .fil1 {fill:url(#id0)} - .fil0 {fill:url(#id1)} - ]]> - </style> - <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="2412.92" y1="1885.88" x2="1895.45" y2="1545.24"> - <stop offset="0" style="stop-opacity:1; stop-color:#4D4B4A"/> - <stop offset="1" style="stop-opacity:1; stop-color:#84807D"/> - </linearGradient> - <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="#id0" x1="3654.36" y1="2744.1" x2="680.56" y2="786.49"> - </linearGradient> - </defs> - <g id="Layer_x0020_1"> - <metadata id="CorelCorpID_0Corel-Layer"/> - <g id="_1095342688"> - <path class="fil0" d="M2253 83l866 729 867 730 323 272 -422 0 -542 0 0 913c348,82 681,212 990,384 -677,-194 -1421,-267 -2192,-192 -772,75 -1488,291 -2115,612 287,-243 608,-444 955,-594 -6,3 -13,5 -19,8l0 -1131 -543 0 -422 0 324 -272 866 -730 866 -729 99 -83 99 83zm1092 2644c-11,-3 -22,-5 -32,-8 10,3 21,5 32,8zm-36 -8c-10,-3 -21,-5 -32,-7 11,2 22,4 32,7zm-34 -8c-11,-2 -21,-4 -32,-7 11,3 21,5 32,7zm-36 -8c-10,-2 -20,-3 -30,-5 10,2 20,3 30,5zm-37 -7c-9,-2 -18,-3 -27,-5 9,2 18,3 27,5zm-35 -7c-9,-1 -18,-3 -27,-4 9,1 18,3 27,4zm-36 -6c-8,-1 -17,-3 -25,-4 8,1 17,3 25,4zm-37 -6c-7,-1 -15,-3 -22,-4 7,1 15,3 22,4zm-36 -6c-8,-1 -15,-2 -22,-3l0 -496 0 -358 0 -309 429 0 -543 -457 -768 -646 -767 646 -544 457 429 0 0 309 0 358 0 654 -1 0c269,-91 551,-153 845,-181 320,-31 636,-21 942,26zm-1945 213c-5,2 -10,4 -16,6 6,-2 11,-4 16,-6zm-32 12c-6,2 -11,5 -17,7 6,-2 11,-5 17,-7zm-32 13c-7,3 -14,6 -20,9 6,-3 13,-6 20,-9zm-32 13c-7,3 -14,6 -21,10 7,-4 14,-7 21,-10z"/> - <path class="fil1" d="M1893 1574c0,-144 117,-261 261,-261 144,0 261,117 261,261 0,96 -52,181 -130,226l26 46 158 272 -315 0 -314 0 157 -272 27 -46c-78,-45 -131,-130 -131,-226z"/> - </g> - </g> -</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/assets/images/96px.svg new/chezmoi-2.35.0/assets/images/96px.svg --- old/chezmoi-2.34.3/assets/images/96px.svg 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/assets/images/96px.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<!-- Creator: CorelDRAW X7 --> -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="8.1278mm" height="6.6038mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" -viewBox="0 0 813 660" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <style type="text/css"> - <![CDATA[ - .fil0 {fill:url(#id0)} - .fil1 {fill:url(#id1)} - ]]> - </style> - <linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="684.52" y1="513.27" x2="128.27" y2="147.1"> - <stop offset="0" style="stop-opacity:1; stop-color:#4D4B4A"/> - <stop offset="1" style="stop-opacity:1; stop-color:#84807D"/> - </linearGradient> - <linearGradient id="id1" gradientUnits="userSpaceOnUse" xlink:href="#id0" x1="452.31" y1="352.74" x2="355.51" y2="289.03"> - </linearGradient> - </defs> - <g id="Layer_x0020_1"> - <metadata id="CorelCorpID_0Corel-Layer"/> - <g id="_1099353056"> - <path class="fil0" d="M422 16l162 136 163 136 60 51 -79 0 -101 0 0 171c65,15 127,40 185,72 -127,-36 -266,-50 -410,-36 -145,14 -278,54 -396,114 54,-45 114,-83 179,-111 -1,1 -3,1 -4,2l0 -212 -101 0 -79 0 60 -51 162 -136 162 -136 19 -16 18 16zm205 494c-2,0 -4,-1 -6,-1 2,0 4,1 6,1zm-7 -1c-2,-1 -4,-1 -6,-2 2,1 4,1 6,2zm-7 -2c-1,0 -3,-1 -5,-1 2,0 4,1 5,1zm-6 -1c-2,-1 -4,-1 -6,-1 2,0 4,0 6,1zm-7 -2c-2,0 -3,0 -5,-1 2,1 3,1 5,1zm-7 -1c-1,0 -3,-1 -5,-1 2,0 4,1 5,1zm-6 -1c-2,0 -3,-1 -5,-1 2,0 3,1 5,1zm-7 -1c-2,-1 -3,-1 -4,-1 1,0 2,0 4,1zm-7 -1c-1,-1 -3,-1 -4,-1l0 -93 0 -67 0 -57 80 0 -102 -86 -143 -121 -144 121 -101 86 80 0 0 57 0 67 0 123 0 0c50,-17 103,-29 158,-34 60,-6 119,-4 176,5zm-364 39c-1,1 -2,1 -3,2 1,-1 2,-1 3,-2zm-6 3c-1,0 -2,1 -3,1 1,0 2,-1 3,-1zm-6 2c-1,1 -2,1 -4,2 2,-1 3,-1 4,-2zm-6 3c-1,0 -2,1 -4,1 2,0 3,-1 4,-1z"/> - <path class="fil1" d="M355 294c0,-27 22,-48 49,-48 27,0 49,21 49,48 0,18 -10,34 -25,43l5 8 30 51 -59 0 -59 0 30 -51 5 -8c-15,-9 -25,-25 -25,-43z"/> - </g> - </g> -</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/go.mod new/chezmoi-2.35.0/go.mod --- old/chezmoi-2.34.3/go.mod 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/go.mod 2023-07-14 18:22:53.000000000 +0200 @@ -5,7 +5,7 @@ require ( filippo.io/age v1.1.1 github.com/Masterminds/sprig/v3 v3.2.3 - github.com/Shopify/ejson v1.4.0 + github.com/Shopify/ejson v1.4.1 github.com/alecthomas/assert/v2 v2.3.0 github.com/aws/aws-sdk-go-v2 v1.18.1 github.com/aws/aws-sdk-go-v2/config v1.18.27 @@ -22,7 +22,7 @@ github.com/google/renameio/v2 v2.0.0 github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 github.com/itchyny/gojq v0.12.13 - github.com/klauspost/compress v1.16.6 + github.com/klauspost/compress v1.16.7 github.com/mitchellh/mapstructure v1.5.0 github.com/muesli/combinator v0.3.0 github.com/muesli/termenv v0.15.2 @@ -41,12 +41,12 @@ github.com/zalando/go-keyring v0.2.3 go.etcd.io/bbolt v1.3.7 go.uber.org/multierr v1.11.0 - golang.org/x/crypto v0.10.0 - golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df - golang.org/x/oauth2 v0.9.0 + golang.org/x/crypto v0.11.0 + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb + golang.org/x/oauth2 v0.10.0 golang.org/x/sync v0.3.0 - golang.org/x/sys v0.9.0 - golang.org/x/term v0.9.0 + golang.org/x/sys v0.10.0 + golang.org/x/term v0.10.0 gopkg.in/ini.v1 v1.67.0 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.0 @@ -57,7 +57,7 @@ github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/alecthomas/chroma v0.10.0 // indirect github.com/alecthomas/repr v0.2.0 // indirect @@ -117,15 +117,15 @@ github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/shopspring/decimal v1.3.1 // indirect - github.com/skeema/knownhosts v1.1.1 // indirect + github.com/skeema/knownhosts v1.2.0 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/yuin/goldmark v1.5.4 // indirect - github.com/yuin/goldmark-emoji v1.0.1 // indirect - golang.org/x/mod v0.11.0 // indirect - golang.org/x/net v0.11.0 // indirect - golang.org/x/text v0.10.0 // indirect - golang.org/x/tools v0.10.0 // indirect + github.com/yuin/goldmark-emoji v1.0.2 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/text v0.11.0 // indirect + golang.org/x/tools v0.11.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/go.sum new/chezmoi-2.35.0/go.sum --- old/chezmoi-2.34.3/go.sum 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/go.sum 2023-07-14 18:22:53.000000000 +0200 @@ -1,5 +1,11 @@ +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= filippo.io/age v1.1.1 h1:pIpO7l151hCnQ4BdyBujnGP2YlUo0uj6sAVNHGBvXHg= filippo.io/age v1.1.1/go.mod h1:l03SrzDUrBkdBx8+IILdnn2KZysqQdbEBUQ4p3sqEQE= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= @@ -10,10 +16,10 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec h1:vV3RryLxt42+ZIVOFbYJCH1jsZNTNmj2NYru5zfx+4E= -github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/Shopify/ejson v1.4.0 h1:RvvWSOjDdInbMNtR97eJ5GEd6njjDNSbvbFHoQjJAXo= -github.com/Shopify/ejson v1.4.0/go.mod h1:VZMUtDzvBW/PAXRUF5fzp1ffb1ucT8MztrZXXLYZurw= +github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb h1:RU+Ff2vE68zFQSoBqlb/LChFztEWWJ9EZ8LU4gA3ubU= +github.com/ProtonMail/go-crypto v0.0.0-20230710112148-e01326fd72eb/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/Shopify/ejson v1.4.1 h1:zGGojGJNTdIWza/kOT8gd2HKCg3ZkSi3CZ1ZX70NHsw= +github.com/Shopify/ejson v1.4.1/go.mod h1:VZMUtDzvBW/PAXRUF5fzp1ffb1ucT8MztrZXXLYZurw= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0= @@ -25,7 +31,9 @@ github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aws/aws-sdk-go-v2 v1.18.1 h1:+tefE750oAb7ZQGzla6bLkOwfcQCEtC5y2RqoqCeqKo= @@ -54,6 +62,7 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg= github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= @@ -65,6 +74,7 @@ github.com/bradenhilton/cityhash v1.0.0/go.mod h1:Wmb8yW1egA9ulrsRX4mxfYx5zq4nBWOCZ+j63oK6uz8= github.com/bradenhilton/mozillainstallhash v1.0.1 h1:JVAVsItiWlLoudJX4L+tIuml+hoxjlzCwkhlENi9yS4= github.com/bradenhilton/mozillainstallhash v1.0.1/go.mod h1:J6cA36kUZrgaTkDl2bHRqI+4i2UKO1ImDB1P1x1PyOA= +github.com/bwesterb/go-ristretto v1.2.3 h1:1w53tCkGhCQ5djbat3+MH0BAQ5Kfgbt56UZQ/JMzngw= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY= github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= @@ -82,9 +92,13 @@ github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -93,20 +107,26 @@ github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustin/gojson v0.0.0-20160307161227-2e71ec9dd5ad h1:Qk76DOWdOp+GlyDKBAG3Klr9cn7N+LcYc82AZ2S7+cA= github.com/dustin/gojson v0.0.0-20160307161227-2e71ec9dd5ad/go.mod h1:mPKfmRa823oBIgl2r20LeMSpTAteW5j7FLkc0vjmzyQ= github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= +github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.7.0 h1:t9AudWVLmqzlo+4bqdf7GY+46SUuRsx59SboFxkq2aE= github.com/go-git/go-git/v5 v5.7.0/go.mod h1:coJHKEOk5kUClpsNlXrUvPrDxY3w3gjHvhcZd8Fodw8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -115,6 +135,7 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -125,6 +146,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github/v53 v53.2.0 h1:wvz3FyF53v4BK+AsnvCmeNhf8AkTaeh2SoYu/XUvTtI= github.com/google/go-github/v53 v53.2.0/go.mod h1:XhFRObz+m/l+UCm9b7KSIC3lT3NWSXGt7mOsAWEloao= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= @@ -135,6 +157,7 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= @@ -156,20 +179,29 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= -github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= @@ -198,6 +230,8 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mmcloughlin/avo v0.5.0 h1:nAco9/aI9Lg2kiuROBY6BhCI/z0t5jEvJfjWbL8qXLU= +github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= @@ -209,6 +243,7 @@ github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= @@ -218,6 +253,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -228,20 +265,30 @@ github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI= +github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= -github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= +github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= @@ -271,21 +318,29 @@ github.com/twpayne/go-xdg/v6 v6.1.1/go.mod h1:+0KSJ4Dx+xaZeDXWZITF84BcNc1UiHDm0DP8txprfD8= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1 h1:+dBg5k7nuTE38VVdoroRsT0Z88fmvdYrI2EjzJst35I= github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1/go.mod h1:nmuySobZb4kFgFy6BptpXp/BBw+xFSyvVPP6auoJB4k= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.7/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.4 h1:2uY/xC0roWy8IBEGLgB1ywIoEJFGmRrX21YQcvGZzjU= github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= +github.com/yuin/goldmark-emoji v1.0.2 h1:c/RgTShNgHTtc6xdz2KKI74jJr6rWi7FPgnP9GAsO5s= +github.com/yuin/goldmark-emoji v1.0.2/go.mod h1:RhP/RWpexdp+KHs7ghKnifRoIs/Bq4nDS7tRbCkOwKY= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -294,14 +349,14 @@ golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= -golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -311,10 +366,10 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= -golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -339,15 +394,15 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -356,15 +411,16 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -380,10 +436,12 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= 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.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -391,5 +449,7 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= +mvdan.cc/editorconfig v0.2.0 h1:XL+7ys6ls/RKrkUNFQvEwIvNHh+JKx8Mj1pUV5wQxQE= +mvdan.cc/editorconfig v0.2.0/go.mod h1:lvnnD3BNdBYkhq+B4uBuFFKatfp02eB6HixDvEz91C0= mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg= mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/chezmoi/chezmoi.go new/chezmoi-2.35.0/pkg/chezmoi/chezmoi.go --- old/chezmoi-2.34.3/pkg/chezmoi/chezmoi.go 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/chezmoi/chezmoi.go 2023-07-14 18:22:53.000000000 +0200 @@ -297,10 +297,26 @@ text = strings.TrimSpace(text) text, _, _ = strings.Cut(text, "#") fields := whitespaceRx.Split(text, -1) - if len(fields) > 1 && net.ParseIP(fields[0]).IsLoopback() && - strings.Contains(fields[1], ".") { - return fields[1], nil + if len(fields) < 2 { + continue } + if !net.ParseIP(fields[0]).IsLoopback() { + continue + } + hostname, domainname, found := strings.Cut(fields[1], ".") + if !found { + continue + } + if hostname == "localhost" { + continue + } + if domainname == "localdomain" { + continue + } + if runtime.GOOS == "darwin" && domainname == "local" { + continue + } + return fields[1], nil } return "", s.Err() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/chezmoi/chezmoi_test.go new/chezmoi-2.35.0/pkg/chezmoi/chezmoi_test.go --- old/chezmoi-2.34.3/pkg/chezmoi/chezmoi_test.go 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/chezmoi/chezmoi_test.go 2023-07-14 18:22:53.000000000 +0200 @@ -66,6 +66,17 @@ expected: "host.example.com", }, { + name: "etc_hosts_loopback_ipv4_localhost_dot_localdomain", + root: map[string]any{ + "/etc/hosts": chezmoitest.JoinLines( + `127.0.0.1 localhost.localdomain`, + `127.0.0.2 host.example.com host`, + ), + }, + f: etcHostsFQDNHostname, + expected: "host.example.com", + }, + { name: "etc_hosts_loopback_ipv6", root: map[string]any{ "/etc/hosts": chezmoitest.JoinLines( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/chezmoi/sourcestate.go new/chezmoi-2.35.0/pkg/chezmoi/sourcestate.go --- old/chezmoi-2.34.3/pkg/chezmoi/sourcestate.go 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/chezmoi/sourcestate.go 2023-07-14 18:22:53.000000000 +0200 @@ -42,9 +42,10 @@ // ExternalTypes. const ( - ExternalTypeArchive ExternalType = "archive" - ExternalTypeFile ExternalType = "file" - ExternalTypeGitRepo ExternalType = "git-repo" + ExternalTypeArchive ExternalType = "archive" + ExternalTypeArchiveFile ExternalType = "archive-file" + ExternalTypeFile ExternalType = "file" + ExternalTypeGitRepo ExternalType = "git-repo" ) var ( @@ -79,9 +80,10 @@ Command string `json:"command" toml:"command" yaml:"command"` Args []string `json:"args" toml:"args" yaml:"args"` } `json:"filter" toml:"filter" yaml:"filter"` - Format ArchiveFormat `json:"format" toml:"format" yaml:"format"` - Include []string `json:"include" toml:"include" yaml:"include"` - Pull struct { + Format ArchiveFormat `json:"format" toml:"format" yaml:"format"` + Include []string `json:"include" toml:"include" yaml:"include"` + ArchivePath string `json:"path" toml:"path" yaml:"path"` + Pull struct { Args []string `json:"args" toml:"args" yaml:"args"` } `json:"pull" toml:"pull" yaml:"pull"` RefreshPeriod Duration `json:"refreshPeriod" toml:"refreshPeriod" yaml:"refreshPeriod"` @@ -748,7 +750,7 @@ // ExecuteTemplateData returns the result of executing template data. func (s *SourceState) ExecuteTemplateData(options ExecuteTemplateDataOptions) ([]byte, error) { templateOptions := options.TemplateOptions - templateOptions.Options = append([]string(nil), s.templateOptions...) + templateOptions.Options = slices.Clone(s.templateOptions) tmpl, err := ParseTemplate(options.Name, options.Data, s.templateFuncs, templateOptions) if err != nil { @@ -2149,6 +2151,14 @@ switch external.Type { case ExternalTypeArchive: return s.readExternalArchive(ctx, externalRelPath, parentSourceRelPath, external, options) + case ExternalTypeArchiveFile: + return s.readExternalArchiveFile( + ctx, + externalRelPath, + parentSourceRelPath, + external, + options, + ) case ExternalTypeFile: return s.readExternalFile(ctx, externalRelPath, parentSourceRelPath, external, options) case ExternalTypeGitRepo: @@ -2167,19 +2177,11 @@ external *External, options *ReadOptions, ) (map[RelPath][]SourceStateEntry, error) { - data, err := s.getExternalData(ctx, externalRelPath, external, options) + data, format, err := s.readExternalArchiveData(ctx, externalRelPath, external, options) if err != nil { return nil, err } - url, err := url.Parse(external.URL) - if err != nil { - return nil, fmt.Errorf("%s: %s: %w", externalRelPath, external.URL, err) - } - urlPath := url.Path - if external.Encrypted { - urlPath = strings.TrimSuffix(urlPath, s.encryption.EncryptedSuffix()) - } dirAttr := DirAttr{ TargetName: externalRelPath.Base(), Exact: external.Exact, @@ -2199,11 +2201,6 @@ externalRelPath: {sourceStateDir}, } - format := external.Format - if format == ArchiveFormatUnknown { - format = GuessArchiveFormat(urlPath, data) - } - patternSet := newPatternSet() for _, includePattern := range external.Include { if err := patternSet.add(includePattern, patternSetInclude); err != nil { @@ -2331,6 +2328,143 @@ return sourceStateEntries, nil } +// readExternalArchiveData reads an external archive's data and returns its data +// and format. +func (s *SourceState) readExternalArchiveData( + ctx context.Context, + externalRelPath RelPath, + external *External, + options *ReadOptions, +) ([]byte, ArchiveFormat, error) { + data, err := s.getExternalData(ctx, externalRelPath, external, options) + if err != nil { + return nil, ArchiveFormatUnknown, err + } + + url, err := url.Parse(external.URL) + if err != nil { + return nil, ArchiveFormatUnknown, fmt.Errorf( + "%s: %s: %w", + externalRelPath, + external.URL, + err, + ) + } + urlPath := url.Path + if external.Encrypted { + urlPath = strings.TrimSuffix(urlPath, s.encryption.EncryptedSuffix()) + } + + format := external.Format + if format == ArchiveFormatUnknown { + format = GuessArchiveFormat(urlPath, data) + } + + return data, format, nil +} + +// readExternalArchiveFile reads a file from an external archive and returns its +// SourceStateEntries. +func (s *SourceState) readExternalArchiveFile( + ctx context.Context, + externalRelPath RelPath, + parentSourceRelPath SourceRelPath, + external *External, + options *ReadOptions, +) (map[RelPath][]SourceStateEntry, error) { + if external.ArchivePath == "" { + return nil, fmt.Errorf("%s: missing path", externalRelPath) + } + + data, format, err := s.readExternalArchiveData(ctx, externalRelPath, external, options) + if err != nil { + return nil, err + } + + var sourceStateEntry SourceStateEntry + if err := WalkArchive(data, format, func(name string, fileInfo fs.FileInfo, r io.Reader, linkname string) error { + if external.StripComponents > 0 { + components := strings.Split(name, "/") + if len(components) <= external.StripComponents { + return nil + } + name = path.Join(components[external.StripComponents:]...) + } + switch { + case name == "": + return nil + case name != external.ArchivePath: + // If this entry is a directory and it cannot contain the file we + // are looking for then skip this directory. + if fileInfo.IsDir() && !strings.HasPrefix(external.ArchivePath, name) { + return fs.SkipDir + } + return nil + case fileInfo.Mode()&fs.ModeType == 0: + contents, err := io.ReadAll(r) + if err != nil { + return fmt.Errorf("%s: %w", name, err) + } + lazyContents := newLazyContents(contents) + fileAttr := FileAttr{ + TargetName: fileInfo.Name(), + Type: SourceFileTypeFile, + Empty: fileInfo.Size() == 0, + Executable: isExecutable(fileInfo), + Private: isPrivate(fileInfo), + ReadOnly: isReadOnly(fileInfo), + } + sourceRelPath := parentSourceRelPath.Join(NewSourceRelPath(fileAttr.SourceName(s.encryption.EncryptedSuffix()))) + targetStateEntry := &TargetStateFile{ + lazyContents: lazyContents, + empty: fileAttr.Empty, + perm: fileAttr.perm() &^ s.umask, + sourceAttr: SourceAttr{ + External: true, + }, + } + sourceStateEntry = &SourceStateFile{ + lazyContents: lazyContents, + Attr: fileAttr, + origin: external, + sourceRelPath: sourceRelPath, + targetStateEntry: targetStateEntry, + } + return Break + case fileInfo.Mode()&fs.ModeType == fs.ModeSymlink: + fileAttr := FileAttr{ + TargetName: fileInfo.Name(), + Type: SourceFileTypeSymlink, + } + sourceRelPath := parentSourceRelPath.Join(NewSourceRelPath(fileAttr.SourceName(s.encryption.EncryptedSuffix()))) + targetStateEntry := &TargetStateSymlink{ + lazyLinkname: newLazyLinkname(linkname), + sourceAttr: SourceAttr{ + External: true, + }, + } + sourceStateEntry = &SourceStateFile{ + Attr: fileAttr, + origin: external, + sourceRelPath: sourceRelPath, + targetStateEntry: targetStateEntry, + } + return Break + default: + return fmt.Errorf("%s: unsupported mode %o", name, fileInfo.Mode()&fs.ModeType) + } + }); err != nil { + return nil, err + } + if sourceStateEntry == nil { + return nil, fmt.Errorf("%s: path not found in %s", external.ArchivePath, external.URL) + } + + return map[RelPath][]SourceStateEntry{ + externalRelPath: {sourceStateEntry}, + }, nil +} + // ReadExternalDir returns all source state entries in an external_ dir. func (s *SourceState) readExternalDir( rootSourceAbsPath AbsPath, rootSourceRelPath SourceRelPath, rootTargetRelPath RelPath, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/config.go new/chezmoi-2.35.0/pkg/cmd/config.go --- old/chezmoi-2.34.3/pkg/cmd/config.go 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/cmd/config.go 2023-07-14 18:22:53.000000000 +0200 @@ -124,6 +124,7 @@ Dashlane dashlaneConfig `json:"dashlane" mapstructure:"dashlane" yaml:"dashlane"` Ejson ejsonConfig `json:"ejson" mapstructure:"ejson" yaml:"ejson"` Gopass gopassConfig `json:"gopass" mapstructure:"gopass" yaml:"gopass"` + HCPVaultSecrets hcpVaultSecretConfig `json:"hcpVaultSecrets" mapstructure:"hcpVaultSecrets" yaml:"hcpVaultSecrets"` Keepassxc keepassxcConfig `json:"keepassxc" mapstructure:"keepassxc" yaml:"keepassxc"` Keeper keeperConfig `json:"keeper" mapstructure:"keeper" yaml:"keeper"` Lastpass lastpassConfig `json:"lastpass" mapstructure:"lastpass" yaml:"lastpass"` @@ -402,6 +403,8 @@ "glob": c.globTemplateFunc, "gopass": c.gopassTemplateFunc, "gopassRaw": c.gopassRawTemplateFunc, + "hcpVaultSecret": c.hcpVaultSecretTemplateFunc, + "hcpVaultSecretJson": c.hcpVaultSecretJSONTemplateFunc, "hexDecode": c.hexDecodeTemplateFunc, "hexEncode": c.hexEncodeTemplateFunc, "include": c.includeTemplateFunc, @@ -2577,6 +2580,9 @@ Gopass: gopassConfig{ Command: "gopass", }, + HCPVaultSecrets: hcpVaultSecretConfig{ + Command: "vlt", + }, Keepassxc: keepassxcConfig{ Command: "keepassxc-cli", Prompt: true, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/doctorcmd.go new/chezmoi-2.35.0/pkg/cmd/doctorcmd.go --- old/chezmoi-2.34.3/pkg/cmd/doctorcmd.go 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/cmd/doctorcmd.go 2023-07-14 18:22:53.000000000 +0200 @@ -388,6 +388,15 @@ versionRx: regexp.MustCompile(`^Vault\s+v(\d+\.\d+\.\d+)`), }, &binaryCheck{ + name: "vlt-command", + binaryname: c.HCPVaultSecrets.Command, + ifNotSet: checkResultWarning, + ifNotExist: checkResultInfo, + versionArgs: []string{"version"}, + versionRx: regexp.MustCompile(`^(\d+\.\d+\.\d+)`), + minVersion: &vltMinVersion, + }, + &binaryCheck{ name: "secret-command", binaryname: c.Secret.Command, ifNotSet: checkResultInfo, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/hcpvaultsecretsttemplatefuncs.go new/chezmoi-2.35.0/pkg/cmd/hcpvaultsecretsttemplatefuncs.go --- old/chezmoi-2.34.3/pkg/cmd/hcpvaultsecretsttemplatefuncs.go 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/pkg/cmd/hcpvaultsecretsttemplatefuncs.go 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,111 @@ +package cmd + +import ( + "encoding/json" + "fmt" + "os" + "os/exec" + "strings" + + "github.com/coreos/go-semver/semver" + "golang.org/x/exp/slices" + + "github.com/twpayne/chezmoi/v2/pkg/chezmoilog" +) + +type hcpVaultSecretConfig struct { + Command string `json:"command" mapstructure:"command" yaml:"command"` + Args []string `json:"args" mapstructure:"args" yaml:"args"` + ApplicationName string `json:"applicationName" mapstructure:"applicationName" yaml:"applicationName"` + OrganizationID string `json:"organizationId" mapstructure:"organizationId" yaml:"organizationId"` + ProjectID string `json:"projectId" mapstructure:"projectId" yaml:"projectId"` + outputCache map[string][]byte +} + +var vltMinVersion = semver.Version{Major: 0, Minor: 2, Patch: 1} + +func (c *Config) hcpVaultSecretTemplateFunc(key string, additionalArgs ...string) string { + args, err := c.appendHCPVaultSecretsAdditionalArgs( + []string{"secrets", "get", "--plaintext"}, + additionalArgs, + ) + if err != nil { + panic(err) + } + output, err := c.vltOutput(append(args, key)) + if err != nil { + panic(err) + } + return string(output) +} + +func (c *Config) hcpVaultSecretJSONTemplateFunc(key string, additionalArgs ...string) any { + args, err := c.appendHCPVaultSecretsAdditionalArgs( + []string{"secrets", "get", "--format", "json"}, + additionalArgs, + ) + if err != nil { + panic(err) + } + data, err := c.vltOutput(append(args, key)) + if err != nil { + panic(err) + } + var value any + if err := json.Unmarshal(data, &value); err != nil { + panic(err) + } + return value +} + +func (c *Config) appendHCPVaultSecretsAdditionalArgs( + args, additionalArgs []string, +) ([]string, error) { + if len(additionalArgs) > 0 && additionalArgs[0] != "" { + args = append(args, "--app-name", additionalArgs[0]) + } else if c.HCPVaultSecrets.ApplicationName != "" { + args = append(args, "--app-name", c.HCPVaultSecrets.ApplicationName) + } + if len(additionalArgs) > 1 && additionalArgs[1] != "" { + args = append(args, "--project", additionalArgs[1]) + } else if c.HCPVaultSecrets.ProjectID != "" { + args = append(args, "--project", c.HCPVaultSecrets.ProjectID) + } + if len(additionalArgs) > 2 && additionalArgs[2] != "" { + args = append(args, "--organization", additionalArgs[2]) + } else if c.HCPVaultSecrets.OrganizationID != "" { + args = append(args, "--organization", c.HCPVaultSecrets.OrganizationID) + } + if len(additionalArgs) > 3 { + // Add one to the number of received arguments as the hcpVaultSecret + // and hcpVaultSecretJson template functions report this error and take + // the key as the first argument. + return nil, fmt.Errorf("expected 1 to 4 arguments, got %d", len(additionalArgs)+1) + } + return args, nil +} + +func (c *Config) vltOutput(args []string) ([]byte, error) { + args = append(slices.Clone(c.HCPVaultSecrets.Args), args...) + key := strings.Join(args, "\x00") + if data, ok := c.HCPVaultSecrets.outputCache[key]; ok { + return data, nil + } + + cmd := exec.Command(c.HCPVaultSecrets.Command, args...) //nolint:gosec + // Always run the vlt command in the destination path because vlt uses + // relative paths to find its .vlt.json config file. + cmd.Dir = c.DestDirAbsPath.String() + cmd.Stdin = os.Stdin + cmd.Stderr = os.Stderr + output, err := chezmoilog.LogCmdOutput(cmd) + if err != nil { + return nil, newCmdOutputError(cmd, output, err) + } + + if c.HCPVaultSecrets.outputCache == nil { + c.HCPVaultSecrets.outputCache = make(map[string][]byte) + } + c.HCPVaultSecrets.outputCache[key] = output + return output, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/doctor_unix.txtar new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/doctor_unix.txtar --- old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/doctor_unix.txtar 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/doctor_unix.txtar 2023-07-14 18:22:53.000000000 +0200 @@ -18,6 +18,7 @@ chmod 755 bin/shell chmod 755 bin/vault chmod 755 bin/vimdiff +chmod 755 bin/vlt mkhomedir mksourcedir @@ -54,8 +55,9 @@ stdout '^ok\s+passhole-command\s+' stdout '^ok\s+lastpass-command\s+' stdout '^ok\s+pass-command\s+' -stdout '^ok\s+vault-command\s+' stdout '^ok\s+rbw-command\s+' +stdout '^ok\s+vault-command\s+' +stdout '^ok\s+vlt-command\s+' stdout '^ok\s+secret-command\s+' chhome home2/user @@ -171,6 +173,10 @@ echo "Vault v1.5.5 ('f5d1ddb3750e7c28e25036e1ef26a4c02379fc01+CHANGES')" -- bin/vimdiff -- #!/bin/sh +-- bin/vlt -- +#!/bin/sh + +echo "0.2.1, git sha (8d9af42c8b98c9527741a239b23a3e384812f514), go1.20.4 arm64" -- home/user/.config/chezmoi/chezmoi.toml -- [keepassxc] command = "keepassxc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/external.txtar new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/external.txtar --- old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/external.txtar 2023-07-03 09:12:43.000000000 +0200 +++ new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/external.txtar 2023-07-14 18:22:53.000000000 +0200 @@ -97,6 +97,12 @@ stderr 'MD5 mismatch' stderr 'SHA256 mismatch' +chhome home12/user + +# test that chezmoi reads archive-file externals +exec chezmoi apply +cmp $HOME/.file golden/dir/file + -- archive/dir/file -- # contents of dir/file -- golden/.file -- @@ -130,6 +136,12 @@ url = "{{ env "HTTPD_URL" }}/.corrupt-file" checksum.md5 = "49fe9018f97349cdd0a0ac7b7f668b05" checksum.sha256 = "634a4dd193c7b3b926d2e08026aa81a416fd41cec52854863b974af422495663" +-- home12/user/.local/share/chezmoi/.chezmoiexternal.toml -- +[".file"] + type = "archive-file" + url = "{{ env "HTTPD_URL" }}/archive.tar.gz" + path = "dir/file" + stripComponents = 1 -- home2/user/.local/share/chezmoi/.chezmoiexternal.toml -- [".file"] type = "file" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/hcpvaultsecrets.txtar new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/hcpvaultsecrets.txtar --- old/chezmoi-2.34.3/pkg/cmd/testdata/scripts/hcpvaultsecrets.txtar 1970-01-01 01:00:00.000000000 +0100 +++ new/chezmoi-2.35.0/pkg/cmd/testdata/scripts/hcpvaultsecrets.txtar 2023-07-14 18:22:53.000000000 +0200 @@ -0,0 +1,70 @@ +[windows] skip 'UNIX only' +[!windows] chmod 755 bin/vlt + +# test hcpVaultSecret template function +exec chezmoi execute-template '{{ hcpVaultSecret "password" }}' +stdout ^correcthorsebatterystaple$ + +# test hcpVaultSecret template function with app name, project, and organization arguments +exec chezmoi execute-template '{{ hcpVaultSecret "password" "application-name" "project-id" "organization-id" }}' +stdout ^correcthorsebatterystaple$ + +# test hcpVaultSecret template function with empty app name, project, and organization arguments +exec chezmoi execute-template '{{ hcpVaultSecret "password" "" "" "" }}' +stdout ^correcthorsebatterystaple$ + +# test hcpVaultSecretJson template function +exec chezmoi execute-template '{{ (hcpVaultSecretJson "password").created_by.email }}' +stdout ^user@example\.com$ + +chhome home2/user + +# test hcpVaultSecret template function with default app name, project, and organization arguments +exec chezmoi execute-template '{{ hcpVaultSecret "password" }}' +stdout ^default-password$ + +# test hcpVaultSecretJson template function with default project and organization arguments +exec chezmoi execute-template '{{ hcpVaultSecret "password" "other-app-name" }}' +stdout ^other-password$ + +-- bin/vlt -- +#!/bin/sh + +case "$*" in +"secrets get --format json password") + cat <<EOF +{ + "created_at": "2023-06-09T13:14:28.140Z", + "created_by": { + "email": "u...@example.com", + "name": "example", + "type": "TYPE_USER" + }, + "latest_version": "2", + "name": "password" +} +EOF + ;; +"secrets get --plaintext password") + echo correcthorsebatterystaple + ;; +"secrets get --plaintext --app-name application-name --project project-id --organization organization-id password") + echo correcthorsebatterystaple + ;; +"secrets get --plaintext --app-name default-app-name --project 5907a2fa-d26a-462a-8705-74dfe967e87d --organization bf479eab-a292-4b46-92df-e22f5c47eadc password") + echo default-password + ;; +"secrets get --plaintext --app-name other-app-name --project 5907a2fa-d26a-462a-8705-74dfe967e87d --organization bf479eab-a292-4b46-92df-e22f5c47eadc password") + echo other-password + ;; +*) + echo "$*: unknown command" + exit 1 + ;; +esac +-- home/user/.keep -- +-- home2/user/.config/chezmoi/chezmoi.toml -- +[hcpVaultSecrets] + applicationName = "default-app-name" + projectId = "5907a2fa-d26a-462a-8705-74dfe967e87d" + organizationId = "bf479eab-a292-4b46-92df-e22f5c47eadc" ++++++ chezmoi.obsinfo ++++++ --- /var/tmp/diff_new_pack.d1SIHW/_old 2023-07-18 22:07:55.246920710 +0200 +++ /var/tmp/diff_new_pack.d1SIHW/_new 2023-07-18 22:07:55.250920732 +0200 @@ -1,5 +1,5 @@ name: chezmoi -version: 2.34.3 -mtime: 1688368363 -commit: 439ccf8f4f092a3b1f909e430775db933dc7c740 +version: 2.35.0 +mtime: 1689351773 +commit: a642b704f0bfcff6697b30a6b3ec7a213a9ca0e8 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/chezmoi/vendor.tar.gz /work/SRC/openSUSE:Factory/.chezmoi.new.3193/vendor.tar.gz differ: char 5, line 1