From 4afbce7d2744d21176d1e505a82df3adde99b7ef Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Tue, 17 Feb 2026 16:32:54 +0200 Subject: [PATCH 01/15] feat: bring prsdm up to date --- todos.yaml | 465 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 465 insertions(+) create mode 100644 todos.yaml diff --git a/todos.yaml b/todos.yaml new file mode 100644 index 00000000..38d03617 --- /dev/null +++ b/todos.yaml @@ -0,0 +1,465 @@ +todos: + - id: 1 + status: pending + files: + - go.mod + - go.sum + description: | + Update root go.mod to use Go 1.23 (latest stable version). + Current version is 1.23.0 with toolchain go1.23.9. + Update the go directive to go 1.23 and ensure toolchain is set to go1.23.9 or later. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 2 + status: pending + files: + - .github/workflows/goreleaser.yml + description: | + Update GitHub Actions goreleaser workflow to use Go 1.23. + Current version specified is 1.16 which is severely outdated. + Update the 'go-version' field in the setup-go action to use '1.23.x'. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 3 + status: pending + files: + - templates/blog/go.mod + - templates/default/go.mod + - templates/design/go.mod + - templates/onboarding/go.mod + - templates/requirements/go.mod + - templates/runbook/go.mod + - docs/go.mod + description: | + Update all template and docs go.mod files to use Go 1.23. + These directory go.mod files need to be updated to match the root go.mod version. + Check each file and update the 'go' directive to 1.23. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 4 + status: pending + files: + - go.mod + - go.sum + description: | + Update Hugo dependency to v0.140.0 or later (latest stable). + Current version is v0.87.0 which is very outdated (released 2021). + Run 'go get github.com/gohugoio/hugo@v0.140.0' or later version. + Note: Hugo v0.152 does not exist - latest is around v0.140.x range. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 5 + status: pending + files: + - .github/workflows/gh-pages.yml + - docs/content/recipes/hosting/github-pages.md + description: | + Update Hugo version references in GitHub Actions workflows and documentation. + The gh-pages.yml workflow uses 'latest' which is good. + Update any hardcoded version references in documentation to match the new Hugo version. + The docs/content/recipes/hosting/github-pages.md file has a hardcoded '0.87.0' reference. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 6 + status: pending + files: + - tools/hugo/go.mod + description: | + Update the Hugo submodule in tools/hugo to the latest version. + This appears to be a git submodule tracking the Hugo repository. + Consider updating to the latest Hugo commit or tag. + Run 'cd tools/hugo && git fetch && git checkout '. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 7 + status: pending + files: + - pkg/domain/service/template/template.go + description: | + Replace packr/v2 imports with Go's native embed package in template.go. + Current code uses: + - "github.com/gobuffalo/packd" + - "github.com/gobuffalo/packr/v2" + Replace with: + - "embed" + Update the Service struct to use embed.FS instead of packd.Box. + Add //go:embed directive to embed the templates directory. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 8 + status: pending + files: + - pkg/domain/service/template/template.go + description: | + Update the New() function to remove packr initialization. + Replace 'packr.New("templatesBox", "../../../../templates")' with proper embed.FS usage. + Declare a package-level variable like: + //go:embed ../../../../templates + var templatesFS embed.FS + Update the Service struct initialization to use this embedded FS. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 9 + status: pending + files: + - pkg/domain/service/template/template.go + description: | + Refactor GetListing() method to work with embed.FS. + Replace 's.templates.WalkPrefix()' with 'fs.WalkDir()' from io/fs package. + The embed.FS implements fs.FS interface, so use fs.WalkDir(s.templates, templateDir, ...). + Update function signature and logic accordingly. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 10 + status: pending + files: + - pkg/domain/service/template/template.go + description: | + Refactor ProcessDirTemplates() method to work with embed.FS. + Replace packr's WalkPrefix with fs.WalkDir from io/fs package. + Update file handling to use embed.FS ReadFile method instead of packd.File. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 11 + status: pending + files: + - pkg/domain/service/template/template.go + description: | + Refactor ProcessTemplate() method to work with embed.FS. + Replace 's.templates.FindString(theTemplate)' with 'fs.ReadFile(s.templates, theTemplate)'. + Convert []byte result to string if needed. + Update error handling accordingly. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 12 + status: pending + files: + - go.mod + - go.sum + description: | + Remove packr dependencies from go.mod. + Remove the following dependencies: + - github.com/gobuffalo/packd v1.0.1 + - github.com/gobuffalo/packr/v2 v2.8.3 + Run 'go mod tidy' to clean up indirect dependencies. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 13 + status: pending + files: + - Makefile + description: | + Remove 'pack' target from Makefile. + The pack target installs and runs packr2, which is no longer needed: + pack: + go get -u github.com/gobuffalo/packr/v2/packr2 + packr2 + go mod tidy + This entire target should be removed. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 14 + status: pending + files: + - Makefile + description: | + Update 'build' target in Makefile to remove packr dependencies. + Current build target: + build: + make pack + go build -o $(FILENAME) main.go + packr2 clean + Should become: + build: + go build -o $(FILENAME) main.go + Remove the 'make pack' and 'packr2 clean' lines. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 15 + status: pending + files: + - .goreleaser.yaml + description: | + Remove packr2 command from .goreleaser.yaml before hooks. + Current before hooks: + before: + hooks: + - go mod tidy + - packr2 + Change to: + before: + hooks: + - go mod tidy + The packr2 command is no longer needed. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 16 + status: pending + files: + - .github/workflows/goreleaser.yml + description: | + Remove packr installation step from GitHub Actions goreleaser workflow. + Current workflow has: + - name: Get packr + run: go get -u github.com/gobuffalo/packr/v2/packr2 + This entire step should be removed as packr is no longer needed. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 17 + status: pending + files: + - Makefile + description: | + Modernize the 'test' target in Makefile. + Current implementation: + test: + @mkdir -p reports + go test -p 1 -v $(TESTDIRS) -coverprofile=reports/tests-cov.out + Consider using modern go test flags and tools: + - Use 'go test ./...' instead of manually filtering directories + - Add '-race' flag for race detection + - Add '-timeout' flag to prevent hanging tests + - Consider using 'go test -json' for better CI integration + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 18 + status: pending + files: + - Makefile + description: | + Modernize the 'dist' target in Makefile. + Current implementation: + dist: + [ -d "dist" ] || mkdir "dist" + go build -o "dist/presidium" --tags extended + Improvements: + - Use 'go build' with modern flags like '-trimpath' for reproducible builds + - Add '-ldflags' for version information injection + - Consider using 'go install' pattern for modern Go tooling + - Add 'CGO_ENABLED=0' for static binaries if appropriate + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 19 + status: pending + files: + - Makefile + description: | + Add modern Go tooling targets to Makefile. + Consider adding the following targets for better developer experience: + - 'fmt' target: go fmt ./... + - 'vet' target: go vet ./... + - 'lint' target: golangci-lint run (if golangci-lint is available) + - 'tidy' target: go mod tidy && go mod verify + - 'install-tools' target: for installing development dependencies + These are standard targets in modern Go projects. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 20 + status: pending + files: + - Makefile + description: | + Add help target to Makefile for better discoverability. + Add a 'help' or default target that displays available commands: + help: ## Display this help message + @echo "Available targets:" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ + awk 'BEGIN {FS = ":.*?## "}; {printf " %-15s %s\n", $$1, $$2}' + Add '## Description' comments to existing targets. + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 21 + status: pending + files: + - .github/workflows/goreleaser.yml + description: | + Update goreleaser GitHub Actions workflow to use modern action versions. + Current workflow uses: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + - uses: goreleaser/goreleaser-action@v2 + Update to latest versions: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + - uses: goreleaser/goreleaser-action@v6 + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 22 + status: pending + files: + - .github/workflows/gh-pages.yml + description: | + Update gh-pages GitHub Actions workflow to use modern action versions. + Current workflow uses: + - uses: actions/checkout@v2 + - uses: peaceiris/actions-hugo@v2 + - uses: peaceiris/actions-gh-pages@v3 + Update to latest versions: + - uses: actions/checkout@v4 + - uses: peaceiris/actions-hugo@v3 + - uses: peaceiris/actions-gh-pages@v4 + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 23 + status: pending + files: + - go.mod + - go.sum + description: | + Run 'go mod tidy' and 'go mod verify' after all Go version updates. + This ensures: + - All dependencies are properly resolved for Go 1.23 + - Unused dependencies are removed + - go.sum is correct and verified + - All indirect dependencies are properly tracked + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 24 + status: pending + files: + - main.go + - cmd/ + - pkg/ + description: | + Test the application after removing packr to ensure embed works correctly. + Steps: + 1. Build the application: make build + 2. Test template generation: ./presidium init test-project + 3. Verify templates are properly embedded and extracted + 4. Run test suite: make test + 5. Verify all tests pass with the new embed implementation + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + + - id: 25 + status: pending + files: + - README.md + - docs/content/ + description: | + Update documentation to reflect the new Go and Hugo versions. + Tasks: + - Update any version requirements in README.md + - Update getting-started documentation + - Update prerequisites documentation + - Remove any references to packr if mentioned + - Update build instructions if needed + action-taken: null + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: null + +notes: | + Migration Strategy: + + 1. Go Version Update (Tasks 1-3): + - Update root and all template go.mod files to Go 1.23 + - Update GitHub Actions workflows + - This is the foundation for other updates + + 2. Hugo Version Update (Tasks 4-6): + - Update Hugo dependency to v0.140.x or latest stable + - Note: Hugo v0.152 doesn't exist; latest is ~v0.140.x + - Update Hugo submodule if needed + - Update documentation references + + 3. Remove Packr (Tasks 7-16): + - Convert template service to use embed.FS (tasks 7-11) + - Remove packr dependencies from go.mod (task 12) + - Clean up Makefile (tasks 13-14) + - Update goreleaser config (task 15) + - Update GitHub Actions (task 16) + - This is the most complex migration + + 4. Modernize Build Process (Tasks 17-22): + - Update Makefile with modern Go tooling practices + - Add helpful development targets + - Update GitHub Actions to latest versions + + 5. Finalize and Test (Tasks 23-25): + - Run go mod tidy + - Test thoroughly + - Update documentation + + Important Notes: + - Go 1.23 is the latest stable version (not 1.25) + - Hugo latest stable is ~v0.140.x (not 0.152) + - embed.FS is available since Go 1.16 and is the modern replacement for packr + - The tools/hugo directory appears to be a git submodule with Hugo source + - All changes should be tested thoroughly before merging + + Breaking Changes: + - Minimum Go version will be 1.23 (up from 1.23.0) + - Hugo dependency will jump from v0.87.0 to v0.140.x (major version jump) + - packr removal may affect any external tools depending on generated packr files From e8d5fdb38b581c89ac418fd83703ef71f5742d33 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Tue, 17 Feb 2026 18:32:46 +0200 Subject: [PATCH 02/15] feat: bring prsdm up to date --- .github/workflows/gh-pages.yml | 8 +- .github/workflows/goreleaser.yml | 19 +- Makefile | 40 +- docs/Makefile | 36 + docs/content/recipes/hosting/github-pages.md | 2 +- docs/go.mod | 6 +- docs/go.sum | 6 +- docs/layouts/index.html | 152 --- embedded.go | 6 + go.mod | 300 +++-- go.sum | 1044 ++++++++--------- main.go | 2 + pkg/configtranslation/configfile.go | 2 +- pkg/domain/service/conversion/conversion.go | 2 +- .../conversion/fileactions/fileactions.go | 6 +- .../conversion/markdown/frontmatter.go | 2 +- .../conversion/markdown/markdown_test.go | 5 +- .../service/conversion/markdown/operations.go | 11 +- .../service/conversion/markdown/parse.go | 2 +- .../service/generator/generaror_test.go | 4 +- pkg/domain/service/template/template.go | 82 +- .../{onboarding/go.mod => blog/go.mod.tmpl} | 2 +- .../{blog/go.mod => default/go.mod.tmpl} | 2 +- .../{default/go.mod => design/go.mod.tmpl} | 2 +- .../{design/go.mod => onboarding/go.mod.tmpl} | 2 +- templates/requirements/go.mod | 3 - templates/requirements/go.mod.tmpl | 3 + templates/runbook/go.mod | 3 - templates/runbook/go.mod.tmpl | 3 + themes/presidium-styling-base | 1 + tools/hugo | 1 + 31 files changed, 859 insertions(+), 900 deletions(-) create mode 100644 docs/Makefile delete mode 100644 docs/layouts/index.html create mode 100644 embedded.go rename templates/{onboarding/go.mod => blog/go.mod.tmpl} (86%) rename templates/{blog/go.mod => default/go.mod.tmpl} (86%) rename templates/{default/go.mod => design/go.mod.tmpl} (86%) rename templates/{design/go.mod => onboarding/go.mod.tmpl} (86%) delete mode 100644 templates/requirements/go.mod create mode 100644 templates/requirements/go.mod.tmpl delete mode 100644 templates/runbook/go.mod create mode 100644 templates/runbook/go.mod.tmpl create mode 160000 themes/presidium-styling-base create mode 160000 tools/hugo diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 1a38ed07..082f3d3d 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -13,14 +13,14 @@ jobs: run: working-directory: ./docs steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: ref: master - submodules: true + submodules: true fetch-depth: 0 - name: Setup Hugo - uses: peaceiris/actions-hugo@v2 + uses: peaceiris/actions-hugo@v3 with: hugo-version: 'latest' extended: true @@ -28,7 +28,7 @@ jobs: run: hugo --minify - name: Deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./docs/public diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml index d94d61bb..9a32b86a 100644 --- a/.github/workflows/goreleaser.yml +++ b/.github/workflows/goreleaser.yml @@ -1,8 +1,9 @@ name: goreleaser + on: push: tags: - - '*' + - "*" jobs: goreleaser: @@ -10,22 +11,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v5 with: - go-version: 1.16 - - name: Get packr - run: go get -u github.com/gobuffalo/packr/v2/packr2 - - name: Prepare - run: git reset --hard + go-version: 1.25.x - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v2 + uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser version: latest - args: release --rm-dist + args: release --clean env: - GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} diff --git a/Makefile b/Makefile index 632d5bba..07403908 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,32 @@ FILENAME=main -TESTDIRS=`go list ./... |grep -v "vendor/" |grep -v "swagger/"` -.DEFAULT_GOAL=build -.PHONY: dist clean +.DEFAULT_GOAL=help +.PHONY: build test dist clean fmt vet tidy coverage_report help -test: +help: ## Display available targets + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-18s %s\n", $$1, $$2}' + +build: ## Build the presidium binary + go build -tags extended -o $(FILENAME) . + +test: ## Run tests with coverage @mkdir -p reports - go test -p 1 -v $(TESTDIRS) -coverprofile=reports/tests-cov.out + go test -race -timeout 120s ./... -coverprofile=reports/tests-cov.out + +fmt: ## Format Go source files + go fmt ./... -pack: - go get -u github.com/gobuffalo/packr/v2/packr2 - packr2 - go mod tidy +vet: ## Run go vet + go vet ./... -build: - make pack - go build -o $(FILENAME) main.go - packr2 clean +tidy: ## Tidy and verify module dependencies + go mod tidy && go mod verify -clean: +clean: ## Remove build artifacts rm -fr "dist" -coverage_report: +coverage_report: ## Open coverage report in browser @go tool cover -html=reports/tests-cov.out -dist: - [ -d "dist" ] || mkdir "dist" - go build -o "dist/presidium" --tags extended +dist: ## Build distribution binary + mkdir -p "dist" + go build -trimpath -o "dist/presidium" --tags extended diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..533b7c0b --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,36 @@ +default: + make serve + +hugo: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts + +tidy: + go mod tidy + hugo mod tidy + +refresh: + rm -rf public resources go.sum .hugo_build.lock themes + hugo mod clean + make tidy + make hugo + +serve: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts + +serve-a: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 + +serve-b: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/docs/content/recipes/hosting/github-pages.md b/docs/content/recipes/hosting/github-pages.md index f226d89a..1d805168 100644 --- a/docs/content/recipes/hosting/github-pages.md +++ b/docs/content/recipes/hosting/github-pages.md @@ -30,7 +30,7 @@ jobs: - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: - hugo-version: '0.87.0' + hugo-version: 'latest' extended: true - name: Build run: hugo --minify --baseURL `https://.github.io/` diff --git a/docs/go.mod b/docs/go.mod index 9d29fd51..d85077d1 100755 --- a/docs/go.mod +++ b/docs/go.mod @@ -1,8 +1,8 @@ module presidium -go 1.18 +go 1.25 require ( - github.com/spandigital/presidium-layouts-base v0.1.23 // indirect - github.com/spandigital/presidium-styling-base v0.1.16 // indirect + github.com/spandigital/presidium-layouts-base v0.13.0 // indirect + github.com/spandigital/presidium-styling-base v0.5.1 // indirect ) diff --git a/docs/go.sum b/docs/go.sum index c67c52dc..353d1612 100644 --- a/docs/go.sum +++ b/docs/go.sum @@ -1,2 +1,4 @@ -github.com/spandigital/presidium-theme-website v2.17.13+incompatible h1:uzzv1ZZzW8S4LLgJ2h90a31/HAWEdlbqmGTs26qbKQM= -github.com/spandigital/presidium-theme-website v2.17.13+incompatible/go.mod h1:8fTL83SigfxCino9GI0yWCVPuWVdUP7o4wfDVgChJCU= +github.com/spandigital/presidium-layouts-base v0.13.0 h1:PG16zEdnGcphKjf8GzOJ0BvJ32rJmGoc1ACXXLZrTYU= +github.com/spandigital/presidium-layouts-base v0.13.0/go.mod h1:sBRhQpfijPC3gfgoaN4sYxgEzu4C8DYR+tEey+34TJw= +github.com/spandigital/presidium-styling-base v0.5.1 h1:BX2TfiG0eoCSvnknEsCuFAM63MCuyUjYiBl6scW5yb0= +github.com/spandigital/presidium-styling-base v0.5.1/go.mod h1:NC3IsAi2ryXooQKMMBE9/dwhHyx1DT92bvjRf9yM6SA= diff --git a/docs/layouts/index.html b/docs/layouts/index.html deleted file mode 100644 index a22c7c15..00000000 --- a/docs/layouts/index.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - {{ $style := resources.Get "presidium.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }} - - Presidium - - - -
- -
-
- -
Software documentation that doesn’t suck.
-
Presidium is a software documentation management system for Agile teams and their - users, made from the stuff software engineers love. -
-

Presidium is built from the tools you already use, such as GitHub or Bitbucket for content - management, Markdown for content markup, Hugo to generate static sites, a sprinkling of Javascript - for dynamic menus, and an extensible approach for ingesting existing content from Swagger, - Javadoc, JSDoc...with more to come.

- -

If you're a software engineer, you already know how to use Presidium.

- -
- -
-
-
-
-
-

Easy Install and Upgrade

-

npm makes installation and upgrade a, trivial, single command activity. No need to modify your - content during upgrades.

-
-
-

Instant Publication

-

Author and review content on your desktop, then publish via Github pages with a single - checkin.

-
-
-

Flexible Team Workflow

-

Use Gitflow or whatever process you prefer to manage the content development process in your - team.

-
-
-

Configurable Presentation

-

Modify pre-configured content structure and visual style to best meet your needs. - Templates include software, design, and onboarding documentation.

-
-
-

Easily Incorporate Existing Content

-

A library of content ingestion packages can import existing content written with in Javadoc, - Swagger, and JSdoc and stored in other repositories.

-
-
-

Sound Content Strategy

-

Employ best practices from knowledge management and learning systems-micro-articles with focused - topics ensure clarity and ease of maintenance.

-
-
-
-
-
-
-
-
-

Up and running in minutes...

-
-

$ brew install SPANDigital/tap/presidium

-

$ presidium init

-
-
-
-
-

You can find the source code on Github

-

Presidium is available under an Apache 2.0 License

-
-
-
- {{ define "content" }} - - {{ end }} - -
-
-
-
-
-
Github
-
Markdown
-
Hugo
-
Javascript
-
Javadoc
-
Swagger
-
-
-
- -
- - diff --git a/embedded.go b/embedded.go new file mode 100644 index 00000000..018f597b --- /dev/null +++ b/embedded.go @@ -0,0 +1,6 @@ +package main + +import "embed" + +//go:embed all:templates +var templatesFS embed.FS diff --git a/go.mod b/go.mod index 3d7c2019..b752b209 100644 --- a/go.mod +++ b/go.mod @@ -1,147 +1,221 @@ module github.com/SPANDigital/presidium-hugo -go 1.23.0 +go 1.25 -toolchain go1.23.9 +toolchain go1.25.0 require ( - github.com/Masterminds/goutils v1.1.1 - github.com/Masterminds/sprig v2.22.0+incompatible - github.com/PuerkitoBio/goquery v1.7.1 - github.com/gobuffalo/packd v1.0.1 - github.com/gobuffalo/packr/v2 v2.8.3 - github.com/gohugoio/hugo v0.87.0 + github.com/Masterminds/sprig/v3 v3.3.0 + github.com/PuerkitoBio/goquery v1.11.0 + github.com/gohugoio/hugo v0.155.3 github.com/google/uuid v1.6.0 github.com/logrusorgru/aurora v2.0.3+incompatible - github.com/manifoldco/promptui v0.8.0 + github.com/manifoldco/promptui v0.9.0 github.com/onsi/ginkgo v1.16.4 - github.com/onsi/gomega v1.10.1 - github.com/otiai10/copy v1.2.0 - github.com/pkg/errors v0.9.1 + github.com/onsi/gomega v1.39.1 + github.com/otiai10/copy v1.14.1 github.com/scylladb/go-set v1.0.2 - github.com/sirupsen/logrus v1.8.1 - github.com/spf13/afero v1.8.2 - github.com/spf13/cobra v1.5.0 - github.com/spf13/viper v1.10.0 - golang.org/x/mod v0.17.0 - gopkg.in/yaml.v2 v2.4.0 + github.com/sirupsen/logrus v1.9.4 + github.com/spf13/afero v1.15.0 + github.com/spf13/cobra v1.10.2 + github.com/spf13/viper v1.21.0 + golang.org/x/mod v0.32.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute/metadata v0.3.0 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.28.1 // indirect - github.com/Azure/azure-pipeline-go v0.2.2 // indirect - github.com/Azure/azure-storage-blob-go v0.9.0 // indirect + cel.dev/expr v0.24.0 // indirect + cloud.google.com/go v0.121.6 // indirect + cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/storage v1.56.0 // indirect + dario.cat/mergo v1.0.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest/to v0.4.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 // indirect - github.com/BurntSushi/toml v0.3.1 // indirect - github.com/Masterminds/semver v1.5.0 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/alecthomas/chroma v0.9.2 // indirect - github.com/andybalholm/cascadia v1.2.0 // indirect - github.com/armon/go-radix v1.0.0 // indirect - github.com/aws/aws-sdk-go v1.40.8 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect + github.com/JohannesKaufmann/dom v0.2.0 // indirect + github.com/JohannesKaufmann/html-to-markdown/v2 v2.5.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.4.0 // indirect + github.com/alecthomas/chroma/v2 v2.23.1 // indirect + github.com/andybalholm/cascadia v1.3.3 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 // indirect + github.com/aws/aws-sdk-go-v2/config v1.31.17 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.18.21 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.20.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.13 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.59.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.13 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.89.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 // indirect + github.com/aws/smithy-go v1.24.0 // indirect + github.com/aymerick/douceur v0.2.0 // indirect + github.com/bep/clocks v0.5.0 // indirect github.com/bep/debounce v1.2.0 // indirect - github.com/bep/gitmap v1.1.2 // indirect - github.com/bep/godartsass v0.12.0 // indirect - github.com/bep/golibsass v1.0.0 // indirect - github.com/bep/gowebp v0.1.0 // indirect + github.com/bep/gitmap v1.9.0 // indirect + github.com/bep/goat v0.5.0 // indirect + github.com/bep/godartsass/v2 v2.5.0 // indirect + github.com/bep/golibsass v1.2.0 // indirect + github.com/bep/goportabletext v0.1.0 // indirect + github.com/bep/helpers v0.6.0 // indirect + github.com/bep/imagemeta v0.14.0 // indirect + github.com/bep/lazycache v0.8.1 // indirect + github.com/bep/logg v0.4.0 // indirect + github.com/bep/mclib v1.20400.20402 // indirect + github.com/bep/overlayfs v0.10.0 // indirect + github.com/bep/simplecobra v0.6.1 // indirect + github.com/bep/textandbinarywriter v0.0.0-20251212174530-cd9f0732f60f // indirect github.com/bep/tmc v0.5.1 // indirect + github.com/bits-and-blooms/bitset v1.24.4 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cli/safeexec v1.0.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 // indirect - github.com/disintegration/gift v1.2.1 // indirect - github.com/dlclark/regexp2 v1.4.0 // indirect - github.com/dustin/go-humanize v1.0.0 // indirect - github.com/evanw/esbuild v0.12.17 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/getkin/kin-openapi v0.131.0 // indirect - github.com/ghodss/yaml v1.0.0 // indirect + github.com/clbanning/mxj/v2 v2.7.0 // indirect + github.com/clipperhouse/displaywidth v0.6.2 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.3.0 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect + github.com/dlclark/regexp2 v1.11.5 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/evanw/esbuild v0.27.3 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/frankban/quicktest v1.14.6 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/getkin/kin-openapi v0.133.0 // indirect + github.com/go-jose/go-jose/v4 v4.1.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect - github.com/gobuffalo/flect v0.2.3 // indirect - github.com/gobuffalo/logger v1.0.6 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect + github.com/gobuffalo/flect v1.0.3 // indirect github.com/gobwas/glob v0.2.3 // indirect - github.com/gohugoio/go-i18n/v2 v2.1.3-0.20210430103248-4c28c89f8013 // indirect + github.com/goccy/go-yaml v1.19.2 // indirect + github.com/gohugoio/gift v0.2.0 // indirect + github.com/gohugoio/go-i18n/v2 v2.1.3-0.20251018145728-cfcc22d823c6 // indirect + github.com/gohugoio/go-radix v1.2.0 // indirect + github.com/gohugoio/hashstructure v0.6.0 // indirect + github.com/gohugoio/httpcache v0.8.0 // indirect + github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0 // indirect + github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1 // indirect github.com/gohugoio/locales v0.14.0 // indirect - github.com/gohugoio/localescompressed v0.14.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/wire v0.4.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go v2.0.2+incompatible // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect - github.com/gorilla/websocket v1.4.2 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/huandu/xstrings v1.3.2 // indirect - github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/gohugoio/localescompressed v1.0.1 // indirect + github.com/golang-jwt/jwt/v5 v5.2.3 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/wire v0.7.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/gorilla/css v1.0.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/hairyhenderson/go-codeowners v0.7.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/huandu/xstrings v1.5.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jdkato/prose v1.2.1 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a // indirect - github.com/karrick/godirwalk v1.17.0 // indirect - github.com/kyokomi/emoji/v2 v2.2.8 // indirect - github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a // indirect - github.com/magiconair/properties v1.8.5 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/kyokomi/emoji/v2 v2.2.13 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/markbates/errx v1.1.0 // indirect - github.com/markbates/oncer v1.0.0 // indirect - github.com/markbates/safe v1.0.1 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-ieproxy v0.0.1 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect - github.com/mattn/go-runewidth v0.0.9 // indirect - github.com/miekg/mmark v1.3.6 // indirect + github.com/makeworld-the-better-one/dither/v2 v2.4.0 // indirect + github.com/marekm4/color-extractor v1.2.1 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect + github.com/microcosm-cc/bluemonday v1.0.27 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/hashstructure v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/muesli/smartcrop v0.3.0 // indirect - github.com/niklasfasching/go-org v1.5.0 // indirect + github.com/niklasfasching/go-org v1.9.1 // indirect github.com/nxadm/tail v1.4.8 // indirect github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pelletier/go-toml/v2 v2.0.0-beta.3.0.20210727221244-fa0796069526 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.1.0 // indirect + github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 // indirect + github.com/olekukonko/tablewriter v1.1.3 // indirect + github.com/otiai10/mint v1.6.3 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd // indirect - github.com/sanity-io/litter v1.5.1 // indirect - github.com/spf13/cast v1.4.1 // indirect - github.com/spf13/fsync v0.9.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/subosito/gotenv v1.2.0 // indirect - github.com/tdewolff/minify/v2 v2.9.21 // indirect - github.com/tdewolff/parse/v2 v2.5.19 // indirect - github.com/yuin/goldmark v1.4.1 // indirect - github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 // indirect - go.opencensus.io v0.24.0 // indirect - gocloud.dev v0.20.0 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/image v0.18.0 // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.56.3 // indirect - google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/ini.v1 v1.66.2 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/shopspring/decimal v1.4.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/fsync v0.10.1 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tdewolff/minify/v2 v2.24.8 // indirect + github.com/tdewolff/parse/v2 v2.8.5 // indirect + github.com/tetratelabs/wazero v1.11.0 // indirect + github.com/woodsbury/decimal128 v1.3.0 // indirect + github.com/yuin/goldmark v1.7.16 // indirect + github.com/yuin/goldmark-emoji v1.0.6 // indirect + github.com/zeebo/errs v1.4.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.37.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.uber.org/automaxprocs v1.5.3 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + gocloud.dev v0.44.0 // indirect + golang.org/x/crypto v0.47.0 // indirect + golang.org/x/image v0.35.0 // indirect + golang.org/x/net v0.49.0 // indirect + golang.org/x/oauth2 v0.32.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.33.0 // indirect + golang.org/x/time v0.14.0 // indirect + golang.org/x/tools v0.41.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + google.golang.org/api v0.255.0 // indirect + google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect + google.golang.org/grpc v1.76.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect + howett.net/plist v1.0.0 // indirect + rsc.io/qr v0.2.0 // indirect + software.sslmate.com/src/go-pkcs12 v0.2.0 // indirect ) diff --git a/go.sum b/go.sum index 9c4c856c..50fbcb87 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ -bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= @@ -12,39 +12,37 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= 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.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= +cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= 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/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= 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/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= 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= @@ -53,227 +51,274 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= 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.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= -contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= -contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +cloud.google.com/go/storage v1.56.0 h1:iixmq2Fse2tqxMbWhLWC9HfBj1qdxqAmiK8/eqtsLxI= +cloud.google.com/go/storage v1.56.0/go.mod h1:Tpuj6t4NweCLzlNbw9Z9iwxEkrSem20AetIeH/shgVU= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= -github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= -github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= -github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= -github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= -github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= -github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= -github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= -github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= -github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= -github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1 h1:Wc1ml6QlJs2BHQ/9Bqu1jiyggbsSjramq2oUmp5WeIo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.1/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1 h1:B+blDbyVIG3WaikNxPnhPiJ1MThR03b3vKGtER95TP4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.1/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.0 h1:LR0kAX9ykz8G4YgLCaRDVJ3+n43R8MneB5dTy2konZo= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.0/go.mod h1:DWAciXemNf++PQJLeXUB4HHH5OpsAh12HZnu2wXE1jA= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 h1:lhZdRq7TIx0GJQvSyX2Si406vrYsov2FXGp/RnSEtcs= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1/go.mod h1:8cl44BDmi+effbARHMQjgOKA2AYvcohNm7KEt42mSV8= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest/to v0.4.1 h1:CxNHBqdzTr7rLtdrtb5CMjJcDut+WNGCVv7OmS5+lTc= +github.com/Azure/go-autorest/autorest/to v0.4.1/go.mod h1:EtaofgU4zmtvn1zT2ARsjRFdq9vXx0YWtmElwL+GZ9M= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= +github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69 h1:+tu3HOoMXB7RXEINRVIpxJCT+KdYiI7LAEAUrOw3dIU= github.com/BurntSushi/locker v0.0.0-20171006230638-a6e239ea1c69/go.mod h1:L1AbZdiDllfyYH5l5OkAaZtk7VkWe89bPJFmnDBNHxg= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0/go.mod h1:jUZ5LYlw40WMd07qxcQJD5M40aUxrfwqQX1g7zxYnrQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 h1:Ron4zCA/yk6U7WOBXhTJcDpsUBG9npumK6xw2auFltQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0/go.mod h1:cSgYe11MCNYunTnRXrKiR/tHc0eoKjICUuWpNZoVCOo= +github.com/JohannesKaufmann/dom v0.2.0 h1:1bragmEb19K8lHAqgFgqCpiPCFEZMTXzOIEjuxkUfLQ= +github.com/JohannesKaufmann/dom v0.2.0/go.mod h1:57iSUl5RKric4bUkgos4zu6Xt5LMHUnw3TF1l5CbGZo= +github.com/JohannesKaufmann/html-to-markdown/v2 v2.5.0 h1:mklaPbT4f/EiDr1Q+zPrEt9lgKAkVrIBtWf33d9GpVA= +github.com/JohannesKaufmann/html-to-markdown/v2 v2.5.0/go.mod h1:D56Cl9r8M5i3UwAchE+LlLc5hPN3kJtdZNVJn06lSHU= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/PuerkitoBio/goquery v1.7.1 h1:oE+T06D+1T7LNrn91B4aERsRIeCLJ/oPSa6xB9FPnz4= -github.com/PuerkitoBio/goquery v1.7.1/go.mod h1:XY0pP4kfraEmmV1O7Uf6XyjoslwsneBbgeDjLYuN8xY= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= -github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U= -github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= -github.com/alecthomas/chroma v0.7.2-0.20200305040604-4f3623dce67a/go.mod h1:fv5SzZPFJbwp2NXJWpFIX7DZS4HgV1K4ew4Pc2OZD9s= -github.com/alecthomas/chroma v0.8.2/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= -github.com/alecthomas/chroma v0.9.2 h1:yU1sE2+TZbLIQPMk30SolL2Hn53SR/Pv750f7qZ/XMs= -github.com/alecthomas/chroma v0.9.2/go.mod h1:eMuEnpA18XbG/WhOWtCzJHS7WqEtDAI+HxdwoW0nVSk= -github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= -github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= -github.com/alecthomas/kong v0.1.17-0.20190424132513-439c674f7ae0/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= -github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= -github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= -github.com/alecthomas/kong-hcl v0.1.8-0.20190615233001-b21fea9723c8/go.mod h1:MRgZdU3vrFd05IQ89AxUZ0aYdF39BYoNFa324SodPCA= -github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= -github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E= -github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= -github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE= -github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.40.8 h1:LBeBOKdgxaR1tknlENTBhcN8CjutpofbMJPtl/6Yug4= -github.com/aws/aws-sdk-go v1.40.8/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= +github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= +github.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw= +github.com/PuerkitoBio/goquery v1.11.0/go.mod h1:wQHgxUOU3JGuj3oD/QFfxUdlzW6xPHfqyHre6VMY4DQ= +github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= +github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.23.1 h1:nv2AVZdTyClGbVQkIzlDm/rnhk1E9bU9nXwmZ/Vk/iY= +github.com/alecthomas/chroma/v2 v2.23.1/go.mod h1:NqVhfBR0lte5Ouh3DcthuUCTUpDC9cxBOfyMbMQPs3o= +github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= +github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= +github.com/aws/aws-sdk-go-v2 v1.41.1 h1:ABlyEARCDLN034NhxlRUSZr4l71mh+T5KAeGh6cerhU= +github.com/aws/aws-sdk-go-v2 v1.41.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 h1:DHctwEM8P8iTXFxC/QK0MRjwEpWQeM9yzidCRjldUz0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3/go.mod h1:xdCzcZEtnSTKVDOmUZs4l/j3pSV6rpo1WXl5ugNsL8Y= +github.com/aws/aws-sdk-go-v2/config v1.31.17 h1:QFl8lL6RgakNK86vusim14P2k8BFSxjvUkcWLDjgz9Y= +github.com/aws/aws-sdk-go-v2/config v1.31.17/go.mod h1:V8P7ILjp/Uef/aX8TjGk6OHZN6IKPM5YW6S78QnRD5c= +github.com/aws/aws-sdk-go-v2/credentials v1.18.21 h1:56HGpsgnmD+2/KpG0ikvvR8+3v3COCwaF4r+oWwOeNA= +github.com/aws/aws-sdk-go-v2/credentials v1.18.21/go.mod h1:3YELwedmQbw7cXNaII2Wywd+YY58AmLPwX4LzARgmmA= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 h1:T1brd5dR3/fzNFAQch/iBKeX07/ffu/cLu+q+RuzEWk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13/go.mod h1:Peg/GBAQ6JDt+RoBf4meB1wylmAipb7Kg2ZFakZTlwk= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.20.3 h1:4GNV1lhyELGjMz5ILMRxDvxvOaeo3Ux9Z69S1EgVMMQ= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.20.3/go.mod h1:br7KA6edAAqDGUYJ+zVVPAyMrPhnN+zdt17yTUT6FPw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 h1:xOLELNKGp2vsiteLsvLPwxC+mYmO6OZ8PYgiuPJzF8U= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17/go.mod h1:5M5CI3D12dNOtH3/mk6minaRwI2/37ifCURZISxA/IQ= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 h1:WWLqlh79iO48yLkj1v3ISRNiv+3KdQoZ6JWyfcsyQik= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17/go.mod h1:EhG22vHRrvF8oXSTYStZhJc1aUgKtnJe+aOiFEV90cM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.13 h1:eg/WYAa12vqTphzIdWMzqYRVKKnCboVPRlvaybNCqPA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.13/go.mod h1:/FDdxWhz1486obGrKKC1HONd7krpk38LBt+dutLcN9k= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.59.0 h1:evSZnlPGyDgStAmjLK9LcSoLvEk3oSUyJz4KIFfzJEs= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.59.0/go.mod h1:9Hd/cqshF4zl13KGLkWtRfITbvKR6m6FZHwhL2BYDSY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.4 h1:NvMjwvv8hpGUILarKw7Z4Q0w1H9anXKsesMxtw++MA4= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.4/go.mod h1:455WPHSwaGj2waRSpQp7TsnpOnBfw8iDfPfbwl7KPJE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 h1:kDqdFvMY4AtKoACfzIGD8A0+hbT41KTKF//gq7jITfM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13/go.mod h1:lmKuogqSU3HzQCwZ9ZtcqOc5XGMqtDK7OIc2+DxiUEg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.13 h1:zhBJXdhWIFZ1acfDYIhu4+LCzdUS2Vbcum7D01dXlHQ= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.13/go.mod h1:JaaOeCE368qn2Hzi3sEzY6FgAZVCIYcC2nwbro2QCh8= +github.com/aws/aws-sdk-go-v2/service/s3 v1.89.2 h1:xgBWsgaeUESl8A8k80p6yBdexMWDVeiDmJ/pkjohJ7c= +github.com/aws/aws-sdk-go-v2/service/s3 v1.89.2/go.mod h1:+wArOOrcHUevqdto9k1tKOF5++YTe9JEcPSc9Tx2ZSw= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 h1:0JPwLz1J+5lEOfy/g0SURC9cxhbQ1lIMHMa+AHZSzz0= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.1/go.mod h1:fKvyjJcz63iL/ftA6RaM8sRCtN4r4zl4tjL3qw5ec7k= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 h1:OWs0/j2UYR5LOGi88sD5/lhN6TDLG6SfA7CqsQO9zF0= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5/go.mod h1:klO+ejMvYsB4QATfEOIXk8WAEwN4N0aBfJpvC+5SZBo= +github.com/aws/aws-sdk-go-v2/service/sts v1.39.1 h1:mLlUgHn02ue8whiR4BmxxGJLR2gwU6s6ZzJ5wDamBUs= +github.com/aws/aws-sdk-go-v2/service/sts v1.39.1/go.mod h1:E19xDjpzPZC7LS2knI9E6BaRFDK43Eul7vd6rSq2HWk= +github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk= +github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/bep/clocks v0.5.0 h1:hhvKVGLPQWRVsBP/UB7ErrHYIO42gINVbvqxvYTPVps= +github.com/bep/clocks v0.5.0/go.mod h1:SUq3q+OOq41y2lRQqH5fsOoxN8GbxSiT6jvoVVLCVhU= github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo= github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= -github.com/bep/gitmap v1.1.2 h1:zk04w1qc1COTZPPYWDQHvns3y1afOsdRfraFQ3qI840= -github.com/bep/gitmap v1.1.2/go.mod h1:g9VRETxFUXNWzMiuxOwcudo6DfZkW9jOsOW0Ft4kYaY= -github.com/bep/godartsass v0.12.0 h1:VvGLA4XpXUjKvp53SI05YFLhRFJ78G+Ybnlaz6Oul7E= -github.com/bep/godartsass v0.12.0/go.mod h1:nXQlHHk4H1ghUk6n/JkYKG5RD43yJfcfp5aHRqT/pc4= -github.com/bep/golibsass v1.0.0 h1:gNguBMSDi5yZEZzVZP70YpuFQE3qogJIGUlrVILTmOw= -github.com/bep/golibsass v1.0.0/go.mod h1:DL87K8Un/+pWUS75ggYv41bliGiolxzDKWJAq3eJ1MA= -github.com/bep/gowebp v0.1.0 h1:4/iQpfnxHyXs3x/aTxMMdOpLEQQhFmF6G7EieWPTQyo= -github.com/bep/gowebp v0.1.0/go.mod h1:ZhFodwdiFp8ehGJpF4LdPl6unxZm9lLFjxD3z2h2AgI= +github.com/bep/gitmap v1.9.0 h1:2pyb1ex+cdwF6c4tsrhEgEKfyNfxE34d5K+s2sa9byc= +github.com/bep/gitmap v1.9.0/go.mod h1:Juq6e1qqCRvc1W7nzgadPGI9IGV13ZncEebg5atj4Vo= +github.com/bep/goat v0.5.0 h1:S8jLXHCVy/EHIoCY+btKkmcxcXFd34a0Q63/0D4TKeA= +github.com/bep/goat v0.5.0/go.mod h1:Md9x7gRxiWKs85yHlVTvHQw9rg86Bm+Y4SuYE8CTH7c= +github.com/bep/godartsass/v2 v2.5.0 h1:tKRvwVdyjCIr48qgtLa4gHEdtRkPF8H1OeEhJAEv7xg= +github.com/bep/godartsass/v2 v2.5.0/go.mod h1:rjsi1YSXAl/UbsGL85RLDEjRKdIKUlMQHr6ChUNYOFU= +github.com/bep/golibsass v1.2.0 h1:nyZUkKP/0psr8nT6GR2cnmt99xS93Ji82ZD9AgOK6VI= +github.com/bep/golibsass v1.2.0/go.mod h1:DL87K8Un/+pWUS75ggYv41bliGiolxzDKWJAq3eJ1MA= +github.com/bep/goportabletext v0.1.0 h1:8dqym2So1cEqVZiBa4ZnMM1R9l/DnC1h4ONg4J5kujw= +github.com/bep/goportabletext v0.1.0/go.mod h1:6lzSTsSue75bbcyvVc0zqd1CdApuT+xkZQ6Re5DzZFg= +github.com/bep/helpers v0.6.0 h1:qtqMCK8XPFNM9hp5Ztu9piPjxNNkk8PIyUVjg6v8Bsw= +github.com/bep/helpers v0.6.0/go.mod h1:IOZlgx5PM/R/2wgyCatfsgg5qQ6rNZJNDpWGXqDR044= +github.com/bep/imagemeta v0.14.0 h1:xmeB/XPmhrXJmSxTiE7KT4C56xfcSrcaGjVsNe+t6Ro= +github.com/bep/imagemeta v0.14.0/go.mod h1:3psQjuZwn53rPCa86ai0p4KKnO+QArpuWLRdi5/30q8= +github.com/bep/lazycache v0.8.1 h1:ko6ASLjkPxyV5DMWoNNZ8B2M0weyjqXX8IZkjBoBtvg= +github.com/bep/lazycache v0.8.1/go.mod h1:pbEiFsZoq7cLXvrTll0AHOPEurB1aGGxx4jKjOtlx9w= +github.com/bep/logg v0.4.0 h1:luAo5mO4ZkhA5M1iDVDqDqnBBnlHjmtZF6VAyTp+nCQ= +github.com/bep/logg v0.4.0/go.mod h1:Ccp9yP3wbR1mm++Kpxet91hAZBEQgmWgFgnXX3GkIV0= +github.com/bep/mclib v1.20400.20402 h1:olpCE2WSPpOAbFE1R4hnftSEmQ34+xzy2HRzd0m69rA= +github.com/bep/mclib v1.20400.20402/go.mod h1:pkrk9Kyfqg34Uj6XlDq9tdEFJBiL1FvCoCgVKRzw1EY= +github.com/bep/overlayfs v0.10.0 h1:wS3eQ6bRsLX+4AAmwGjvoFSAQoeheamxofFiJ2SthSE= +github.com/bep/overlayfs v0.10.0/go.mod h1:ouu4nu6fFJaL0sPzNICzxYsBeWwrjiTdFZdK4lI3tro= +github.com/bep/simplecobra v0.6.1 h1:ORBAC5CSar99/NPZ5fCthCx/uvlm7ry58wwDsZ23a20= +github.com/bep/simplecobra v0.6.1/go.mod h1:hmtjyHv6xwD637ScIRP++0NKkR5szrHuMw5BxMUH66s= +github.com/bep/textandbinarywriter v0.0.0-20251212174530-cd9f0732f60f h1:NzhMpf5eis+w8bTbT1jqVz+gcMEBhcIPA/KRbYvX8+Y= +github.com/bep/textandbinarywriter v0.0.0-20251212174530-cd9f0732f60f/go.mod h1:vTWM9sqhanOWdo2B2NHwDQPuPmD/nCdMKDFPYxd4VKU= github.com/bep/tmc v0.5.1 h1:CsQnSC6MsomH64gw0cT5f+EwQDcvZz4AazKunFwTpuI= github.com/bep/tmc v0.5.1/go.mod h1:tGYHN8fS85aJPhDLgXETVKp+PR382OvFi2+q2GkGsq0= github.com/bep/workers v1.0.0 h1:U+H8YmEaBCEaFZBst7GcRVEoqeRC9dzH2dWOwGmOchg= github.com/bep/workers v1.0.0/go.mod h1:7kIESOB86HfR2379pwoMWNy8B50D7r99fRLUyPSNyCs= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= +github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI= -github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo= +github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= 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/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -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/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= -github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= -github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +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/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= -github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= -github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= -github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +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/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= +github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 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.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanw/esbuild v0.12.17 h1:9B8cjTu7ZIvS9BQAowXxxe6WMwWvC9BbNq60N6kMrQI= -github.com/evanw/esbuild v0.12.17/go.mod h1:y2AFBAGVelPqPodpdtxWWqe6n2jYf5FrsJbligmRmuw= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/evanw/esbuild v0.27.3 h1:dH/to9tBKybig6hl25hg4SKIWP7U8COdJKbGEwnUkmU= +github.com/evanw/esbuild v0.27.3/go.mod h1:D2vIQZqV/vIf/VRHtViaUtViZmG7o+kKmlBfVQuRi48= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= -github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s= -github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/getkin/kin-openapi v0.68.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.131.0 h1:NO2UeHnFKRYhZ8wg6Nyh5Cq7dHk4suQQr72a4pMrDxE= -github.com/getkin/kin-openapi v0.131.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ= +github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= +github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/gobuffalo/flect v0.2.3 h1:f/ZukRnSNA/DUpSNDadko7Qc0PhGvsew35p/2tu+CRY= -github.com/gobuffalo/flect v0.2.3/go.mod h1:vmkQwuZYhN5Pc4ljYQZzP+1sq+NEkK+lh20jmEmX3jc= -github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= -github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= -github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= -github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY= -github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= -github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4= +github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gohugoio/go-i18n/v2 v2.1.3-0.20210430103248-4c28c89f8013 h1:Nj29Qbkt0bZ/bJl8eccfxQp3NlU/0IW1v9eyYtQ53XQ= -github.com/gohugoio/go-i18n/v2 v2.1.3-0.20210430103248-4c28c89f8013/go.mod h1:3Ltoo9Banwq0gOtcOwxuHG6omk+AwsQPADyw2vQYOJQ= -github.com/gohugoio/hugo v0.87.0 h1:kNpXNw7qzczymlHpfpUu0n1y9eD/S2NkphTabu2GwIU= -github.com/gohugoio/hugo v0.87.0/go.mod h1:rRyv5M8MWiSZ/c0n05+s2yEJLQ8iAIx11Qmt5jePEg0= +github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= +github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/gohugoio/gift v0.2.0 h1:vA31pP0rTVmBxBrhpY3WEt+4zM4g+1sDqYeemwsYeqc= +github.com/gohugoio/gift v0.2.0/go.mod h1:1Mrm5CjF33KpD749Dwj+UAjWZ3LC6cBXGuTMa5XwoP4= +github.com/gohugoio/go-i18n/v2 v2.1.3-0.20251018145728-cfcc22d823c6 h1:pxlAea9eRwuAnt/zKbGqlFO2ZszpIe24YpOVLf+N+4I= +github.com/gohugoio/go-i18n/v2 v2.1.3-0.20251018145728-cfcc22d823c6/go.mod h1:m5hu1im5Qc7LDycVLvee6MPobJiRLBYHklypFJR0/aE= +github.com/gohugoio/go-radix v1.2.0 h1:D5GTk8jIoeXirBSc2P4E4NdHKDrenk9k9N0ctU5Yrhg= +github.com/gohugoio/go-radix v1.2.0/go.mod h1:k6vDa0ebpbpgtzSj9lPGJcA4AZwJ9xUNObUy2vczPFM= +github.com/gohugoio/hashstructure v0.6.0 h1:7wMB/2CfXoThFYhdWRGv3u3rUM761Cq29CxUW+NltUg= +github.com/gohugoio/hashstructure v0.6.0/go.mod h1:lapVLk9XidheHG1IQ4ZSbyYrXcaILU1ZEP/+vno5rBQ= +github.com/gohugoio/httpcache v0.8.0 h1:hNdsmGSELztetYCsPVgjA960zSa4dfEqqF/SficorCU= +github.com/gohugoio/httpcache v0.8.0/go.mod h1:fMlPrdY/vVJhAriLZnrF5QpN3BNAcoBClgAyQd+lGFI= +github.com/gohugoio/hugo v0.155.3 h1:gZiMNSbijSFlfJpg+luiIfj7kp74XE4+hxMEgYKQ6Ls= +github.com/gohugoio/hugo v0.155.3/go.mod h1:toU7t3jAqWMKC5AoI43YGsLRMmyG6RT6MFYDrXvIfZI= +github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0 h1:dco+7YiOryRoPOMXwwaf+kktZSCtlFtreNdiJbETvYE= +github.com/gohugoio/hugo-goldmark-extensions/extras v0.5.0/go.mod h1:CRrxQTKeM3imw+UoS4EHKyrqB7Zp6sAJiqHit+aMGTE= +github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1 h1:nUzXfRTszLliZuN0JTKeunXTRaiFX6ksaWP0puLLYAY= +github.com/gohugoio/hugo-goldmark-extensions/passthrough v0.3.1/go.mod h1:Wy8ThAA8p2/w1DY05vEzq6EIeI2mzDjvHsu7ULBVwog= github.com/gohugoio/locales v0.14.0 h1:Q0gpsZwfv7ATHMbcTNepFd59H7GoykzWJIxi113XGDc= github.com/gohugoio/locales v0.14.0/go.mod h1:ip8cCAv/cnmVLzzXtiTpPwgJ4xhKZranqNqtoIu0b/4= -github.com/gohugoio/localescompressed v0.14.0 h1:gP4zzgfF3NFr2rNzwxReD/tDXz98pAGVmrPy3ZCLRDc= -github.com/gohugoio/localescompressed v0.14.0/go.mod h1:jBF6q8D7a0vaEmcWPNcAjUZLJaIVNiwvM3WlmTvooB0= -github.com/gohugoio/testmodBuilder/mods v0.0.0-20190520184928-c56af20f2e95 h1:sgew0XCnZwnzpWxTt3V8LLiCO7OQi3C6dycaE67wfkU= -github.com/gohugoio/testmodBuilder/mods v0.0.0-20190520184928-c56af20f2e95/go.mod h1:bOlVlCa1/RajcHpXkrUXPSHB/Re1UnlXxD1Qp8SKOd8= +github.com/gohugoio/localescompressed v1.0.1 h1:KTYMi8fCWYLswFyJAeOtuk/EkXR/KPTHHNN9OS+RTxo= +github.com/gohugoio/localescompressed v1.0.1/go.mod h1:jBF6q8D7a0vaEmcWPNcAjUZLJaIVNiwvM3WlmTvooB0= +github.com/golang-jwt/jwt/v5 v5.2.3 h1:kkGXqQOBSDDWRhWNXTFpqGSCMyh/PLnqUvMGJPDJDs0= +github.com/golang-jwt/jwt/v5 v5.2.3/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= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -281,8 +326,6 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -297,12 +340,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -313,119 +352,77 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= -github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= -github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= -github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-replayers/grpcreplay v1.3.0 h1:1Keyy0m1sIpqstQmgz307zhiJ1pV4uIlFds5weTmxbo= +github.com/google/go-replayers/grpcreplay v1.3.0/go.mod h1:v6NgKtkijC0d3e3RW8il6Sy5sqRVUwoQa4mHOGEy8DI= +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/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 v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -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/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= -github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= -github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4= +github.com/google/wire v0.7.0/go.mod h1:n6YbUQD9cPKTnHXEBN2DXlOp/mVADhVErcMFb0v3J18= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= 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.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= +github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/csrf v1.6.0/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAkHEGI= -github.com/gorilla/handlers v1.4.1/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= +github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hairyhenderson/go-codeowners v0.7.0 h1:s0W4wF8bdsBEjTWzwzSlsatSthWtTAF2xLgo4a4RwAo= +github.com/hairyhenderson/go-codeowners v0.7.0/go.mod h1:wUlNgQ3QjqC4z8DnM5nnCYVq/icpqXJyJOukKx5U8/Q= 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/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -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/jdkato/prose v1.2.1 h1:Fp3UnJmLVISmlc57BgKUzdjr0lOtjqTZicL3PaYy6cU= github.com/jdkato/prose v1.2.1/go.mod h1:AiRHgVagnEx2JbQRQowVBKjG0bcs/vtkGCH1dYAL1rA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/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= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a h1:FaWFmfWdAUKbSCtOU2QjDaorUexogfaMgbipgYATUMU= -github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= -github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= -github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= +github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -438,69 +435,32 @@ 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/kyokomi/emoji/v2 v2.2.8 h1:jcofPxjHWEkJtkIbcLHvZhxKgCPl6C7MyjTrD4KDqUE= -github.com/kyokomi/emoji/v2 v2.2.8/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/kyokomi/emoji/v2 v2.2.13 h1:GhTfQa67venUUvmleTNFnb+bi7S3aocF7ZCXU9fSO7U= +github.com/kyokomi/emoji/v2 v2.2.13/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a h1:weJVJJRzAJBFRlAiJQROKQs8oC9vOxvm4rZmBBk0ONw= -github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/magefile/mage v1.11.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/manifoldco/promptui v0.8.0 h1:R95mMF+McvXZQ7j1g8ucVZE1gLP3Sv6j9vlF9kyRqQo= -github.com/manifoldco/promptui v0.8.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= -github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= -github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc= -github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= -github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= -github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= -github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/mmark v1.3.6 h1:t47x5vThdwgLJzofNsbsAl7gmIiJ7kbDQN5BxwBmwvY= -github.com/miekg/mmark v1.3.6/go.mod h1:w7r9mkTvpS55jlfyn22qJ618itLryxXBhA7Jp3FIlkw= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/makeworld-the-better-one/dither/v2 v2.4.0 h1:Az/dYXiTcwcRSe59Hzw4RI1rSnAZns+1msaCXetrMFE= +github.com/makeworld-the-better-one/dither/v2 v2.4.0/go.mod h1:VBtN8DXO7SNtyGmLiGA7IsFeKrBkQPze1/iAeM95arc= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/marekm4/color-extractor v1.2.1 h1:3Zb2tQsn6bITZ8MBVhc33Qn1k5/SEuZ18mrXGUqIwn0= +github.com/marekm4/color-extractor v1.2.1/go.mod h1:90VjmiHI6M8ez9eYUaXLdcKnS+BAOp7w+NpwBdkJmpA= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= 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= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= -github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE= +github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/montanaflynn/stats v0.6.3/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= @@ -509,9 +469,8 @@ github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78Rwc github.com/neurosnap/sentences v1.0.6/go.mod h1:pg1IapvYpWCJJm/Etxeh0+gtMf1rI1STY9S7eUCPbDc= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/niklasfasching/go-org v1.5.0 h1:V8IwoSPm/d61bceyWFxxnQLtlvNT+CjiYIhtZLdnMF0= -github.com/niklasfasching/go-org v1.5.0/go.mod h1:sSb8ylwnAG+h8MGFDB3R1D5bxf8wA08REfhjShg3kjA= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= +github.com/niklasfasching/go-org v1.9.1 h1:/3s4uTPOF06pImGa2Yvlp24yKXZoTYM+nsIlMzfpg/0= +github.com/niklasfasching/go-org v1.9.1/go.mod h1:ZAGFFkWvUQcpazmi/8nHqwvARpr1xpb+Es67oUGX/48= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -519,158 +478,176 @@ github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//J github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0 h1:jrYnow5+hy3WRDCBypUFvVKNSPPCdqgSXIE9eJDD8LM= +github.com/olekukonko/ll v0.1.4-0.20260115111900-9e59c2286df0/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= +github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.28.0 h1:Rrf+lVLmtlBIKv6KrIGJCjyY8N36vDVcutbGJkyqjJc= +github.com/onsi/ginkgo/v2 v2.28.0/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.3.0.20210727221244-fa0796069526 h1:o8tGfr0zuKDD+3qIdzD1pK78melGepDQMb55F4Q6qlo= -github.com/pelletier/go-toml/v2 v2.0.0-beta.3.0.20210727221244-fa0796069526/go.mod h1:aNseLYu/uKskg0zpr/kbr2z8yGuWtotWf/0BpGIAL2Y= +github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28= +github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg= +github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= +github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= +github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= +github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +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_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= +github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 h1:tlXG832s5pa9x9Gs3Rp2rTvEqjiDEuETUOSfBEiTcns= -github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= 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/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU= -github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/scylladb/go-set v1.0.2 h1:SkvlMCKhP0wyyct6j+0IHJkBkSZL+TDzZ4E7f7BCcRE= github.com/scylladb/go-set v1.0.2/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sebdah/goldie/v2 v2.8.0 h1:dZb9wR8q5++oplmEiJT+U/5KyotVD+HNGCAc5gNr8rc= +github.com/sebdah/goldie/v2 v2.8.0/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= +github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shogo82148/go-shuffle v0.0.0-20180218125048-27e6095f230d/go.mod h1:2htx6lmL0NGLHlO8ZCf+lQBGBHIbEujyywxJArf+2Yc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/fsync v0.9.0 h1:f9CEt3DOB2mnHxZaftmEOFWjABEvKM/xpf3cUwJrGOY= -github.com/spf13/fsync v0.9.0/go.mod h1:fNtJEfG3HiltN3y4cPOz6MLjos9+2pIEqLIgszqhp/0= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -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.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/spf13/viper v1.10.0 h1:mXH0UwHS4D2HwWZa75im4xIQynLfblmWV7qcWpfv0yk= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= +github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/fsync v0.10.1 h1:JRnB7G72b+gIBaBcpn5ibJSd7ww1iEahXSX2B8G6dSE= +github.com/spf13/fsync v0.10.1/go.mod h1:y+B41vYq5i6Boa3Z+BVoPbDeOvxVkNU5OBXhoT8i4TQ= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1-0.20210427113832-6241f9ab9942/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tdewolff/minify/v2 v2.9.21 h1:nO4s1PEMy7aRjlIlbr3Jgr+bJby8QYuifa2Vs2f9lh4= -github.com/tdewolff/minify/v2 v2.9.21/go.mod h1:PoDBts2L7sCwUT28vTAlozGeD6qxjrrihtin4bR/RMM= -github.com/tdewolff/parse/v2 v2.5.19 h1:Kjaj3KQOx/4elIxlBSglus4E2oMfdROphvbq2b+OBZ0= -github.com/tdewolff/parse/v2 v2.5.19/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= -github.com/tdewolff/test v1.0.6 h1:76mzYJQ83Op284kMT+63iCNCI7NEERsIN8dLM+RiKr4= -github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tdewolff/minify/v2 v2.24.8 h1:58/VjsbevI4d5FGV0ZSuBrHMSSkH4MCH0sIz/eKIauE= +github.com/tdewolff/minify/v2 v2.24.8/go.mod h1:0Ukj0CRpo/sW/nd8uZ4ccXaV1rEVIWA3dj8U7+Shhfw= +github.com/tdewolff/parse/v2 v2.8.5 h1:ZmBiA/8Do5Rpk7bDye0jbbDUpXXbCdc3iah4VeUvwYU= +github.com/tdewolff/parse/v2 v2.8.5/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= +github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= +github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= +github.com/tetratelabs/wazero v1.11.0 h1:+gKemEuKCTevU4d7ZTzlsvgd1uaToIDtlQlmNbwqYhA= +github.com/tetratelabs/wazero v1.11.0/go.mod h1:eV28rsN8Q+xwjogd7f4/Pp4xFxO7uOGbLcD/LzB1wiU= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/yuin/goldmark v1.1.22/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0= +github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1 h1:/vn0k+RBvwlxEmP5E7SZMqNxPhfMVFEJiykr15/0XKM= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691 h1:VWSxtAiQNh3zgHJpdpkpVYjTPqRE3P6UZCOPa1nRDio= -github.com/yuin/goldmark-highlighting v0.0.0-20200307114337-60d527fdb691/go.mod h1:YLF3kDffRfUH/bTxOxHhV6lxwIB3Vfj91rEwNMS9MXo= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= +github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/yuin/goldmark-emoji v1.0.6 h1:QWfF2FYaXwL74tfGOW5izeiZepUDroDJfWubQI9HTHs= +github.com/yuin/goldmark-emoji v1.0.6/go.mod h1:ukxJDKFpdFb5x0a5HqbdlcKtebh086iJpI31LTKmWuA= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= 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= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 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.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -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/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -gocloud.dev v0.20.0 h1:mbEKMfnyPV7W1Rj35R1xXfjszs9dXkwSOq2KoFr25g8= -gocloud.dev v0.20.0/go.mod h1:+Y/RpSXrJthIOM8uFNzWp6MRu9pFPNFEEZrQMxpkfIc= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.37.0 h1:B+WbN9RPsvobe6q4vP6KgM8/9plR/HNjgGBrfcOlweA= +go.opentelemetry.io/contrib/detectors/gcp v1.37.0/go.mod h1:K5zQ3TT7p2ru9Qkzk0bKtCql0RGkPj9pRjpXgZJZ+rU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 h1:rbRJ8BBoVMsQShESYZ0FkvcITu8X8QNwJogcLUmDNNw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0/go.mod h1:ru6KHrNtNHxM4nD/vd6QrLVWgKhxPYgblq4VAtNawTQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0 h1:6VjV6Et+1Hd2iLZEPtdV7vie80Yyqf7oikJLjQ/myi0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.37.0/go.mod h1:u8hcp8ji5gaM/RfcOo8z9NMnf1pVLfVY7lBY2VOGuUU= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= +go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +gocloud.dev v0.44.0 h1:iVyMAqFl2r6xUy7M4mfqwlN+21UpJoEtgHEcfiLMUXs= +gocloud.dev v0.44.0/go.mod h1:ZmjROXGdC/eKZLF1N+RujDlFRx3D+4Av2thREKDMVxY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= 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= @@ -683,9 +660,8 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= 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/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= -golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= +golang.org/x/image v0.35.0 h1:LKjiHdgMtO8z7Fh18nGY6KDcoEtVfsgLDPeLyguqb7I= +golang.org/x/image v0.35.0/go.mod h1:MwPLTVgvxSASsxdLzKrl8BRFuyqMyGhLwmC+TO1Sybk= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -697,7 +673,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -709,14 +684,16 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +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/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -724,12 +701,9 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -742,27 +716,27 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +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.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= 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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -770,13 +744,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.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= +golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 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= @@ -788,14 +757,17 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -807,28 +779,21 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -837,50 +802,61 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +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.1.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.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 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.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= 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= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= 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.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= 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= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -890,7 +866,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -908,17 +883,11 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= @@ -928,23 +897,24 @@ golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +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/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= 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-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.5.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= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -957,37 +927,26 @@ google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/ google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= 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.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.255.0 h1:OaF+IbRwOottVCYV2wZan7KUq7UeNUQn1BcPc4K7lE4= +google.golang.org/api v0.255.0/go.mod h1:d1/EtvCLdtiWEV4rAEHDHGh2bCnqsWhw+M8y2ECN4a8= 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/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= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1003,16 +962,11 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 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-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1023,24 +977,15 @@ google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 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-20210222152913-aa3ee6e6a81c/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-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= +google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79/go.mod h1:kTmlBHMPqR5uCZPBvwa2B18mvubkjyY3CRLI0c6fj0s= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -1052,19 +997,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.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= -google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= 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= @@ -1075,33 +1012,24 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= 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= 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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/neurosnap/sentences.v1 v1.0.6/go.mod h1:YlK+SN+fLQZj+kY3r8DkGDhDr91+S3JmTb5LSxFRQo0= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.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= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1111,6 +1039,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= +howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= +rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +software.sslmate.com/src/go-pkcs12 v0.2.0 h1:nlFkj7bTysH6VkC4fGphtjXRbezREPgrHuJG20hBGPE= +software.sslmate.com/src/go-pkcs12 v0.2.0/go.mod h1:23rNcYsMabIc1otwLpTkCCPwUq6kQsTyowttG/as0kQ= diff --git a/main.go b/main.go index 480644d5..63f1cbfb 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,10 @@ package main import ( "github.com/SPANDigital/presidium-hugo/cmd" + "github.com/SPANDigital/presidium-hugo/pkg/domain/service/template" ) func main() { + template.SetFS(templatesFS) cmd.Execute() } diff --git a/pkg/configtranslation/configfile.go b/pkg/configtranslation/configfile.go index 8295a0b6..ef1418e7 100644 --- a/pkg/configtranslation/configfile.go +++ b/pkg/configtranslation/configfile.go @@ -8,7 +8,7 @@ import ( "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" "github.com/SPANDigital/presidium-hugo/pkg/log" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) type JekyllShow struct { diff --git a/pkg/domain/service/conversion/conversion.go b/pkg/domain/service/conversion/conversion.go index 5ce77012..40fbb9f9 100644 --- a/pkg/domain/service/conversion/conversion.go +++ b/pkg/domain/service/conversion/conversion.go @@ -286,7 +286,7 @@ func (c *Converter) prepareStaging() { } err := c.fs.CopyWithOptions(c.sourceRepoContentDir, c.stagingContentDir, copy.Options{ - Skip: func(src string) (bool, error) { + Skip: func(srcinfo os.FileInfo, src, dest string) (bool, error) { _, file := filepath.Split(src) if strings.HasPrefix(file, ".") { return true, nil diff --git a/pkg/domain/service/conversion/fileactions/fileactions.go b/pkg/domain/service/conversion/fileactions/fileactions.go index 3ec46b25..b2980ab7 100644 --- a/pkg/domain/service/conversion/fileactions/fileactions.go +++ b/pkg/domain/service/conversion/fileactions/fileactions.go @@ -8,7 +8,7 @@ import ( "github.com/SPANDigital/presidium-hugo/pkg/filesystem" "github.com/SPANDigital/presidium-hugo/pkg/log" "github.com/SPANDigital/presidium-hugo/pkg/utils" - "github.com/pkg/errors" + "errors" "github.com/spf13/viper" "io/fs" "os" @@ -93,7 +93,7 @@ func CheckForDirIndex(stagingDir, contentPath string) error { func AddFrontMatter(stagingDir, contentPath string) error { pm, err := buildWeightMap(contentPath) if err != nil { - return errors.Wrap(err, "path map") + return fmt.Errorf("path map: %w", err) } dirUrls = map[string]string{} @@ -294,7 +294,7 @@ func getDirectorySlug(path string) (string, error) { } if len(md.FrontMatter.Title) == 0 { - return "", errors.Errorf("path has no title: %s", path) + return "", fmt.Errorf("path has no title: %s", path) } return utils.TitleToSlug(md.FrontMatter.Title), nil diff --git a/pkg/domain/service/conversion/markdown/frontmatter.go b/pkg/domain/service/conversion/markdown/frontmatter.go index e164985a..aed203b1 100644 --- a/pkg/domain/service/conversion/markdown/frontmatter.go +++ b/pkg/domain/service/conversion/markdown/frontmatter.go @@ -2,7 +2,7 @@ package markdown import ( "fmt" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" "io" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" diff --git a/pkg/domain/service/conversion/markdown/markdown_test.go b/pkg/domain/service/conversion/markdown/markdown_test.go index eacc853f..f51447ea 100644 --- a/pkg/domain/service/conversion/markdown/markdown_test.go +++ b/pkg/domain/service/conversion/markdown/markdown_test.go @@ -2,7 +2,7 @@ package markdown import ( "fmt" - "github.com/Masterminds/goutils" + "math/rand/v2" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" . "github.com/onsi/ginkgo" @@ -159,8 +159,7 @@ func mustHaveDir(path string) { } func mustHaveMarkdownInputFile(dir string, content string) string { - fileId, fileIdErr := goutils.RandomAlphaNumeric(4) - Expect(fileIdErr).ShouldNot(HaveOccurred()) + fileId := fmt.Sprintf("%04d", rand.IntN(10000)) mustHaveDir(dir) name := fmt.Sprintf("contentOf-%s.md", fileId) path := filepath.Join(dir, name) diff --git a/pkg/domain/service/conversion/markdown/operations.go b/pkg/domain/service/conversion/markdown/operations.go index c3bce7ba..baea471c 100644 --- a/pkg/domain/service/conversion/markdown/operations.go +++ b/pkg/domain/service/conversion/markdown/operations.go @@ -9,9 +9,10 @@ import ( "regexp" "strings" + "net/url" + "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/html" - "github.com/gohugoio/hugo/common/paths" "github.com/spf13/viper" ) @@ -152,11 +153,17 @@ func fixFigureCaptions(path string) error { }) } +// isAbsURL returns true if the given string is an absolute URL. +func isAbsURL(in string) bool { + u, err := url.Parse(in) + return err == nil && u.IsAbs() +} + // shortcodes in strings are not supported atm // https://github.com/gohugoio/hugo/issues/6703 func parseSource(path string, dir string, filename string, rawSource bool) string { src := dir + filename - if paths.IsAbsURL(src) { + if isAbsURL(src) { return src } if imgIsInSameDir(path, filename) { diff --git a/pkg/domain/service/conversion/markdown/parse.go b/pkg/domain/service/conversion/markdown/parse.go index 21a67cb2..f2472356 100644 --- a/pkg/domain/service/conversion/markdown/parse.go +++ b/pkg/domain/service/conversion/markdown/parse.go @@ -2,7 +2,7 @@ package markdown import ( "github.com/SPANDigital/presidium-hugo/pkg/filesystem" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) type Markdown struct { diff --git a/pkg/domain/service/generator/generaror_test.go b/pkg/domain/service/generator/generaror_test.go index 956a12e1..385b567c 100644 --- a/pkg/domain/service/generator/generaror_test.go +++ b/pkg/domain/service/generator/generaror_test.go @@ -8,7 +8,7 @@ import ( "strings" "testing" - "github.com/Masterminds/goutils" + "math/rand/v2" model "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" . "github.com/onsi/ginkgo" @@ -67,7 +67,7 @@ var _ = Describe("Site generation behaviour:", func() { }) It("should overwrite the existing site if so configured.", func() { - pathId, _ := goutils.RandomNumeric(6) + pathId := fmt.Sprintf("%06d", rand.IntN(1000000)) up := func(s string) string { return strings.Replace(s, "*", pathId, 1) } // making a unique path here removablePats := mustMakeTree("will be removed", []string{ up("content-*/introduction/_index.md"), diff --git a/pkg/domain/service/template/template.go b/pkg/domain/service/template/template.go index 8480a245..721c8969 100644 --- a/pkg/domain/service/template/template.go +++ b/pkg/domain/service/template/template.go @@ -2,53 +2,101 @@ package template import ( "bytes" - "github.com/Masterminds/sprig" - "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" - "github.com/SPANDigital/presidium-hugo/pkg/filesystem" - "github.com/gobuffalo/packd" - "github.com/gobuffalo/packr/v2" + "io/fs" "os" "path" "path/filepath" "strings" "text/template" + + "github.com/Masterminds/sprig/v3" + "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" + "github.com/SPANDigital/presidium-hugo/pkg/filesystem" ) +// templatesFS holds the embedded filesystem set from main via SetFS. +var templatesFS fs.FS + +// SetFS sets the embedded filesystem used to read templates. +func SetFS(fsys fs.FS) { + templatesFS = fsys +} + type Service struct { - templates packd.Box + templates fs.FS } func New() Service { - box := packr.New("templatesBox", "../../../../templates") + fsys := templatesFS + if fsys == nil { + // Fallback for tests: read templates from the module root filesystem. + fsys = os.DirFS(findModuleRoot()) + } + // Sub-FS into "templates" so callers can use template names directly (e.g. "default"). + sub, err := fs.Sub(fsys, "templates") + if err != nil { + panic("templates directory not found: " + err.Error()) + } return Service{ - templates: box, + templates: sub, + } +} + +// findModuleRoot walks up from the working directory to find the module root. +func findModuleRoot() string { + dir, _ := os.Getwd() + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + return dir + } + parent := filepath.Dir(dir) + if parent == dir { + return "." + } + dir = parent } } -// GetListing returns a list of files by a given template +// GetListing returns a list of files under a given template directory. func (s Service) GetListing(templateDir string) ([]string, error) { - listing := make([]string, 0) - return listing, s.templates.WalkPrefix(templateDir, func(templateName string, file packd.File) error { - listing = append(listing, templateName) + var listing []string + err := fs.WalkDir(s.templates, templateDir, func(p string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if !d.IsDir() { + listing = append(listing, p) + } return nil }) + return listing, err } func (s Service) ProcessDirTemplates(templateDir string, outputDir string, model generator.TemplateParameters) error { - err := s.templates.WalkPrefix(templateDir, func(templateName string, file packd.File) error { - relativePath := strings.TrimPrefix(filepath.Dir(templateName), templateDir) + return fs.WalkDir(s.templates, templateDir, func(p string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + relativePath := strings.TrimPrefix(filepath.Dir(p), templateDir) outputPath := path.Join(outputDir, relativePath) - return s.ProcessTemplate(outputPath, templateName, model) + return s.ProcessTemplate(outputPath, p, model) }) - return err } func (s Service) ProcessTemplate(dir, theTemplate string, model generator.TemplateParameters) error { filename := filepath.Base(theTemplate) - templateString, err := s.templates.FindString(theTemplate) + // Strip .tmpl suffix so e.g. "go.mod.tmpl" becomes "go.mod" + filename = strings.TrimSuffix(filename, ".tmpl") + + data, err := fs.ReadFile(s.templates, theTemplate) if err != nil { return err } + templateString := string(data) + finalPath := path.Join(dir, filename) err = filesystem.AFS.MkdirAll(dir, os.ModePerm) if err != nil { diff --git a/templates/onboarding/go.mod b/templates/blog/go.mod.tmpl similarity index 86% rename from templates/onboarding/go.mod rename to templates/blog/go.mod.tmpl index 16c5412e..2d7afb21 100644 --- a/templates/onboarding/go.mod +++ b/templates/blog/go.mod.tmpl @@ -1,3 +1,3 @@ module github.com/spandigital/{{ .ProjectName }} -go 1.23 +go 1.25 diff --git a/templates/blog/go.mod b/templates/default/go.mod.tmpl similarity index 86% rename from templates/blog/go.mod rename to templates/default/go.mod.tmpl index 16c5412e..2d7afb21 100644 --- a/templates/blog/go.mod +++ b/templates/default/go.mod.tmpl @@ -1,3 +1,3 @@ module github.com/spandigital/{{ .ProjectName }} -go 1.23 +go 1.25 diff --git a/templates/default/go.mod b/templates/design/go.mod.tmpl similarity index 86% rename from templates/default/go.mod rename to templates/design/go.mod.tmpl index 16c5412e..2d7afb21 100644 --- a/templates/default/go.mod +++ b/templates/design/go.mod.tmpl @@ -1,3 +1,3 @@ module github.com/spandigital/{{ .ProjectName }} -go 1.23 +go 1.25 diff --git a/templates/design/go.mod b/templates/onboarding/go.mod.tmpl similarity index 86% rename from templates/design/go.mod rename to templates/onboarding/go.mod.tmpl index 16c5412e..2d7afb21 100644 --- a/templates/design/go.mod +++ b/templates/onboarding/go.mod.tmpl @@ -1,3 +1,3 @@ module github.com/spandigital/{{ .ProjectName }} -go 1.23 +go 1.25 diff --git a/templates/requirements/go.mod b/templates/requirements/go.mod deleted file mode 100644 index f10f43a2..00000000 --- a/templates/requirements/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/spandigital/{{ .ProjectName }} - -go 1.16 diff --git a/templates/requirements/go.mod.tmpl b/templates/requirements/go.mod.tmpl new file mode 100644 index 00000000..2d7afb21 --- /dev/null +++ b/templates/requirements/go.mod.tmpl @@ -0,0 +1,3 @@ +module github.com/spandigital/{{ .ProjectName }} + +go 1.25 diff --git a/templates/runbook/go.mod b/templates/runbook/go.mod deleted file mode 100644 index f10f43a2..00000000 --- a/templates/runbook/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/spandigital/{{ .ProjectName }} - -go 1.16 diff --git a/templates/runbook/go.mod.tmpl b/templates/runbook/go.mod.tmpl new file mode 100644 index 00000000..2d7afb21 --- /dev/null +++ b/templates/runbook/go.mod.tmpl @@ -0,0 +1,3 @@ +module github.com/spandigital/{{ .ProjectName }} + +go 1.25 diff --git a/themes/presidium-styling-base b/themes/presidium-styling-base new file mode 160000 index 00000000..c31b7e23 --- /dev/null +++ b/themes/presidium-styling-base @@ -0,0 +1 @@ +Subproject commit c31b7e23ffb985ed080002fb2cd21d18d865656d diff --git a/tools/hugo b/tools/hugo new file mode 160000 index 00000000..2c80dee3 --- /dev/null +++ b/tools/hugo @@ -0,0 +1 @@ +Subproject commit 2c80dee3586caec7ac5cec7af92eb590c6fc3ff3 From e3f348c3d180d8423d2d41dafe6342012fa0df7c Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Tue, 17 Feb 2026 18:37:34 +0200 Subject: [PATCH 03/15] feat: bring prsdm up to date --- .gitmodules | 20 ++ .goreleaser.yaml | 5 +- themes/presidium-layouts-base | 1 + themes/presidium-layouts-blog | 1 + themes/presidium-styling-base | 2 +- todos.yaml | 516 +++++++++++++++++++++------------- tools/hugo | 2 +- 7 files changed, 341 insertions(+), 206 deletions(-) create mode 100644 .gitmodules create mode 160000 themes/presidium-layouts-base create mode 160000 themes/presidium-layouts-blog diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7d3a5e68 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,20 @@ +[submodule "tools/hugo"] + path = tools/hugo + url = https://github.com/gohugoio/hugo + branch = master + shallow = true +[submodule "themes/presidium-layouts-base"] + path = themes/presidium-layouts-base + url = https://github.com/SPANDigital/presidium-layouts-base + branch = main + shallow = true +[submodule "themes/presidium-layouts-blog"] + path = themes/presidium-layouts-blog + url = https://github.com/SPANDigital/presidium-layouts-blog + branch = main + shallow = true +[submodule "themes/presidium-styling-base"] + path = themes/presidium-styling-base + url = https://github.com/SPANDigital/presidium-styling-base + branch = main + shallow = true diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 190ec357..e156b018 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,9 +1,10 @@ before: hooks: - go mod tidy - - packr2 builds: - - env: + - tags: + - extended + env: - CGO_ENABLED=0 goos: - linux diff --git a/themes/presidium-layouts-base b/themes/presidium-layouts-base new file mode 160000 index 00000000..c27322f3 --- /dev/null +++ b/themes/presidium-layouts-base @@ -0,0 +1 @@ +Subproject commit c27322f34e2e1e0830c1be174e65660b65fd52be diff --git a/themes/presidium-layouts-blog b/themes/presidium-layouts-blog new file mode 160000 index 00000000..1a9fccd2 --- /dev/null +++ b/themes/presidium-layouts-blog @@ -0,0 +1 @@ +Subproject commit 1a9fccd2f6a632ef45e7c45bbfcd193e35b79daf diff --git a/themes/presidium-styling-base b/themes/presidium-styling-base index c31b7e23..2f128289 160000 --- a/themes/presidium-styling-base +++ b/themes/presidium-styling-base @@ -1 +1 @@ -Subproject commit c31b7e23ffb985ed080002fb2cd21d18d865656d +Subproject commit 2f1282897a168cf81d831eebedb9a0df23a2c7ed diff --git a/todos.yaml b/todos.yaml index 38d03617..0a37898f 100644 --- a/todos.yaml +++ b/todos.yaml @@ -1,33 +1,33 @@ todos: - id: 1 - status: pending + status: complete files: - go.mod - go.sum description: | - Update root go.mod to use Go 1.23 (latest stable version). + Update root go.mod to use Go 1.25. Current version is 1.23.0 with toolchain go1.23.9. - Update the go directive to go 1.23 and ensure toolchain is set to go1.23.9 or later. - action-taken: null + Update the go directive to go 1.25 and ensure toolchain is set to go1.25.0 or later. + action-taken: Updated go directive to 1.25 and toolchain to go1.25.0 in root go.mod. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 2 - status: pending + status: complete files: - .github/workflows/goreleaser.yml description: | - Update GitHub Actions goreleaser workflow to use Go 1.23. + Update GitHub Actions goreleaser workflow to use Go 1.25. Current version specified is 1.16 which is severely outdated. - Update the 'go-version' field in the setup-go action to use '1.23.x'. - action-taken: null + Update the 'go-version' field in the setup-go action to use '1.25.x'. + action-taken: Updated go-version from 1.16 to 1.25.x in goreleaser.yml. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 3 - status: pending + status: complete files: - templates/blog/go.mod - templates/default/go.mod @@ -37,31 +37,48 @@ todos: - templates/runbook/go.mod - docs/go.mod description: | - Update all template and docs go.mod files to use Go 1.23. + Update all template and docs go.mod files to use Go 1.25. These directory go.mod files need to be updated to match the root go.mod version. - Check each file and update the 'go' directive to 1.23. - action-taken: null + Check each file and update the 'go' directive to 1.25. + action-taken: | + Updated go directive to 1.25 in all 7 go.mod files: + - docs/go.mod (was 1.18) + - templates/blog/go.mod (was 1.23) + - templates/default/go.mod (was 1.23) + - templates/design/go.mod (was 1.23) + - templates/onboarding/go.mod (was 1.23) + - templates/requirements/go.mod (was 1.16) + - templates/runbook/go.mod (was 1.16) created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 4 - status: pending + status: complete files: - go.mod - go.sum + - pkg/domain/service/conversion/markdown/operations.go description: | - Update Hugo dependency to v0.140.0 or later (latest stable). + Update Hugo dependency to v0.155.3 (latest stable as of 2026-02-17). Current version is v0.87.0 which is very outdated (released 2021). - Run 'go get github.com/gohugoio/hugo@v0.140.0' or later version. - Note: Hugo v0.152 does not exist - latest is around v0.140.x range. - action-taken: null + Run 'go get github.com/gohugoio/hugo@v0.155.3'. + Note: Hugo's commands package API changed significantly between v0.87 and v0.110+. + The commands.Execute(args) function used in pkg/domain/service/hugo/hugo.go + and the common/paths package used in operations.go may need code changes. + Recent releases: v0.155.3, v0.155.2, v0.155.1, v0.155.0, v0.154.5. + action-taken: | + Updated Hugo from v0.87.0 to v0.155.3. + Replaced removed paths.IsAbsURL() with a local isAbsURL() using net/url stdlib. + Removed the github.com/gohugoio/hugo/common/paths import from operations.go. + commands.Execute(args) still exists with compatible signature. + Ran go mod tidy. Full project compiles cleanly. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 5 - status: pending + status: complete files: - .github/workflows/gh-pages.yml - docs/content/recipes/hosting/github-pages.md @@ -70,13 +87,15 @@ todos: The gh-pages.yml workflow uses 'latest' which is good. Update any hardcoded version references in documentation to match the new Hugo version. The docs/content/recipes/hosting/github-pages.md file has a hardcoded '0.87.0' reference. - action-taken: null + action-taken: | + Updated hardcoded hugo-version '0.87.0' to 'latest' in github-pages.md documentation. + gh-pages.yml already uses 'latest' - no change needed. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 6 - status: pending + status: complete files: - tools/hugo/go.mod description: | @@ -84,15 +103,18 @@ todos: This appears to be a git submodule tracking the Hugo repository. Consider updating to the latest Hugo commit or tag. Run 'cd tools/hugo && git fetch && git checkout '. - action-taken: null + action-taken: | + Submodule already at recent Hugo master (2c80dee35). No update needed. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 7 - status: pending + status: complete files: - pkg/domain/service/template/template.go + - embedded.go + - main.go description: | Replace packr/v2 imports with Go's native embed package in template.go. Current code uses: @@ -102,335 +124,409 @@ todos: - "embed" Update the Service struct to use embed.FS instead of packd.Box. Add //go:embed directive to embed the templates directory. - action-taken: null + action-taken: | + Rewrote template.go to use io/fs.FS interface instead of packr. + Created embedded.go at project root with //go:embed all:templates directive. + Updated main.go to pass embedded FS via template.SetFS(). + Added fs.Sub() to root the FS at "templates/" for backward compatibility. + Added findModuleRoot() fallback for tests using os.DirFS. + Renamed templates/*/go.mod to go.mod.tmpl (embed can't cross module boundaries). + Added .tmpl suffix stripping in ProcessTemplate output filenames. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 8 - status: pending + status: complete files: - pkg/domain/service/template/template.go description: | Update the New() function to remove packr initialization. - Replace 'packr.New("templatesBox", "../../../../templates")' with proper embed.FS usage. - Declare a package-level variable like: - //go:embed ../../../../templates - var templatesFS embed.FS - Update the Service struct initialization to use this embedded FS. - action-taken: null + action-taken: Completed as part of todo 7. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 9 - status: pending + status: complete files: - pkg/domain/service/template/template.go description: | Refactor GetListing() method to work with embed.FS. - Replace 's.templates.WalkPrefix()' with 'fs.WalkDir()' from io/fs package. - The embed.FS implements fs.FS interface, so use fs.WalkDir(s.templates, templateDir, ...). - Update function signature and logic accordingly. - action-taken: null + action-taken: Replaced WalkPrefix with fs.WalkDir as part of todo 7. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 10 - status: pending + status: complete files: - pkg/domain/service/template/template.go description: | Refactor ProcessDirTemplates() method to work with embed.FS. - Replace packr's WalkPrefix with fs.WalkDir from io/fs package. - Update file handling to use embed.FS ReadFile method instead of packd.File. - action-taken: null + action-taken: Replaced WalkPrefix with fs.WalkDir as part of todo 7. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 11 - status: pending + status: complete files: - pkg/domain/service/template/template.go description: | Refactor ProcessTemplate() method to work with embed.FS. - Replace 's.templates.FindString(theTemplate)' with 'fs.ReadFile(s.templates, theTemplate)'. - Convert []byte result to string if needed. - Update error handling accordingly. - action-taken: null + action-taken: Replaced FindString with fs.ReadFile as part of todo 7. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 12 - status: pending + status: complete files: - go.mod - go.sum description: | Remove packr dependencies from go.mod. - Remove the following dependencies: - - github.com/gobuffalo/packd v1.0.1 - - github.com/gobuffalo/packr/v2 v2.8.3 - Run 'go mod tidy' to clean up indirect dependencies. - action-taken: null + action-taken: | + Ran go mod tidy after removing packr imports. + Both gobuffalo/packd and gobuffalo/packr/v2 removed from go.mod. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 13 - status: pending + status: complete files: - Makefile description: | Remove 'pack' target from Makefile. - The pack target installs and runs packr2, which is no longer needed: - pack: - go get -u github.com/gobuffalo/packr/v2/packr2 - packr2 - go mod tidy - This entire target should be removed. - action-taken: null + action-taken: Removed entire pack target from Makefile. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 14 - status: pending + status: complete files: - Makefile description: | Update 'build' target in Makefile to remove packr dependencies. - Current build target: - build: - make pack - go build -o $(FILENAME) main.go - packr2 clean - Should become: - build: - go build -o $(FILENAME) main.go - Remove the 'make pack' and 'packr2 clean' lines. - action-taken: null + action-taken: Simplified build target to just 'go build -o $(FILENAME) main.go'. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 15 - status: pending + status: complete files: - .goreleaser.yaml description: | Remove packr2 command from .goreleaser.yaml before hooks. - Current before hooks: - before: - hooks: - - go mod tidy - - packr2 - Change to: - before: - hooks: - - go mod tidy - The packr2 command is no longer needed. - action-taken: null + action-taken: Removed '- packr2' from before hooks. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 16 - status: pending + status: complete files: - .github/workflows/goreleaser.yml description: | Remove packr installation step from GitHub Actions goreleaser workflow. - Current workflow has: - - name: Get packr - run: go get -u github.com/gobuffalo/packr/v2/packr2 - This entire step should be removed as packr is no longer needed. - action-taken: null + action-taken: | + Removed 'Get packr' step and 'Prepare' (git reset --hard) step from goreleaser.yml. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 17 - status: pending + status: complete files: - Makefile description: | Modernize the 'test' target in Makefile. - Current implementation: - test: - @mkdir -p reports - go test -p 1 -v $(TESTDIRS) -coverprofile=reports/tests-cov.out - Consider using modern go test flags and tools: - - Use 'go test ./...' instead of manually filtering directories - - Add '-race' flag for race detection - - Add '-timeout' flag to prevent hanging tests - - Consider using 'go test -json' for better CI integration - action-taken: null + action-taken: | + Updated test target: use 'go test ./...' with -race and -timeout 120s flags. + Removed TESTDIRS variable and manual directory filtering. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 18 - status: pending + status: complete files: - Makefile description: | Modernize the 'dist' target in Makefile. - Current implementation: - dist: - [ -d "dist" ] || mkdir "dist" - go build -o "dist/presidium" --tags extended - Improvements: - - Use 'go build' with modern flags like '-trimpath' for reproducible builds - - Add '-ldflags' for version information injection - - Consider using 'go install' pattern for modern Go tooling - - Add 'CGO_ENABLED=0' for static binaries if appropriate - action-taken: null + action-taken: Added -trimpath flag for reproducible builds. Used mkdir -p instead of shell conditional. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 19 - status: pending + status: complete files: - Makefile description: | Add modern Go tooling targets to Makefile. - Consider adding the following targets for better developer experience: - - 'fmt' target: go fmt ./... - - 'vet' target: go vet ./... - - 'lint' target: golangci-lint run (if golangci-lint is available) - - 'tidy' target: go mod tidy && go mod verify - - 'install-tools' target: for installing development dependencies - These are standard targets in modern Go projects. - action-taken: null + action-taken: Added fmt, vet, and tidy targets. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 20 - status: pending + status: complete files: - Makefile description: | Add help target to Makefile for better discoverability. - Add a 'help' or default target that displays available commands: - help: ## Display this help message - @echo "Available targets:" - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ - awk 'BEGIN {FS = ":.*?## "}; {printf " %-15s %s\n", $$1, $$2}' - Add '## Description' comments to existing targets. - action-taken: null + action-taken: | + Added help target as default goal with grep/awk pattern. + Added ## descriptions to all targets. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 21 - status: pending + status: complete files: - .github/workflows/goreleaser.yml description: | Update goreleaser GitHub Actions workflow to use modern action versions. - Current workflow uses: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - - uses: goreleaser/goreleaser-action@v2 - Update to latest versions: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - - uses: goreleaser/goreleaser-action@v6 - action-taken: null + action-taken: | + Updated actions/checkout@v2 -> v4, actions/setup-go@v2 -> v5, + goreleaser/goreleaser-action@v2 -> v6. Also changed --rm-dist to --clean. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 22 - status: pending + status: complete files: - .github/workflows/gh-pages.yml description: | Update gh-pages GitHub Actions workflow to use modern action versions. - Current workflow uses: - - uses: actions/checkout@v2 - - uses: peaceiris/actions-hugo@v2 - - uses: peaceiris/actions-gh-pages@v3 - Update to latest versions: - - uses: actions/checkout@v4 - - uses: peaceiris/actions-hugo@v3 - - uses: peaceiris/actions-gh-pages@v4 - action-taken: null + action-taken: | + Updated actions/checkout@v2 -> v4, peaceiris/actions-hugo@v2 -> v3, + peaceiris/actions-gh-pages@v3 -> v4. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 23 - status: pending + status: complete files: - go.mod - go.sum description: | Run 'go mod tidy' and 'go mod verify' after all Go version updates. - This ensures: - - All dependencies are properly resolved for Go 1.23 - - Unused dependencies are removed - - go.sum is correct and verified - - All indirect dependencies are properly tracked - action-taken: null + action-taken: Ran go mod tidy && go mod verify. All modules verified. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 24 - status: pending + status: complete files: - main.go - cmd/ - pkg/ description: | Test the application after removing packr to ensure embed works correctly. - Steps: - 1. Build the application: make build - 2. Test template generation: ./presidium init test-project - 3. Verify templates are properly embedded and extracted - 4. Run test suite: make test - 5. Verify all tests pass with the new embed implementation - action-taken: null + action-taken: | + Built binary successfully (go build -o /tmp/presidium-test .). + Verified CLI runs and shows help. All tests pass. + Fixed Makefile build target to use '.' instead of 'main.go' for multi-file main package. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z - id: 25 - status: pending + status: complete files: - README.md - docs/content/ description: | Update documentation to reflect the new Go and Hugo versions. - Tasks: - - Update any version requirements in README.md - - Update getting-started documentation - - Update prerequisites documentation - - Remove any references to packr if mentioned - - Update build instructions if needed - action-taken: null + action-taken: | + Checked README.md and docs/content/ for version references. + No packr, old Go, or old Hugo version references found in docs. + Hugo version in github-pages.md was already updated in todo 5. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 26 + status: complete + files: + - go.mod + - go.sum + - pkg/domain/service/conversion/fileactions/fileactions.go + description: | + Replace github.com/pkg/errors with stdlib errors and fmt.Errorf. + action-taken: | + Replaced errors.Wrap -> fmt.Errorf with %w, errors.Errorf -> fmt.Errorf. + Changed import from "github.com/pkg/errors" to "errors" (stdlib). + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 27 + status: complete + files: + - go.mod + - go.sum + - pkg/configtranslation/configfile.go + - pkg/domain/service/conversion/markdown/parse.go + - pkg/domain/service/conversion/markdown/frontmatter.go + description: | + Migrate gopkg.in/yaml.v2 to gopkg.in/yaml.v3. + action-taken: Changed import from "gopkg.in/yaml.v2" to "gopkg.in/yaml.v3" in all 3 files. Tests pass. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 28 + status: complete + files: + - go.mod + - go.sum + - pkg/domain/service/template/template.go + description: | + Update github.com/Masterminds/sprig from v2 (+incompatible) to v3. + action-taken: | + Updated import to "github.com/Masterminds/sprig/v3". + Ran go get github.com/Masterminds/sprig/v3@latest (v3.3.0). + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 29 + status: complete + files: + - go.mod + - go.sum + - pkg/domain/service/conversion/markdown/markdown_test.go + - pkg/domain/service/generator/generaror_test.go + description: | + Replace github.com/Masterminds/goutils with math/rand/v2 from stdlib. + action-taken: | + Replaced goutils.RandomAlphaNumeric(4) with fmt.Sprintf("%04d", rand.IntN(10000)). + Replaced goutils.RandomNumeric(6) with fmt.Sprintf("%06d", rand.IntN(1000000)). + Removed goutils dependency. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 30 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/spf13/cobra from v1.5.0 to latest stable. + action-taken: Updated cobra to v1.10.2 via go get. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 31 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/spf13/viper from v1.10.0 to latest stable. + action-taken: Updated viper to v1.21.0 via go get. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 32 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/spf13/afero from v1.8.2 to latest stable. + action-taken: Updated afero to v1.15.0 via go get (pulled in by Hugo update). + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 33 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/sirupsen/logrus from v1.8.1 to latest stable. + action-taken: Updated logrus to v1.9.4 via go get. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 34 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/PuerkitoBio/goquery from v1.7.1 to latest stable. + action-taken: Updated goquery to v1.11.0 via go get. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 35 + status: complete + files: + - go.mod + - go.sum + - pkg/domain/service/conversion/conversion.go + description: | + Update github.com/otiai10/copy from v1.2.0 to latest stable. + action-taken: | + Updated copy to v1.14.1 via go get. + Fixed API change: Skip func signature changed from (src string) to (srcinfo os.FileInfo, src, dest string). + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 36 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/manifoldco/promptui from v0.8.0 to latest stable. + action-taken: Updated promptui to v0.9.0 via go get. + created_at: 2026-02-17T00:00:00Z + updated_at: 2026-02-17T00:00:00Z + completed_at: 2026-02-17T00:00:00Z + + - id: 37 + status: complete + files: + - go.mod + - go.sum + description: | + Update github.com/onsi/gomega from v1.10.1 to latest stable. + action-taken: Updated gomega to v1.39.1 via go get. created_at: 2026-02-17T00:00:00Z updated_at: 2026-02-17T00:00:00Z - completed_at: null + completed_at: 2026-02-17T00:00:00Z notes: | Migration Strategy: 1. Go Version Update (Tasks 1-3): - - Update root and all template go.mod files to Go 1.23 + - Update root and all template go.mod files to Go 1.25 - Update GitHub Actions workflows - This is the foundation for other updates 2. Hugo Version Update (Tasks 4-6): - - Update Hugo dependency to v0.140.x or latest stable - - Note: Hugo v0.152 doesn't exist; latest is ~v0.140.x + - Update Hugo dependency to v0.155.3 (latest stable as of 2026-02-17) - Update Hugo submodule if needed - Update documentation references @@ -447,19 +543,35 @@ notes: | - Add helpful development targets - Update GitHub Actions to latest versions - 5. Finalize and Test (Tasks 23-25): + 5. Remove Deprecated Packages (Tasks 26-29): + - Replace pkg/errors with stdlib errors/fmt.Errorf (task 26) + - Migrate yaml.v2 to yaml.v3 (task 27) + - Update Masterminds/sprig v2 to v3 (task 28) + - Replace Masterminds/goutils with stdlib alternatives (task 29) + + 6. Update Outdated Packages (Tasks 30-37): + - cobra v1.5.0 -> v1.8.x (task 30) + - viper v1.10.0 -> v1.18.x (task 31) + - afero v1.8.2 -> v1.11.x (task 32) + - logrus v1.8.1 -> v1.9.x (task 33) + - goquery v1.7.1 -> v1.9.x (task 34) + - otiai10/copy v1.2.0 -> v1.14.x (task 35) + - promptui v0.8.0 -> v0.9.x (task 36) + - gomega v1.10.1 -> v1.36.x (task 37) + + 7. Finalize and Test (Tasks 23-25): - Run go mod tidy - Test thoroughly - Update documentation Important Notes: - - Go 1.23 is the latest stable version (not 1.25) - - Hugo latest stable is ~v0.140.x (not 0.152) + - Go 1.25 is the target version for this upgrade + - Hugo latest stable is v0.155.3 (as of 2026-02-17) - embed.FS is available since Go 1.16 and is the modern replacement for packr - The tools/hugo directory appears to be a git submodule with Hugo source - All changes should be tested thoroughly before merging Breaking Changes: - - Minimum Go version will be 1.23 (up from 1.23.0) - - Hugo dependency will jump from v0.87.0 to v0.140.x (major version jump) + - Minimum Go version will be 1.25 (up from 1.23.0) + - Hugo dependency will jump from v0.87.0 to v0.155.3 (major version jump) - packr removal may affect any external tools depending on generated packr files diff --git a/tools/hugo b/tools/hugo index 2c80dee3..3f9d0ad2 160000 --- a/tools/hugo +++ b/tools/hugo @@ -1 +1 @@ -Subproject commit 2c80dee3586caec7ac5cec7af92eb590c6fc3ff3 +Subproject commit 3f9d0ad2b6045849cbafe133cb9fb82ed5f5ee06 From 273db27f58445df96e3c6d305fe7dd81e5d6b997 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Tue, 17 Feb 2026 18:42:50 +0200 Subject: [PATCH 04/15] feat: bring prsdm up to date --- Makefile | 2 +- pkg/configtranslation/configfile.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 07403908..9a485ec8 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -FILENAME=main +FILENAME=presidium .DEFAULT_GOAL=help .PHONY: build test dist clean fmt vet tidy coverage_report help diff --git a/pkg/configtranslation/configfile.go b/pkg/configtranslation/configfile.go index ef1418e7..81c9efa2 100644 --- a/pkg/configtranslation/configfile.go +++ b/pkg/configtranslation/configfile.go @@ -18,7 +18,7 @@ type JekyllShow struct { } type JekyllExternal struct { - AuthorsUrl string `yaml:"authors-url:` + AuthorsUrl string `yaml:"authors-url"` } type JekyllSectionItem struct { @@ -189,7 +189,7 @@ type HugoFrontmatter struct { type Roles struct { Label string `yaml:"label"` All string `yaml:"all"` - Options []string `yaml:options` + Options []string `yaml:"options"` } func ReadJekyllConfig(path string) (*JekyllConfig, error) { From f770f5768bac71682f154c0e36ef24f306443746 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Wed, 18 Feb 2026 09:13:49 +0200 Subject: [PATCH 05/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- .github/workflows/{goreleaser.yml => release.yml} | 0 .gitignore | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) rename .github/workflows/{goreleaser.yml => release.yml} (100%) diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/release.yml similarity index 100% rename from .github/workflows/goreleaser.yml rename to .github/workflows/release.yml diff --git a/.gitignore b/.gitignore index ae5f34ab..76728071 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ dist/ resources/ dist/ -docs/resources \ No newline at end of file +docs/resources +reports/ \ No newline at end of file From a7e0a15932ca50d7534932565361c991164870be Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Wed, 18 Feb 2026 09:27:24 +0200 Subject: [PATCH 06/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- Makefile | 6 ++ cmd/versioning.go | 8 +- docs/config.yml | 100 +++++++++--------- .../conversion/fileactions/fileactions.go | 2 +- .../conversion/markdown/frontmatter.go | 2 +- .../conversion/markdown/markdown_test.go | 2 +- .../service/generator/generaror_test.go | 2 +- pkg/domain/versioning/versioning.go | 1 - 8 files changed, 62 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index 9a485ec8..096d55ed 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ FILENAME=presidium +DOCSDIR=docs .DEFAULT_GOAL=help .PHONY: build test dist clean fmt vet tidy coverage_report help @@ -30,3 +31,8 @@ coverage_report: ## Open coverage report in browser dist: ## Build distribution binary mkdir -p "dist" go build -trimpath -o "dist/presidium" --tags extended + +checks: tidy fmt vet test build + +serve-docs: + cd $(DOCSDIR) && make serve \ No newline at end of file diff --git a/cmd/versioning.go b/cmd/versioning.go index 408030a3..80e27741 100644 --- a/cmd/versioning.go +++ b/cmd/versioning.go @@ -16,7 +16,7 @@ func versionCommand() *cobra.Command { Short: "managing versioning of presidium site", Run: func(cmd *cobra.Command, args []string) { if !enabled { - v:= versioning.New(".") + v := versioning.New(".") if !v.IsEnabled() { v.SetEnabled(true) } @@ -28,10 +28,9 @@ func versionCommand() *cobra.Command { return cmd } - func activateNextVersionCommand() *cobra.Command { return &cobra.Command{ - Use: "next", + Use: "next", Short: "creates a next version based on last version", Run: func(cmd *cobra.Command, args []string) { v := versioning.New(".") @@ -40,7 +39,6 @@ func activateNextVersionCommand() *cobra.Command { } } - func syncLatestCommand() *cobra.Command { return &cobra.Command{ Use: "update", @@ -51,5 +49,3 @@ func syncLatestCommand() *cobra.Command { }, } } - - diff --git a/docs/config.yml b/docs/config.yml index cdca8dc4..f0cdcec5 100755 --- a/docs/config.yml +++ b/docs/config.yml @@ -1,5 +1,5 @@ languageCode: en-us -title: "Presidium" +title: "Presidium Open Source" copyright: SPAN Digital baseUrl: / assetDir: static @@ -27,46 +27,46 @@ params: sectionPagesMenu: "" menu: Main: - - identifier: overview - name: Overview - url: /overview - weight: 1 - - identifier: key-concepts - name: Key Concepts - url: /key-concepts/ - weight: 2 - - identifier: getting-started - name: Getting Started - url: /getting-started/ - weight: 3 - - identifier: best-practices - name: Best Practices - url: /best-practices/ - weight: 4 - - identifier: reference - name: Reference - url: /reference/ - weight: 5 - - identifier: recipes - name: Recipes - url: /recipes/ - weight: 6 - - identifier: tools - name: Tools - url: /tools/ - weight: 7 - - identifier: support - name: Support - url: /support/ - weight: 8 - - identifier: updates - name: Updates - url: /updates/ - weight: 9 - - identifier: glossary - name: Glossary - url: /glossary/ - weight: 10 + - identifier: overview + name: Overview + url: /overview + weight: 1 + - identifier: key-concepts + name: Key Concepts + url: /key-concepts/ + weight: 2 + - identifier: getting-started + name: Getting Started + url: /getting-started/ + weight: 3 + - identifier: best-practices + name: Best Practices + url: /best-practices/ + weight: 4 + - identifier: reference + name: Reference + url: /reference/ + weight: 5 + - identifier: recipes + name: Recipes + url: /recipes/ + weight: 6 + - identifier: tools + name: Tools + url: /tools/ + weight: 7 + - identifier: support + name: Support + url: /support/ + weight: 8 + - identifier: updates + name: Updates + url: /updates/ + weight: 9 + - identifier: glossary + name: Glossary + url: /glossary/ + weight: 10 outputFormats: MenuIndex: baseName: menu @@ -76,17 +76,17 @@ outputFormats: mediaType: application/json outputs: home: - - HTML - - RSS - - MenuIndex - - SearchMap + - HTML + - RSS + - MenuIndex + - SearchMap module: imports: - - path: github.com/spandigital/presidium-styling-base - - path: github.com/spandigital/presidium-layouts-base + - path: github.com/spandigital/presidium-styling-base + - path: github.com/spandigital/presidium-layouts-base enableInlineShortcodes: true frontmatter: lastmod: - - lastmod - - :fileModTime - - :default + - lastmod + - :fileModTime + - :default diff --git a/pkg/domain/service/conversion/fileactions/fileactions.go b/pkg/domain/service/conversion/fileactions/fileactions.go index b2980ab7..4e0d0077 100644 --- a/pkg/domain/service/conversion/fileactions/fileactions.go +++ b/pkg/domain/service/conversion/fileactions/fileactions.go @@ -1,6 +1,7 @@ package fileactions import ( + "errors" "fmt" "github.com/SPANDigital/presidium-hugo/pkg/config" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" @@ -8,7 +9,6 @@ import ( "github.com/SPANDigital/presidium-hugo/pkg/filesystem" "github.com/SPANDigital/presidium-hugo/pkg/log" "github.com/SPANDigital/presidium-hugo/pkg/utils" - "errors" "github.com/spf13/viper" "io/fs" "os" diff --git a/pkg/domain/service/conversion/markdown/frontmatter.go b/pkg/domain/service/conversion/markdown/frontmatter.go index aed203b1..9d7cdf53 100644 --- a/pkg/domain/service/conversion/markdown/frontmatter.go +++ b/pkg/domain/service/conversion/markdown/frontmatter.go @@ -19,7 +19,7 @@ type FrontMatter struct { Author string `yaml:"author,omitempty"` Github string `yaml:"github,omitempty"` Status string `yaml:"status,omitempty"` - Roles string `yaml:"roles,omitempty"` + Roles string `yaml:"roles,omitempty"` } // SetupExcludes initialize excludes from Viper diff --git a/pkg/domain/service/conversion/markdown/markdown_test.go b/pkg/domain/service/conversion/markdown/markdown_test.go index f51447ea..bcb176eb 100644 --- a/pkg/domain/service/conversion/markdown/markdown_test.go +++ b/pkg/domain/service/conversion/markdown/markdown_test.go @@ -2,12 +2,12 @@ package markdown import ( "fmt" - "math/rand/v2" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/conversion/colors" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/spf13/afero" + "math/rand/v2" "os" "path/filepath" "testing" diff --git a/pkg/domain/service/generator/generaror_test.go b/pkg/domain/service/generator/generaror_test.go index 385b567c..efb4408a 100644 --- a/pkg/domain/service/generator/generaror_test.go +++ b/pkg/domain/service/generator/generaror_test.go @@ -8,12 +8,12 @@ import ( "strings" "testing" - "math/rand/v2" model "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/spf13/afero" + "math/rand/v2" ) func TestGeneratorImpl(t *testing.T) { diff --git a/pkg/domain/versioning/versioning.go b/pkg/domain/versioning/versioning.go index 215c77a2..cd58ff5b 100644 --- a/pkg/domain/versioning/versioning.go +++ b/pkg/domain/versioning/versioning.go @@ -27,7 +27,6 @@ Workflow is the following: 5. If the user wants to go back he can either reclaim the last version before the update, or restore a previous 1st, 2nd, 3rd, or 4th version - */ type Versioning interface { IsEnabled() bool // check if the versioning has been enabled or not From c670378175e2ca19947417ea54ea420ba3c2d5a6 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Wed, 18 Feb 2026 10:40:44 +0200 Subject: [PATCH 07/15] feat: PRSDM-10268 fix landing page --- docs/layouts/index.html | 238 ++++++++++++++++++ .../_sass/{ => client-custom}/_custom.scss | 0 .../_sass/{ => client-custom}/_landing.scss | 0 .../_sass/{ => client-custom}/_variables.scss | 0 docs/static/presidium-site.scss | 25 ++ 5 files changed, 263 insertions(+) create mode 100644 docs/layouts/index.html rename docs/static/_sass/{ => client-custom}/_custom.scss (100%) rename docs/static/_sass/{ => client-custom}/_landing.scss (100%) rename docs/static/_sass/{ => client-custom}/_variables.scss (100%) create mode 100644 docs/static/presidium-site.scss diff --git a/docs/layouts/index.html b/docs/layouts/index.html new file mode 100644 index 00000000..4350700e --- /dev/null +++ b/docs/layouts/index.html @@ -0,0 +1,238 @@ + + + + + + + {{ $style := resources.Get "presidium-site.scss" | css.Sass | resources.Minify | + resources.Fingerprint }} + + Presidium + + + +
+ +
+
+ +
Software documentation that doesn’t suck.
+
+ Presidium is a software documentation management system for Agile + teams and their users, made from the stuff software engineers love. +
+

+ Presidium is built from the tools you already use, such as GitHub or + Bitbucket for content management, Markdown for content markup, Hugo + to generate static sites, a sprinkling of Javascript for dynamic + menus, and an extensible approach for ingesting existing content + from Swagger, Javadoc, JSDoc...with more to come. +

+ +

+ If you're a software engineer, you already know how to use + Presidium. +

+
+ +
+
+
+
+
+

Easy Install and Upgrade

+

+ npm makes installation and upgrade a, trivial, single command + activity. No need to modify your content during upgrades. +

+
+
+

Instant Publication

+

+ Author and review content on your desktop, then publish via + Github pages with a single checkin. +

+
+
+

Flexible Team Workflow

+

+ Use Gitflow or whatever process you prefer to manage the content + development process in your team. +

+
+
+

Configurable Presentation

+

+ Modify pre-configured content structure and visual style to best + meet your needs. Templates include software, design, and + onboarding documentation. +

+
+
+

Easily Incorporate Existing Content

+

+ A library of content ingestion packages can import existing + content written with in Javadoc, Swagger, and JSdoc and stored + in other repositories. +

+
+
+

Sound Content Strategy

+

+ Employ best practices from knowledge management and learning + systems-micro-articles with focused topics ensure clarity and + ease of maintenance. +

+
+
+
+
+
+
+
+
+

Up and running in minutes...

+
+

+ $ brew install SPANDigital/tap/presidium +

+

+ $ presidium init +

+
+
+
+
+

+ You can find the source code on + Github +

+

+ Presidium is available under an + Apache 2.0 License +

+
+
+
+ {{ define "content" }} {{ end }} + +
+
+
+
+
+ Github +
+
+ Markdown +
+
+ Hugo +
+
+ Javascript +
+
+ Javadoc +
+
+ Swagger +
+
+
+
+ +
+ + diff --git a/docs/static/_sass/_custom.scss b/docs/static/_sass/client-custom/_custom.scss similarity index 100% rename from docs/static/_sass/_custom.scss rename to docs/static/_sass/client-custom/_custom.scss diff --git a/docs/static/_sass/_landing.scss b/docs/static/_sass/client-custom/_landing.scss similarity index 100% rename from docs/static/_sass/_landing.scss rename to docs/static/_sass/client-custom/_landing.scss diff --git a/docs/static/_sass/_variables.scss b/docs/static/_sass/client-custom/_variables.scss similarity index 100% rename from docs/static/_sass/_variables.scss rename to docs/static/_sass/client-custom/_variables.scss diff --git a/docs/static/presidium-site.scss b/docs/static/presidium-site.scss new file mode 100644 index 00000000..6f7701d4 --- /dev/null +++ b/docs/static/presidium-site.scss @@ -0,0 +1,25 @@ +// Site-level Presidium SCSS entry point +// Imports the theme base styles, then adds site-specific landing page styles. + +/*! BEGIN presidium-styling-base */ + +/*! assets/_sass/defaults/ */ +@import '_sass/defaults/'; +/*! assets/_sass/bootstrap/ */ +@import '_sass/bootstrap/'; +/*! assets/_sass/components/ */ +@import '_sass/components/'; +/*! assets/_sass/structure.scss */ +@import '_sass/structure'; +/*! assets/_sass/enterprise/ */ +@import '_sass/enterprise/'; +/*! assets/_sass/client-custom/ */ +@import '_sass/client-custom/'; +/*! assets/_sass/outputs/ */ +@import '_sass/outputs/'; + +/*! END presidium-styling-base */ + +/*! BEGIN site-custom */ +@import '_sass/client-custom/landing'; +/*! END site-custom */ From 139d5dc34c2dc3cf3f9dc780ff6d6c6634424c03 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Thu, 19 Feb 2026 16:03:23 +0200 Subject: [PATCH 08/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- pkg/domain/model/generator/model.go | 14 +++ templates/default/Makefile | 25 ++++-- templates/default/config.yaml | 14 +-- templates/design/Makefile | 25 ++++-- templates/design/config.yml | 133 +++++++++++++--------------- templates/onboarding/Makefile | 25 ++++-- templates/onboarding/config.yml | 86 +++++++++--------- templates/requirements/Makefile | 36 ++++++++ templates/requirements/config.yaml | 22 ++--- templates/runbook/Makefile | 36 ++++++++ templates/runbook/config.yaml | 22 ++--- 11 files changed, 278 insertions(+), 160 deletions(-) create mode 100644 templates/requirements/Makefile create mode 100644 templates/runbook/Makefile diff --git a/pkg/domain/model/generator/model.go b/pkg/domain/model/generator/model.go index 211912d3..28203d77 100644 --- a/pkg/domain/model/generator/model.go +++ b/pkg/domain/model/generator/model.go @@ -17,6 +17,8 @@ const ( OnBoardingTemplate DesignTemplate BlogTemplate + RequirementsTemplate + RunbookTemplate ) const ( @@ -30,6 +32,8 @@ var ( OnBoardingTemplate, DesignTemplate, BlogTemplate, + RequirementsTemplate, + RunbookTemplate, } ) @@ -95,6 +99,8 @@ func (t Template) Name() string { "SPAN On-boarding Template", "SPAN Design Template", "SPAN Blog Template", + "SPAN Requirements Template", + "SPAN Runbook Template", }[t] } @@ -104,6 +110,8 @@ func (t Template) Description() string { "SPAN's on-boarding template", "SPAN's design template", "SPAN's blog template", + "SPAN's requirements template", + "SPAN's runbook template", }[t] } @@ -113,6 +121,8 @@ func (t Template) Code() string { "onboarding", "design", "blog", + "requirements", + "runbook", }[t] } @@ -126,6 +136,10 @@ func GetTemplate(code string) (Template, error) { return DesignTemplate, nil case BlogTemplate.Code(): return BlogTemplate, nil + case RequirementsTemplate.Code(): + return RequirementsTemplate, nil + case RunbookTemplate.Code(): + return RunbookTemplate, nil default: return 0, presidiumerr.GenericError{Code: presidiumerr.UnsupportedTemplate} } diff --git a/templates/default/Makefile b/templates/default/Makefile index 62f4a2b6..533b7c0b 100644 --- a/templates/default/Makefile +++ b/templates/default/Makefile @@ -1,25 +1,36 @@ default: - hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + make serve hugo: hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts tidy: go mod tidy hugo mod tidy -refresh: +refresh: + rm -rf public resources go.sum .hugo_build.lock themes hugo mod clean make tidy make hugo serve: - hugo server -w --ignoreCache --logLevel info + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts serve-a: - hugo server -w --ignoreCache --logLevel info -p 6060 + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 serve-b: - hugo server -w --ignoreCache --logLevel info -p 7070 \ No newline at end of file + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/templates/default/config.yaml b/templates/default/config.yaml index 5820337b..8a28732d 100644 --- a/templates/default/config.yaml +++ b/templates/default/config.yaml @@ -5,14 +5,14 @@ pluralizelisttitles: false params: _merge: deep sortByFilePath: true - enterprise_key: {{ .Uuid }} + enterprise_key: frontmatter: - - key: author - type: email - strict: false - - key: title - type: text - strict: true + - key: author + type: email + strict: false + - key: title + type: text + strict: true markup: goldmark: renderer: diff --git a/templates/design/Makefile b/templates/design/Makefile index 62f4a2b6..533b7c0b 100644 --- a/templates/design/Makefile +++ b/templates/design/Makefile @@ -1,25 +1,36 @@ default: - hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + make serve hugo: hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts tidy: go mod tidy hugo mod tidy -refresh: +refresh: + rm -rf public resources go.sum .hugo_build.lock themes hugo mod clean make tidy make hugo serve: - hugo server -w --ignoreCache --logLevel info + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts serve-a: - hugo server -w --ignoreCache --logLevel info -p 6060 + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 serve-b: - hugo server -w --ignoreCache --logLevel info -p 7070 \ No newline at end of file + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/templates/design/config.yml b/templates/design/config.yml index ce682281..0fbb73a0 100755 --- a/templates/design/config.yml +++ b/templates/design/config.yml @@ -5,14 +5,14 @@ pluralizelisttitles: false params: _merge: deep sortByFilePath: true - enterprise_key: {{ .Uuid }} + enterprise_key: frontmatter: - - key: author - type: email - strict: false - - key: title - type: text - strict: true + - key: author + type: email + strict: false + - key: title + type: text + strict: true markup: goldmark: renderer: @@ -24,58 +24,58 @@ markup: style: github menu: Main: - - identifier: introduction - name: Introduction - url: / - weight: 1 - - identifier: design-principles - name: Design Principles - url: /design-principles/ - weight: 2 - - identifier: visual-elements - name: Visual Elements - url: /visual-elements/ - weight: 3 - - identifier: typography - name: Typography - url: /typography/ - weight: 4 - - identifier: components - name: Components - url: /components/ - weight: 5 - - identifier: motion - name: Motion - url: /motion/ - weight: 6 - - identifier: design-tokens - name: Design Tokens - url: /design-tokens/ - weight: 7 - - identifier: resources - name: Resources - url: /resources/ - weight: 8 - - identifier: accessibility - name: Accessibility - url: /accessibility/ - weight: 9 - - identifier: contributing - name: Contributing - url: /contributing/ - weight: 10 - - identifier: reference - name: Reference - url: /reference/ - weight: 11 - - identifier: faqs - name: FAQs - url: /faqs/ - weight: 12 - - identifier: updates - name: Updates - url: /updates/ - weight: 13 + - identifier: introduction + name: Introduction + url: / + weight: 1 + - identifier: design-principles + name: Design Principles + url: /design-principles/ + weight: 2 + - identifier: visual-elements + name: Visual Elements + url: /visual-elements/ + weight: 3 + - identifier: typography + name: Typography + url: /typography/ + weight: 4 + - identifier: components + name: Components + url: /components/ + weight: 5 + - identifier: motion + name: Motion + url: /motion/ + weight: 6 + - identifier: design-tokens + name: Design Tokens + url: /design-tokens/ + weight: 7 + - identifier: resources + name: Resources + url: /resources/ + weight: 8 + - identifier: accessibility + name: Accessibility + url: /accessibility/ + weight: 9 + - identifier: contributing + name: Contributing + url: /contributing/ + weight: 10 + - identifier: reference + name: Reference + url: /reference/ + weight: 11 + - identifier: faqs + name: FAQs + url: /faqs/ + weight: 12 + - identifier: updates + name: Updates + url: /updates/ + weight: 13 outputFormats: MenuIndex: baseName: menu @@ -85,23 +85,18 @@ outputFormats: mediaType: application/json outputs: home: - - HTML - - RSS - - MenuIndex - - SearchMap + - HTML + - RSS + - MenuIndex + - SearchMap module: _merge: shallow imports: - path: github.com/spandigital/presidium-styling-base - mounts: - - source: assets - target: assets - - source: static - target: static - path: github.com/spandigital/presidium-layouts-base enableInlineShortcodes: true frontmatter: lastmod: - lastmod - :fileModTime - - :default \ No newline at end of file + - :default diff --git a/templates/onboarding/Makefile b/templates/onboarding/Makefile index 62f4a2b6..533b7c0b 100644 --- a/templates/onboarding/Makefile +++ b/templates/onboarding/Makefile @@ -1,25 +1,36 @@ default: - hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + make serve hugo: hugo mod get - hugo --templateMetrics --ignoreCache --logLevel info + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts tidy: go mod tidy hugo mod tidy -refresh: +refresh: + rm -rf public resources go.sum .hugo_build.lock themes hugo mod clean make tidy make hugo serve: - hugo server -w --ignoreCache --logLevel info + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts serve-a: - hugo server -w --ignoreCache --logLevel info -p 6060 + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 serve-b: - hugo server -w --ignoreCache --logLevel info -p 7070 \ No newline at end of file + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/templates/onboarding/config.yml b/templates/onboarding/config.yml index bd4403c6..8a132e4a 100755 --- a/templates/onboarding/config.yml +++ b/templates/onboarding/config.yml @@ -5,14 +5,14 @@ pluralizelisttitles: false params: _merge: deep sortByFilePath: true - enterprise_key: {{ .Uuid }} + enterprise_key: frontmatter: - - key: author - type: email - strict: false - - key: title - type: text - strict: true + - key: author + type: email + strict: false + - key: title + type: text + strict: true markup: goldmark: renderer: @@ -24,38 +24,38 @@ markup: style: github menu: Main: - - identifier: organization-overview - name: Organization Overview - url: / - weight: 1 - - identifier: solution-overview - name: Solution Overview - url: /solution-overview/ - weight: 2 - - identifier: technology-stack - name: Technology Stack - url: /technology-stack/ - weight: 3 - - identifier: tool-chain - name: Tool Chain - url: /tool-chain/ - weight: 4 - - identifier: dev-environment-setup - name: Dev Environment Setup - url: /dev-environment-setup/ - weight: 5 - - identifier: getting-started - name: Getting Started - url: /getting-started/ - weight: 6 - - identifier: reference - name: Reference - url: /reference/ - weight: 7 - - identifier: updates - name: Updates - url: /updates/ - weight: 8 + - identifier: organization-overview + name: Organization Overview + url: / + weight: 1 + - identifier: solution-overview + name: Solution Overview + url: /solution-overview/ + weight: 2 + - identifier: technology-stack + name: Technology Stack + url: /technology-stack/ + weight: 3 + - identifier: tool-chain + name: Tool Chain + url: /tool-chain/ + weight: 4 + - identifier: dev-environment-setup + name: Dev Environment Setup + url: /dev-environment-setup/ + weight: 5 + - identifier: getting-started + name: Getting Started + url: /getting-started/ + weight: 6 + - identifier: reference + name: Reference + url: /reference/ + weight: 7 + - identifier: updates + name: Updates + url: /updates/ + weight: 8 outputFormats: MenuIndex: baseName: menu @@ -65,10 +65,10 @@ outputFormats: mediaType: application/json outputs: home: - - HTML - - RSS - - MenuIndex - - SearchMap + - HTML + - RSS + - MenuIndex + - SearchMap module: _merge: shallow imports: diff --git a/templates/requirements/Makefile b/templates/requirements/Makefile new file mode 100644 index 00000000..533b7c0b --- /dev/null +++ b/templates/requirements/Makefile @@ -0,0 +1,36 @@ +default: + make serve + +hugo: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts + +tidy: + go mod tidy + hugo mod tidy + +refresh: + rm -rf public resources go.sum .hugo_build.lock themes + hugo mod clean + make tidy + make hugo + +serve: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts + +serve-a: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 + +serve-b: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/templates/requirements/config.yaml b/templates/requirements/config.yaml index 9ec4572c..999713d3 100644 --- a/templates/requirements/config.yaml +++ b/templates/requirements/config.yaml @@ -3,7 +3,16 @@ title: "{{ .Title }}" copyright: Template Footer pluralizelisttitles: false params: - sortByFilePath: true + _merge: deep + sortByFilePath: true + enterprise_key: + frontmatter: + - key: author + type: email + strict: false + - key: title + type: text + strict: true markup: goldmark: renderer: @@ -66,15 +75,8 @@ outputs: - SearchMap module: imports: - {{ if .Brand -}} - - path: {{ .Brand }} - mounts: - - source: assets - target: assets - - source: static - target: static - {{- end }} - - path: {{ .Theme }} + - path: github.com/spandigital/presidium-styling-base + - path: github.com/spandigital/presidium-layouts-base enableInlineShortcodes: true frontmatter: lastmod: diff --git a/templates/runbook/Makefile b/templates/runbook/Makefile new file mode 100644 index 00000000..533b7c0b --- /dev/null +++ b/templates/runbook/Makefile @@ -0,0 +1,36 @@ +default: + make serve + +hugo: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info + +drafts: + hugo mod get + hugo --templateMetrics --ignoreCache --logLevel info --buildDrafts + +tidy: + go mod tidy + hugo mod tidy + +refresh: + rm -rf public resources go.sum .hugo_build.lock themes + hugo mod clean + make tidy + make hugo + +serve: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info + +serve-drafts: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info --buildDrafts + +serve-a: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 6060 + +serve-b: + make refresh + hugo server -w --ignoreCache --disableFastRender --logLevel info -p 7070 \ No newline at end of file diff --git a/templates/runbook/config.yaml b/templates/runbook/config.yaml index d65b5308..cf2a6a69 100644 --- a/templates/runbook/config.yaml +++ b/templates/runbook/config.yaml @@ -3,7 +3,16 @@ title: "{{ .Title }}" copyright: Template Footer pluralizelisttitles: false params: - sortByFilePath: true + _merge: deep + sortByFilePath: true + enterprise_key: + frontmatter: + - key: author + type: email + strict: false + - key: title + type: text + strict: true markup: goldmark: renderer: @@ -50,15 +59,8 @@ outputs: - SearchMap module: imports: - {{ if .Brand -}} - - path: {{ .Brand }} - mounts: - - source: assets - target: assets - - source: static - target: static - {{- end }} - - path: {{ .Theme }} + - path: github.com/spandigital/presidium-styling-base + - path: github.com/spandigital/presidium-layouts-base enableInlineShortcodes: true frontmatter: lastmod: From 89420cc355f8f843cd749f04d0ed59d12fd27c97 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Thu, 19 Feb 2026 17:07:00 +0200 Subject: [PATCH 09/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- .github/workflows/ci.yml | 42 +++++++ .github/workflows/release.yml | 2 +- .golangci.yml | 30 +++++ Makefile | 7 +- cmd/convert.go | 15 +-- cmd/root.go | 2 +- docs/content/recipes/hosting/github-pages.md | 10 +- docs/layouts/index.html | 2 +- pkg/configtranslation/configfile.go | 18 +-- .../conversion/fileactions/fileactions.go | 29 ++--- .../fileactions/fileactions_test.go | 8 +- pkg/domain/service/conversion/html/html.go | 2 +- .../conversion/markdown/frontmatter.go | 2 +- .../conversion/markdown/frontmatter_test.go | 2 +- .../service/conversion/markdown/manipulate.go | 40 ++++--- .../service/conversion/markdown/operations.go | 11 +- .../service/conversion/markdown/parse_test.go | 2 +- .../service/generator/generaror_test.go | 4 +- pkg/domain/service/generator/generator.go | 14 ++- pkg/domain/service/hugo/hugo.go | 2 +- .../searchmapvalidation.go | 2 +- pkg/domain/service/template/template.go | 24 ++-- pkg/domain/service/template/template_test.go | 25 ++++ pkg/domain/service/validate/impl.go | 47 ++------ pkg/domain/service/validation/validation.go | 109 +++++++----------- pkg/domain/versioning/versioning.go | 6 +- pkg/domain/wizard/initwzd/impl.go | 26 +++-- pkg/filesystem/fsutil.go | 3 +- pkg/filesystem/fsutil_test.go | 12 +- pkg/utils/fs.go | 8 +- pkg/utils/slug.go | 7 +- 31 files changed, 277 insertions(+), 236 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .golangci.yml create mode 100644 pkg/domain/service/template/template_test.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..f6b37455 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,42 @@ +name: CI v2 +on: + push: + branches: + - main + - develop + - feat/** + pull_request: + branches: + - main + - develop + - feat/** + +jobs: + cli-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-go@v6 + with: + go-version: stable + - name: cli-lint + uses: golangci/golangci-lint-action@v9 + with: + version: latest + args: --timeout=10m + test: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v6 + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable + - name: Run Tests + run: make test || exit 1 + - name: Upload Test Reports + uses: actions/upload-artifact@v6 + with: + name: test-reports + path: reports/tests-cov.out diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9a32b86a..e63c4c6e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,4 +25,4 @@ jobs: version: latest args: release --clean env: - GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} + GITHUB_TOKEN: ${{ github.token }} diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..df81ab1a --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,30 @@ +version: "2" +linters: + default: none + enable: + - errcheck + - govet + - ineffassign + - staticcheck + - unused + - gocyclo + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/Makefile b/Makefile index 096d55ed..cc315ee8 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,10 @@ dist: ## Build distribution binary mkdir -p "dist" go build -trimpath -o "dist/presidium" --tags extended -checks: tidy fmt vet test build +checks: tidy fmt vet lint test build serve-docs: - cd $(DOCSDIR) && make serve \ No newline at end of file + cd $(DOCSDIR) && make serve + +lint: + golangci-lint run --timeout 10m \ No newline at end of file diff --git a/cmd/convert.go b/cmd/convert.go index a6acf520..86b69aaa 100644 --- a/cmd/convert.go +++ b/cmd/convert.go @@ -35,19 +35,6 @@ var convertCmd = &cobra.Command{ func init() { rootCmd.AddCommand(convertCmd) - fs := filesystem.New() - - cwd, err := fs.GetWorkingDir() - if err != nil { - log.Fatal("could not get working dir") - } else { - cwd, err = fs.AbsolutePath(".") - if err != nil { - log.Fatal("something bad happened to get working dir") - } else { - cwd = "." - } - } stagingDir, err := filesystem.AFS.TempDir(os.TempDir(), "staging") if err != nil { @@ -60,7 +47,7 @@ func init() { pflags.StringVarP(&config.Flags.SourceRepoDir, "sourceRepoDir", "s", "", "Source directory") pflags.StringVar(&config.Flags.BrandTheme, "brand", "", "path to brand theme") pflags.StringVar(&config.Flags.SyntaxStyle, "markup", "github", "specify markup theme, other than the default github style") - pflags.StringVarP(&config.Flags.DestinationRepoDir, "destDir", "d", cwd, "Destination directory") + pflags.StringVarP(&config.Flags.DestinationRepoDir, "destDir", "d", ".", "Destination directory") pflags.BoolVar(&config.Flags.AddSlugAndUrl, "slugIt", false, "Add slug and url in the front matter") pflags.BoolVar(&config.Flags.CleanTarget, "clean", true, "Clean the target directory") pflags.BoolVarP(&config.Flags.WeightBasedOnFilename, "weightBasedOnFilename", "w", conversion.Defaults.WeightBasedOnFileName, "Base front matter weight on filename") diff --git a/cmd/root.go b/cmd/root.go index b4a3f490..18ea6744 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -35,7 +35,7 @@ func init() { cobra.OnInitialize(initConfig) rootCmd.PersistentFlags().BoolVar(&debug, config.DebugKey, false, "enables debug logs") rootCmd.PersistentFlags().StringVar(&cfgFile, config.ConfigFileKey, "", "config file (default is $HOME/.presidium.yaml)") - viper.BindPFlag(config.DebugKey, rootCmd.PersistentFlags().Lookup(config.DebugKey)) + _ = viper.BindPFlag(config.DebugKey, rootCmd.PersistentFlags().Lookup(config.DebugKey)) } // initConfig reads in config file and ENV variables if set. diff --git a/docs/content/recipes/hosting/github-pages.md b/docs/content/recipes/hosting/github-pages.md index 1d805168..ee586e12 100644 --- a/docs/content/recipes/hosting/github-pages.md +++ b/docs/content/recipes/hosting/github-pages.md @@ -18,24 +18,24 @@ on: jobs: gh-pages: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest concurrency: group: ${{ github.workflow }}-${{ github.ref }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 persist-credentials: false - name: Setup Hugo - uses: peaceiris/actions-hugo@v2 + uses: peaceiris/actions-hugo@v3 with: hugo-version: 'latest' extended: true - name: Build run: hugo --minify --baseURL `https://.github.io/` - name: Deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./public @@ -47,7 +47,7 @@ fetch from private repositories: ```yaml ... steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 diff --git a/docs/layouts/index.html b/docs/layouts/index.html index 4350700e..8cb454c7 100644 --- a/docs/layouts/index.html +++ b/docs/layouts/index.html @@ -231,7 +231,7 @@ - + diff --git a/pkg/configtranslation/configfile.go b/pkg/configtranslation/configfile.go index 81c9efa2..05749059 100644 --- a/pkg/configtranslation/configfile.go +++ b/pkg/configtranslation/configfile.go @@ -56,13 +56,14 @@ func (j *JekyllConfig) reparsedShowOptionsAsSequenceDictionaries() bool { for k, v := range values { if name, ok = k.(string); ok { if flagged, ok = v.(bool); ok { - if name == "roles" { + switch name { + case "roles": parsed.Roles = flagged - } else if name == "author" { + case "author": parsed.Author = flagged - } else if name == "status" { + case "status": parsed.Status = flagged - } else { + default: log.Debug(fmt.Sprintf("unsupported shop option: [%s:%v]", name, flagged)) } } @@ -89,13 +90,14 @@ func (j *JekyllConfig) reparsedShowOptionsAsDictionary() bool { var flagged bool if option, ok = k.(string); ok { if flagged, ok = v.(bool); ok { - if option == "author" { + switch option { + case "author": parsed.Author = flagged - } else if option == "roles" { + case "roles": parsed.Roles = flagged - } else if option == "status" { + case "status": parsed.Status = flagged - } else { + default: log.Debug(fmt.Sprintf("unsupported: [%s:%v]", option, flagged)) } } diff --git a/pkg/domain/service/conversion/fileactions/fileactions.go b/pkg/domain/service/conversion/fileactions/fileactions.go index 4e0d0077..c3a06162 100644 --- a/pkg/domain/service/conversion/fileactions/fileactions.go +++ b/pkg/domain/service/conversion/fileactions/fileactions.go @@ -61,7 +61,7 @@ func SetRootUrl(contentPath string) error { } func CheckForDirIndex(stagingDir, contentPath string) error { - return filesystem.AFS.Walk(contentPath, func(path string, info os.FileInfo, err error) error { + return filesystem.AFS.Walk(contentPath, func(path string, info os.FileInfo, _ error) error { fmt.Println("Walking", colors.Labels.Info(path)) if isContentPath(path, stagingDir) { return nil @@ -69,8 +69,7 @@ func CheckForDirIndex(stagingDir, contentPath string) error { if filepath.Base(path) == "index.md" { newPath := filepath.Join(filepath.Dir(path), "_index.md") - err = filesystem.AFS.Rename(path, newPath) - if err != nil { + if err := filesystem.AFS.Rename(path, newPath); err != nil { return err } return nil @@ -81,7 +80,7 @@ func CheckForDirIndex(stagingDir, contentPath string) error { } indexPath := filepath.Join(path, "_index.md") - fmt.Println(fmt.Sprintf("Checking %s for _index.md...\n", colors.Labels.Wanted(indexPath))) + fmt.Printf("Checking %s for _index.md...\n", colors.Labels.Wanted(indexPath)) if utils.FileExists(indexPath) { return nil } @@ -97,7 +96,7 @@ func AddFrontMatter(stagingDir, contentPath string) error { } dirUrls = map[string]string{} - return filesystem.AFS.Walk(contentPath, func(path string, info fs.FileInfo, err error) error { + return filesystem.AFS.Walk(contentPath, func(path string, info fs.FileInfo, _ error) error { if isIndex(path) || isContentPath(path, stagingDir) { return nil } @@ -110,8 +109,8 @@ func AddFrontMatter(stagingDir, contentPath string) error { return nil } - md, err := markdownForPath(path) - if err != nil { + md, mdErr := markdownForPath(path) + if mdErr != nil { return nil } @@ -121,8 +120,7 @@ func AddFrontMatter(stagingDir, contentPath string) error { if config.Flags.AddSlugAndUrl { fm.Slug, fm.URL = getSlugAndUrl(stagingDir, md.FrontMatter.Title, path) } - err = markdown.AddFrontMatter(path, fm) - if err != nil { + if err := markdown.AddFrontMatter(path, fm); err != nil { return err } @@ -131,7 +129,7 @@ func AddFrontMatter(stagingDir, contentPath string) error { } func CheckForTitles(contentPath string) error { - return filesystem.AFS.Walk(contentPath, func(path string, info os.FileInfo, err error) error { + return filesystem.AFS.Walk(contentPath, func(path string, info os.FileInfo, _ error) error { if info.IsDir() || !isMdFile(path) { return nil } @@ -148,9 +146,6 @@ func CheckForTitles(contentPath string) error { if isIndex(path) { dir := filepath.Dir(path) md.FrontMatter.Title = titleFromPath(dir) - if err != nil { - return err - } } else { md.FrontMatter.Title = titleFromPath(path) } @@ -221,11 +216,7 @@ func buildWeightMap(contentPath string) (directoryMap, error) { } dir := filepath.Dir(path) - if _, ok := dirMap[dir]; ok { - dirMap[dir] = append(dirMap[dir], path) - } else { - dirMap[dir] = []string{path} - } + dirMap[dir] = append(dirMap[dir], path) return nil }) return dirMap, err @@ -285,7 +276,7 @@ func removeWeightFromFilePath(content string) error { func getDirectorySlug(path string) (string, error) { indexPath := filepath.Join(path, "_index.md") if !utils.FileExists(indexPath) { - return "", errors.New("Index file not found") + return "", errors.New("index file not found") } md, err := markdownForPath(indexPath) diff --git a/pkg/domain/service/conversion/fileactions/fileactions_test.go b/pkg/domain/service/conversion/fileactions/fileactions_test.go index 10901d42..0331545c 100644 --- a/pkg/domain/service/conversion/fileactions/fileactions_test.go +++ b/pkg/domain/service/conversion/fileactions/fileactions_test.go @@ -239,8 +239,12 @@ func mockFrontMatter(path string, fm markdown.FrontMatter) error { Fail("") } - filesystem.FS.Create(path) - markdown.AddFrontMatter(path, fm) + if _, err := filesystem.FS.Create(path); err != nil { + Fail("failed to create file") + } + if err := markdown.AddFrontMatter(path, fm); err != nil { + return err + } return nil } diff --git a/pkg/domain/service/conversion/html/html.go b/pkg/domain/service/conversion/html/html.go index d482b1bc..762fd801 100644 --- a/pkg/domain/service/conversion/html/html.go +++ b/pkg/domain/service/conversion/html/html.go @@ -5,5 +5,5 @@ import ( ) func ContainsHTML(content string) bool { - return strings.Index(content, "<") > -1 && strings.Index(content, ">") > -1 + return strings.Contains(content, "<") && strings.Contains(content, ">") } diff --git a/pkg/domain/service/conversion/markdown/frontmatter.go b/pkg/domain/service/conversion/markdown/frontmatter.go index 9d7cdf53..b4d0f261 100644 --- a/pkg/domain/service/conversion/markdown/frontmatter.go +++ b/pkg/domain/service/conversion/markdown/frontmatter.go @@ -38,7 +38,7 @@ func AddFrontMatter(path string, fm FrontMatter) error { return err } - _, err = io.WriteString(w, string(out)) + _, err = w.Write(out) if err != nil { return err } diff --git a/pkg/domain/service/conversion/markdown/frontmatter_test.go b/pkg/domain/service/conversion/markdown/frontmatter_test.go index 85650d24..5e77a787 100644 --- a/pkg/domain/service/conversion/markdown/frontmatter_test.go +++ b/pkg/domain/service/conversion/markdown/frontmatter_test.go @@ -11,7 +11,7 @@ var _ = Describe("AddFrontMatter", func() { filesystem.SetFileSystem(afero.NewMemMapFs()) BeforeEach(func() { - filesystem.FS.Remove("test.md") + _ = filesystem.FS.Remove("test.md") }) When("adding front matter", func() { diff --git a/pkg/domain/service/conversion/markdown/manipulate.go b/pkg/domain/service/conversion/markdown/manipulate.go index 7ec61fcf..a86f8210 100644 --- a/pkg/domain/service/conversion/markdown/manipulate.go +++ b/pkg/domain/service/conversion/markdown/manipulate.go @@ -2,9 +2,10 @@ package markdown import ( "fmt" - . "github.com/SPANDigital/presidium-hugo/pkg/filesystem" "io" "os" + + "github.com/SPANDigital/presidium-hugo/pkg/filesystem" ) // WriteFrontMatterFunc are for callbacks which allow you to customize @@ -21,7 +22,7 @@ type WriteContentFunc func(content []byte, w io.Writer) error func IsRecognizableMarkdown(path string) bool { fmt.Println("Validating", path) - b, err := AFS.ReadFile(path) // just pass the file name + b, err := filesystem.AFS.ReadFile(path) // just pass the file name if err != nil { return false } @@ -31,9 +32,9 @@ func IsRecognizableMarkdown(path string) bool { // Checks if a markdown file exists, if it doesn't create an empty one func touch(path string) error { - _, err := AFS.Stat(path) + _, err := filesystem.AFS.Stat(path) if os.IsNotExist(err) { - f, err := AFS.Create(path) + f, err := filesystem.AFS.Create(path) if err == nil { _, err = f.WriteString("---\n---\n") if err == nil { @@ -57,7 +58,7 @@ func ManipulateMarkdown(path string, matterFunc WriteFrontMatterFunc, contentFun return err } - b, err := AFS.ReadFile(path) // just pass the file name + b, err := filesystem.AFS.ReadFile(path) // just pass the file name if err != nil { return err } @@ -66,35 +67,40 @@ func ManipulateMarkdown(path string, matterFunc WriteFrontMatterFunc, contentFun if matches == nil { matches = [][]byte{ // we don't care about matches[0] - []byte{}, + {}, []byte("---\n"), - []byte{}, + {}, []byte("---\n"), b, } } - f, err := FS.Create(path) + f, err := filesystem.FS.Create(path) if err != nil { return err } - f.Write(matches[1]) + if _, err := f.Write(matches[1]); err != nil { + return err + } if matterFunc != nil { - err := matterFunc(matches[2], f) - if err != nil { + if err := matterFunc(matches[2], f); err != nil { return err } } else { - f.Write(matches[2]) + if _, err := f.Write(matches[2]); err != nil { + return err + } + } + if _, err := f.Write(matches[3]); err != nil { + return err } - f.Write(matches[3]) if contentFunc != nil { - err := contentFunc(matches[4], f) - if err != nil { + if err := contentFunc(matches[4], f); err != nil { return err } } else { - f.Write(matches[4]) + if _, err := f.Write(matches[4]); err != nil { + return err + } } return f.Close() - } diff --git a/pkg/domain/service/conversion/markdown/operations.go b/pkg/domain/service/conversion/markdown/operations.go index baea471c..1850025e 100644 --- a/pkg/domain/service/conversion/markdown/operations.go +++ b/pkg/domain/service/conversion/markdown/operations.go @@ -296,7 +296,7 @@ func simpleReplaceContentInMarkdown(path string, finds []string, replace string) for _, find := range finds { err := ManipulateMarkdown(path, nil, func(content []byte, w io.Writer) error { strContent := string(content) - if strings.Index(strContent, find) > -1 { + if strings.Contains(strContent, find) { if replace == "" { fmt.Println("Blanking", colors.Labels.Unwanted(find), "in", path) } else { @@ -320,7 +320,7 @@ func replaceContentInMarkdown(path string, replacements []replacement) error { for _, replacement := range replacements { err := ManipulateMarkdown(path, nil, func(content []byte, w io.Writer) error { strContent := string(content) - if strings.Index(strContent, replacement.Find) > -1 { + if strings.Contains(strContent, replacement.Find) { if replacement.Replace == "" { fmt.Println("Blanking", colors.Labels.Unwanted(replacement.Find), "in", path) } else { @@ -408,15 +408,10 @@ func replaceTooltips(path string) error { func ensureCamelCase(input string) string { var snake = regexp.MustCompile("_([A-Za-z])") return snake.ReplaceAllStringFunc(input, func(s string) string { - return strings.ToUpper(strings.Replace(s, "_", "", -1)) + return strings.ToUpper(strings.ReplaceAll(s, "_", "")) }) } -func stripTooltips(strContent string) string { - var TooltipRe = regexp.MustCompile(`(?ms){{< tooltip "(.*?)" >}}`) - return TooltipRe.ReplaceAllString(strContent, "$1") -} - func parseIfStatements(strContent string) string { replacements := []replacement{} allMatches := IfVariablesRe.FindAllStringSubmatch(strContent, -1) diff --git a/pkg/domain/service/conversion/markdown/parse_test.go b/pkg/domain/service/conversion/markdown/parse_test.go index 37ff9397..0d86c90f 100644 --- a/pkg/domain/service/conversion/markdown/parse_test.go +++ b/pkg/domain/service/conversion/markdown/parse_test.go @@ -30,7 +30,7 @@ var _ = Describe("Parse", func() { filesystem.SetFileSystem(afero.NewMemMapFs()) BeforeEach(func() { - filesystem.AFS.Remove("test.md") + _ = filesystem.AFS.Remove("test.md") }) When("parsing markdown file", func() { diff --git a/pkg/domain/service/generator/generaror_test.go b/pkg/domain/service/generator/generaror_test.go index efb4408a..f492e72a 100644 --- a/pkg/domain/service/generator/generaror_test.go +++ b/pkg/domain/service/generator/generaror_test.go @@ -43,7 +43,9 @@ var _ = Describe("Site generation behaviour:", func() { AfterSuite(func() { _ = filesystem.AFS.RemoveAll(workDir) }) BeforeEach(func() { - g = New() + var newErr error + g, newErr = New() + Expect(newErr).ShouldNot(HaveOccurred()) t = model.InitialSiteTarget{ SiteTargetDirectory: filepath.Join(workDir, "testSite"), SiteName: "Test Site", diff --git a/pkg/domain/service/generator/generator.go b/pkg/domain/service/generator/generator.go index b5003123..e885fbed 100644 --- a/pkg/domain/service/generator/generator.go +++ b/pkg/domain/service/generator/generator.go @@ -1,8 +1,8 @@ package generator import ( - "errors" "fmt" + model "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/template" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" @@ -13,11 +13,15 @@ type SiteGenerator interface { Run(target model.InitialSiteTarget) error } -func New() SiteGenerator { +func New() (SiteGenerator, error) { + tmplSvc, err := template.New() + if err != nil { + return nil, fmt.Errorf("initializing template service: %w", err) + } return &gen{ FsUtil: filesystem.New(), - Service: template.New(), - } + Service: tmplSvc, + }, nil } type gen struct { @@ -51,7 +55,7 @@ func (g gen) prepareSiteTarget(t model.InitialSiteTarget) error { } else { switch t.WhenSiteExists { case model.AbortWhenTargetSiteExists: - return errors.New(fmt.Sprintf("site already exists here: %s", t.SiteTargetDirectory)) + return fmt.Errorf("site already exists here: %s", t.SiteTargetDirectory) case model.ReplaceTargetSiteIfExists: if err := g.EmptyDir(t.SiteTargetDirectory); err != nil { return err diff --git a/pkg/domain/service/hugo/hugo.go b/pkg/domain/service/hugo/hugo.go index 69aedc1d..ed5e4891 100644 --- a/pkg/domain/service/hugo/hugo.go +++ b/pkg/domain/service/hugo/hugo.go @@ -10,5 +10,5 @@ func New() Service { } func (s Service) Execute(args ...string) { - commands.Execute(args) + _ = commands.Execute(args) } diff --git a/pkg/domain/service/searchmapvalidation/searchmapvalidation.go b/pkg/domain/service/searchmapvalidation/searchmapvalidation.go index 00bbe5fa..2246b2de 100644 --- a/pkg/domain/service/searchmapvalidation/searchmapvalidation.go +++ b/pkg/domain/service/searchmapvalidation/searchmapvalidation.go @@ -65,7 +65,7 @@ func (v validation) FindUndeclaredFiles(projectDir string) (*validate.FilesRepor return &validate.FilesReport{ Files: missing, - Found: missing != nil && len(missing) > 0, + Found: len(missing) > 0, }, nil } diff --git a/pkg/domain/service/template/template.go b/pkg/domain/service/template/template.go index 721c8969..e842c7fd 100644 --- a/pkg/domain/service/template/template.go +++ b/pkg/domain/service/template/template.go @@ -2,6 +2,7 @@ package template import ( "bytes" + "fmt" "io/fs" "os" "path" @@ -26,32 +27,39 @@ type Service struct { templates fs.FS } -func New() Service { +func New() (Service, error) { fsys := templatesFS if fsys == nil { // Fallback for tests: read templates from the module root filesystem. - fsys = os.DirFS(findModuleRoot()) + root, err := findModuleRoot() + if err != nil { + return Service{}, fmt.Errorf("locating module root: %w", err) + } + fsys = os.DirFS(root) } // Sub-FS into "templates" so callers can use template names directly (e.g. "default"). sub, err := fs.Sub(fsys, "templates") if err != nil { - panic("templates directory not found: " + err.Error()) + return Service{}, fmt.Errorf("templates directory not found: %w", err) } return Service{ templates: sub, - } + }, nil } // findModuleRoot walks up from the working directory to find the module root. -func findModuleRoot() string { - dir, _ := os.Getwd() +func findModuleRoot() (string, error) { + dir, err := os.Getwd() + if err != nil { + return "", fmt.Errorf("unable to determine working directory: %w", err) + } for { if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { - return dir + return dir, nil } parent := filepath.Dir(dir) if parent == dir { - return "." + return ".", nil } dir = parent } diff --git a/pkg/domain/service/template/template_test.go b/pkg/domain/service/template/template_test.go new file mode 100644 index 00000000..a1f47386 --- /dev/null +++ b/pkg/domain/service/template/template_test.go @@ -0,0 +1,25 @@ +package template + +import ( + "testing" + + model "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" +) + +func TestNew_CanLocateTemplates(t *testing.T) { + svc, err := New() + if err != nil { + t.Fatalf("New() returned error: %v", err) + } + + for _, tmpl := range model.SupportedTemplates { + listing, err := svc.GetListing(tmpl.Code()) + if err != nil { + t.Errorf("GetListing(%q) returned error: %v", tmpl.Code(), err) + continue + } + if len(listing) == 0 { + t.Errorf("GetListing(%q) returned no files", tmpl.Code()) + } + } +} diff --git a/pkg/domain/service/validate/impl.go b/pkg/domain/service/validate/impl.go index 022ade37..fb5642b8 100644 --- a/pkg/domain/service/validate/impl.go +++ b/pkg/domain/service/validate/impl.go @@ -2,7 +2,6 @@ package validate import ( "container/list" - "errors" "fmt" "io/fs" "net/url" @@ -48,14 +47,6 @@ func (v validation) hasSeen(f string) bool { return seen } -func (v validation) cleanUp() { - v.seen.Clear() - for k, val := range v.tracked { - val.Init() - delete(v.tracked, k) - } -} - func (v validation) Validate() (model.Report, error) { v.seen.Clear() @@ -78,9 +69,8 @@ func (v validation) Validate() (model.Report, error) { if err != nil { return model.Report{}, err - } else { - return v.newReport(), err } + return v.newReport(), nil } func (v validation) newReport() model.Report { @@ -110,16 +100,12 @@ func (v validation) newReport() model.Report { switch s { case model.Valid: report.Valid = countedLinks - break case model.Broken: report.Broken = countedLinks - break case model.Warning: report.Warning = countedLinks - break case model.External: report.External = countedLinks - break } } @@ -142,11 +128,7 @@ func (v validation) process(path string) error { IsExternal: false, }) - for { - if v.queue.Len() == 0 { - break - } - + for v.queue.Len() > 0 { todo := v.queue.Front() v.queue.Remove(todo) link := todo.Value.(model.Link) @@ -200,8 +182,7 @@ func (v validation) process(path string) error { continue } - var doc *goquery.Document - doc, err = goquery.NewDocumentFromReader(file) + doc, err := goquery.NewDocumentFromReader(file) if err != nil { v.reportLink(link, model.Broken, fmt.Sprintf("file %s is propably not a valid HTML file: %s", link.Uri, err.Error())) } else { @@ -228,9 +209,9 @@ func (v validation) process(path string) error { return } - parsedLinkUrl, err := url.Parse(href) - if err != nil { - link.Message = fmt.Sprintf("%v", err.Error()) + parsedLinkUrl, parseErr := url.Parse(href) + if parseErr != nil { + link.Message = parseErr.Error() return } @@ -257,7 +238,7 @@ func (v validation) process(path string) error { func (v validation) validateAnchor(doc *goquery.Document, link model.Link, anchor string) { link.Uri = strings.Replace(link.Uri, "index.html", anchor, 1) - anchor = strings.Replace(anchor, ".", "\\.", -1) + anchor = strings.ReplaceAll(anchor, ".", "\\.") if len(doc.Find(anchor).Nodes) == 0 { v.reportLink(link, model.Broken, "broken anchor reference") return @@ -287,24 +268,12 @@ func (v validation) validateRemoteAnchor(link model.Link) error { defer file.Close() - doc, err := goquery.NewDocumentFromReader(file) + doc, _ := goquery.NewDocumentFromReader(file) v.validateAnchor(doc, link, anchor) return nil } -func fileOnPath(path string, name string) (string, error) { - file := fmt.Sprintf("%s/%s", path, name) - info, err := filesystem.AFS.Stat(file) - if err != nil { - return file, err - } - if info.IsDir() { - return file, errors.New(fmt.Sprintf("expected file but found directory: %s", file)) - } - return file, nil -} - func (v validation) reportLink(link model.Link, status model.Status, message string) { link.Status = status diff --git a/pkg/domain/service/validation/validation.go b/pkg/domain/service/validation/validation.go index 36938306..cef17f20 100644 --- a/pkg/domain/service/validation/validation.go +++ b/pkg/domain/service/validation/validation.go @@ -2,16 +2,16 @@ package validation import ( "container/list" - "errors" "fmt" + "io/fs" + "net/url" + "os" + "strings" + "github.com/PuerkitoBio/goquery" "github.com/SPANDigital/presidium-hugo/pkg/filesystem" "github.com/SPANDigital/presidium-hugo/pkg/log" "github.com/scylladb/go-set/strset" - "io/fs" - "net/url" - "os" - strings "strings" ) type LinkListener = func(link Link) @@ -56,8 +56,8 @@ type validation struct { tracked map[Status]*list.List // Keep track of collected links per status } -func (validation validation) IsLocal() bool { - return validation.isLocal +func (v validation) IsLocal() bool { + return v.isLocal } func New(path string) Validator { @@ -70,26 +70,18 @@ func New(path string) Validator { } } -func (validation validation) hasSeen(f string) bool { - seen := validation.seen.Has(f) +func (v validation) hasSeen(f string) bool { + seen := v.seen.Has(f) if !seen { - validation.seen.Add(f) + v.seen.Add(f) } return seen } -func (validation validation) cleanUp() { - validation.seen.Clear() - for k, v := range validation.tracked { - v.Init() - delete(validation.tracked, k) - } -} - -func (validation validation) Validate() (Report, error) { - validation.seen.Clear() +func (v validation) Validate() (Report, error) { + v.seen.Clear() - err := filesystem.AFS.Walk(validation.path, func(path string, info fs.FileInfo, err error) error { + err := filesystem.AFS.Walk(v.path, func(path string, info fs.FileInfo, err error) error { if err != nil { log.ErrorWithFields(err, log.Fields{"validation_path": path}) @@ -98,7 +90,7 @@ func (validation validation) Validate() (Report, error) { if !info.IsDir() { log.DebugWithFields("validation started", log.Fields{"validation_path": path}) - err = validation.process(path) + err = v.process(path) if err != nil { log.ErrorWithFields(err, log.Fields{"validation_path": path}) return err @@ -110,13 +102,11 @@ func (validation validation) Validate() (Report, error) { if err != nil { return Report{}, err - } else { - return validation.newReport(), err } - + return v.newReport(), nil } -func (validation validation) newReport() Report { +func (v validation) newReport() Report { report := Report{ Data: make(map[Status][]Link), @@ -127,7 +117,7 @@ func (validation validation) newReport() Report { TotalLinks: 0, } - for s, links := range validation.tracked { + for s, links := range v.tracked { countedLinks := links.Len() report.TotalLinks += countedLinks @@ -145,27 +135,23 @@ func (validation validation) newReport() Report { switch s { case Valid: report.Valid = countedLinks - break case Broken: report.Broken = countedLinks - break case Warning: report.Warning = countedLinks - break case External: report.External = countedLinks - break } } return report } -func (validation validation) process(path string) error { +func (v validation) process(path string) error { s := strings.TrimSpace(strings.ToLower(path)) - if validation.hasSeen(s) { + if v.hasSeen(s) { return nil } @@ -173,23 +159,19 @@ func (validation validation) process(path string) error { return nil } - validation.queue.PushFront(Link{ + v.queue.PushFront(Link{ Uri: path, Location: path, IsExternal: false, }) - for { + for v.queue.Len() > 0 { - if validation.queue.Len() == 0 { - break - } - - todo := validation.queue.Front() - validation.queue.Remove(todo) + todo := v.queue.Front() + v.queue.Remove(todo) link := todo.Value.(Link) - if validation.hasSeen(link.Uri) { + if v.hasSeen(link.Uri) { continue } @@ -198,7 +180,7 @@ func (validation validation) process(path string) error { } if link.IsExternal { - validation.reportLink(link, External, "") + v.reportLink(link, External, "") continue } @@ -225,16 +207,15 @@ func (validation validation) process(path string) error { file, err := filesystem.AFS.OpenFile(link.Uri, os.O_RDONLY, 0666) if err != nil { - validation.reportLink(link, Broken, fmt.Sprintf("Unable to open file %s: %s", link.Uri, err.Error())) + v.reportLink(link, Broken, fmt.Sprintf("Unable to open file %s: %s", link.Uri, err.Error())) continue } - var doc *goquery.Document - doc, err = goquery.NewDocumentFromReader(file) + doc, err := goquery.NewDocumentFromReader(file) if err != nil { - validation.reportLink(link, Broken, fmt.Sprintf("file %s is propably not a valid HTML file: %s", link.Uri, err.Error())) + v.reportLink(link, Broken, fmt.Sprintf("file %s is propably not a valid HTML file: %s", link.Uri, err.Error())) } else { - validation.reportLink(link, Valid, "") + v.reportLink(link, Valid, "") // Find all links referenced by this page! doc.Find("a[href]").Each(func(i int, item *goquery.Selection) { href, ok := item.Attr("href") @@ -245,25 +226,25 @@ func (validation validation) process(path string) error { validationHref = strings.TrimSpace(validationHref) if strings.HasPrefix(validationHref, "mailto:") || strings.HasPrefix(validationHref, "tel:") { - validation.reportLink(link, Warning, fmt.Sprintf("Unhandled url scheme: %s", href)) + v.reportLink(link, Warning, fmt.Sprintf("Unhandled url scheme: %s", href)) } else if strings.Contains(validationHref, "#") { return } - parsedLinkUrl, err := url.Parse(href) + parsedLinkUrl, parseErr := url.Parse(href) - if err != nil { - link.Message = fmt.Sprintf("%v", err.Error()) + if parseErr != nil { + link.Message = parseErr.Error() return } link.IsExternal = len(parsedLinkUrl.Scheme) > 0 - finalUri := fmt.Sprintf("%s%s", validation.path, href) + finalUri := fmt.Sprintf("%s%s", v.path, href) - validation.reportLink(link, Valid, "") + v.reportLink(link, Valid, "") - validation.queue.PushFront(Link{ + v.queue.PushFront(Link{ Uri: finalUri, Location: link.Uri, Label: strings.TrimSpace(item.Text()), @@ -278,28 +259,16 @@ func (validation validation) process(path string) error { return nil } -func fileOnPath(path string, name string) (string, error) { - file := fmt.Sprintf("%s/%s", path, name) - info, err := filesystem.AFS.Stat(file) - if err != nil { - return file, err - } - if info.IsDir() { - return file, errors.New(fmt.Sprintf("expected file but foun directory: %s", file)) - } - return file, nil -} - -func (validation validation) reportLink(link Link, status Status, message string) { +func (v validation) reportLink(link Link, status Status, message string) { link.Status = status link.Message = message - collection, found := validation.tracked[status] + collection, found := v.tracked[status] if !found { collection = list.New() - validation.tracked[status] = collection + v.tracked[status] = collection } collection.PushBack(link) diff --git a/pkg/domain/versioning/versioning.go b/pkg/domain/versioning/versioning.go index cd58ff5b..bf5a4dac 100644 --- a/pkg/domain/versioning/versioning.go +++ b/pkg/domain/versioning/versioning.go @@ -126,8 +126,8 @@ func (v *versioning) persist() { panic(err) } defer file.Close() - _, _ = file.WriteString(fmt.Sprintf("%s\n", strconv.FormatBool(v.enabled))) - _, _ = file.WriteString(fmt.Sprintf("%d\n", v.versionNo)) + _, _ = fmt.Fprintf(file, "%s\n", strconv.FormatBool(v.enabled)) + _, _ = fmt.Fprintf(file, "%d\n", v.versionNo) _ = file.Sync() } @@ -152,12 +152,10 @@ func (v *versioning) load() { if b, err := strconv.ParseBool(scanner.Text()); err == nil { v.enabled = b } - break case 1: if i, err := strconv.ParseInt(scanner.Text(), 10, 16); err == nil { v.versionNo = int(i) } - break } } } diff --git a/pkg/domain/wizard/initwzd/impl.go b/pkg/domain/wizard/initwzd/impl.go index 3981411a..2e45a076 100644 --- a/pkg/domain/wizard/initwzd/impl.go +++ b/pkg/domain/wizard/initwzd/impl.go @@ -4,7 +4,7 @@ import ( "strings" "github.com/SPANDigital/presidium-hugo/pkg/config" - . "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" + model "github.com/SPANDigital/presidium-hugo/pkg/domain/model/generator" "github.com/SPANDigital/presidium-hugo/pkg/domain/service/generator" "github.com/SPANDigital/presidium-hugo/pkg/domain/wizard" "github.com/SPANDigital/presidium-hugo/pkg/log" @@ -42,7 +42,11 @@ func (i initWizard) Run() { return } - g := generator.New() + g, err := generator.New() + if err != nil { + log.Error(err) + return + } siteModel := generateSiteModel() err = g.Run(siteModel) @@ -52,11 +56,11 @@ func (i initWizard) Run() { } -func generateSiteModel() InitialSiteTarget { +func generateSiteModel() model.InitialSiteTarget { - mustHaveTemplate := func() Template { + mustHaveTemplate := func() model.Template { templateName := viper.GetString(config.TemplateNameKey) - template, err := GetTemplate(templateName) + template, err := model.GetTemplate(templateName) if err != nil { log.FatalWithFields(err, log.Fields{ "template_name": templateName, @@ -65,13 +69,13 @@ func generateSiteModel() InitialSiteTarget { return template } - return InitialSiteTarget{ + return model.InitialSiteTarget{ SiteTargetDirectory: viper.GetString(config.ProjectNameKey), SiteName: viper.GetString(config.ProjectNameKey), SiteTitle: viper.GetString(config.TitleKey), BrandingModelUrl: viper.GetString(config.BrandKey), Template: mustHaveTemplate(), - WhenSiteExists: AbortWhenTargetSiteExists, + WhenSiteExists: model.AbortWhenTargetSiteExists, } } @@ -127,9 +131,9 @@ func askBrandRepo() error { } func promptSupportedTemplates() { - items := make([]ItemSelection, 0) - for _, item := range SupportedTemplates { - items = append(items, ItemSelection{ + items := make([]model.ItemSelection, 0) + for _, item := range model.SupportedTemplates { + items = append(items, model.ItemSelection{ Name: item.Name(), Description: item.Description(), }) @@ -144,6 +148,6 @@ func promptSupportedTemplates() { if err != nil { log.FatalWithFields("error selecting template", log.Fields{"error": err}) } - selected := SupportedTemplates[idx] + selected := model.SupportedTemplates[idx] viper.Set(config.TemplateNameKey, selected.Code()) } diff --git a/pkg/filesystem/fsutil.go b/pkg/filesystem/fsutil.go index e4649390..8414c1f5 100644 --- a/pkg/filesystem/fsutil.go +++ b/pkg/filesystem/fsutil.go @@ -1,7 +1,6 @@ package filesystem import ( - "errors" "fmt" "github.com/otiai10/copy" "github.com/spf13/afero" @@ -107,7 +106,7 @@ func (f fsUtil) EmptyDir(dir string) error { } if !info.IsDir() { - return errors.New(fmt.Sprintf("path is not a directory: %s", dir)) + return fmt.Errorf("path is not a directory: %s", dir) } parentDirs, err := FS.Open(dir) diff --git a/pkg/filesystem/fsutil_test.go b/pkg/filesystem/fsutil_test.go index 25ccc7d5..cf4a5ac4 100644 --- a/pkg/filesystem/fsutil_test.go +++ b/pkg/filesystem/fsutil_test.go @@ -33,8 +33,8 @@ var _ = Describe("Filesystem", func() { dstFileName := "testfile.md" testDir := "/home/testuser/testdata/copy/test" BeforeEach(func() { - FS.MkdirAll(testDir, 0755) - AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, srcFileName), []byte("Hello World!"), 0644) + _ = FS.MkdirAll(testDir, 0755) + _ = AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, srcFileName), []byte("Hello World!"), 0644) }) AfterEach(func() { // no need to clean up - memory mapped filesystem will just go away @@ -68,10 +68,10 @@ var _ = Describe("Filesystem", func() { testDir := "/home/testuser/testdata/copydir/test" file1, file2, file3 := "file1.md", "file2.md", "file3.md" BeforeEach(func() { - FS.MkdirAll(testDir, 0755) - AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file1), []byte("Hello World!"), 0644) - AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file2), []byte("Hello World!"), 0644) - AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file3), []byte("Hello World!"), 0644) + _ = FS.MkdirAll(testDir, 0755) + _ = AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file1), []byte("Hello World!"), 0644) + _ = AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file2), []byte("Hello World!"), 0644) + _ = AFS.WriteFile(fmt.Sprintf("%s/%s", testDir, file3), []byte("Hello World!"), 0644) }) AfterEach(func() { // no need to clean up - memory mapped filesystem will just go away diff --git a/pkg/utils/fs.go b/pkg/utils/fs.go index 9c398d6a..db0d1f05 100644 --- a/pkg/utils/fs.go +++ b/pkg/utils/fs.go @@ -21,10 +21,10 @@ func WalkRename(path string, rename func(path string, info os.FileInfo) (*string } var renames []Rename - err := filesystem.AFS.Walk(path, func(path string, info os.FileInfo, err error) error { - newPath, err := rename(path, info) - if err != nil { - return err + err := filesystem.AFS.Walk(path, func(path string, info os.FileInfo, _ error) error { + newPath, renameErr := rename(path, info) + if renameErr != nil { + return renameErr } if newPath != nil { diff --git a/pkg/utils/slug.go b/pkg/utils/slug.go index 82008564..3bbb85eb 100644 --- a/pkg/utils/slug.go +++ b/pkg/utils/slug.go @@ -3,6 +3,9 @@ package utils import ( "regexp" "strings" + + "golang.org/x/text/cases" + "golang.org/x/text/language" ) // UnSlugify turns "something-like_this" into "Something Like This" @@ -10,7 +13,7 @@ func UnSlugify(name string) string { re := regexp.MustCompile(`(([\d.]+)\s)?(.+)?`) reDividers := regexp.MustCompile(`[\-_]+`) name = reDividers.ReplaceAllString(name, " ") - name = strings.Title(name) + name = cases.Title(language.English).String(name) matches := re.FindStringSubmatch(name) if matches != nil { return strings.TrimSpace(matches[3]) @@ -29,7 +32,7 @@ func Slugify(name string) string { // TitleToSlug Take a capitalized title and turn it into a slug func TitleToSlug(title string) string { title = strings.ToLower(title) - title = strings.Replace(title, "&", "and", -1) + title = strings.ReplaceAll(title, "&", "and") title = Slugify(title) return title } From be585b955d14df668351fe4401fe805ae1ea3caf Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Thu, 19 Feb 2026 17:08:56 +0200 Subject: [PATCH 10/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6b37455..ce280e42 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: CI v2 +name: CI on: push: branches: From cbe773f9725e82f02262436c6f43cdb5363c4be9 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Thu, 19 Feb 2026 17:12:32 +0200 Subject: [PATCH 11/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- todos.yaml | 577 ----------------------------------------------------- 1 file changed, 577 deletions(-) delete mode 100644 todos.yaml diff --git a/todos.yaml b/todos.yaml deleted file mode 100644 index 0a37898f..00000000 --- a/todos.yaml +++ /dev/null @@ -1,577 +0,0 @@ -todos: - - id: 1 - status: complete - files: - - go.mod - - go.sum - description: | - Update root go.mod to use Go 1.25. - Current version is 1.23.0 with toolchain go1.23.9. - Update the go directive to go 1.25 and ensure toolchain is set to go1.25.0 or later. - action-taken: Updated go directive to 1.25 and toolchain to go1.25.0 in root go.mod. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 2 - status: complete - files: - - .github/workflows/goreleaser.yml - description: | - Update GitHub Actions goreleaser workflow to use Go 1.25. - Current version specified is 1.16 which is severely outdated. - Update the 'go-version' field in the setup-go action to use '1.25.x'. - action-taken: Updated go-version from 1.16 to 1.25.x in goreleaser.yml. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 3 - status: complete - files: - - templates/blog/go.mod - - templates/default/go.mod - - templates/design/go.mod - - templates/onboarding/go.mod - - templates/requirements/go.mod - - templates/runbook/go.mod - - docs/go.mod - description: | - Update all template and docs go.mod files to use Go 1.25. - These directory go.mod files need to be updated to match the root go.mod version. - Check each file and update the 'go' directive to 1.25. - action-taken: | - Updated go directive to 1.25 in all 7 go.mod files: - - docs/go.mod (was 1.18) - - templates/blog/go.mod (was 1.23) - - templates/default/go.mod (was 1.23) - - templates/design/go.mod (was 1.23) - - templates/onboarding/go.mod (was 1.23) - - templates/requirements/go.mod (was 1.16) - - templates/runbook/go.mod (was 1.16) - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 4 - status: complete - files: - - go.mod - - go.sum - - pkg/domain/service/conversion/markdown/operations.go - description: | - Update Hugo dependency to v0.155.3 (latest stable as of 2026-02-17). - Current version is v0.87.0 which is very outdated (released 2021). - Run 'go get github.com/gohugoio/hugo@v0.155.3'. - Note: Hugo's commands package API changed significantly between v0.87 and v0.110+. - The commands.Execute(args) function used in pkg/domain/service/hugo/hugo.go - and the common/paths package used in operations.go may need code changes. - Recent releases: v0.155.3, v0.155.2, v0.155.1, v0.155.0, v0.154.5. - action-taken: | - Updated Hugo from v0.87.0 to v0.155.3. - Replaced removed paths.IsAbsURL() with a local isAbsURL() using net/url stdlib. - Removed the github.com/gohugoio/hugo/common/paths import from operations.go. - commands.Execute(args) still exists with compatible signature. - Ran go mod tidy. Full project compiles cleanly. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 5 - status: complete - files: - - .github/workflows/gh-pages.yml - - docs/content/recipes/hosting/github-pages.md - description: | - Update Hugo version references in GitHub Actions workflows and documentation. - The gh-pages.yml workflow uses 'latest' which is good. - Update any hardcoded version references in documentation to match the new Hugo version. - The docs/content/recipes/hosting/github-pages.md file has a hardcoded '0.87.0' reference. - action-taken: | - Updated hardcoded hugo-version '0.87.0' to 'latest' in github-pages.md documentation. - gh-pages.yml already uses 'latest' - no change needed. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 6 - status: complete - files: - - tools/hugo/go.mod - description: | - Update the Hugo submodule in tools/hugo to the latest version. - This appears to be a git submodule tracking the Hugo repository. - Consider updating to the latest Hugo commit or tag. - Run 'cd tools/hugo && git fetch && git checkout '. - action-taken: | - Submodule already at recent Hugo master (2c80dee35). No update needed. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 7 - status: complete - files: - - pkg/domain/service/template/template.go - - embedded.go - - main.go - description: | - Replace packr/v2 imports with Go's native embed package in template.go. - Current code uses: - - "github.com/gobuffalo/packd" - - "github.com/gobuffalo/packr/v2" - Replace with: - - "embed" - Update the Service struct to use embed.FS instead of packd.Box. - Add //go:embed directive to embed the templates directory. - action-taken: | - Rewrote template.go to use io/fs.FS interface instead of packr. - Created embedded.go at project root with //go:embed all:templates directive. - Updated main.go to pass embedded FS via template.SetFS(). - Added fs.Sub() to root the FS at "templates/" for backward compatibility. - Added findModuleRoot() fallback for tests using os.DirFS. - Renamed templates/*/go.mod to go.mod.tmpl (embed can't cross module boundaries). - Added .tmpl suffix stripping in ProcessTemplate output filenames. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 8 - status: complete - files: - - pkg/domain/service/template/template.go - description: | - Update the New() function to remove packr initialization. - action-taken: Completed as part of todo 7. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 9 - status: complete - files: - - pkg/domain/service/template/template.go - description: | - Refactor GetListing() method to work with embed.FS. - action-taken: Replaced WalkPrefix with fs.WalkDir as part of todo 7. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 10 - status: complete - files: - - pkg/domain/service/template/template.go - description: | - Refactor ProcessDirTemplates() method to work with embed.FS. - action-taken: Replaced WalkPrefix with fs.WalkDir as part of todo 7. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 11 - status: complete - files: - - pkg/domain/service/template/template.go - description: | - Refactor ProcessTemplate() method to work with embed.FS. - action-taken: Replaced FindString with fs.ReadFile as part of todo 7. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 12 - status: complete - files: - - go.mod - - go.sum - description: | - Remove packr dependencies from go.mod. - action-taken: | - Ran go mod tidy after removing packr imports. - Both gobuffalo/packd and gobuffalo/packr/v2 removed from go.mod. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 13 - status: complete - files: - - Makefile - description: | - Remove 'pack' target from Makefile. - action-taken: Removed entire pack target from Makefile. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 14 - status: complete - files: - - Makefile - description: | - Update 'build' target in Makefile to remove packr dependencies. - action-taken: Simplified build target to just 'go build -o $(FILENAME) main.go'. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 15 - status: complete - files: - - .goreleaser.yaml - description: | - Remove packr2 command from .goreleaser.yaml before hooks. - action-taken: Removed '- packr2' from before hooks. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 16 - status: complete - files: - - .github/workflows/goreleaser.yml - description: | - Remove packr installation step from GitHub Actions goreleaser workflow. - action-taken: | - Removed 'Get packr' step and 'Prepare' (git reset --hard) step from goreleaser.yml. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 17 - status: complete - files: - - Makefile - description: | - Modernize the 'test' target in Makefile. - action-taken: | - Updated test target: use 'go test ./...' with -race and -timeout 120s flags. - Removed TESTDIRS variable and manual directory filtering. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 18 - status: complete - files: - - Makefile - description: | - Modernize the 'dist' target in Makefile. - action-taken: Added -trimpath flag for reproducible builds. Used mkdir -p instead of shell conditional. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 19 - status: complete - files: - - Makefile - description: | - Add modern Go tooling targets to Makefile. - action-taken: Added fmt, vet, and tidy targets. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 20 - status: complete - files: - - Makefile - description: | - Add help target to Makefile for better discoverability. - action-taken: | - Added help target as default goal with grep/awk pattern. - Added ## descriptions to all targets. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 21 - status: complete - files: - - .github/workflows/goreleaser.yml - description: | - Update goreleaser GitHub Actions workflow to use modern action versions. - action-taken: | - Updated actions/checkout@v2 -> v4, actions/setup-go@v2 -> v5, - goreleaser/goreleaser-action@v2 -> v6. Also changed --rm-dist to --clean. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 22 - status: complete - files: - - .github/workflows/gh-pages.yml - description: | - Update gh-pages GitHub Actions workflow to use modern action versions. - action-taken: | - Updated actions/checkout@v2 -> v4, peaceiris/actions-hugo@v2 -> v3, - peaceiris/actions-gh-pages@v3 -> v4. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 23 - status: complete - files: - - go.mod - - go.sum - description: | - Run 'go mod tidy' and 'go mod verify' after all Go version updates. - action-taken: Ran go mod tidy && go mod verify. All modules verified. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 24 - status: complete - files: - - main.go - - cmd/ - - pkg/ - description: | - Test the application after removing packr to ensure embed works correctly. - action-taken: | - Built binary successfully (go build -o /tmp/presidium-test .). - Verified CLI runs and shows help. All tests pass. - Fixed Makefile build target to use '.' instead of 'main.go' for multi-file main package. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 25 - status: complete - files: - - README.md - - docs/content/ - description: | - Update documentation to reflect the new Go and Hugo versions. - action-taken: | - Checked README.md and docs/content/ for version references. - No packr, old Go, or old Hugo version references found in docs. - Hugo version in github-pages.md was already updated in todo 5. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 26 - status: complete - files: - - go.mod - - go.sum - - pkg/domain/service/conversion/fileactions/fileactions.go - description: | - Replace github.com/pkg/errors with stdlib errors and fmt.Errorf. - action-taken: | - Replaced errors.Wrap -> fmt.Errorf with %w, errors.Errorf -> fmt.Errorf. - Changed import from "github.com/pkg/errors" to "errors" (stdlib). - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 27 - status: complete - files: - - go.mod - - go.sum - - pkg/configtranslation/configfile.go - - pkg/domain/service/conversion/markdown/parse.go - - pkg/domain/service/conversion/markdown/frontmatter.go - description: | - Migrate gopkg.in/yaml.v2 to gopkg.in/yaml.v3. - action-taken: Changed import from "gopkg.in/yaml.v2" to "gopkg.in/yaml.v3" in all 3 files. Tests pass. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 28 - status: complete - files: - - go.mod - - go.sum - - pkg/domain/service/template/template.go - description: | - Update github.com/Masterminds/sprig from v2 (+incompatible) to v3. - action-taken: | - Updated import to "github.com/Masterminds/sprig/v3". - Ran go get github.com/Masterminds/sprig/v3@latest (v3.3.0). - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 29 - status: complete - files: - - go.mod - - go.sum - - pkg/domain/service/conversion/markdown/markdown_test.go - - pkg/domain/service/generator/generaror_test.go - description: | - Replace github.com/Masterminds/goutils with math/rand/v2 from stdlib. - action-taken: | - Replaced goutils.RandomAlphaNumeric(4) with fmt.Sprintf("%04d", rand.IntN(10000)). - Replaced goutils.RandomNumeric(6) with fmt.Sprintf("%06d", rand.IntN(1000000)). - Removed goutils dependency. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 30 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/spf13/cobra from v1.5.0 to latest stable. - action-taken: Updated cobra to v1.10.2 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 31 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/spf13/viper from v1.10.0 to latest stable. - action-taken: Updated viper to v1.21.0 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 32 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/spf13/afero from v1.8.2 to latest stable. - action-taken: Updated afero to v1.15.0 via go get (pulled in by Hugo update). - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 33 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/sirupsen/logrus from v1.8.1 to latest stable. - action-taken: Updated logrus to v1.9.4 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 34 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/PuerkitoBio/goquery from v1.7.1 to latest stable. - action-taken: Updated goquery to v1.11.0 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 35 - status: complete - files: - - go.mod - - go.sum - - pkg/domain/service/conversion/conversion.go - description: | - Update github.com/otiai10/copy from v1.2.0 to latest stable. - action-taken: | - Updated copy to v1.14.1 via go get. - Fixed API change: Skip func signature changed from (src string) to (srcinfo os.FileInfo, src, dest string). - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 36 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/manifoldco/promptui from v0.8.0 to latest stable. - action-taken: Updated promptui to v0.9.0 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - - - id: 37 - status: complete - files: - - go.mod - - go.sum - description: | - Update github.com/onsi/gomega from v1.10.1 to latest stable. - action-taken: Updated gomega to v1.39.1 via go get. - created_at: 2026-02-17T00:00:00Z - updated_at: 2026-02-17T00:00:00Z - completed_at: 2026-02-17T00:00:00Z - -notes: | - Migration Strategy: - - 1. Go Version Update (Tasks 1-3): - - Update root and all template go.mod files to Go 1.25 - - Update GitHub Actions workflows - - This is the foundation for other updates - - 2. Hugo Version Update (Tasks 4-6): - - Update Hugo dependency to v0.155.3 (latest stable as of 2026-02-17) - - Update Hugo submodule if needed - - Update documentation references - - 3. Remove Packr (Tasks 7-16): - - Convert template service to use embed.FS (tasks 7-11) - - Remove packr dependencies from go.mod (task 12) - - Clean up Makefile (tasks 13-14) - - Update goreleaser config (task 15) - - Update GitHub Actions (task 16) - - This is the most complex migration - - 4. Modernize Build Process (Tasks 17-22): - - Update Makefile with modern Go tooling practices - - Add helpful development targets - - Update GitHub Actions to latest versions - - 5. Remove Deprecated Packages (Tasks 26-29): - - Replace pkg/errors with stdlib errors/fmt.Errorf (task 26) - - Migrate yaml.v2 to yaml.v3 (task 27) - - Update Masterminds/sprig v2 to v3 (task 28) - - Replace Masterminds/goutils with stdlib alternatives (task 29) - - 6. Update Outdated Packages (Tasks 30-37): - - cobra v1.5.0 -> v1.8.x (task 30) - - viper v1.10.0 -> v1.18.x (task 31) - - afero v1.8.2 -> v1.11.x (task 32) - - logrus v1.8.1 -> v1.9.x (task 33) - - goquery v1.7.1 -> v1.9.x (task 34) - - otiai10/copy v1.2.0 -> v1.14.x (task 35) - - promptui v0.8.0 -> v0.9.x (task 36) - - gomega v1.10.1 -> v1.36.x (task 37) - - 7. Finalize and Test (Tasks 23-25): - - Run go mod tidy - - Test thoroughly - - Update documentation - - Important Notes: - - Go 1.25 is the target version for this upgrade - - Hugo latest stable is v0.155.3 (as of 2026-02-17) - - embed.FS is available since Go 1.16 and is the modern replacement for packr - - The tools/hugo directory appears to be a git submodule with Hugo source - - All changes should be tested thoroughly before merging - - Breaking Changes: - - Minimum Go version will be 1.25 (up from 1.23.0) - - Hugo dependency will jump from v0.87.0 to v0.155.3 (major version jump) - - packr removal may affect any external tools depending on generated packr files From b1cc45e25488b76451a5fb0b790c003abc5ce10e Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Thu, 19 Feb 2026 17:17:39 +0200 Subject: [PATCH 12/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- go.mod | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b752b209..9270a875 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/SPANDigital/presidium-hugo go 1.25 -toolchain go1.25.0 - require ( github.com/Masterminds/sprig/v3 v3.3.0 github.com/PuerkitoBio/goquery v1.11.0 @@ -20,6 +18,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/spf13/viper v1.21.0 golang.org/x/mod v0.32.0 + golang.org/x/text v0.33.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -204,7 +203,6 @@ require ( golang.org/x/oauth2 v0.32.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect - golang.org/x/text v0.33.0 // indirect golang.org/x/time v0.14.0 // indirect golang.org/x/tools v0.41.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect From 04bdcfbc8c502b05a1a33f91c3233462e9819158 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Fri, 20 Feb 2026 11:09:19 +0200 Subject: [PATCH 13/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a222ca9..12d9da5c 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,26 @@ Read Presidium's [documentation](http://presidium.spandigital.net/overview/) for For detailed instructions on getting started, please see [Getting Started](http://presidium.spandigital.net/getting-started/). # Features and Issues -All upcoming features and issues are tracked [here](https://github.com/SPANDigital/presidium/issues). \ No newline at end of file +All upcoming features and issues are tracked [here](https://github.com/SPANDigital/presidium/issues). + +# Development + +Presidium embeds a specific verison of [Hugo](https://github.com/gohugoio/hugo) to ensure that the user is building their docs with a Hugo version that is compatible with our Presidium Themes. + +Since we require the embedded Hugo version to be built into a binary, some of the cli commands only work after running the `make build` cmd. + +## Getting started + +Run the build command: +``` +make build +``` + +Move the binary into a valid documentation site directory, then run the hugo build cmd: +``` +./presidium hugo +``` +Or if you want to serve the site after the hugo build, then run: +``` +./presidium hugo server +``` \ No newline at end of file From cbd3a87bc27a7ccd1a1736338f33abbb00fe7e02 Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Fri, 20 Feb 2026 11:26:09 +0200 Subject: [PATCH 14/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce280e42..e826ed95 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,3 +40,5 @@ jobs: with: name: test-reports path: reports/tests-cov.out + - name: Run Build + run: make build || exit 1 From 89f64f7b83b4c3349bfe97c0c95a04a6d101752f Mon Sep 17 00:00:00 2001 From: Matthew Moon Date: Fri, 20 Feb 2026 11:27:35 +0200 Subject: [PATCH 15/15] feat: PRSDM-10268 bring Presidium Open Source up to date --- .github/workflows/ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e826ed95..ecea2500 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,5 +40,14 @@ jobs: with: name: test-reports path: reports/tests-cov.out + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v6 + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: stable - name: Run Build run: make build || exit 1