From bd646a8632fe4bb2d480ba3a9bf63e157189e0ff Mon Sep 17 00:00:00 2001 From: Christoph Witzko Date: Sat, 30 Dec 2023 20:39:19 +0100 Subject: [PATCH] feat: update goreleaser --- go.mod | 207 +++---- go.sum | 506 ++++++++--------- goreleaser/.github/workflows/build.yml | 10 +- goreleaser/.github/workflows/codeql.yml | 4 +- goreleaser/.github/workflows/depsreview.yaml | 2 +- goreleaser/.github/workflows/docs.yml | 4 +- goreleaser/.github/workflows/fig.yml | 4 +- .../.github/workflows/generate-releases.yml | 28 - goreleaser/.github/workflows/generate.yml | 24 +- goreleaser/.github/workflows/gitleaks.yml | 2 +- goreleaser/.github/workflows/grype.yml | 2 +- goreleaser/.github/workflows/lint.yml | 9 +- goreleaser/.github/workflows/milestone.yml | 2 +- goreleaser/.github/workflows/nightly-oss.yml | 10 +- goreleaser/.github/workflows/release.yml | 26 +- goreleaser/.golangci.yaml | 5 + goreleaser/.goreleaser.yaml | 6 +- goreleaser/CONTRIBUTING.md | 1 + goreleaser/Dockerfile | 2 +- goreleaser/SECURITY.md | 3 +- goreleaser/Taskfile.yml | 9 +- goreleaser/USERS.md | 7 +- goreleaser/cmd/build.go | 31 +- goreleaser/cmd/build_test.go | 71 --- goreleaser/cmd/release_test.go | 2 +- goreleaser/go.mod | 232 ++++---- goreleaser/go.sum | 529 ++++++++---------- goreleaser/int/artifact/artifact_test.go | 8 +- goreleaser/int/builders/golang/build.go | 4 + goreleaser/int/builders/golang/build_test.go | 25 +- goreleaser/int/client/git.go | 29 +- goreleaser/int/client/git_test.go | 18 +- goreleaser/int/client/gitea_test.go | 6 +- goreleaser/int/client/github.go | 31 +- goreleaser/int/client/github_test.go | 66 ++- goreleaser/int/commitauthor/author_test.go | 20 +- goreleaser/int/gio/copy_test.go | 2 +- .../int/middleware/errhandler/error_test.go | 3 +- goreleaser/int/pipe/announce/announce_test.go | 3 +- goreleaser/int/pipe/aur/aur.go | 23 +- goreleaser/int/pipe/aur/aur_test.go | 83 ++- .../TestFullPipe/custom-dir.pkgbuild.golden | 18 + .../TestFullPipe/custom-dir.srcinfo.golden | 13 + ...tRunPipeWrappedInDirectory.pkgbuild.golden | 18 + ...stRunPipeWrappedInDirectory.srcinfo.golden | 11 + goreleaser/int/pipe/before/before.go | 20 +- goreleaser/int/pipe/before/before_test.go | 11 +- goreleaser/int/pipe/blob/blob_test.go | 2 +- goreleaser/int/pipe/brew/brew.go | 18 +- goreleaser/int/pipe/brew/brew_test.go | 25 +- goreleaser/int/pipe/brew/template.go | 1 + .../TestFullPipe/custom_block.rb.golden | 2 + .../custom_download_strategy.rb.golden | 2 + .../TestFullPipe/custom_require.rb.golden | 2 + .../testdata/TestFullPipe/default.rb.golden | 2 + .../TestFullPipe/default_gitlab.rb.golden | 2 + .../TestFullPipe/git_remote.rb.golden | 2 + .../testdata/TestFullPipe/open_pr.rb.golden | 2 + .../valid_repository_templates.rb.golden | 2 + goreleaser/int/pipe/build/build.go | 9 +- goreleaser/int/pipe/build/build_test.go | 33 +- goreleaser/int/pipe/build/filter.go | 28 + goreleaser/int/pipe/build/filter_test.go | 43 ++ .../int/pipe/changelog/changelog_test.go | 16 +- goreleaser/int/pipe/checksums/checksums.go | 12 +- .../int/pipe/checksums/checksums_test.go | 53 +- .../int/pipe/checksums/testdata/order/a.txt | 1 + .../int/pipe/checksums/testdata/order/b.txt | 1 + .../int/pipe/checksums/testdata/order/c.txt | 1 + .../int/pipe/checksums/testdata/order/d.txt | 1 + goreleaser/int/pipe/chocolatey/chocolatey.go | 4 +- .../int/pipe/chocolatey/chocolatey_test.go | 6 +- goreleaser/int/pipe/discord/discord_test.go | 4 +- goreleaser/int/pipe/docker/docker.go | 7 + goreleaser/int/pipe/docker/docker_test.go | 2 +- goreleaser/int/pipe/git/git.go | 12 +- goreleaser/int/pipe/gomod/gomod.go | 5 +- goreleaser/int/pipe/gomod/gomod_proxy.go | 50 ++ goreleaser/int/pipe/gomod/gomod_proxy_test.go | 86 ++- goreleaser/int/pipe/gomod/gomod_test.go | 29 + goreleaser/int/pipe/ko/ko.go | 23 +- goreleaser/int/pipe/ko/ko_test.go | 57 +- goreleaser/int/pipe/krew/krew_test.go | 3 +- goreleaser/int/pipe/linkedin/client.go | 82 ++- goreleaser/int/pipe/linkedin/client_test.go | 37 +- goreleaser/int/pipe/linkedin/linkedin_test.go | 4 +- goreleaser/int/pipe/mastodon/mastodon_test.go | 4 +- .../int/pipe/mattermost/mattermost_test.go | 4 +- goreleaser/int/pipe/nfpm/nfpm_test.go | 12 +- goreleaser/int/pipe/nix/licenses.go | 234 ++++++++ goreleaser/int/pipe/nix/nix.go | 17 +- goreleaser/int/pipe/nix/nix_test.go | 46 +- .../TestRunPipe/deps_build.nix.golden | 2 + .../TestRunPipe/deps_publish.nix.golden | 2 + .../extra-install_build.nix.golden | 2 + .../extra-install_publish.nix.golden | 2 + .../TestRunPipe/minimal_build.nix.golden | 2 + .../TestRunPipe/minimal_publish.nix.golden | 2 + .../TestRunPipe/open-pr_build.nix.golden | 2 + .../TestRunPipe/open-pr_publish.nix.golden | 2 + .../TestRunPipe/partial_build.nix.golden | 2 + .../TestRunPipe/partial_publish.nix.golden | 2 + .../skip-upload-auto_build.nix.golden | 2 + .../TestRunPipe/skip-upload_build.nix.golden | 2 + .../unibin-replaces_build.nix.golden | 2 + .../unibin-replaces_publish.nix.golden | 2 + .../wrapped-in-dir_build.nix.golden | 2 + .../wrapped-in-dir_publish.nix.golden | 2 + .../TestRunPipe/zip-and-tar_build.nix.golden | 58 ++ .../zip-and-tar_publish.nix.golden | 58 ++ .../zip-with-dependencies_build.nix.golden | 2 + .../zip-with-dependencies_publish.nix.golden | 2 + .../testdata/TestRunPipe/zip_build.nix.golden | 2 + .../TestRunPipe/zip_publish.nix.golden | 2 + goreleaser/int/pipe/nix/tmpl.nix | 2 + .../opencollective/opencollective_test.go | 6 +- goreleaser/int/pipe/partial/partial.go | 25 + goreleaser/int/pipe/partial/partial_test.go | 57 ++ goreleaser/int/pipe/project/project.go | 13 + goreleaser/int/pipe/project/project_test.go | 17 + goreleaser/int/pipe/publish/publish_test.go | 2 +- goreleaser/int/pipe/reddit/reddit_test.go | 4 +- goreleaser/int/pipe/release/release_test.go | 6 +- goreleaser/int/pipe/release/scm.go | 48 +- goreleaser/int/pipe/sbom/sbom.go | 9 +- goreleaser/int/pipe/sbom/sbom_test.go | 27 +- goreleaser/int/pipe/scoop/scoop.go | 3 +- goreleaser/int/pipe/scoop/scoop_test.go | 15 +- goreleaser/int/pipe/sign/sign_test.go | 10 +- goreleaser/int/pipe/slack/slack_test.go | 4 +- goreleaser/int/pipe/snapcraft/snapcraft.go | 5 +- .../int/pipe/snapcraft/snapcraft_test.go | 10 +- goreleaser/int/pipe/teams/teams_test.go | 4 +- goreleaser/int/pipe/telegram/telegram_test.go | 10 +- goreleaser/int/pipe/twitter/twitter_test.go | 4 +- .../universalbinary/universalbinary_test.go | 2 +- goreleaser/int/pipe/upx/upx_test.go | 8 +- goreleaser/int/pipe/webhook/webhook_test.go | 2 +- .../TestFormatBinary.installer.yaml.golden | 24 + .../TestFormatBinary.locale.en-US.yaml.golden | 12 + .../TestFormatBinary.yaml.golden | 7 + goreleaser/int/pipe/winget/winget.go | 64 ++- goreleaser/int/pipe/winget/winget_test.go | 100 ++++ goreleaser/int/pipeline/pipeline.go | 5 + goreleaser/int/semerrgroup/sem_test.go | 4 +- goreleaser/int/shell/shell.go | 15 +- goreleaser/int/shell/shell_test.go | 4 +- goreleaser/int/skips/skips.go | 12 + goreleaser/int/skips/skips_test.go | 2 +- goreleaser/int/static/config.yaml | 4 +- goreleaser/int/testctx/testctx.go | 4 + goreleaser/int/testlib/git.go | 6 +- goreleaser/int/testlib/skip.go | 3 +- goreleaser/int/tmpl/tmpl.go | 6 +- goreleaser/int/tmpl/tmpl_test.go | 17 + goreleaser/pkg/archive/gzip/gzip_test.go | 4 +- goreleaser/pkg/archive/tar/tar_test.go | 4 +- goreleaser/pkg/archive/targz/targz_test.go | 4 +- goreleaser/pkg/archive/tarxz/tarxz_test.go | 4 +- goreleaser/pkg/archive/zip/zip_test.go | 6 +- goreleaser/pkg/config/config.go | 39 +- goreleaser/pkg/config/config_test.go | 21 + goreleaser/pkg/context/context.go | 2 + goreleaser/scripts/gen-nix-licenses.sh | 17 + goreleaser/www/docs/blog/.authors.yml | 9 + .../blog/posts/2022-02-12-goreleaser-v1.5.md | 2 +- .../blog/posts/2023-09-27-release-cadence.md | 143 +++++ ...0-08-slsa-generation-for-your-artifacts.md | 234 ++++++++ .../blog/posts/2023-11-06-goreleaser-v1.22.md | 55 ++ goreleaser/www/docs/ci/actions.md | 2 +- goreleaser/www/docs/cmd/goreleaser_release.md | 2 +- goreleaser/www/docs/contributing.md | 1 + goreleaser/www/docs/customization/aur.md | 12 + goreleaser/www/docs/customization/blob.md | 15 +- goreleaser/www/docs/customization/builds.md | 5 +- .../www/docs/customization/changelog.md | 11 +- .../www/docs/customization/chocolatey.md | 10 +- goreleaser/www/docs/customization/homebrew.md | 5 + goreleaser/www/docs/customization/index.md | 5 +- goreleaser/www/docs/customization/ko.md | 1 + goreleaser/www/docs/customization/nfpm.md | 23 + .../www/docs/customization/reportsizes.md | 16 +- goreleaser/www/docs/customization/sbom.md | 4 +- goreleaser/www/docs/customization/sign.md | 91 +-- .../www/docs/customization/snapcraft.md | 6 +- .../www/docs/customization/templates.md | 2 +- .../docs/customization/verifiable_builds.md | 7 + goreleaser/www/docs/errors/docker-build.md | 12 +- goreleaser/www/docs/how-it-works.md | 4 +- goreleaser/www/docs/includes/repository.md | 2 +- goreleaser/www/docs/install.md | 5 + goreleaser/www/docs/links.md | 4 +- goreleaser/www/docs/quick-start.md | 4 +- goreleaser/www/docs/security.md | 3 +- goreleaser/www/docs/static/latest | 2 +- goreleaser/www/docs/static/latest-pro | 2 +- goreleaser/www/docs/static/releases-pro.json | 9 + goreleaser/www/docs/static/releases.json | 13 +- goreleaser/www/docs/static/run | 11 +- goreleaser/www/docs/static/schema-pro.json | 37 +- goreleaser/www/docs/static/schema.json | 36 +- .../static/slsa-provenance-generation.png | Bin 0 -> 99519 bytes goreleaser/www/docs/users.md | 7 +- goreleaser/www/mkdocs.yml | 167 +++--- scripts/fork-goreleaser.sh | 2 +- 205 files changed, 3508 insertions(+), 1450 deletions(-) delete mode 100644 goreleaser/.github/workflows/generate-releases.yml create mode 100644 goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.pkgbuild.golden create mode 100644 goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.srcinfo.golden create mode 100644 goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.pkgbuild.golden create mode 100644 goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.srcinfo.golden create mode 100644 goreleaser/int/pipe/build/filter.go create mode 100644 goreleaser/int/pipe/build/filter_test.go create mode 100644 goreleaser/int/pipe/checksums/testdata/order/a.txt create mode 100644 goreleaser/int/pipe/checksums/testdata/order/b.txt create mode 100644 goreleaser/int/pipe/checksums/testdata/order/c.txt create mode 100644 goreleaser/int/pipe/checksums/testdata/order/d.txt create mode 100644 goreleaser/int/pipe/nix/licenses.go create mode 100644 goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_build.nix.golden create mode 100644 goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_publish.nix.golden create mode 100644 goreleaser/int/pipe/partial/partial.go create mode 100644 goreleaser/int/pipe/partial/partial_test.go create mode 100644 goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.installer.yaml.golden create mode 100644 goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.locale.en-US.yaml.golden create mode 100644 goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.yaml.golden create mode 100755 goreleaser/scripts/gen-nix-licenses.sh create mode 100644 goreleaser/www/docs/blog/posts/2023-09-27-release-cadence.md create mode 100644 goreleaser/www/docs/blog/posts/2023-10-08-slsa-generation-for-your-artifacts.md create mode 100644 goreleaser/www/docs/blog/posts/2023-11-06-goreleaser-v1.22.md create mode 100644 goreleaser/www/docs/static/slsa-provenance-generation.png diff --git a/go.mod b/go.mod index 220855c..4d08f9e 100644 --- a/go.mod +++ b/go.mod @@ -3,28 +3,30 @@ module github.com/go-semantic-release/hooks-goreleaser go 1.21 require ( - github.com/caarlos0/log v0.4.2 + github.com/caarlos0/log v0.4.4 github.com/go-semantic-release/semantic-release/v2 v2.28.0 - github.com/goreleaser/goreleaser v1.21.2 + github.com/goreleaser/goreleaser v1.23.0 ) +replace github.com/goreleaser/goreleaser v1.23.0 => ./goreleaser + require ( - cloud.google.com/go v0.110.7 // indirect - cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.1 // indirect - cloud.google.com/go/kms v1.15.0 // indirect - cloud.google.com/go/storage v1.31.0 // indirect - code.gitea.io/sdk/gitea v0.16.0 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/kms v1.15.5 // indirect + cloud.google.com/go/storage v1.35.1 // indirect + code.gitea.io/sdk/gitea v0.17.0 // indirect dario.cat/mergo v1.0.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect @@ -34,41 +36,41 @@ require ( github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect github.com/BurntSushi/toml v1.2.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/alessio/shellescape v1.4.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/atc0005/go-teams-notify/v2 v2.8.0 // indirect - github.com/aws/aws-sdk-go v1.44.314 // indirect - github.com/aws/aws-sdk-go-v2 v1.20.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.32 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.31 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.13.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.21.1 // indirect - github.com/aws/smithy-go v1.14.0 // indirect - github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04 // indirect + github.com/aws/aws-sdk-go v1.48.3 // indirect + github.com/aws/aws-sdk-go-v2 v1.23.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.25.5 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.26.3 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.17.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 // indirect + github.com/aws/smithy-go v1.17.0 // indirect + github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb // indirect @@ -77,88 +79,89 @@ require ( github.com/caarlos0/go-reddit/v3 v3.0.1 // indirect github.com/caarlos0/go-shellwords v1.0.12 // indirect github.com/cavaliergopher/cpio v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.0 // indirect - github.com/charmbracelet/lipgloss v0.8.0 // indirect - github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/charmbracelet/lipgloss v0.9.1 // indirect + github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d // indirect + github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 // indirect + github.com/cloudflare/circl v1.3.5 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb // indirect github.com/dghubble/oauth1 v0.7.2 // indirect github.com/dghubble/sling v1.4.0 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect - github.com/disgoorg/disgo v0.16.9 // indirect + github.com/disgoorg/disgo v0.17.0 // indirect github.com/disgoorg/json v1.1.0 // indirect - github.com/disgoorg/log v1.2.1 // indirect github.com/disgoorg/snowflake/v2 v2.0.1 // indirect - github.com/docker/cli v24.0.0+incompatible // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.2+incompatible // indirect - github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/docker/cli v24.0.7+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/elliotchance/orderedmap/v2 v2.2.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect github.com/fatih/color v1.15.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-git/go-git/v5 v5.7.0 // indirect github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/errors v0.20.3 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/errors v0.20.4 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/loads v0.21.2 // indirect github.com/go-openapi/runtime v0.26.0 // indirect github.com/go-openapi/spec v0.20.9 // indirect github.com/go-openapi/strfmt v0.21.7 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/go-openapi/validate v0.22.1 // indirect github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/go-cmp v0.5.9 // indirect - github.com/google/go-containerregistry v0.16.1 // indirect - github.com/google/go-github/v55 v55.0.0 // indirect + github.com/google/go-containerregistry v0.17.0 // indirect + github.com/google/go-github/v57 v57.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/ko v0.14.1 // indirect + github.com/google/ko v0.15.1 // indirect github.com/google/rpmpack v0.5.0 // indirect - github.com/google/s2a-go v0.1.4 // indirect + github.com/google/s2a-go v0.1.7 // indirect github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.5.0 // indirect github.com/google/wire v0.5.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/goreleaser/chglog v0.5.0 // indirect github.com/goreleaser/fileglob v1.3.0 // indirect - github.com/goreleaser/nfpm/v2 v2.33.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/goreleaser/nfpm/v2 v2.35.1 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.4 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/huandu/xstrings v1.3.3 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/invopop/jsonschema v0.9.0 // indirect + github.com/invopop/jsonschema v0.12.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.17.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf // indirect + github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -176,70 +179,70 @@ require ( github.com/oklog/run v1.1.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc3 // indirect + github.com/opencontainers/image-spec v1.1.0-rc5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect + github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b // indirect + github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/shopspring/decimal v1.2.0 // indirect - github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a // indirect - github.com/sigstore/rekor v1.2.0 // indirect - github.com/sigstore/sigstore v1.6.4 // indirect - github.com/sirupsen/logrus v1.9.1 // indirect + github.com/sigstore/cosign/v2 v2.2.1 // indirect + github.com/sigstore/rekor v1.3.3 // indirect + github.com/sigstore/sigstore v1.7.5 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.1.1 // indirect github.com/slack-go/slack v0.12.3 // indirect - github.com/spf13/afero v1.9.5 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/cobra v1.7.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.16.0 // indirect + github.com/spf13/viper v1.17.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/technoweenie/multipartstreamer v1.0.1 // indirect - github.com/theupdateframework/go-tuf v0.5.2 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/vbatts/tar-split v0.11.3 // indirect + github.com/vbatts/tar-split v0.11.5 // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect - github.com/xanzy/go-gitlab v0.91.1 // indirect + github.com/xanzy/go-gitlab v0.95.2 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect gitlab.com/digitalxero/go-conventional-commit v1.0.7 // indirect - go.mongodb.org/mongo-driver v1.11.3 // indirect + go.mongodb.org/mongo-driver v1.12.1 // indirect go.opencensus.io v0.24.0 // indirect - gocloud.dev v0.34.0 // indirect - golang.org/x/crypto v0.13.0 // indirect - golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.12.0 // indirect - golang.org/x/text v0.13.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.13.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.134.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + gocloud.dev v0.35.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.4.0 // indirect + golang.org/x/tools v0.16.1 // indirect + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + google.golang.org/api v0.151.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 // indirect - google.golang.org/grpc v1.58.0 // indirect + google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/go-jose/go-jose.v2 v2.6.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/mail.v2 v2.3.1 // indirect - gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/kind v0.20.0 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) - -replace github.com/goreleaser/goreleaser v1.21.2 => ./goreleaser diff --git a/go.sum b/go.sum index 8d697f8..5e37081 100644 --- a/go.sum +++ b/go.sum @@ -17,24 +17,24 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= -cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= -cloud.google.com/go/kms v1.15.0 h1:xYl5WEaSekKYN5gGRyhjvZKM22GVBBCzegGNVPy+aIs= -cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -45,10 +45,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= -cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= -code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= -code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +code.gitea.io/sdk/gitea v0.17.0 h1:8JPBss4+Jf7AE1YcfyiGrngTXE8dFSG3si/bypsTH34= +code.gitea.io/sdk/gitea v0.17.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -56,20 +56,20 @@ github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0/go.mod h1:7QJP7dr2wznCMeqIrhMgWGf7XpAQnVrJqDm9nvV3Cu4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -97,8 +97,8 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= @@ -118,8 +118,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c h1:kMFnB0vCcX7IL/m9Y5LO+KQYv+t1CQOiFe6+SV2J7bE= +github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= github.com/ProtonMail/gopenpgp/v2 v2.7.1 h1:Awsg7MPc2gD3I7IFac2qE3Gdls0lZW8SzrFZ3k1oz0s= @@ -132,7 +132,6 @@ github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVK 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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 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/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= @@ -140,69 +139,58 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/atc0005/go-teams-notify/v2 v2.8.0 h1:971J5qivrzBbYMDAdmW7v9s7W2u2jiIRVcY+LaIJqww= github.com/atc0005/go-teams-notify/v2 v2.8.0/go.mod h1:SIeE1UfCcVRYMqP5b+r1ZteHyA/2UAjzWF5COnZ8q0w= -github.com/aws/aws-sdk-go v1.44.314 h1:d/5Jyk/Fb+PBd/4nzQg0JuC2W4A0knrDIzBgK/ggAow= -github.com/aws/aws-sdk-go v1.44.314/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v1.7.1/go.mod h1:L5LuPC1ZgDr2xQS7AmIec/Jlc7O/Y1u2KxJyNVab250= -github.com/aws/aws-sdk-go-v2 v1.16.4/go.mod h1:ytwTPBG6fXTZLxxeeCCWj2/EMYp/xDUgX+OET6TLNNU= -github.com/aws/aws-sdk-go-v2 v1.20.0 h1:INUDpYLt4oiPOJl0XwZDK2OVAVf0Rzo+MGVTv9f+gy8= -github.com/aws/aws-sdk-go-v2 v1.20.0/go.mod h1:uWOr0m0jDsiWw8nnXiqZ+YG6LdvAlGYDLLf2NmHZoy4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11 h1:/MS8AzqYNAhhRNalOmxUvYs8VEbNGifTnzhPFdcRQkQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11/go.mod h1:va22++AdXht4ccO3kH2SHkHHYvZ2G9Utz+CXKmm2CaU= -github.com/aws/aws-sdk-go-v2/config v1.5.0/go.mod h1:RWlPOAW3E3tbtNAqTwvSW54Of/yP3oiZXMI0xfUdjyA= -github.com/aws/aws-sdk-go-v2/config v1.18.32 h1:tqEOvkbTxwEV7hToRcJ1xZRjcATqwDVsWbAscgRKyNI= -github.com/aws/aws-sdk-go-v2/config v1.18.32/go.mod h1:U3ZF0fQRRA4gnbn9GGvOWLoT2EzzZfAWeKwnVrm1rDc= -github.com/aws/aws-sdk-go-v2/credentials v1.3.1/go.mod h1:r0n73xwsIVagq8RsxmZbGSRQFj9As3je72C2WzUIToc= -github.com/aws/aws-sdk-go-v2/credentials v1.13.31 h1:vJyON3lG7R8VOErpJJBclBADiWTwzcwdkQpTKx8D2sk= -github.com/aws/aws-sdk-go-v2/credentials v1.13.31/go.mod h1:T4sESjBtY2lNxLgkIASmeP57b5j7hTQqCbqG0tWnxC4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0/go.mod h1:2LAuqPx1I6jNfaGDucWfA2zqQCYCOMCDHiCOciALyNw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7 h1:X3H6+SU21x+76LRglk21dFRgMTJMa5QcpW+SqUf5BBg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7/go.mod h1:3we0V09SwcJBzNlnyovrR2wWJhWmVdqAsmVs4uronv8= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76 h1:DJ1kHj0GI9BbX+XhF0kHxlzOVjcncmDUXmCvXdbfdAE= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76/go.mod h1:/AZCdswMSgwpB2yMSFfY5H4pVeBLnCuPehdmO/r3xSM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11/go.mod h1:tmUB6jakq5DFNcXsXOA/ZQ7/C8VnSKYkx58OI7Fh79g= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37 h1:zr/gxAZkMcvP71ZhQOcvdm8ReLjFgIXnIn0fw5AM7mo= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37/go.mod h1:Pdn4j43v49Kk6+82spO3Tu5gSeQXRsxo56ePPQAvFiA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5/go.mod h1:fV1AaS2gFc1tM0RCb015FJ0pvWVUfJZANzjwoO4YakM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31 h1:0HCMIkAkVY9KMgueD8tf4bRTUanzEYvhw7KkPXIMpO0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31/go.mod h1:fTJDMe8LOFYtqiFFFeHA+SVMAwqLhoq0kcInYoLa9Js= -github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1/go.mod h1:Zy8smImhTdOETZqfyn01iNOe0CNggVbPjCajyaz6Gvg= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38 h1:+i1DOFrW3YZ3apE45tCal9+aDKK6kNEbW6Ib7e1nFxE= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38/go.mod h1:1/jLp0OgOaWIetycOmycW+vYTYgTZFPttJQRgsI1PoU= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0 h1:U5yySdwt2HPo/pnQec04DImLzWORbeWML1fJiLkKruI= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0/go.mod h1:EhC/83j8/hL/UB1WmExo3gkElaja/KlmZM/gl1rTfjM= -github.com/aws/aws-sdk-go-v2/service/ecr v1.4.1/go.mod h1:FglZcyeiBqcbvyinl+n14aT/EWC7S1MIH+Gan2iizt0= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5 h1:W9vzPbvX7rOa/FacbQIDfnNrwxHkn5O+DdfmiIS4cHc= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5/go.mod h1:vk2+DbeZQFXznxJZSMnYrfnCHYxg4oT4Mdh59wSCkw4= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.4.1/go.mod h1:eD5Eo4drVP2FLTw0G+SMIPWNWvQRGGTtIZR2XeAagoA= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5 h1:Y8dpvUxU4JecYktR5oNFEW+HmUWlA1Oh7mboTVyQWLg= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5/go.mod h1:gW979HGZOrhGvwjAS6VRgav6M9AYH9Kbey6y3GfF/EA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12 h1:uAiiHnWihGP2rVp64fHwzLDrswGjEjsPszwRYMiYQPU= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12/go.mod h1:fUTHpOXqRQpXvEpDPSa3zxCc2fnpW6YnBoba+eQr+Bg= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32 h1:kvN1jPHr9UffqqG3bSgZ8tx4+1zKVHz/Ktw/BwW6hX8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32/go.mod h1:QmMEM7es84EUkbYWcpnkx8i5EW2uERPfrTFeOch128Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1/go.mod h1:zceowr5Z1Nh2WVP8bf/3ikB41IZW59E4yIYbg+pC6mw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31 h1:auGDJ0aLZahF5SPvkJ6WcUuX7iQ7kyl2MamV7Tm8QBk= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31/go.mod h1:3+lloe3sZuBQw1aBc5MyndvodzQlyqCZ7x1QPDHaWP4= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0 h1:Wgjft9X4W5pMeuqgPCHIQtbZ87wsgom7S5F8obreg+c= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0/go.mod h1:FWNzS4+zcWAP05IF7TDYTY1ysZAzIvogxWaDT9p8fsA= -github.com/aws/aws-sdk-go-v2/service/kms v1.24.1 h1:zDmx9yZjSYDaeakQVN16qfsLxhBeAxgclioB0+rOCDM= -github.com/aws/aws-sdk-go-v2/service/kms v1.24.1/go.mod h1:yrlimpsAJc9fXj3jHC7Ig2Zb4iMAoSJ/VVzChf22dZk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1 h1:mTgFVlfQT8gikc5+/HwD8UL9jnUro5MGv8n/VEYF12I= -github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1/go.mod h1:6SOWLiobcZZshbmECRTADIRYliPL0etqFSigauQEeT0= -github.com/aws/aws-sdk-go-v2/service/sso v1.3.1/go.mod h1:J3A3RGUvuCZjvSuZEcOpHDnzZP/sKbhDWV2T1EOzFIM= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.1 h1:DSNpSbfEgFXRV+IfEcKE5kTbqxm+MeF5WgyeRlsLnHY= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.1/go.mod h1:TC9BubuFMVScIU+TLKamO6VZiYTkYoEHqlSQwAe2omw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1 h1:hd0SKLMdOL/Sl6Z0np1PX9LeH2gqNtBe0MhTedA8MGI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1/go.mod h1:XO/VcyoQ8nKyKfFW/3DMsRQXsfh/052tHTWmg3xBXRg= -github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BVRASvcU7gYZB9PUgPiByXg= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.1 h1:pAOJj+80tC8sPVgSDHzMYD6KLWsaLQ1kZw31PTeORbs= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.1/go.mod h1:G8SbvL0rFk4WOJroU8tKBczhsbhj2p/YY7qeJezJ3CI= -github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.11.2/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= -github.com/aws/smithy-go v1.14.0 h1:+X90sB94fizKjDmwb4vyl2cTTPXTE5E2G/1mjByb0io= -github.com/aws/smithy-go v1.14.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04 h1:p2I85zYI9z5/c/3Q0LiO3RtNXcmXHTtJfml/hV16zNg= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04/go.mod h1:Z+bXnIbhKJYSvxNwsNnwde7pDKxuqlEZCbUBoTwAqf0= +github.com/aws/aws-sdk-go v1.48.3 h1:btYjT+opVFxUbRz+qSCjJe07cdX82BHmMX/FXYmoL7g= +github.com/aws/aws-sdk-go v1.48.3/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= +github.com/aws/aws-sdk-go-v2 v1.23.1 h1:qXaFsOOMA+HsZtX8WoCa+gJnbyW7qyFFBlPqvTSzbaI= +github.com/aws/aws-sdk-go-v2 v1.23.1/go.mod h1:i1XDttT4rnf6vxc9AuskLc6s7XBee8rlLilKlc03uAA= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 h1:ZY3108YtBNq96jNZTICHxN1gSBSbnvIdYwwqnvCV4Mc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1/go.mod h1:t8PYl/6LzdAqsU4/9tz28V/kU+asFePvpOMkdul0gEQ= +github.com/aws/aws-sdk-go-v2/config v1.25.5 h1:UGKm9hpQS2hoK8CEJ1BzAW8NbUpvwDJJ4lyqXSzu8bk= +github.com/aws/aws-sdk-go-v2/config v1.25.5/go.mod h1:Bf4gDvy4ZcFIK0rqDu1wp9wrubNba2DojiPB2rt6nvI= +github.com/aws/aws-sdk-go-v2/credentials v1.16.4 h1:i7UQYYDSJrtc30RSwJwfBKwLFNnBTiICqAJ0pPdum8E= +github.com/aws/aws-sdk-go-v2/credentials v1.16.4/go.mod h1:Kdh/okh+//vQ/AjEt81CjvkTo64+/zIE4OewP7RpfXk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5 h1:KehRNiVzIfAcj6gw98zotVbb/K67taJE0fkfgM6vzqU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5/go.mod h1:VhnExhw6uXy9QzetvpXDolo1/hjhx4u9qukBGkuUwjs= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2 h1:3q7vcLhq6JXqTLPpPuDJgw3f+DFqd4p+BWL2DlplRPc= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2/go.mod h1:9aqZoo/OeMBK/Nf3wzQzTlM92u7Bip256GHpY0oQbX4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 h1:LAm3Ycm9HJfbSCd5I+wqC2S9Ej7FPrgr5CQoOljJZcE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4/go.mod h1:xEhvbJcyUf/31yfGSQBe01fukXwXJ0gxDp7rLfymWE0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 h1:4GV0kKZzUxiWxSVpn/9gwR0g21NF1Jsyduzo9rHgC/Q= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4/go.mod h1:dYvTNAggxDZy6y1AF7YDwXsPuHFy/VNEpEI/2dWK9IU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 h1:uR9lXYjdPX0xY+NhvaJ4dD8rpSRz5VY81ccIIoNG+lw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 h1:40Q4X5ebZruRtknEZH/bg91sT5pR853F7/1X9QRbI54= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4/go.mod h1:u77N7eEECzUv7F0xl2gcfK/vzc8wcjWobpy+DcrLJ5E= +github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2 h1:y6LX9GUoEA3mO0qpFl1ZQHj1rFyPWVphlzebiSt2tKE= +github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2/go.mod h1:Q0LcmaN/Qr8+4aSBrdrXXePqoX0eOuYpJLbYpilmWnA= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2 h1:PpbXaecV3sLAS6rjQiaKw4/jyq3Z8gNzmoJupHAoBp0= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2/go.mod h1:fUHpGXr4DrXkEDpGAjClPsviWf+Bszeb0daKE0blxv8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 h1:rpkF4n0CyFcrJUG/rNNohoTmhtWlFTRI4BsZOh9PvLs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1/go.mod h1:l9ymW25HOqymeU2m1gbUQ3rUIsTwKs8gYHXkqDQUhiI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4 h1:6DRKQc+9cChgzL5gplRGusI5dBGeiEod4m/pmGbcX48= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4/go.mod h1:s8ORvrW4g4v7IvYKIAoBg17w3GQ+XuwXDXYrQ5SkzU0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4 h1:rdovz3rEu0vZKbzoMYPTehp0E8veoE9AyfzqCr5Eeao= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4/go.mod h1:aYCGNjyUCUelhofxlZyj63srdxWUSsBSGg5l6MCuXuE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4 h1:o3DcfCxGDIT20pTbVKVhp3vWXOj/VvgazNJvumWeYW0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4/go.mod h1:Uy0KVOxuTK2ne+/PKQ+VvEeWmjMMksE17k/2RK/r5oM= +github.com/aws/aws-sdk-go-v2/service/kms v1.26.3 h1:li5dFiK1tkAFXvOC9QPWAVWqTu8ZxpIR0KzKmof6TIE= +github.com/aws/aws-sdk-go-v2/service/kms v1.26.3/go.mod h1:N3++/sLV97B8Zliz7KRqNcojOX7iMBZWKiuit5FKtH0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0 h1:FJTWR2nP1ddLIbk4n7Glw8wGbeWGHaViUwADPzE/EBo= +github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0/go.mod h1:dqJ5JBL0clzgHriH35Amx3LRFY6wNIPUX7QO/BerSBo= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.3 h1:CdsSOGlFF3Pn+koXOIpTtvX7st0IuGsZ8kJqcWMlX54= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.3/go.mod h1:oA6VjNsLll2eVuUoF2D+CMyORgNzPEW/3PyUdq6WQjI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1 h1:cbRqFTVnJV+KRpwFl76GJdIZJKKCdTPnjUZ7uWh3pIU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1/go.mod h1:hHL974p5auvXlZPIjJTblXJpbkfK4klBczlsEaMCGVY= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 h1:yEvZ4neOQ/KpUqyR+X0ycUTW/kVRNR4nDZ38wStHGAA= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.4/go.mod h1:feTnm2Tk/pJxdX+eooEsxvlvTWBvDm6CasRZ+JOs2IY= +github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.17.0 h1:wWJD7LX6PBV6etBUwO0zElG0nWN9rUhp0WdYeHSHAaI= +github.com/aws/smithy-go v1.17.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8 h1:SoFYaT9UyGkR0+nogNyD/Lj+bsixB+SNuAS4ABlEs6M= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8/go.mod h1:2JF49jcDOrLStIXN/j/K1EKRq8a8R2qRnlZA6/o/c7c= 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= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= @@ -224,50 +212,47 @@ github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11 h1:IRrDwVlW github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11/go.mod h1:je2KZ+LxaCNvCoKg32jtOIULcFogJKcL1ZWUaIBjKj0= github.com/caarlos0/go-shellwords v1.0.12 h1:HWrUnu6lGbWfrDcFiHcZiwOLzHWjjrPVehULaTFgPp8= github.com/caarlos0/go-shellwords v1.0.12/go.mod h1:bYeeX1GrTLPl5cAMYEzdm272qdsQAZiaHgeF0KTk1Gw= -github.com/caarlos0/log v0.4.2 h1:Zi5DNvCJLU0zJAI7B3sYf2zRfHW3xS8ahKQg1eh5/LQ= -github.com/caarlos0/log v0.4.2/go.mod h1:xwKkgWnQMD39Cb/HgTWrhsG3l3MTTGwf2UZqbki2eqM= -github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I= -github.com/caarlos0/sshmarshal v0.1.0/go.mod h1:7Pd/0mmq9x/JCzKauogNjSQEhivBclCQHfr9dlpDIyA= +github.com/caarlos0/log v0.4.4 h1:LnvgBz/ofsJ00AupP/cEfksJSZglb1L69g4Obk/sdAc= +github.com/caarlos0/log v0.4.4/go.mod h1:+AmCI9Liv5LKXmzFmFI1htuHdTTj/0R3KuoP9DMY7Mo= github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8= github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk= github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM= github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= -github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charmbracelet/keygen v0.4.3 h1:ywOZRwkDlpmkawl0BgLTxaYWDSqp6Y4nfVVmgyyO1Mg= -github.com/charmbracelet/keygen v0.4.3/go.mod h1:4e4FT3HSdLU/u83RfJWvzJIaVb8aX4MxtDlfXwpDJaI= -github.com/charmbracelet/lipgloss v0.8.0 h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdyCQk84RU= -github.com/charmbracelet/lipgloss v0.8.0/go.mod h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU= -github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08 h1:9Qh4lJ/KMr5iS1zfZ8I97+3MDpiKjl+0lZVUNBhdvRs= -github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08/go.mod h1:MAuu1uDJNOS3T3ui0qmKdPUwm59+bO19BbTph2wZafE= +github.com/charmbracelet/keygen v0.5.0 h1:XY0fsoYiCSM9axkrU+2ziE6u6YjJulo/b9Dghnw6MZc= +github.com/charmbracelet/keygen v0.5.0/go.mod h1:DfvCgLHxZ9rJxdK0DGw3C/LkV4SgdGbnliHcObV3L+8= +github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= +github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= +github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d h1:+o+e/8hf7cG0SbAzEAm/usJ8qoZPgFXhudLjop+TM0g= +github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d/go.mod h1:aoG4bThKYIOnyB55r202eHqo6TkN7ZXV+cu4Do3eoBQ= +github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4= +github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.5 h1:g+wWynZqVALYAlpSQFAa7TscDnUK8mKYtrxMpw6AUKo= +github.com/cloudflare/circl v1.3.5/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb h1:7ENzkH+O3juL+yj2undESLTaAeRllHwCs/b8z6aWSfc= @@ -278,27 +263,26 @@ github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/disgoorg/disgo v0.16.9 h1:QkdfM930SSi/p5TaJF2/BxjUKPQVcA3zu6sGtocSUhg= -github.com/disgoorg/disgo v0.16.9/go.mod h1:QnvUII334g/LJzjOmhYGCJzbl38Og83iXCEe28DklVM= +github.com/disgoorg/disgo v0.17.0 h1:/LcgXgPDhzHt3GkQ4cpjmIJBim1/VYfS31VhGYif3Ms= +github.com/disgoorg/disgo v0.17.0/go.mod h1:AE2J/8oLR2PtYfqcARsk1mgBxQ5z3Z1OD6Lc2SA0gak= github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys= github.com/disgoorg/json v1.1.0/go.mod h1:BHDwdde0rpQFDVsRLKhma6Y7fTbQKub/zdGO5O9NqqA= -github.com/disgoorg/log v1.2.1 h1:kZYAWkUBcGy4LbZcgYtgYu49xNVLy+xG5Uq3yz5VVQs= -github.com/disgoorg/log v1.2.1/go.mod h1:hhQWYTFTnIGzAuFPZyXJEi11IBm9wq+/TVZt/FEwX0o= github.com/disgoorg/snowflake/v2 v2.0.1 h1:CuUxGLwggUxEswZOmZ+mZ5i0xSumQdXW9tXW7uGqe+0= github.com/disgoorg/snowflake/v2 v2.0.1/go.mod h1:SPU9c2CNn5DSyb86QcKtdZgix9osEtKrHLW4rMhfLCs= github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 h1:zuxvqNfQKyGNH3a1yFh1ofD4Y7ycgdwQhHX6QRH+Cwo= github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8/go.mod h1:6rIc5NMSjXjjnwzWWy3HAm9gDBu+X7aCzL8VrHIKgxM= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= -github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.2+incompatible h1:eATx+oLz9WdNVkQrr0qjQ8HvRJ4bOOxfzEo8R+dA3cg= -github.com/docker/docker v24.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= -github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/cli v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= +github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= +github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -316,24 +300,16 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 h1:IeaD1VDVBPlx3viJT9Md8if8IxxJnO+x0JCGb054heg= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 h1:a4DFiKFJiDRGFD1qIcqGLX/WlUMD9dyLSLDt+9QZgt8= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/frankban/quicktest v1.14.4/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/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= 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-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= @@ -355,12 +331,13 @@ github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9Qy github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= -github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= +github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= @@ -382,8 +359,9 @@ github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KA github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-semantic-release/semantic-release/v2 v2.28.0 h1:w3XQy2aUM4vC42n546qkWSITkbKuNaTEmV+eL8uwIh0= @@ -426,6 +404,8 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.1.0 h1:UGKbA/IPjtS6zLcdB7i5TyACMgSbOTiR8qzXgw8HWQU= +github.com/golang-jwt/jwt/v5 v5.1.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -471,23 +451,23 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= 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-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= -github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= -github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= -github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= +github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-github/v57 v57.0.0 h1:L+Y3UPTY8ALM8x+TV0lg+IEBI+upibemtBD8Q9u7zHs= +github.com/google/go-github/v57 v57.0.0/go.mod h1:s0omdnye0hvK/ecLvpsGfJMiRt85PimQh4oygmLIxHw= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-replayers/grpcreplay v1.1.0 h1:S5+I3zYyZ+GQz68OfbURDdt/+cSMqCK1wrvNx7WBzTE= github.com/google/go-replayers/grpcreplay v1.1.0/go.mod h1:qzAvJ8/wi57zq7gWqaE6AwLM6miiXUQwP1S+I9icmhk= github.com/google/go-replayers/httpreplay v1.2.0 h1:VM1wEyyjaoU53BwrOnaf9VhAyQQEEioJvFYxYcLRKzk= github.com/google/go-replayers/httpreplay v1.2.0/go.mod h1:WahEFFZZ7a1P4VM1qEeHy+tME4bwyqPcwWbNlUI1Mcg= -github.com/google/ko v0.14.1 h1:CU+iuIYOOUoSLpBi/gYhnJerig/an/6/cUaEZIOWSGo= -github.com/google/ko v0.14.1/go.mod h1:OrNWWNU4PEdaOArS3M2trorYoIbUwaZYBUHPOw6CVL0= +github.com/google/ko v0.15.1 h1:++5WJTTjSLyObGK6NYdnkHGw4XiUkFD2ldk2mbJ9vd8= +github.com/google/ko v0.15.1/go.mod h1:2hpqDZDqly3yVDZbBCohSnUrmwOXw7MBCqujBBu6rMU= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -507,8 +487,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/rpmpack v0.5.0 h1:L16KZ3QvkFGpYhmp23iQip+mx1X39foEsqszjMNBm8A= github.com/google/rpmpack v0.5.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI= -github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 h1:SJ+NtwL6QaZ21U+IrK7d0gGgpjGGvd2kz+FzTHVzdqI= github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2/go.mod h1:Tv1PlzqC9t8wNnpPdctvtSUOPUUg4SHeE6vR1Ir2hmg= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -516,12 +496,12 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= -github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= @@ -533,14 +513,14 @@ github.com/goreleaser/chglog v0.5.0 h1:Sk6BMIpx8+vpAf8KyPit34OgWui8c7nKTMHhYx88j github.com/goreleaser/chglog v0.5.0/go.mod h1:Ri46M3lrMuv76FHszs3vtABR8J8k1w9JHYAzxeeOl28= github.com/goreleaser/fileglob v1.3.0 h1:/X6J7U8lbDpQtBvGcwwPS6OpzkNVlVEsFUVRx9+k+7I= github.com/goreleaser/fileglob v1.3.0/go.mod h1:Jx6BoXv3mbYkEzwm9THo7xbr5egkAraxkGorbJb4RxU= -github.com/goreleaser/nfpm/v2 v2.33.1 h1:EkdAzZyVhAI9JC1vjmjjbmnNzyH1J6Cu4JCsA7YcQuc= -github.com/goreleaser/nfpm/v2 v2.33.1/go.mod h1:8wwWWvJWmn84xo/Sqiv0aMvEGTHlHZTXTEuVSgQpkIM= +github.com/goreleaser/nfpm/v2 v2.35.1 h1:QpDus/yMTwG/IpRxI/hL7VuRII1mzYwbLInsPiWrtaM= +github.com/goreleaser/nfpm/v2 v2.35.1/go.mod h1:KeO5wxOHyU1nPFO5siSfw6Ds5dKyy0E6y89/ypM7+ZI= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -553,21 +533,17 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.1 h1:oGm7cWBaYIp3lJpx1RUEfLWophprE2EV/KUeqBYo+6k= github.com/hashicorp/go-plugin v1.5.1/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= -github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= -github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= +github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= +github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/honeycombio/beeline-go v1.10.0 h1:cUDe555oqvw8oD76BQJ8alk7FP0JZ/M/zXpNvOEDLDc= -github.com/honeycombio/beeline-go v1.10.0/go.mod h1:Zz5WMeQCJzFt2Mvf8t6HC1X8RLskLVR/e8rvcmXB1G8= -github.com/honeycombio/libhoney-go v1.16.0 h1:kPpqoz6vbOzgp7jC6SR7SkNj7rua7rgxvznI6M3KdHc= -github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -578,8 +554,8 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/invopop/jsonschema v0.9.0 h1:m1Fe5PN4X9V7P1TCF+pA8Xly3Vj3pY905klC++8oOpM= -github.com/invopop/jsonschema v0.9.0/go.mod h1:uMhbTEOXoPcOKzdYRfk914W6UTGA/cVcgEQxXh1MJ7g= +github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI= +github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -591,8 +567,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y 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/jmhodges/clock v0.0.0-20160418191101-880ee4c33548 h1:dYTbLf4m0a5u0KLmPfB6mgxbcV7588bOCx79hxa5Sr4= -github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo= +github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= +github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -607,8 +583,8 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -624,8 +600,8 @@ 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/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf h1:ndns1qx/5dL43g16EQkPV/i8+b3l5bYQwLeoSBe7tS8= -github.com/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf/go.mod h1:aGkAgvWY/IUcVFfuly53REpfv5edu25oij+qHRFaraA= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC67RX96eTkYD2f53NDHhrq/7robWTAfk4s= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= 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/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -655,7 +631,8 @@ github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRC github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -670,8 +647,8 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR 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/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -686,8 +663,8 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= -github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= +github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= @@ -707,47 +684,52 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= -github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= +github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b h1:qYTY2tN72LhgDj2rtWG+LI6TXFl2ygFQQ4YezfVaGQE= github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b/go.mod h1:/pA7k3zsXKdjjAiUhB5CjuKib9KJGCaLvZwtxGC8U0s= +github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= +github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a h1:4j4hrwYblDkNouA2fZ/hKvtJhV/N+jJGhLoRXUNLYmE= -github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a/go.mod h1:em8IHAamkOMXzXHjHx5NdLO1d8erWDMlGRlx0XE5TtI= -github.com/sigstore/rekor v1.2.0 h1:ahlnoEY3zo8Vc+eZLPobamw6YfBTAbI0lthzUQd6qe4= -github.com/sigstore/rekor v1.2.0/go.mod h1:zcFO54qIg2G1/i0sE/nvmELUOng/n0MPjTszRYByVPo= -github.com/sigstore/sigstore v1.6.4 h1:jH4AzR7qlEH/EWzm+opSpxCfuUcjHL+LJPuQE7h40WE= -github.com/sigstore/sigstore v1.6.4/go.mod h1:pjR64lBxnjoSrAr+Ydye/FV73IfrgtoYlAI11a8xMfA= +github.com/sigstore/cosign/v2 v2.2.1 h1:HauwPOMYYaVdQsnvUbF0P+ZsVPrkTB0G7Eq65+z1bQc= +github.com/sigstore/cosign/v2 v2.2.1/go.mod h1:4l1hELKWoFYzZ/p7+umrK6dhdBoBW0JbQRCIjOZIM9g= +github.com/sigstore/rekor v1.3.3 h1:pLZ0UjutL7SUdeiysmJCabnRqvI7DsIxnJj8c/+e0Fk= +github.com/sigstore/rekor v1.3.3/go.mod h1:GO3udo2Xiu3/Uz4/U3vgjVq7w5Yq7eSpAFP1z7gE+yA= +github.com/sigstore/sigstore v1.7.5 h1:ij55dBhLwjICmLTBJZm7SqoQLdsu/oowDanACcJNs48= +github.com/sigstore/sigstore v1.7.5/go.mod h1:9OCmYWhzuq/G4e1cy9m297tuMRJ1LExyrXY3ZC3Zt/s= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ= -github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/slack-go/slack v0.12.3 h1:92/dfFU8Q5XP6Wp5rr5/T5JHLM5c5Smtn53fhToAP88= @@ -756,22 +738,22 @@ github.com/smartystreets/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0Zxu github.com/smartystreets/assertions v1.13.1/go.mod h1:cXr/IwVfSo/RbCSPhoAPv73p3hlSdrBH/b3SdnW/LMY= github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= 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= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= +github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -793,35 +775,28 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= -github.com/theupdateframework/go-tuf v0.5.2 h1:habfDzTmpbzBLIFGWa2ZpVhYvFBoK0C1onC3a4zuPRA= -github.com/theupdateframework/go-tuf v0.5.2/go.mod h1:SyMV5kg5n4uEclsyxXJZI2UxPFJNDc4Y+r7wv+MlvTA= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE= 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.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= -github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= -github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= +github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= -github.com/xanzy/go-gitlab v0.91.1 h1:gnV57IPGYywWer32oXKBcdmc8dVxeKl3AauV8Bu17rw= -github.com/xanzy/go-gitlab v0.91.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= +github.com/xanzy/go-gitlab v0.95.2 h1:4p0IirHqEp5f0baK/aQqr4TR57IsD+8e4fuyAA1yi88= +github.com/xanzy/go-gitlab v0.95.2/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= 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/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -841,8 +816,8 @@ gitlab.com/digitalxero/go-conventional-commit v1.0.7/go.mod h1:05Xc2BFsSyC5tKhK0 go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= -go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= +go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE= +go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -851,9 +826,10 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -gocloud.dev v0.34.0 h1:LzlQY+4l2cMtuNfwT2ht4+fiXwWf/NmPTnXUlLmGif4= -gocloud.dev v0.34.0/go.mod h1:psKOachbnvY3DAOPbsFVmLIErwsbWPUG2H5i65D38vE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +gocloud.dev v0.35.0 h1:x/Gtt5OJdT4j+ir1AXAIXb7bBnFawXAAaJptCUGk3HU= +gocloud.dev v0.35.0/go.mod h1:wbyF+BhfdtLWyUtVEWRW13hFLb1vXnV2ovEhYGQe3ck= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -866,7 +842,6 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -874,8 +849,8 @@ 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.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -886,8 +861,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -913,8 +888,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -950,12 +925,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -965,8 +939,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -981,8 +955,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1035,23 +1009,19 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/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.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1065,13 +1035,13 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= +golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1128,14 +1098,14 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 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.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1155,8 +1125,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= -google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= +google.golang.org/api v0.151.0 h1:FhfXLO/NFdJIzQtCqjpysWwqKk8AzGWBUhMIx67cVDU= +google.golang.org/api v0.151.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1189,7 +1159,6 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -1203,12 +1172,12 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 h1:o4LtQxebKIJ4vkzyhtD2rfUNZ20Zf0ik5YVP5E7G7VE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1222,14 +1191,11 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= -google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1246,8 +1212,6 @@ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1256,16 +1220,15 @@ gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/go-jose/go-jose.v2 v2.6.1 h1:qEzJlIDmG9q5VO0M/o8tGS65QMHMS1w01TQJB1VPJ4U= +gopkg.in/go-jose/go-jose.v2 v2.6.1/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= 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.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1291,5 +1254,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kind v0.20.0 h1:f0sc3v9mQbGnjBUaqSFST1dwIuiikKVGgoTwpoP33a8= sigs.k8s.io/kind v0.20.0/go.mod h1:aBlbxg08cauDgZ612shr017/rZwqd7AS563FvpWKPVs= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/goreleaser/.github/workflows/build.yml b/goreleaser/.github/workflows/build.yml index 2d756ac..b6c10fe 100644 --- a/goreleaser/.github/workflows/build.yml +++ b/goreleaser/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: env: DOCKER_CLI_EXPERIMENTAL: "enabled" steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: fetch-depth: 0 - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 @@ -48,14 +48,14 @@ jobs: - uses: crazy-max/ghaction-upx@v3 with: install-only: true - - uses: cachix/install-nix-action@v23 + - uses: cachix/install-nix-action@v24 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable - - uses: sigstore/cosign-installer@v3.1.2 - - uses: anchore/sbom-action/download-syft@v0.14.3 + - uses: sigstore/cosign-installer@v3.3.0 + - uses: anchore/sbom-action/download-syft@v0.15.1 - name: setup-validate-krew-manifest run: go install sigs.k8s.io/krew/cmd/validate-krew-manifest@latest - name: setup-tparse diff --git a/goreleaser/.github/workflows/codeql.yml b/goreleaser/.github/workflows/codeql.yml index 09e8d87..6c3cab2 100644 --- a/goreleaser/.github/workflows/codeql.yml +++ b/goreleaser/.github/workflows/codeql.yml @@ -15,8 +15,8 @@ jobs: contents: read steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable - uses: github/codeql-action/init@cdcdbb579706841c47f7063dda365e292e5cad7a # v2 diff --git a/goreleaser/.github/workflows/depsreview.yaml b/goreleaser/.github/workflows/depsreview.yaml index aaa5025..635c419 100644 --- a/goreleaser/.github/workflows/depsreview.yaml +++ b/goreleaser/.github/workflows/depsreview.yaml @@ -8,7 +8,7 @@ jobs: dependency-review: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 - uses: actions/dependency-review-action@v3 with: allow-licenses: BSD-2-Clause, BSD-3-Clause, MIT, Apache-2.0, MPL-2.0 diff --git a/goreleaser/.github/workflows/docs.yml b/goreleaser/.github/workflows/docs.yml index 12c5962..dc2455c 100644 --- a/goreleaser/.github/workflows/docs.yml +++ b/goreleaser/.github/workflows/docs.yml @@ -19,11 +19,11 @@ jobs: htmltest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable - run: task docs:build diff --git a/goreleaser/.github/workflows/fig.yml b/goreleaser/.github/workflows/fig.yml index dfdff7a..0a40eb1 100644 --- a/goreleaser/.github/workflows/fig.yml +++ b/goreleaser/.github/workflows/fig.yml @@ -13,8 +13,8 @@ jobs: fig: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable cache: true diff --git a/goreleaser/.github/workflows/generate-releases.yml b/goreleaser/.github/workflows/generate-releases.yml deleted file mode 100644 index 25fd4af..0000000 --- a/goreleaser/.github/workflows/generate-releases.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: generate-releases - -on: - workflow_dispatch: - -permissions: - contents: read - -jobs: - generate: - permissions: - contents: write # for stefanzweifel/git-auto-commit-action to push code in repo - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 - with: - token: ${{ secrets.GH_PAT }} - - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 - - run: task docs:releases - env: - GITHUB_TOKEN: ${{ secrets.GH_PAT }} - - uses: stefanzweifel/git-auto-commit-action@3ea6ae190baf489ba007f7c92608f33ce20ef04a # v4 - with: - commit_message: "chore: docs releases json auto-update" - branch: main - commit_user_name: actions-user - commit_user_email: actions@github.com - commit_author: actions-user diff --git a/goreleaser/.github/workflows/generate.yml b/goreleaser/.github/workflows/generate.yml index 050430f..1cc35ac 100644 --- a/goreleaser/.github/workflows/generate.yml +++ b/goreleaser/.github/workflows/generate.yml @@ -1,14 +1,7 @@ name: generate on: - push: - branches: - - 'main' - paths: - - '.github/workflows/generate.yml' - - pkg/config/config.go - - CONTRIBUTING.md - - USERS.md + workflow_dispatch: {} permissions: contents: read @@ -16,20 +9,27 @@ permissions: jobs: docs: permissions: - contents: write # for stefanzweifel/git-auto-commit-action to push code in repo + contents: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: token: ${{ secrets.GH_PAT }} - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable cache: true - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - run: task docs:releases + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: task docs:generate - run: task schema:generate - - uses: stefanzweifel/git-auto-commit-action@3ea6ae190baf489ba007f7c92608f33ce20ef04a # v4 + - run: task nix:licenses:generate + - uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5 with: commit_message: "chore: docs auto-update" branch: main diff --git a/goreleaser/.github/workflows/gitleaks.yml b/goreleaser/.github/workflows/gitleaks.yml index acb8250..6d12da6 100644 --- a/goreleaser/.github/workflows/gitleaks.yml +++ b/goreleaser/.github/workflows/gitleaks.yml @@ -14,7 +14,7 @@ jobs: gitleaks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: fetch-depth: 0 - uses: gitleaks/gitleaks-action@v2 diff --git a/goreleaser/.github/workflows/grype.yml b/goreleaser/.github/workflows/grype.yml index fbed596..ffad3c0 100644 --- a/goreleaser/.github/workflows/grype.yml +++ b/goreleaser/.github/workflows/grype.yml @@ -17,7 +17,7 @@ jobs: contents: read steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 - uses: anchore/scan-action@v3 with: path: "." diff --git a/goreleaser/.github/workflows/lint.yml b/goreleaser/.github/workflows/lint.yml index d95f4da..2426194 100644 --- a/goreleaser/.github/workflows/lint.yml +++ b/goreleaser/.github/workflows/lint.yml @@ -12,13 +12,13 @@ permissions: jobs: golangci: permissions: - contents: read # for actions/checkout to fetch code - pull-requests: read # for golangci/golangci-lint-action to fetch pull requests + contents: read # for actions/checkout to fetch code + pull-requests: read # for golangci/golangci-lint-action to fetch pull requests name: lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable cache: false @@ -26,3 +26,4 @@ jobs: uses: golangci/golangci-lint-action@3a919529898de77ec3da873e3063ca4b10e7f5cc # v3 with: args: --timeout=5m + only-new-issues: true diff --git a/goreleaser/.github/workflows/milestone.yml b/goreleaser/.github/workflows/milestone.yml index db39943..d6ca646 100644 --- a/goreleaser/.github/workflows/milestone.yml +++ b/goreleaser/.github/workflows/milestone.yml @@ -25,7 +25,7 @@ jobs: statuses: none steps: - - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6 + - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v6 with: script: | if (!context.payload.pull_request.merged) { diff --git a/goreleaser/.github/workflows/nightly-oss.yml b/goreleaser/.github/workflows/nightly-oss.yml index 991800e..96e0bc5 100644 --- a/goreleaser/.github/workflows/nightly-oss.yml +++ b/goreleaser/.github/workflows/nightly-oss.yml @@ -16,7 +16,7 @@ jobs: env: DOCKER_CLI_EXPERIMENTAL: "enabled" steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: fetch-depth: 0 - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 @@ -25,15 +25,15 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v2 - uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v2 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable - - uses: sigstore/cosign-installer@v3.1.2 - - uses: anchore/sbom-action/download-syft@v0.14.3 + - uses: sigstore/cosign-installer@v3.3.0 + - uses: anchore/sbom-action/download-syft@v0.15.1 - uses: crazy-max/ghaction-upx@v3 with: install-only: true - - uses: cachix/install-nix-action@v23 + - uses: cachix/install-nix-action@v24 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - name: dockerhub-login diff --git a/goreleaser/.github/workflows/release.yml b/goreleaser/.github/workflows/release.yml index 96b8e85..3a5a171 100644 --- a/goreleaser/.github/workflows/release.yml +++ b/goreleaser/.github/workflows/release.yml @@ -3,9 +3,9 @@ name: release on: push: branches: - - 'main' + - "main" tags: - - 'v*' + - "v*" permissions: contents: write @@ -15,7 +15,7 @@ permissions: jobs: trigger-generate: runs-on: ubuntu-latest - needs: [ goreleaser ] + needs: [goreleaser] steps: - uses: benc-uk/workflow-dispatch@v121 if: startsWith(github.ref, 'refs/tags/v') @@ -23,10 +23,10 @@ jobs: repo: goreleaser/goreleaser ref: main token: ${{ secrets.GH_PAT }} - workflow: generate-releases.yml + workflow: generate.yml notify-goreleaser-cross: runs-on: ubuntu-latest - needs: [ trigger-generate ] + needs: [trigger-generate] steps: - name: get version if: startsWith(github.ref, 'refs/tags/v') @@ -43,13 +43,13 @@ jobs: runs-on: ubuntu-latest env: DOCKER_CLI_EXPERIMENTAL: "enabled" - needs: [ goreleaser ] + needs: [goreleaser] if: github.ref == 'refs/heads/main' strategy: matrix: - format: [ deb, rpm, apk ] + format: [deb, rpm, apk] steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: fetch-depth: 0 - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 @@ -70,7 +70,7 @@ jobs: env: DOCKER_CLI_EXPERIMENTAL: "enabled" steps: - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v3 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v3 with: fetch-depth: 0 - uses: arduino/setup-task@e26d8975574116b0097a1161e0fe16ba75d84c1c # v1 @@ -86,7 +86,7 @@ jobs: sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft mkdir -p $HOME/.cache/snapcraft/download mkdir -p $HOME/.cache/snapcraft/stage-packages - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4 + - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v4 with: go-version: stable - uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3 @@ -96,12 +96,12 @@ jobs: ./dist/*.rpm ./dist/*.apk key: ${{ github.ref }} - - uses: sigstore/cosign-installer@v3.1.2 - - uses: anchore/sbom-action/download-syft@v0.14.3 + - uses: sigstore/cosign-installer@v3.3.0 + - uses: anchore/sbom-action/download-syft@v0.15.1 - uses: crazy-max/ghaction-upx@v3 with: install-only: true - - uses: cachix/install-nix-action@v23 + - uses: cachix/install-nix-action@v24 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - name: dockerhub-login diff --git a/goreleaser/.golangci.yaml b/goreleaser/.golangci.yaml index 8a9deb2..83d6c2b 100644 --- a/goreleaser/.golangci.yaml +++ b/goreleaser/.golangci.yaml @@ -14,7 +14,12 @@ linters: - tagliatelle - misspell - depguard + - testifylint linters-settings: + staticcheck: + checks: + - all + - "-SA1019" forbidigo: forbid: - 'ioutil\.*' diff --git a/goreleaser/.goreleaser.yaml b/goreleaser/.goreleaser.yaml index 2b98510..ba98adb 100644 --- a/goreleaser/.goreleaser.yaml +++ b/goreleaser/.goreleaser.yaml @@ -1,5 +1,7 @@ # yaml-language-server: $schema=https://goreleaser.com/static/schema.json # vim: set ts=2 sw=2 tw=0 fo=jcroql +version: 1 + env: - GO111MODULE=on @@ -362,8 +364,9 @@ milestones: release: name_template: "v{{ .Version }}" footer: | - **Full Changelog**: https://github.com/goreleaser/goreleaser/compare/{{ .PreviousTag }}...{{ .Tag }} + **Full Changelog**: https://github.com/goreleaser/goreleaser/compare/{{ .PreviousTag }}...{{ if .IsNightly }}nightly{{ else }}{{ .Tag }}{{ end }} + {{ if not .IsNightly }} ## Helping out This release is only possible thanks to **all** the support of some **awesome people**! @@ -377,6 +380,7 @@ release: * Reach out on [Discord](https://discord.gg/RGEBtg8vQ6) and [Twitter](https://twitter.com/goreleaser)! GoReleaser logo + {{ end }} announce: twitter: diff --git a/goreleaser/CONTRIBUTING.md b/goreleaser/CONTRIBUTING.md index 4861ef8..e78c857 100644 --- a/goreleaser/CONTRIBUTING.md +++ b/goreleaser/CONTRIBUTING.md @@ -20,6 +20,7 @@ Other things you might need to run the tests: - [Podman](https://podman.io/) - [Snapcraft](https://snapcraft.io/) - [Syft](https://github.com/anchore/syft) +- [upx](https://upx.github.io/) Clone `goreleaser` anywhere: diff --git a/goreleaser/Dockerfile b/goreleaser/Dockerfile index 7f2ce5b..06b503c 100644 --- a/goreleaser/Dockerfile +++ b/goreleaser/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21.1-alpine@sha256:96634e55b363cb93d39f78fb18aa64abc7f96d372c176660d7b8b6118939d97b +FROM golang:1.21.5-alpine@sha256:4db4aac30880b978cae5445dd4a706215249ad4f43d28bd7cdf7906e9be8dd6b RUN apk add --no-cache bash \ curl \ diff --git a/goreleaser/SECURITY.md b/goreleaser/SECURITY.md index 77eae15..1eb731b 100644 --- a/goreleaser/SECURITY.md +++ b/goreleaser/SECURITY.md @@ -6,6 +6,7 @@ Only the last stable version at any given point. ## Reporting a Vulnerability -Vulnerabilies can be disclosed in private using GitHub advisories: https://github.com/goreleaser/goreleaser/security +Vulnerabilities can be disclosed in private using +[GitHub advisories](https://github.com/goreleaser/goreleaser/security). Thanks! diff --git a/goreleaser/Taskfile.yml b/goreleaser/Taskfile.yml index e348b91..62f98e2 100644 --- a/goreleaser/Taskfile.yml +++ b/goreleaser/Taskfile.yml @@ -53,7 +53,7 @@ tasks: lint: desc: Lint the code with golangci-lint cmds: - - golangci-lint run ./... + - golangci-lint run --config ./.golangci.yaml ./... ci: desc: Run all CI steps @@ -67,6 +67,13 @@ tasks: cmds: - task: ci + nix:licenses:generate: + desc: Generate nix/licenses.go + cmds: + - ./scripts/gen-nix-licenses.sh + generates: + - ./internal/pipe/nix/licenses.go + schema:generate: desc: Generate JSONSchema cmds: diff --git a/goreleaser/USERS.md b/goreleaser/USERS.md index 4de54b7..ccd32e1 100644 --- a/goreleaser/USERS.md +++ b/goreleaser/USERS.md @@ -23,6 +23,7 @@ Here's a running list of some organizations using GoReleaser[^1]: 1. [EVCC](https://evcc.io) 1. [FabioLB](https://fabiolb.net) 1. [Fleet for osquery](https://fleetdm.com) +1. [Flipt](https://www.flipt.io) 1. [FluxCD](https://fluxcd.io) 1. [Gaia Pipeline](https://github.com/gaia-pipeline) 1. [GitGuardian](https://gitguardian.com) @@ -56,9 +57,12 @@ Here's a running list of some organizations using GoReleaser[^1]: 1. [OpenSSF](https://openssf.org) 1. [Optimus Mine](https://optimusmine.com) 1. [Parca](https://www.parca.dev) +1. [Pdfcpu](https://pdfcpu.io) 1. [Planetscale](https://planetscale.com) +1. [Prestd](https://prestd.com) 1. [Pulumi](https://pulumi.com) 1. [ReviewDog](https://github.com/reviewdog) +1. [Rixo](https://www.rixo.cz) 1. [Schwarz IT](https://jobs.schwarz) 1. [SecureGo](https://securego.io) 1. [SemaphoreCI](https://semaphoreci.com) @@ -74,11 +78,10 @@ Here's a running list of some organizations using GoReleaser[^1]: 1. [Trendyol](https://trendyol.com) 1. [Trybe](https://betrybe.com) 1. [Uber](https://uber.github.io/) +1. [Updatecli](https://updatecli.io/) 1. [VMWare](https://www.vmware.com) 1. [Weave Works](https://www.weave.works) 1. [Zitatel](https://zitadel.com) -1. [pdfcpu](https://pdfcpu.io) -1. [prestd](https://prestd.com) Feel free to [add yours](https://github.com/goreleaser/goreleaser/edit/main/USERS.md)! diff --git a/goreleaser/cmd/build.go b/goreleaser/cmd/build.go index 12efa02..0ec7acf 100644 --- a/goreleaser/cmd/build.go +++ b/goreleaser/cmd/build.go @@ -2,7 +2,6 @@ package cmd import ( "fmt" - "os" "path/filepath" "runtime" "strings" @@ -124,7 +123,7 @@ When using ` + "`--single-target`" + `, the ` + "`GOOS`" + ` and ` + "`GOARCH`" &root.opts.skips, "skip", nil, - fmt.Sprintf("Skip the given options (valid options are %s)", skips.Build.String()), + fmt.Sprintf("Skip the given options (valid options are: %s)", skips.Build.String()), ) _ = cmd.RegisterFlagCompletionFunc("skip", func(_ *cobra.Command, _ []string, toComplete string) ([]string, cobra.ShellCompDirective) { return skips.Build.Complete(toComplete), cobra.ShellCompDirectiveDefault @@ -175,6 +174,7 @@ func setupBuildContext(ctx *context.Context, options buildOpts) error { } log.Debugf("parallelism: %v", ctx.Parallelism) ctx.Snapshot = options.snapshot + if err := skips.SetBuild(ctx, options.skips...); err != nil { return err } @@ -204,7 +204,7 @@ func setupBuildContext(ctx *context.Context, options buildOpts) error { ctx.Clean = options.clean || options.rmDist if options.singleTarget { - setupBuildSingleTarget(ctx) + ctx.Partial = true } if len(options.ids) > 0 { @@ -223,31 +223,6 @@ func setupBuildContext(ctx *context.Context, options buildOpts) error { return nil } -func setupBuildSingleTarget(ctx *context.Context) { - goos := os.Getenv("GOOS") - if goos == "" { - goos = runtime.GOOS - } - goarch := os.Getenv("GOARCH") - if goarch == "" { - goarch = runtime.GOARCH - } - log.WithField("reason", "single target is enabled").Warnf("building only for %s/%s", goos, goarch) - if len(ctx.Config.Builds) == 0 { - ctx.Config.Builds = append(ctx.Config.Builds, config.Build{}) - } - for i := range ctx.Config.Builds { - build := &ctx.Config.Builds[i] - build.Goos = []string{goos} - build.Goarch = []string{goarch} - build.Goarm = nil - build.Gomips = nil - build.Goamd64 = nil - build.Targets = nil - } - ctx.Config.UniversalBinaries = nil -} - func setupBuildID(ctx *context.Context, ids []string) error { if len(ctx.Config.Builds) < 2 { log.Warn("single build in config, '--id' ignored") diff --git a/goreleaser/cmd/build_test.go b/goreleaser/cmd/build_test.go index 613ebd2..75a8de9 100644 --- a/goreleaser/cmd/build_test.go +++ b/goreleaser/cmd/build_test.go @@ -1,7 +1,6 @@ package cmd import ( - "runtime" "testing" "github.com/goreleaser/goreleaser/int/pipeline" @@ -179,26 +178,6 @@ func TestBuildFlags(t *testing.T) { }).Clean) }) - t.Run("single-target", func(t *testing.T) { - opts := buildOpts{ - singleTarget: true, - } - - t.Run("runtime", func(t *testing.T) { - result := setup(opts) - require.Equal(t, []string{runtime.GOOS}, result.Config.Builds[0].Goos) - require.Equal(t, []string{runtime.GOARCH}, result.Config.Builds[0].Goarch) - }) - - t.Run("from env", func(t *testing.T) { - t.Setenv("GOOS", "linux") - t.Setenv("GOARCH", "arm64") - result := setup(opts) - require.Equal(t, []string{"linux"}, result.Config.Builds[0].Goos) - require.Equal(t, []string{"arm64"}, result.Config.Builds[0].Goarch) - }) - }) - t.Run("id", func(t *testing.T) { t.Run("match", func(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ @@ -285,53 +264,3 @@ func TestBuildFlags(t *testing.T) { }) }) } - -func TestBuildSingleTargetWithSpecificTargets(t *testing.T) { - ctx := testctx.NewWithCfg(config.Project{ - ProjectName: "test", - Builds: []config.Build{ - { - Targets: []string{ - "linux_amd64_v1", - "darwin_arm64", - "darwin_amd64_v1", - }, - }, - }, - UniversalBinaries: []config.UniversalBinary{ - {Replace: true}, - }, - }) - - t.Setenv("GOOS", "darwin") - t.Setenv("GOARCH", "amd64") - setupBuildSingleTarget(ctx) - require.Equal(t, config.Build{ - Goos: []string{"darwin"}, - Goarch: []string{"amd64"}, - }, ctx.Config.Builds[0]) - require.Nil(t, ctx.Config.UniversalBinaries) -} - -func TestBuildSingleTargetRemoveOtherOptions(t *testing.T) { - ctx := testctx.NewWithCfg(config.Project{ - ProjectName: "test", - Builds: []config.Build{ - { - Goos: []string{"linux", "darwin"}, - Goarch: []string{"amd64", "arm64"}, - Goamd64: []string{"v1", "v2"}, - Goarm: []string{"6"}, - Gomips: []string{"anything"}, - }, - }, - }) - - t.Setenv("GOOS", "linux") - t.Setenv("GOARCH", "amd64") - setupBuildSingleTarget(ctx) - require.Equal(t, config.Build{ - Goos: []string{"linux"}, - Goarch: []string{"amd64"}, - }, ctx.Config.Builds[0]) -} diff --git a/goreleaser/cmd/release_test.go b/goreleaser/cmd/release_test.go index 71816eb..ec8ba93 100644 --- a/goreleaser/cmd/release_test.go +++ b/goreleaser/cmd/release_test.go @@ -58,7 +58,7 @@ func TestReleaseFlags(t *testing.T) { setup := func(tb testing.TB, opts releaseOpts) *context.Context { tb.Helper() ctx := testctx.New() - setupReleaseContext(ctx, opts) + require.NoError(t, setupReleaseContext(ctx, opts)) return ctx } diff --git a/goreleaser/go.mod b/goreleaser/go.mod index fe4fce3..877d9a3 100644 --- a/goreleaser/go.mod +++ b/goreleaser/go.mod @@ -3,34 +3,35 @@ module github.com/goreleaser/goreleaser go 1.21 require ( - code.gitea.io/sdk/gitea v0.16.0 + code.gitea.io/sdk/gitea v0.17.0 dario.cat/mergo v1.0.0 github.com/Masterminds/semver/v3 v3.2.1 github.com/atc0005/go-teams-notify/v2 v2.8.0 - github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04 + github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8 github.com/caarlos0/ctrlc v1.2.0 github.com/caarlos0/env/v9 v9.0.0 github.com/caarlos0/go-reddit/v3 v3.0.1 github.com/caarlos0/go-shellwords v1.0.12 github.com/caarlos0/go-version v0.1.1 - github.com/caarlos0/log v0.4.2 - github.com/charmbracelet/keygen v0.4.3 - github.com/charmbracelet/lipgloss v0.8.0 - github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08 + github.com/caarlos0/log v0.4.4 + github.com/charmbracelet/keygen v0.5.0 + github.com/charmbracelet/lipgloss v0.9.1 + github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d + github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb github.com/dghubble/oauth1 v0.7.2 - github.com/disgoorg/disgo v0.16.9 + github.com/disgoorg/disgo v0.17.0 github.com/disgoorg/snowflake/v2 v2.0.1 github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible - github.com/google/go-containerregistry v0.16.1 - github.com/google/go-github/v55 v55.0.0 - github.com/google/ko v0.14.1 - github.com/google/uuid v1.3.1 + github.com/google/go-containerregistry v0.17.0 + github.com/google/go-github/v57 v57.0.0 + github.com/google/ko v0.15.1 + github.com/google/uuid v1.5.0 github.com/goreleaser/fileglob v1.3.0 - github.com/goreleaser/nfpm/v2 v2.33.1 + github.com/goreleaser/nfpm/v2 v2.35.1 github.com/hashicorp/go-multierror v1.1.1 - github.com/invopop/jsonschema v0.9.0 + github.com/invopop/jsonschema v0.12.0 github.com/jarcoal/httpmock v1.3.1 github.com/klauspost/pgzip v1.2.6 github.com/mattn/go-mastodon v0.0.6 @@ -40,36 +41,48 @@ require ( github.com/muesli/termenv v0.15.2 github.com/ory/dockertest/v3 v3.10.0 github.com/slack-go/slack v0.12.3 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.8.4 github.com/ulikunitz/xz v0.5.11 github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1 - github.com/xanzy/go-gitlab v0.91.1 - gocloud.dev v0.34.0 - golang.org/x/crypto v0.13.0 - golang.org/x/oauth2 v0.12.0 - golang.org/x/sync v0.3.0 - golang.org/x/text v0.13.0 - golang.org/x/tools v0.13.0 + github.com/xanzy/go-gitlab v0.95.2 + gocloud.dev v0.35.0 + golang.org/x/crypto v0.17.0 + golang.org/x/oauth2 v0.15.0 + golang.org/x/sync v0.5.0 + golang.org/x/text v0.14.0 + golang.org/x/tools v0.16.1 gopkg.in/mail.v2 v2.3.1 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go v0.110.7 // indirect - cloud.google.com/go/compute v1.23.0 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.1.0 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + gopkg.in/go-jose/go-jose.v2 v2.6.1 // indirect +) + +require ( + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.1 // indirect - cloud.google.com/go/kms v1.15.0 // indirect - cloud.google.com/go/storage v1.31.0 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/kms v1.15.5 // indirect + cloud.google.com/go/storage v1.35.1 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect @@ -80,105 +93,102 @@ require ( github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect github.com/BurntSushi/toml v1.2.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230626094100-7e9e0395ebec // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c // indirect github.com/acomagu/bufpipe v1.0.4 // indirect github.com/alessio/shellescape v1.4.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go v1.44.314 // indirect - github.com/aws/aws-sdk-go-v2 v1.20.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.32 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.31 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.13.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.21.1 // indirect - github.com/aws/smithy-go v1.14.0 // indirect + github.com/aws/aws-sdk-go v1.48.3 // indirect + github.com/aws/aws-sdk-go-v2 v1.23.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.25.5 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.26.3 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.17.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 // indirect + github.com/aws/smithy-go v1.17.0 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb // indirect github.com/buger/jsonparser v1.1.1 // indirect - github.com/caarlos0/sshmarshal v0.1.0 // indirect github.com/cavaliergopher/cpio v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cloudflare/circl v1.3.5 // indirect github.com/containerd/continuity v0.3.0 // indirect github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidmz/go-pageant v1.0.2 // indirect github.com/dghubble/sling v1.4.0 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/disgoorg/json v1.1.0 // indirect - github.com/disgoorg/log v1.2.1 // indirect - github.com/docker/cli v24.0.0+incompatible // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.2+incompatible // indirect - github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/docker/cli v24.0.7+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 github.com/elliotchance/orderedmap/v2 v2.2.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.4.1 // indirect github.com/go-git/go-git/v5 v5.7.0 // indirect github.com/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/errors v0.20.3 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/errors v0.20.4 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/loads v0.21.2 // indirect github.com/go-openapi/runtime v0.26.0 // indirect github.com/go-openapi/spec v0.20.9 // indirect github.com/go-openapi/strfmt v0.21.7 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/go-openapi/validate v0.22.1 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/go-cmp v0.5.9 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/rpmpack v0.5.0 // indirect - github.com/google/s2a-go v0.1.4 // indirect + github.com/google/s2a-go v0.1.7 // indirect github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/wire v0.5.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/goreleaser/chglog v0.5.0 // indirect github.com/gorilla/mux v1.8.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-retryablehttp v0.7.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.4 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/huandu/xstrings v1.3.3 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -186,85 +196,81 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.17.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf // indirect + github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.18 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/moby/term v0.0.0-20221205130635-1aeaba878587 // indirect + github.com/moby/term v0.5.0 // indirect github.com/muesli/mango v0.1.0 // indirect github.com/muesli/mango-pflag v0.1.0 // indirect github.com/muesli/reflow v0.3.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc3 // indirect + github.com/opencontainers/image-spec v1.1.0-rc5 // indirect github.com/opencontainers/runc v1.1.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.15.1 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/rivo/uniseg v0.4.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/shopspring/decimal v1.2.0 // indirect - github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a // indirect - github.com/sigstore/rekor v1.2.0 // indirect - github.com/sigstore/sigstore v1.6.4 // indirect - github.com/sirupsen/logrus v1.9.1 // indirect + github.com/sigstore/cosign/v2 v2.2.1 // indirect + github.com/sigstore/rekor v1.3.3 // indirect + github.com/sigstore/sigstore v1.7.5 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.1.1 // indirect - github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.16.0 // indirect - github.com/subosito/gotenv v1.4.2 // indirect + github.com/spf13/viper v1.17.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect github.com/technoweenie/multipartstreamer v1.0.1 // indirect - github.com/theupdateframework/go-tuf v0.5.2 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect - github.com/vbatts/tar-split v0.11.3 // indirect + github.com/vbatts/tar-split v0.11.5 // indirect github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect gitlab.com/digitalxero/go-conventional-commit v1.0.7 // indirect - go.mongodb.org/mongo-driver v1.11.3 // indirect + go.mongodb.org/mongo-driver v1.12.1 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/automaxprocs v1.5.3 - golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.15.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/term v0.12.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.134.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf // indirect - google.golang.org/grpc v1.57.0 // indirect + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect + golang.org/x/time v0.4.0 // indirect + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + google.golang.org/api v0.151.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect sigs.k8s.io/kind v0.20.0 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/goreleaser/go.sum b/goreleaser/go.sum index ff05e2f..c503dd1 100644 --- a/goreleaser/go.sum +++ b/goreleaser/go.sum @@ -17,24 +17,24 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= -cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= -cloud.google.com/go/kms v1.15.0 h1:xYl5WEaSekKYN5gGRyhjvZKM22GVBBCzegGNVPy+aIs= -cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -45,10 +45,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= -cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= -code.gitea.io/sdk/gitea v0.16.0 h1:gAfssETO1Hv9QbE+/nhWu7EjoFQYKt6kPoyDytQgw00= -code.gitea.io/sdk/gitea v0.16.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +code.gitea.io/sdk/gitea v0.17.0 h1:8JPBss4+Jf7AE1YcfyiGrngTXE8dFSG3si/bypsTH34= +code.gitea.io/sdk/gitea v0.17.0/go.mod h1:ndkDk99BnfiUCCYEUhpNzi0lpmApXlwRFqClBlOlEBg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -56,20 +56,20 @@ github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0/go.mod h1:7QJP7dr2wznCMeqIrhMgWGf7XpAQnVrJqDm9nvV3Cu4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -97,8 +97,8 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= @@ -118,8 +118,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -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/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c h1:kMFnB0vCcX7IL/m9Y5LO+KQYv+t1CQOiFe6+SV2J7bE= +github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= github.com/ProtonMail/gopenpgp/v2 v2.7.1 h1:Awsg7MPc2gD3I7IFac2qE3Gdls0lZW8SzrFZ3k1oz0s= @@ -134,7 +134,6 @@ github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVK 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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 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/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= @@ -142,69 +141,58 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/atc0005/go-teams-notify/v2 v2.8.0 h1:971J5qivrzBbYMDAdmW7v9s7W2u2jiIRVcY+LaIJqww= github.com/atc0005/go-teams-notify/v2 v2.8.0/go.mod h1:SIeE1UfCcVRYMqP5b+r1ZteHyA/2UAjzWF5COnZ8q0w= -github.com/aws/aws-sdk-go v1.44.314 h1:d/5Jyk/Fb+PBd/4nzQg0JuC2W4A0knrDIzBgK/ggAow= -github.com/aws/aws-sdk-go v1.44.314/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v1.7.1/go.mod h1:L5LuPC1ZgDr2xQS7AmIec/Jlc7O/Y1u2KxJyNVab250= -github.com/aws/aws-sdk-go-v2 v1.16.4/go.mod h1:ytwTPBG6fXTZLxxeeCCWj2/EMYp/xDUgX+OET6TLNNU= -github.com/aws/aws-sdk-go-v2 v1.20.0 h1:INUDpYLt4oiPOJl0XwZDK2OVAVf0Rzo+MGVTv9f+gy8= -github.com/aws/aws-sdk-go-v2 v1.20.0/go.mod h1:uWOr0m0jDsiWw8nnXiqZ+YG6LdvAlGYDLLf2NmHZoy4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11 h1:/MS8AzqYNAhhRNalOmxUvYs8VEbNGifTnzhPFdcRQkQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.11/go.mod h1:va22++AdXht4ccO3kH2SHkHHYvZ2G9Utz+CXKmm2CaU= -github.com/aws/aws-sdk-go-v2/config v1.5.0/go.mod h1:RWlPOAW3E3tbtNAqTwvSW54Of/yP3oiZXMI0xfUdjyA= -github.com/aws/aws-sdk-go-v2/config v1.18.32 h1:tqEOvkbTxwEV7hToRcJ1xZRjcATqwDVsWbAscgRKyNI= -github.com/aws/aws-sdk-go-v2/config v1.18.32/go.mod h1:U3ZF0fQRRA4gnbn9GGvOWLoT2EzzZfAWeKwnVrm1rDc= -github.com/aws/aws-sdk-go-v2/credentials v1.3.1/go.mod h1:r0n73xwsIVagq8RsxmZbGSRQFj9As3je72C2WzUIToc= -github.com/aws/aws-sdk-go-v2/credentials v1.13.31 h1:vJyON3lG7R8VOErpJJBclBADiWTwzcwdkQpTKx8D2sk= -github.com/aws/aws-sdk-go-v2/credentials v1.13.31/go.mod h1:T4sESjBtY2lNxLgkIASmeP57b5j7hTQqCbqG0tWnxC4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0/go.mod h1:2LAuqPx1I6jNfaGDucWfA2zqQCYCOMCDHiCOciALyNw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7 h1:X3H6+SU21x+76LRglk21dFRgMTJMa5QcpW+SqUf5BBg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.7/go.mod h1:3we0V09SwcJBzNlnyovrR2wWJhWmVdqAsmVs4uronv8= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76 h1:DJ1kHj0GI9BbX+XhF0kHxlzOVjcncmDUXmCvXdbfdAE= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.76/go.mod h1:/AZCdswMSgwpB2yMSFfY5H4pVeBLnCuPehdmO/r3xSM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11/go.mod h1:tmUB6jakq5DFNcXsXOA/ZQ7/C8VnSKYkx58OI7Fh79g= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37 h1:zr/gxAZkMcvP71ZhQOcvdm8ReLjFgIXnIn0fw5AM7mo= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.37/go.mod h1:Pdn4j43v49Kk6+82spO3Tu5gSeQXRsxo56ePPQAvFiA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5/go.mod h1:fV1AaS2gFc1tM0RCb015FJ0pvWVUfJZANzjwoO4YakM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31 h1:0HCMIkAkVY9KMgueD8tf4bRTUanzEYvhw7KkPXIMpO0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.31/go.mod h1:fTJDMe8LOFYtqiFFFeHA+SVMAwqLhoq0kcInYoLa9Js= -github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1/go.mod h1:Zy8smImhTdOETZqfyn01iNOe0CNggVbPjCajyaz6Gvg= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38 h1:+i1DOFrW3YZ3apE45tCal9+aDKK6kNEbW6Ib7e1nFxE= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.38/go.mod h1:1/jLp0OgOaWIetycOmycW+vYTYgTZFPttJQRgsI1PoU= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0 h1:U5yySdwt2HPo/pnQec04DImLzWORbeWML1fJiLkKruI= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.0/go.mod h1:EhC/83j8/hL/UB1WmExo3gkElaja/KlmZM/gl1rTfjM= -github.com/aws/aws-sdk-go-v2/service/ecr v1.4.1/go.mod h1:FglZcyeiBqcbvyinl+n14aT/EWC7S1MIH+Gan2iizt0= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5 h1:W9vzPbvX7rOa/FacbQIDfnNrwxHkn5O+DdfmiIS4cHc= -github.com/aws/aws-sdk-go-v2/service/ecr v1.17.5/go.mod h1:vk2+DbeZQFXznxJZSMnYrfnCHYxg4oT4Mdh59wSCkw4= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.4.1/go.mod h1:eD5Eo4drVP2FLTw0G+SMIPWNWvQRGGTtIZR2XeAagoA= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5 h1:Y8dpvUxU4JecYktR5oNFEW+HmUWlA1Oh7mboTVyQWLg= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.13.5/go.mod h1:gW979HGZOrhGvwjAS6VRgav6M9AYH9Kbey6y3GfF/EA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12 h1:uAiiHnWihGP2rVp64fHwzLDrswGjEjsPszwRYMiYQPU= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.12/go.mod h1:fUTHpOXqRQpXvEpDPSa3zxCc2fnpW6YnBoba+eQr+Bg= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32 h1:kvN1jPHr9UffqqG3bSgZ8tx4+1zKVHz/Ktw/BwW6hX8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.32/go.mod h1:QmMEM7es84EUkbYWcpnkx8i5EW2uERPfrTFeOch128Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1/go.mod h1:zceowr5Z1Nh2WVP8bf/3ikB41IZW59E4yIYbg+pC6mw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31 h1:auGDJ0aLZahF5SPvkJ6WcUuX7iQ7kyl2MamV7Tm8QBk= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.31/go.mod h1:3+lloe3sZuBQw1aBc5MyndvodzQlyqCZ7x1QPDHaWP4= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0 h1:Wgjft9X4W5pMeuqgPCHIQtbZ87wsgom7S5F8obreg+c= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.0/go.mod h1:FWNzS4+zcWAP05IF7TDYTY1ysZAzIvogxWaDT9p8fsA= -github.com/aws/aws-sdk-go-v2/service/kms v1.24.1 h1:zDmx9yZjSYDaeakQVN16qfsLxhBeAxgclioB0+rOCDM= -github.com/aws/aws-sdk-go-v2/service/kms v1.24.1/go.mod h1:yrlimpsAJc9fXj3jHC7Ig2Zb4iMAoSJ/VVzChf22dZk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1 h1:mTgFVlfQT8gikc5+/HwD8UL9jnUro5MGv8n/VEYF12I= -github.com/aws/aws-sdk-go-v2/service/s3 v1.38.1/go.mod h1:6SOWLiobcZZshbmECRTADIRYliPL0etqFSigauQEeT0= -github.com/aws/aws-sdk-go-v2/service/sso v1.3.1/go.mod h1:J3A3RGUvuCZjvSuZEcOpHDnzZP/sKbhDWV2T1EOzFIM= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.1 h1:DSNpSbfEgFXRV+IfEcKE5kTbqxm+MeF5WgyeRlsLnHY= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.1/go.mod h1:TC9BubuFMVScIU+TLKamO6VZiYTkYoEHqlSQwAe2omw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1 h1:hd0SKLMdOL/Sl6Z0np1PX9LeH2gqNtBe0MhTedA8MGI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1/go.mod h1:XO/VcyoQ8nKyKfFW/3DMsRQXsfh/052tHTWmg3xBXRg= -github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BVRASvcU7gYZB9PUgPiByXg= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.1 h1:pAOJj+80tC8sPVgSDHzMYD6KLWsaLQ1kZw31PTeORbs= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.1/go.mod h1:G8SbvL0rFk4WOJroU8tKBczhsbhj2p/YY7qeJezJ3CI= -github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aws/smithy-go v1.11.2/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= -github.com/aws/smithy-go v1.14.0 h1:+X90sB94fizKjDmwb4vyl2cTTPXTE5E2G/1mjByb0io= -github.com/aws/smithy-go v1.14.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04 h1:p2I85zYI9z5/c/3Q0LiO3RtNXcmXHTtJfml/hV16zNg= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220517224237-e6f29200ae04/go.mod h1:Z+bXnIbhKJYSvxNwsNnwde7pDKxuqlEZCbUBoTwAqf0= +github.com/aws/aws-sdk-go v1.48.3 h1:btYjT+opVFxUbRz+qSCjJe07cdX82BHmMX/FXYmoL7g= +github.com/aws/aws-sdk-go v1.48.3/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= +github.com/aws/aws-sdk-go-v2 v1.23.1 h1:qXaFsOOMA+HsZtX8WoCa+gJnbyW7qyFFBlPqvTSzbaI= +github.com/aws/aws-sdk-go-v2 v1.23.1/go.mod h1:i1XDttT4rnf6vxc9AuskLc6s7XBee8rlLilKlc03uAA= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 h1:ZY3108YtBNq96jNZTICHxN1gSBSbnvIdYwwqnvCV4Mc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1/go.mod h1:t8PYl/6LzdAqsU4/9tz28V/kU+asFePvpOMkdul0gEQ= +github.com/aws/aws-sdk-go-v2/config v1.25.5 h1:UGKm9hpQS2hoK8CEJ1BzAW8NbUpvwDJJ4lyqXSzu8bk= +github.com/aws/aws-sdk-go-v2/config v1.25.5/go.mod h1:Bf4gDvy4ZcFIK0rqDu1wp9wrubNba2DojiPB2rt6nvI= +github.com/aws/aws-sdk-go-v2/credentials v1.16.4 h1:i7UQYYDSJrtc30RSwJwfBKwLFNnBTiICqAJ0pPdum8E= +github.com/aws/aws-sdk-go-v2/credentials v1.16.4/go.mod h1:Kdh/okh+//vQ/AjEt81CjvkTo64+/zIE4OewP7RpfXk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5 h1:KehRNiVzIfAcj6gw98zotVbb/K67taJE0fkfgM6vzqU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5/go.mod h1:VhnExhw6uXy9QzetvpXDolo1/hjhx4u9qukBGkuUwjs= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2 h1:3q7vcLhq6JXqTLPpPuDJgw3f+DFqd4p+BWL2DlplRPc= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.14.2/go.mod h1:9aqZoo/OeMBK/Nf3wzQzTlM92u7Bip256GHpY0oQbX4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 h1:LAm3Ycm9HJfbSCd5I+wqC2S9Ej7FPrgr5CQoOljJZcE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4/go.mod h1:xEhvbJcyUf/31yfGSQBe01fukXwXJ0gxDp7rLfymWE0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 h1:4GV0kKZzUxiWxSVpn/9gwR0g21NF1Jsyduzo9rHgC/Q= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4/go.mod h1:dYvTNAggxDZy6y1AF7YDwXsPuHFy/VNEpEI/2dWK9IU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 h1:uR9lXYjdPX0xY+NhvaJ4dD8rpSRz5VY81ccIIoNG+lw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 h1:40Q4X5ebZruRtknEZH/bg91sT5pR853F7/1X9QRbI54= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4/go.mod h1:u77N7eEECzUv7F0xl2gcfK/vzc8wcjWobpy+DcrLJ5E= +github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2 h1:y6LX9GUoEA3mO0qpFl1ZQHj1rFyPWVphlzebiSt2tKE= +github.com/aws/aws-sdk-go-v2/service/ecr v1.20.2/go.mod h1:Q0LcmaN/Qr8+4aSBrdrXXePqoX0eOuYpJLbYpilmWnA= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2 h1:PpbXaecV3sLAS6rjQiaKw4/jyq3Z8gNzmoJupHAoBp0= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.18.2/go.mod h1:fUHpGXr4DrXkEDpGAjClPsviWf+Bszeb0daKE0blxv8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 h1:rpkF4n0CyFcrJUG/rNNohoTmhtWlFTRI4BsZOh9PvLs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1/go.mod h1:l9ymW25HOqymeU2m1gbUQ3rUIsTwKs8gYHXkqDQUhiI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4 h1:6DRKQc+9cChgzL5gplRGusI5dBGeiEod4m/pmGbcX48= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.4/go.mod h1:s8ORvrW4g4v7IvYKIAoBg17w3GQ+XuwXDXYrQ5SkzU0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4 h1:rdovz3rEu0vZKbzoMYPTehp0E8veoE9AyfzqCr5Eeao= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.4/go.mod h1:aYCGNjyUCUelhofxlZyj63srdxWUSsBSGg5l6MCuXuE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4 h1:o3DcfCxGDIT20pTbVKVhp3vWXOj/VvgazNJvumWeYW0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.4/go.mod h1:Uy0KVOxuTK2ne+/PKQ+VvEeWmjMMksE17k/2RK/r5oM= +github.com/aws/aws-sdk-go-v2/service/kms v1.26.3 h1:li5dFiK1tkAFXvOC9QPWAVWqTu8ZxpIR0KzKmof6TIE= +github.com/aws/aws-sdk-go-v2/service/kms v1.26.3/go.mod h1:N3++/sLV97B8Zliz7KRqNcojOX7iMBZWKiuit5FKtH0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0 h1:FJTWR2nP1ddLIbk4n7Glw8wGbeWGHaViUwADPzE/EBo= +github.com/aws/aws-sdk-go-v2/service/s3 v1.44.0/go.mod h1:dqJ5JBL0clzgHriH35Amx3LRFY6wNIPUX7QO/BerSBo= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.3 h1:CdsSOGlFF3Pn+koXOIpTtvX7st0IuGsZ8kJqcWMlX54= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.3/go.mod h1:oA6VjNsLll2eVuUoF2D+CMyORgNzPEW/3PyUdq6WQjI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1 h1:cbRqFTVnJV+KRpwFl76GJdIZJKKCdTPnjUZ7uWh3pIU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1/go.mod h1:hHL974p5auvXlZPIjJTblXJpbkfK4klBczlsEaMCGVY= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 h1:yEvZ4neOQ/KpUqyR+X0ycUTW/kVRNR4nDZ38wStHGAA= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.4/go.mod h1:feTnm2Tk/pJxdX+eooEsxvlvTWBvDm6CasRZ+JOs2IY= +github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.17.0 h1:wWJD7LX6PBV6etBUwO0zElG0nWN9rUhp0WdYeHSHAaI= +github.com/aws/smithy-go v1.17.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8 h1:SoFYaT9UyGkR0+nogNyD/Lj+bsixB+SNuAS4ABlEs6M= +github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20231024185945-8841054dbdb8/go.mod h1:2JF49jcDOrLStIXN/j/K1EKRq8a8R2qRnlZA6/o/c7c= 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= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= @@ -230,42 +218,38 @@ github.com/caarlos0/go-shellwords v1.0.12 h1:HWrUnu6lGbWfrDcFiHcZiwOLzHWjjrPVehU github.com/caarlos0/go-shellwords v1.0.12/go.mod h1:bYeeX1GrTLPl5cAMYEzdm272qdsQAZiaHgeF0KTk1Gw= github.com/caarlos0/go-version v0.1.1 h1:1bikKHkGGVIIxqCmufhSSs3hpBScgHGacrvsi8FuIfc= github.com/caarlos0/go-version v0.1.1/go.mod h1:Ze5Qx4TsBBi5FyrSKVg1Ibc44KGV/llAaKGp86oTwZ0= -github.com/caarlos0/log v0.4.2 h1:Zi5DNvCJLU0zJAI7B3sYf2zRfHW3xS8ahKQg1eh5/LQ= -github.com/caarlos0/log v0.4.2/go.mod h1:xwKkgWnQMD39Cb/HgTWrhsG3l3MTTGwf2UZqbki2eqM= -github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I= -github.com/caarlos0/sshmarshal v0.1.0/go.mod h1:7Pd/0mmq9x/JCzKauogNjSQEhivBclCQHfr9dlpDIyA= +github.com/caarlos0/log v0.4.4 h1:LnvgBz/ofsJ00AupP/cEfksJSZglb1L69g4Obk/sdAc= +github.com/caarlos0/log v0.4.4/go.mod h1:+AmCI9Liv5LKXmzFmFI1htuHdTTj/0R3KuoP9DMY7Mo= github.com/caarlos0/testfs v0.4.4 h1:3PHvzHi5Lt+g332CiShwS8ogTgS3HjrmzZxCm6JCDr8= github.com/caarlos0/testfs v0.4.4/go.mod h1:bRN55zgG4XCUVVHZCeU+/Tz1Q6AxEJOEJTliBy+1DMk= github.com/cavaliergopher/cpio v1.0.1 h1:KQFSeKmZhv0cr+kawA3a0xTQCU4QxXF1vhU7P7av2KM= github.com/cavaliergopher/cpio v1.0.1/go.mod h1:pBdaqQjnvXxdS/6CvNDwIANIFSP0xRKI16PX4xejRQc= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= -github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charmbracelet/keygen v0.4.3 h1:ywOZRwkDlpmkawl0BgLTxaYWDSqp6Y4nfVVmgyyO1Mg= -github.com/charmbracelet/keygen v0.4.3/go.mod h1:4e4FT3HSdLU/u83RfJWvzJIaVb8aX4MxtDlfXwpDJaI= -github.com/charmbracelet/lipgloss v0.8.0 h1:IS00fk4XAHcf8uZKc3eHeMUTCxUH6NkaTrdyCQk84RU= -github.com/charmbracelet/lipgloss v0.8.0/go.mod h1:p4eYUZZJ/0oXTuCQKFF8mqyKCz0ja6y+7DniDDw5KKU= +github.com/charmbracelet/keygen v0.5.0 h1:XY0fsoYiCSM9axkrU+2ziE6u6YjJulo/b9Dghnw6MZc= +github.com/charmbracelet/keygen v0.5.0/go.mod h1:DfvCgLHxZ9rJxdK0DGw3C/LkV4SgdGbnliHcObV3L+8= +github.com/charmbracelet/lipgloss v0.9.1 h1:PNyd3jvaJbg4jRHKWXnCj1akQm4rh8dbEzN1p/u1KWg= +github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9Pmr+v1VEawJl6I= +github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d h1:+o+e/8hf7cG0SbAzEAm/usJ8qoZPgFXhudLjop+TM0g= +github.com/charmbracelet/x/exp/ordered v0.0.0-20231010190216-1cb11efc897d/go.mod h1:aoG4bThKYIOnyB55r202eHqo6TkN7ZXV+cu4Do3eoBQ= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= -github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08 h1:9Qh4lJ/KMr5iS1zfZ8I97+3MDpiKjl+0lZVUNBhdvRs= -github.com/chrismellard/docker-credential-acr-env v0.0.0-20220327082430-c57b701bfc08/go.mod h1:MAuu1uDJNOS3T3ui0qmKdPUwm59+bO19BbTph2wZafE= +github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589 h1:krfRl01rzPzxSxyLyrChD+U+MzsBXbm0OwYYB67uF+4= +github.com/chrismellard/docker-credential-acr-env v0.0.0-20230304212654-82a0ddb27589/go.mod h1:OuDyvmLnMCwa2ep4Jkm6nyA0ocJuZlGyk2gGseVzERM= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.5 h1:g+wWynZqVALYAlpSQFAa7TscDnUK8mKYtrxMpw6AUKo= +github.com/cloudflare/circl v1.3.5/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= @@ -274,15 +258,16 @@ github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNA github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -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/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/cpuguy83/go-md2man/v2 v2.0.3/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/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= github.com/dghubble/go-twitter v0.0.0-20211115160449-93a8679adecb h1:7ENzkH+O3juL+yj2undESLTaAeRllHwCs/b8z6aWSfc= @@ -293,27 +278,26 @@ github.com/dghubble/sling v1.4.0 h1:/n8MRosVTthvMbwlNZgLx579OGVjUOy3GNEv5BIqAWY= github.com/dghubble/sling v1.4.0/go.mod h1:0r40aNsU9EdDUVBNhfCstAtFgutjgJGYbO1oNzkMoM8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/disgoorg/disgo v0.16.9 h1:QkdfM930SSi/p5TaJF2/BxjUKPQVcA3zu6sGtocSUhg= -github.com/disgoorg/disgo v0.16.9/go.mod h1:QnvUII334g/LJzjOmhYGCJzbl38Og83iXCEe28DklVM= +github.com/disgoorg/disgo v0.17.0 h1:/LcgXgPDhzHt3GkQ4cpjmIJBim1/VYfS31VhGYif3Ms= +github.com/disgoorg/disgo v0.17.0/go.mod h1:AE2J/8oLR2PtYfqcARsk1mgBxQ5z3Z1OD6Lc2SA0gak= github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys= github.com/disgoorg/json v1.1.0/go.mod h1:BHDwdde0rpQFDVsRLKhma6Y7fTbQKub/zdGO5O9NqqA= -github.com/disgoorg/log v1.2.1 h1:kZYAWkUBcGy4LbZcgYtgYu49xNVLy+xG5Uq3yz5VVQs= -github.com/disgoorg/log v1.2.1/go.mod h1:hhQWYTFTnIGzAuFPZyXJEi11IBm9wq+/TVZt/FEwX0o= github.com/disgoorg/snowflake/v2 v2.0.1 h1:CuUxGLwggUxEswZOmZ+mZ5i0xSumQdXW9tXW7uGqe+0= github.com/disgoorg/snowflake/v2 v2.0.1/go.mod h1:SPU9c2CNn5DSyb86QcKtdZgix9osEtKrHLW4rMhfLCs= github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8 h1:zuxvqNfQKyGNH3a1yFh1ofD4Y7ycgdwQhHX6QRH+Cwo= github.com/distribution/distribution/v3 v3.0.0-20221021092657-c47a966fded8/go.mod h1:6rIc5NMSjXjjnwzWWy3HAm9gDBu+X7aCzL8VrHIKgxM= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= -github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.2+incompatible h1:eATx+oLz9WdNVkQrr0qjQ8HvRJ4bOOxfzEo8R+dA3cg= -github.com/docker/docker v24.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= -github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/cli v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= +github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8= +github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -332,24 +316,16 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= -github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01 h1:IeaD1VDVBPlx3viJT9Md8if8IxxJnO+x0JCGb054heg= -github.com/facebookgo/limitgroup v0.0.0-20150612190941-6abd8d71ec01/go.mod h1:ypD5nozFk9vcGw1ATYefw6jHe/jZP++Z15/+VTMcWhc= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52 h1:a4DFiKFJiDRGFD1qIcqGLX/WlUMD9dyLSLDt+9QZgt8= -github.com/facebookgo/muster v0.0.0-20150708232844-fd3d7953fd52/go.mod h1:yIquW87NGRw1FU5p5lEkpnt/QxoH5uPAOUlOVkAUuMg= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/frankban/quicktest v1.14.4/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/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= 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-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= @@ -374,12 +350,13 @@ github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9Qy github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= -github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= +github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= @@ -401,8 +378,9 @@ github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KA github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= @@ -448,6 +426,8 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.1.0 h1:UGKbA/IPjtS6zLcdB7i5TyACMgSbOTiR8qzXgw8HWQU= +github.com/golang-jwt/jwt/v5 v5.1.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -493,15 +473,15 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= 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-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ= -github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= -github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= -github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.17.0 h1:5p+zYs/R4VGHkhyvgWurWrpJ2hW4Vv9fQI+GzdcwXLk= +github.com/google/go-containerregistry v0.17.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-github/v57 v57.0.0 h1:L+Y3UPTY8ALM8x+TV0lg+IEBI+upibemtBD8Q9u7zHs= +github.com/google/go-github/v57 v57.0.0/go.mod h1:s0omdnye0hvK/ecLvpsGfJMiRt85PimQh4oygmLIxHw= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-replayers/grpcreplay v1.1.0 h1:S5+I3zYyZ+GQz68OfbURDdt/+cSMqCK1wrvNx7WBzTE= @@ -509,8 +489,8 @@ github.com/google/go-replayers/grpcreplay v1.1.0/go.mod h1:qzAvJ8/wi57zq7gWqaE6A github.com/google/go-replayers/httpreplay v1.2.0 h1:VM1wEyyjaoU53BwrOnaf9VhAyQQEEioJvFYxYcLRKzk= github.com/google/go-replayers/httpreplay v1.2.0/go.mod h1:WahEFFZZ7a1P4VM1qEeHy+tME4bwyqPcwWbNlUI1Mcg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/ko v0.14.1 h1:CU+iuIYOOUoSLpBi/gYhnJerig/an/6/cUaEZIOWSGo= -github.com/google/ko v0.14.1/go.mod h1:OrNWWNU4PEdaOArS3M2trorYoIbUwaZYBUHPOw6CVL0= +github.com/google/ko v0.15.1 h1:++5WJTTjSLyObGK6NYdnkHGw4XiUkFD2ldk2mbJ9vd8= +github.com/google/ko v0.15.1/go.mod h1:2hpqDZDqly3yVDZbBCohSnUrmwOXw7MBCqujBBu6rMU= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -530,8 +510,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/rpmpack v0.5.0 h1:L16KZ3QvkFGpYhmp23iQip+mx1X39foEsqszjMNBm8A= github.com/google/rpmpack v0.5.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI= -github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 h1:SJ+NtwL6QaZ21U+IrK7d0gGgpjGGvd2kz+FzTHVzdqI= github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2/go.mod h1:Tv1PlzqC9t8wNnpPdctvtSUOPUUg4SHeE6vR1Ir2hmg= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -539,12 +519,12 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= -github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= @@ -556,37 +536,33 @@ github.com/goreleaser/chglog v0.5.0 h1:Sk6BMIpx8+vpAf8KyPit34OgWui8c7nKTMHhYx88j github.com/goreleaser/chglog v0.5.0/go.mod h1:Ri46M3lrMuv76FHszs3vtABR8J8k1w9JHYAzxeeOl28= github.com/goreleaser/fileglob v1.3.0 h1:/X6J7U8lbDpQtBvGcwwPS6OpzkNVlVEsFUVRx9+k+7I= github.com/goreleaser/fileglob v1.3.0/go.mod h1:Jx6BoXv3mbYkEzwm9THo7xbr5egkAraxkGorbJb4RxU= -github.com/goreleaser/nfpm/v2 v2.33.1 h1:EkdAzZyVhAI9JC1vjmjjbmnNzyH1J6Cu4JCsA7YcQuc= -github.com/goreleaser/nfpm/v2 v2.33.1/go.mod h1:8wwWWvJWmn84xo/Sqiv0aMvEGTHlHZTXTEuVSgQpkIM= +github.com/goreleaser/nfpm/v2 v2.35.1 h1:QpDus/yMTwG/IpRxI/hL7VuRII1mzYwbLInsPiWrtaM= +github.com/goreleaser/nfpm/v2 v2.35.1/go.mod h1:KeO5wxOHyU1nPFO5siSfw6Ds5dKyy0E6y89/ypM7+ZI= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= -github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= -github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= +github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/honeycombio/beeline-go v1.10.0 h1:cUDe555oqvw8oD76BQJ8alk7FP0JZ/M/zXpNvOEDLDc= -github.com/honeycombio/beeline-go v1.10.0/go.mod h1:Zz5WMeQCJzFt2Mvf8t6HC1X8RLskLVR/e8rvcmXB1G8= -github.com/honeycombio/libhoney-go v1.16.0 h1:kPpqoz6vbOzgp7jC6SR7SkNj7rua7rgxvznI6M3KdHc= -github.com/honeycombio/libhoney-go v1.16.0/go.mod h1:izP4fbREuZ3vqC4HlCAmPrcPT9gxyxejRjGtCYpmBn0= +github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= +github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -597,8 +573,8 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/invopop/jsonschema v0.9.0 h1:m1Fe5PN4X9V7P1TCF+pA8Xly3Vj3pY905klC++8oOpM= -github.com/invopop/jsonschema v0.9.0/go.mod h1:uMhbTEOXoPcOKzdYRfk914W6UTGA/cVcgEQxXh1MJ7g= +github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI= +github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -608,8 +584,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y 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/jmhodges/clock v0.0.0-20160418191101-880ee4c33548 h1:dYTbLf4m0a5u0KLmPfB6mgxbcV7588bOCx79hxa5Sr4= -github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo= +github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= +github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -627,8 +603,8 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -645,8 +621,8 @@ 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/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf h1:ndns1qx/5dL43g16EQkPV/i8+b3l5bYQwLeoSBe7tS8= -github.com/letsencrypt/boulder v0.0.0-20221109233200-85aa52084eaf/go.mod h1:aGkAgvWY/IUcVFfuly53REpfv5edu25oij+qHRFaraA= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC67RX96eTkYD2f53NDHhrq/7robWTAfk4s= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= @@ -671,11 +647,11 @@ github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-mastodon v0.0.6 h1:lqU1sOeeIapaDsDUL6udDZIzMb2Wqapo347VZlaOzf0= github.com/mattn/go-mastodon v0.0.6/go.mod h1:cg7RFk2pcUfHZw/IvKe1FUzmlq5KnLFqs7eV2PHplV8= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -691,8 +667,8 @@ github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -719,8 +695,8 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= -github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= +github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -731,8 +707,8 @@ github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAv github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= +github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= 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/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -742,34 +718,34 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= -github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -778,29 +754,34 @@ github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncj github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 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/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= +github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b h1:qYTY2tN72LhgDj2rtWG+LI6TXFl2ygFQQ4YezfVaGQE= github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b/go.mod h1:/pA7k3zsXKdjjAiUhB5CjuKib9KJGCaLvZwtxGC8U0s= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= +github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a h1:4j4hrwYblDkNouA2fZ/hKvtJhV/N+jJGhLoRXUNLYmE= -github.com/sigstore/cosign/v2 v2.0.3-0.20230523133326-0544abd8fc8a/go.mod h1:em8IHAamkOMXzXHjHx5NdLO1d8erWDMlGRlx0XE5TtI= -github.com/sigstore/rekor v1.2.0 h1:ahlnoEY3zo8Vc+eZLPobamw6YfBTAbI0lthzUQd6qe4= -github.com/sigstore/rekor v1.2.0/go.mod h1:zcFO54qIg2G1/i0sE/nvmELUOng/n0MPjTszRYByVPo= -github.com/sigstore/sigstore v1.6.4 h1:jH4AzR7qlEH/EWzm+opSpxCfuUcjHL+LJPuQE7h40WE= -github.com/sigstore/sigstore v1.6.4/go.mod h1:pjR64lBxnjoSrAr+Ydye/FV73IfrgtoYlAI11a8xMfA= +github.com/sigstore/cosign/v2 v2.2.1 h1:HauwPOMYYaVdQsnvUbF0P+ZsVPrkTB0G7Eq65+z1bQc= +github.com/sigstore/cosign/v2 v2.2.1/go.mod h1:4l1hELKWoFYzZ/p7+umrK6dhdBoBW0JbQRCIjOZIM9g= +github.com/sigstore/rekor v1.3.3 h1:pLZ0UjutL7SUdeiysmJCabnRqvI7DsIxnJj8c/+e0Fk= +github.com/sigstore/rekor v1.3.3/go.mod h1:GO3udo2Xiu3/Uz4/U3vgjVq7w5Yq7eSpAFP1z7gE+yA= +github.com/sigstore/sigstore v1.7.5 h1:ij55dBhLwjICmLTBJZm7SqoQLdsu/oowDanACcJNs48= +github.com/sigstore/sigstore v1.7.5/go.mod h1:9OCmYWhzuq/G4e1cy9m297tuMRJ1LExyrXY3ZC3Zt/s= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ= -github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.1.1 h1:MTk78x9FPgDFVFkDLTrsnnfCJl7g1C/nnKvePgrIngE= github.com/skeema/knownhosts v1.1.1/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/slack-go/slack v0.12.3 h1:92/dfFU8Q5XP6Wp5rr5/T5JHLM5c5Smtn53fhToAP88= @@ -809,22 +790,22 @@ github.com/smartystreets/assertions v1.13.1 h1:Ef7KhSmjZcK6AVf9YbJdvPYG9avaF0Zxu github.com/smartystreets/assertions v1.13.1/go.mod h1:cXr/IwVfSo/RbCSPhoAPv73p3hlSdrBH/b3SdnW/LMY= github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w= github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= 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= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= +github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -839,19 +820,14 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= -github.com/theupdateframework/go-tuf v0.5.2 h1:habfDzTmpbzBLIFGWa2ZpVhYvFBoK0C1onC3a4zuPRA= -github.com/theupdateframework/go-tuf v0.5.2/go.mod h1:SyMV5kg5n4uEclsyxXJZI2UxPFJNDc4Y+r7wv+MlvTA= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= -github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y= @@ -859,28 +835,25 @@ github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFy 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.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= -github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= -github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= +github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= +github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= 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/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= -github.com/xanzy/go-gitlab v0.91.1 h1:gnV57IPGYywWer32oXKBcdmc8dVxeKl3AauV8Bu17rw= -github.com/xanzy/go-gitlab v0.91.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= +github.com/xanzy/go-gitlab v0.95.2 h1:4p0IirHqEp5f0baK/aQqr4TR57IsD+8e4fuyAA1yi88= +github.com/xanzy/go-gitlab v0.95.2/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= 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/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -901,8 +874,8 @@ gitlab.com/digitalxero/go-conventional-commit v1.0.7/go.mod h1:05Xc2BFsSyC5tKhK0 go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= -go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= +go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE= +go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -911,11 +884,12 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= -gocloud.dev v0.34.0 h1:LzlQY+4l2cMtuNfwT2ht4+fiXwWf/NmPTnXUlLmGif4= -gocloud.dev v0.34.0/go.mod h1:psKOachbnvY3DAOPbsFVmLIErwsbWPUG2H5i65D38vE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +gocloud.dev v0.35.0 h1:x/Gtt5OJdT4j+ir1AXAIXb7bBnFawXAAaJptCUGk3HU= +gocloud.dev v0.35.0/go.mod h1:wbyF+BhfdtLWyUtVEWRW13hFLb1vXnV2ovEhYGQe3ck= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -928,7 +902,6 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -936,8 +909,8 @@ 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.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -948,8 +921,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -975,8 +948,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1014,12 +987,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1029,8 +1001,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1045,8 +1017,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1103,23 +1075,19 @@ golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/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.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1133,13 +1101,13 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= +golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1196,14 +1164,14 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 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.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1223,16 +1191,17 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= -google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= +google.golang.org/api v0.151.0 h1:FhfXLO/NFdJIzQtCqjpysWwqKk8AzGWBUhMIx67cVDU= +google.golang.org/api v0.151.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1256,7 +1225,6 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= @@ -1270,12 +1238,12 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf h1:v5Cf4E9+6tawYrs/grq1q1hFpGtzlGFzgWHqwt6NFiU= -google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf h1:guOdSPaeFgN+jEJwTo1dQ71hdBm+yKSCCKuTRkJzcVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg= +google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1289,14 +1257,11 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= -google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1315,8 +1280,6 @@ google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1325,17 +1288,16 @@ gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/go-jose/go-jose.v2 v2.6.1 h1:qEzJlIDmG9q5VO0M/o8tGS65QMHMS1w01TQJB1VPJ4U= +gopkg.in/go-jose/go-jose.v2 v2.6.1/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= 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.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/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/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1361,5 +1323,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/kind v0.20.0 h1:f0sc3v9mQbGnjBUaqSFST1dwIuiikKVGgoTwpoP33a8= sigs.k8s.io/kind v0.20.0/go.mod h1:aBlbxg08cauDgZ612shr017/rZwqd7AS563FvpWKPVs= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/goreleaser/int/artifact/artifact_test.go b/goreleaser/int/artifact/artifact_test.go index e492ffa..0fe12e8 100644 --- a/goreleaser/int/artifact/artifact_test.go +++ b/goreleaser/int/artifact/artifact_test.go @@ -117,7 +117,7 @@ func TestFilter(t *testing.T) { require.Len(t, artifacts.Filter(ByGoos("darwin")).items, 2) require.Len(t, artifacts.Filter(ByGoarch("amd64")).items, 4) - require.Len(t, artifacts.Filter(ByGoarch("386")).items, 0) + require.Empty(t, artifacts.Filter(ByGoarch("386")).items) require.Len(t, artifacts.Filter(ByGoamd64("v1")).items, 1) require.Len(t, artifacts.Filter(ByGoamd64("v2")).items, 1) @@ -125,10 +125,10 @@ func TestFilter(t *testing.T) { require.Len(t, artifacts.Filter(ByGoamd64("v4")).items, 1) require.Len(t, artifacts.Filter(ByGoarm("6")).items, 1) - require.Len(t, artifacts.Filter(ByGoarm("7")).items, 0) + require.Empty(t, artifacts.Filter(ByGoarm("7")).items) require.Len(t, artifacts.Filter(ByType(Checksum)).items, 2) - require.Len(t, artifacts.Filter(ByType(Binary)).items, 0) + require.Empty(t, artifacts.Filter(ByType(Binary)).items) require.Len(t, artifacts.Filter(OnlyReplacingUnibins).items, 9) require.Len(t, artifacts.Filter(And(OnlyReplacingUnibins, ByGoos("darwin"))).items, 1) @@ -492,7 +492,7 @@ func TestByExts(t *testing.T) { require.Len(t, artifacts.Filter(ByExt("deb")).items, 2) require.Len(t, artifacts.Filter(ByExt("rpm")).items, 1) require.Len(t, artifacts.Filter(ByExt("rpm", "deb")).items, 3) - require.Len(t, artifacts.Filter(ByExt("foo")).items, 0) + require.Empty(t, artifacts.Filter(ByExt("foo")).items) } func TestByFormats(t *testing.T) { diff --git a/goreleaser/int/builders/golang/build.go b/goreleaser/int/builders/golang/build.go index 429a8c6..3f4286b 100644 --- a/goreleaser/int/builders/golang/build.go +++ b/goreleaser/int/builders/golang/build.go @@ -8,6 +8,7 @@ import ( "os" "os/exec" "path/filepath" + "slices" "strings" "dario.cat/mergo" @@ -283,6 +284,9 @@ func buildGoBuildLine(ctx *context.Context, build config.Build, details config.B return cmd, err } cmd = append(cmd, flags...) + if build.Command == "test" && !slices.Contains(flags, "-c") { + cmd = append(cmd, "-c") + } asmflags, err := processFlags(ctx, artifact, env, details.Asmflags, "-asmflags=") if err != nil { diff --git a/goreleaser/int/builders/golang/build_test.go b/goreleaser/int/builders/golang/build_test.go index 75bfb82..6cbeef6 100644 --- a/goreleaser/int/builders/golang/build_test.go +++ b/goreleaser/int/builders/golang/build_test.go @@ -1175,6 +1175,15 @@ func TestBuildGoBuildLine(t *testing.T) { }, strings.Fields("go test -c -o foo.test .")) }) + t.Run("build test always as c flags", func(t *testing.T) { + requireEqualCmd(t, config.Build{ + Main: ".", + GoBinary: "go", + Command: "test", + Binary: "foo.test", + }, strings.Fields("go test -c -o foo.test .")) + }) + t.Run("ldflags1", func(t *testing.T) { requireEqualCmd(t, config.Build{ Main: ".", @@ -1256,13 +1265,13 @@ func TestOverrides(t *testing.T) { }, ) require.NoError(t, err) - require.Equal(t, dets, config.BuildDetails{ + require.Equal(t, config.BuildDetails{ Ldflags: []string{"overridden"}, Gcflags: []string{"gcflag1"}, Asmflags: []string{"asm1"}, Tags: []string{"tag1"}, Env: []string{}, - }) + }, dets) }) t.Run("with template", func(t *testing.T) { @@ -1288,11 +1297,11 @@ func TestOverrides(t *testing.T) { }, ) require.NoError(t, err) - require.Equal(t, dets, config.BuildDetails{ + require.Equal(t, config.BuildDetails{ Ldflags: []string{"overridden"}, Asmflags: []string{"asm1"}, Env: []string{}, - }) + }, dets) }) t.Run("with invalid template", func(t *testing.T) { @@ -1336,10 +1345,10 @@ func TestOverrides(t *testing.T) { }, ) require.NoError(t, err) - require.Equal(t, dets, config.BuildDetails{ + require.Equal(t, config.BuildDetails{ Ldflags: []string{"overridden"}, Env: []string{}, - }) + }, dets) }) t.Run("with gomips", func(t *testing.T) { @@ -1366,10 +1375,10 @@ func TestOverrides(t *testing.T) { }, ) require.NoError(t, err) - require.Equal(t, dets, config.BuildDetails{ + require.Equal(t, config.BuildDetails{ Ldflags: []string{"overridden"}, Env: []string{}, - }) + }, dets) }) } diff --git a/goreleaser/int/client/git.go b/goreleaser/int/client/git.go index 368181c..d6b5d74 100644 --- a/goreleaser/int/client/git.go +++ b/goreleaser/int/client/git.go @@ -10,6 +10,7 @@ import ( "sync" "github.com/caarlos0/log" + "github.com/charmbracelet/x/exp/ordered" "github.com/goreleaser/goreleaser/int/git" "github.com/goreleaser/goreleaser/int/pipe" "github.com/goreleaser/goreleaser/int/tmpl" @@ -54,7 +55,7 @@ func (g *gitClient) CreateFiles( return pipe.Skip("url is empty") } - repo.Name = firstNonEmpty(repo.Name, nameFromURL(url)) + repo.Name = ordered.First(repo.Name, nameFromURL(url)) key, err := tmpl.New(ctx).Apply(repo.PrivateKey) if err != nil { @@ -68,7 +69,7 @@ func (g *gitClient) CreateFiles( sshcmd, err := tmpl.New(ctx).WithExtraFields(tmpl.Fields{ "KeyPath": key, - }).Apply(firstNonEmpty(repo.GitSSHCommand, DefaulGitSSHCommand)) + }).Apply(ordered.First(repo.GitSSHCommand, DefaulGitSSHCommand)) if err != nil { return fmt.Errorf("git: failed to template ssh command: %w", err) } @@ -93,19 +94,20 @@ func (g *gitClient) CreateFiles( {"config", "--local", "user.name", commitAuthor.Name}, {"config", "--local", "user.email", commitAuthor.Email}, {"config", "--local", "commit.gpgSign", "false"}, - {"config", "--local", "init.defaultBranch", firstNonEmpty(g.branch, "master")}, + {"config", "--local", "init.defaultBranch", ordered.First(g.branch, "master")}, }); err != nil { return fmt.Errorf("git: failed to setup local repository: %w", err) } - if g.branch != "" { + if g.branch == "" { + return nil + } + if err := runGitCmds(ctx, cwd, env, [][]string{ + {"checkout", g.branch}, + }); err != nil { if err := runGitCmds(ctx, cwd, env, [][]string{ - {"checkout", g.branch}, + {"checkout", "-b", g.branch}, }); err != nil { - if err := runGitCmds(ctx, cwd, env, [][]string{ - {"checkout", "-b", g.branch}, - }); err != nil { - return fmt.Errorf("git: could not checkout branch %s: %w", g.branch, err) - } + return fmt.Errorf("git: could not checkout branch %s: %w", g.branch, err) } } return nil @@ -211,13 +213,6 @@ func runGitCmds(ctx *context.Context, cwd string, env []string, cmds [][]string) return nil } -func firstNonEmpty(s1, s2 string) string { - if s1 != "" { - return s1 - } - return s2 -} - func nameFromURL(url string) string { return strings.TrimSuffix(url[strings.LastIndex(url, "/")+1:], ".git") } diff --git a/goreleaser/int/client/git_test.go b/goreleaser/int/client/git_test.go index 7aaac83..cea4ffb 100644 --- a/goreleaser/int/client/git_test.go +++ b/goreleaser/int/client/git_test.go @@ -25,7 +25,7 @@ func TestGitClient(t *testing.T) { }) repo := Repo{ GitURL: url, - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), Name: "test1", } cli := NewGitUploadClient(repo.Branch) @@ -60,7 +60,7 @@ func TestGitClient(t *testing.T) { }) repo := Repo{ GitURL: url, - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), Name: "test1", Branch: "new-branch", } @@ -107,7 +107,7 @@ func TestGitClient(t *testing.T) { }) repo := Repo{ GitURL: url, - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), } cli := NewGitUploadClient(repo.Branch) require.NoError(t, cli.CreateFile( @@ -151,7 +151,7 @@ func TestGitClient(t *testing.T) { }) repo := Repo{ GitURL: "git@github.com:nope/nopenopenopenope", - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), } cli := NewGitUploadClient(repo.Branch) err := cli.CreateFile( @@ -171,7 +171,7 @@ func TestGitClient(t *testing.T) { }) repo := Repo{ GitURL: testlib.GitMakeBareRepository(t), - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), GitSSHCommand: "{{.Foo}}", } cli := NewGitUploadClient(repo.Branch) @@ -239,7 +239,7 @@ func TestGitClient(t *testing.T) { func TestKeyPath(t *testing.T) { t.Run("with valid path", func(t *testing.T) { - path := testlib.MakeNewSSHKey(t, keygen.Ed25519, "") + path := testlib.MakeNewSSHKey(t, "") result, err := keyPath(path) require.NoError(t, err) require.Equal(t, path, result) @@ -251,7 +251,7 @@ func TestKeyPath(t *testing.T) { }) t.Run("with password protected key path", func(t *testing.T) { - path := testlib.MakeNewSSHKey(t, keygen.Ed25519, "pwd") + path := testlib.MakeNewSSHKey(t, "pwd") bts, err := os.ReadFile(path) require.NoError(t, err) @@ -263,7 +263,7 @@ func TestKeyPath(t *testing.T) { t.Run("with key", func(t *testing.T) { for _, algo := range []keygen.KeyType{keygen.Ed25519, keygen.RSA} { t.Run(string(algo), func(t *testing.T) { - path := testlib.MakeNewSSHKey(t, algo, "") + path := testlib.MakeNewSSHKeyType(t, "", algo) bts, err := os.ReadFile(path) require.NoError(t, err) @@ -282,7 +282,7 @@ func TestKeyPath(t *testing.T) { require.Equal(t, "", result) }) t.Run("with invalid EOF", func(t *testing.T) { - path := testlib.MakeNewSSHKey(t, keygen.Ed25519, "") + path := testlib.MakeNewSSHKey(t, "") bts, err := os.ReadFile(path) require.NoError(t, err) diff --git a/goreleaser/int/client/gitea_test.go b/goreleaser/int/client/gitea_test.go index c99456c..da182ab 100644 --- a/goreleaser/int/client/gitea_test.go +++ b/goreleaser/int/client/gitea_test.go @@ -186,7 +186,7 @@ func (s *GiteaReleasesTestSuite) SetupTest() { s.releaseURL = fmt.Sprintf("%v/%v", s.releasesURL, s.releaseID) httpmock.RegisterResponder("GET", fmt.Sprintf("%s/api/v1/version", s.url), httpmock.NewStringResponder(200, "{\"version\":\"1.12.0\"}")) newClient, err := gitea.NewClient(s.url) - require.NoError(s.T(), err) + s.Require().NoError(err) s.client = &giteaClient{client: newClient} } @@ -320,7 +320,7 @@ func (s *GiteaupdateReleaseSuite) TestGiteaCreateFile() { path := "file.txt" message := "add hello world" err := s.client.CreateFile(s.ctx, author, repo, content, path, message) - require.Nil(t, err) + require.NoError(t, err) } func TestGiteaupdateReleaseSuite(t *testing.T) { @@ -442,7 +442,7 @@ func (s *GiteaUploadSuite) SetupTest() { func (s *GiteaUploadSuite) TearDownTest() { s.GiteaReleasesTestSuite.TearDownTest() - require.NoError(s.T(), s.file.Close()) + s.Require().NoError(s.file.Close()) } func (s *GiteaUploadSuite) TestErrorParsingReleaseID() { diff --git a/goreleaser/int/client/github.go b/goreleaser/int/client/github.go index b23accf..3df9a8c 100644 --- a/goreleaser/int/client/github.go +++ b/goreleaser/int/client/github.go @@ -2,6 +2,7 @@ package client import ( "crypto/tls" + "errors" "fmt" "net/http" "net/url" @@ -12,7 +13,8 @@ import ( "time" "github.com/caarlos0/log" - "github.com/google/go-github/v55/github" + "github.com/charmbracelet/x/exp/ordered" + "github.com/google/go-github/v57/github" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" @@ -167,9 +169,9 @@ func (c *githubClient) CloseMilestone(ctx *context.Context, repo Repo, title str func headString(base, head Repo) string { return strings.Join([]string{ - firstNonEmpty(head.Owner, base.Owner), - firstNonEmpty(head.Name, base.Name), - firstNonEmpty(head.Branch, base.Branch), + ordered.First(head.Owner, base.Owner), + ordered.First(head.Name, base.Name), + ordered.First(head.Branch, base.Branch), }, ":") } @@ -196,8 +198,8 @@ func (c *githubClient) OpenPullRequest( draft bool, ) error { c.checkRateLimit(ctx) - base.Owner = firstNonEmpty(base.Owner, head.Owner) - base.Name = firstNonEmpty(base.Name, head.Name) + base.Owner = ordered.First(base.Owner, head.Owner) + base.Name = ordered.First(base.Name, head.Name) if base.Branch == "" { def, err := c.getDefaultBranch(ctx, base) if err != nil { @@ -230,7 +232,7 @@ func (c *githubClient) OpenPullRequest( }, ) if err != nil { - if res.StatusCode == 422 { + if res.StatusCode == http.StatusUnprocessableEntity { log.WithError(err).Warn("pull request validation failed") return nil } @@ -281,12 +283,12 @@ func (c *githubClient) CreateFile( Info("pushing") if defBranch != branch && branch != "" { - _, res, err := c.client.Repositories.GetBranch(ctx, repo.Owner, repo.Name, branch, true) - if err != nil && (res == nil || res.StatusCode != 404) { + _, res, err := c.client.Repositories.GetBranch(ctx, repo.Owner, repo.Name, branch, 100) + if err != nil && (res == nil || res.StatusCode != http.StatusNotFound) { return fmt.Errorf("could not get branch %q: %w", branch, err) } - if res.StatusCode == 404 { + if res.StatusCode == http.StatusNotFound { defRef, _, err := c.client.Git.GetRef(ctx, repo.Owner, repo.Name, "refs/heads/"+defBranch) if err != nil { return fmt.Errorf("could not get ref %q: %w", "refs/heads/"+defBranch, err) @@ -298,7 +300,10 @@ func (c *githubClient) CreateFile( SHA: defRef.Object.SHA, }, }); err != nil { - return fmt.Errorf("could not create ref %q from %q: %w", "refs/heads/"+branch, defRef.Object.GetSHA(), err) + rerr := new(github.ErrorResponse) + if !errors.As(err, &rerr) || rerr.Message != "Reference already exists" { + return fmt.Errorf("could not create ref %q from %q: %w", "refs/heads/"+branch, defRef.Object.GetSHA(), err) + } } } } @@ -312,7 +317,7 @@ func (c *githubClient) CreateFile( Ref: branch, }, ) - if err != nil && (res == nil || res.StatusCode != 404) { + if err != nil && (res == nil || res.StatusCode != http.StatusNotFound) { return fmt.Errorf("could not get %q: %w", path, err) } @@ -474,7 +479,7 @@ func (c *githubClient) Upload( if err == nil { return nil } - if resp != nil && resp.StatusCode == 422 { + if resp != nil && resp.StatusCode == http.StatusUnprocessableEntity { return err } return RetriableError{err} diff --git a/goreleaser/int/client/github_test.go b/goreleaser/int/client/github_test.go index 997685a..7a8afd3 100644 --- a/goreleaser/int/client/github_test.go +++ b/goreleaser/int/client/github_test.go @@ -13,7 +13,7 @@ import ( "text/template" "time" - "github.com/google/go-github/v55/github" + "github.com/google/go-github/v57/github" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/int/testlib" @@ -533,7 +533,7 @@ func TestGitHubOpenPullRequestNoBaseBranchDraft(t *testing.T) { require.NoError(t, json.Unmarshal(got, &pr)) require.Equal(t, "main", pr.GetBase()) require.Equal(t, "someone:something:foo", pr.GetHead()) - require.Equal(t, true, pr.GetDraft()) + require.True(t, pr.GetDraft()) r, err := os.Open("testdata/github/pull.json") require.NoError(t, err) @@ -808,6 +808,68 @@ func TestGitHubCreateFileHappyPathUpdate(t *testing.T) { require.NoError(t, client.CreateFile(ctx, config.CommitAuthor{}, repo, []byte("content"), "file.txt", "message")) } +func TestGitHubCreateFileFeatureBranchAlreadyExists(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer r.Body.Close() + + if r.URL.Path == "/repos/someone/something/branches/feature" && r.Method == http.MethodGet { + w.WriteHeader(http.StatusNotFound) + return + } + + if r.URL.Path == "/repos/someone/something/git/ref/heads/main" { + fmt.Fprint(w, `{"object": {"sha": "fake-sha"}}`) + return + } + + if r.URL.Path == "/repos/someone/something/git/refs" && r.Method == http.MethodPost { + w.WriteHeader(http.StatusUnprocessableEntity) + fmt.Fprintf(w, `{"message": "Reference already exists"}`) + return + } + + if r.URL.Path == "/repos/someone/something" { + w.WriteHeader(http.StatusOK) + fmt.Fprint(w, `{"default_branch": "main"}`) + return + } + + if r.URL.Path == "/repos/someone/something/contents/file.txt" && r.Method == http.MethodGet { + w.WriteHeader(http.StatusNotFound) + return + } + + if r.URL.Path == "/repos/someone/something/contents/file.txt" && r.Method == http.MethodPut { + w.WriteHeader(http.StatusOK) + return + } + + if r.URL.Path == "/rate_limit" { + w.WriteHeader(http.StatusOK) + fmt.Fprint(w, `{"resources":{"core":{"remaining":120}}}`) + return + } + + t.Error("unhandled request: " + r.Method + " " + r.URL.Path) + })) + defer srv.Close() + + ctx := testctx.NewWithCfg(config.Project{ + GitHubURLs: config.GitHubURLs{ + API: srv.URL + "/", + }, + }) + client, err := newGitHub(ctx, "test-token") + require.NoError(t, err) + repo := Repo{ + Owner: "someone", + Name: "something", + Branch: "feature", + } + + require.NoError(t, client.CreateFile(ctx, config.CommitAuthor{}, repo, []byte("content"), "file.txt", "message")) +} + func TestGitHubCreateFileFeatureBranchDoesNotExist(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() diff --git a/goreleaser/int/commitauthor/author_test.go b/goreleaser/int/commitauthor/author_test.go index 2444596..7847e8d 100644 --- a/goreleaser/int/commitauthor/author_test.go +++ b/goreleaser/int/commitauthor/author_test.go @@ -46,27 +46,27 @@ func TestGet(t *testing.T) { func TestDefault(t *testing.T) { t.Run("empty", func(t *testing.T) { - require.Equal(t, Default(config.CommitAuthor{}), config.CommitAuthor{ + require.Equal(t, config.CommitAuthor{ Name: defaultName, Email: defaultEmail, - }) + }, Default(config.CommitAuthor{})) }) t.Run("no name", func(t *testing.T) { - require.Equal(t, Default(config.CommitAuthor{ - Email: "a", - }), config.CommitAuthor{ + require.Equal(t, config.CommitAuthor{ Name: defaultName, Email: "a", - }) + }, Default(config.CommitAuthor{ + Email: "a", + })) }) t.Run("no email", func(t *testing.T) { - require.Equal(t, Default(config.CommitAuthor{ - Name: "a", - }), config.CommitAuthor{ + require.Equal(t, config.CommitAuthor{ Name: "a", Email: defaultEmail, - }) + }, Default(config.CommitAuthor{ + Name: "a", + })) }) } diff --git a/goreleaser/int/gio/copy_test.go b/goreleaser/int/gio/copy_test.go index a5ccf91..9ab513c 100644 --- a/goreleaser/int/gio/copy_test.go +++ b/goreleaser/int/gio/copy_test.go @@ -26,7 +26,7 @@ func TestCopySymlink(t *testing.T) { fi, err := os.Lstat(c) require.NoError(t, err) - require.True(t, fi.Mode()&os.ModeSymlink != 0) + require.NotEqual(t, 0, fi.Mode()&os.ModeSymlink) l, err := os.Readlink(c) require.NoError(t, err) diff --git a/goreleaser/int/middleware/errhandler/error_test.go b/goreleaser/int/middleware/errhandler/error_test.go index 1361968..1e1b780 100644 --- a/goreleaser/int/middleware/errhandler/error_test.go +++ b/goreleaser/int/middleware/errhandler/error_test.go @@ -1,7 +1,6 @@ package errhandler import ( - "errors" "fmt" "testing" @@ -53,6 +52,6 @@ func TestErrorMemo(t *testing.T) { err := memo.Error() merr := &multierror.Error{} - require.True(t, errors.As(err, &merr), "must be a multierror") + require.ErrorAs(t, err, &merr, "must be a multierror") require.Len(t, merr.Errors, 1) } diff --git a/goreleaser/int/pipe/announce/announce_test.go b/goreleaser/int/pipe/announce/announce_test.go index 7dca921..29f83ab 100644 --- a/goreleaser/int/pipe/announce/announce_test.go +++ b/goreleaser/int/pipe/announce/announce_test.go @@ -1,7 +1,6 @@ package announce import ( - "errors" "testing" "github.com/goreleaser/goreleaser/int/skips" @@ -30,7 +29,7 @@ func TestAnnounce(t *testing.T) { err := Pipe{}.Run(ctx) require.Error(t, err) merr := &multierror.Error{} - require.True(t, errors.As(err, &merr), "must be a multierror") + require.ErrorAs(t, err, &merr, "must be a multierror") require.Len(t, merr.Errors, 2) } diff --git a/goreleaser/int/pipe/aur/aur.go b/goreleaser/int/pipe/aur/aur.go index 148e8a7..9ca4dae 100644 --- a/goreleaser/int/pipe/aur/aur.go +++ b/goreleaser/int/pipe/aur/aur.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "os" + "path" "path/filepath" "sort" "strings" @@ -16,6 +17,7 @@ import ( "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/commitauthor" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" @@ -31,9 +33,11 @@ var ErrNoArchivesFound = errors.New("no linux archives found") // Pipe for arch linux's AUR pkgbuild. type Pipe struct{} -func (Pipe) String() string { return "arch user repositories" } -func (Pipe) ContinueOnError() bool { return true } -func (Pipe) Skip(ctx *context.Context) bool { return len(ctx.Config.AURs) == 0 } +func (Pipe) String() string { return "arch user repositories" } +func (Pipe) ContinueOnError() bool { return true } +func (Pipe) Skip(ctx *context.Context) bool { + return skips.Any(ctx, skips.AUR) || len(ctx.Config.AURs) == 0 +} func (Pipe) Default(ctx *context.Context) error { for i := range ctx.Config.AURs { @@ -86,11 +90,12 @@ func runAll(ctx *context.Context, cli client.ReleaseURLTemplater) error { } func doRun(ctx *context.Context, aur config.AUR, cl client.ReleaseURLTemplater) error { - name, err := tmpl.New(ctx).Apply(aur.Name) - if err != nil { + if err := tmpl.New(ctx).ApplyAll( + &aur.Name, + &aur.Directory, + ); err != nil { return err } - aur.Name = name filters := []artifact.Filter{ artifact.ByGoos("linux"), @@ -135,8 +140,10 @@ func doRun(ctx *context.Context, aur config.AUR, cl client.ReleaseURLTemplater) bin := artifact.ExtraOr(*art, artifact.ExtraBinary, art.Name) pkg = fmt.Sprintf(`install -Dm755 "./%s "${pkgdir}/usr/bin/%s"`, name, bin) case artifact.UploadableArchive: + folder := artifact.ExtraOr(*art, artifact.ExtraWrappedIn, ".") for _, bin := range artifact.ExtraOr(*art, artifact.ExtraBinaries, []string{}) { - pkg = fmt.Sprintf(`install -Dm755 "./%s" "${pkgdir}/usr/bin/%[1]s"`, bin) + path := filepath.ToSlash(filepath.Clean(filepath.Join(folder, bin))) + pkg = fmt.Sprintf(`install -Dm755 "./%s" "${pkgdir}/usr/bin/%s"`, path, bin) break } } @@ -389,7 +396,7 @@ func doPublish(ctx *context.Context, pkgs []*artifact.Artifact) error { return err } files = append(files, client.RepoFile{ - Path: pkg.Name, + Path: path.Join(cfg.Directory, pkg.Name), Content: content, }) } diff --git a/goreleaser/int/pipe/aur/aur_test.go b/goreleaser/int/pipe/aur/aur_test.go index 9a38fc0..fd7123f 100644 --- a/goreleaser/int/pipe/aur/aur_test.go +++ b/goreleaser/int/pipe/aur/aur_test.go @@ -6,11 +6,11 @@ import ( "path/filepath" "testing" - "github.com/charmbracelet/keygen" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/git" "github.com/goreleaser/goreleaser/int/golden" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/int/testlib" "github.com/goreleaser/goreleaser/pkg/config" @@ -164,6 +164,13 @@ func TestFullPipe(t *testing.T) { ctx.Config.AURs[0].Homepage = "https://github.com/goreleaser" }, }, + "custom-dir": { + prepare: func(ctx *context.Context) { + ctx.TokenType = context.TokenTypeGitHub + ctx.Config.AURs[0].Homepage = "https://github.com/goreleaser" + ctx.Config.AURs[0].Directory = "foo" + }, + }, "with-more-opts": { prepare: func(ctx *context.Context) { ctx.TokenType = context.TokenTypeGitHub @@ -245,7 +252,7 @@ func TestFullPipe(t *testing.T) { } { t.Run(name, func(t *testing.T) { url := testlib.GitMakeBareRepository(t) - key := testlib.MakeNewSSHKey(t, keygen.Ed25519, "") + key := testlib.MakeNewSSHKey(t, "") folder := t.TempDir() ctx := testctx.NewWithCfg( @@ -345,14 +352,14 @@ func TestFullPipe(t *testing.T) { require.NoError(t, Pipe{}.Publish(ctx)) - requireEqualRepoFiles(t, folder, name, url) + requireEqualRepoFiles(t, folder, ctx.Config.AURs[0].Directory, name, url) }) } } func TestRunPipe(t *testing.T) { url := testlib.GitMakeBareRepository(t) - key := testlib.MakeNewSSHKey(t, keygen.Ed25519, "") + key := testlib.MakeNewSSHKey(t, "") folder := t.TempDir() ctx := testctx.NewWithCfg( @@ -472,7 +479,7 @@ func TestRunPipe(t *testing.T) { require.NoError(t, runAll(ctx, client)) require.NoError(t, Pipe{}.Publish(ctx)) - requireEqualRepoFiles(t, folder, "foo", url) + requireEqualRepoFiles(t, folder, ".", "foo", url) } func TestRunPipeNoBuilds(t *testing.T) { @@ -486,9 +493,56 @@ func TestRunPipeNoBuilds(t *testing.T) { require.False(t, client.CreatedFile) } +func TestRunPipeWrappedInDirectory(t *testing.T) { + url := testlib.GitMakeBareRepository(t) + key := testlib.MakeNewSSHKey(t, "") + folder := t.TempDir() + ctx := testctx.NewWithCfg( + config.Project{ + Dist: folder, + ProjectName: "foo", + AURs: []config.AUR{{ + GitURL: url, + PrivateKey: key, + }}, + }, + testctx.WithVersion("1.2.1"), + testctx.WithCurrentTag("v1.2.1"), + testctx.WithSemver(1, 2, 1, ""), + ) + + path := filepath.Join(folder, "dist/foo_linux_amd64/foo") + ctx.Artifacts.Add(&artifact.Artifact{ + Name: "foo.tar.gz", + Path: path, + Goos: "linux", + Goarch: "amd64", + Goamd64: "v1", + Type: artifact.UploadableArchive, + Extra: map[string]interface{}{ + artifact.ExtraID: "foo", + artifact.ExtraFormat: "tar.gz", + artifact.ExtraBinaries: []string{"foo"}, + artifact.ExtraWrappedIn: "foo", + }, + }) + + require.NoError(t, Pipe{}.Default(ctx)) + require.NoError(t, os.MkdirAll(filepath.Dir(path), 0o755)) + f, err := os.Create(path) + require.NoError(t, err) + require.NoError(t, f.Close()) + + client := client.NewMock() + require.NoError(t, runAll(ctx, client)) + require.NoError(t, Pipe{}.Publish(ctx)) + + requireEqualRepoFiles(t, folder, ".", "foo", url) +} + func TestRunPipeBinaryRelease(t *testing.T) { url := testlib.GitMakeBareRepository(t) - key := testlib.MakeNewSSHKey(t, keygen.Ed25519, "") + key := testlib.MakeNewSSHKey(t, "") folder := t.TempDir() ctx := testctx.NewWithCfg( config.Project{ @@ -529,7 +583,7 @@ func TestRunPipeBinaryRelease(t *testing.T) { require.NoError(t, runAll(ctx, client)) require.NoError(t, Pipe{}.Publish(ctx)) - requireEqualRepoFiles(t, folder, "foo", url) + requireEqualRepoFiles(t, folder, ".", "foo", url) } func TestRunPipeNoUpload(t *testing.T) { @@ -699,7 +753,14 @@ func TestSkip(t *testing.T) { t.Run("skip", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) - + t.Run("skip flag", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + AURs: []config.AUR{ + {}, + }, + }, testctx.Skip(skips.AUR)) + require.True(t, Pipe{}.Skip(ctx)) + }) t.Run("dont skip", func(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ AURs: []config.AUR{ @@ -710,7 +771,7 @@ func TestSkip(t *testing.T) { }) } -func requireEqualRepoFiles(tb testing.TB, folder, name, url string) { +func requireEqualRepoFiles(tb testing.TB, distDir, repoDir, name, url string) { tb.Helper() dir := tb.TempDir() _, err := git.Run(testctx.New(), "-C", dir, "clone", url, "repo") @@ -720,12 +781,12 @@ func requireEqualRepoFiles(tb testing.TB, folder, name, url string) { "PKGBUILD": ".pkgbuild", ".SRCINFO": ".srcinfo", } { - path := filepath.Join(folder, "aur", name+"-bin"+ext) + path := filepath.Join(distDir, "aur", name+"-bin"+ext) bts, err := os.ReadFile(path) require.NoError(tb, err) golden.RequireEqualExt(tb, bts, ext) - bts, err = os.ReadFile(filepath.Join(dir, "repo", reponame)) + bts, err = os.ReadFile(filepath.Join(dir, "repo", repoDir, reponame)) require.NoError(tb, err) golden.RequireEqualExt(tb, bts, ext) } diff --git a/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.pkgbuild.golden b/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.pkgbuild.golden new file mode 100644 index 0000000..57ce0ae --- /dev/null +++ b/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.pkgbuild.golden @@ -0,0 +1,18 @@ +# This file was generated by GoReleaser. DO NOT EDIT. + +pkgname='custom-dir-bin' +pkgver=1.0.1 +pkgrel=1 +pkgdesc='A run pipe test fish food and FOO=foo_is_bar' +url='https://github.com/goreleaser' +arch=('x86_64') +license=('MIT') +provides=('custom-dir') +conflicts=('custom-dir') + +source_x86_64=("${pkgname}_${pkgver}_x86_64.tar.gz::https://dummyhost/download/v1.0.1-foo/bin.tar.gz") +sha256sums_x86_64=('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855') + +package() { + install -Dm755 "./name" "${pkgdir}/usr/bin/name" +} diff --git a/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.srcinfo.golden b/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.srcinfo.golden new file mode 100644 index 0000000..de0f35e --- /dev/null +++ b/goreleaser/int/pipe/aur/testdata/TestFullPipe/custom-dir.srcinfo.golden @@ -0,0 +1,13 @@ +pkgbase = custom-dir-bin + pkgdesc = A run pipe test fish food and FOO=foo_is_bar + pkgver = 1.0.1 + pkgrel = 1 + url = https://github.com/goreleaser + license = MIT + conflicts = custom-dir + provides = custom-dir + arch = x86_64 + source_x86_64 = https://dummyhost/download/v1.0.1-foo/bin.tar.gz + sha256sums_x86_64 = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + +pkgname = custom-dir-bin diff --git a/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.pkgbuild.golden b/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.pkgbuild.golden new file mode 100644 index 0000000..bc47b61 --- /dev/null +++ b/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.pkgbuild.golden @@ -0,0 +1,18 @@ +# This file was generated by GoReleaser. DO NOT EDIT. + +pkgname='foo-bin' +pkgver=1.2.1 +pkgrel=1 +pkgdesc='' +url='' +arch=('x86_64') +license=('') +provides=('foo') +conflicts=('foo') + +source_x86_64=("${pkgname}_${pkgver}_x86_64.tar.gz::https://dummyhost/download/v1.2.1/foo.tar.gz") +sha256sums_x86_64=('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855') + +package() { + install -Dm755 "./foo/foo" "${pkgdir}/usr/bin/foo" +} diff --git a/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.srcinfo.golden b/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.srcinfo.golden new file mode 100644 index 0000000..2fbfd40 --- /dev/null +++ b/goreleaser/int/pipe/aur/testdata/TestRunPipeWrappedInDirectory.srcinfo.golden @@ -0,0 +1,11 @@ +pkgbase = foo-bin + pkgdesc = + pkgver = 1.2.1 + pkgrel = 1 + conflicts = foo + provides = foo + arch = x86_64 + source_x86_64 = https://dummyhost/download/v1.2.1/foo.tar.gz + sha256sums_x86_64 = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + +pkgname = foo-bin diff --git a/goreleaser/int/pipe/before/before.go b/goreleaser/int/pipe/before/before.go index e00624c..33255a6 100644 --- a/goreleaser/int/pipe/before/before.go +++ b/goreleaser/int/pipe/before/before.go @@ -2,15 +2,11 @@ package before import ( - "bytes" "fmt" - "io" - "os/exec" "github.com/caarlos0/go-shellwords" "github.com/caarlos0/log" - "github.com/goreleaser/goreleaser/int/gio" - "github.com/goreleaser/goreleaser/int/logext" + "github.com/goreleaser/goreleaser/int/shell" "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/context" @@ -39,17 +35,9 @@ func (Pipe) Run(ctx *context.Context) error { return err } - cmd := exec.Command(args[0], args[1:]...) - cmd.Env = ctx.Env.Strings() - - var b bytes.Buffer - w := gio.Safe(&b) - cmd.Stderr = io.MultiWriter(logext.NewWriter(), w) - cmd.Stdout = io.MultiWriter(logext.NewWriter(), w) - - log.WithField("hook", step).Info("running") - if err := cmd.Run(); err != nil { - return fmt.Errorf("hook failed: %s: %w; output: %s", step, err, b.String()) + log.WithField("hook", s).Info("running") + if err := shell.Run(ctx, "", args, ctx.Env.Strings(), false); err != nil { + return fmt.Errorf("hook failed: %w", err) } } return nil diff --git a/goreleaser/int/pipe/before/before_test.go b/goreleaser/int/pipe/before/before_test.go index 26ed9ca..f99e5d0 100644 --- a/goreleaser/int/pipe/before/before_test.go +++ b/goreleaser/int/pipe/before/before_test.go @@ -54,18 +54,19 @@ func TestRunPipeInvalidCommand(t *testing.T) { } func TestRunPipeFail(t *testing.T) { - for err, tc := range map[string][]string{ - "hook failed: go tool foobar: exit status 2; output: go: no such tool \"foobar\"\n": {"go tool foobar"}, - "hook failed: sh ./testdata/foo.sh: exit status 1; output: lalala\n": {"sh ./testdata/foo.sh"}, + for _, tc := range []string{ + "go tool foobar", + "sh ./testdata/foo.sh", } { ctx := testctx.NewWithCfg( config.Project{ Before: config.Before{ - Hooks: tc, + Hooks: []string{tc}, }, }, ) - require.EqualError(t, Pipe{}.Run(ctx), err) + err := Pipe{}.Run(ctx) + require.Contains(t, err.Error(), "hook failed") } } diff --git a/goreleaser/int/pipe/blob/blob_test.go b/goreleaser/int/pipe/blob/blob_test.go index 1be1772..4e857dd 100644 --- a/goreleaser/int/pipe/blob/blob_test.go +++ b/goreleaser/int/pipe/blob/blob_test.go @@ -112,7 +112,7 @@ func TestDefaultsWithProvider(t *testing.T) { }, }, }) - require.Nil(t, Pipe{}.Default(ctx)) + require.NoError(t, Pipe{}.Default(ctx)) } func TestURL(t *testing.T) { diff --git a/goreleaser/int/pipe/brew/brew.go b/goreleaser/int/pipe/brew/brew.go index 7b9ab8e..80269b6 100644 --- a/goreleaser/int/pipe/brew/brew.go +++ b/goreleaser/int/pipe/brew/brew.go @@ -19,9 +19,12 @@ import ( "github.com/goreleaser/goreleaser/int/commitauthor" "github.com/goreleaser/goreleaser/int/deprecate" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" + "golang.org/x/text/cases" + "golang.org/x/text/language" ) const brewConfigExtra = "BrewConfig" @@ -44,9 +47,11 @@ func (e ErrNoArchivesFound) Error() string { // Pipe for brew deployment. type Pipe struct{} -func (Pipe) String() string { return "homebrew tap formula" } -func (Pipe) ContinueOnError() bool { return true } -func (Pipe) Skip(ctx *context.Context) bool { return len(ctx.Config.Brews) == 0 } +func (Pipe) String() string { return "homebrew tap formula" } +func (Pipe) ContinueOnError() bool { return true } +func (Pipe) Skip(ctx *context.Context) bool { + return skips.Any(ctx, skips.Homebrew) || len(ctx.Config.Brews) == 0 +} func (Pipe) Default(ctx *context.Context) error { for i := range ctx.Config.Brews { @@ -212,7 +217,7 @@ func doRun(ctx *context.Context, brew config.Homebrew, cl client.ReleaseURLTempl ), artifact.Or( artifact.And( - artifact.ByFormats("zip", "tar.gz"), + artifact.ByFormats("zip", "tar.gz", "tar.xz"), artifact.ByType(artifact.UploadableArchive), ), artifact.ByType(artifact.UploadableBinary), @@ -468,6 +473,7 @@ func formulaNameFor(name string) string { name = strings.ReplaceAll(name, "-", " ") name = strings.ReplaceAll(name, "_", " ") name = strings.ReplaceAll(name, ".", "") - name = strings.ReplaceAll(name, "@", "AT") - return strings.ReplaceAll(strings.Title(name), " ", "") // nolint:staticcheck + name = cases.Title(language.English).String(name) + name = strings.ReplaceAll(name, " ", "") + return strings.ReplaceAll(name, "@", "AT") } diff --git a/goreleaser/int/pipe/brew/brew_test.go b/goreleaser/int/pipe/brew/brew_test.go index 4292b2a..0a505b4 100644 --- a/goreleaser/int/pipe/brew/brew_test.go +++ b/goreleaser/int/pipe/brew/brew_test.go @@ -6,10 +6,10 @@ import ( "path/filepath" "testing" - "github.com/charmbracelet/keygen" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/golden" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/int/testlib" "github.com/goreleaser/goreleaser/int/tmpl" @@ -27,23 +27,23 @@ func TestDescription(t *testing.T) { } func TestNameWithDash(t *testing.T) { - require.Equal(t, formulaNameFor("some-binary"), "SomeBinary") + require.Equal(t, "SomeBinary", formulaNameFor("some-binary")) } func TestNameWithUnderline(t *testing.T) { - require.Equal(t, formulaNameFor("some_binary"), "SomeBinary") + require.Equal(t, "SomeBinary", formulaNameFor("some_binary")) } func TestNameWithDots(t *testing.T) { - require.Equal(t, formulaNameFor("binaryv0.0.0"), "Binaryv000") + require.Equal(t, "Binaryv000", formulaNameFor("binaryv0.0.0")) } func TestNameWithAT(t *testing.T) { - require.Equal(t, formulaNameFor("some_binary@1"), "SomeBinaryAT1") + require.Equal(t, "SomeBinaryAT1", formulaNameFor("some_binary@1")) } func TestSimpleName(t *testing.T) { - require.Equal(t, formulaNameFor("binary"), "Binary") + require.Equal(t, "Binary", formulaNameFor("binary")) } var defaultTemplateData = templateData{ @@ -186,7 +186,7 @@ func TestFullPipe(t *testing.T) { Branch: "main", Git: config.GitRepoRef{ URL: testlib.GitMakeBareRepository(t), - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), }, } }, @@ -313,6 +313,8 @@ func TestFullPipe(t *testing.T) { {Name: "zsh", Type: "optional"}, {Name: "bash", Version: "3.2.57"}, {Name: "fish", Type: "optional", Version: "v1.2.3"}, + {Name: "powershell", Type: "optional", OS: "mac"}, + {Name: "ash", Version: "1.0.0", OS: "linux"}, }, Conflicts: []string{"gtk+", "qt"}, Service: "run foo/bar\nkeep_alive true", @@ -1228,7 +1230,14 @@ func TestSkip(t *testing.T) { t.Run("skip", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) - + t.Run("skip flag", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Brews: []config.Homebrew{ + {}, + }, + }, testctx.Skip(skips.Homebrew)) + require.True(t, Pipe{}.Skip(ctx)) + }) t.Run("dont skip", func(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ Brews: []config.Homebrew{ diff --git a/goreleaser/int/pipe/brew/template.go b/goreleaser/int/pipe/brew/template.go index 799ce4b..0e41847 100644 --- a/goreleaser/int/pipe/brew/template.go +++ b/goreleaser/int/pipe/brew/template.go @@ -49,6 +49,7 @@ class {{ .Name }} < Formula {{ range $index, $element := . }} depends_on "{{ .Name }}" {{- if .Type }} => :{{ .Type }}{{- else if .Version }} => "{{ .Version }}"{{- end }} + {{- with .OS }} if OS.{{ . }}?{{- end }} {{- end }} {{- end -}} diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_block.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_block.rb.golden index 86fe1f8..d942cb0 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_block.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_block.rb.golden @@ -7,8 +7,10 @@ class CustomBlock < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_download_strategy.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_download_strategy.rb.golden index 330a464..2ae65a8 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_download_strategy.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_download_strategy.rb.golden @@ -7,8 +7,10 @@ class CustomDownloadStrategy < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_require.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_require.rb.golden index a9698cd..129a0fb 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_require.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/custom_require.rb.golden @@ -8,8 +8,10 @@ class CustomRequire < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/default.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/default.rb.golden index 43a55b0..96ddb60 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/default.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/default.rb.golden @@ -7,8 +7,10 @@ class Default < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/default_gitlab.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/default_gitlab.rb.golden index e4e7004..6260b49 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/default_gitlab.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/default_gitlab.rb.golden @@ -7,8 +7,10 @@ class DefaultGitlab < Formula homepage "https://gitlab.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/git_remote.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/git_remote.rb.golden index 7db4e44..7b9b560 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/git_remote.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/git_remote.rb.golden @@ -7,8 +7,10 @@ class GitRemote < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/open_pr.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/open_pr.rb.golden index ac45ea7..e2c530a 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/open_pr.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/open_pr.rb.golden @@ -7,8 +7,10 @@ class OpenPr < Formula homepage "https://github.com/goreleaser" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/brew/testdata/TestFullPipe/valid_repository_templates.rb.golden b/goreleaser/int/pipe/brew/testdata/TestFullPipe/valid_repository_templates.rb.golden index 7e50e70..cdc104f 100644 --- a/goreleaser/int/pipe/brew/testdata/TestFullPipe/valid_repository_templates.rb.golden +++ b/goreleaser/int/pipe/brew/testdata/TestFullPipe/valid_repository_templates.rb.golden @@ -7,8 +7,10 @@ class ValidRepositoryTemplates < Formula homepage "" version "1.0.1" + depends_on "ash" => "1.0.0" if OS.linux? depends_on "bash" => "3.2.57" depends_on "fish" => :optional + depends_on "powershell" => :optional if OS.mac? depends_on "zsh" => :optional on_macos do diff --git a/goreleaser/int/pipe/build/build.go b/goreleaser/int/pipe/build/build.go index d9efcb6..6a1096f 100644 --- a/goreleaser/int/pipe/build/build.go +++ b/goreleaser/int/pipe/build/build.go @@ -88,7 +88,7 @@ func buildWithDefaults(ctx *context.Context, build config.Build) (config.Build, } func runPipeOnBuild(ctx *context.Context, g semerrgroup.Group, build config.Build) { - for _, target := range build.Targets { + for _, target := range filter(ctx, build.Targets) { target := target build := build g.Go(func() error { @@ -195,12 +195,13 @@ func buildOptionsForTarget(ctx *context.Context, build config.Build, target stri Goamd64: goamd64, } - binary, err := tmpl.New(ctx).WithBuildOptions(buildOpts).Apply(build.Binary) - if err != nil { + if err := tmpl.New(ctx).WithBuildOptions(buildOpts).ApplyAll( + &build.Binary, + &build.GoBinary, + ); err != nil { return nil, err } - build.Binary = binary name := build.Binary + ext dir := fmt.Sprintf("%s_%s", build.ID, target) if build.NoUniqueDistDir { diff --git a/goreleaser/int/pipe/build/build_test.go b/goreleaser/int/pipe/build/build_test.go index 1c14ae5..e812957 100644 --- a/goreleaser/int/pipe/build/build_test.go +++ b/goreleaser/int/pipe/build/build_test.go @@ -112,9 +112,9 @@ func TestRunPipe(t *testing.T) { }, }, testctx.WithCurrentTag("2.4.5")) require.NoError(t, Pipe{}.Run(ctx)) - require.Equal(t, ctx.Artifacts.List(), []*artifact.Artifact{{ + require.Equal(t, []*artifact.Artifact{{ Name: "testing", - }}) + }}, ctx.Artifacts.List()) } func TestRunFullPipe(t *testing.T) { @@ -152,9 +152,9 @@ func TestRunFullPipe(t *testing.T) { ctx := testctx.NewWithCfg(config, testctx.WithCurrentTag("2.4.5")) require.NoError(t, Pipe{}.Default(ctx)) require.NoError(t, Pipe{}.Run(ctx)) - require.Equal(t, ctx.Artifacts.List(), []*artifact.Artifact{{ + require.Equal(t, []*artifact.Artifact{{ Name: "testing", - }}) + }}, ctx.Artifacts.List()) require.FileExists(t, post) require.FileExists(t, pre) require.FileExists(t, postOS) @@ -410,7 +410,7 @@ func TestDefaultFillSingleBuild(t *testing.T) { }) require.NoError(t, Pipe{}.Default(ctx)) require.Len(t, ctx.Config.Builds, 1) - require.Equal(t, ctx.Config.Builds[0].Binary, "foo") + require.Equal(t, "foo", ctx.Config.Builds[0].Binary) } func TestDefaultFailSingleBuild(t *testing.T) { @@ -438,7 +438,7 @@ func TestSkipBuild(t *testing.T) { } ctx := testctx.NewWithCfg(config, testctx.WithCurrentTag("2.4.5")) require.NoError(t, Pipe{}.Run(ctx)) - require.Len(t, ctx.Artifacts.List(), 0) + require.Empty(t, ctx.Artifacts.List()) } func TestExtDarwin(t *testing.T) { @@ -570,6 +570,24 @@ func TestPipeOnBuild_hooksRunPerTarget(t *testing.T) { require.FileExists(t, filepath.Join(tmpDir, "post-hook-windows_amd64")) } +func TestPipeOnBuild_invalidGoBinary(t *testing.T) { + build := config.Build{ + Builder: "fake", + GoBinary: "testing.v{{.XYZ}}", + Targets: []string{ + "linux_amd64", + }, + } + ctx := testctx.NewWithCfg(config.Project{ + Builds: []config.Build{ + build, + }, + }) + g := semerrgroup.New(ctx.Parallelism) + runPipeOnBuild(ctx, g, build) + testlib.RequireTemplateError(t, g.Wait()) +} + func TestPipeOnBuild_invalidBinaryTpl(t *testing.T) { build := config.Build{ Builder: "fake", @@ -747,6 +765,7 @@ func TestRunHookFailWithLogs(t *testing.T) { }, } ctx := testctx.NewWithCfg(config, testctx.WithCurrentTag("2.4.5")) - require.EqualError(t, Pipe{}.Run(ctx), "pre hook failed: failed to run 'sh -c echo foo; exit 1': exit status 1") + err := Pipe{}.Run(ctx) + require.Contains(t, err.Error(), "pre hook failed") require.Empty(t, ctx.Artifacts.List()) } diff --git a/goreleaser/int/pipe/build/filter.go b/goreleaser/int/pipe/build/filter.go new file mode 100644 index 0000000..7fe15f3 --- /dev/null +++ b/goreleaser/int/pipe/build/filter.go @@ -0,0 +1,28 @@ +package build + +import ( + "fmt" + "strings" + + "github.com/caarlos0/log" + "github.com/goreleaser/goreleaser/pkg/context" +) + +func filter(ctx *context.Context, targets []string) []string { + if !ctx.Partial { + return targets + } + + target := ctx.PartialTarget + log.WithField("match", fmt.Sprintf("target=%s", target)).Infof("partial build") + + var result []string + for _, t := range targets { + if !strings.HasPrefix(t, target) { + continue + } + result = append(result, t) + break + } + return result +} diff --git a/goreleaser/int/pipe/build/filter_test.go b/goreleaser/int/pipe/build/filter_test.go new file mode 100644 index 0000000..a92bf6b --- /dev/null +++ b/goreleaser/int/pipe/build/filter_test.go @@ -0,0 +1,43 @@ +package build + +import ( + "testing" + + "github.com/goreleaser/goreleaser/int/testctx" + "github.com/goreleaser/goreleaser/pkg/context" + "github.com/stretchr/testify/require" +) + +var filterTestTargets = []string{ + "linux_amd64_v1", + "linux_arm64", + "linux_riscv64", + "darwin_amd64_v1", + "darwin_amd64_v2", + "darwin_arm64", +} + +func TestFilter(t *testing.T) { + t.Run("none", func(t *testing.T) { + ctx := testctx.New() + require.Equal(t, filterTestTargets, filter(ctx, filterTestTargets)) + }) + + t.Run("target", func(t *testing.T) { + ctx := testctx.New(func(ctx *context.Context) { + ctx.Partial = true + ctx.PartialTarget = "darwin_amd64" + }) + require.Equal(t, []string{ + "darwin_amd64_v1", + }, filter(ctx, filterTestTargets)) + }) + + t.Run("target no match", func(t *testing.T) { + ctx := testctx.New(func(ctx *context.Context) { + ctx.Partial = true + ctx.PartialTarget = "linux_amd64_v1" + }) + require.Empty(t, filter(ctx, []string{"darwin_amd64_v1"})) + }) +} diff --git a/goreleaser/int/pipe/changelog/changelog_test.go b/goreleaser/int/pipe/changelog/changelog_test.go index ac7e3a5..d8ad73e 100644 --- a/goreleaser/int/pipe/changelog/changelog_test.go +++ b/goreleaser/int/pipe/changelog/changelog_test.go @@ -455,7 +455,7 @@ func TestChangeLogWithReleaseFooter(t *testing.T) { require.NoError(t, Pipe{}.Run(ctx)) require.Contains(t, ctx.ReleaseNotes, "## Changelog") require.Contains(t, ctx.ReleaseNotes, "test footer") - require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') + require.Equal(t, '\n', rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1])) } func TestChangeLogWithTemplatedReleaseFooter(t *testing.T) { @@ -480,7 +480,7 @@ func TestChangeLogWithTemplatedReleaseFooter(t *testing.T) { require.NoError(t, Pipe{}.Run(ctx)) require.Contains(t, ctx.ReleaseNotes, "## Changelog") require.Contains(t, ctx.ReleaseNotes, "test footer with tag v0.0.1") - require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') + require.Equal(t, '\n', rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1])) } func TestChangeLogWithoutReleaseFooter(t *testing.T) { @@ -503,7 +503,7 @@ func TestChangeLogWithoutReleaseFooter(t *testing.T) { ctx := testctx.New(testctx.WithCurrentTag("v0.0.1"), withFirstCommit(t)) require.NoError(t, Pipe{}.Run(ctx)) require.Contains(t, ctx.ReleaseNotes, "## Changelog") - require.Equal(t, rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1]), '\n') + require.Equal(t, '\n', rune(ctx.ReleaseNotes[len(ctx.ReleaseNotes)-1])) } func TestGetChangelogGitHub(t *testing.T) { @@ -589,7 +589,7 @@ func TestGetChangeloger(t *testing.T) { t.Run("default", func(t *testing.T) { c, err := getChangeloger(testctx.New()) require.NoError(t, err) - require.IsType(t, c, gitChangeloger{}) + require.IsType(t, gitChangeloger{}, c) }) t.Run(useGit, func(t *testing.T) { @@ -599,7 +599,7 @@ func TestGetChangeloger(t *testing.T) { }, })) require.NoError(t, err) - require.IsType(t, c, gitChangeloger{}) + require.IsType(t, gitChangeloger{}, c) }) t.Run(useGitHub, func(t *testing.T) { @@ -610,7 +610,7 @@ func TestGetChangeloger(t *testing.T) { }, testctx.GitHubTokenType) c, err := getChangeloger(ctx) require.NoError(t, err) - require.IsType(t, c, &scmChangeloger{}) + require.IsType(t, &scmChangeloger{}, c) }) t.Run(useGitHubNative, func(t *testing.T) { @@ -621,7 +621,7 @@ func TestGetChangeloger(t *testing.T) { }, testctx.GitHubTokenType) c, err := getChangeloger(ctx) require.NoError(t, err) - require.IsType(t, c, &githubNativeChangeloger{}) + require.IsType(t, &githubNativeChangeloger{}, c) }) t.Run(useGitHubNative+"-invalid-repo", func(t *testing.T) { @@ -646,7 +646,7 @@ func TestGetChangeloger(t *testing.T) { }, testctx.GitHubTokenType) c, err := getChangeloger(ctx) require.NoError(t, err) - require.IsType(t, c, &scmChangeloger{}) + require.IsType(t, &scmChangeloger{}, c) }) t.Run(useGitHub+"-invalid-repo", func(t *testing.T) { diff --git a/goreleaser/int/pipe/checksums/checksums.go b/goreleaser/int/pipe/checksums/checksums.go index ff32492..26de425 100644 --- a/goreleaser/int/pipe/checksums/checksums.go +++ b/goreleaser/int/pipe/checksums/checksums.go @@ -136,7 +136,7 @@ func refresh(ctx *context.Context, filepath string) error { defer file.Close() // sort to ensure the signature is deterministic downstream - sort.Strings(sumLines) + sort.Sort(ByFilename(sumLines)) _, err = file.WriteString(strings.Join(sumLines, "")) return err } @@ -155,3 +155,13 @@ func checksums(algorithm string, a *artifact.Artifact) (string, error) { return fmt.Sprintf("%v %v\n", sha, a.Name), nil } + +// ByFilename implements sort.Interface for []string based on +// the filename of a checksum line ("{checksum} {filename}\n") +type ByFilename []string + +func (s ByFilename) Len() int { return len(s) } +func (s ByFilename) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s ByFilename) Less(i, j int) bool { + return strings.Split(s[i], " ")[1] < strings.Split(s[j], " ")[1] +} diff --git a/goreleaser/int/pipe/checksums/checksums_test.go b/goreleaser/int/pipe/checksums/checksums_test.go index 893dbc5..c247091 100644 --- a/goreleaser/int/pipe/checksums/checksums_test.go +++ b/goreleaser/int/pipe/checksums/checksums_test.go @@ -220,7 +220,7 @@ func TestPipeCouldNotOpenChecksumsTxt(t *testing.T) { func TestPipeWhenNoArtifacts(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Run(ctx)) - require.Len(t, ctx.Artifacts.List(), 0) + require.Empty(t, ctx.Artifacts.List()) } func TestDefault(t *testing.T) { @@ -246,6 +246,55 @@ func TestDefaultSet(t *testing.T) { require.Equal(t, "checksums.txt", ctx.Config.Checksum.NameTemplate) } +func TestPipeChecksumsSortByFilename(t *testing.T) { + const binary = "binary" + const checksums = "checksums.txt" + const filePaths = "./testdata/order/*.txt" + + folder := t.TempDir() + file := filepath.Join(folder, binary) + require.NoError(t, os.WriteFile(file, []byte("some string"), 0o644)) + + ctx := testctx.NewWithCfg( + config.Project{ + Dist: folder, + ProjectName: binary, + Checksum: config.Checksum{ + Algorithm: "sha256", + NameTemplate: "checksums.txt", + ExtraFiles: []config.ExtraFile{ + {Glob: filePaths}, + }, + }, + }, + ) + + ctx.Artifacts.Add(&artifact.Artifact{ + Name: binary, + Path: file, + Type: artifact.UploadableBinary, + }) + + require.NoError(t, Pipe{}.Run(ctx)) + + bts, err := os.ReadFile(filepath.Join(folder, checksums)) + require.NoError(t, err) + + lines := strings.Split(string(bts), "\n") + + wantLinesOrder := []string{ + "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb a.txt", + "3b64db95cb55c763391c707108489ae18b4112d783300de38e033b4c98c3deaf b.txt", + "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc binary", + "64daa44ad493ff28a96effab6e77f1732a3d97d83241581b37dbd70a7a4900fe c.txt", + "5bf8aa57fc5a6bc547decf1cc6db63f10deb55a3c6c5df497d631fb3d95e1abf d.txt", + } + + for i, want := range wantLinesOrder { + require.Equal(t, want, lines[i]) + } +} + func TestPipeCheckSumsWithExtraFiles(t *testing.T) { const binary = "binary" const checksums = "checksums.txt" @@ -342,7 +391,7 @@ func TestPipeCheckSumsWithExtraFiles(t *testing.T) { return nil } checkSum, err := artifact.Extra[string](*a, artifactChecksumExtra) - require.Nil(t, err) + require.NoError(t, err) require.NotEmptyf(t, checkSum, "failed: %v", a.Path) return nil }) diff --git a/goreleaser/int/pipe/checksums/testdata/order/a.txt b/goreleaser/int/pipe/checksums/testdata/order/a.txt new file mode 100644 index 0000000..2e65efe --- /dev/null +++ b/goreleaser/int/pipe/checksums/testdata/order/a.txt @@ -0,0 +1 @@ +a \ No newline at end of file diff --git a/goreleaser/int/pipe/checksums/testdata/order/b.txt b/goreleaser/int/pipe/checksums/testdata/order/b.txt new file mode 100644 index 0000000..b5b5773 --- /dev/null +++ b/goreleaser/int/pipe/checksums/testdata/order/b.txt @@ -0,0 +1 @@ +bb \ No newline at end of file diff --git a/goreleaser/int/pipe/checksums/testdata/order/c.txt b/goreleaser/int/pipe/checksums/testdata/order/c.txt new file mode 100644 index 0000000..2383bd5 --- /dev/null +++ b/goreleaser/int/pipe/checksums/testdata/order/c.txt @@ -0,0 +1 @@ +ccc \ No newline at end of file diff --git a/goreleaser/int/pipe/checksums/testdata/order/d.txt b/goreleaser/int/pipe/checksums/testdata/order/d.txt new file mode 100644 index 0000000..902d5de --- /dev/null +++ b/goreleaser/int/pipe/checksums/testdata/order/d.txt @@ -0,0 +1 @@ +dddd \ No newline at end of file diff --git a/goreleaser/int/pipe/chocolatey/chocolatey.go b/goreleaser/int/pipe/chocolatey/chocolatey.go index 82e7b17..081efa0 100644 --- a/goreleaser/int/pipe/chocolatey/chocolatey.go +++ b/goreleaser/int/pipe/chocolatey/chocolatey.go @@ -17,6 +17,8 @@ import ( "github.com/goreleaser/goreleaser/pkg/context" ) +var errNoWindowsArchive = errors.New("chocolatey requires at least one windows archive") + // nuget package extension. const nupkgFormat = "nupkg" @@ -112,7 +114,7 @@ func doRun(ctx *context.Context, cl client.ReleaseURLTemplater, choco config.Cho List() if len(artifacts) == 0 { - return errors.New("chocolatey requires a windows build and archive") + return errNoWindowsArchive } // folderDir is the directory that then will be compressed to make the diff --git a/goreleaser/int/pipe/chocolatey/chocolatey_test.go b/goreleaser/int/pipe/chocolatey/chocolatey_test.go index d0bf3c6..22c1cd4 100644 --- a/goreleaser/int/pipe/chocolatey/chocolatey_test.go +++ b/goreleaser/int/pipe/chocolatey/chocolatey_test.go @@ -64,7 +64,7 @@ func Test_doRun(t *testing.T) { IDs: []string{"no-app"}, Goamd64: "v1", }, - err: "chocolatey requires a windows build and archive", + err: errNoWindowsArchive.Error(), }, { name: "choco command not found", @@ -326,7 +326,7 @@ func checkPushCmd(tb testing.TB, cmd string, args ...string) { tb.Helper() tb.Log("would have run:", cmd, args) require.Len(tb, args, 6) - require.Equal(tb, cmd, "choco") + require.Equal(tb, "choco", cmd) require.FileExists(tb, args[5]) } @@ -334,7 +334,7 @@ func checkPackCmd(tb testing.TB, cmd string, args ...string) { tb.Helper() tb.Log("would have run:", cmd, args) require.Len(tb, args, 4) - require.Equal(tb, cmd, "choco") + require.Equal(tb, "choco", cmd) require.FileExists(tb, args[1]) require.DirExists(tb, args[3]) } diff --git a/goreleaser/int/pipe/discord/discord_test.go b/goreleaser/int/pipe/discord/discord_test.go index d4be36d..7ad2ae6 100644 --- a/goreleaser/int/pipe/discord/discord_test.go +++ b/goreleaser/int/pipe/discord/discord_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "discord") + require.Equal(t, "discord", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Discord.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Discord.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/docker/docker.go b/goreleaser/int/pipe/docker/docker.go index 6f1f4c8..506ae72 100644 --- a/goreleaser/int/pipe/docker/docker.go +++ b/goreleaser/int/pipe/docker/docker.go @@ -235,6 +235,9 @@ files in that dir: Previous error: %w`, tmp, strings.Join(files, "\n "), err) } + if isBuildxContextError(err.Error()) { + return fmt.Errorf("docker buildx is not set to default context - please switch with 'docker context use default'") + } return err } @@ -262,6 +265,10 @@ func isFileNotFoundError(out string) bool { strings.Contains(out, ": not found") } +func isBuildxContextError(out string) bool { + return strings.Contains(out, "to switch to context") +} + func processImageTemplates(ctx *context.Context, docker config.Docker) ([]string, error) { // nolint:prealloc var images []string diff --git a/goreleaser/int/pipe/docker/docker_test.go b/goreleaser/int/pipe/docker/docker_test.go index 359cf48..2b819ad 100644 --- a/goreleaser/int/pipe/docker/docker_test.go +++ b/goreleaser/int/pipe/docker/docker_test.go @@ -64,7 +64,7 @@ func TestRunPipe(t *testing.T) { for _, id := range strings.Split(strings.TrimSpace(string(output)), "\n") { uniqueIDs[id] = id } - require.Equal(t, 1, len(uniqueIDs)) + require.Len(t, uniqueIDs, 1) } } } diff --git a/goreleaser/int/pipe/git/git.go b/goreleaser/int/pipe/git/git.go index 82a15ff..3a9c378 100644 --- a/goreleaser/int/pipe/git/git.go +++ b/goreleaser/int/pipe/git/git.go @@ -10,6 +10,7 @@ import ( "time" "github.com/caarlos0/log" + "github.com/charmbracelet/x/exp/ordered" "github.com/goreleaser/goreleaser/int/git" "github.com/goreleaser/goreleaser/int/pipe" "github.com/goreleaser/goreleaser/int/skips" @@ -46,22 +47,13 @@ func (Pipe) Run(ctx *context.Context) error { log.WithField("commit", info.Commit). WithField("branch", info.Branch). WithField("current_tag", info.CurrentTag). - WithField("previous_tag", firstNonEmpty(info.PreviousTag, "")). + WithField("previous_tag", ordered.First(info.PreviousTag, "")). WithField("dirty", info.Dirty). Info("git state") ctx.Version = strings.TrimPrefix(ctx.Git.CurrentTag, "v") return validate(ctx) } -func firstNonEmpty(ss ...string) string { - for _, s := range ss { - if s != "" { - return s - } - } - return "" -} - // nolint: gochecknoglobals var fakeInfo = context.GitInfo{ Branch: "none", diff --git a/goreleaser/int/pipe/gomod/gomod.go b/goreleaser/int/pipe/gomod/gomod.go index cd62fbf..0d11dd5 100644 --- a/goreleaser/int/pipe/gomod/gomod.go +++ b/goreleaser/int/pipe/gomod/gomod.go @@ -48,6 +48,9 @@ func (Pipe) Run(ctx *context.Context) error { return fmt.Errorf("failed to get module path: %w: %s", err, string(out)) } - ctx.ModulePath = result + // Splits and use the first line in case a `go.work` file exists with multiple modules. + // The first module is/should be `.` in the `go.work` file, so this should be correct. + // Running `go work sync` also always puts `.` as the first line in `use`. + ctx.ModulePath = strings.Split(result, "\n")[0] return nil } diff --git a/goreleaser/int/pipe/gomod/gomod_proxy.go b/goreleaser/int/pipe/gomod/gomod_proxy.go index 96ef5f2..a2e48d9 100644 --- a/goreleaser/int/pipe/gomod/gomod_proxy.go +++ b/goreleaser/int/pipe/gomod/gomod_proxy.go @@ -10,14 +10,64 @@ import ( "os/exec" "path" "path/filepath" + "regexp" "strings" "github.com/caarlos0/log" + "github.com/goreleaser/goreleaser/int/logext" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" ) +// ErrReplaceWithProxy happens when the configuration has gomod.proxy enabled, +// and the go.mod file contains replace directives. +// +// Replaces does not work with proxying, nor with go installs, +// and are made for development only. +var ErrReplaceWithProxy = errors.New("cannot use the go.mod replace directive with go mod proxy enabled") + +type CheckGoModPipe struct{} + +func (CheckGoModPipe) String() string { return "checking go.mod" } +func (CheckGoModPipe) Skip(ctx *context.Context) bool { + return ctx.ModulePath == "" || !ctx.Config.GoMod.Proxy +} + +var replaceRe = regexp.MustCompile("^replace .* => .*$") + +// Run the ReplaceCheckPipe. +func (CheckGoModPipe) Run(ctx *context.Context) error { + for i := range ctx.Config.Builds { + build := &ctx.Config.Builds[i] + path := filepath.Join(build.UnproxiedDir, "go.mod") + mod, err := os.ReadFile(path) + if err != nil { + log.Errorf("could not check %q", path) + return nil + } + for _, line := range strings.Split(string(mod), "\n") { + if !replaceRe.MatchString(line) { + continue + } + log.Warnf( + "your %[2]s file has %[1]s directive in it, and go mod proxying is enabled - "+ + "this does not work, and you need to either disable it or remove the %[1]s directive", + logext.Keyword("replace"), + logext.Keyword("go.mod"), + ) + log.Warnf("the offending line is %s", logext.Keyword(strings.TrimSpace(line))) + if ctx.Snapshot { + // only warn on snapshots + break + } + return ErrReplaceWithProxy + } + } + + return nil +} + // ProxyPipe for gomod proxy. type ProxyPipe struct{} diff --git a/goreleaser/int/pipe/gomod/gomod_proxy_test.go b/goreleaser/int/pipe/gomod/gomod_proxy_test.go index 6332ff2..b3df922 100644 --- a/goreleaser/int/pipe/gomod/gomod_proxy_test.go +++ b/goreleaser/int/pipe/gomod/gomod_proxy_test.go @@ -3,6 +3,7 @@ package gomod import ( "fmt" "os" + "os/exec" "path/filepath" "runtime" "syscall" @@ -15,6 +16,84 @@ import ( "github.com/stretchr/testify/require" ) +func TestString(t *testing.T) { + require.NotEmpty(t, CheckGoModPipe{}.String()) + require.NotEmpty(t, ProxyPipe{}.String()) +} + +func TestCheckGoMod(t *testing.T) { + t.Run("replace on snapshot", func(t *testing.T) { + dir := testlib.Mktmp(t) + dist := filepath.Join(dir, "dist") + ctx := testctx.NewWithCfg(config.Project{ + Dist: dist, + GoMod: config.GoMod{ + Proxy: true, + GoBinary: "go", + }, + Builds: []config.Build{ + { + ID: "foo", + Goos: []string{runtime.GOOS}, + Goarch: []string{runtime.GOARCH}, + Main: ".", + Dir: ".", + }, + }, + }, testctx.Snapshot, withGoReleaserModulePath) + + fakeGoModAndSum(t, ctx.ModulePath) + require.NoError(t, exec.Command("go", "mod", "edit", "-replace", "foo=../bar").Run()) + require.NoError(t, CheckGoModPipe{}.Run(ctx)) + }) + t.Run("no go mod", func(t *testing.T) { + dir := testlib.Mktmp(t) + dist := filepath.Join(dir, "dist") + ctx := testctx.NewWithCfg(config.Project{ + Dist: dist, + GoMod: config.GoMod{ + Proxy: true, + GoBinary: "go", + }, + Builds: []config.Build{ + { + ID: "foo", + Goos: []string{runtime.GOOS}, + Goarch: []string{runtime.GOARCH}, + Main: ".", + Dir: ".", + }, + }, + }, withGoReleaserModulePath) + + require.NoError(t, CheckGoModPipe{}.Run(ctx)) + }) + t.Run("replace", func(t *testing.T) { + dir := testlib.Mktmp(t) + dist := filepath.Join(dir, "dist") + ctx := testctx.NewWithCfg(config.Project{ + Dist: dist, + GoMod: config.GoMod{ + Proxy: true, + GoBinary: "go", + }, + Builds: []config.Build{ + { + ID: "foo", + Goos: []string{runtime.GOOS}, + Goarch: []string{runtime.GOARCH}, + Main: ".", + Dir: ".", + }, + }, + }, withGoReleaserModulePath) + + fakeGoModAndSum(t, ctx.ModulePath) + require.NoError(t, exec.Command("go", "mod", "edit", "-replace", "foo=../bar").Run()) + require.ErrorIs(t, CheckGoModPipe{}.Run(ctx), ErrReplaceWithProxy) + }) +} + func TestGoModProxy(t *testing.T) { t.Run("goreleaser", func(t *testing.T) { dir := testlib.Mktmp(t) @@ -167,7 +246,9 @@ func TestProxyDescription(t *testing.T) { func TestSkip(t *testing.T) { t.Run("skip false gomod.proxy", func(t *testing.T) { - require.True(t, ProxyPipe{}.Skip(testctx.New())) + ctx := testctx.New() + require.True(t, ProxyPipe{}.Skip(ctx)) + require.True(t, CheckGoModPipe{}.Skip(ctx)) }) t.Run("skip snapshot", func(t *testing.T) { @@ -177,6 +258,7 @@ func TestSkip(t *testing.T) { }, }, withGoReleaserModulePath, testctx.Snapshot) require.True(t, ProxyPipe{}.Skip(ctx)) + require.False(t, CheckGoModPipe{}.Skip(ctx)) }) t.Run("skip not a go module", func(t *testing.T) { @@ -186,6 +268,7 @@ func TestSkip(t *testing.T) { }, }, func(ctx *context.Context) { ctx.ModulePath = "" }) require.True(t, ProxyPipe{}.Skip(ctx)) + require.True(t, CheckGoModPipe{}.Skip(ctx)) }) t.Run("dont skip", func(t *testing.T) { @@ -195,6 +278,7 @@ func TestSkip(t *testing.T) { }, }, withGoReleaserModulePath) require.False(t, ProxyPipe{}.Skip(ctx)) + require.False(t, CheckGoModPipe{}.Skip(ctx)) }) } diff --git a/goreleaser/int/pipe/gomod/gomod_test.go b/goreleaser/int/pipe/gomod/gomod_test.go index 2a535b6..7067655 100644 --- a/goreleaser/int/pipe/gomod/gomod_test.go +++ b/goreleaser/int/pipe/gomod/gomod_test.go @@ -2,7 +2,9 @@ package gomod import ( "os" + "os/exec" "path/filepath" + "strings" "testing" "github.com/goreleaser/goreleaser/int/testctx" @@ -18,6 +20,33 @@ func TestRun(t *testing.T) { require.Equal(t, "github.com/goreleaser/goreleaser", ctx.ModulePath) } +func TestRunGoWork(t *testing.T) { + dir := testlib.Mktmp(t) + require.NoError(t, os.WriteFile( + filepath.Join(dir, "go.mod"), + []byte("module a"), + 0o666, + )) + require.NoError(t, os.Mkdir(filepath.Join(dir, "b"), 0o755)) + require.NoError(t, os.WriteFile( + filepath.Join(dir, "b", "go.mod"), + []byte("module a/b"), + 0o666, + )) + require.NoError(t, os.WriteFile( + filepath.Join(dir, "go.work"), + []byte("use (\n\t.\n\tb\n)"), + 0o666, + )) + out, err := exec.Command("go", "list", "-m").CombinedOutput() + require.NoError(t, err) + require.Equal(t, "a\na/b", strings.TrimSpace(string(out))) + ctx := testctx.New() + require.NoError(t, Pipe{}.Default(ctx)) + require.NoError(t, Pipe{}.Run(ctx)) + require.Equal(t, "a", ctx.ModulePath) +} + func TestRunCustomMod(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ GoMod: config.GoMod{ diff --git a/goreleaser/int/pipe/ko/ko.go b/goreleaser/int/pipe/ko/ko.go index ad6ef3b..2b59187 100644 --- a/goreleaser/int/pipe/ko/ko.go +++ b/goreleaser/int/pipe/ko/ko.go @@ -8,6 +8,7 @@ import ( "fmt" "io" "path/filepath" + "regexp" "strconv" "strings" "sync" @@ -48,7 +49,8 @@ var ( azureKeychain, ) - errNoRepository = errors.New("ko: missing repository: please set either the repository field or a $KO_DOCKER_REPO environment variable") + errNoRepository = errors.New("ko: missing repository: please set either the repository field or a $KO_DOCKER_REPO environment variable") + errInvalidMainPath = errors.New("ko: invalid Main path: ko.main (or build.main if ko.main is not set) should be a relative path") ) // Pipe that build OCI compliant images with ko. @@ -93,6 +95,10 @@ func (Pipe) Default(ctx *context.Context) error { ko.Main = build.Main } + if err := validateMainPath(ko.Main); err != nil { + return err + } + if ko.WorkingDir == "" { ko.WorkingDir = build.Dir } @@ -420,3 +426,18 @@ func getTimeFromTemplate(ctx *context.Context, t string) (*v1.Time, error) { } return &v1.Time{Time: time.Unix(seconds, 0)}, nil } + +func validateMainPath(path string) error { + // if the path is empty, it's probably fine as ko will use the default value + if path == "" { + return nil + } + if matched, _ := regexp.MatchString(`^\.?(\.\/[^\/]?.*)?$`, path); !matched { + return errInvalidMainPath + } + // paths sure can have dots in them, but if the path ends in .go, it's propably a file that one misundertood as a valid value + if strings.HasSuffix(path, ".go") { + return errInvalidMainPath + } + return nil +} diff --git a/goreleaser/int/pipe/ko/ko_test.go b/goreleaser/int/pipe/ko/ko_test.go index ab23332..828a129 100644 --- a/goreleaser/int/pipe/ko/ko_test.go +++ b/goreleaser/int/pipe/ko/ko_test.go @@ -340,6 +340,58 @@ func TestPublishPipeSuccess(t *testing.T) { } } +func TestKoValidateMainPathIssue4382(t *testing.T) { + // testing the validation of the main path directly to cover many cases + require.NoError(t, validateMainPath("")) + require.NoError(t, validateMainPath(".")) + require.NoError(t, validateMainPath("./...")) + require.NoError(t, validateMainPath("./app")) + require.NoError(t, validateMainPath("../../../...")) + require.NoError(t, validateMainPath("../../app/")) + require.NoError(t, validateMainPath("./testdata/app/main")) + require.NoError(t, validateMainPath("./testdata/app/folder.with.dots")) + + require.ErrorIs(t, validateMainPath("app/"), errInvalidMainPath) + require.ErrorIs(t, validateMainPath("/src/"), errInvalidMainPath) + require.ErrorIs(t, validateMainPath("/src/app"), errInvalidMainPath) + require.ErrorIs(t, validateMainPath("./testdata/app/main.go"), errInvalidMainPath) + + // testing with real context + ctxOk := testctx.NewWithCfg(config.Project{ + Builds: []config.Build{ + { + ID: "foo", + Main: "./...", + }, + }, + Kos: []config.Ko{ + { + ID: "default", + Build: "foo", + Repository: "fakerepo", + }, + }, + }) + require.NoError(t, Pipe{}.Default(ctxOk)) + + ctxWithInvalidMainPath := testctx.NewWithCfg(config.Project{ + Builds: []config.Build{ + { + ID: "foo", + Main: "/some/non/relative/path", + }, + }, + Kos: []config.Ko{ + { + ID: "default", + Build: "foo", + Repository: "fakerepo", + }, + }, + }) + require.ErrorIs(t, Pipe{}.Default(ctxWithInvalidMainPath), errInvalidMainPath) +} + func TestPublishPipeError(t *testing.T) { makeCtx := func() *context.Context { return testctx.NewWithCfg(config.Project{ @@ -386,7 +438,10 @@ func TestPublishPipeError(t *testing.T) { ctx := makeCtx() ctx.Config.Kos[0].WorkingDir = t.TempDir() require.NoError(t, Pipe{}.Default(ctx)) - require.EqualError(t, Pipe{}.Publish(ctx), `build: build: go build: exit status 1`) + require.EqualError( + t, Pipe{}.Publish(ctx), + "build: build: go build: exit status 1: pattern ./...: directory prefix . does not contain main module or its selected dependencies\n", + ) }) t.Run("invalid tags tmpl", func(t *testing.T) { diff --git a/goreleaser/int/pipe/krew/krew_test.go b/goreleaser/int/pipe/krew/krew_test.go index ce19db7..6ff3006 100644 --- a/goreleaser/int/pipe/krew/krew_test.go +++ b/goreleaser/int/pipe/krew/krew_test.go @@ -9,7 +9,6 @@ import ( "strings" "testing" - "github.com/charmbracelet/keygen" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/golden" @@ -159,7 +158,7 @@ func TestFullPipe(t *testing.T) { Branch: "main", Git: config.GitRepoRef{ URL: testlib.GitMakeBareRepository(t), - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), }, } }, diff --git a/goreleaser/int/pipe/linkedin/client.go b/goreleaser/int/pipe/linkedin/client.go index 1b81b3f..a4b8d0a 100644 --- a/goreleaser/int/pipe/linkedin/client.go +++ b/goreleaser/int/pipe/linkedin/client.go @@ -3,14 +3,18 @@ package linkedin import ( "bytes" "encoding/json" + "errors" "fmt" "io" "net/http" + "github.com/caarlos0/log" "github.com/goreleaser/goreleaser/pkg/context" "golang.org/x/oauth2" ) +var ErrLinkedinForbidden = errors.New("forbidden. please check your permissions") + type oauthClientConfig struct { Context *context.Context AccessToken string @@ -55,20 +59,26 @@ func createLinkedInClient(cfg oauthClientConfig) (client, error) { }, nil } -// getProfileID returns the Current Member's ID +// getProfileIDLegacy returns the Current Member's ID +// it's legacy because it uses deprecated v2/me endpoint, that requires old permissions such as r_liteprofile // POST Share API requires a Profile ID in the 'owner' field // Format must be in: 'urn:li:person:PROFILE_ID' // https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-current-members-profile -func (c client) getProfileID() (string, error) { +func (c client) getProfileIDLegacy() (string, error) { resp, err := c.client.Get(c.baseURL + "/v2/me") if err != nil { return "", fmt.Errorf("could not GET /v2/me: %w", err) } + if resp.StatusCode == http.StatusForbidden { + return "", ErrLinkedinForbidden + } + value, err := io.ReadAll(resp.Body) if err != nil { return "", fmt.Errorf("could not read response body: %w", err) } + defer resp.Body.Close() var result map[string]interface{} err = json.Unmarshal(value, &result) @@ -83,21 +93,74 @@ func (c client) getProfileID() (string, error) { return "", fmt.Errorf("could not find 'id' in result: %w", err) } +// getProfileSub returns the Current Member's sub (formally ID) - requires 'profile' permission +// POST Share API requires a Profile ID in the 'owner' field +// Format must be in: 'urn:li:person:PROFILE_SUB' +// https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2#api-request-to-retreive-member-details +func (c client) getProfileSub() (string, error) { + resp, err := c.client.Get(c.baseURL + "/v2/userinfo") + if err != nil { + return "", fmt.Errorf("could not GET /v2/userinfo: %w", err) + } + + if resp.StatusCode == http.StatusForbidden { + return "", ErrLinkedinForbidden + } + + value, err := io.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("could not read response body: %w", err) + } + defer resp.Body.Close() + + var result map[string]interface{} + err = json.Unmarshal(value, &result) + if err != nil { + return "", fmt.Errorf("could not unmarshal: %w", err) + } + + if v, ok := result["sub"]; ok { + return v.(string), nil + } + + return "", fmt.Errorf("could not find 'sub' in result: %w", err) +} + +// Person or Organization URN - urn:li:person:PROFILE_IDENTIFIER +// Owner of the share. Required on create. +// tries to get the profile sub (formally id) first, if it fails, it tries to get the profile id (legacy) +// https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api?tabs=http#schema +func (c client) getProfileURN() (string, error) { + // To build the URN, we need to get the profile sub (formally id) + profileSub, err := c.getProfileSub() + if err != nil { + if !errors.Is(err, ErrLinkedinForbidden) { + return "", fmt.Errorf("could not get profile sub: %w", err) + } + + log.Debug("could not get linkedin profile sub due to permission, getting profile id (legacy)") + + profileSub, err = c.getProfileIDLegacy() + if err != nil { + return "", fmt.Errorf("could not get profile id: %w", err) + } + } + + return fmt.Sprintf("urn:li:person:%s", profileSub), nil +} + func (c client) Share(message string) (string, error) { - // To get Owner of the share, we need to get profile id - profileID, err := c.getProfileID() + // To get Owner of the share, we need to get the profile URN + profileURN, err := c.getProfileURN() if err != nil { - return "", fmt.Errorf("could not get profile id: %w", err) + return "", fmt.Errorf("could not get profile URN: %w", err) } req := postShareRequest{ Text: postShareText{ Text: message, }, - // Person or Organization URN - // Owner of the share. Required on create. - // https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api?tabs=http#schema - Owner: fmt.Sprintf("urn:li:person:%s", profileID), + Owner: profileURN, } reqBytes, err := json.Marshal(req) @@ -116,6 +179,7 @@ func (c client) Share(message string) (string, error) { if err != nil { return "", fmt.Errorf("could not read from body: %w", err) } + defer resp.Body.Close() var result map[string]interface{} err = json.Unmarshal(body, &result) diff --git a/goreleaser/int/pipe/linkedin/client_test.go b/goreleaser/int/pipe/linkedin/client_test.go index 28cc8f4..efac27d 100644 --- a/goreleaser/int/pipe/linkedin/client_test.go +++ b/goreleaser/int/pipe/linkedin/client_test.go @@ -58,7 +58,7 @@ func TestClient_Share(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { _, _ = io.WriteString(rw, ` { - "id": "foo", + "sub": "foo", "activity": "123456789" } `) @@ -83,3 +83,38 @@ func TestClient_Share(t *testing.T) { wantLink := "https://www.linkedin.com/feed/update/123456789" require.Equal(t, wantLink, link) } + +func TestClientLegacyProfile_Share(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + if req.URL.Path == "/v2/userinfo" { + rw.WriteHeader(http.StatusForbidden) + return + } + // this is the response from /v2/me (legacy as a fallback) + _, _ = io.WriteString(rw, ` + { + "id": "foo", + "activity": "123456789" + } + `) + })) + defer server.Close() + + c, err := createLinkedInClient(oauthClientConfig{ + Context: testctx.New(), + AccessToken: "foo", + }) + if err != nil { + t.Fatalf("could not create client: %v", err) + } + + c.baseURL = server.URL + + link, err := c.Share("test") + if err != nil { + t.Fatalf("could not share: %v", err) + } + + wantLink := "https://www.linkedin.com/feed/update/123456789" + require.Equal(t, wantLink, link) +} diff --git a/goreleaser/int/pipe/linkedin/linkedin_test.go b/goreleaser/int/pipe/linkedin/linkedin_test.go index 2aef509..8e58d8f 100644 --- a/goreleaser/int/pipe/linkedin/linkedin_test.go +++ b/goreleaser/int/pipe/linkedin/linkedin_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "linkedin") + require.Equal(t, "linkedin", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.LinkedIn.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.LinkedIn.MessageTemplate) } func TestAnnounceDisabled(t *testing.T) { diff --git a/goreleaser/int/pipe/mastodon/mastodon_test.go b/goreleaser/int/pipe/mastodon/mastodon_test.go index e077d45..f5e618f 100644 --- a/goreleaser/int/pipe/mastodon/mastodon_test.go +++ b/goreleaser/int/pipe/mastodon/mastodon_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "mastodon") + require.Equal(t, "mastodon", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Mastodon.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Mastodon.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/mattermost/mattermost_test.go b/goreleaser/int/pipe/mattermost/mattermost_test.go index 4a79617..1df8dbd 100644 --- a/goreleaser/int/pipe/mattermost/mattermost_test.go +++ b/goreleaser/int/pipe/mattermost/mattermost_test.go @@ -15,13 +15,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "mattermost") + require.Equal(t, "mattermost", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Mattermost.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Mattermost.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/nfpm/nfpm_test.go b/goreleaser/int/pipe/nfpm/nfpm_test.go index 3a66c83..ab746c3 100644 --- a/goreleaser/int/pipe/nfpm/nfpm_test.go +++ b/goreleaser/int/pipe/nfpm/nfpm_test.go @@ -340,8 +340,13 @@ func doTestRunPipeConventionalNameTemplate(t *testing.T, snapshot bool) { Homepage: "https://goreleaser.com/", Bindir: "/usr/bin", NFPMOverridables: config.NFPMOverridables{ - FileNameTemplate: `{{ trimsuffix (trimsuffix (trimsuffix (trimsuffix .ConventionalFileName ".pkg.tar.zst") ".deb") ".rpm") ".apk" }}{{ if not (eq .Amd64 "v1")}}{{ .Amd64 }}{{ end }}`, - PackageName: "foo{{ if .IsSnapshot }}-snapshot{{ end }}", + FileNameTemplate: ` + {{- trimsuffix .ConventionalFileName .ConventionalExtension -}} + {{- if and (eq .Arm "6") (eq .ConventionalExtension ".deb") }}6{{ end -}} + {{- if not (eq .Amd64 "v1")}}{{ .Amd64 }}{{ end -}} + {{- .ConventionalExtension -}} + `, + PackageName: "foo{{ if .IsSnapshot }}-snapshot{{ end }}", }, }, }, @@ -437,6 +442,7 @@ func doTestRunPipeConventionalNameTemplate(t *testing.T, snapshot bool) { prefix + "_1.0.0_arm64.deb", prefix + "_1.0.0_armhf.apk", prefix + "_1.0.0_armhf.deb", + prefix + "_1.0.0_armhf6.deb", prefix + "_1.0.0_armv7.apk", prefix + "_1.0.0_i386.deb", prefix + "_1.0.0_mips.apk", @@ -1250,7 +1256,7 @@ func TestMeta(t *testing.T) { format := pkg.Format() require.NotEmpty(t, format) require.Equal(t, pkg.Name, "foo_1.0.0_linux_"+pkg.Goarch+"-10-20."+format) - require.Equal(t, pkg.ID(), "someid") + require.Equal(t, "someid", pkg.ID()) require.ElementsMatch(t, []string{ "/var/log/foobar", "/usr/share/testfile.txt", diff --git a/goreleaser/int/pipe/nix/licenses.go b/goreleaser/int/pipe/nix/licenses.go new file mode 100644 index 0000000..8251740 --- /dev/null +++ b/goreleaser/int/pipe/nix/licenses.go @@ -0,0 +1,234 @@ +// AUTO-GENERATED. DO NOT EDIT. + +package nix + +var validLicenses = []string{ + "abstyles", + "acsl14", + "activision", + "afl20", + "afl21", + "afl3", + "agpl3Only", + "agpl3Plus", + "aladdin", + "amazonsl", + "amd", + "aom", + "apsl10", + "apsl20", + "arphicpl", + "artistic1", + "artistic1-cl8", + "artistic2", + "asl20", + "asl20-llvm", + "bitstreamVera", + "bitTorrent10", + "bitTorrent11", + "bola11", + "boost", + "beerware", + "blueOak100", + "bsd0", + "bsd1", + "bsd2", + "bsd2Patent", + "bsd2WithViews", + "bsd3", + "bsd3Clear", + "bsdOriginal", + "bsdOriginalShortened", + "bsdOriginalUC", + "bsdProtection", + "bsl11", + "caossl", + "cal10", + "caldera", + "capec", + "clArtistic", + "cc0", + "cc-by-nc-nd-30", + "cc-by-nc-nd-40", + "cc-by-nc-sa-20", + "cc-by-nc-sa-25", + "cc-by-nc-sa-30", + "cc-by-nc-sa-40", + "cc-by-nc-30", + "cc-by-nc-40", + "cc-by-nd-30", + "cc-by-sa-10", + "cc-by-sa-20", + "cc-by-sa-25", + "cc-by-10", + "cc-by-30", + "cc-by-sa-30", + "cc-by-40", + "cc-by-sa-40", + "cddl", + "cecill20", + "cecill21", + "cecill-b", + "cecill-c", + "cpal10", + "cpl10", + "curl", + "doc", + "drl10", + "eapl", + "ecl20", + "efl10", + "efl20", + "elastic20", + "epl10", + "epl20", + "epson", + "eupl11", + "eupl12", + "fdl11Only", + "fdl11Plus", + "fdl12Only", + "fdl12Plus", + "fdl13Only", + "fdl13Plus", + "ffsl", + "fraunhofer-fdk", + "free", + "ftl", + "g4sl", + "geogebra", + "generaluser", + "gfl", + "gfsl", + "gpl1Only", + "gpl1Plus", + "gpl2Only", + "gpl2Classpath", + "gpl2ClasspathPlus", + "gpl2Oss", + "gpl2Plus", + "gpl3Only", + "gpl3Plus", + "gpl3ClasspathPlus", + "hpnd", + "hpndSellVariant", + "iasl", + "ijg", + "imagemagick", + "imlib2", + "info-zip", + "inria-compcert", + "inria-icesl", + "inria-zelus", + "ipa", + "ipl10", + "isc", + "databricks", + "databricks-dbx", + "fair", + "fairsource09", + "hl3", + "issl", + "knuth", + "lal12", + "lal13", + "lens", + "lgpl2Only", + "lgpl2Plus", + "lgpl21Only", + "lgpl21Plus", + "lgpl3Only", + "lgpl3Plus", + "lgpllr", + "libpng", + "libpng2", + "libssh2", + "libtiff", + "llgpl21", + "lppl1", + "lppl12", + "lppl13a", + "lppl13c", + "lpl-102", + "miros", + "mit", + "mit-feh", + "mitAdvertising", + "mit0", + "mpl10", + "mpl11", + "mpl20", + "mspl", + "mulan-psl2", + "nasa13", + "ncsa", + "ncul1", + "nlpl", + "nposl3", + "nvidiaCuda", + "nvidiaCudaRedist", + "obsidian", + "ocamlLgplLinkingException", + "ocamlpro_nc", + "odbl", + "ofl", + "oml", + "openldap", + "openssl", + "opubl", + "osl2", + "osl21", + "osl3", + "parity70", + "php301", + "postgresql", + "postman", + "psfl", + "publicDomain", + "purdueBsd", + "prosperity30", + "qhull", + "qpl", + "qwt", + "ruby", + "sendmail", + "sgi-b-20", + "sgmlug", + "sleepycat", + "smail", + "sspl", + "stk", + "sudo", + "sustainableUse", + "tsl", + "tcltk", + "ucd", + "ufl", + "unfree", + "unfreeRedistributable", + "unfreeRedistributableFirmware", + "unicode-dfs-2015", + "unicode-dfs-2016", + "unlicense", + "upl", + "vim", + "virtualbox-puel", + "vol-sl", + "vsl10", + "watcom", + "w3c", + "wadalab", + "wtfpl", + "wxWindows", + "x11", + "xfig", + "zlib", + "zpl20", + "zpl21", + "agpl3", + "gpl2", + "gpl3", + "lgpl2", + "lgpl21", + "lgpl3", +} diff --git a/goreleaser/int/pipe/nix/nix.go b/goreleaser/int/pipe/nix/nix.go index 336f692..9b29f26 100644 --- a/goreleaser/int/pipe/nix/nix.go +++ b/goreleaser/int/pipe/nix/nix.go @@ -9,6 +9,7 @@ import ( "os/exec" "path" "path/filepath" + "slices" "sort" "strings" "text/template" @@ -18,6 +19,7 @@ import ( "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/commitauthor" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" @@ -42,6 +44,7 @@ var ( errNoRepoName = pipe.Skip("repository name is not set") errSkipUpload = pipe.Skip("nix.skip_upload is set") errSkipUploadAuto = pipe.Skip("nix.skip_upload is set to 'auto', and current version is a pre-release") + errInvalidLicense = errors.New("nix.license is invalid") ) // NewBuild returns a pipe to be used in the build phase. @@ -64,7 +67,7 @@ func (Pipe) String() string { return "nixpkgs" } func (Pipe) ContinueOnError() bool { return true } func (Pipe) Dependencies(_ *context.Context) []string { return []string{"nix-prefetch-url"} } func (p Pipe) Skip(ctx *context.Context) bool { - return len(ctx.Config.Nix) == 0 || !p.prefetcher.Available() + return skips.Any(ctx, skips.Nix) || len(ctx.Config.Nix) == 0 || !p.prefetcher.Available() } func (Pipe) Default(ctx *context.Context) error { @@ -82,6 +85,9 @@ func (Pipe) Default(ctx *context.Context) error { if nix.Goamd64 == "" { nix.Goamd64 = "v1" } + if nix.License != "" && !slices.Contains(validLicenses, nix.License) { + return fmt.Errorf("%w: %s", errInvalidLicense, nix.License) + } } return nil @@ -257,9 +263,12 @@ func preparePkg( if len(dependencies) > 0 { inputs = append(inputs, "makeWrapper") } - if archives[0].Format() == "zip" { - inputs = append(inputs, "unzip") - dependencies = append(dependencies, "unzip") + for _, arch := range archives { + if arch.Format() == "zip" { + inputs = append(inputs, "unzip") + dependencies = append(dependencies, "unzip") + break + } } data := templateData{ diff --git a/goreleaser/int/pipe/nix/nix_test.go b/goreleaser/int/pipe/nix/nix_test.go index 9467715..a57250f 100644 --- a/goreleaser/int/pipe/nix/nix_test.go +++ b/goreleaser/int/pipe/nix/nix_test.go @@ -11,6 +11,7 @@ import ( "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/golden" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/pkg/config" "github.com/stretchr/testify/require" @@ -28,6 +29,11 @@ func TestSkip(t *testing.T) { t.Run("no-nix", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) + t.Run("skip flag", func(t *testing.T) { + require.True(t, NewPublish().Skip(testctx.NewWithCfg(config.Project{ + Nix: []config.Nix{{}}, + }, testctx.Skip(skips.Nix)))) + }) t.Run("nix-all-good", func(t *testing.T) { require.False(t, NewPublish().Skip(testctx.NewWithCfg(config.Project{ Nix: []config.Nix{{}}, @@ -80,6 +86,7 @@ func TestPrefetcher(t *testing.T) { func TestRunPipe(t *testing.T) { for _, tt := range []struct { name string + expectDefaultErrorIs error expectRunErrorIs error expectPublishErrorIs error nix config.Nix @@ -94,6 +101,18 @@ func TestRunPipe(t *testing.T) { }, }, }, + { + name: "invalid license", + expectDefaultErrorIs: errInvalidLicense, + nix: config.Nix{ + IDs: []string{"foo"}, + License: "mitt", + Repository: config.RepoRef{ + Owner: "foo", + Name: "bar", + }, + }, + }, { name: "deps", nix: config.Nix{ @@ -199,6 +218,20 @@ func TestRunPipe(t *testing.T) { }, }, }, + { + name: "zip-and-tar", + nix: config.Nix{ + Name: "foozip", + IDs: []string{"zip-and-tar"}, + Description: "my test", + Homepage: "https://goreleaser.com", + License: "mit", + Repository: config.RepoRef{ + Owner: "foo", + Name: "bar", + }, + }, + }, { name: "unibin", expectRunErrorIs: ErrMultipleArchivesSamePlatform, @@ -477,6 +510,11 @@ func TestRunPipe(t *testing.T) { } createFakeArtifact("wrapped-in-dir", goos, goarch, "", "", "tar.gz", map[string]any{artifact.ExtraWrappedIn: "./foo"}) createFakeArtifact("foo-zip", goos, goarch, "v1", "", "zip", nil) + if goos == "darwin" { + createFakeArtifact("zip-and-tar", goos, goarch, "v1", "", "zip", nil) + } else { + createFakeArtifact("zip-and-tar", goos, goarch, "v1", "", "tar.gz", nil) + } } } @@ -504,12 +542,18 @@ func TestRunPipe(t *testing.T) { } // default + if tt.expectDefaultErrorIs != nil { + err := bpipe.Default(ctx) + require.ErrorAs(t, err, &tt.expectDefaultErrorIs) + return + + } require.NoError(t, bpipe.Default(ctx)) // run if tt.expectRunErrorIs != nil { err := bpipe.runAll(ctx, client) - require.ErrorAs(t, err, &tt.expectPublishErrorIs) + require.ErrorAs(t, err, &tt.expectRunErrorIs) return } require.NoError(t, bpipe.runAll(ctx, client)) diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_build.nix.golden index a03786c..7974cf4 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_build.nix.golden @@ -56,6 +56,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_publish.nix.golden index 9389b72..a8efc14 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/deps_publish.nix.golden @@ -56,6 +56,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_build.nix.golden index 45bf7d8..d78aff7 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_build.nix.golden @@ -57,6 +57,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_publish.nix.golden index fee8678..c9d694f 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/extra-install_publish.nix.golden @@ -57,6 +57,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_build.nix.golden index 90316ab..7ae78b1 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_build.nix.golden @@ -49,6 +49,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_publish.nix.golden index 9c6272e..ba68c14 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/minimal_publish.nix.golden @@ -49,6 +49,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_build.nix.golden index 4da5759..43c4c3e 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_build.nix.golden @@ -52,6 +52,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_publish.nix.golden index 0167794..0ddbf0c 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/open-pr_publish.nix.golden @@ -52,6 +52,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_build.nix.golden index 2705272..d4a5b9f 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_build.nix.golden @@ -39,6 +39,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "x86_64-darwin" "x86_64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_publish.nix.golden index 0fb0702..dbdab02 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/partial_publish.nix.golden @@ -39,6 +39,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "x86_64-darwin" "x86_64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload-auto_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload-auto_build.nix.golden index 13829a8..b47ff6d 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload-auto_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload-auto_build.nix.golden @@ -49,6 +49,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload_build.nix.golden index 13829a8..b47ff6d 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/skip-upload_build.nix.golden @@ -49,6 +49,8 @@ pkgs.stdenv.mkDerivation { meta = { + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_build.nix.golden index 388669c..471a47b 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_build.nix.golden @@ -48,6 +48,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_publish.nix.golden index 7beb6a8..2154ea9 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/unibin-replaces_publish.nix.golden @@ -48,6 +48,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_build.nix.golden index 3942910..fa23167 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_build.nix.golden @@ -52,6 +52,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_publish.nix.golden index b953193..e301e74 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/wrapped-in-dir_publish.nix.golden @@ -52,6 +52,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_build.nix.golden new file mode 100644 index 0000000..07c2200 --- /dev/null +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_build.nix.golden @@ -0,0 +1,58 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# vim: set ft=nix ts=2 sw=2 sts=2 et sta +{ +system ? builtins.currentSystem +, pkgs +, lib +, fetchurl +, installShellFiles +, makeWrapper +, stdenv +, unzip +}: +let + shaMap = { + i686-linux = "0000000000000000000000000000000000000000000000000000"; + aarch64-linux = "0000000000000000000000000000000000000000000000000000"; + aarch64-darwin = "0000000000000000000000000000000000000000000000000000"; + }; + + urlMap = { + i686-linux = "https://dummyhost/download/v1.2.1/foo_linux_386.tar.gz"; + aarch64-linux = "https://dummyhost/download/v1.2.1/foo_linux_arm64.tar.gz"; + aarch64-darwin = "https://dummyhost/download/v1.2.1/foo_darwin_arm64.zip"; + }; +in +pkgs.stdenv.mkDerivation { + pname = "foozip"; + version = "1.2.1"; + src = fetchurl { + url = urlMap.${system}; + sha256 = shaMap.${system}; + }; + + sourceRoot = "."; + + nativeBuildInputs = [ installShellFiles unzip ]; + + installPhase = '' + mkdir -p $out/bin + cp -vr ./foo $out/bin/foo + ''; + + system = system; + + meta = { + description = "my test"; + homepage = "https://goreleaser.com"; + license = lib.licenses.mit; + + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + + platforms = [ + "aarch64-darwin" + "aarch64-linux" + "i686-linux" + ]; + }; +} diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_publish.nix.golden new file mode 100644 index 0000000..d4998cc --- /dev/null +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-and-tar_publish.nix.golden @@ -0,0 +1,58 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# vim: set ft=nix ts=2 sw=2 sts=2 et sta +{ +system ? builtins.currentSystem +, pkgs +, lib +, fetchurl +, installShellFiles +, makeWrapper +, stdenv +, unzip +}: +let + shaMap = { + i686-linux = "sha16"; + aarch64-linux = "sha2"; + aarch64-darwin = "sha11"; + }; + + urlMap = { + i686-linux = "https://dummyhost/download/v1.2.1/foo_linux_386.tar.gz"; + aarch64-linux = "https://dummyhost/download/v1.2.1/foo_linux_arm64.tar.gz"; + aarch64-darwin = "https://dummyhost/download/v1.2.1/foo_darwin_arm64.zip"; + }; +in +pkgs.stdenv.mkDerivation { + pname = "foozip"; + version = "1.2.1"; + src = fetchurl { + url = urlMap.${system}; + sha256 = shaMap.${system}; + }; + + sourceRoot = "."; + + nativeBuildInputs = [ installShellFiles unzip ]; + + installPhase = '' + mkdir -p $out/bin + cp -vr ./foo $out/bin/foo + ''; + + system = system; + + meta = { + description = "my test"; + homepage = "https://goreleaser.com"; + license = lib.licenses.mit; + + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + + platforms = [ + "aarch64-darwin" + "aarch64-linux" + "i686-linux" + ]; + }; +} diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_build.nix.golden index 976f486..951e577 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_build.nix.golden @@ -53,6 +53,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_publish.nix.golden index 0b90497..915cbea 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip-with-dependencies_publish.nix.golden @@ -53,6 +53,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_build.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_build.nix.golden index d7f5642..5c784c4 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_build.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_build.nix.golden @@ -51,6 +51,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_publish.nix.golden b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_publish.nix.golden index 0e27df4..94224c2 100644 --- a/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_publish.nix.golden +++ b/goreleaser/int/pipe/nix/testdata/TestRunPipe/zip_publish.nix.golden @@ -51,6 +51,8 @@ pkgs.stdenv.mkDerivation { homepage = "https://goreleaser.com"; license = lib.licenses.mit; + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ "aarch64-darwin" "aarch64-linux" diff --git a/goreleaser/int/pipe/nix/tmpl.nix b/goreleaser/int/pipe/nix/tmpl.nix index b1a6728..e3b7314 100644 --- a/goreleaser/int/pipe/nix/tmpl.nix +++ b/goreleaser/int/pipe/nix/tmpl.nix @@ -102,6 +102,8 @@ pkgs.stdenv.mkDerivation { license = lib.licenses.{{ . }}; {{- end }} + sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; + platforms = [ {{- range $index, $plat := .Platforms }} "{{ . }}" diff --git a/goreleaser/int/pipe/opencollective/opencollective_test.go b/goreleaser/int/pipe/opencollective/opencollective_test.go index 4125327..eb8ca2d 100644 --- a/goreleaser/int/pipe/opencollective/opencollective_test.go +++ b/goreleaser/int/pipe/opencollective/opencollective_test.go @@ -10,14 +10,14 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "opencollective") + require.Equal(t, "opencollective", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.OpenCollective.TitleTemplate, defaultTitleTemplate) - require.Equal(t, ctx.Config.Announce.OpenCollective.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultTitleTemplate, ctx.Config.Announce.OpenCollective.TitleTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.OpenCollective.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/partial/partial.go b/goreleaser/int/pipe/partial/partial.go new file mode 100644 index 0000000..0f4f2f9 --- /dev/null +++ b/goreleaser/int/pipe/partial/partial.go @@ -0,0 +1,25 @@ +package partial + +import ( + "os" + "runtime" + + "github.com/charmbracelet/x/exp/ordered" + "github.com/goreleaser/goreleaser/pkg/context" +) + +type Pipe struct{} + +func (Pipe) String() string { return "partial" } +func (Pipe) Skip(ctx *context.Context) bool { return !ctx.Partial } + +func (Pipe) Run(ctx *context.Context) error { + ctx.PartialTarget = getFilter() + return nil +} + +func getFilter() string { + goos := ordered.First(os.Getenv("GGOOS"), os.Getenv("GOOS"), runtime.GOOS) + goarch := ordered.First(os.Getenv("GGOARCH"), os.Getenv("GOARCH"), runtime.GOARCH) + return goos + "_" + goarch +} diff --git a/goreleaser/int/pipe/partial/partial_test.go b/goreleaser/int/pipe/partial/partial_test.go new file mode 100644 index 0000000..1924de8 --- /dev/null +++ b/goreleaser/int/pipe/partial/partial_test.go @@ -0,0 +1,57 @@ +package partial + +import ( + "fmt" + "runtime" + "testing" + + "github.com/goreleaser/goreleaser/int/testctx" + "github.com/goreleaser/goreleaser/pkg/config" + "github.com/stretchr/testify/require" +) + +var pipe = Pipe{} + +func TestString(t *testing.T) { + require.NotEmpty(t, pipe.String()) +} + +func TestSkip(t *testing.T) { + t.Run("partial", func(t *testing.T) { + ctx := testctx.New(testctx.Partial) + require.False(t, pipe.Skip(ctx)) + }) + + t.Run("full", func(t *testing.T) { + require.True(t, pipe.Skip(testctx.New())) + }) +} + +func TestRun(t *testing.T) { + t.Run("target", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Dist: "dist", + }, testctx.Partial) + t.Setenv("GOOS", "windows") + t.Setenv("GOARCH", "arm64") + require.NoError(t, pipe.Run(ctx)) + require.Equal(t, "windows_arm64", ctx.PartialTarget) + }) + t.Run("using GGOOS and GGOARCH", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Dist: "dist", + }, testctx.Partial) + t.Setenv("GGOOS", "windows") + t.Setenv("GGOARCH", "arm64") + require.NoError(t, pipe.Run(ctx)) + require.Equal(t, "windows_arm64", ctx.PartialTarget) + }) + t.Run("using runtime", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Dist: "dist", + }, testctx.Partial) + require.NoError(t, pipe.Run(ctx)) + target := fmt.Sprintf("%s_%s", runtime.GOOS, runtime.GOARCH) + require.Equal(t, target, ctx.PartialTarget) + }) +} diff --git a/goreleaser/int/pipe/project/project.go b/goreleaser/int/pipe/project/project.go index 60b1ec3..c27aede 100644 --- a/goreleaser/int/pipe/project/project.go +++ b/goreleaser/int/pipe/project/project.go @@ -6,6 +6,7 @@ import ( "os/exec" "strings" + "github.com/goreleaser/goreleaser/int/git" "github.com/goreleaser/goreleaser/pkg/context" ) @@ -27,6 +28,7 @@ func (Pipe) Default(ctx *context.Context) error { ctx.Config.Release.GitLab.Name, ctx.Config.Release.Gitea.Name, moduleName(), + gitRemote(ctx), } { if candidate == "" { continue @@ -55,3 +57,14 @@ func moduleName() string { parts := strings.Split(mod, "/") return strings.TrimSpace(parts[len(parts)-1]) } + +func gitRemote(ctx *context.Context) string { + repo, err := git.ExtractRepoFromConfig(ctx) + if err != nil { + return "" + } + if err := repo.CheckSCM(); err != nil { + return "" + } + return repo.Name +} diff --git a/goreleaser/int/pipe/project/project_test.go b/goreleaser/int/pipe/project/project_test.go index e1df4ae..f1dcd05 100644 --- a/goreleaser/int/pipe/project/project_test.go +++ b/goreleaser/int/pipe/project/project_test.go @@ -76,6 +76,23 @@ func TestEmptyProjectName_DefaultsToGoModPath(t *testing.T) { require.Equal(t, "bar", ctx.Config.ProjectName) } +func TestEmptyProjectName_DefaultsToGitURL(t *testing.T) { + _ = testlib.Mktmp(t) + ctx := testctx.New() + testlib.GitInit(t) + testlib.GitRemoteAdd(t, "git@github.com:foo/bar.git") + require.NoError(t, Pipe{}.Default(ctx)) + require.Equal(t, "bar", ctx.Config.ProjectName) +} + +func TestEmptyProjectName_DefaultsToNonSCMGitURL(t *testing.T) { + _ = testlib.Mktmp(t) + ctx := testctx.New() + testlib.GitInit(t) + testlib.GitRemoteAdd(t, "git@myhost.local:bar.git") + require.EqualError(t, Pipe{}.Default(ctx), "couldn't guess project_name, please add it to your config") +} + func TestEmptyProjectNameAndRelease(t *testing.T) { _ = testlib.Mktmp(t) ctx := testctx.NewWithCfg(config.Project{ diff --git a/goreleaser/int/pipe/publish/publish_test.go b/goreleaser/int/pipe/publish/publish_test.go index f773f6d..97c2353 100644 --- a/goreleaser/int/pipe/publish/publish_test.go +++ b/goreleaser/int/pipe/publish/publish_test.go @@ -44,7 +44,7 @@ func TestPublishSuccess(t *testing.T) { require.Error(t, err) merr := &multierror.Error{} require.ErrorAs(t, err, &merr) - require.Equal(t, merr.Len(), 1) + require.Equal(t, 1, merr.Len()) require.True(t, lastStep.ran) } diff --git a/goreleaser/int/pipe/reddit/reddit_test.go b/goreleaser/int/pipe/reddit/reddit_test.go index 5c2a8c6..d527368 100644 --- a/goreleaser/int/pipe/reddit/reddit_test.go +++ b/goreleaser/int/pipe/reddit/reddit_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "reddit") + require.Equal(t, "reddit", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Reddit.TitleTemplate, defaultTitleTemplate) + require.Equal(t, defaultTitleTemplate, ctx.Config.Announce.Reddit.TitleTemplate) } func TestAnnounceInvalidURLTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/release/release_test.go b/goreleaser/int/pipe/release/release_test.go index e84155a..89d07ac 100644 --- a/goreleaser/int/pipe/release/release_test.go +++ b/goreleaser/int/pipe/release/release_test.go @@ -487,7 +487,7 @@ func TestDefaultPreRelease(t *testing.T) { testctx.WithSemver(1, 0, 0, ""), ) require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, false, ctx.PreRelease) + require.False(t, ctx.PreRelease) }) t.Run("auto-rc", func(t *testing.T) { @@ -501,7 +501,7 @@ func TestDefaultPreRelease(t *testing.T) { testctx.WithSemver(1, 0, 0, "rc1"), ) require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, true, ctx.PreRelease) + require.True(t, ctx.PreRelease) }) t.Run("auto-rc-github-setup", func(t *testing.T) { @@ -519,7 +519,7 @@ func TestDefaultPreRelease(t *testing.T) { testctx.WithSemver(1, 0, 0, "rc1"), ) require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, true, ctx.PreRelease) + require.True(t, ctx.PreRelease) }) } diff --git a/goreleaser/int/pipe/release/scm.go b/goreleaser/int/pipe/release/scm.go index aaa81b7..67c1780 100644 --- a/goreleaser/int/pipe/release/scm.go +++ b/goreleaser/int/pipe/release/scm.go @@ -16,25 +16,21 @@ func setupGitHub(ctx *context.Context) error { ctx.Config.Release.GitHub = repo } - owner, err := tmpl.New(ctx).Apply(ctx.Config.Release.GitHub.Owner) - if err != nil { + if err := tmpl.New(ctx).ApplyAll( + &ctx.Config.Release.GitHub.Name, + &ctx.Config.Release.GitHub.Owner, + ); err != nil { return err } - ctx.Config.Release.GitHub.Owner = owner - name, err := tmpl.New(ctx).Apply(ctx.Config.Release.GitHub.Name) - if err != nil { - return err - } - ctx.Config.Release.GitHub.Name = name - - ctx.ReleaseURL, err = tmpl.New(ctx).Apply(fmt.Sprintf( + url, err := tmpl.New(ctx).Apply(fmt.Sprintf( "%s/%s/%s/releases/tag/%s", ctx.Config.GitHubURLs.Download, ctx.Config.Release.GitHub.Owner, ctx.Config.Release.GitHub.Name, ctx.Git.CurrentTag, )) + ctx.ReleaseURL = url return err } @@ -47,25 +43,21 @@ func setupGitLab(ctx *context.Context) error { ctx.Config.Release.GitLab = repo } - owner, err := tmpl.New(ctx).Apply(ctx.Config.Release.GitLab.Owner) - if err != nil { + if err := tmpl.New(ctx).ApplyAll( + &ctx.Config.Release.GitLab.Name, + &ctx.Config.Release.GitLab.Owner, + ); err != nil { return err } - ctx.Config.Release.GitLab.Owner = owner - name, err := tmpl.New(ctx).Apply(ctx.Config.Release.GitLab.Name) - if err != nil { - return err - } - ctx.Config.Release.GitLab.Name = name - - ctx.ReleaseURL, err = tmpl.New(ctx).Apply(fmt.Sprintf( + url, err := tmpl.New(ctx).Apply(fmt.Sprintf( "%s/%s/%s/-/releases/%s", ctx.Config.GitLabURLs.Download, ctx.Config.Release.GitLab.Owner, ctx.Config.Release.GitLab.Name, ctx.Git.CurrentTag, )) + ctx.ReleaseURL = url return err } @@ -78,24 +70,20 @@ func setupGitea(ctx *context.Context) error { ctx.Config.Release.Gitea = repo } - owner, err := tmpl.New(ctx).Apply(ctx.Config.Release.Gitea.Owner) - if err != nil { - return err - } - ctx.Config.Release.Gitea.Owner = owner - - name, err := tmpl.New(ctx).Apply(ctx.Config.Release.Gitea.Name) - if err != nil { + if err := tmpl.New(ctx).ApplyAll( + &ctx.Config.Release.Gitea.Name, + &ctx.Config.Release.Gitea.Owner, + ); err != nil { return err } - ctx.Config.Release.Gitea.Name = name - ctx.ReleaseURL, err = tmpl.New(ctx).Apply(fmt.Sprintf( + url, err := tmpl.New(ctx).Apply(fmt.Sprintf( "%s/%s/%s/releases/tag/%s", ctx.Config.GiteaURLs.Download, ctx.Config.Release.Gitea.Owner, ctx.Config.Release.Gitea.Name, ctx.Git.CurrentTag, )) + ctx.ReleaseURL = url return err } diff --git a/goreleaser/int/pipe/sbom/sbom.go b/goreleaser/int/pipe/sbom/sbom.go index 609ddea..0d3e25e 100644 --- a/goreleaser/int/pipe/sbom/sbom.go +++ b/goreleaser/int/pipe/sbom/sbom.go @@ -72,7 +72,7 @@ func setConfigDefaults(cfg *config.SBOM) error { } if cfg.Cmd == "syft" { if len(cfg.Args) == 0 { - cfg.Args = []string{"$artifact", "--file", "$document", "--output", "spdx-json"} + cfg.Args = []string{"$artifact", "--output", "spdx-json=$document"} } if len(cfg.Env) == 0 && (cfg.Artifacts == "source" || cfg.Artifacts == "archive") { cfg.Env = []string{ @@ -131,6 +131,9 @@ func catalogTask(ctx *context.Context, cfg config.SBOM) func() error { filters = append(filters, artifact.ByIDs(cfg.IDs...)) } artifacts := ctx.Artifacts.Filter(artifact.And(filters...)).List() + if len(artifacts) == 0 { + log.Warn("no artifacts matching current filters") + } return catalog(ctx, cfg, artifacts) } } @@ -240,6 +243,10 @@ func catalogArtifact(ctx *context.Context, cfg config.SBOM, a *artifact.Artifact } + if len(artifacts) == 0 { + return nil, fmt.Errorf("cataloging artifacts: command did not write any files, check your configuration") + } + return artifacts, nil } diff --git a/goreleaser/int/pipe/sbom/sbom_test.go b/goreleaser/int/pipe/sbom/sbom_test.go index 5d3b93c..9f6a6e8 100644 --- a/goreleaser/int/pipe/sbom/sbom_test.go +++ b/goreleaser/int/pipe/sbom/sbom_test.go @@ -24,7 +24,7 @@ func TestDescription(t *testing.T) { } func TestSBOMCatalogDefault(t *testing.T) { - defaultArgs := []string{"$artifact", "--file", "$document", "--output", "spdx-json"} + defaultArgs := []string{"$artifact", "--output", "spdx-json=$document"} defaultSboms := []string{ "{{ .ArtifactName }}.sbom", } @@ -307,10 +307,8 @@ func TestSBOMCatalogArtifacts(t *testing.T) { { Artifacts: "any", Args: []string{ - "--file", - "$document0", "--output", - "spdx-json", + "spdx-json=$document0", "artifact5.tar.gz", }, Documents: []string{ @@ -377,10 +375,8 @@ func TestSBOMCatalogArtifacts(t *testing.T) { { Artifacts: "binary", Args: []string{ - "--file", - "$document", "--output", - "spdx-json", + "spdx-json=$document", "$artifact", }, Documents: []string{ @@ -413,6 +409,23 @@ func TestSBOMCatalogArtifacts(t *testing.T) { }), expectedErrMsg: "cataloging artifacts: false failed: exit status 1: ", }, + { + desc: "catalog wrong command", + ctx: testctx.NewWithCfg(config.Project{ + SBOMs: []config.SBOM{ + {Args: []string{"$artifact", "--file", "$sbom", "--output", "spdx-json"}}, + }, + }), + expectedErrMsg: "cataloging artifacts: command did not write any files, check your configuration", + }, + { + desc: "no matches", + ctx: testctx.NewWithCfg(config.Project{ + SBOMs: []config.SBOM{ + {IDs: []string{"nopenopenope"}}, + }, + }), + }, } for _, test := range tests { diff --git a/goreleaser/int/pipe/scoop/scoop.go b/goreleaser/int/pipe/scoop/scoop.go index a929d22..1b7c0a3 100644 --- a/goreleaser/int/pipe/scoop/scoop.go +++ b/goreleaser/int/pipe/scoop/scoop.go @@ -17,6 +17,7 @@ import ( "github.com/goreleaser/goreleaser/int/commitauthor" "github.com/goreleaser/goreleaser/int/deprecate" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" @@ -62,7 +63,7 @@ type Pipe struct{} func (Pipe) String() string { return "scoop manifests" } func (Pipe) ContinueOnError() bool { return true } func (Pipe) Skip(ctx *context.Context) bool { - return ctx.Config.Scoop.Repository.Name == "" && len(ctx.Config.Scoops) == 0 + return skips.Any(ctx, skips.Scoop) || (ctx.Config.Scoop.Repository.Name == "" && len(ctx.Config.Scoops) == 0) } // Run creates the scoop manifest locally. diff --git a/goreleaser/int/pipe/scoop/scoop_test.go b/goreleaser/int/pipe/scoop/scoop_test.go index 600156b..dc1e3dd 100644 --- a/goreleaser/int/pipe/scoop/scoop_test.go +++ b/goreleaser/int/pipe/scoop/scoop_test.go @@ -5,10 +5,10 @@ import ( "path/filepath" "testing" - "github.com/charmbracelet/keygen" "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/golden" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/int/testlib" "github.com/goreleaser/goreleaser/pkg/config" @@ -239,7 +239,7 @@ func Test_doRun(t *testing.T) { Branch: "main", Git: config.GitRepoRef{ URL: testlib.GitMakeBareRepository(t), - PrivateKey: testlib.MakeNewSSHKey(t, keygen.Ed25519, ""), + PrivateKey: testlib.MakeNewSSHKey(t, ""), }, }, Folder: "scoops", @@ -1103,7 +1103,16 @@ func TestSkip(t *testing.T) { t.Run("skip", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) - + t.Run("skip flag", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Scoop: config.Scoop{ + Repository: config.RepoRef{ + Name: "a", + }, + }, + }, testctx.Skip(skips.Scoop)) + require.True(t, Pipe{}.Skip(ctx)) + }) t.Run("dont skip", func(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ Scoop: config.Scoop{ diff --git a/goreleaser/int/pipe/sign/sign_test.go b/goreleaser/int/pipe/sign/sign_test.go index b5a6c5b..a863ead 100644 --- a/goreleaser/int/pipe/sign/sign_test.go +++ b/goreleaser/int/pipe/sign/sign_test.go @@ -64,10 +64,10 @@ func TestSignDefault(t *testing.T) { setGpg(t, ctx, "") // force empty gpg.program require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Signs[0].Cmd, "gpg") - require.Equal(t, ctx.Config.Signs[0].Signature, "${artifact}.sig") - require.Equal(t, ctx.Config.Signs[0].Args, []string{"--output", "$signature", "--detach-sig", "$artifact"}) - require.Equal(t, ctx.Config.Signs[0].Artifacts, "none") + require.Equal(t, "gpg", ctx.Config.Signs[0].Cmd) + require.Equal(t, "${artifact}.sig", ctx.Config.Signs[0].Signature) + require.Equal(t, []string{"--output", "$signature", "--detach-sig", "$artifact"}, ctx.Config.Signs[0].Args) + require.Equal(t, "none", ctx.Config.Signs[0].Artifacts) } func TestDefaultGpgFromGitConfig(t *testing.T) { @@ -80,7 +80,7 @@ func TestDefaultGpgFromGitConfig(t *testing.T) { setGpg(t, ctx, "not-really-gpg") require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Signs[0].Cmd, "not-really-gpg") + require.Equal(t, "not-really-gpg", ctx.Config.Signs[0].Cmd) } func TestSignDisabled(t *testing.T) { diff --git a/goreleaser/int/pipe/slack/slack_test.go b/goreleaser/int/pipe/slack/slack_test.go index ef4dd5d..eef26ad 100644 --- a/goreleaser/int/pipe/slack/slack_test.go +++ b/goreleaser/int/pipe/slack/slack_test.go @@ -13,13 +13,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "slack") + require.Equal(t, "slack", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Slack.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Slack.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/snapcraft/snapcraft.go b/goreleaser/int/pipe/snapcraft/snapcraft.go index 38c129e..40136e2 100644 --- a/goreleaser/int/pipe/snapcraft/snapcraft.go +++ b/goreleaser/int/pipe/snapcraft/snapcraft.go @@ -17,6 +17,7 @@ import ( "github.com/goreleaser/goreleaser/int/ids" "github.com/goreleaser/goreleaser/int/pipe" "github.com/goreleaser/goreleaser/int/semerrgroup" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/int/yaml" "github.com/goreleaser/goreleaser/pkg/config" @@ -104,8 +105,10 @@ type Pipe struct{} func (Pipe) String() string { return "snapcraft packages" } func (Pipe) ContinueOnError() bool { return true } -func (Pipe) Skip(ctx *context.Context) bool { return len(ctx.Config.Snapcrafts) == 0 } func (Pipe) Dependencies(_ *context.Context) []string { return []string{"snapcraft"} } +func (Pipe) Skip(ctx *context.Context) bool { + return skips.Any(ctx, skips.Snapcraft) || len(ctx.Config.Snapcrafts) == 0 +} // Default sets the pipe defaults. func (Pipe) Default(ctx *context.Context) error { diff --git a/goreleaser/int/pipe/snapcraft/snapcraft_test.go b/goreleaser/int/pipe/snapcraft/snapcraft_test.go index 64bebda..324aa7d 100644 --- a/goreleaser/int/pipe/snapcraft/snapcraft_test.go +++ b/goreleaser/int/pipe/snapcraft/snapcraft_test.go @@ -9,6 +9,7 @@ import ( "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/gio" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/int/testlib" "github.com/goreleaser/goreleaser/int/yaml" @@ -679,7 +680,14 @@ func TestSkip(t *testing.T) { t.Run("skip", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) - + t.Run("skip flag", func(t *testing.T) { + ctx := testctx.NewWithCfg(config.Project{ + Snapcrafts: []config.Snapcraft{ + {}, + }, + }, testctx.Skip(skips.Snapcraft)) + require.True(t, Pipe{}.Skip(ctx)) + }) t.Run("dont skip", func(t *testing.T) { ctx := testctx.NewWithCfg(config.Project{ Snapcrafts: []config.Snapcraft{ diff --git a/goreleaser/int/pipe/teams/teams_test.go b/goreleaser/int/pipe/teams/teams_test.go index 438e95d..ead9bb9 100644 --- a/goreleaser/int/pipe/teams/teams_test.go +++ b/goreleaser/int/pipe/teams/teams_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "teams") + require.Equal(t, "teams", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Teams.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Teams.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/telegram/telegram_test.go b/goreleaser/int/pipe/telegram/telegram_test.go index c7a76a6..7cb5021 100644 --- a/goreleaser/int/pipe/telegram/telegram_test.go +++ b/goreleaser/int/pipe/telegram/telegram_test.go @@ -10,27 +10,27 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "telegram") + require.Equal(t, "telegram", Pipe{}.String()) } func TestDefault(t *testing.T) { t.Run("empty", func(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Telegram.MessageTemplate, defaultMessageTemplate) - require.Equal(t, ctx.Config.Announce.Telegram.ParseMode, parseModeMarkdown) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Telegram.MessageTemplate) + require.Equal(t, parseModeMarkdown, ctx.Config.Announce.Telegram.ParseMode) }) t.Run("markdownv2 parsemode", func(t *testing.T) { ctx := testctx.New() ctx.Config.Announce.Telegram.ParseMode = parseModeMarkdown require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Telegram.ParseMode, parseModeMarkdown) + require.Equal(t, parseModeMarkdown, ctx.Config.Announce.Telegram.ParseMode) }) t.Run("html parsemode", func(t *testing.T) { ctx := testctx.New() ctx.Config.Announce.Telegram.ParseMode = parseModeHTML require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Telegram.ParseMode, parseModeHTML) + require.Equal(t, parseModeHTML, ctx.Config.Announce.Telegram.ParseMode) }) } diff --git a/goreleaser/int/pipe/twitter/twitter_test.go b/goreleaser/int/pipe/twitter/twitter_test.go index b07ff04..1f4040c 100644 --- a/goreleaser/int/pipe/twitter/twitter_test.go +++ b/goreleaser/int/pipe/twitter/twitter_test.go @@ -10,13 +10,13 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "twitter") + require.Equal(t, "twitter", Pipe{}.String()) } func TestDefault(t *testing.T) { ctx := testctx.New() require.NoError(t, Pipe{}.Default(ctx)) - require.Equal(t, ctx.Config.Announce.Twitter.MessageTemplate, defaultMessageTemplate) + require.Equal(t, defaultMessageTemplate, ctx.Config.Announce.Twitter.MessageTemplate) } func TestAnnounceInvalidTemplate(t *testing.T) { diff --git a/goreleaser/int/pipe/universalbinary/universalbinary_test.go b/goreleaser/int/pipe/universalbinary/universalbinary_test.go index 3bd6081..e0451f6 100644 --- a/goreleaser/int/pipe/universalbinary/universalbinary_test.go +++ b/goreleaser/int/pipe/universalbinary/universalbinary_test.go @@ -267,7 +267,7 @@ func TestRun(t *testing.T) { t.Run("replacing", func(t *testing.T) { require.NoError(t, Pipe{}.Run(ctx1)) - require.Len(t, ctx1.Artifacts.Filter(artifact.ByType(artifact.Binary)).List(), 0) + require.Empty(t, ctx1.Artifacts.Filter(artifact.ByType(artifact.Binary)).List()) unis := ctx1.Artifacts.Filter(artifact.ByType(artifact.UniversalBinary)).List() require.Len(t, unis, 1) checkUniversalBinary(t, unis[0]) diff --git a/goreleaser/int/pipe/upx/upx_test.go b/goreleaser/int/pipe/upx/upx_test.go index 0669537..6caff50 100644 --- a/goreleaser/int/pipe/upx/upx_test.go +++ b/goreleaser/int/pipe/upx/upx_test.go @@ -258,12 +258,12 @@ func TestFindBinaries(t *testing.T) { }) t.Run("goamd64", func(t *testing.T) { - require.Len(t, findBinaries(ctx, config.UPX{ + require.Empty(t, findBinaries(ctx, config.UPX{ IDs: []string{"2"}, Goos: []string{"linux"}, Goarch: []string{"amd64"}, Goamd64: []string{"v3"}, - }), 0) + })) require.Len(t, findBinaries(ctx, config.UPX{ IDs: []string{"2"}, Goos: []string{"linux"}, @@ -273,12 +273,12 @@ func TestFindBinaries(t *testing.T) { }) t.Run("goarm", func(t *testing.T) { - require.Len(t, findBinaries(ctx, config.UPX{ + require.Empty(t, findBinaries(ctx, config.UPX{ IDs: []string{"2"}, Goos: []string{"linux"}, Goarch: []string{"arm"}, Goarm: []string{"6"}, - }), 0) + })) require.Len(t, findBinaries(ctx, config.UPX{ IDs: []string{"2"}, Goos: []string{"linux"}, diff --git a/goreleaser/int/pipe/webhook/webhook_test.go b/goreleaser/int/pipe/webhook/webhook_test.go index f2ace93..e440319 100644 --- a/goreleaser/int/pipe/webhook/webhook_test.go +++ b/goreleaser/int/pipe/webhook/webhook_test.go @@ -17,7 +17,7 @@ import ( ) func TestStringer(t *testing.T) { - require.Equal(t, Pipe{}.String(), "webhook") + require.Equal(t, "webhook", Pipe{}.String()) } func TestNoEndpoint(t *testing.T) { diff --git a/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.installer.yaml.golden b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.installer.yaml.golden new file mode 100644 index 0000000..2d18a34 --- /dev/null +++ b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.installer.yaml.golden @@ -0,0 +1,24 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.5.0.schema.json +PackageIdentifier: goreleaser.foo +PackageVersion: 1.2.1 +InstallerLocale: en-US +InstallerType: portable +Commands: + - foo +ReleaseDate: "2023-06-12" +Installers: + - Architecture: x64 + InstallerUrl: https://dummyhost/download/v1.2.1/foo_windows_amd64v1.exe + InstallerSha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + UpgradeBehavior: uninstallPrevious + - Architecture: x86 + InstallerUrl: https://dummyhost/download/v1.2.1/foo_windows_386.exe + InstallerSha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + UpgradeBehavior: uninstallPrevious + - Architecture: arm64 + InstallerUrl: https://dummyhost/download/v1.2.1/foo_windows_arm64.exe + InstallerSha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 + UpgradeBehavior: uninstallPrevious +ManifestType: installer +ManifestVersion: 1.5.0 diff --git a/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.locale.en-US.yaml.golden b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.locale.en-US.yaml.golden new file mode 100644 index 0000000..5254612 --- /dev/null +++ b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.locale.en-US.yaml.golden @@ -0,0 +1,12 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.5.0.schema.json +PackageIdentifier: goreleaser.foo +PackageVersion: 1.2.1 +PackageLocale: en-US +Publisher: goreleaser +PackageName: foo +License: MIT +ShortDescription: foo bar zaz +Moniker: foo +ManifestType: defaultLocale +ManifestVersion: 1.5.0 diff --git a/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.yaml.golden b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.yaml.golden new file mode 100644 index 0000000..afd8a82 --- /dev/null +++ b/goreleaser/int/pipe/winget/testdata/TestFormatBinary/TestFormatBinary.yaml.golden @@ -0,0 +1,7 @@ +# This file was generated by GoReleaser. DO NOT EDIT. +# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.5.0.schema.json +PackageIdentifier: goreleaser.foo +PackageVersion: 1.2.1 +DefaultLocale: en-US +ManifestType: version +ManifestVersion: 1.5.0 diff --git a/goreleaser/int/pipe/winget/winget.go b/goreleaser/int/pipe/winget/winget.go index b791c97..58c9b28 100644 --- a/goreleaser/int/pipe/winget/winget.go +++ b/goreleaser/int/pipe/winget/winget.go @@ -13,6 +13,7 @@ import ( "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/commitauthor" "github.com/goreleaser/goreleaser/int/pipe" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/tmpl" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" @@ -27,6 +28,7 @@ var ( errSkipUpload = pipe.Skip("winget.skip_upload is set") errSkipUploadAuto = pipe.Skip("winget.skip_upload is set to 'auto', and current version is a pre-release") errMultipleArchives = pipe.Skip("found multiple archives for the same platform, please consider filtering by id") + errMixedFormats = pipe.Skip("found archives with multiple formats (.exe and .zip)") // copied from winget src packageIdentifierValid = regexp.MustCompile("^[^\\.\\s\\\\/:\\*\\?\"<>\\|\\x01-\\x1f]{1,32}(\\.[^\\.\\s\\\\/:\\*\\?\"<>\\|\\x01-\\x1f]{1,32}){1,7}$") @@ -48,7 +50,7 @@ type Pipe struct{} func (Pipe) String() string { return "winget" } func (Pipe) ContinueOnError() bool { return true } func (p Pipe) Skip(ctx *context.Context) bool { - return len(ctx.Config.Winget) == 0 + return skips.Any(ctx, skips.Winget) || len(ctx.Config.Winget) == 0 } func (Pipe) Default(ctx *context.Context) error { @@ -164,8 +166,13 @@ func (p Pipe) doRun(ctx *context.Context, winget config.Winget, cl client.Releas filters := []artifact.Filter{ artifact.ByGoos("windows"), - artifact.ByFormats("zip"), - artifact.ByType(artifact.UploadableArchive), + artifact.Or( + artifact.And( + artifact.ByFormats("zip"), + artifact.ByType(artifact.UploadableArchive), + ), + artifact.ByType(artifact.UploadableBinary), + ), artifact.Or( artifact.ByGoarch("386"), artifact.ByGoarch("arm64"), @@ -230,32 +237,33 @@ func (p Pipe) doRun(ctx *context.Context, winget config.Winget, cl client.Releas }, } - var amd64Count, i386count int + var amd64Count, i386count, zipCount, binaryCount int for _, archive := range archives { sha256, err := archive.Checksum("sha256") if err != nil { return err } - var files []InstallerItemFile - folder := artifact.ExtraOr(*archive, artifact.ExtraWrappedIn, ".") - for _, bin := range artifact.ExtraOr(*archive, artifact.ExtraBinaries, []string{}) { - files = append(files, InstallerItemFile{ - RelativeFilePath: strings.ReplaceAll(filepath.Join(folder, bin), "/", "\\"), - PortableCommandAlias: strings.TrimSuffix(filepath.Base(bin), ".exe"), - }) - } url, err := tmpl.New(ctx).WithArtifact(archive).Apply(winget.URLTemplate) if err != nil { return err } - installer.Installers = append(installer.Installers, InstallerItem{ - Architecture: fromGoArch[archive.Goarch], - NestedInstallerType: "portable", - NestedInstallerFiles: files, - InstallerURL: url, - InstallerSha256: sha256, - UpgradeBehavior: "uninstallPrevious", - }) + item := InstallerItem{ + Architecture: fromGoArch[archive.Goarch], + InstallerURL: url, + InstallerSha256: sha256, + UpgradeBehavior: "uninstallPrevious", + } + if archive.Format() == "zip" { + zipCount++ + installer.InstallerType = "zip" + item.NestedInstallerType = "portable" + item.NestedInstallerFiles = installerItemFilesFor(*archive) + } else { + binaryCount++ + installer.InstallerType = "portable" + installer.Commands = []string{winget.Name} + } + installer.Installers = append(installer.Installers, item) switch archive.Goarch { case "386": i386count++ @@ -264,6 +272,10 @@ func (p Pipe) doRun(ctx *context.Context, winget config.Winget, cl client.Releas } } + if binaryCount > 0 && zipCount > 0 { + return errMixedFormats + } + if i386count > 1 || amd64Count > 1 { return errMultipleArchives } @@ -436,3 +448,15 @@ func repoFileID(tp artifact.Type) string { return "" } } + +func installerItemFilesFor(archive artifact.Artifact) []InstallerItemFile { + var files []InstallerItemFile + folder := artifact.ExtraOr(archive, artifact.ExtraWrappedIn, ".") + for _, bin := range artifact.ExtraOr(archive, artifact.ExtraBinaries, []string{}) { + files = append(files, InstallerItemFile{ + RelativeFilePath: strings.ReplaceAll(filepath.Join(folder, bin), "/", "\\"), + PortableCommandAlias: strings.TrimSuffix(filepath.Base(bin), ".exe"), + }) + } + return files +} diff --git a/goreleaser/int/pipe/winget/winget_test.go b/goreleaser/int/pipe/winget/winget_test.go index 17dd828..bf5c5b5 100644 --- a/goreleaser/int/pipe/winget/winget_test.go +++ b/goreleaser/int/pipe/winget/winget_test.go @@ -11,6 +11,7 @@ import ( "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/client" "github.com/goreleaser/goreleaser/int/golden" + "github.com/goreleaser/goreleaser/int/skips" "github.com/goreleaser/goreleaser/int/testctx" "github.com/goreleaser/goreleaser/pkg/config" "github.com/stretchr/testify/require" @@ -28,6 +29,11 @@ func TestSkip(t *testing.T) { t.Run("should", func(t *testing.T) { require.True(t, Pipe{}.Skip(testctx.New())) }) + t.Run("skip flag", func(t *testing.T) { + require.True(t, Pipe{}.Skip(testctx.NewWithCfg(config.Project{ + Winget: []config.Winget{{}}, + }, testctx.Skip(skips.Winget)))) + }) t.Run("should not", func(t *testing.T) { require.False(t, Pipe{}.Skip(testctx.NewWithCfg(config.Project{ Winget: []config.Winget{{}}, @@ -58,6 +64,21 @@ func TestRunPipe(t *testing.T) { }, }, }, + { + name: "mixed-formats", + expectRunErrorIs: errMixedFormats, + winget: config.Winget{ + Name: "mixed", + Publisher: "Foo", + License: "MIT", + ShortDescription: "foo bar zaz", + IDs: []string{"zaz", "bar"}, + Repository: config.RepoRef{ + Owner: "foo", + Name: "bar", + }, + }, + }, { name: "full", expectPath: "manifests/b/Beckersoft LTDA/foo/1.2.1", @@ -644,6 +665,7 @@ func TestRunPipe(t *testing.T) { goarch := "amd64" createFakeArtifact("partial", goos, goarch, "v1", "", nil) createFakeArtifact("foo", goos, goarch, "v1", "", nil) + createFakeArtifact("zaz", goos, goarch, "v1", "", nil) createFakeArtifact("wrapped-in-dir", goos, goarch, "v1", "", map[string]any{ artifact.ExtraWrappedIn: "foo", artifact.ExtraBinaries: []string{"bin/foo.exe"}, @@ -651,6 +673,17 @@ func TestRunPipe(t *testing.T) { goarch = "386" createFakeArtifact("foo", goos, goarch, "", "", nil) + ctx.Artifacts.Add(&artifact.Artifact{ + Name: "bar.exe", + Path: "doesnt-matter", + Goos: goos, + Goarch: goarch, + Type: artifact.UploadableBinary, + Extra: map[string]interface{}{ + artifact.ExtraID: "bar", + }, + }) + createFakeArtifact("bar", goos, goarch, "v1", "", nil) createFakeArtifact("wrapped-in-dir", goos, goarch, "", "", map[string]any{ artifact.ExtraWrappedIn: "foo", artifact.ExtraBinaries: []string{"bin/foo.exe"}, @@ -744,3 +777,70 @@ func TestDefault(t *testing.T) { require.NotEmpty(t, winget.CommitMessageTemplate) require.Equal(t, "foo", winget.Name) } + +func TestFormatBinary(t *testing.T) { + folder := t.TempDir() + ctx := testctx.NewWithCfg( + config.Project{ + Dist: folder, + ProjectName: "foo", + Winget: []config.Winget{{ + Name: "foo", + Publisher: "goreleaser", + License: "MIT", + ShortDescription: "foo bar zaz", + IDs: []string{"foo"}, + Repository: config.RepoRef{ + Owner: "foo", + Name: "bar", + }, + }}, + }, + testctx.WithVersion("1.2.1"), + testctx.WithCurrentTag("v1.2.1"), + testctx.WithSemver(1, 2, 1, "rc1"), + testctx.WithDate(time.Date(2023, 6, 12, 20, 32, 10, 12, time.Local)), + ) + ctx.ReleaseNotes = "the changelog for this release..." + createFakeArtifact := func(id, goos, goarch, goamd64 string) { + path := filepath.Join(folder, "dist/foo_"+goos+goarch+goamd64+".exe") + art := artifact.Artifact{ + Name: "foo_" + goos + "_" + goarch + goamd64 + ".exe", + Path: path, + Goos: goos, + Goarch: goarch, + Goamd64: goamd64, + Type: artifact.UploadableBinary, + Extra: map[string]interface{}{ + artifact.ExtraID: id, + }, + } + ctx.Artifacts.Add(&art) + require.NoError(t, os.MkdirAll(filepath.Dir(path), 0o755)) + f, err := os.Create(path) + require.NoError(t, err) + require.NoError(t, f.Close()) + } + + goos := "windows" + createFakeArtifact("foo", goos, "amd64", "v1") + createFakeArtifact("foo", goos, "386", "") + createFakeArtifact("foo", goos, "arm64", "") + + client := client.NewMock() + pipe := Pipe{} + + require.NoError(t, pipe.Default(ctx)) + require.NoError(t, pipe.runAll(ctx, client)) + for _, winget := range ctx.Artifacts.Filter(artifact.Or( + artifact.ByType(artifact.WingetInstaller), + artifact.ByType(artifact.WingetVersion), + artifact.ByType(artifact.WingetDefaultLocale), + )).List() { + bts, err := os.ReadFile(winget.Path) + require.NoError(t, err) + golden.RequireEqualExtSubfolder(t, bts, extFor(winget.Type)) + } + require.NoError(t, pipe.publishAll(ctx, client)) + require.True(t, client.CreatedFile) +} diff --git a/goreleaser/int/pipeline/pipeline.go b/goreleaser/int/pipeline/pipeline.go index cdd52f1..a4f4f34 100644 --- a/goreleaser/int/pipeline/pipeline.go +++ b/goreleaser/int/pipeline/pipeline.go @@ -24,6 +24,7 @@ import ( "github.com/goreleaser/goreleaser/int/pipe/metadata" "github.com/goreleaser/goreleaser/int/pipe/nfpm" "github.com/goreleaser/goreleaser/int/pipe/nix" + "github.com/goreleaser/goreleaser/int/pipe/partial" "github.com/goreleaser/goreleaser/int/pipe/prebuild" "github.com/goreleaser/goreleaser/int/pipe/publish" "github.com/goreleaser/goreleaser/int/pipe/reportsizes" @@ -59,6 +60,8 @@ var BuildPipeline = []Piper{ semver.Pipe{}, // load default configs defaults.Pipe{}, + // setup things for partial builds/releases + partial.Pipe{}, // snapshot version handling snapshot.Pipe{}, // run global hooks before build @@ -70,6 +73,8 @@ var BuildPipeline = []Piper{ // run prebuild stuff prebuild.Pipe{}, // proxy gomod if needed + gomod.CheckGoModPipe{}, + // proxy gomod if needed gomod.ProxyPipe{}, // writes the actual config (with defaults et al set) to dist effectiveconfig.Pipe{}, diff --git a/goreleaser/int/semerrgroup/sem_test.go b/goreleaser/int/semerrgroup/sem_test.go index 6a938cc..77026e3 100644 --- a/goreleaser/int/semerrgroup/sem_test.go +++ b/goreleaser/int/semerrgroup/sem_test.go @@ -26,7 +26,7 @@ func TestSemaphore(t *testing.T) { }) } require.NoError(t, g.Wait()) - require.Equal(t, counter, 10) + require.Equal(t, 10, counter) }) } } @@ -83,7 +83,7 @@ func TestSemaphoreSkipAware(t *testing.T) { }) } require.EqualError(t, g.Wait(), "fake skip") - require.Equal(t, counter, 10) + require.Equal(t, 10, counter) }) } } diff --git a/goreleaser/int/shell/shell.go b/goreleaser/int/shell/shell.go index a656a12..7dbd6cd 100644 --- a/goreleaser/int/shell/shell.go +++ b/goreleaser/int/shell/shell.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/caarlos0/log" + "github.com/charmbracelet/x/exp/ordered" "github.com/goreleaser/goreleaser/int/gio" "github.com/goreleaser/goreleaser/int/logext" "github.com/goreleaser/goreleaser/pkg/context" @@ -17,7 +18,8 @@ import ( func Run(ctx *context.Context, dir string, command, env []string, output bool) error { log := log. WithField("cmd", command). - WithField("env", env) + WithField("env", env). + WithField("dir", dir) /* #nosec */ cmd := exec.CommandContext(ctx, command[0], command[1:]...) @@ -35,8 +37,15 @@ func Run(ctx *context.Context, dir string, command, env []string, output bool) e log.Debug("running") if err := cmd.Run(); err != nil { - log.WithError(err).Debug("failed") - return fmt.Errorf("failed to run '%s': %w", strings.Join(command, " "), err) + return fmt.Errorf( + "shell: '%s': %w: %s", + strings.Join(command, " "), + err, + ordered.First( + strings.TrimSpace(b.String()), + "[no output]", + ), + ) } return nil diff --git a/goreleaser/int/shell/shell_test.go b/goreleaser/int/shell/shell_test.go index 0afc732..b663259 100644 --- a/goreleaser/int/shell/shell_test.go +++ b/goreleaser/int/shell/shell_test.go @@ -18,7 +18,7 @@ func TestRunCommand(t *testing.T) { require.EqualError( t, shell.Run(testctx.New(), "", []string{"sh", "-c", "exit 1"}, []string{}, false), - `failed to run 'sh -c exit 1': exit status 1`, + `shell: 'sh -c exit 1': exit status 1: [no output]`, ) }) @@ -26,7 +26,7 @@ func TestRunCommand(t *testing.T) { require.EqualError( t, shell.Run(testctx.New(), "", []string{"sh", "-c", `echo something; exit 1`}, []string{}, true), - `failed to run 'sh -c echo something; exit 1': exit status 1`, + `shell: 'sh -c echo something; exit 1': exit status 1: something`, ) }) diff --git a/goreleaser/int/skips/skips.go b/goreleaser/int/skips/skips.go index 3c497a7..ee21eb8 100644 --- a/goreleaser/int/skips/skips.go +++ b/goreleaser/int/skips/skips.go @@ -23,6 +23,12 @@ const ( Ko Key = "ko" Docker Key = "docker" Before Key = "before" + Winget Key = "winget" + Snapcraft Key = "snapcraft" + Scoop Key = "scoop" + Homebrew Key = "homebrew" + Nix Key = "nix" + AUR Key = "aur" ) func String(ctx *context.Context) string { @@ -97,6 +103,12 @@ var Release = Keys{ SBOM, Ko, Docker, + Winget, + Snapcraft, + Scoop, + Homebrew, + Nix, + AUR, Before, } diff --git a/goreleaser/int/skips/skips_test.go b/goreleaser/int/skips/skips_test.go index 019c1e2..1c4fcab 100644 --- a/goreleaser/int/skips/skips_test.go +++ b/goreleaser/int/skips/skips_test.go @@ -36,5 +36,5 @@ func TestAny(t *testing.T) { func TestSet(t *testing.T) { ctx := testctx.New() skips.Set(ctx, skips.Publish, skips.Announce) - require.Equal(t, []string{"publish", "announce"}, maps.Keys(ctx.Skips)) + require.ElementsMatch(t, []string{"publish", "announce"}, maps.Keys(ctx.Skips)) } diff --git a/goreleaser/int/static/config.yaml b/goreleaser/int/static/config.yaml index d3fb70f..4094b76 100644 --- a/goreleaser/int/static/config.yaml +++ b/goreleaser/int/static/config.yaml @@ -1,11 +1,13 @@ # This is an example .goreleaser.yml file with some sensible defaults. # Make sure to check the documentation at https://goreleaser.com -# The lines bellow are called `modelines`. See `:help modeline` +# The lines below are called `modelines`. See `:help modeline` # Feel free to remove those if you don't want/need to use them. # yaml-language-server: $schema=https://goreleaser.com/static/schema.json # vim: set ts=2 sw=2 tw=0 fo=cnqoj +version: 1 + before: hooks: # You may remove this if you don't use go modules. diff --git a/goreleaser/int/testctx/testctx.go b/goreleaser/int/testctx/testctx.go index ce3b212..af1a26c 100644 --- a/goreleaser/int/testctx/testctx.go +++ b/goreleaser/int/testctx/testctx.go @@ -116,6 +116,10 @@ func Snapshot(ctx *context.Context) { ctx.Snapshot = true } +func Partial(ctx *context.Context) { + ctx.Partial = true +} + func NewWithCfg(c config.Project, opts ...Opt) *context.Context { ctx := context.New(c) for _, opt := range opts { diff --git a/goreleaser/int/testlib/git.go b/goreleaser/int/testlib/git.go index 0a85227..5ba0d0f 100644 --- a/goreleaser/int/testlib/git.go +++ b/goreleaser/int/testlib/git.go @@ -113,9 +113,13 @@ func GitMakeBareRepository(tb testing.TB) string { return dir } -func MakeNewSSHKey(tb testing.TB, algo keygen.KeyType, pass string) string { +func MakeNewSSHKey(tb testing.TB, pass string) string { tb.Helper() + return MakeNewSSHKeyType(tb, pass, keygen.Ed25519) +} +func MakeNewSSHKeyType(tb testing.TB, pass string, algo keygen.KeyType) string { + tb.Helper() dir := tb.TempDir() filepath := filepath.Join(dir, "id_"+algo.String()) _, err := keygen.New( diff --git a/goreleaser/int/testlib/skip.go b/goreleaser/int/testlib/skip.go index f59fec5..48589a5 100644 --- a/goreleaser/int/testlib/skip.go +++ b/goreleaser/int/testlib/skip.go @@ -1,7 +1,6 @@ package testlib import ( - "errors" "testing" "github.com/goreleaser/goreleaser/int/pipe" @@ -11,5 +10,5 @@ import ( // AssertSkipped asserts that a pipe was skipped. func AssertSkipped(t *testing.T, err error) { t.Helper() - require.True(t, errors.As(err, &pipe.ErrSkip{}), "expected a pipe.ErrSkip but got %v", err) + require.ErrorAs(t, err, &pipe.ErrSkip{}, "expected a pipe.ErrSkip but got %v", err) } diff --git a/goreleaser/int/tmpl/tmpl.go b/goreleaser/int/tmpl/tmpl.go index 2c31a9b..1f65658 100644 --- a/goreleaser/int/tmpl/tmpl.go +++ b/goreleaser/int/tmpl/tmpl.go @@ -183,6 +183,7 @@ func buildOptsToFields(opts build.Options) Fields { osKey: opts.Goos, arch: opts.Goarch, arm: opts.Goarm, + amd64: opts.Goamd64, mips: opts.Gomips, } } @@ -260,6 +261,8 @@ func (e ExpectedSingleEnvErr) Error() string { return "expected {{ .Env.VAR_NAME }} only (no plain-text or other interpolation)" } +var envOnlyRe = regexp.MustCompile(`^{{\s*\.Env\.[^.\s}]+\s*}}$`) + // ApplySingleEnvOnly enforces template to only contain a single environment variable // and nothing else. func (t *Template) ApplySingleEnvOnly(s string) (string, error) { @@ -272,8 +275,7 @@ func (t *Template) ApplySingleEnvOnly(s string) (string, error) { // but regexp reduces the complexity and should be sufficient, // given the context is mostly discouraging users from bad practice // of hard-coded credentials, rather than catch all possible cases - envOnlyRe := regexp.MustCompile(`^{{\s*\.Env\.[^.\s}]+\s*}}$`) - if !envOnlyRe.Match([]byte(s)) { + if !envOnlyRe.MatchString(s) { return "", ExpectedSingleEnvErr{} } diff --git a/goreleaser/int/tmpl/tmpl_test.go b/goreleaser/int/tmpl/tmpl_test.go index 42e1524..619be25 100644 --- a/goreleaser/int/tmpl/tmpl_test.go +++ b/goreleaser/int/tmpl/tmpl_test.go @@ -10,6 +10,7 @@ import ( "github.com/goreleaser/goreleaser/int/artifact" "github.com/goreleaser/goreleaser/int/testctx" + "github.com/goreleaser/goreleaser/pkg/build" "github.com/goreleaser/goreleaser/pkg/config" "github.com/goreleaser/goreleaser/pkg/context" "github.com/stretchr/testify/require" @@ -430,3 +431,19 @@ func TestInvalidMap(t *testing.T) { _, err := New(testctx.New()).Apply(`{{ $m := map "a" }}`) require.ErrorContains(t, err, "map expects even number of arguments, got 1") } + +func TestWithBuildOptions(t *testing.T) { + out, err := New(testctx.New()).WithBuildOptions(build.Options{ + Name: "name", + Path: "./path", + Ext: ".ext", + Target: "target", + Goos: "os", + Goarch: "arch", + Goamd64: "amd64", + Goarm: "arm", + Gomips: "mips", + }).Apply("{{.Name}}_{{.Path}}_{{.Ext}}_{{.Target}}_{{.Os}}_{{.Arch}}_{{.Amd64}}_{{.Arm}}_{{.Mips}}") + require.NoError(t, err) + require.Equal(t, "name_./path_.ext_target_os_arch_amd64_arm_mips", out) +} diff --git a/goreleaser/pkg/archive/gzip/gzip_test.go b/goreleaser/pkg/archive/gzip/gzip_test.go index bf278c1..f796527 100644 --- a/goreleaser/pkg/archive/gzip/gzip_test.go +++ b/goreleaser/pkg/archive/gzip/gzip_test.go @@ -37,7 +37,7 @@ func TestGzFile(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 500, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size()) gzf, err := gzip.NewReader(f) require.NoError(t, err) @@ -75,7 +75,7 @@ func TestGzFileCustomMtime(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 500, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size()) gzf, err := gzip.NewReader(f) require.NoError(t, err) diff --git a/goreleaser/pkg/archive/tar/tar_test.go b/goreleaser/pkg/archive/tar/tar_test.go index 4131278..03d0709 100644 --- a/goreleaser/pkg/archive/tar/tar_test.go +++ b/goreleaser/pkg/archive/tar/tar_test.go @@ -77,7 +77,7 @@ func TestTarFile(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 10000, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(10000), "archived file should be smaller than %d", info.Size()) var paths []string r := tar.NewReader(f) @@ -93,7 +93,7 @@ func TestTarFile(t *testing.T) { require.True(t, ex, "expected executable permissions, got %s", next.FileInfo().Mode()) } if next.Name == "link.txt" { - require.Equal(t, next.Linkname, "regular.txt") + require.Equal(t, "regular.txt", next.Linkname) } } require.Equal(t, []string{ diff --git a/goreleaser/pkg/archive/targz/targz_test.go b/goreleaser/pkg/archive/targz/targz_test.go index 3bed224..24556b3 100644 --- a/goreleaser/pkg/archive/targz/targz_test.go +++ b/goreleaser/pkg/archive/targz/targz_test.go @@ -72,7 +72,7 @@ func TestTarGzFile(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 500, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size()) gzf, err := gzip.NewReader(f) require.NoError(t, err) @@ -92,7 +92,7 @@ func TestTarGzFile(t *testing.T) { require.True(t, ex, "expected executable permissions, got %s", next.FileInfo().Mode()) } if next.Name == "link.txt" { - require.Equal(t, next.Linkname, "regular.txt") + require.Equal(t, "regular.txt", next.Linkname) } } require.Equal(t, []string{ diff --git a/goreleaser/pkg/archive/tarxz/tarxz_test.go b/goreleaser/pkg/archive/tarxz/tarxz_test.go index 534f4ba..cd28756 100644 --- a/goreleaser/pkg/archive/tarxz/tarxz_test.go +++ b/goreleaser/pkg/archive/tarxz/tarxz_test.go @@ -72,7 +72,7 @@ func TestTarXzFile(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 500, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size()) xzf, err := xz.NewReader(f) require.NoError(t, err) @@ -91,7 +91,7 @@ func TestTarXzFile(t *testing.T) { require.True(t, ex, "expected executable permissions, got %s", next.FileInfo().Mode()) } if next.Name == "link.txt" { - require.Equal(t, next.Linkname, "regular.txt") + require.Equal(t, "regular.txt", next.Linkname) } } require.Equal(t, []string{ diff --git a/goreleaser/pkg/archive/zip/zip_test.go b/goreleaser/pkg/archive/zip/zip_test.go index af4e7ba..5df56e0 100644 --- a/goreleaser/pkg/archive/zip/zip_test.go +++ b/goreleaser/pkg/archive/zip/zip_test.go @@ -77,7 +77,7 @@ func TestZipFile(t *testing.T) { info, err := f.Stat() require.NoError(t, err) - require.Truef(t, info.Size() < 1000, "archived file should be smaller than %d", info.Size()) + require.Lessf(t, info.Size(), int64(1000), "archived file should be smaller than %d", info.Size()) r, err := zip.NewReader(f, info.Size()) require.NoError(t, err) @@ -90,14 +90,14 @@ func TestZipFile(t *testing.T) { require.True(t, ex, "expected executable permissions, got %s", zf.Mode()) } if zf.Name == "link.txt" { - require.True(t, zf.FileInfo().Mode()&os.ModeSymlink != 0) + require.NotEqual(t, 0, zf.FileInfo().Mode()&os.ModeSymlink) rc, err := zf.Open() require.NoError(t, err) var link bytes.Buffer _, err = io.Copy(&link, rc) require.NoError(t, err) rc.Close() - require.Equal(t, link.String(), "regular.txt") + require.Equal(t, "regular.txt", link.String()) } } require.Equal(t, []string{ diff --git a/goreleaser/pkg/config/config.go b/goreleaser/pkg/config/config.go index 8e02d06..c6eb1d0 100644 --- a/goreleaser/pkg/config/config.go +++ b/goreleaser/pkg/config/config.go @@ -11,11 +11,16 @@ import ( "strings" "time" + "github.com/goreleaser/goreleaser/int/logext" "github.com/goreleaser/goreleaser/int/yaml" "github.com/goreleaser/nfpm/v2/files" "github.com/invopop/jsonschema" ) +type Versioned struct { + Version int +} + // Git configs. type Git struct { TagSort string `yaml:"tag_sort,omitempty" json:"tag_sort,omitempty" jsonschema:"enum=-version:refname,enum=-version:creatordate,default=-version:refname"` @@ -151,6 +156,7 @@ type HomebrewDependency struct { Name string `yaml:"name,omitempty" json:"name,omitempty"` Type string `yaml:"type,omitempty" json:"type,omitempty"` Version string `yaml:"version,omitempty" json:"version,omitempty"` + OS string `yaml:"os,omitempty" json:"os,omitempty" jsonschema:"enum=mac,enum=linux"` } // type alias to prevent stack overflowing in the custom unmarshaler. @@ -213,6 +219,7 @@ type AUR struct { GitSSHCommand string `yaml:"git_ssh_command,omitempty" json:"git_ssh_command,omitempty"` PrivateKey string `yaml:"private_key,omitempty" json:"private_key,omitempty"` Goamd64 string `yaml:"goamd64,omitempty" json:"goamd64,omitempty"` + Directory string `yaml:"directory,omitempty" json:"directory,omitempty"` } // Homebrew contains the brew section. @@ -311,25 +318,25 @@ func (a *NixDependency) UnmarshalYAML(unmarshal func(interface{}) error) error { type Winget struct { Name string `yaml:"name,omitempty" json:"name,omitempty"` - PackageIdentifier string `yaml:"package_identifier,omitempty" json:"package_identifier,omitempty"` - Publisher string `yaml:"publisher,omitempty" json:"publisher,omitempty"` + PackageIdentifier string `yaml:"package_identifier" json:"package_identifier"` + Publisher string `yaml:"publisher" json:"publisher"` PublisherURL string `yaml:"publisher_url,omitempty" json:"publisher_url,omitempty"` PublisherSupportURL string `yaml:"publisher_support_url,omitempty" json:"publisher_support_url,omitempty"` Copyright string `yaml:"copyright,omitempty" json:"copyright,omitempty"` CopyrightURL string `yaml:"copyright_url,omitempty" json:"copyright_url,omitempty"` Author string `yaml:"author,omitempty" json:"author,omitempty"` Path string `yaml:"path,omitempty" json:"path,omitempty"` - Repository RepoRef `yaml:"repository,omitempty" json:"repository,omitempty"` + Repository RepoRef `yaml:"repository" json:"repository"` CommitAuthor CommitAuthor `yaml:"commit_author,omitempty" json:"commit_author,omitempty"` CommitMessageTemplate string `yaml:"commit_msg_template,omitempty" json:"commit_msg_template,omitempty"` IDs []string `yaml:"ids,omitempty" json:"ids,omitempty"` Goamd64 string `yaml:"goamd64,omitempty" json:"goamd64,omitempty"` SkipUpload string `yaml:"skip_upload,omitempty" json:"skip_upload,omitempty" jsonschema:"oneof_type=string;boolean"` URLTemplate string `yaml:"url_template,omitempty" json:"url_template,omitempty"` - ShortDescription string `yaml:"short_description,omitempty" json:"short_description,omitempty"` + ShortDescription string `yaml:"short_description" json:"short_description"` Description string `yaml:"description,omitempty" json:"description,omitempty"` Homepage string `yaml:"homepage,omitempty" json:"homepage,omitempty"` - License string `yaml:"license,omitempty" json:"license,omitempty"` + License string `yaml:"license" json:"license"` LicenseURL string `yaml:"license_url,omitempty" json:"license_url,omitempty"` ReleaseNotes string `yaml:"release_notes,omitempty" json:"release_notes,omitempty"` ReleaseNotesURL string `yaml:"release_notes_url,omitempty" json:"release_notes_url,omitempty"` @@ -1034,7 +1041,7 @@ type Docker struct { Files []string `yaml:"extra_files,omitempty" json:"extra_files,omitempty"` BuildFlagTemplates []string `yaml:"build_flag_templates,omitempty" json:"build_flag_templates,omitempty"` PushFlags []string `yaml:"push_flags,omitempty" json:"push_flags,omitempty"` - Use string `yaml:"use,omitempty" json:"use,omitempty"` + Use string `yaml:"use,omitempty" json:"use,omitempty" jsonschema:"enum=docker,enum=buildx,default=docker"` } // DockerManifest config. @@ -1144,6 +1151,7 @@ type Source struct { // Project includes all project configuration. type Project struct { + Version int `yaml:"version,omitempty" json:"version,omitempty" jsonschema:"enum=1,default=1"` ProjectName string `yaml:"project_name,omitempty" json:"project_name,omitempty"` Env []string `yaml:"env,omitempty" json:"env,omitempty"` Release Release `yaml:"release,omitempty" json:"release,omitempty"` @@ -1339,12 +1347,31 @@ func Load(file string) (config Project, err error) { return LoadReader(f) } +type VersionError struct { + current int +} + +func (e VersionError) Error() string { + return fmt.Sprintf( + "only configurations files on %s are supported, yours is %s, please update your configuration", + logext.Keyword("version: 1"), + logext.Keyword(fmt.Sprintf("version: %d", e.current)), + ) +} + // LoadReader config via io.Reader. func LoadReader(fd io.Reader) (config Project, err error) { data, err := io.ReadAll(fd) if err != nil { return config, err } + + var versioned Versioned + _ = yaml.Unmarshal(data, &versioned) + if versioned.Version != 0 && versioned.Version != 1 { + return config, VersionError{versioned.Version} + } + err = yaml.UnmarshalStrict(data, &config) return config, err } diff --git a/goreleaser/pkg/config/config_test.go b/goreleaser/pkg/config/config_test.go index 703f6e1..e32d0c7 100644 --- a/goreleaser/pkg/config/config_test.go +++ b/goreleaser/pkg/config/config_test.go @@ -1,6 +1,7 @@ package config import ( + "bytes" "fmt" "os" "path/filepath" @@ -72,3 +73,23 @@ func TestConfigWithAnchors(t *testing.T) { _, err := Load("testdata/anchor.yaml") require.NoError(t, err) } + +func TestVersion(t *testing.T) { + t.Run("allow no version", func(t *testing.T) { + _, err := LoadReader(bytes.NewReader(nil)) + require.NoError(t, err) + }) + t.Run("allow v0", func(t *testing.T) { + _, err := LoadReader(strings.NewReader("version: 0")) + require.NoError(t, err) + }) + t.Run("allow v1", func(t *testing.T) { + _, err := LoadReader(strings.NewReader("version: 1")) + require.NoError(t, err) + }) + t.Run("do not allow v2", func(t *testing.T) { + _, err := LoadReader(strings.NewReader("version: 2")) + require.Error(t, err) + require.ErrorIs(t, err, VersionError{2}) + }) +} diff --git a/goreleaser/pkg/context/context.go b/goreleaser/pkg/context/context.go index 5db7f74..180bd2c 100644 --- a/goreleaser/pkg/context/context.go +++ b/goreleaser/pkg/context/context.go @@ -89,8 +89,10 @@ type Context struct { ReleaseFooterTmpl string Version string ModulePath string + PartialTarget string Snapshot bool FailFast bool + Partial bool SkipTokenCheck bool Clean bool PreRelease bool diff --git a/goreleaser/scripts/gen-nix-licenses.sh b/goreleaser/scripts/gen-nix-licenses.sh new file mode 100755 index 0000000..3682961 --- /dev/null +++ b/goreleaser/scripts/gen-nix-licenses.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +{ + echo "// AUTO-GENERATED. DO NOT EDIT." + echo + echo "package nix" + echo "var validLicenses = []string {" + curl -s https://raw.githubusercontent.com/NixOS/nixpkgs/master/lib/licenses.nix | + grep -E '.* = \{' | + grep -v default | + cut -f1 -d= | + awk '{print "\"" $1 "\","}' + echo -e "}" +} >./internal/pipe/nix/licenses.go + +gofumpt -w ./internal/pipe/nix/licenses.go diff --git a/goreleaser/www/docs/blog/.authors.yml b/goreleaser/www/docs/blog/.authors.yml index f76afc5..abda921 100644 --- a/goreleaser/www/docs/blog/.authors.yml +++ b/goreleaser/www/docs/blog/.authors.yml @@ -3,3 +3,12 @@ authors: name: Carlos Becker description: Creator avatar: https://avatars.githubusercontent.com/u/245435 + developerguy: + name: Batuhan Apaydin + description: Author + avatar: https://avatars.githubusercontent.com/u/16693043 + dentrax: + name: Furkan Turkal + description: Author + avatar: https://avatars.githubusercontent.com/u/16493751 + diff --git a/goreleaser/www/docs/blog/posts/2022-02-12-goreleaser-v1.5.md b/goreleaser/www/docs/blog/posts/2022-02-12-goreleaser-v1.5.md index 6f45fc2..c7344ae 100644 --- a/goreleaser/www/docs/blog/posts/2022-02-12-goreleaser-v1.5.md +++ b/goreleaser/www/docs/blog/posts/2022-02-12-goreleaser-v1.5.md @@ -17,7 +17,7 @@ GoReleaser 1.5 is out, with a handful of miscellaneous improvements. - Better manpages using [mango](https://github.com/muesli/mango); - Migrated from [cobra](https://github.com/spf13/cobra) to [coral](https://github.com/muesli/coral) — which will eventually lead to faster `go install`; -- Improved nFPM to make it easier for GoReleaser's debs and GoReleaser-generated debs that pass [lintian](https://lintian.debian.org/) checks; +- Improved nFPM to make it easier for GoReleaser's debs and GoReleaser-generated debs that pass [lintian](https://wiki.debian.org/Lintian) checks; - Several improvements on GoReleaser output logs; - More fields are now templateable, namely on nFPMs and Universal Binaries configs; - Hooks now have an option to always print their outputs; diff --git a/goreleaser/www/docs/blog/posts/2023-09-27-release-cadence.md b/goreleaser/www/docs/blog/posts/2023-09-27-release-cadence.md new file mode 100644 index 0000000..2478637 --- /dev/null +++ b/goreleaser/www/docs/blog/posts/2023-09-27-release-cadence.md @@ -0,0 +1,143 @@ +--- +date: 2023-09-27 +slug: release-cadence +categories: + - announcements +authors: + - caarlos0 +--- + +# Version strategy and release cadence: the future + +A couple of weeks ago, I got a couple of complaints about the way GoReleaser +is being versioned - more precisely, the fact that deprecated options are +removed in **minor** instead of **major** versions. + +Those complaints are valid, and today I'm announcing how I plan to move forward. + + + +## History + +Before we do that, I feel like I should explain how we got in this position +first. + +GoReleaser was in a [0ver](https://0ver.org)[^joke] scheme for _almost 5 years_. +We had a whopping _468 `v0.x.x` releases_. +Let me repeat: **four hundred and sixty eight v zeroes**. + +[^joke]: yes, I know this is kind of a joke. + +In fact, `v1` was launched less than 2 years ago, in [November, 2022][v1]. + +Like many other things, the way we handle deprecations was from that time. +A time in which GoReleaser never had major releases, because there wasn't +one: we would add the deprecation notice to the +[deprecations page][deprecations] and warn about it in the release's output +if you use any of them, and, after roughly 6 months, remove the deprecated +option and move on with life. + +[Breaking changes are allowed in v0][semver-si4], so, there were no broken +promises. + +On the other hand, `v1` is a _major_ version, so it should not introduce +breaking changes. + +In retrospect, my mistake was never stopping to think about it again after `v1`. + +[semver-si4]: https://semver.org/#spec-item-4 + +## Going forward + +Thankfully, I was nudged in the right direction, so, from now on, we'll do +things properly. + +The plan is as follows: + +1. We'll have 1 _minor_ release 1-2 months (when we have some material); +1. Bug fixes will still be released as _patch_ releases in the latest _minor_; +1. Deprecations will continue to be added in _minor_ releases (but **not + removed**); +1. When we have a good amount of deprecations, we'll launch a new _major_, + removing them completely. + I think this will probably happen about once a year. + +So, if you lock your CI to get `v1.x.x`, you might get new deprecation +warnings, but no breaking changes. + +You can then better plan when to upgrade your apps to the latest _major_, +without having to lock to a specific _minor_/_patch_ release. + +## Supporting old versions + +I understand GoReleaser has become the _de-facto_ tool to release Go projects. +I don't know how many users we have (because we don't track you), but judging by +some code searches on GitHub, there are thousands of repositories using it. + +GoReleaser is also a big project. +Maintaining it could already be a full-time job, but, it isn't. +I work on it on my free time, which is limited - just like yours. + +All that being said, I understand that big companies and teams rely on +GoReleaser, and some don't release as often. + +With that in mind, [GoReleaser Pro][gpro] customers will have more time to +update: I'll keep launching _patch_ releases of the latest _major_ containing +relevant bug fixes and security-related fixes. + +If you use the OSS version, you can either pin to the previous major, or update +to the new one. +You can also get a [GoReleaser Pro][gpro] license, and help fund this project. + +I haven't yet developed the exact rules for which bug fixes will get backported +or not, but I'm quite confident that it'll be a mix of "fixes for really bad +bugs" and "a customer is experiencing it and asked it to be fixed", and, of +course, any security-related fixes. + +## So, when v2? + +Probably in a couple of months. + +Stay tuned! 📰 + +## Early access + +Since a couple of weeks ago, we're building a new nightly automatically every +week. + +You can already use _nightly_ as the version in [our GitHub Action][gha] if +you can't wait for a new feature that's already on `main`. + +This works for both the Pro and OSS distributions. + +## Summing up + +The _TLDR_: + +- new _major_ version ~yearly; +- new _minor_ version every ~two months; +- new _patch_ versions whenever its needed, in the latest _minor_ only; +- [Pro][gpro] latest version keep getting security updates and relevant bug fixes; +- _nigtlies_ weekly for both Pro and OSS; + +## Thank you notes + +I would like to publicly thank everyone who commented and shared both their +pains and their experiences in [the discussion that started all this][dis], +and specially, [@LandonTClipp](https://github.com/LandonTClipp), who created it. + +All of us that do OpenSource know how easy a conversation like this could have +gone south. Thankfully, this was not the case here. 💌 + +Thank you, for real. +Thank you for patience, for the contributions, and for pointing out ways I can +make GoReleaser better. + +See you all soon! + +[v1]: ./2021-11-14-goreleaser-v1.md +[deprecations]: ../../deprecations.md +[dis]: https://github.com/orgs/goreleaser/discussions/4169 +[gpro]: ../../pro.md +[gha]: https://github.com/goreleaser/goreleaser-action +[Sponsors]: https://github.com/caarlos0 diff --git a/goreleaser/www/docs/blog/posts/2023-10-08-slsa-generation-for-your-artifacts.md b/goreleaser/www/docs/blog/posts/2023-10-08-slsa-generation-for-your-artifacts.md new file mode 100644 index 0000000..621490c --- /dev/null +++ b/goreleaser/www/docs/blog/posts/2023-10-08-slsa-generation-for-your-artifacts.md @@ -0,0 +1,234 @@ +--- +date: 2023-10-11 +slug: slsa-generation-for-your-artifacts +categories: + - tutorials +authors: + - developerguy + - dentrax +--- + +# Stay Calm and SLSA: Generating SLSA Provenance for Your Artifacts with GoReleaser and slsa-github-generator + +In an age where software is at the heart of nearly every aspect of our lives, software supply chain security has become paramount. It involves a series of measures and practices aimed at ensuring the reliability and safety of the software we use daily. As cyber threats continue to evolve, the need for robust software supply chain security has never been greater. Organizations must take steps to protect their software development and distribution processes from potential vulnerabilities and attacks. + + + +SLSA provenance, short for Supply Chain Levels for Software Artifacts, is an emerging concept that revolutionizes the way we think about software supply chain security. It offers a comprehensive framework to track the lineage and trustworthiness of software components, thereby enhancing overall security. + +The core idea behind SLSA provenance is to create a transparent and auditable trail of every software component's journey, from its creation to deployment. This ensures that any tampering or unauthorized changes can be quickly identified and mitigated. Software supply chain security and SLSA provenance are intrinsically linked, as the latter serves as a critical tool to bolster the former. + +Together, they provide a robust defense against the growing threats posed by malicious actors in the digital realm. In a world where software vulnerabilities can have far-reaching consequences, the adoption of SLSA provenance is a proactive step toward fortifying our software supply chains and making them more resilient to cyberattacks. + +GoReleaser takes the ever-growing risks in the realm of software supply chain security incredibly seriously. From the onset of this era of heightened security concerns, GoReleaser has been at the forefront, continuously adding features to safeguard your artifacts against potential software supply chain attacks such as [generating an SBOMs](https://goreleaser.com/customization/sbom/), [signing your artifacts](https://goreleaser.com/customization/docker_sign/), and more. + +> _If you want to learn more about the general software supply chain security features supported by GoReleaser, check out our [blog post](https://blog.goreleaser.com/goreleaser-and-software-supply-chain-security-e8917b26924b/) on the topic._ + +In this blog post, we will explore how GoReleaser can help you generate SLSA provenance for your artifacts and how you can leverage the slsa-github-generator to automate the process. + +## slsa-github-generator + +I would like to start with my favorite quote: + +> _Each of these attacks could have been prevented if there were a way to detect that the delivered artifacts diverged from the expected origin of the software. But until now, generating verifiable information that described where, when, and how software artifacts were produced (information known as provenance) was difficult. This information allows users to trace artifacts verifiably back to the source and develop risk-based policies around what they consume._ - [Improving software supply chain security with tamper-proof builds](https://security.googleblog.com/2022/04/improving-software-supply-chain.html) + +Unfortunately, provenance generation is not widely supported yet but hopefully will be in the future. And this is where the slsa-github-generator comes into play. + +Thanks to the SLSA community, they developed a collection of GitHub reusable workflows called [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) that can help us with the solving of the problem we mentioned in the quote. It is a powerful tool designed to simplify the process of generating SLSA provenances for your GitHub-hosted projects. It seamlessly integrates with your GitHub repositories, providing an efficient way to enhance the security and trustworthiness of your software supply chain by automatically creating and managing SLSA provenance records. + +There are different types of workflows/builders that you can use depending on your needs provided by the slsa-github-generator. + +- [Docker](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/docker) +- [Generic](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/generic) +- [Go](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/go) +- [Maven](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/maven) +- [Nodejs](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/nodejs) + +and many [more](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders)... + +Without much further ado, let's jump right into the demo and see how we can use the slsa-github-generator to generate SLSA provenance for our artifacts. + +> You can find all the code used in this demo in the [goreleaser-example-slsa-provenance](https://github.com/goreleaser/goreleaser-example-slsa-provenance) repository on GitHub. + +We said artifacts a lot, but what are artifacts really? In the context of this blog post, artifacts are the binaries and the container images that GoReleaser generates for your project. If you are familiar enough with GoReleaser _-if you are not please refer to the [Quick Start](https://goreleaser.com/quick-start/) guide-_, GoReleaser uses a configuration file called `.goreleaser.yml` to define how to build and release your project. In this file, you can define the artifacts that you want to generate for your project. + +Let's take a look at the `.goreleaser.yml` file of our demo project: + +```yaml + +--- +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin + +kos: + - repository: ghcr.io/goreleaser/goreleaser-example-slsa-provenance + tags: + - "{{.Tag}}" + - "{{ if not .Prerelease }}latest{{ end }}" + bare: true + preserve_import_paths: false + sbom: none + platforms: + - all + flags: + - -trimpath + ldflags: + - -s -w +``` + +I trimmed the file a bit to make it easier to read. As you can see, we are building our binaries for the `linux`, `windows`, and `darwin` operating systems as we defined in the `builds` section, thanks to the built-in cross-compliation support in Golang. We are also using the [kos](https://goreleaser.com/customization/ko/) integration to build a container image for our project. It is a new way to build container images your project using [ko](https://ko.build). We are also using the `ghcr.io/goreleaser/goreleaser-example-slsa-provenance` repository to push our container image both with the `latest` and the `{{.Tag}}` tag. + +> _If you want to learn more about the ko tool, check out our [blog post](https://blog.kubesimplify.com/getting-started-with-ko-a-fast-container-image-builder-for-your-go-applications/)._ + +Now that we have a better understanding of what artifacts are and the `.goreleaser.yml' is, let's see how we can use the slsa-github-generator to generate SLSA provenance for our artifacts. + +Before than that we should talk a little bit about the [GitHub Actions](https://docs.github.com/en/actions/quickstart) platform. + +GitHub Actions is an automation and continuous integration/continuous deployment (CI/CD) platform provided by GitHub, which is a widely used web-based platform for version control and collaboration among software developers. GitHub Actions allows you to automate various tasks and workflows in your software development process directly within your GitHub repositories. + +To use GitHub Actions, you need to create a workflow file in your repository (_under .github/workflows_). A workflow file is a YAML file that contains a set of instructions that define the steps of your workflow. You can create a workflow file manually or use a workflow template provided by GitHub. GitHub Actions provides a wide range of workflow templates that you can use to automate various tasks and processes in your software development lifecycle. You can also create your own custom workflow templates to suit your specific needs for better reusability and consistency. This is where [reusable workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows) comes into play. + +GitHub Actions and reusable workflows are powerful tools for streamlining your development process, improving code quality, and ensuring consistent practices across your projects. They provide the flexibility and scalability needed to automate tasks and customize your development workflow to meet the specific needs of your software projects. + +It's important to understand reusable workflows since the slsa-github-generator is mostly about reusable workflows. + +Let's have a first look at the GitHub workflow file that we will use to generate SLSA provenance for our artifacts: + +```yaml + +--- +binary-provenance: + needs: [goreleaser] + permissions: + actions: read # To read the workflow path. + id-token: write # To sign the provenance. + contents: write # To add assets to a release. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.9.0 + with: + base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" + upload-assets: true # upload to a new release + +image-provenance: + needs: [goreleaser] + permissions: + actions: read + id-token: write + packages: write + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.9.0 + with: + image: ${{ needs.goreleaser.outputs.image }} + digest: ${{ needs.goreleaser.outputs.digest }} + registry-username: ${{ github.actor }} + secrets: + registry-password: ${{ secrets.GITHUB_TOKEN }} # you should provive registry-password, if you are using private registry like ghcr.io +``` + +At the time of writing this `1.9.0` is the latest version of the slsa-github-generator. As you can see, we are using two different reusable workflows to generate SLSA provenance for our artifacts. The first one is the `generator_generic_slsa3.yml` workflow, which is used to generate SLSA provenance for our binaries. The second one is the `generator_container_slsa3.yml` workflow, which is used to generate SLSA provenance for our container images. + +That's it, we are done. We can now generate SLSA provenance for our artifacts. Confess, you didn't expect this task to be so straightforward. 🤣 + +Let's continue with explaining them in more detail. + +First, as you might have noticed, we are using the `needs` keyword to define the dependencies of our workflow. In this case, we are saying that our workflow depends on the `goreleaser` job. This means that our workflow will run after the `goreleaser` job is completed successfully. This is important because we need the artifacts generated by the `goreleaser` job to generate SLSA provenance for them. + +Next, we are using the `permissions` keyword to define the permissions of our job. This is a new feature of GitHub Actions that allows you to define the permissions of your workflow. This is important because we need to define the permissions of our workflow to be able to generate SLSA provenance for our artifacts. In this case, we are saying that our workflow needs the `read` permission to read the workflow path, the `write` permission to sign the provenance, and the `write` permission to add assets to a release. + +As we mentioned we have to wait until the `goreleaser` job to be finished before we generate SLSA provenance because we need some output from the `goreleaser` job to generate SLSA provenance. + +We are using the `outputs` keyword to define the outputs of our job. In this case, we are saying that our workflow needs the `hashes` output from the `goreleaser` job. This is important because we need the hashes of our artifacts to generate SLSA provenance for them. We are also saying that our workflow needs the `image` and the `digest` output from the `goreleaser` job. This is important because we need the image and the digest of our container image to generate SLSA provenance for them. + +Finally, we are using the `with` keyword to define the inputs of our job. In this case, we are saying that our workflow needs the `hashes`, `image.name` and `image.digest` output from the `goreleaser` job. + +Let's have a look at the how we generate these outputs in the `goreleaser` job: + +```yaml +... +jobs: + goreleaser: + outputs: + hashes: ${{ steps.binary.outputs.hashes }} + image: ${{ steps.image.outputs.name }} + digest: ${{ steps.image.outputs.digest }} + ... + + - name: Generate binary hashes + id: binary + env: + ARTIFACTS: "${{ steps.goreleaser.outputs.artifacts }}" + run: | + set -euo pipefail + + checksum_file=$(echo "$ARTIFACTS" | jq -r '.[] | select (.type=="Checksum") | .path') + echo "hashes=$(cat $checksum_file | base64 -w0)" >> "$GITHUB_OUTPUT" + + - name: Image digest + id: image + env: + ARTIFACTS: "${{ steps.goreleaser.outputs.artifacts }}" + run: | + set -euo pipefail + image_and_digest=$(echo "$ARTIFACTS" | jq -r '.[] | select (.type=="Docker Manifest") | .path') + image=$(echo "${image_and_digest}" | cut -d'@' -f1 | cut -d':' -f1) + digest=$(echo "${image_and_digest}" | cut -d'@' -f2) + echo "name=$image" >> "$GITHUB_OUTPUT" + echo "digest=$digest" >> "$GITHUB_OUTPUT" +... +``` + +For the `Generate binary hashes` step, we are using the `jq` tool to parse the `artifacts` output which is one of the outputs of the [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from the `goreleaser` job and extract the checksum file path. We are then using the `base64` tool to encode the checksum file and save it to the `hashes` output. + +In essence, the artifacts output consists of the contents of the artifacts.json file that GoReleaser generates in the dist/ folder, starting from version 1.2, as explained in this v1.2 release. This file contains information regarding the artifacts produced by GoReleaser. + +During the process of generating SLSA (Supply Chain Levels for Software Artifacts) provenances for both our binaries and container images, we utilize specific jq operations to extract the necessary information such as the `hashes` for the binaries and the `image` and `digest` of our container image from the artifacts.json file. + +At the end of the day, you will be having a succesfull workflow run like this: + +![image](/static/slsa-provenance-generation.png) + +## Further Steps + +As you can see, generating SLSA provenance for your artifacts with GoReleaser and slsa-github-generator is a straightforward process. You might be asking yourself what's next? Well, the answer is simple because we added verification steps to our workflow to show you how you can verify the SLSA provenance of your artifacts since they were signed by the slsa-github-generator and uploaded to the transparency log server (Rekor). + +```yaml +... + - name: Verify assets + env: + CHECKSUMS: ${{ needs.goreleaser.outputs.hashes }} + PROVENANCE: "${{ needs.binary-provenance.outputs.provenance-name }}" + run: | + set -euo pipefail + checksums=$(echo "$CHECKSUMS" | base64 -d) + while read -r line; do + fn=$(echo $line | cut -d ' ' -f2) + echo "Verifying $fn" + slsa-verifier verify-artifact --provenance-path "$PROVENANCE" \ + --source-uri "github.com/$GITHUB_REPOSITORY" \ + --source-tag "$GITHUB_REF_NAME" \ + "$fn" + done <<<"$checksums" + + + - name: Verify image + env: + IMAGE: ${{ needs.goreleaser.outputs.image }} + DIGEST: ${{ needs.goreleaser.outputs.digest }} + run: | + slsa-verifier verify-image "$IMAGE@DIGEST" \ + --source-uri "github.com/$GITHUB_REPOSITORY" \ + --source-tag "$GITHUB_REF_NAME" +``` + +> _[slsa-verifier](https://github.com/slsa-framework/slsa-verifier) is a tool for verifying SLSA provenance that was generated by CI/CD builders. slsa-verifier verifies the provenance by verifying the cryptographic signatures on provenance to make sure it was created by the expected builder (default to GitHub CI/CD) and the source repository the artifact was built from._ + +> _[cosign](https://github.com/sigstore/cosign) allows developers to sign artifacts with digital signatures, ensuring the authenticity and integrity of the artifacts. It also enables users to verify signatures on artifacts to confirm that they haven't been tampered with._ + +Both cosign and slsa-verifier play crucial roles in enhancing the security and trustworthiness of software supply chains, particularly in containerized and cloud-native application development. To get the latest information and updates on these tools, it's recommended to refer to their respective documentation and GitHub repositories or official websites. + +## Conclusion + +In this blog post, we explored how GoReleaser can help you generate SLSA provenance for your artifacts and how you can leverage the slsa-github-generator to automate the process. We also discussed the importance of software supply chain security and how SLSA provenance can help you enhance the security and trustworthiness of your software supply chain. We hope that this blog post has been helpful in understanding how GoReleaser can help you generate SLSA provenance for your artifacts and how you can leverage the slsa-github-generator to automate the process. If you have any questions or feedback, please feel free to reach out to us on GoReleaser discord channel. We would love to hear from you! diff --git a/goreleaser/www/docs/blog/posts/2023-11-06-goreleaser-v1.22.md b/goreleaser/www/docs/blog/posts/2023-11-06-goreleaser-v1.22.md new file mode 100644 index 0000000..df84a93 --- /dev/null +++ b/goreleaser/www/docs/blog/posts/2023-11-06-goreleaser-v1.22.md @@ -0,0 +1,55 @@ +--- +date: 2023-11-06 +slug: goreleaser-v1.22 +categories: [announcements] +authors: [caarlos0] +--- + +# Announcing GoReleaser v1.22 - steady improvement + +Another boring release, with mostly bug fixes and quality-of-life improvements. + + + +## Highlights + +- Several new pipes can be skipped with `--skip=pipe`, check `goreleaser release +--help` for details +- If you have `gomod.proxy` enabled, GoReleaser will now check if your + `go.mod` has `replace` directives, and warn you about them on snapshots, + and straight out fail on a production build +- If you have `gomod.proxy` enabled and a `go.work` file with multiple modules, + GoReleaser will now properly handle it, using the first module as proxy + target +- Planning for v2, we added an optional `version` field to the configuration + file +- The checksum file will now be sorted by filename, as it should + +As always, bug fixes, dependency updates, housekeeping, and documentation +updates are included in this release as well. + +## Other news + +- GoReleaser now has ~12.3k stars and 356 contributors! Thanks, everyone! +- We eventually discuss new features in our Discord server.  + [Join the conversation][discord]! +- nFPM had new releases as well,  + [check it out](https://github.com/goreleaser/nfpm/releases). + +## Download + +You can [install][] or upgrade using your favorite package manager, or see the +full release notes and download the pre-compiled binaries [here][oss-rel] and +[here (for Pro)][pro-rel]. + +## Helping out + +You can help by contributing features and bug fixes, or by donating. +You may also be interested in buying a GoReleaser Pro license. + +You can find out more [here](https://goreleaser.com/sponsors/). + +[install]: https://goreleaser.com/install +[pro-rel]: https://github.com/goreleaser/goreleaser-pro/releases/tag/v1.22.0-pro +[oss-rel]: https://github.com/goreleaser/goreleaser/releases/tag/v1.22.0 +[discord]: https://goreleaser.com/discord diff --git a/goreleaser/www/docs/ci/actions.md b/goreleaser/www/docs/ci/actions.md index 6b04d76..36e3b72 100644 --- a/goreleaser/www/docs/ci/actions.md +++ b/goreleaser/www/docs/ci/actions.md @@ -113,7 +113,7 @@ And reference the fingerprint in your signing configuration using the # .goreleaser.yaml signs: - artifacts: checksum - cms: gpg2 + cmd: gpg2 args: - "--batch" - "-u" diff --git a/goreleaser/www/docs/cmd/goreleaser_release.md b/goreleaser/www/docs/cmd/goreleaser_release.md index 3ab0854..69297be 100644 --- a/goreleaser/www/docs/cmd/goreleaser_release.md +++ b/goreleaser/www/docs/cmd/goreleaser_release.md @@ -26,7 +26,7 @@ goreleaser release [flags] --release-notes string Load custom release notes from a markdown file (will skip GoReleaser changelog generation) --release-notes-tmpl string Load custom release notes from a templated markdown file (overrides --release-notes) --single-target Builds only for current GOOS and GOARCH, regardless of what's set in the configuration file (implies --skip-publish) (Pro only) - --skip strings Skip the given options (valid options are: after, announce, before, docker, fury, ko, publish, sbom, sign, validate) + --skip strings Skip the given options (valid options are: after, announce, aur, before, docker, fury, homebrew, ko, nix, publish, sbom, scoop, sign, snapcraft, validate, winget) --snapshot Generate an unversioned snapshot release, skipping all validations and without publishing any artifacts (implies --skip=announce,publish,validate) --split Split the build so it can be merged and published later (implies --prepare) (Pro only) --timeout duration Timeout to the entire release process (default 30m0s) diff --git a/goreleaser/www/docs/contributing.md b/goreleaser/www/docs/contributing.md index 4861ef8..e78c857 100644 --- a/goreleaser/www/docs/contributing.md +++ b/goreleaser/www/docs/contributing.md @@ -20,6 +20,7 @@ Other things you might need to run the tests: - [Podman](https://podman.io/) - [Snapcraft](https://snapcraft.io/) - [Syft](https://github.com/anchore/syft) +- [upx](https://upx.github.io/) Clone `goreleaser` anywhere: diff --git a/goreleaser/www/docs/customization/aur.md b/goreleaser/www/docs/customization/aur.md index 4065416..915f7a6 100644 --- a/goreleaser/www/docs/customization/aur.md +++ b/goreleaser/www/docs/customization/aur.md @@ -6,6 +6,7 @@ After releasing to GitHub, GitLab, or Gitea, GoReleaser can generate and publish a `PKGBUILD` to an _Arch User Repository_. !!! warning + Before going further on this, make sure to read [AUR's Submission Guidelines](https://wiki.archlinux.org/title/AUR_submission_guidelines). @@ -153,11 +154,22 @@ aurs: # Default: depends on the client # Templates: allowed url_template: "http://github.mycompany.com/foo/bar/releases/{{ .Tag }}/{{ .ArtifactName }}" + + # Directory in which the files will be created inside the repository. + # Only useful if you're creating your own AUR with multiple packages in a + # single repository. + # + # Default: . + # Templates: allowed + # Since: v1.23. + url_template: "http://github.mycompany.com/foo/bar/releases/{{ .Tag }}/{{ .ArtifactName }}" ``` !!! tip + Learn more about the [name template engine](/customization/templates/). !!! tip + For more info about what each field does, please refer to [Arch's PKGBUILD reference](https://wiki.archlinux.org/title/PKGBUILD). diff --git a/goreleaser/www/docs/customization/blob.md b/goreleaser/www/docs/customization/blob.md index aade1e2..f22232e 100644 --- a/goreleaser/www/docs/customization/blob.md +++ b/goreleaser/www/docs/customization/blob.md @@ -108,11 +108,18 @@ chain in the following order: ### Azure Blob Provider -It supports authentication only with -[environment variables](https://docs.microsoft.com/en-us/azure/storage/common/storage-azure-cli#set-default-azure-storage-account-environment-variables): +```yaml +blobs: + - provider: azblob + bucket: releases?storage_account=myazurestorage +``` + +Storage account is set over URL param `storage_account` in `bucket` or in environment variable `AZURE_STORAGE_ACCOUNT` -- `AZURE_STORAGE_ACCOUNT` -- `AZURE_STORAGE_KEY` or `AZURE_STORAGE_SAS_TOKEN` +It supports authentication with +- [environment variables](https://docs.microsoft.com/en-us/azure/storage/common/storage-azure-cli#set-default-azure-storage-account-environment-variables): + - `AZURE_STORAGE_KEY` or `AZURE_STORAGE_SAS_TOKEN` +- [default Azure credential](https://learn.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication-service-principal) ### [GCS Provider](https://cloud.google.com/docs/authentication/production) diff --git a/goreleaser/www/docs/customization/builds.md b/goreleaser/www/docs/customization/builds.md index 472f70a..d6ad6b7 100644 --- a/goreleaser/www/docs/customization/builds.md +++ b/goreleaser/www/docs/customization/builds.md @@ -169,6 +169,7 @@ builds: # It is safe to ignore this option in most cases. # # Default is "go" + # Templates: allowed (since v1.23). gobinary: "go1.13.4" # Sets the command to run to build. @@ -267,7 +268,7 @@ builds: ```sh go tool dist list -json | jq -r '.[] | select(.FirstClass) | [.GOOS, .GOARCH] | @tsv' ``` - We also recommend reading the [official wiki about Go ports](https://github.com/golang/go/wiki/PortingPolicy#first-class-ports). + We also recommend reading the [official wiki about Go ports](https://go.dev/wiki/PortingPolicy#first-class-ports). Here is an example with multiple binaries: @@ -558,7 +559,7 @@ The `targets` option can take a `go_first_class` special value as target, which will evaluate to the list of first class ports as defined in the Go wiki. You can read more about it -[here](https://github.com/golang/go/wiki/PortingPolicy#first-class-ports). +[here](https://go.dev/wiki/PortingPolicy#first-class-ports). ## Building shared or static libraries diff --git a/goreleaser/www/docs/customization/changelog.md b/goreleaser/www/docs/customization/changelog.md index bf860a2..f6ef221 100644 --- a/goreleaser/www/docs/customization/changelog.md +++ b/goreleaser/www/docs/customization/changelog.md @@ -67,22 +67,21 @@ changelog: order: 1 - title: Others order: 999 + # A group can have subgroups. # If you use this, all the commits that match the parent group will also # be checked against its subgroups. If some of them matches, it'll be - # grouped there, otherwise they'll remain ungrouped. + # grouped there, otherwise they'll remain not grouped. # # The title is optional - you can think of groups as a way to order # commits within a group. # - # There can only be one level of subgroups, i.e. a subgroup cannot have - # subgroups. - # - # This feature is only available in GoReleaser Pro. + # There can only be one level of subgroups, i.e.: a subgroup can't have + # subgroups within it. # # Since: v1.15 (pro) # This feature is only available in GoReleaser Pro. - subgroups: + groups: - title: "Docs" regex: ".*docs.*" order: 1 diff --git a/goreleaser/www/docs/customization/chocolatey.md b/goreleaser/www/docs/customization/chocolatey.md index 144055d..d5f9219 100644 --- a/goreleaser/www/docs/customization/chocolatey.md +++ b/goreleaser/www/docs/customization/chocolatey.md @@ -14,8 +14,7 @@ Available options: ```yaml # .goreleaser.yaml chocolateys: - - - # Your app's package name. + - # Your app's package name. # The value may not contain spaces or character that are not valid for a URL. # If you want a good separator for words, use '-', not '.'. # @@ -24,6 +23,7 @@ chocolateys: # IDs of the archives to use. # Empty means all IDs. + # Attention: archives must not be in the 'binary' format. ids: - foo - bar @@ -53,7 +53,7 @@ chocolateys: url_template: "https://github.com/foo/bar/releases/download/{{ .Tag }}/{{ .ArtifactName }}" # App's icon. - icon_url: 'https://rawcdn.githack.com/foo/bar/efbdc760-395b-43f1-bf69-ba25c374d473/icon.png' + icon_url: "https://rawcdn.githack.com/foo/bar/efbdc760-395b-43f1-bf69-ba25c374d473/icon.png" # Your app's copyright details. copyright: 2022 Drummer Roll Inc @@ -103,7 +103,7 @@ chocolateys: # The api key that should be used to push to the chocolatey repository. # # WARNING: do not expose your api key in the configuration file! - api_key: '{{ .Env.CHOCOLATEY_API_KEY }}' + api_key: "{{ .Env.CHOCOLATEY_API_KEY }}" # The source repository that will push the package to. source_repo: "https://push.chocolatey.org/" @@ -121,8 +121,10 @@ chocolateys: ``` !!! tip + Learn more about the [name template engine](/customization/templates/). !!! note + GoReleaser will not install `chocolatey`/`choco` nor any of its dependencies for you. diff --git a/goreleaser/www/docs/customization/homebrew.md b/goreleaser/www/docs/customization/homebrew.md index df8a092..f2fee0d 100644 --- a/goreleaser/www/docs/customization/homebrew.md +++ b/goreleaser/www/docs/customization/homebrew.md @@ -115,6 +115,11 @@ brews: # Packages your package depends on. dependencies: - name: git + # Allow to specify the OS in which the dependency is required. + # Valid options are `mac` and `linux`. + # + # Since: v1.23.0 + os: mac - name: zsh type: optional - name: fish diff --git a/goreleaser/www/docs/customization/index.md b/goreleaser/www/docs/customization/index.md index 741f647..8f8f557 100644 --- a/goreleaser/www/docs/customization/index.md +++ b/goreleaser/www/docs/customization/index.md @@ -15,6 +15,7 @@ GoReleaser also has a [jsonschema][] file, which you can use to have better editor support: === "OSS" + ```sh https://goreleaser.com/static/schema.json ``` @@ -26,6 +27,7 @@ editor support: ``` === "Pro" + ```sh https://goreleaser.com/static/schema-pro.json ``` @@ -44,13 +46,14 @@ You can also generate it for your specific version using the You can pin the version by getting the schema from the GitHub tag, for example, for v1.12.0: - === "OSS" + ```sh https://raw.githubusercontent.com/goreleaser/goreleaser/v1.12.0/www/docs/static/schema.json ``` === "Pro" + ```sh https://raw.githubusercontent.com/goreleaser/goreleaser/v1.12.0/www/docs/static/schema-pro.json ``` diff --git a/goreleaser/www/docs/customization/ko.md b/goreleaser/www/docs/customization/ko.md index 30c1108..edd03a8 100644 --- a/goreleaser/www/docs/customization/ko.md +++ b/goreleaser/www/docs/customization/ko.md @@ -25,6 +25,7 @@ kos: build: build-id # Main path to build. + # It must be a relative path # # Default: build.main main: ./cmd/... diff --git a/goreleaser/www/docs/customization/nfpm.md b/goreleaser/www/docs/customization/nfpm.md index caa1bbf..62ff9bd 100644 --- a/goreleaser/www/docs/customization/nfpm.md +++ b/goreleaser/www/docs/customization/nfpm.md @@ -456,3 +456,26 @@ Termux is the same format as `deb`, the differences are: - it uses a different `bindir` (prefixed with `/data/data/com.termux/files/`) - it uses slightly different architecture names than Debian + +## Conventional file names, Debian, and ARMv6 + +On Debian, both ARMv6 and ARMv7 have the same architecture name: `armhf`. + +If you use `{{.ConventionalFileName}}`, and build for both architectures, you'll +get duplicated file names. + +You can go around that with something like this: + +```yaml +# .goreleaser.yaml +nfpms: + - + # ... + file_name_template: >- + {{- trimsuffix .ConventionalFileName .ConventionalExtension -}} + {{- if and (eq .Arm "6") (eq .ConventionalExtension ".deb") }}6{{ end -}} + {{- if not (eq .Amd64 "v1")}}{{ .Amd64 }}{{ end -}} + {{- .ConventionalExtension -}} + + # ... +``` diff --git a/goreleaser/www/docs/customization/reportsizes.md b/goreleaser/www/docs/customization/reportsizes.md index 9f63c4a..e1d2786 100644 --- a/goreleaser/www/docs/customization/reportsizes.md +++ b/goreleaser/www/docs/customization/reportsizes.md @@ -8,14 +8,14 @@ sizes. It'll report the size of each artifact of the following types to the build output, as well as on `dist/artifacts.json`: -- `Binary,` -- `UniversalBinary,` -- `UploadableArchive,` -- `PublishableSnapcraft,` -- `LinuxPackage,` -- `CArchive,` -- `CShared,` -- `Header,` +- `Binary` +- `UniversalBinary` +- `UploadableArchive` +- `PublishableSnapcraft` +- `LinuxPackage` +- `CArchive` +- `CShared` +- `Header` Here's the available configuration options: diff --git a/goreleaser/www/docs/customization/sbom.md b/goreleaser/www/docs/customization/sbom.md index 09971c2..36741ed 100644 --- a/goreleaser/www/docs/customization/sbom.md +++ b/goreleaser/www/docs/customization/sbom.md @@ -63,9 +63,9 @@ sboms: # Command line arguments for the command # - # Default: ["$artifact", "--file", "$document", "--output", "spdx-json"] + # Default: ["$artifact", "--output", "spdx-json=$document"] # Templates: allowed - args: ["$artifact", "--file", "$sbom", "--output", "spdx-json"] + args: ["$artifact", "--output", "cyclonedx-json:$document"] # List of environment variables that will be passed to the SBOM command as # well as the templates. diff --git a/goreleaser/www/docs/customization/sign.md b/goreleaser/www/docs/customization/sign.md index eaf758e..ac3a0fe 100644 --- a/goreleaser/www/docs/customization/sign.md +++ b/goreleaser/www/docs/customization/sign.md @@ -26,7 +26,7 @@ To customize the signing pipeline you can use the following options: ```yaml # .goreleaser.yaml signs: - - + - # # ID of the sign config, must be unique. # # Default: 'default' @@ -76,22 +76,28 @@ signs: # Stdin data to be given to the signature command as stdin. # # Templates: allowed - stdin: '{{ .Env.GPG_PASSWORD }}' + stdin: "{{ .Env.GPG_PASSWORD }}" # StdinFile file to be given to the signature command as stdin. stdin_file: ./.password # Sets a certificate that your signing command should write to. + # # You can later use `${certificate}` or `.Env.certificate` in the `args` section. - # This is particularly useful for keyless signing (for instance, with cosign). + # + # This is particularly useful for keyless signing with cosign, and should + # not usually be used otherwise. + # # Note that this should be a name, not a path. + # + # Templates: allowed certificate: '{{ trimsuffix .Env.artifact ".tar.gz" }}.pem' # List of environment variables that will be passed to the signing command # as well as the templates. env: - - FOO=bar - - HONK=honkhonk + - FOO=bar + - HONK=honkhonk # By default, the stdout and stderr of the signing cmd are discarded unless # GoReleaser is running with `--debug` set. @@ -121,15 +127,15 @@ environment variable set, a simple usage example would look like this: ```yaml # .goreleaser.yaml signs: -- cmd: cosign - stdin: '{{ .Env.COSIGN_PWD }}' - args: - - "sign-blob" - - "--key=cosign.key" - - "--output-signature=${signature}" - - "${artifact}" - - "--yes" # needed on cosign 2.0.0+ - artifacts: all + - cmd: cosign + stdin: "{{ .Env.COSIGN_PWD }}" + args: + - "sign-blob" + - "--key=cosign.key" + - "--output-signature=${signature}" + - "${artifact}" + - "--yes" # needed on cosign 2.0.0+ + artifacts: all ``` Your users can then verify the signature with: @@ -151,23 +157,23 @@ For example, you can use [gon][] to create notarized macOS apps: ```yaml # .goreleaser.yaml builds: -- binary: foo - id: foo - goos: - - linux - - windows - goarch: - - amd64 - -# notice that we need a separated build for the MacOS binary only: -- binary: foo - id: foo-macos - goos: - - darwin - goarch: - - amd64 - hooks: - post: gon gon.hcl + - binary: foo + id: foo + goos: + - linux + - windows + goarch: + - amd64 + + # notice that we need a separated build for the MacOS binary only: + - binary: foo + id: foo-macos + goos: + - darwin + goarch: + - amd64 + hooks: + post: gon gon.hcl ``` and: @@ -203,7 +209,6 @@ You can also check [this issue](https://github.com/goreleaser/goreleaser/issues/1227) for more details. - ### With cosign You can also use [cosign][] to sign the binaries directly, but you'll need to @@ -212,19 +217,19 @@ manually add the `.sig` files to the release and/or archive: ```yaml # .goreleaser.yaml builds: -- hooks: - post: - - sh -c "COSIGN_PASSWORD=$COSIGN_PWD cosign sign-blob --key cosign.key --output-signature dist/{{ .ProjectName }}_{{ .Version }}_{{ .Target }}.sig {{ .Path }}" + - hooks: + post: + - sh -c "COSIGN_PASSWORD=$COSIGN_PWD cosign sign-blob --key cosign.key --output-signature dist/{{ .ProjectName }}_{{ .Version }}_{{ .Target }}.sig {{ .Path }}" # add to the release directly: release: extra_files: - - glob: dist/*.sig + - glob: dist/*.sig # or just to the archives: archives: -- files: - - dist/*.sig + - files: + - dist/*.sig ``` While this works, I would recommend using the signing pipe directly. @@ -244,11 +249,11 @@ you can wrap the command inside a `sh -c` execution, for instance: ```yaml # .goreleaser.yaml signs: -- cmd: sh - args: - - '-c' - - 'echo "${artifact} is signed and I can prove it" | tee ${signature}' - artifacts: all + - cmd: sh + args: + - "-c" + - 'echo "${artifact} is signed and I can prove it" | tee ${signature}' + artifacts: all ``` And it will work just fine. Just make sure to always use the `${signature}` diff --git a/goreleaser/www/docs/customization/snapcraft.md b/goreleaser/www/docs/customization/snapcraft.md index 8f2e2c2..f1404b8 100644 --- a/goreleaser/www/docs/customization/snapcraft.md +++ b/goreleaser/www/docs/customization/snapcraft.md @@ -7,6 +7,10 @@ From there it will be installable in all the [supported Linux distros](https://snapcraft.io/docs/core/install), with automatic and transactional updates. +!!! warning + + Snapcraft packages can't be build inside a Docker container. + You can read more about it in the [snapcraft docs](https://snapcraft.io/docs/). Available options: @@ -237,7 +241,7 @@ snapcrafts: common_id: "com.example.drumroll" # Bash completion snippet. More information about completion here: - # https://docs.snapcraft.io/tab-completion-for-snaps. + # https://snapcraft.io/docs/tab-completion. completer: drumroll-completion.bash # You can override the command name. diff --git a/goreleaser/www/docs/customization/templates.md b/goreleaser/www/docs/customization/templates.md index 2fae54d..14c00d6 100644 --- a/goreleaser/www/docs/customization/templates.md +++ b/goreleaser/www/docs/customization/templates.md @@ -51,7 +51,7 @@ In fields that support templates, these fields are always available: | `.TagBody` | the annotated tag message's body, or the message's body of the commit it points out[^git-tag-body]. Since v1.2 | | `.Runtime.Goos` | equivalent to `runtime.GOOS`. Since v1.5 | | `.Runtime.Goarch` | equivalent to `runtime.GOARCH`. Since v1.5 | -| `.Artifacts` | the current artifact list. See table bellow for fields. Since v1.16 (pro) | +| `.Artifacts` | the current artifact list. See table below for fields. Since v1.16 (pro) | [^version-prefix]: The `v` prefix is stripped, and it might be changed in diff --git a/goreleaser/www/docs/customization/verifiable_builds.md b/goreleaser/www/docs/customization/verifiable_builds.md index fea3753..a2e7c9f 100644 --- a/goreleaser/www/docs/customization/verifiable_builds.md +++ b/goreleaser/www/docs/customization/verifiable_builds.md @@ -40,11 +40,18 @@ gomod: ``` !!! tip + You can use `debug.ReadBuildInfo()` to get the version/checksum/dependencies of the module. !!! warning + VCS Info will not be embedded in the binary, as in practice it is not being built from the source, but from the Go Mod Proxy. +!!! warning + + If you have a `go.work` file, make sure to run `go work sync`, so the main + module (`.`) is the first line inside the `use` block. + [vgo]: https://research.swtch.com/vgo-repro diff --git a/goreleaser/www/docs/errors/docker-build.md b/goreleaser/www/docs/errors/docker-build.md index 99d87f8..d2014d9 100644 --- a/goreleaser/www/docs/errors/docker-build.md +++ b/goreleaser/www/docs/errors/docker-build.md @@ -15,7 +15,15 @@ It's not. It's always a new temporary build context with the artifacts you can use in its root, so you can just `COPY binaryname /bin/binaryname` and etc. -Bellow you can find some **don'ts** as well as what you should **do**. +Below you can find some **don'ts** as well as what you should **do**. + +## `use docker --context=default buildx to switch to context "default"` + +The "default" context is a built-in context in "docker buildx", and it is automatically created. This context typically points to the local Docker environment and is used by default for building images. It has to be active for `goreleaser` to build images with "buildx". + +You can switch to the default context using `docker context use default`. + +This change should be persistent. ### Don't @@ -57,4 +65,4 @@ ENTRYPOINT ["/app"] !!! tip If you still want your users to be able to `docker build` without an extra step, you can have a `Dockerfile` just for GoReleaser, for example, a - `goreleaser.dockefile`. + `goreleaser.dockerfile`. diff --git a/goreleaser/www/docs/how-it-works.md b/goreleaser/www/docs/how-it-works.md index 853bab2..a38bb5e 100644 --- a/goreleaser/www/docs/how-it-works.md +++ b/goreleaser/www/docs/how-it-works.md @@ -7,7 +7,7 @@ use cases easy. GoReleaser expects a couple of things: - a `.goreleaser.yaml` file with the configuration (see the - [customization section](/customization) for more info) + [customization section](./customization/index.md) for more info) - a clean working tree - a SemVer-compatible version (e.g. `10.21.34-prerelease+buildmeta`) @@ -24,6 +24,6 @@ A GoReleaser run is split into 4 major steps: - **announcing**: announces your release to the configured channels Some steps might be skipped with `--skip-foo`-like flags (check the -[command line docs](/cmd/goreleaser/) for details). +[command line docs](./cmd/goreleaser.md) for details). If any of the previous steps fails, the next steps will not run. diff --git a/goreleaser/www/docs/includes/repository.md b/goreleaser/www/docs/includes/repository.md index 031bdf1..63b706d 100644 --- a/goreleaser/www/docs/includes/repository.md +++ b/goreleaser/www/docs/includes/repository.md @@ -40,7 +40,7 @@ # # Since: v1.20 (pro). # This feature is only available in GoReleaser Pro. - check_boxex: true + check_boxes: true # Base can also be another repository, in which case the owner and name # above will be used as HEAD, allowing cross-repository pull requests. diff --git a/goreleaser/www/docs/install.md b/goreleaser/www/docs/install.md index 2a2a8ef..10d9f97 100644 --- a/goreleaser/www/docs/install.md +++ b/goreleaser/www/docs/install.md @@ -180,6 +180,8 @@ Once you do that, you can install the packages. go install github.com/goreleaser/goreleaser@latest ``` + Requires Go 1.21. + ### bash script === "OSS" @@ -205,6 +207,9 @@ Once you do that, you can install the packages. ```bash curl -sfL https://goreleaser.com/static/run | VERSION=__VERSION__ DISTRIBUTION=oss bash -s -- check + + curl -sfL https://goreleaser.com/static/run | + VERSION=__VERSION__ DISTRIBUTION=pro bash -s -- check ``` !!! tip diff --git a/goreleaser/www/docs/links.md b/goreleaser/www/docs/links.md index 4963182..5819104 100644 --- a/goreleaser/www/docs/links.md +++ b/goreleaser/www/docs/links.md @@ -5,11 +5,11 @@ Mastodon for updates - Join our [Discord server](/discord) -- Read our [blog](./blog/index.md) ([RSS](/feed_rss_created.xml)) +- Read our [blog](./blog/index.md)[^blog] ([RSS](/feed_rss_created.xml)) - Follow us on [LinkedIn](/linkedin) - Ask questions on [GitHub Discussions](https://github.com/goreleaser/goreleaser/discussions) - Before contributing, read the [Contributing Guidelines](./contributing.md) -- [Security Policy](./security.md +- [Security Policy](./security.md) - [EULA](./eula.md) This project adheres to the Contributor Covenant diff --git a/goreleaser/www/docs/quick-start.md b/goreleaser/www/docs/quick-start.md index 6d72597..2cb32ae 100644 --- a/goreleaser/www/docs/quick-start.md +++ b/goreleaser/www/docs/quick-start.md @@ -125,10 +125,10 @@ goreleaser build --help ### Release Flags -Use the `--skip-publish` flag to skip publishing: +Use the `--skip=publish` flag to skip publishing: ```sh -goreleaser release --skip-publish +goreleaser release --skip=publish ``` You can check the other options by running: diff --git a/goreleaser/www/docs/security.md b/goreleaser/www/docs/security.md index 77eae15..1eb731b 100644 --- a/goreleaser/www/docs/security.md +++ b/goreleaser/www/docs/security.md @@ -6,6 +6,7 @@ Only the last stable version at any given point. ## Reporting a Vulnerability -Vulnerabilies can be disclosed in private using GitHub advisories: https://github.com/goreleaser/goreleaser/security +Vulnerabilities can be disclosed in private using +[GitHub advisories](https://github.com/goreleaser/goreleaser/security). Thanks! diff --git a/goreleaser/www/docs/static/latest b/goreleaser/www/docs/static/latest index 09aa869..1f3000c 100644 --- a/goreleaser/www/docs/static/latest +++ b/goreleaser/www/docs/static/latest @@ -1 +1 @@ -v1.21.1 +v1.22.1 diff --git a/goreleaser/www/docs/static/latest-pro b/goreleaser/www/docs/static/latest-pro index 7516519..e755bd5 100644 --- a/goreleaser/www/docs/static/latest-pro +++ b/goreleaser/www/docs/static/latest-pro @@ -1 +1 @@ -v1.21.1-pro +v1.22.1-pro diff --git a/goreleaser/www/docs/static/releases-pro.json b/goreleaser/www/docs/static/releases-pro.json index 0fb14ec..0b2e4ac 100644 --- a/goreleaser/www/docs/static/releases-pro.json +++ b/goreleaser/www/docs/static/releases-pro.json @@ -1,4 +1,13 @@ [ + { + "tag_name": "v1.22.1-pro" + }, + { + "tag_name": "v1.22.0-pro" + }, + { + "tag_name": "v1.21.2-pro" + }, { "tag_name": "v1.21.1-pro" }, diff --git a/goreleaser/www/docs/static/releases.json b/goreleaser/www/docs/static/releases.json index 54303cf..dee5b7a 100644 --- a/goreleaser/www/docs/static/releases.json +++ b/goreleaser/www/docs/static/releases.json @@ -1,13 +1,22 @@ [ { - "tag_name": "v1.21.1" + "tag_name": "v1.22.1" }, { - "tag_name": "v1.21.0" + "tag_name": "v1.22.0" }, { "tag_name": "nightly" }, + { + "tag_name": "v1.21.2" + }, + { + "tag_name": "v1.21.1" + }, + { + "tag_name": "v1.21.0" + }, { "tag_name": "v1.20.0" }, diff --git a/goreleaser/www/docs/static/run b/goreleaser/www/docs/static/run index 4985638..7fea12b 100755 --- a/goreleaser/www/docs/static/run +++ b/goreleaser/www/docs/static/run @@ -1,6 +1,10 @@ -#!/bin/sh +#!/bin/bash set -e +if [[ "$VERSION" == *-pro ]]; then + DISTRIBUTION="pro" +fi + if test "$DISTRIBUTION" = "pro"; then echo "Using Pro distribution..." RELEASES_URL="https://github.com/goreleaser/goreleaser-pro/releases" @@ -20,9 +24,14 @@ test -z "$VERSION" && { exit 1 } +if test "$DISTRIBUTION" = "pro" && [[ "$VERSION" != *-pro ]]; then + VERSION="$VERSION-pro" +fi + TMP_DIR="$(mktemp -d)" # shellcheck disable=SC2064 # intentionally expands here trap "rm -rf \"$TMP_DIR\"" EXIT INT TERM + OS="$(uname -s)" ARCH="$(uname -m)" test "$ARCH" = "aarch64" && ARCH="arm64" diff --git a/goreleaser/www/docs/static/schema-pro.json b/goreleaser/www/docs/static/schema-pro.json index 38dafe6..fd77133 100644 --- a/goreleaser/www/docs/static/schema-pro.json +++ b/goreleaser/www/docs/static/schema-pro.json @@ -101,6 +101,9 @@ }, "goamd64": { "type": "string" + }, + "directory": { + "type": "string" } }, "additionalProperties": false, @@ -769,6 +772,9 @@ }, "file_info": { "$ref": "#/$defs/ContentFileInfo" + }, + "expand": { + "type": "boolean" } }, "additionalProperties": false, @@ -901,7 +907,13 @@ "type": "array" }, "use": { - "type": "string" + "type": "string", + "enum": [ + "docker", + "buildx", + "podman" + ], + "default": "docker" }, "templated_files": { "items": { @@ -1385,6 +1397,13 @@ }, "version": { "type": "string" + }, + "os": { + "type": "string", + "enum": [ + "mac", + "linux" + ] } }, "additionalProperties": false, @@ -2406,6 +2425,13 @@ }, "Project": { "properties": { + "version": { + "type": "integer", + "enum": [ + 1 + ], + "default": 1 + }, "project_name": { "type": "string" }, @@ -3956,7 +3982,14 @@ } }, "additionalProperties": false, - "type": "object" + "type": "object", + "required": [ + "package_identifier", + "publisher", + "repository", + "short_description", + "license" + ] }, "WingetDependency": { "properties": { diff --git a/goreleaser/www/docs/static/schema.json b/goreleaser/www/docs/static/schema.json index 99a8482..87f5131 100644 --- a/goreleaser/www/docs/static/schema.json +++ b/goreleaser/www/docs/static/schema.json @@ -101,6 +101,9 @@ }, "goamd64": { "type": "string" + }, + "directory": { + "type": "string" } }, "additionalProperties": false, @@ -697,6 +700,9 @@ }, "file_info": { "$ref": "#/$defs/ContentFileInfo" + }, + "expand": { + "type": "boolean" } }, "additionalProperties": false, @@ -819,7 +825,12 @@ "type": "array" }, "use": { - "type": "string" + "type": "string", + "enum": [ + "docker", + "buildx" + ], + "default": "docker" } }, "additionalProperties": false, @@ -1260,6 +1271,13 @@ }, "version": { "type": "string" + }, + "os": { + "type": "string", + "enum": [ + "mac", + "linux" + ] } }, "additionalProperties": false, @@ -2112,6 +2130,13 @@ }, "Project": { "properties": { + "version": { + "type": "integer", + "enum": [ + 1 + ], + "default": 1 + }, "project_name": { "type": "string" }, @@ -3532,7 +3557,14 @@ } }, "additionalProperties": false, - "type": "object" + "type": "object", + "required": [ + "package_identifier", + "publisher", + "repository", + "short_description", + "license" + ] }, "WingetDependency": { "properties": { diff --git a/goreleaser/www/docs/static/slsa-provenance-generation.png b/goreleaser/www/docs/static/slsa-provenance-generation.png new file mode 100644 index 0000000000000000000000000000000000000000..d25c99af702f2e7ca8f40deb6ac15d2f2bb051a9 GIT binary patch literal 99519 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