From db82e45716790e945f598c95b399a70c047a0c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 3 Dec 2025 09:44:40 -0800 Subject: [PATCH 001/156] deps(build): upgrade Go to 1.25.5 (#5059) --- .github/workflows/lint.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2bae7f495cb..527c0a0a4fe 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,7 +37,7 @@ jobs: uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 with: cache: false - go-version-input: '1.25.4' + go-version-input: '1.25.5' # An explicit Go version is needed for govulncheck-action since internally # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' # directive in the 'go.mod' file. diff --git a/go.mod b/go.mod index dc53cb8ecd0..85c1817a84c 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25 -toolchain go1.25.4 +toolchain go1.25.5 require ( cloud.google.com/go/storage v1.57.2 From f36079b69ea68ec166114ca59647abb1462735ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:28:32 -0800 Subject: [PATCH 002/156] build(deps): bump the common-golang-dependencies group with 10 updates (#5067) Bumps the common-golang-dependencies group with 10 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.57.2` | `1.58.0` | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.45.0` | `0.46.0` | | [golang.org/x/mod](https://github.com/golang/mod) | `0.30.0` | `0.31.0` | | [golang.org/x/net](https://github.com/golang/net) | `0.47.0` | `0.48.0` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.33.0` | `0.34.0` | | [golang.org/x/sync](https://github.com/golang/sync) | `0.18.0` | `0.19.0` | | [golang.org/x/sys](https://github.com/golang/sys) | `0.38.0` | `0.39.0` | | [golang.org/x/term](https://github.com/golang/term) | `0.37.0` | `0.38.0` | | [golang.org/x/text](https://github.com/golang/text) | `0.31.0` | `0.32.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.256.0` | `0.257.0` | Updates `cloud.google.com/go/storage` from 1.57.2 to 1.58.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/storage/v1.57.2...spanner/v1.58.0) Updates `golang.org/x/crypto` from 0.45.0 to 0.46.0 - [Commits](https://github.com/golang/crypto/compare/v0.45.0...v0.46.0) Updates `golang.org/x/mod` from 0.30.0 to 0.31.0 - [Commits](https://github.com/golang/mod/compare/v0.30.0...v0.31.0) Updates `golang.org/x/net` from 0.47.0 to 0.48.0 - [Commits](https://github.com/golang/net/compare/v0.47.0...v0.48.0) Updates `golang.org/x/oauth2` from 0.33.0 to 0.34.0 - [Commits](https://github.com/golang/oauth2/compare/v0.33.0...v0.34.0) Updates `golang.org/x/sync` from 0.18.0 to 0.19.0 - [Commits](https://github.com/golang/sync/compare/v0.18.0...v0.19.0) Updates `golang.org/x/sys` from 0.38.0 to 0.39.0 - [Commits](https://github.com/golang/sys/compare/v0.38.0...v0.39.0) Updates `golang.org/x/term` from 0.37.0 to 0.38.0 - [Commits](https://github.com/golang/term/compare/v0.37.0...v0.38.0) Updates `golang.org/x/text` from 0.31.0 to 0.32.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.31.0...v0.32.0) Updates `google.golang.org/api` from 0.256.0 to 0.257.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.256.0...v0.257.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.58.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/crypto dependency-version: 0.46.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/mod dependency-version: 0.31.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/net dependency-version: 0.48.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/oauth2 dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sync dependency-version: 0.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sys dependency-version: 0.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/term dependency-version: 0.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/text dependency-version: 0.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.257.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 36 +++++++++++++------------- go.sum | 80 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/go.mod b/go.mod index 85c1817a84c..00caeaf789c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25 toolchain go1.25.5 require ( - cloud.google.com/go/storage v1.57.2 + cloud.google.com/go/storage v1.58.0 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3 @@ -58,16 +58,16 @@ require ( go.opentelemetry.io/otel/sdk v1.38.0 go.opentelemetry.io/otel/trace v1.38.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.45.0 + golang.org/x/crypto v0.46.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.30.0 - golang.org/x/net v0.47.0 - golang.org/x/oauth2 v0.33.0 - golang.org/x/sync v0.18.0 - golang.org/x/sys v0.38.0 - golang.org/x/term v0.37.0 - golang.org/x/text v0.31.0 - google.golang.org/api v0.256.0 + golang.org/x/mod v0.31.0 + golang.org/x/net v0.48.0 + golang.org/x/oauth2 v0.34.0 + golang.org/x/sync v0.19.0 + golang.org/x/sys v0.39.0 + golang.org/x/term v0.38.0 + golang.org/x/text v0.32.0 + google.golang.org/api v0.257.0 google.golang.org/grpc v1.77.0 google.golang.org/protobuf v1.36.10 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -76,18 +76,18 @@ require ( require ( al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.24.0 // indirect - cloud.google.com/go v0.121.6 // indirect + cloud.google.com/go v0.123.0 // 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/iam v1.5.3 // indirect cloud.google.com/go/monitoring v1.24.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.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/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -137,7 +137,7 @@ require ( github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect @@ -146,8 +146,8 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/time v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect + google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 59bcce9c2c7..26e35d07b5f 100644 --- a/go.sum +++ b/go.sum @@ -2,24 +2,24 @@ al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXy al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= 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.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= -cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -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/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= +cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= 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.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= 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/storage v1.57.2 h1:sVlym3cHGYhrp6XZKkKb+92I1V42ks2qKKpB0CF5Mb4= -cloud.google.com/go/storage v1.57.2/go.mod h1:n5ijg4yiRXXpCu0sJTD6k+eMf7GRrJmPyr9YxLXGHOk= +cloud.google.com/go/storage v1.58.0 h1:PflFXlmFJjG/nBeR9B7pKddLQWaFaRWx4uUi/LyNxxo= +cloud.google.com/go/storage v1.58.0/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc= @@ -43,12 +43,12 @@ github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 h1:IEjq88XO4PuBDcv github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5/go.mod h1:exZ0C/1emQJAw5tHOaUDyY1ycttqBAPcxuzf7QbY6ec= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -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/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= @@ -293,8 +293,8 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs= go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= @@ -303,8 +303,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZF go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= @@ -325,44 +325,44 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo= -golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= 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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI= -google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964= -google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= -google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= -google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= -google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA= +google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4= +google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc= +google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc= +google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4= +google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= From e25a7ae3550137a1892652a72e04720a6521a0c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 01:53:19 +0000 Subject: [PATCH 003/156] build(deps): bump the telemetry-dependencies group with 4 updates (#5068) Bumps the telemetry-dependencies group with 4 updates: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go). Updates `go.opentelemetry.io/otel` from 1.38.0 to 1.39.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...v1.39.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.38.0 to 1.39.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...v1.39.0) Updates `go.opentelemetry.io/otel/sdk` from 1.38.0 to 1.39.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...v1.39.0) Updates `go.opentelemetry.io/otel/trace` from 1.38.0 to 1.39.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.38.0...v1.39.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel dependency-version: 1.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.39.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 22 +++++++++++----------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index 00caeaf789c..7de4b288466 100644 --- a/go.mod +++ b/go.mod @@ -53,10 +53,10 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.6 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.38.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 - go.opentelemetry.io/otel/sdk v1.38.0 - go.opentelemetry.io/otel/trace v1.38.0 + go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 + go.opentelemetry.io/otel/sdk v1.39.0 + go.opentelemetry.io/otel/trace v1.39.0 go.uber.org/zap v1.27.1 golang.org/x/crypto v0.46.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 @@ -118,7 +118,7 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect github.com/googleapis/gax-go/v2 v2.15.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect @@ -139,15 +139,15 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect - go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/time v0.14.0 // indirect google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 26e35d07b5f..5d0589614c2 100644 --- a/go.sum +++ b/go.sum @@ -161,8 +161,8 @@ github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81 github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= @@ -297,24 +297,24 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= -go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 h1:in9O8ESIOlwJAEGTkkf34DesGRAc/Pn8qJ7k3r/42LM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0/go.mod h1:Rp0EXBm5tfnv0WL+ARyO/PHBEaEAT8UUHQ6AGJcSq6c= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= -go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= -go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= -go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= -go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= -go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= -go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= -go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= -go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -359,10 +359,10 @@ google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA= google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4= google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc= google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc= -google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4= -google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= From 3a86da40d78044ab9719cac35f5b50260f8690d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 23:24:03 +0000 Subject: [PATCH 004/156] build(deps): bump google.golang.org/protobuf (#5073) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7de4b288466..a3528135915 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( golang.org/x/text v0.32.0 google.golang.org/api v0.257.0 google.golang.org/grpc v1.77.0 - google.golang.org/protobuf v1.36.10 + google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) diff --git a/go.sum b/go.sum index 5d0589614c2..a6d40b13792 100644 --- a/go.sum +++ b/go.sum @@ -365,8 +365,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= From faf97c3be0a9300ded62874088213b48401e0d0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 09:15:22 -0800 Subject: [PATCH 005/156] build(deps): bump the github-actions group with 5 updates (#5087) Bumps the github-actions group with 5 updates: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `6.0.0` | `6.0.1` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `5.0.0` | `6.0.0` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `6.0.0` | `7.0.0` | | [github/codeql-action](https://github.com/github/codeql-action) | `4.31.6` | `4.31.9` | | [actions/stale](https://github.com/actions/stale) | `10.1.0` | `10.1.1` | Updates `actions/checkout` from 6.0.0 to 6.0.1 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3...8e8c483db84b4bee98b60c0593521ed34d9990e8) Updates `actions/upload-artifact` from 5.0.0 to 6.0.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/330a01c490aca151604b8cf639adc76d48f6c5d4...b7c566a772e6b6bfb58ed0dc250532a479d7789f) Updates `actions/download-artifact` from 6.0.0 to 7.0.0 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/018cc2cf5baa6db3ef3c5f8a56943fffe632ef53...37930b1c2abaa49bbe596cd826c3c89aef350131) Updates `github/codeql-action` from 4.31.6 to 4.31.9 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/fe4161a26a8629af62121b670040955b330f9af2...5d4e8d1aca955e8d8589aabd499c5cae939e33c7) Updates `actions/stale` from 10.1.0 to 10.1.1 - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/5f858e3efba33a5ca4407a664cc011ad407f2008...997185467fa4f803885201cee163a9f38240193d) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/upload-artifact dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: github/codeql-action dependency-version: 4.31.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/stale dependency-version: 10.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/auto-merge.yml | 2 +- .github/workflows/code-coverage.yml | 4 ++-- .github/workflows/compat-test.yml | 4 ++-- .github/workflows/dependency-review.yml | 2 +- .github/workflows/endurance-test.yml | 4 ++-- .github/workflows/htmlui-tests.yml | 4 ++-- .github/workflows/license-check.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/make.yml | 12 ++++++------ .github/workflows/ossf-scorecard.yml | 6 +++--- .github/workflows/providers-core.yml | 2 +- .github/workflows/providers-extra.yml | 2 +- .github/workflows/race-detector.yml | 2 +- .github/workflows/stale.yml | 2 +- .github/workflows/stress-test.yml | 4 ++-- .github/workflows/tests.yml | 4 ++-- .github/workflows/volume-shadow-copy-test.yml | 4 ++-- 17 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index 25e747244cd..aace0ecc077 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -7,7 +7,7 @@ jobs: auto-merge: runs-on: ubuntu-latest steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a #v2.6.6 with: # auto-merge rules are in /.github/auto-merge.yml diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index 0b0e2a383c2..caf717a0b29 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -26,7 +26,7 @@ jobs: with: files: coverage.txt - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml index c3081f9937b..05ed877d7c0 100644 --- a/.github/workflows/compat-test.yml +++ b/.github/workflows/compat-test.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -24,7 +24,7 @@ jobs: - name: Compat Test run: make compat-tests - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 8ac26bdd90b..8c41741aaa2 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,6 +15,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: 'Dependency Review' uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 #v4.8.2 diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml index 2f62239c940..b69955add42 100644 --- a/.github/workflows/endurance-test.yml +++ b/.github/workflows/endurance-test.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -38,7 +38,7 @@ jobs: - name: Endurance Tests run: make endurance-tests - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index 88960a6d3c1..21073bea34c 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -27,7 +27,7 @@ jobs: runs-on: macos-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -39,7 +39,7 @@ jobs: - name: Run Tests run: make htmlui-e2e-test - name: Upload Screenshots - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: path: .screenshots/**/*.png if-no-files-found: ignore diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml index 282a4e5228b..cdd1b0fe045 100644 --- a/.github/workflows/license-check.yml +++ b/.github/workflows/license-check.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 527c0a0a4fe..5ab4f8cb189 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -26,7 +26,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 4e1bc0f8ac5..eb2ff0dfdac 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -36,7 +36,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -92,7 +92,7 @@ jobs: # macOS signing certificate (base64-encoded), used by Electron Builder MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} - name: Upload Kopia Artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: kopia-${{ matrix.os }} path: | @@ -113,7 +113,7 @@ jobs: dist/kopia-ui/*.yml if-no-files-found: ignore - name: Upload Kopia Binary - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: kopia_binaries-${{ matrix.os }} path: | @@ -128,7 +128,7 @@ jobs: needs: build if: github.event_name != 'pull_request' && github.repository == 'kopia/kopia' steps: - - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Set up QEMU uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 - name: Set up Docker Buildx @@ -136,13 +136,13 @@ jobs: - name: Install Linux-specific packages run: "sudo apt-get install -y createrepo-c" - name: Download Artifacts - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: pattern: kopia-* merge-multiple: true path: dist - name: Download Kopia Binaries - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: pattern: kopia_binaries-* merge-multiple: true diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index afc4258f3f9..48581a64e7e 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -26,7 +26,7 @@ jobs: steps: - name: "Checkout repo" - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - @@ -39,13 +39,13 @@ jobs: - # Upload the results to GitHub's code scanning dashboard. name: "Upload to results to dashboard" - uses: github/codeql-action/upload-sarif@fe4161a26a8629af62121b670040955b330f9af2 # v3.29.5 + uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 with: sarif_file: results.sarif category: ossf - name: "Upload analysis results as 'Job Artifact'" - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/providers-core.yml b/.github/workflows/providers-core.yml index 557c5cdaccd..ad921d7cfec 100644 --- a/.github/workflows/providers-core.yml +++ b/.github/workflows/providers-core.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} diff --git a/.github/workflows/providers-extra.yml b/.github/workflows/providers-extra.yml index 31268041c09..9b227de4080 100644 --- a/.github/workflows/providers-extra.yml +++ b/.github/workflows/providers-extra.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} diff --git a/.github/workflows/race-detector.yml b/.github/workflows/race-detector.yml index ab297fe6e09..a6716e512cd 100644 --- a/.github/workflows/race-detector.yml +++ b/.github/workflows/race-detector.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index e5b3210e3b6..71af256e5ae 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -14,7 +14,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 with: # process older PRs first ascending: true diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 3305401fcc2..e536e0830c4 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -28,7 +28,7 @@ jobs: - name: Stress Test run: make stress-test - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e7700a702b9..d9c35d3d574 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,7 +34,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -56,7 +56,7 @@ jobs: - name: Integration Tests run: make -j2 ci-integration-tests - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs-${{ matrix.os }} path: .logs/**/*.log diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml index f4de9626c00..88b63bd853b 100644 --- a/.github/workflows/volume-shadow-copy-test.yml +++ b/.github/workflows/volume-shadow-copy-test.yml @@ -15,7 +15,7 @@ jobs: runs-on: windows-latest steps: - name: Check out repository - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: fetch-depth: 0 - name: Set up Go @@ -32,7 +32,7 @@ jobs: - name: Non-Admin Test run: gsudo -i Medium make os-snapshot-tests - name: Upload Logs - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: logs path: .logs/**/*.log From 84df2a7545698429617fcdd7ada7ae688a4f3e91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 23:23:52 +0000 Subject: [PATCH 006/156] build(deps): bump github.com/prometheus/common (#5093) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a3528135915..3d4e9f8aa8b 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/pkg/sftp v1.13.10 github.com/prometheus/client_golang v1.23.2 github.com/prometheus/client_model v0.6.2 - github.com/prometheus/common v0.67.4 + github.com/prometheus/common v0.67.5 github.com/sanity-io/litter v1.5.8 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 github.com/stretchr/testify v1.11.1 diff --git a/go.sum b/go.sum index a6d40b13792..83de7823ce3 100644 --- a/go.sum +++ b/go.sum @@ -245,8 +245,8 @@ github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.4 h1:yR3NqWO1/UyO1w2PhUvXlGQs/PtFmoveVO0KZ4+Lvsc= -github.com/prometheus/common v0.67.4/go.mod h1:gP0fq6YjjNCLssJCQp0yk4M8W6ikLURwkdd/YKtTbyI= +github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= +github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= From 12e59e388d4adf2f1b62e332e2f31e05b19d0abd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 00:42:50 +0000 Subject: [PATCH 007/156] build(deps): bump docker/setup-buildx-action in the docker group (#5088) Bumps the docker group with 1 update: [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action). Updates `docker/setup-buildx-action` from 3.11.1 to 3.12.0 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/e468171a9de216ec08956ac3ada2f0791b6bd435...8d2750c68a42422c14e847fe6c8ac0403b4cbd6f) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-version: 3.12.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: docker ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/make.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index eb2ff0dfdac..bdd626f5330 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -132,7 +132,7 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 - name: Install Linux-specific packages run: "sudo apt-get install -y createrepo-c" - name: Download Artifacts From 883cac3d9a92b2c884a2d5a3213712319fe503ca Mon Sep 17 00:00:00 2001 From: Rohit-BM18 Date: Mon, 2 Feb 2026 21:17:54 -0800 Subject: [PATCH 008/156] Upgrade Go to 1.25.6 (#5127) --- .github/workflows/lint.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5ab4f8cb189..9e80ffb7ae4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,7 +37,7 @@ jobs: uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 with: cache: false - go-version-input: '1.25.5' + go-version-input: '1.25.6' # An explicit Go version is needed for govulncheck-action since internally # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' # directive in the 'go.mod' file. diff --git a/go.mod b/go.mod index 3d4e9f8aa8b..1321e3c721c 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25 -toolchain go1.25.5 +toolchain go1.25.6 require ( cloud.google.com/go/storage v1.58.0 From 0cd4c96026a594b24d7980ede305cd4daccfca0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:19:53 -0800 Subject: [PATCH 009/156] build(deps): bump tar and electron-builder in /app (#5121) Bumps [tar](https://github.com/isaacs/node-tar) to 7.5.7 and updates ancestor dependency [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder). These dependencies need to be updated together. Updates `tar` from 6.2.1 to 7.5.7 - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.2.1...v7.5.7) Updates `electron-builder` from 26.0.12 to 26.6.0 - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.6.0/packages/electron-builder) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.7 dependency-type: indirect - dependency-name: electron-builder dependency-version: 26.6.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 1478 ++++++++++++++++++----------------------- app/package.json | 2 +- 2 files changed, 648 insertions(+), 832 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 7596d2db46d..d8ea4a51786 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -24,7 +24,7 @@ "concurrently": "^9.1.2", "dotenv": "^16.5.0", "electron": "^36.8.1", - "electron-builder": "^26.0.12", + "electron-builder": "^26.6.0", "playwright": "^1.37.1", "playwright-core": "^1.35.1", "prettier": "^3.5.3" @@ -49,9 +49,9 @@ } }, "node_modules/@electron/asar": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz", - "integrity": "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", "dev": true, "license": "MIT", "dependencies": { @@ -81,6 +81,22 @@ "electron-fuses": "dist/bin.js" } }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@electron/get": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", @@ -148,75 +164,6 @@ "node": ">= 4.0.0" } }, - "node_modules/@electron/node-gyp": { - "version": "10.2.0-electron.1", - "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "integrity": "sha512-lBSgDMQqt7QWMuIjS8zNAq5FI5o5RVBAcJUGWGI6GgoQITJt3msAkUrHp8YHj3RTVE+h70ndqMGqURjp3IfRyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^8.1.0", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.2.1", - "nopt": "^6.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@electron/node-gyp/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@electron/notarize": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-3.0.1.tgz", @@ -232,9 +179,9 @@ } }, "node_modules/@electron/osx-sign": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", - "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -253,21 +200,6 @@ "node": ">=12.0.0" } }, - "node_modules/@electron/osx-sign/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", @@ -282,57 +214,41 @@ } }, "node_modules/@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.3.tgz", + "integrity": "sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==", "dev": true, "license": "MIT", "dependencies": { - "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", "@malept/cross-spawn-promise": "^2.0.0", - "chalk": "^4.0.0", "debug": "^4.1.1", "detect-libc": "^2.0.1", - "fs-extra": "^10.0.0", "got": "^11.7.0", - "node-abi": "^3.45.0", - "node-api-version": "^0.2.0", + "graceful-fs": "^4.2.11", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^11.2.0", "ora": "^5.1.0", "read-binary-file-arch": "^1.0.6", "semver": "^7.3.5", - "tar": "^6.0.5", + "tar": "^7.5.6", "yargs": "^17.0.1" }, "bin": { "electron-rebuild": "lib/cli.js" }, "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/rebuild/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "node": ">=22.12.0" } }, "node_modules/@electron/universal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", - "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", "dev": true, "license": "MIT", "dependencies": { - "@electron/asar": "^3.2.7", + "@electron/asar": "^3.3.1", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "dir-compare": "^4.2.0", @@ -355,9 +271,9 @@ } }, "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { @@ -408,9 +324,9 @@ } }, "node_modules/@electron/windows-sign/node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "optional": true, @@ -424,12 +340,28 @@ "node": ">=14.14" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -450,9 +382,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -463,9 +395,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -501,9 +433,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -534,6 +466,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -573,46 +518,57 @@ "node": ">= 10.0.0" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@pkgjs/parseargs": { @@ -668,16 +624,6 @@ "node": ">=10" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -807,9 +753,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", "dev": true, "license": "MIT", "engines": { @@ -824,47 +770,23 @@ "license": "MIT" }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 14" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">= 14" } }, "node_modules/ajv": { @@ -967,52 +889,122 @@ "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.12.tgz", - "integrity": "sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.6.0.tgz", + "integrity": "sha512-P2naoSaGOqJY54cqTceO9lms2M790UM7BA8AlOuaolQhRp/LOshAVc4vzVlYFw4YNPtiuBJqdAhWALuoEKnayQ==", "dev": true, "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/asar": "3.2.18", + "@electron/asar": "3.4.1", "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", "@electron/notarize": "2.5.0", - "@electron/osx-sign": "1.3.1", - "@electron/rebuild": "3.7.0", - "@electron/universal": "2.0.1", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.3", + "@electron/universal": "2.0.3", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", "chromium-pickle-js": "^0.2.0", - "config-file-ts": "0.2.8-rc1", + "ci-info": "4.3.1", "debug": "^4.3.4", "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", - "electron-publish": "26.0.11", + "electron-publish": "26.6.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.0", "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", "js-yaml": "^4.1.0", "json5": "^2.2.3", "lazy-val": "^1.0.5", - "minimatch": "^10.0.0", + "minimatch": "^10.0.3", "plist": "3.1.0", + "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", - "semver": "^7.3.8", - "tar": "^6.1.12", + "semver": "~7.7.3", + "tar": "^7.5.6", "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "26.0.12", - "electron-builder-squirrel-windows": "26.0.12" + "dmg-builder": "26.6.0", + "electron-builder-squirrel-windows": "26.6.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" } }, "node_modules/app-builder-lib/node_modules/@electron/notarize": { @@ -1046,39 +1038,28 @@ "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -1087,6 +1068,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/applescript": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz", @@ -1305,23 +1299,22 @@ "license": "MIT" }, "node_modules/builder-util": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.0.11.tgz", - "integrity": "sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==", + "version": "26.4.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.4.1.tgz", + "integrity": "sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==", "dev": true, "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "7zip-bin": "~5.2.0", "app-builder-bin": "5.0.0-alpha.12", - "builder-util-runtime": "9.3.1", + "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "cross-spawn": "^7.0.6", "debug": "^4.3.4", "fs-extra": "^10.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", - "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "sanitize-filename": "^1.6.3", "source-map-support": "^0.5.19", @@ -1343,49 +1336,42 @@ "node": ">=12.0.0" } }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -1399,60 +1385,47 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=12" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } + "license": "ISC" }, "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node": ">=16 || 14 >=14.17" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacheable-lookup": { @@ -1529,13 +1502,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chromium-pickle-js": { @@ -1546,9 +1519,9 @@ "license": "MIT" }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -1561,16 +1534,6 @@ "node": ">=8" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -1796,74 +1759,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/config-file-ts": { - "version": "0.2.8-rc1", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", - "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^10.3.12", - "typescript": "^5.4.3" - } - }, - "node_modules/config-file-ts/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1907,6 +1802,29 @@ "node": ">= 8" } }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/debounce-fn": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-6.0.0.tgz", @@ -2040,9 +1958,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2069,15 +1987,14 @@ } }, "node_modules/dmg-builder": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.12.tgz", - "integrity": "sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.6.0.tgz", + "integrity": "sha512-IkGlOLfJ3q7y9iaDMnNSArDdPg3Ntx8Ps6aL7yTEIpL6znA+t5L/LRTAGFz1J/12hM/NiNEYg0LoBEheqGdZXw==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "app-builder-lib": "26.6.0", + "builder-util": "26.4.1", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -2086,21 +2003,6 @@ "dmg-license": "^1.0.11" } }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/dmg-license": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", @@ -2230,19 +2132,19 @@ } }, "node_modules/electron-builder": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.0.12.tgz", - "integrity": "sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.6.0.tgz", + "integrity": "sha512-57JzccIwhqVRw83RaTdMLnSjzLL0dRQcp8r8oD7piRNBQh8UcCPaKeFmuJIzJabAAvQhG0+gx3F0pOVEOVXYwQ==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "app-builder-lib": "26.6.0", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", - "dmg-builder": "26.0.12", + "ci-info": "^4.2.0", + "dmg-builder": "26.6.0", "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" @@ -2256,31 +2158,30 @@ } }, "node_modules/electron-builder-squirrel-windows": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.0.12.tgz", - "integrity": "sha512-kpwXM7c/ayRUbYVErQbsZ0nQZX4aLHQrPEG9C4h9vuJCXylwFH8a7Jgi2VpKIObzCXO7LKHiCw4KdioFLFOgqA==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.6.0.tgz", + "integrity": "sha512-uKc/N0qPcygd2YDr52wfj07XOJPMG5KNT1ZTrumtmsykdBGreV1/poDcG5d/0KmoOpmxlkrnNJekM3eDvPzlQQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", + "app-builder-lib": "26.6.0", + "builder-util": "26.4.1", "electron-winstaller": "5.4.0" } }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, "node_modules/electron-log": { @@ -2293,35 +2194,34 @@ } }, "node_modules/electron-publish": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.11.tgz", - "integrity": "sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.6.0.tgz", + "integrity": "sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", + "builder-util": "26.4.1", + "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", - "form-data": "^4.0.0", + "form-data": "^4.0.5", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, "node_modules/electron-store": { @@ -2356,20 +2256,6 @@ "tiny-typed-emitter": "^2.1.0" } }, - "node_modules/electron-updater/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/electron-winstaller": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", @@ -2557,9 +2443,9 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, @@ -2634,6 +2520,24 @@ "pend": "~1.2.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -2698,9 +2602,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -2715,32 +2619,30 @@ } }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { @@ -3072,16 +2974,6 @@ "node": ">= 14" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-corefoundation": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", @@ -3144,23 +3036,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3181,32 +3056,15 @@ "license": "ISC" }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3227,13 +3085,6 @@ "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -3248,9 +3099,9 @@ } }, "node_modules/isbinaryfile": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", - "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", "dev": true, "license": "MIT", "engines": { @@ -3261,11 +3112,14 @@ } }, "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=16" + } }, "node_modules/jackspeak": { "version": "3.4.3", @@ -3284,16 +3138,15 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -3302,6 +3155,16 @@ "node": ">=10" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -3314,13 +3177,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, - "license": "MIT" - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3451,83 +3307,26 @@ } }, "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" + "ssri": "^12.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/matcher": { @@ -3645,44 +3444,41 @@ } }, "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -3701,6 +3497,19 @@ "node": ">= 8" } }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -3714,6 +3523,19 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -3727,18 +3549,30 @@ "node": ">=8" } }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">= 8" + "node": ">= 18" } }, "node_modules/mkdirp": { @@ -3760,9 +3594,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { @@ -3770,16 +3604,16 @@ } }, "node_modules/node-abi": { - "version": "3.75.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "version": "4.26.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.26.0.tgz", + "integrity": "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "semver": "^7.6.3" }, "engines": { - "node": ">=10" + "node": ">=22.12.0" } }, "node_modules/node-addon-api": { @@ -3800,20 +3634,45 @@ "semver": "^7.3.5" } }, + "node_modules/node-gyp": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^1.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-url": { @@ -3917,16 +3776,13 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3982,16 +3838,6 @@ "dev": true, "license": "ISC" }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/pe-library": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", @@ -4014,6 +3860,26 @@ "dev": true, "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/playwright": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", @@ -4108,13 +3974,13 @@ } }, "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/progress": { @@ -4127,13 +3993,6 @@ "node": ">=0.4.0" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -4148,6 +4007,18 @@ "node": ">=10" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", @@ -4292,20 +4163,18 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/roarr": { @@ -4516,13 +4385,13 @@ } }, "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -4531,31 +4400,18 @@ } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/source-map": { @@ -4584,19 +4440,20 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, - "license": "BSD-3-Clause" + "license": "BSD-3-Clause", + "optional": true }, "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/stat-mode": { @@ -4712,44 +4569,30 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/tar/node_modules/minipass": { + "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/temp": { @@ -4778,36 +4621,6 @@ "fs-extra": "^10.0.0" } }, - "node_modules/temp-file/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/tiny-async-pool": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", @@ -4834,10 +4647,27 @@ "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", "license": "MIT" }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/tmp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", - "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -4893,20 +4723,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/uint8array-extras": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", @@ -4927,29 +4743,29 @@ "license": "MIT" }, "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/universalify": { @@ -5040,19 +4856,19 @@ "license": "MIT" }, "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/winreg": { diff --git a/app/package.json b/app/package.json index bd3a699a5d0..82503e729f8 100644 --- a/app/package.json +++ b/app/package.json @@ -128,7 +128,7 @@ "concurrently": "^9.1.2", "dotenv": "^16.5.0", "electron": "^36.8.1", - "electron-builder": "^26.0.12", + "electron-builder": "^26.6.0", "playwright": "^1.37.1", "playwright-core": "^1.35.1", "prettier": "^3.5.3" From 02a6838f8fdb794a779fb752f5c8192a63d626e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:21:06 -0800 Subject: [PATCH 010/156] build(deps): bump codecov/codecov-action from 5.5.1 to 5.5.2 (#5090) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.1 to 5.5.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/code-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index caf717a0b29..98c34f6e3e1 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -22,7 +22,7 @@ jobs: - name: Run Tests run: make test-with-coverage - name: Upload Coverage - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 with: files: coverage.txt - name: Upload Logs From 2800046e988db0cebd5fc86ed3a176759b88ff31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:21:59 -0800 Subject: [PATCH 011/156] build(deps-dev): bump lodash from 4.17.21 to 4.17.23 in /app (#5114) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index d8ea4a51786..a4c4b6a60af 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -3247,9 +3247,9 @@ "license": "MIT" }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, From 2e34b51d095aac41a4784359a705418c46095826 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:23:51 -0800 Subject: [PATCH 012/156] build(deps): bump github.com/klauspost/compress from 1.18.2 to 1.18.3 (#5111) Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.18.2 to 1.18.3. - [Release notes](https://github.com/klauspost/compress/releases) - [Commits](https://github.com/klauspost/compress/compare/v1.18.2...v1.18.3) --- updated-dependencies: - dependency-name: github.com/klauspost/compress dependency-version: 1.18.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1321e3c721c..0d696a47631 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/hanwen/go-fuse/v2 v2.9.0 github.com/hashicorp/cronexpr v1.1.3 - github.com/klauspost/compress v1.18.2 + github.com/klauspost/compress v1.18.3 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.12.6 github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d diff --git a/go.sum b/go.sum index 83de7823ce3..5d6335fc246 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,8 @@ github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1 github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 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/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= -github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= +github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= From db177169ce6661bdd05008deb41cb03261a8a66b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:26:05 -0800 Subject: [PATCH 013/156] build(deps): bump github.com/studio-b12/gowebdav from 0.11.0 to 0.12.0 (#5119) Bumps [github.com/studio-b12/gowebdav](https://github.com/studio-b12/gowebdav) from 0.11.0 to 0.12.0. - [Release notes](https://github.com/studio-b12/gowebdav/releases) - [Commits](https://github.com/studio-b12/gowebdav/compare/v0.11.0...v0.12.0) --- updated-dependencies: - dependency-name: github.com/studio-b12/gowebdav dependency-version: 0.12.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0d696a47631..052172f3b92 100644 --- a/go.mod +++ b/go.mod @@ -49,7 +49,7 @@ require ( github.com/sanity-io/litter v1.5.8 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 github.com/stretchr/testify v1.11.1 - github.com/studio-b12/gowebdav v0.11.0 + github.com/studio-b12/gowebdav v0.12.0 github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.6 github.com/zeebo/blake3 v0.2.4 diff --git a/go.sum b/go.sum index 5d6335fc246..7a55d09111c 100644 --- a/go.sum +++ b/go.sum @@ -273,8 +273,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 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/studio-b12/gowebdav v0.11.0 h1:qbQzq4USxY28ZYsGJUfO5jR+xkFtcnwWgitp4Zp1irU= -github.com/studio-b12/gowebdav v0.11.0/go.mod h1:bHA7t77X/QFExdeAnDzK6vKM34kEZAcE1OX4MfiwjkE= +github.com/studio-b12/gowebdav v0.12.0 h1:kFRtQECt8jmVAvA6RHBz3geXUGJHUZA6/IKpOVUs5kM= +github.com/studio-b12/gowebdav v0.12.0/go.mod h1:bHA7t77X/QFExdeAnDzK6vKM34kEZAcE1OX4MfiwjkE= github.com/tg123/go-htpasswd v1.2.4 h1:HgH8KKCjdmo7jjXWN9k1nefPBd7Be3tFCTjc2jPraPU= github.com/tg123/go-htpasswd v1.2.4/go.mod h1:EKThQok9xHkun6NBMynNv6Jmu24A33XdZzzl4Q7H1+0= github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww= From a4d6f0036791677fa981f78328e099927e3160db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 06:04:48 +0000 Subject: [PATCH 014/156] build(deps): bump the telemetry-dependencies group with 4 updates (#5128) Bumps the telemetry-dependencies group with 4 updates: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go). Updates `go.opentelemetry.io/otel` from 1.39.0 to 1.40.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.40.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.39.0 to 1.40.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.40.0) Updates `go.opentelemetry.io/otel/sdk` from 1.39.0 to 1.40.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.40.0) Updates `go.opentelemetry.io/otel/trace` from 1.39.0 to 1.40.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.39.0...v1.40.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel dependency-version: 1.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 32 ++++++++++++++--------------- go.sum | 64 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index 052172f3b92..ccbee2f15c7 100644 --- a/go.mod +++ b/go.mod @@ -53,22 +53,22 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.6 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.39.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 - go.opentelemetry.io/otel/sdk v1.39.0 - go.opentelemetry.io/otel/trace v1.39.0 + go.opentelemetry.io/otel v1.40.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 + go.opentelemetry.io/otel/sdk v1.40.0 + go.opentelemetry.io/otel/trace v1.40.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.46.0 + golang.org/x/crypto v0.47.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 golang.org/x/mod v0.31.0 - golang.org/x/net v0.48.0 + golang.org/x/net v0.49.0 golang.org/x/oauth2 v0.34.0 golang.org/x/sync v0.19.0 - golang.org/x/sys v0.39.0 - golang.org/x/term v0.38.0 - golang.org/x/text v0.32.0 + golang.org/x/sys v0.40.0 + golang.org/x/term v0.39.0 + golang.org/x/text v0.33.0 google.golang.org/api v0.257.0 - google.golang.org/grpc v1.77.0 + google.golang.org/grpc v1.78.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) @@ -118,7 +118,7 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect github.com/googleapis/gax-go/v2 v2.15.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect @@ -139,15 +139,15 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/time v0.14.0 // indirect google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 7a55d09111c..0dae5557d46 100644 --- a/go.sum +++ b/go.sum @@ -161,8 +161,8 @@ github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81 github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= @@ -297,22 +297,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 h1:in9O8ESIOlwJAEGTkkf34DesGRAc/Pn8qJ7k3r/42LM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0/go.mod h1:Rp0EXBm5tfnv0WL+ARyO/PHBEaEAT8UUHQ6AGJcSq6c= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -325,15 +325,15 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +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-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +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.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= @@ -343,13 +343,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= -golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +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.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -359,12 +359,12 @@ google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA= google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4= google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc= google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= -google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= +google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M= +google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409/go.mod h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= +google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From adf89380a6cbc6b13577d9f419d16318ffe9737c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 23:10:01 -0800 Subject: [PATCH 015/156] build(deps): bump the github-actions group with 3 updates (#5125) Bumps the github-actions group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-go](https://github.com/actions/setup-go) and [github/codeql-action](https://github.com/github/codeql-action). Updates `actions/checkout` from 6.0.1 to 6.0.2 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd) Updates `actions/setup-go` from 6.1.0 to 6.2.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/4dc6199c7b1a012772edbd06daecab0f50c9053c...7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5) Updates `github/codeql-action` from 4.31.9 to 4.32.0 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/5d4e8d1aca955e8d8589aabd499c5cae939e33c7...b20883b0cd1f46c72ae0ba6d1090936928f9fa30) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/setup-go dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: github/codeql-action dependency-version: 4.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/auto-merge.yml | 2 +- .github/workflows/code-coverage.yml | 4 ++-- .github/workflows/compat-test.yml | 4 ++-- .github/workflows/dependency-review.yml | 2 +- .github/workflows/endurance-test.yml | 4 ++-- .github/workflows/htmlui-tests.yml | 4 ++-- .github/workflows/license-check.yml | 4 ++-- .github/workflows/lint.yml | 4 ++-- .github/workflows/make.yml | 6 +++--- .github/workflows/ossf-scorecard.yml | 4 ++-- .github/workflows/providers-core.yml | 4 ++-- .github/workflows/providers-extra.yml | 4 ++-- .github/workflows/race-detector.yml | 4 ++-- .github/workflows/stress-test.yml | 4 ++-- .github/workflows/tests.yml | 4 ++-- .github/workflows/volume-shadow-copy-test.yml | 4 ++-- 16 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index aace0ecc077..46a204a719b 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -7,7 +7,7 @@ jobs: auto-merge: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a #v2.6.6 with: # auto-merge rules are in /.github/auto-merge.yml diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index 98c34f6e3e1..93908b7e86b 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -12,11 +12,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Run Tests diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml index 05ed877d7c0..5f8931244f4 100644 --- a/.github/workflows/compat-test.yml +++ b/.github/workflows/compat-test.yml @@ -14,11 +14,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Compat Test diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 8c41741aaa2..2a370ad10e9 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,6 +15,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: 'Dependency Review' uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 #v4.8.2 diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml index b69955add42..5ae0c8a2665 100644 --- a/.github/workflows/endurance-test.yml +++ b/.github/workflows/endurance-test.yml @@ -26,11 +26,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' check-latest: true diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index 21073bea34c..c222c0d1fc0 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -27,11 +27,11 @@ jobs: runs-on: macos-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' check-latest: true diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml index cdd1b0fe045..7fa92800d96 100644 --- a/.github/workflows/license-check.yml +++ b/.github/workflows/license-check.yml @@ -12,11 +12,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Download dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9e80ffb7ae4..f6da409a433 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -26,11 +26,11 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - id: govulncheck diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index bdd626f5330..90f455722ff 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -36,11 +36,11 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' id: go @@ -128,7 +128,7 @@ jobs: needs: build if: github.event_name != 'pull_request' && github.repository == 'kopia/kopia' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up QEMU uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 - name: Set up Docker Buildx diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 48581a64e7e..88288e11d34 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -26,7 +26,7 @@ jobs: steps: - name: "Checkout repo" - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - @@ -39,7 +39,7 @@ jobs: - # Upload the results to GitHub's code scanning dashboard. name: "Upload to results to dashboard" - uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 + uses: github/codeql-action/upload-sarif@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v3.29.5 with: sarif_file: results.sarif category: ossf diff --git a/.github/workflows/providers-core.yml b/.github/workflows/providers-core.yml index ad921d7cfec..ee89b62adec 100644 --- a/.github/workflows/providers-core.yml +++ b/.github/workflows/providers-core.yml @@ -24,12 +24,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/providers-extra.yml b/.github/workflows/providers-extra.yml index 9b227de4080..75cb87317aa 100644 --- a/.github/workflows/providers-extra.yml +++ b/.github/workflows/providers-extra.yml @@ -24,12 +24,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/race-detector.yml b/.github/workflows/race-detector.yml index a6716e512cd..d315c932cd4 100644 --- a/.github/workflows/race-detector.yml +++ b/.github/workflows/race-detector.yml @@ -12,11 +12,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Unit Tests diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index e536e0830c4..078a7a0b309 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -18,11 +18,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Stress Test diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d9c35d3d574..8b8b2b3f802 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -34,11 +34,11 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Install Windows-specific packages diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml index 88b63bd853b..ccc9954d45d 100644 --- a/.github/workflows/volume-shadow-copy-test.yml +++ b/.github/workflows/volume-shadow-copy-test.yml @@ -15,11 +15,11 @@ jobs: runs-on: windows-latest steps: - name: Check out repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 + uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 with: go-version-file: 'go.mod' - name: Install gsudo From 455ae571e3dbc3b4e674f495de63ccef566a1e55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 07:16:34 +0000 Subject: [PATCH 016/156] build(deps): bump github.com/klauspost/reedsolomon from 1.12.6 to 1.13.1 (#5129) Bumps [github.com/klauspost/reedsolomon](https://github.com/klauspost/reedsolomon) from 1.12.6 to 1.13.1. - [Release notes](https://github.com/klauspost/reedsolomon/releases) - [Commits](https://github.com/klauspost/reedsolomon/compare/v1.12.6...v1.13.1) --- updated-dependencies: - dependency-name: github.com/klauspost/reedsolomon dependency-version: 1.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ccbee2f15c7..748d172da2c 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/hashicorp/cronexpr v1.1.3 github.com/klauspost/compress v1.18.3 github.com/klauspost/pgzip v1.2.6 - github.com/klauspost/reedsolomon v1.12.6 + github.com/klauspost/reedsolomon v1.13.1 github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 diff --git a/go.sum b/go.sum index 0dae5557d46..b821a09078c 100644 --- a/go.sum +++ b/go.sum @@ -179,8 +179,8 @@ github.com/klauspost/crc32 v1.3.0 h1:sSmTt3gUt81RP655XGZPElI0PelVTZ6YwCRnPSupoFM github.com/klauspost/crc32 v1.3.0/go.mod h1:D7kQaZhnkX/Y0tstFGf8VUzv2UofNGqCjnC3zdHB0Hw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/reedsolomon v1.12.6 h1:8pqE9aECQG/ZFitiUD1xK/E83zwosBAZtE3UbuZM8TQ= -github.com/klauspost/reedsolomon v1.12.6/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= +github.com/klauspost/reedsolomon v1.13.1 h1:9C1FiyTS0GWU0gz9oclrFrXtK0BJE6Cg5s/gihsr2jw= +github.com/klauspost/reedsolomon v1.13.1/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d h1:U3VB/cDMsPW4zB4JRFbVRDzIpPytt889rJUKAG40NPA= github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= From 243c21ad5498b77312e8d70ddd375268f1da4add Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 23:21:24 -0800 Subject: [PATCH 017/156] build(deps): bump dawidd6/action-homebrew-bump-formula from 5 to 7 (#5089) Bumps [dawidd6/action-homebrew-bump-formula](https://github.com/dawidd6/action-homebrew-bump-formula) from 5 to 7. - [Release notes](https://github.com/dawidd6/action-homebrew-bump-formula/releases) - [Commits](https://github.com/dawidd6/action-homebrew-bump-formula/compare/3428a0601bba3173ec0bdcc945be23fa27aa4c31...1446dca236b0440c6f02723a3f14f13be2c04ab0) --- updated-dependencies: - dependency-name: dawidd6/action-homebrew-bump-formula dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/make.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 90f455722ff..907d5c67cde 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -185,7 +185,7 @@ jobs: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} - name: Bump Homebrew formula - uses: dawidd6/action-homebrew-bump-formula@3428a0601bba3173ec0bdcc945be23fa27aa4c31 # v5 + uses: dawidd6/action-homebrew-bump-formula@1446dca236b0440c6f02723a3f14f13be2c04ab0 # v7 # only bump formula for tags which don't contain '-' # this excludes vx.y.z-rc1 if: github.ref_type == 'tag' && !contains(github.ref_name, '-') From 88c3cb524c621e87a3c611267bd39edaeaf8e9e6 Mon Sep 17 00:00:00 2001 From: kblissett Date: Tue, 3 Feb 2026 13:06:32 -0700 Subject: [PATCH 018/156] docs: Fix typos in Architecture documentation (#5120) --- .../docs/Advanced/Architecture/_index.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/site/content/docs/Advanced/Architecture/_index.md b/site/content/docs/Advanced/Architecture/_index.md index 5fad066a525..f1deeb9f595 100644 --- a/site/content/docs/Advanced/Architecture/_index.md +++ b/site/content/docs/Advanced/Architecture/_index.md @@ -16,7 +16,7 @@ The following diagram illustrates the key components of Kopia: ### Binary Large Object Storage (BLOB) -BLOB storage is the place where your data is ultimately stored. Any type that implements simple Go [API](https://godoc.org/github.com/kopia/kopia/repo/blob#Storage) can be used as Kopia's blob storage. +BLOB storage is the place where your data is ultimately stored. Any type that implements a simple Go [API](https://godoc.org/github.com/kopia/kopia/repo/blob#Storage) can be used as Kopia's blob storage. See the [Repositories](/docs/repositories/) page for a list of currently supported storage backends. @@ -34,11 +34,11 @@ Content-Addressable Block Storage manages data blocks of relatively small sizes Block ID is generated by applying [cryptographic hash function](https://en.wikipedia.org/wiki/Cryptographic_hash_function) such as SHA2 or BLAKE2S to produce a pseudo-random identifier, such as `6a9fc3a464a79360269e20b88cef629a`. -A key property of block identifiers is that two identical block of data will produce exactly the same identifiers, thus resulting in natural de-duplication of data. +A key property of block identifiers is that two identical blocks of data will produce exactly the same identifiers, thus resulting in natural de-duplication of data. -After hashing, the block data is encrypted using algorithm such as `AES256-GCM-HMAC-SHA256` or `CHACHA20-POLY1305-HMAC-SHA256`. To make uploads to cloud storage more efficient and cheaper, multiple smaller blocks are combined into larger **Packs** of 20-40MB each. Pack files in blob storage have random names and don't reveal anything about their contents or structure. Their sizes are also generally unrelated to content due to splitting and merging. +After hashing, the block data is encrypted using algorithm such as `AES256-GCM-HMAC-SHA256` or `CHACHA20-POLY1305-HMAC-SHA256`. To make uploads to cloud storage more efficient and cheaper, multiple smaller blocks are combined into larger **Packs** of 20-40MB each. Pack files in blob storage have random names and don't reveal anything about their contents or structure. Their sizes are also generally unrelated to their content due to splitting and merging. -To help efficiently find a block in the blob storage, CABS maintains an index that maps block ID to the blob file name, offset within the file and length. In addition, to make data recovery possible in case the index files got corrupted, a local index is also stored at the end of each pack. +To help efficiently find a block in the blob storage, CABS maintains an index that maps a block ID to the blob file name, offset within the file and length. In addition, to make data recovery possible in case the index files are corrupted, a local index is also stored at the end of each pack. File names in the BLOB layer have prefixes to help quickly identify its type: @@ -46,9 +46,9 @@ File names in the BLOB layer have prefixes to help quickly identify its type: * `q` represents packs containing metadata (e.g. `q7a9939814e8aba1fdda2d87965f324d3`) * `x` represents indices (e.g. `xn0_20db7984bd71c4042cea471a61fbcea1`) -CABS is not meant to be used directly, instead it's a building block for object storage (CAOS) and manifest storage layers (LAMS) described below. +CABS is not meant to be used directly, instead it's a building block for the object storage (CAOS) and manifest storage layers (LAMS) described below. -The API for CABS can be found in https://godoc.org/github.com/kopia/kopia/repo/content +The API for CABS can be found at https://godoc.org/github.com/kopia/kopia/repo/content ### Content-Addressable Object Storage (CAOS) @@ -64,7 +64,7 @@ Object IDs can also have an optional single-letter prefix `g..z` that helps quic Objects without prefixes are stored in the `p` pack while objects with prefixes are stored in the `q` metadata pack by the CABS layer. -To represent objects larger than the size of a single CABS block, Kopia links together multiple blocks via special indirect JSON content. Such blocks are distinguished from regular blocks the `I` virtual prefix. Indirection can be applied to any object type, including metadata such as directory listing. However, when applied to a data block, an `x` prefix is added to ensure than the indirect JSON is stored in a metadata pack instead of a data pack by the CABS layer. +To represent objects larger than the size of a single CABS block, Kopia links together multiple blocks via special indirect JSON content. Such blocks are distinguished from regular blocks by the `I` virtual prefix. Indirection can be applied to any object type, including metadata such as directory listing. However, when applied to a data block, an `x` prefix is added to ensure than the indirect JSON is stored in a metadata pack instead of a data pack by the CABS layer. For example large file object might have an identifier such as `Ixac47f7ce280fdd81f04c670fec2353dc` and JSON content: @@ -96,14 +96,14 @@ $ kopia content show Ixac47f7ce280fdd81f04c670fec2353dc Note that the example above shows that `I` is a virtual prefix. The actual CABS block does not content the `I` prefix but referencing the block with the `I` prefix tells Kopia to interpret the block as an indirect JSON object and return the resolved content instead of the raw content. -The API for CAOS can be found in https://godoc.org/github.com/kopia/kopia/repo/object +The API for CAOS can be found at https://godoc.org/github.com/kopia/kopia/repo/object ### Label-Addressable Manifest Storage (LAMS) -While content-addressable storage is a neat idea, dealing with cryptographic hashes is not very convenient for humans to use. +While content-addressable storage is a neat idea, dealing with cryptographic hashes is not very convenient for humans. To address that, Kopia supports another type of storage, used to persist small JSON objects called **Manifests** (describing snapshots, policies, etc.) which are identified by arbitrary `key=value` pairs called labels. Internally manifests are stored as CABS blocks. -The API for LAMS can be found in https://godoc.org/github.com/kopia/kopia/repo/manifest +The API for LAMS can be found at https://godoc.org/github.com/kopia/kopia/repo/manifest From ddac7c36c0eeac22494621aa0ceb8618b802b995 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:51:22 +0000 Subject: [PATCH 019/156] build(deps): bump the common-golang-dependencies group across 1 directory with 5 updates (#5131) Bumps the common-golang-dependencies group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/Azure/azure-sdk-for-go/sdk/azcore](https://github.com/Azure/azure-sdk-for-go) | `1.20.0` | `1.21.0` | | [github.com/Azure/azure-sdk-for-go/sdk/storage/azblob](https://github.com/Azure/azure-sdk-for-go) | `1.6.3` | `1.6.4` | | [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) | `7.0.97` | `7.0.98` | | [golang.org/x/mod](https://github.com/golang/mod) | `0.31.0` | `0.32.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.257.0` | `0.264.0` | Updates `github.com/Azure/azure-sdk-for-go/sdk/azcore` from 1.20.0 to 1.21.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.20.0...sdk/azcore/v1.21.0) Updates `github.com/Azure/azure-sdk-for-go/sdk/storage/azblob` from 1.6.3 to 1.6.4 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/storage/azblob/v1.6.3...sdk/storage/azblob/v1.6.4) Updates `github.com/minio/minio-go/v7` from 7.0.97 to 7.0.98 - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.97...v7.0.98) Updates `golang.org/x/mod` from 0.31.0 to 0.32.0 - [Commits](https://github.com/golang/mod/compare/v0.31.0...v0.32.0) Updates `google.golang.org/api` from 0.257.0 to 0.264.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.257.0...v0.264.0) --- updated-dependencies: - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azcore dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/storage/azblob dependency-version: 1.6.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: github.com/minio/minio-go/v7 dependency-version: 7.0.98 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: golang.org/x/mod dependency-version: 0.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.264.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 23 ++++++++++++----------- go.sum | 54 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 748d172da2c..1b3f8f80a1d 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ toolchain go1.25.6 require ( cloud.google.com/go/storage v1.58.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 github.com/alecthomas/kingpin/v2 v2.4.0 github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b github.com/chmduquesne/rollinghash v4.0.0+incompatible @@ -34,7 +34,7 @@ require ( github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.97 + github.com/minio/minio-go/v7 v7.0.98 github.com/mocktools/go-smtp-mock/v2 v2.5.1 github.com/mxk/go-vss v1.2.0 github.com/natefinch/atomic v1.0.1 @@ -60,7 +60,7 @@ require ( go.uber.org/zap v1.27.1 golang.org/x/crypto v0.47.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.31.0 + golang.org/x/mod v0.32.0 golang.org/x/net v0.49.0 golang.org/x/oauth2 v0.34.0 golang.org/x/sync v0.19.0 @@ -77,11 +77,11 @@ require ( al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go/auth v0.18.1 // 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.3 // indirect - cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/monitoring v1.24.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // indirect @@ -116,13 +116,13 @@ require ( github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect - github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect + github.com/googleapis/gax-go/v2 v2.16.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect - github.com/minio/crc64nvme v1.1.0 // indirect + github.com/minio/crc64nvme v1.1.1 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/philhofer/fwd v1.2.0 // indirect @@ -133,7 +133,7 @@ require ( github.com/prometheus/procfs v0.16.1 // indirect github.com/rs/xid v1.6.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect - github.com/tinylib/msgp v1.3.0 // indirect + github.com/tinylib/msgp v1.6.1 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect @@ -145,8 +145,9 @@ require ( go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect + google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index b821a09078c..6e9a31bb749 100644 --- a/go.sum +++ b/go.sum @@ -4,26 +4,26 @@ 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.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -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 v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= +cloud.google.com/go/auth v0.18.1/go.mod h1:GfTYoS9G3CWpRA3Va9doKN9mjPGRS+v41jmZAhBzbrA= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -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/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= +cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= -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/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= +cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= cloud.google.com/go/storage v1.58.0 h1:PflFXlmFJjG/nBeR9B7pKddLQWaFaRWx4uUi/LyNxxo= cloud.google.com/go/storage v1.58.0/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= -cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= -cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0 h1:JXg2dwJUmPB9JmtVmdEB16APJ7jurfbY5jnfXpJoRMc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.20.0/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw= +cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= +cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0/go.mod h1:t76Ruy8AHvUAC8GfMWJMa0ElSbuIcO03NLpynfbgsPA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= @@ -32,8 +32,8 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDo github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1 h1:/Zt+cDPnpC3OVDm/JKLOs7M2DKmLRIIp3XIx9pHHiig= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1/go.mod h1:Ng3urmn6dYe8gnbCMoHHVl5APYz2txho3koEkV2o2HA= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3 h1:ZJJNFaQ86GVKQ9ehwqyAFE6pIfyicpuJ8IkVaPBc6/4= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.3/go.mod h1:URuDvhmATVKqHBH9/0nOiNKk0+YcwfQ3WkK5PqHKxc8= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 h1:jWQK1GI+LeGGUKBADtcH2rRqPxYB1Ljwms5gFA2LqrM= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4/go.mod h1:8mwH4klAm9DUgR2EEHyEEAQlRDvLPyg5fQry3y+cDew= 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.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= @@ -155,10 +155,10 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 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/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -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/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= +github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= +github.com/googleapis/gax-go/v2 v2.16.0 h1:iHbQmKLLZrexmb0OSsNGTeSTS0HO4YvFOG8g5E4Zd0Y= +github.com/googleapis/gax-go/v2 v2.16.0/go.mod h1:o1vfQjjNZn4+dPnRdl/4ZD7S9414Y4xA+a/6Icj6l14= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= @@ -201,12 +201,12 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP 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/minio/crc64nvme v1.1.0 h1:e/tAguZ+4cw32D+IO/8GSf5UVr9y+3eJcxZI2WOO/7Q= -github.com/minio/crc64nvme v1.1.0/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= +github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI= +github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.97 h1:lqhREPyfgHTB/ciX8k2r8k0D93WaFqxbJX36UZq5occ= -github.com/minio/minio-go/v7 v7.0.97/go.mod h1:re5VXuo0pwEtoNLsNuSr0RrLfT/MBtohwdaSmPPSRSk= +github.com/minio/minio-go/v7 v7.0.98 h1:MeAVKjLVz+XJ28zFcuYyImNSAh8Mq725uNW4beRisi0= +github.com/minio/minio-go/v7 v7.0.98/go.mod h1:cY0Y+W7yozf0mdIclrttzo1Iiu7mEf9y7nk2uXqMOvM= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/mocktools/go-smtp-mock/v2 v2.5.1 h1:QcMJMChSgG1olVj4o6xxQFdrWzRjYNrcq660HAjd0wA= @@ -277,8 +277,8 @@ github.com/studio-b12/gowebdav v0.12.0 h1:kFRtQECt8jmVAvA6RHBz3geXUGJHUZA6/IKpOV github.com/studio-b12/gowebdav v0.12.0/go.mod h1:bHA7t77X/QFExdeAnDzK6vKM34kEZAcE1OX4MfiwjkE= github.com/tg123/go-htpasswd v1.2.4 h1:HgH8KKCjdmo7jjXWN9k1nefPBd7Be3tFCTjc2jPraPU= github.com/tg123/go-htpasswd v1.2.4/go.mod h1:EKThQok9xHkun6NBMynNv6Jmu24A33XdZzzl4Q7H1+0= -github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww= -github.com/tinylib/msgp v1.3.0/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= +github.com/tinylib/msgp v1.6.1 h1:ESRv8eL3u+DNHUoSAAQRE50Hm162zqAnBoGv9PzScPY= +github.com/tinylib/msgp v1.6.1/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/zalando/go-keyring v0.2.6 h1:r7Yc3+H+Ux0+M72zacZoItR3UDxeWfKTcabvkI8ua9s= @@ -323,14 +323,16 @@ go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= @@ -357,8 +359,8 @@ 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.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA= google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4= -google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc= -google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc= +google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= +google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M= google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409/go.mod h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I= google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ= From c883d86eee6b7614f45f2723e6a88ae993290e1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 21:25:29 +0000 Subject: [PATCH 020/156] build(deps-dev): bump @isaacs/brace-expansion in /app (#5133) Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1. --- updated-dependencies: - dependency-name: "@isaacs/brace-expansion" dependency-version: 5.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index a4c4b6a60af..6a979fd1bd4 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -351,9 +351,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "dev": true, "license": "MIT", "dependencies": { From 77ccabb69710a02cc40f84a93a1c96fa7925cfe6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 14:23:16 -0800 Subject: [PATCH 021/156] build(deps): bump github.com/coreos/go-systemd/v22 from 22.6.0 to 22.7.0 (#5135) Bumps [github.com/coreos/go-systemd/v22](https://github.com/coreos/go-systemd) from 22.6.0 to 22.7.0. - [Release notes](https://github.com/coreos/go-systemd/releases) - [Commits](https://github.com/coreos/go-systemd/compare/v22.6.0...v22.7.0) --- updated-dependencies: - dependency-name: github.com/coreos/go-systemd/v22 dependency-version: 22.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1b3f8f80a1d..489e1d71f94 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/chmduquesne/rollinghash v4.0.0+incompatible github.com/chromedp/cdproto v0.0.0-20250724212937-08a3db8b4327 github.com/chromedp/chromedp v0.14.2 - github.com/coreos/go-systemd/v22 v22.6.0 + github.com/coreos/go-systemd/v22 v22.7.0 github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 github.com/edsrzf/mmap-go v1.2.0 github.com/fatih/color v1.18.0 diff --git a/go.sum b/go.sum index 6e9a31bb749..74b28f757fa 100644 --- a/go.sum +++ b/go.sum @@ -72,8 +72,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0= github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= -github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo= -github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= +github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= +github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= From 80455557442131d73449e0d4ff92277212c3e59a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 22:15:02 -0800 Subject: [PATCH 022/156] build(deps): bump the common-golang-dependencies group across 1 directory with 2 updates (#5136) * build(deps): bump the common-golang-dependencies group across 1 directory with 2 updates Bumps the common-golang-dependencies group with 2 updates in the / directory: [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `cloud.google.com/go/storage` from 1.58.0 to 1.59.2 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.58.0...storage/v1.59.2) Updates `google.golang.org/api` from 0.257.0 to 0.264.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.257.0...v0.264.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.59.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.264.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] * fix(lint): address deprecation warnings Behavior change: only service account (SA) credential keys can be used --------- Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- repo/blob/gcs/gcs_immu_test.go | 10 +++++----- repo/blob/gcs/gcs_storage.go | 4 ++-- repo/blob/gcs/gcs_versioned_test.go | 16 ++++------------ 5 files changed, 17 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index 489e1d71f94..c23c7527c1c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25 toolchain go1.25.6 require ( - cloud.google.com/go/storage v1.58.0 + cloud.google.com/go/storage v1.59.2 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -67,7 +67,7 @@ require ( golang.org/x/sys v0.40.0 golang.org/x/term v0.39.0 golang.org/x/text v0.33.0 - google.golang.org/api v0.257.0 + google.golang.org/api v0.264.0 google.golang.org/grpc v1.78.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 diff --git a/go.sum b/go.sum index 74b28f757fa..ccfd1cadbb3 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qob cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.58.0 h1:PflFXlmFJjG/nBeR9B7pKddLQWaFaRWx4uUi/LyNxxo= -cloud.google.com/go/storage v1.58.0/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= +cloud.google.com/go/storage v1.59.2 h1:gmOAuG1opU8YvycMNpP+DvHfT9BfzzK5Cy+arP+Nocw= +cloud.google.com/go/storage v1.59.2/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -357,8 +357,8 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA= -google.golang.org/api v0.257.0/go.mod h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4= +google.golang.org/api v0.264.0 h1:+Fo3DQXBK8gLdf8rFZ3uLu39JpOnhvzJrLMQSoSYZJM= +google.golang.org/api v0.264.0/go.mod h1:fAU1xtNNisHgOF5JooAs8rRaTkl2rT3uaoNGo9NS3R8= google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M= diff --git a/repo/blob/gcs/gcs_immu_test.go b/repo/blob/gcs/gcs_immu_test.go index 2566c06ca04..6180d1cfa83 100644 --- a/repo/blob/gcs/gcs_immu_test.go +++ b/repo/blob/gcs/gcs_immu_test.go @@ -70,7 +70,7 @@ func TestGoogleStorageImmutabilityProtection(t *testing.T) { count := getBlobCount(ctx, t, st, dummyBlob[:1]) require.Equal(t, 1, count) - cli := getGoogleCLI(t, opts.credentialsJSON) + cli := getGcsClient(t, opts.credentialsJSON) attrs, err := cli.Bucket(opts.bucket).Object(blobNameFullPath).Attrs(ctx) require.NoError(t, err) @@ -111,12 +111,12 @@ func TestGoogleStorageImmutabilityProtection(t *testing.T) { require.Equal(t, 0, count) } -// getGoogleCLI returns a separate client to verify things the Storage interface doesn't support. -func getGoogleCLI(t *testing.T, credentialsJSON []byte) *gcsclient.Client { +// getGcsClient returns a separate client to verify things the Storage interface doesn't support. +func getGcsClient(t *testing.T, credentialsJSON []byte) *gcsclient.Client { t.Helper() - ctx := context.Background() - cli, err := gcsclient.NewClient(ctx, option.WithCredentialsJSON(credentialsJSON)) + ctx := t.Context() + cli, err := gcsclient.NewClient(ctx, option.WithAuthCredentialsJSON(option.ServiceAccount, credentialsJSON)) require.NoError(t, err, "unable to create GCS client") diff --git a/repo/blob/gcs/gcs_storage.go b/repo/blob/gcs/gcs_storage.go index d32dc705f22..c86b88d835c 100644 --- a/repo/blob/gcs/gcs_storage.go +++ b/repo/blob/gcs/gcs_storage.go @@ -263,9 +263,9 @@ func New(ctx context.Context, opt *Options, isCreate bool) (blob.Storage, error) clientOptions := []option.ClientOption{option.WithScopes(scope)} if j := opt.ServiceAccountCredentialJSON; len(j) > 0 { - clientOptions = append(clientOptions, option.WithCredentialsJSON(j)) + clientOptions = append(clientOptions, option.WithAuthCredentialsJSON(option.ServiceAccount, j)) } else if fn := opt.ServiceAccountCredentialsFile; fn != "" { - clientOptions = append(clientOptions, option.WithCredentialsFile(fn)) + clientOptions = append(clientOptions, option.WithAuthCredentialsFile(option.ServiceAccount, fn)) } cli, err := gcsclient.NewClient(ctx, clientOptions...) diff --git a/repo/blob/gcs/gcs_versioned_test.go b/repo/blob/gcs/gcs_versioned_test.go index 0378c22c2b9..026fc5e7a3b 100644 --- a/repo/blob/gcs/gcs_versioned_test.go +++ b/repo/blob/gcs/gcs_versioned_test.go @@ -11,7 +11,6 @@ import ( gcsclient "cloud.google.com/go/storage" "github.com/pkg/errors" "github.com/stretchr/testify/require" - "google.golang.org/api/option" "github.com/kopia/kopia/internal/clock" "github.com/kopia/kopia/internal/gather" @@ -271,11 +270,7 @@ func putBlobs(ctx context.Context, cli blob.Storage, blobID blob.ID, blobs []str func createBucket(t *testing.T, opts bucketOpts) { t.Helper() - ctx := context.Background() - - cli, err := gcsclient.NewClient(ctx, option.WithCredentialsJSON(opts.credentialsJSON)) - require.NoError(t, err, "unable to create GCS client") - + cli := getGcsClient(t, opts.credentialsJSON) attrs := &gcsclient.BucketAttrs{} bucketHandle := cli.Bucket(opts.bucket) @@ -285,7 +280,7 @@ func createBucket(t *testing.T, opts bucketOpts) { bucketHandle = bucketHandle.SetObjectRetention(true) } - err = bucketHandle.Create(ctx, opts.projectID, attrs) + err := bucketHandle.Create(t.Context(), opts.projectID, attrs) if err == nil { return } @@ -304,12 +299,9 @@ func createBucket(t *testing.T, opts bucketOpts) { func validateBucket(t *testing.T, opts bucketOpts) { t.Helper() - ctx := context.Background() - - cli, err := gcsclient.NewClient(ctx, option.WithCredentialsJSON(opts.credentialsJSON)) - require.NoError(t, err, "unable to create GCS client") + cli := getGcsClient(t, opts.credentialsJSON) - attrs, err := cli.Bucket(opts.bucket).Attrs(ctx) + attrs, err := cli.Bucket(opts.bucket).Attrs(t.Context()) require.NoError(t, err) if opts.isLockedBucket { From 313877c3971311a9729e5581274a32ef9352c3fe Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Tue, 3 Feb 2026 22:21:54 -0800 Subject: [PATCH 023/156] feat(ui): upgraded htmlui to the latest version (#5137) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c23c7527c1c..2700afdd3e6 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.3 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.1 - github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d + github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index ccfd1cadbb3..2bb0ba5a8a3 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.1 h1:9C1FiyTS0GWU0gz9oclrFrXtK0BJE6Cg5s/gihsr2jw= github.com/klauspost/reedsolomon v1.13.1/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= -github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d h1:U3VB/cDMsPW4zB4JRFbVRDzIpPytt889rJUKAG40NPA= -github.com/kopia/htmluibuild v0.0.1-0.20251125011029-7f1c3f84f29d/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 h1:dib7t4FiGe+HSuq9AweSiVjrXn/d7p6eoIZ2gmtM5BI= +github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 5cf7f8fb5fbbcea10de60c68c1b98d592fe90f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:53:28 -0800 Subject: [PATCH 024/156] build(deps): upgrade Go to 1.25.7 (#5143) --- .github/workflows/lint.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f6da409a433..3eb3b573486 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,7 +37,7 @@ jobs: uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 with: cache: false - go-version-input: '1.25.6' + go-version-input: '1.25.7' # An explicit Go version is needed for govulncheck-action since internally # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' # directive in the 'go.mod' file. diff --git a/go.mod b/go.mod index 2700afdd3e6..3577cabdf1c 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25 -toolchain go1.25.6 +toolchain go1.25.7 require ( cloud.google.com/go/storage v1.59.2 From 05ca6b3335bdeaf641fafc355c07f5df5d902abd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Feb 2026 10:15:01 -0800 Subject: [PATCH 025/156] build(deps): bump google.golang.org/api (#5140) Bumps the common-golang-dependencies group with 1 update: [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `google.golang.org/api` from 0.264.0 to 0.265.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.264.0...v0.265.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.265.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 3577cabdf1c..c203fbc7140 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( golang.org/x/sys v0.40.0 golang.org/x/term v0.39.0 golang.org/x/text v0.33.0 - google.golang.org/api v0.264.0 + google.golang.org/api v0.265.0 google.golang.org/grpc v1.78.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 diff --git a/go.sum b/go.sum index 2bb0ba5a8a3..53f1ca709fa 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.264.0 h1:+Fo3DQXBK8gLdf8rFZ3uLu39JpOnhvzJrLMQSoSYZJM= -google.golang.org/api v0.264.0/go.mod h1:fAU1xtNNisHgOF5JooAs8rRaTkl2rT3uaoNGo9NS3R8= +google.golang.org/api v0.265.0 h1:FZvfUdI8nfmuNrE34aOWFPmLC+qRBEiNm3JdivTvAAU= +google.golang.org/api v0.265.0/go.mod h1:uAvfEl3SLUj/7n6k+lJutcswVojHPp2Sp08jWCu8hLY= google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M= From 6399642e4656db15cba48584c61563f6a3de13d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Feb 2026 01:41:44 +0000 Subject: [PATCH 026/156] build(deps): bump github.com/klauspost/reedsolomon from 1.13.1 to 1.13.2 (#5141) Bumps [github.com/klauspost/reedsolomon](https://github.com/klauspost/reedsolomon) from 1.13.1 to 1.13.2. - [Release notes](https://github.com/klauspost/reedsolomon/releases) - [Commits](https://github.com/klauspost/reedsolomon/compare/v1.13.1...v1.13.2) --- updated-dependencies: - dependency-name: github.com/klauspost/reedsolomon dependency-version: 1.13.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c203fbc7140..74cba168262 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/hashicorp/cronexpr v1.1.3 github.com/klauspost/compress v1.18.3 github.com/klauspost/pgzip v1.2.6 - github.com/klauspost/reedsolomon v1.13.1 + github.com/klauspost/reedsolomon v1.13.2 github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 diff --git a/go.sum b/go.sum index 53f1ca709fa..634e778a894 100644 --- a/go.sum +++ b/go.sum @@ -179,8 +179,8 @@ github.com/klauspost/crc32 v1.3.0 h1:sSmTt3gUt81RP655XGZPElI0PelVTZ6YwCRnPSupoFM github.com/klauspost/crc32 v1.3.0/go.mod h1:D7kQaZhnkX/Y0tstFGf8VUzv2UofNGqCjnC3zdHB0Hw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/reedsolomon v1.13.1 h1:9C1FiyTS0GWU0gz9oclrFrXtK0BJE6Cg5s/gihsr2jw= -github.com/klauspost/reedsolomon v1.13.1/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= +github.com/klauspost/reedsolomon v1.13.2 h1:9qtQy2tKEVpVB8Pfq87ZljHZb60/LbeTQ1OxV8EGzdE= +github.com/klauspost/reedsolomon v1.13.2/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 h1:dib7t4FiGe+HSuq9AweSiVjrXn/d7p6eoIZ2gmtM5BI= github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= From 71e35d773fe10e420f77bbc414ec779359b40007 Mon Sep 17 00:00:00 2001 From: Preston Hunt Date: Fri, 6 Feb 2026 19:45:26 -0800 Subject: [PATCH 027/156] feat(snapshot): disable progress by default if no tty (#5066) When running without a tty, disable progress by default. The progress includes binary characters such as a spinner that do not display properly without a tty. --- cli/cli_progress.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cli/cli_progress.go b/cli/cli_progress.go index ce7626ef4eb..3b4d689c1de 100644 --- a/cli/cli_progress.go +++ b/cli/cli_progress.go @@ -2,6 +2,7 @@ package cli import ( "fmt" + "os" "strconv" "strings" "sync" @@ -10,6 +11,7 @@ import ( "github.com/alecthomas/kingpin/v2" "github.com/fatih/color" + "golang.org/x/term" "github.com/kopia/kopia/internal/timetrack" "github.com/kopia/kopia/internal/units" @@ -29,7 +31,12 @@ type progressFlags struct { } func (p *progressFlags) setup(svc appServices, app *kingpin.Application) { - app.Flag("progress", "Enable progress output").Default("true").BoolVar(&p.enableProgress) + progressDefault := "true" + if !term.IsTerminal(int(os.Stdout.Fd())) { + progressDefault = "false" + } + + app.Flag("progress", "Enable progress output").Default(progressDefault).BoolVar(&p.enableProgress) app.Flag("progress-estimation-type", "Set type of estimation of the data to be snapshotted").Hidden().Default(upload.EstimationTypeClassic). EnumVar(&p.progressEstimationType, upload.EstimationTypeClassic, upload.EstimationTypeRough, upload.EstimationTypeAdaptive) app.Flag("progress-update-interval", "How often to update progress information").Hidden().Default("300ms").DurationVar(&p.progressUpdateInterval) From f9fdc89dd178a14280ec4191aa0ad5981b8d2bd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:16:25 +0000 Subject: [PATCH 028/156] build(deps): bump the common-golang-dependencies group with 7 updates (#5148) Bumps the common-golang-dependencies group with 7 updates: | Package | From | To | | --- | --- | --- | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.47.0` | `0.48.0` | | [golang.org/x/mod](https://github.com/golang/mod) | `0.32.0` | `0.33.0` | | [golang.org/x/net](https://github.com/golang/net) | `0.49.0` | `0.50.0` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.34.0` | `0.35.0` | | [golang.org/x/sys](https://github.com/golang/sys) | `0.40.0` | `0.41.0` | | [golang.org/x/term](https://github.com/golang/term) | `0.39.0` | `0.40.0` | | [golang.org/x/text](https://github.com/golang/text) | `0.33.0` | `0.34.0` | Updates `golang.org/x/crypto` from 0.47.0 to 0.48.0 - [Commits](https://github.com/golang/crypto/compare/v0.47.0...v0.48.0) Updates `golang.org/x/mod` from 0.32.0 to 0.33.0 - [Commits](https://github.com/golang/mod/compare/v0.32.0...v0.33.0) Updates `golang.org/x/net` from 0.49.0 to 0.50.0 - [Commits](https://github.com/golang/net/compare/v0.49.0...v0.50.0) Updates `golang.org/x/oauth2` from 0.34.0 to 0.35.0 - [Commits](https://github.com/golang/oauth2/compare/v0.34.0...v0.35.0) Updates `golang.org/x/sys` from 0.40.0 to 0.41.0 - [Commits](https://github.com/golang/sys/compare/v0.40.0...v0.41.0) Updates `golang.org/x/term` from 0.39.0 to 0.40.0 - [Commits](https://github.com/golang/term/compare/v0.39.0...v0.40.0) Updates `golang.org/x/text` from 0.33.0 to 0.34.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.33.0...v0.34.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.48.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/mod dependency-version: 0.33.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/net dependency-version: 0.50.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/oauth2 dependency-version: 0.35.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sys dependency-version: 0.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/term dependency-version: 0.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/text dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 74cba168262..de08a594ddc 100644 --- a/go.mod +++ b/go.mod @@ -58,15 +58,15 @@ require ( go.opentelemetry.io/otel/sdk v1.40.0 go.opentelemetry.io/otel/trace v1.40.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.47.0 + golang.org/x/crypto v0.48.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.32.0 - golang.org/x/net v0.49.0 - golang.org/x/oauth2 v0.34.0 + golang.org/x/mod v0.33.0 + golang.org/x/net v0.50.0 + golang.org/x/oauth2 v0.35.0 golang.org/x/sync v0.19.0 - golang.org/x/sys v0.40.0 - golang.org/x/term v0.39.0 - golang.org/x/text v0.33.0 + golang.org/x/sys v0.41.0 + golang.org/x/term v0.40.0 + golang.org/x/text v0.34.0 google.golang.org/api v0.265.0 google.golang.org/grpc v1.78.0 google.golang.org/protobuf v1.36.11 diff --git a/go.sum b/go.sum index 634e778a894..d9932089297 100644 --- a/go.sum +++ b/go.sum @@ -327,17 +327,17 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -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/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -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/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -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.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -345,13 +345,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -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/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= 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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 6b214b630a8b683b0dfbeafd7656dddab4b0c0d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:19:12 +0000 Subject: [PATCH 029/156] build(deps): bump github.com/klauspost/compress from 1.18.3 to 1.18.4 (#5149) Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.18.3 to 1.18.4. - [Release notes](https://github.com/klauspost/compress/releases) - [Commits](https://github.com/klauspost/compress/compare/v1.18.3...v1.18.4) --- updated-dependencies: - dependency-name: github.com/klauspost/compress dependency-version: 1.18.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index de08a594ddc..1da4e4ffd35 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/hanwen/go-fuse/v2 v2.9.0 github.com/hashicorp/cronexpr v1.1.3 - github.com/klauspost/compress v1.18.3 + github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.2 github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 diff --git a/go.sum b/go.sum index d9932089297..f3202519a24 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,8 @@ github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1 github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 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/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= -github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= +github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= From f6e3c40a248f504edf07db884e42fd4c35ca91d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:03:34 -0800 Subject: [PATCH 030/156] chore(infra): update agent instructions (#5153) --- .github/instructions/go.copilot-instructions.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/instructions/go.copilot-instructions.md b/.github/instructions/go.copilot-instructions.md index c945717c916..9deaa92650a 100644 --- a/.github/instructions/go.copilot-instructions.md +++ b/.github/instructions/go.copilot-instructions.md @@ -78,10 +78,12 @@ Refer to the linter configuration in `.golangci.yml` for style checks and standa ### Formatting +- Indent with tabs - Use `gofumt` to format code - Use `goimports` to manage ordering of `import` statements - Keep line length reasonable (no hard limit, but consider readability) -- Add blank lines to separate logical groups of code, adhering to the linter constraints. +- Add blank lines to separate logical groups of code, adhering to the linter constraints +- Ensure the file ends with a trailing newline `\n` ### Comments @@ -330,6 +332,8 @@ Refer to the linter configuration in `.golangci.yml` for style checks and standa - `go mod`: Manage dependencies - `go generate`: Code generation +`make lint vet` runs `go vet` and `golangci-lint` + ### Development Practices - Run tests before committing From 33d2bb3f74576e8043a1d1d3d8817948704fc100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:04:29 -0800 Subject: [PATCH 031/156] chore(ci): add install-checklocks convenience target (#5152) --- tools/tools.mk | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/tools.mk b/tools/tools.mk index d91f479a9c1..a0740fa6ff2 100644 --- a/tools/tools.mk +++ b/tools/tools.mk @@ -6,7 +6,7 @@ # # you will need to have git and golang too in the PATH. -.PHONY: all-tools install-linter install-gotestsum +.PHONY: all-tools install-checklocks install-gotestsum install-linter # windows,linux,darwin GOOS:=$(shell go env GOOS) @@ -168,6 +168,8 @@ $(checklocks): go install gvisor.dev/gvisor/tools/checklocks/cmd/checklocks@$(CHECKLOCKS_VERSION) go clean -modcache +install-checklocks: $(checklocks) + # cli2md cli2mdbin=$(TOOLS_DIR)$(slash)cli2md-current$(exe_suffix) @@ -322,4 +324,4 @@ regenerate-checksums: --output-dir /tmp/all-tools \ --tool $(ALL_TOOL_VERSIONS) -all-tools: install-gotestsum $(npm) install-linter $(maybehugo) +all-tools: install-gotestsum install-linter $(maybehugo) $(npm) From 8ec295eddd2f61ec0a4bd628d6b5fa2f40f031ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:07:48 -0800 Subject: [PATCH 032/156] fix(providers): sync file in FS provider to ensure data is persisted (#5150) Ensures the data is written to persistent storage before closing the file. - This prevents silently ignoring async I/O error that occur after the file handle has been closed, and thus not observed by the kopia process. - This prevents data loss cases of a client or server host crash where the file metadata was already persisted and the actual file data was not persisted yet. The actual behavior depends on the specific OS and file system implementation. For example, if no data has been written (flushed) to the device, the file size (metadata) may be 0, even after the subsequent rename. Either case above results in a potential repo corruption or data loss. These cases may occur more frequently with file systems accessed over the network, for example via NFS. Behavior change: a `Sync()` failure now aborts the write before close/ rename, so callers will see errors where previously the operation might have appeared successful, but risked silent data loss. --- repo/blob/filesystem/filesystem_storage.go | 4 + .../filesystem_storage_sync_test.go | 166 ++++++++++++++++++ repo/blob/filesystem/osinterface.go | 2 + repo/blob/filesystem/osinterface_mock_test.go | 21 ++- 4 files changed, 189 insertions(+), 4 deletions(-) create mode 100644 repo/blob/filesystem/filesystem_storage_sync_test.go diff --git a/repo/blob/filesystem/filesystem_storage.go b/repo/blob/filesystem/filesystem_storage.go index 4e9a1e85274..98acb8c3c48 100644 --- a/repo/blob/filesystem/filesystem_storage.go +++ b/repo/blob/filesystem/filesystem_storage.go @@ -182,6 +182,10 @@ func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data return errors.Wrap(err, "can't write temporary file") } + if err = f.Sync(); err != nil { + return errors.Wrap(err, "can't sync temporary file data") + } + if err = f.Close(); err != nil { return errors.Wrap(err, "can't close temporary file") } diff --git a/repo/blob/filesystem/filesystem_storage_sync_test.go b/repo/blob/filesystem/filesystem_storage_sync_test.go new file mode 100644 index 00000000000..548f657fcbd --- /dev/null +++ b/repo/blob/filesystem/filesystem_storage_sync_test.go @@ -0,0 +1,166 @@ +package filesystem + +import ( + "os" + "sync" + "sync/atomic" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/kopia/kopia/internal/gather" + "github.com/kopia/kopia/internal/testlogging" + "github.com/kopia/kopia/internal/testutil" + "github.com/kopia/kopia/repo/blob" + "github.com/kopia/kopia/repo/blob/sharded" +) + +type verifySyncBeforeCloseFile struct { + osWriteFile // +checklocksignore set on instantiation + + notifyClose func() // +checklocksignore set on instantiation + notifyDirtyClose func() // +checklocksignore set on instantiation + + mu sync.Mutex + // +checklocks:mu + dirty bool +} + +func (vf *verifySyncBeforeCloseFile) Write(p []byte) (n int, err error) { + vf.mu.Lock() + defer vf.mu.Unlock() + + vf.dirty = true + + return vf.osWriteFile.Write(p) +} + +func (vf *verifySyncBeforeCloseFile) Sync() error { + vf.mu.Lock() + defer vf.mu.Unlock() + + err := vf.osWriteFile.Sync() + if err == nil { + vf.dirty = false + } + + return err +} + +func (vf *verifySyncBeforeCloseFile) Close() error { + vf.mu.Lock() + defer vf.mu.Unlock() + + err := vf.osWriteFile.Close() + + if vf.dirty { + vf.notifyDirtyClose() + } + + vf.notifyClose() + + return err +} + +type mockOSForSyncTest struct { + mockOS + + fileOpenCount atomic.Uint32 + fileCloseCount atomic.Uint32 + dirtyClose atomic.Bool +} + +func (osi *mockOSForSyncTest) Open(fname string) (osReadFile, error) { + f, err := osi.mockOS.Open(fname) + if err != nil { + return nil, err + } + + osi.fileOpenCount.Add(1) + + return f, nil +} + +func (osi *mockOSForSyncTest) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, error) { + wf, err := osi.mockOS.CreateNewFile(fname, perm) + if err != nil { + return nil, err + } + + osi.fileOpenCount.Add(1) + + return &verifySyncBeforeCloseFile{ + osWriteFile: wf, + notifyClose: func() { osi.fileCloseCount.Add(1) }, + notifyDirtyClose: func() { osi.dirtyClose.Store(true) }, + }, nil +} + +// These tests reuse the retry/error-count mock to assert sync handling in PutBlob. +func TestPutBlob_SyncBeforeClose(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + osi := &mockOSForSyncTest{ + mockOS: mockOS{ + osInterface: realOS{}, + }, + } + + st, err := New(ctx, &Options{ + Path: testutil.TempDirectory(t), + Options: sharded.Options{DirectoryShards: []int{1}}, + + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + + t.Cleanup(func() { _ = st.Close(ctx) }) + + err = st.PutBlob(ctx, "blob-sync-ok", gather.FromSlice([]byte("hello")), blob.PutOptions{}) + + require.False(t, osi.dirtyClose.Load(), "close called without calling sync after a write") + require.Equal(t, osi.fileOpenCount.Load(), osi.fileCloseCount.Load(), "calls to file.Close() must match number of opened files()") + require.NoError(t, err) + + var buf gather.WriteBuffer + t.Cleanup(buf.Close) + + err = st.GetBlob(ctx, "blob-sync-ok", 0, -1, &buf) + require.NoError(t, err) + require.Equal(t, []byte("hello"), buf.ToByteSlice()) +} + +func TestPutBlob_FailsOnSyncError(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + dataDir := testutil.TempDirectory(t) + + osi := newMockOS() + + st, err := New(ctx, &Options{ + Path: dataDir, + Options: sharded.Options{DirectoryShards: []int{1}}, + + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + t.Cleanup(func() { _ = st.Close(ctx) }) + + // Test HACK: write a dummy blob to force writing the sharding configuration file, so writing the + // config file does not interfere with the test. While this is coupled to the specifics of the + // current implementation, it is required to be able to test the failure case. + err = st.PutBlob(ctx, "dummy", gather.FromSlice([]byte("hello")), blob.PutOptions{}) + require.NoError(t, err) + + // Inject a failure per create (re-)try, 10 is the default number of retries + osi.writeFileSyncRemainingErrors.Store(10) + + err = st.PutBlob(ctx, "blob-sync-fail", gather.FromSlice([]byte("hello")), blob.PutOptions{}) + require.Error(t, err) + require.ErrorContains(t, err, "can't sync temporary file data") + + _, err = st.GetMetadata(ctx, "blob-sync-fail") + require.ErrorIs(t, err, blob.ErrBlobNotFound) +} diff --git a/repo/blob/filesystem/osinterface.go b/repo/blob/filesystem/osinterface.go index c0fb2568203..49e5f00a785 100644 --- a/repo/blob/filesystem/osinterface.go +++ b/repo/blob/filesystem/osinterface.go @@ -38,4 +38,6 @@ type osReadFile interface { type osWriteFile interface { io.WriteCloser + + Sync() error } diff --git a/repo/blob/filesystem/osinterface_mock_test.go b/repo/blob/filesystem/osinterface_mock_test.go index fc1a9d229f0..43070cbd6a4 100644 --- a/repo/blob/filesystem/osinterface_mock_test.go +++ b/repo/blob/filesystem/osinterface_mock_test.go @@ -13,9 +13,12 @@ import ( var errNonRetriable = errors.New("some non-retriable error") type mockOS struct { + osInterface + readFileRemainingErrors atomic.Int32 writeFileRemainingErrors atomic.Int32 writeFileCloseRemainingErrors atomic.Int32 + writeFileSyncRemainingErrors atomic.Int32 createNewFileRemainingErrors atomic.Int32 mkdirAllRemainingErrors atomic.Int32 renameRemainingErrors atomic.Int32 @@ -34,8 +37,6 @@ type mockOS struct { // remaining syscall errnos //nolint:unused // Used with platform specific code eStaleRemainingErrors atomic.Int32 - - osInterface } func (osi *mockOS) Open(fname string) (osReadFile, error) { @@ -125,11 +126,15 @@ func (osi *mockOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, e } if osi.writeFileRemainingErrors.Add(-1) >= 0 { - return writeFailureFile{wf}, nil + wf = writeFailureFile{wf} + } + + if osi.writeFileSyncRemainingErrors.Add(-1) >= 0 { + wf = syncFailureFile{wf} } if osi.writeFileCloseRemainingErrors.Add(-1) >= 0 { - return writeCloseFailureFile{wf}, nil + wf = writeCloseFailureFile{wf} } return wf, nil @@ -163,6 +168,14 @@ func (f writeFailureFile) Write(b []byte) (int, error) { return 0, &os.PathError{Op: "write", Err: errors.New("underlying problem")} } +type syncFailureFile struct { + osWriteFile +} + +func (f syncFailureFile) Sync() error { + return &os.PathError{Op: "fsync", Err: errors.New("sync failure")} +} + type writeCloseFailureFile struct { osWriteFile } From a9ad321f60d7a9444a6ddc45bbcbbde9da70040b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 10 Feb 2026 22:49:46 -0800 Subject: [PATCH 033/156] test(providers): notify after releasing the lock (#5154) Following the recommended pattern with the expectation of reducing potential deadlocks in future changes. --- repo/blob/filesystem/filesystem_storage_sync_test.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage_sync_test.go b/repo/blob/filesystem/filesystem_storage_sync_test.go index 548f657fcbd..ba907b7330e 100644 --- a/repo/blob/filesystem/filesystem_storage_sync_test.go +++ b/repo/blob/filesystem/filesystem_storage_sync_test.go @@ -48,12 +48,14 @@ func (vf *verifySyncBeforeCloseFile) Sync() error { } func (vf *verifySyncBeforeCloseFile) Close() error { - vf.mu.Lock() - defer vf.mu.Unlock() + dirty, err := func() (bool, error) { + vf.mu.Lock() + defer vf.mu.Unlock() - err := vf.osWriteFile.Close() + return vf.dirty, vf.osWriteFile.Close() + }() - if vf.dirty { + if dirty { vf.notifyDirtyClose() } From 90311bb8c05a163ccacf0baa7185a9cd666b75f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 22:50:34 -0800 Subject: [PATCH 034/156] build(deps): bump the common-golang-dependencies group with 3 updates (#5158) Bumps the common-golang-dependencies group with 3 updates: [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go), [google.golang.org/api](https://github.com/googleapis/google-api-go-client) and [google.golang.org/grpc](https://github.com/grpc/grpc-go). Updates `cloud.google.com/go/storage` from 1.59.2 to 1.60.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/storage/v1.59.2...spanner/v1.60.0) Updates `google.golang.org/api` from 0.265.0 to 0.266.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.265.0...v0.266.0) Updates `google.golang.org/grpc` from 1.78.0 to 1.79.1 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.78.0...v1.79.1) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.60.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.266.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/grpc dependency-version: 1.79.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 28 +++++++++++------------ go.sum | 72 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/go.mod b/go.mod index 1da4e4ffd35..d7b50ccad3c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25 toolchain go1.25.7 require ( - cloud.google.com/go/storage v1.59.2 + cloud.google.com/go/storage v1.60.0 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -67,15 +67,15 @@ require ( golang.org/x/sys v0.41.0 golang.org/x/term v0.40.0 golang.org/x/text v0.34.0 - google.golang.org/api v0.265.0 - google.golang.org/grpc v1.78.0 + google.golang.org/api v0.266.0 + google.golang.org/grpc v1.79.1 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) require ( al.essio.dev/pkg/shellescape v1.5.1 // indirect - cel.dev/expr v0.24.0 // indirect + cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth v0.18.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect @@ -86,18 +86,18 @@ require ( github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chromedp/sysutil v1.1.0 // indirect - github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f // indirect + github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect github.com/danieljoos/wincred v1.2.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/frankban/quicktest v1.13.1 // indirect @@ -117,7 +117,7 @@ require ( github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect - github.com/googleapis/gax-go/v2 v2.16.0 // indirect + github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -136,7 +136,7 @@ require ( github.com/tinylib/msgp v1.6.1 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect @@ -147,8 +147,8 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 // indirect + google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f3202519a24..72e3a3f5aa0 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho= al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= -cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= -cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= @@ -14,12 +14,12 @@ cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= -cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= -cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= +cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= +cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.59.2 h1:gmOAuG1opU8YvycMNpP+DvHfT9BfzzK5Cy+arP+Nocw= -cloud.google.com/go/storage v1.59.2/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= +cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= +cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -43,12 +43,12 @@ github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 h1:IEjq88XO4PuBDcv github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5/go.mod h1:exZ0C/1emQJAw5tHOaUDyY1ycttqBAPcxuzf7QbY6ec= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= @@ -70,8 +70,8 @@ github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHG github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0= -github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= +github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= +github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -88,14 +88,14 @@ github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 h1:9 github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0/go.mod h1:V+Qd57rJe8gd4eiGzZyg4h54VLHmYVVw54iMnlAMrF8= github.com/edsrzf/mmap-go v1.2.0 h1:hXLYlkbaPzt1SaQk+anYwKSRNhufIDCchSPkUD6dD84= github.com/edsrzf/mmap-go v1.2.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= -github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM= -github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329/go.mod h1:Alz8LEClvR7xKsrq3qzoc4N0guvVNSS8KmSChGYr9hs= -github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo= -github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs= +github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= +github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= +github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g= +github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98= 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 v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= -github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= +github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= 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/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= @@ -157,8 +157,8 @@ 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/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= -github.com/googleapis/gax-go/v2 v2.16.0 h1:iHbQmKLLZrexmb0OSsNGTeSTS0HO4YvFOG8g5E4Zd0Y= -github.com/googleapis/gax-go/v2 v2.16.0/go.mod h1:o1vfQjjNZn4+dPnRdl/4ZD7S9414Y4xA+a/6Icj6l14= +github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= +github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= @@ -291,8 +291,8 @@ github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs= -go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts= +go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= +go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= @@ -303,8 +303,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQg go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= @@ -357,16 +357,16 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.265.0 h1:FZvfUdI8nfmuNrE34aOWFPmLC+qRBEiNm3JdivTvAAU= -google.golang.org/api v0.265.0/go.mod h1:uAvfEl3SLUj/7n6k+lJutcswVojHPp2Sp08jWCu8hLY= -google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= -google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= -google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409 h1:merA0rdPeUV3YIIfHHcH4qBkiQAc1nfCKSI7lB4cV2M= -google.golang.org/genproto/googleapis/api v0.0.0-20260128011058-8636f8732409/go.mod h1:fl8J1IvUjCilwZzQowmw2b7HQB2eAuYBabMXzWurF+I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409 h1:H86B94AW+VfJWDqFeEbBPhEtHzJwJfTbgE2lZa54ZAQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260128011058-8636f8732409/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= -google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +google.golang.org/api v0.266.0 h1:hco+oNCf9y7DmLeAtHJi/uBAY7n/7XC9mZPxu1ROiyk= +google.golang.org/api v0.266.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= +google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= +google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= +google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= +google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= +google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From a2d62c83404d770e333929ae9690a911a0743f20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 18:09:42 -0800 Subject: [PATCH 035/156] build(deps-dev): bump tar from 7.5.7 to 7.5.9 in /app (#5159) * build(deps-dev): bump tar from 7.5.7 to 7.5.9 in /app Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.7 to 7.5.9. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.7...v7.5.9) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] * build(deps-dev): upgrade ajv to 8.18.0 to fix vulnerability (#5162) --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> --- app/package-lock.json | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 6a979fd1bd4..10daf11a1a8 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -308,7 +308,6 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, - "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -330,7 +329,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -795,6 +793,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -824,9 +823,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -1726,9 +1725,9 @@ } }, "node_modules/conf/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -1784,8 +1783,7 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -1992,6 +1990,7 @@ "integrity": "sha512-IkGlOLfJ3q7y9iaDMnNSArDdPg3Ntx8Ps6aL7yTEIpL6znA+t5L/LRTAGFz1J/12hM/NiNEYg0LoBEheqGdZXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "app-builder-lib": "26.6.0", "builder-util": "26.4.1", @@ -2263,7 +2262,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -2284,7 +2282,6 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -2300,7 +2297,6 @@ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -2311,7 +2307,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 4.0.0" } @@ -3873,6 +3868,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -3934,7 +3930,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -3952,7 +3947,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": "^12.20.0 || >=14" } @@ -4169,7 +4163,6 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -4569,9 +4562,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -4601,7 +4594,6 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" From d2a60d2081b907e1bb3938488e53cbb5cdfadf2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:21:39 -0800 Subject: [PATCH 036/156] fix(providers): cleanup temporary file on put blob failure (#5157) Ensure that temporary files are removed when there is an error writing the file. Refactor PutBlobInPath to extract temp file creation into separate `createTempFileWithData` function that handles: - Temporary file creation with random suffix - Writing data to the file - Syncing the file - Closing the file - Removing temp file on any write/sync/close error Added unit tests for error handling scenarios --- repo/blob/filesystem/filesystem_storage.go | 70 +++++--- .../filesystem/filesystem_storage_test.go | 154 ++++++++++++++++++ 2 files changed, 202 insertions(+), 22 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage.go b/repo/blob/filesystem/filesystem_storage.go index 98acb8c3c48..1d58cefc8eb 100644 --- a/repo/blob/filesystem/filesystem_storage.go +++ b/repo/blob/filesystem/filesystem_storage.go @@ -4,6 +4,7 @@ package filesystem import ( "context" "crypto/rand" + stderrors "errors" "fmt" "io" "os" @@ -154,7 +155,7 @@ func (fs *fsImpl) GetMetadataFromPath(ctx context.Context, dirPath, path string) }, fs.isRetriable) } -//nolint:wrapcheck,gocyclo +//nolint:wrapcheck func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data blob.Bytes, opts blob.PutOptions) error { _ = dirPath @@ -166,28 +167,9 @@ func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data } return retry.WithExponentialBackoffNoValue(ctx, "PutBlobInPath:"+path, func() error { - randSuffix := make([]byte, tempFileRandomSuffixLen) - if _, err := rand.Read(randSuffix); err != nil { - return errors.Wrap(err, "can't get random bytes") - } - - tempFile := fmt.Sprintf("%s.tmp.%x", path, randSuffix) - - f, err := fs.createTempFileAndDir(tempFile) + tempFile, err := fs.createTempFileWithData(path, data) if err != nil { - return errors.Wrap(err, "cannot create temporary file") - } - - if _, err = data.WriteTo(f); err != nil { - return errors.Wrap(err, "can't write temporary file") - } - - if err = f.Sync(); err != nil { - return errors.Wrap(err, "can't sync temporary file data") - } - - if err = f.Close(); err != nil { - return errors.Wrap(err, "can't close temporary file") + return err } err = fs.osi.Rename(tempFile, path) @@ -225,6 +207,50 @@ func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data }, fs.isRetriable) } +// createTempFileWithData creates a temporary file, writes data to it, syncs and closes it. +// Returns the name of the temporary file and an error. +// If there is an error writing, syncing, or closing the file, the temporary file is removed. +func (fs *fsImpl) createTempFileWithData(path string, data blob.Bytes) (name string, err error) { + randSuffix := make([]byte, tempFileRandomSuffixLen) + if _, err := rand.Read(randSuffix); err != nil { + return "", errors.Wrap(err, "can't get random bytes for temporary filename") + } + + tempFile := fmt.Sprintf("%s.tmp.%x", path, randSuffix) + + f, err := fs.createTempFileAndDir(tempFile) + if err != nil { + return "", errors.Wrap(err, "cannot create temporary file") + } + + defer func() { + if closeErr := f.Close(); closeErr != nil { + err = stderrors.Join(err, errors.Wrap(closeErr, "can't close temporary file")) + } + + // remove temp file when any of the operations fail + if err != nil { + name = "" + + if removeErr := fs.osi.Remove(tempFile); removeErr != nil { + err = stderrors.Join(err, errors.Wrap(removeErr, "can't remove temp file after error")) + } + } + }() + + if _, err = data.WriteTo(f); err != nil { + return "", errors.Wrap(err, "can't write temporary file") + } + + if err = f.Sync(); err != nil { + return "", errors.Wrap(err, "can't sync temporary file data") + } + + // f closed in deferred cleanup function + + return tempFile, nil +} + func (fs *fsImpl) createTempFileAndDir(tempFile string) (osWriteFile, error) { f, err := fs.osi.CreateNewFile(tempFile, fs.fileMode()) if fs.osi.IsNotExist(err) { diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index b814a5871db..d903196ac61 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -2,8 +2,10 @@ package filesystem import ( "context" + "os" "path/filepath" "reflect" + "runtime" "sort" "testing" "time" @@ -496,3 +498,155 @@ func newMockOS() *mockOS { osInterface: realOS{}, } } + +func TestFileStorage_CreateTempFileWithData_Success(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + dataDir := testutil.TempDirectory(t) + + st, err := New(ctx, &Options{ + Path: dataDir, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + }, true) + require.NoError(t, err) + + t.Cleanup(func() { + require.NoError(t, st.Close(ctx)) + }) + + data := gather.FromSlice([]byte{1, 2, 3, 4, 5}) + testPath := filepath.Join(dataDir, "someb", "lo", "b1234567812345678.f") + tempFile, err := asFsImpl(t, st).createTempFileWithData(testPath, data) + + require.NoError(t, err) + require.NotEmpty(t, tempFile) + + t.Cleanup(func() { + require.NoError(t, os.Remove(tempFile)) + }) + + require.Contains(t, tempFile, ".tmp.") + + // Verify temp file exists and has correct content + content, err := os.ReadFile(tempFile) + require.NoError(t, err) + require.Equal(t, []byte{1, 2, 3, 4, 5}, content) +} + +func TestFileStorage_CreateTempFileWithData_WriteError(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + dataDir := testutil.TempDirectory(t) + + osi := newMockOS() + osi.writeFileRemainingErrors.Store(1) + + st, err := New(ctx, &Options{ + Path: dataDir, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + + t.Cleanup(func() { + require.NoError(t, st.Close(ctx)) + }) + + data := gather.FromSlice([]byte{1, 2, 3, 4, 5}) + testPath := filepath.Join(dataDir, "someb", "lo", "b1234567812345678.f") + tempFile, err := asFsImpl(t, st).createTempFileWithData(testPath, data) + + require.Error(t, err) + require.Contains(t, err.Error(), "can't write temporary file") + require.Empty(t, tempFile) + + // Verify temp file was removed (doesn't exist). There should be no other + // blobs with the same prefix, so listing blobs should return 0 entries. + verifyEmptyDir(t, filepath.Join(dataDir, "someb", "lo")) +} + +func TestFileStorage_CreateTempFileWithData_SyncError(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + dataDir := testutil.TempDirectory(t) + + osi := newMockOS() + osi.writeFileSyncRemainingErrors.Store(1) + + st, err := New(ctx, &Options{ + Path: dataDir, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + + t.Cleanup(func() { + require.NoError(t, st.Close(ctx)) + }) + + data := gather.FromSlice([]byte{1, 2, 3, 4, 5}) + testPath := filepath.Join(dataDir, "someb", "lo", "b1234567812345678.f") + tempFile, err := asFsImpl(t, st).createTempFileWithData(testPath, data) + + require.Error(t, err) + require.Contains(t, err.Error(), "can't sync temporary file data") + require.Empty(t, tempFile) + + verifyEmptyDir(t, filepath.Join(dataDir, "someb", "lo")) +} + +func TestFileStorage_CreateTempFileWithData_CloseError(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + + dataDir := testutil.TempDirectory(t) + + osi := newMockOS() + osi.writeFileCloseRemainingErrors.Store(1) + + st, err := New(ctx, &Options{ + Path: dataDir, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + + t.Cleanup(func() { + require.NoError(t, st.Close(ctx)) + }) + + data := gather.FromSlice([]byte{1, 2, 3, 4, 5}) + testPath := filepath.Join(dataDir, "someb", "lo", "b1234567812345678.f") + tempFile, err := asFsImpl(t, st).createTempFileWithData(testPath, data) + + require.Error(t, err) + require.ErrorContains(t, err, "can't close temporary file") + require.Empty(t, tempFile) + + // Skip this check on Windows because the file cannot be removed because it + // is still open, since there was an error closing it. + if runtime.GOOS != "windows" { + verifyEmptyDir(t, filepath.Join(dataDir, "someb", "lo")) + } +} + +func verifyEmptyDir(t *testing.T, dir string) { + t.Helper() + + entries, err := os.ReadDir(dir) + + require.NoError(t, err) + require.Empty(t, entries) +} From 77dd1b8150e472549efe26b3ca44c921ab00c558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 18 Feb 2026 20:59:18 -0800 Subject: [PATCH 037/156] test(providers): make tests with injected errors more robust (#5164) - close the underlying file to avoid leaking file descriptors during tests - improve the error messages of the injected errors --- .../filesystem/filesystem_storage_test.go | 8 +----- repo/blob/filesystem/osinterface_mock_test.go | 27 +++++++++++-------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index d903196ac61..273e72c7fd6 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -5,7 +5,6 @@ import ( "os" "path/filepath" "reflect" - "runtime" "sort" "testing" "time" @@ -634,12 +633,7 @@ func TestFileStorage_CreateTempFileWithData_CloseError(t *testing.T) { require.Error(t, err) require.ErrorContains(t, err, "can't close temporary file") require.Empty(t, tempFile) - - // Skip this check on Windows because the file cannot be removed because it - // is still open, since there was an error closing it. - if runtime.GOOS != "windows" { - verifyEmptyDir(t, filepath.Join(dataDir, "someb", "lo")) - } + verifyEmptyDir(t, filepath.Join(dataDir, "someb", "lo")) } func verifyEmptyDir(t *testing.T, dir string) { diff --git a/repo/blob/filesystem/osinterface_mock_test.go b/repo/blob/filesystem/osinterface_mock_test.go index 43070cbd6a4..53eb3c6a272 100644 --- a/repo/blob/filesystem/osinterface_mock_test.go +++ b/repo/blob/filesystem/osinterface_mock_test.go @@ -54,7 +54,7 @@ func (osi *mockOS) Open(fname string) (osReadFile, error) { func (osi *mockOS) Rename(oldname, newname string) error { if osi.renameRemainingErrors.Add(-1) >= 0 { - return &os.LinkError{Op: "rename", Old: oldname, New: newname, Err: errors.New("underlying problem")} + return &os.LinkError{Op: "rename", Old: oldname, New: newname, Err: errors.New("injected rename error")} } return osi.osInterface.Rename(oldname, newname) @@ -64,7 +64,7 @@ func (osi *mockOS) IsPathSeparator(c byte) bool { return os.IsPathSeparator(c) } func (osi *mockOS) ReadDir(dirname string) ([]fs.DirEntry, error) { if osi.readDirRemainingErrors.Add(-1) >= 0 { - return nil, &os.PathError{Op: "readdir", Err: errors.New("underlying problem")} + return nil, &os.PathError{Op: "readdir", Err: errors.New("injected readdir error")} } if osi.readDirRemainingNonRetriableErrors.Add(-1) >= 0 { @@ -89,7 +89,7 @@ func (osi *mockOS) ReadDir(dirname string) ([]fs.DirEntry, error) { func (osi *mockOS) Remove(fname string) error { if osi.removeRemainingRetriableErrors.Add(-1) >= 0 { - return &os.PathError{Op: "unlink", Err: errors.New("underlying problem")} + return &os.PathError{Op: "unlink", Err: errors.New("injected remove error")} } if osi.removeRemainingNonRetriableErrors.Add(-1) >= 0 { @@ -101,7 +101,7 @@ func (osi *mockOS) Remove(fname string) error { func (osi *mockOS) Chtimes(fname string, atime, mtime time.Time) error { if osi.chtimesRemainingErrors.Add(-1) >= 0 { - return &os.PathError{Op: "chtimes", Err: errors.New("underlying problem")} + return &os.PathError{Op: "chtimes", Err: errors.New("injected chtimes error")} } return osi.osInterface.Chtimes(fname, atime, mtime) @@ -109,7 +109,7 @@ func (osi *mockOS) Chtimes(fname string, atime, mtime time.Time) error { func (osi *mockOS) Chown(fname string, uid, gid int) error { if osi.chownRemainingErrors.Add(-1) >= 0 { - return &os.PathError{Op: "chown", Err: errors.New("underlying problem")} + return &os.PathError{Op: "chown", Err: errors.New("injected chown error")} } return osi.osInterface.Chown(fname, uid, gid) @@ -117,7 +117,7 @@ func (osi *mockOS) Chown(fname string, uid, gid int) error { func (osi *mockOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, error) { if osi.createNewFileRemainingErrors.Add(-1) >= 0 { - return nil, &os.PathError{Op: "create", Err: errors.New("underlying problem")} + return nil, &os.PathError{Op: "create", Err: errors.New("injected error on CreateNewFile")} } wf, err := osi.osInterface.CreateNewFile(fname, perm) @@ -142,7 +142,7 @@ func (osi *mockOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, e func (osi *mockOS) Mkdir(fname string, mode os.FileMode) error { if osi.mkdirAllRemainingErrors.Add(-1) >= 0 { - return &os.PathError{Op: "mkdir", Err: errors.New("underlying problem")} + return &os.PathError{Op: "mkdir", Err: errors.New("injected mkdir error")} } return osi.osInterface.Mkdir(fname, mode) @@ -157,7 +157,7 @@ type readFailureFile struct { } func (f readFailureFile) Read(b []byte) (int, error) { - return 0, &os.PathError{Op: "read", Err: errors.New("underlying problem")} + return 0, &os.PathError{Op: "read", Err: errors.New("injected read error")} } type writeFailureFile struct { @@ -165,7 +165,7 @@ type writeFailureFile struct { } func (f writeFailureFile) Write(b []byte) (int, error) { - return 0, &os.PathError{Op: "write", Err: errors.New("underlying problem")} + return 0, &os.PathError{Op: "write", Err: errors.New("injected write error")} } type syncFailureFile struct { @@ -173,7 +173,7 @@ type syncFailureFile struct { } func (f syncFailureFile) Sync() error { - return &os.PathError{Op: "fsync", Err: errors.New("sync failure")} + return &os.PathError{Op: "fsync", Err: errors.New("injected sync error")} } type writeCloseFailureFile struct { @@ -181,7 +181,12 @@ type writeCloseFailureFile struct { } func (f writeCloseFailureFile) Close() error { - return &os.PathError{Op: "close", Err: errors.New("underlying problem")} + // close the file to avoid leaking handles + if err := f.osWriteFile.Close(); err != nil { + return errors.Wrap(err, "underlying close error") + } + + return &os.PathError{Op: "close", Err: errors.New("injected close error")} } type mockDirEntryInfoError struct { From 59325e323ee4a98b628c2e449a7b48ffe64e4e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:33:18 -0800 Subject: [PATCH 038/156] test(providers): update injected error message (#5165) * test(providers): update injected error message * test(provider): minor cleanups in fs_storage_test.go --- .../filesystem/filesystem_storage_test.go | 39 +++++-------------- .../filesystem/osinterface_mock_other_test.go | 2 +- .../filesystem/osinterface_mock_unix_test.go | 2 +- 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index 273e72c7fd6..2b06a5696bb 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -214,18 +214,15 @@ func TestFileStorage_GetMetadata_RetriesOnError(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - dataDir := testutil.TempDirectory(t) - osi := newMockOS() - osi.statRemainingErrors.Store(1) - st, err := New(ctx, &Options{ Path: dataDir, Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, + osInterfaceOverride: osi, }, true) require.NoError(t, err) @@ -233,7 +230,7 @@ func TestFileStorage_GetMetadata_RetriesOnError(t *testing.T) { require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) - asFsImpl(t, st).osi = osi + osi.statRemainingErrors.Store(1) _, err = st.GetMetadata(ctx, "someblob1234567812345678") require.NoError(t, err) @@ -275,11 +272,10 @@ func TestFileStorage_PutBlob_RetriesOnErrors(t *testing.T) { Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, + osInterfaceOverride: osi, }, true) require.NoError(t, err) - asFsImpl(t, st).osi = osi - defer st.Close(ctx) require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) @@ -316,11 +312,10 @@ func TestFileStorage_DeleteBlob_ErrorHandling(t *testing.T) { Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, + osInterfaceOverride: osi, }, true) require.NoError(t, err) - asFsImpl(t, st).osi = osi - defer st.Close(ctx) require.ErrorIs(t, st.DeleteBlob(ctx, "someblob1234567812345678"), errNonRetriable) @@ -330,14 +325,11 @@ func TestFileStorage_New_MkdirAllFailureIsIgnored(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - - dataDir := testutil.TempDirectory(t) - osi := newMockOS() osi.mkdirAllRemainingErrors.Store(1) st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, @@ -352,15 +344,12 @@ func TestFileStorage_New_ChecksDirectoryExistence(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - - dataDir := testutil.TempDirectory(t) - osi := newMockOS() osi.statRemainingErrors.Store(1) st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, @@ -374,24 +363,20 @@ func TestFileStorage_ListBlobs_ErrorHandling(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - - dataDir := testutil.TempDirectory(t) - osi := newMockOS() osi.readDirRemainingErrors.Store(3) osi.readDirRemainingFileDeletedDirEntry.Store(3) st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, + osInterfaceOverride: osi, }, true) require.NoError(t, err) - asFsImpl(t, st).osi = osi - defer st.Close(ctx) require.NoError(t, st.ListBlobs(ctx, "", func(bm blob.Metadata) error { @@ -415,21 +400,17 @@ func TestFileStorage_TouchBlob_ErrorHandling(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - - dataDir := testutil.TempDirectory(t) - osi := newMockOS() st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, + osInterfaceOverride: osi, }, true) require.NoError(t, err) - asFsImpl(t, st).osi = osi - defer st.Close(ctx) require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) diff --git a/repo/blob/filesystem/osinterface_mock_other_test.go b/repo/blob/filesystem/osinterface_mock_other_test.go index f75e5987292..d2431700466 100644 --- a/repo/blob/filesystem/osinterface_mock_other_test.go +++ b/repo/blob/filesystem/osinterface_mock_other_test.go @@ -11,7 +11,7 @@ import ( func (osi *mockOS) Stat(fname string) (fs.FileInfo, error) { if osi.statRemainingErrors.Add(-1) >= 0 { - return nil, &os.PathError{Op: "stat", Err: errors.New("underlying problem")} + return nil, &os.PathError{Op: "stat", Err: errors.New("injected stat error")} } return osi.osInterface.Stat(fname) diff --git a/repo/blob/filesystem/osinterface_mock_unix_test.go b/repo/blob/filesystem/osinterface_mock_unix_test.go index d2ae3143ae7..88b7ed5ae1e 100644 --- a/repo/blob/filesystem/osinterface_mock_unix_test.go +++ b/repo/blob/filesystem/osinterface_mock_unix_test.go @@ -12,7 +12,7 @@ import ( func (osi *mockOS) Stat(fname string) (fs.FileInfo, error) { if osi.statRemainingErrors.Add(-1) >= 0 { - return nil, &os.PathError{Op: "stat", Err: errors.New("underlying problem")} + return nil, &os.PathError{Op: "stat", Err: errors.New("injected stat error")} } if osi.eStaleRemainingErrors.Add(-1) >= 0 { From 735393499db11c067c48c9bd43cac1178b1e11f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:38:08 -0800 Subject: [PATCH 039/156] test(providers): require.NoError (#5166) --- .../filesystem/filesystem_storage_test.go | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index 2b06a5696bb..e76f8344c8f 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -104,32 +104,32 @@ func TestFileStorageTouch(t *testing.T) { } fs := testutil.EnsureType[*fsStorage](t, r) - assertNoError(t, fs.PutBlob(ctx, t1, gather.FromSlice([]byte{1}), blob.PutOptions{})) + require.NoError(t, fs.PutBlob(ctx, t1, gather.FromSlice([]byte{1}), blob.PutOptions{})) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution - assertNoError(t, fs.PutBlob(ctx, t2, gather.FromSlice([]byte{1}), blob.PutOptions{})) + require.NoError(t, fs.PutBlob(ctx, t2, gather.FromSlice([]byte{1}), blob.PutOptions{})) time.Sleep(2 * time.Second) - assertNoError(t, fs.PutBlob(ctx, t3, gather.FromSlice([]byte{1}), blob.PutOptions{})) + require.NoError(t, fs.PutBlob(ctx, t3, gather.FromSlice([]byte{1}), blob.PutOptions{})) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution verifyBlobTimestampOrder(t, fs, t1, t2, t3) _, err = fs.TouchBlob(ctx, t2, 1*time.Hour) - assertNoError(t, err) // has no effect, all timestamps are very new + require.NoError(t, err) // has no effect, all timestamps are very new verifyBlobTimestampOrder(t, fs, t1, t2, t3) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution _, err = fs.TouchBlob(ctx, t1, 0) - assertNoError(t, err) // moves t1 to the top of the pile + require.NoError(t, err) // moves t1 to the top of the pile verifyBlobTimestampOrder(t, fs, t2, t3, t1) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution _, err = fs.TouchBlob(ctx, t2, 0) - assertNoError(t, err) // moves t2 to the top of the pile + require.NoError(t, err) // moves t2 to the top of the pile verifyBlobTimestampOrder(t, fs, t3, t1, t2) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution _, err = fs.TouchBlob(ctx, t1, 0) - assertNoError(t, err) // moves t1 to the top of the pile + require.NoError(t, err) // moves t1 to the top of the pile verifyBlobTimestampOrder(t, fs, t3, t2, t1) } @@ -465,14 +465,6 @@ func verifyBlobTimestampOrder(t *testing.T, st blob.Storage, want ...blob.ID) { } } -func assertNoError(t *testing.T, err error) { - t.Helper() - - if err != nil { - t.Errorf("err: %v", err) - } -} - func newMockOS() *mockOS { return &mockOS{ osInterface: realOS{}, From 7598f74098072f6497185e9fadc74e9053956cda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 23:48:46 +0000 Subject: [PATCH 040/156] build(deps): bump the kopia-ui-npm-dependencies group across 1 directory with 14 updates (#5126) * build(deps): bump the kopia-ui-npm-dependencies group across 1 directory with 14 updates Bumps the kopia-ui-npm-dependencies group with 11 updates in the /app directory: | Package | From | To | | --- | --- | --- | | [electron-log](https://github.com/megahertz/electron-log) | `5.4.0` | `5.4.3` | | [electron-store](https://github.com/sindresorhus/electron-store) | `10.0.1` | `11.0.2` | | [electron-updater](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-updater) | `6.6.2` | `6.7.3` | | [uuid](https://github.com/uuidjs/uuid) | `11.1.0` | `13.0.0` | | [@electron/notarize](https://github.com/electron/notarize) | `3.0.1` | `3.1.1` | | [@playwright/test](https://github.com/microsoft/playwright) | `1.52.0` | `1.58.1` | | [concurrently](https://github.com/open-cli-tools/concurrently) | `9.1.2` | `9.2.1` | | [dotenv](https://github.com/motdotla/dotenv) | `16.5.0` | `17.2.3` | | [electron](https://github.com/electron/electron) | `36.8.1` | `40.1.0` | | [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) | `26.0.12` | `26.7.0` | | [prettier](https://github.com/prettier/prettier) | `3.5.3` | `3.8.1` | Updates `electron-log` from 5.4.0 to 5.4.3 - [Changelog](https://github.com/megahertz/electron-log/blob/master/CHANGELOG.md) - [Commits](https://github.com/megahertz/electron-log/compare/v5.4.0...v5.4.3) Updates `electron-store` from 10.0.1 to 11.0.2 - [Release notes](https://github.com/sindresorhus/electron-store/releases) - [Commits](https://github.com/sindresorhus/electron-store/compare/v10.0.1...v11.0.2) Updates `electron-updater` from 6.6.2 to 6.7.3 - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/commits/electron-updater@6.7.3/packages/electron-updater) Updates `semver` from 7.7.2 to 7.7.3 - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.7.2...v7.7.3) Updates `uuid` from 11.1.0 to 13.0.0 - [Release notes](https://github.com/uuidjs/uuid/releases) - [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md) - [Commits](https://github.com/uuidjs/uuid/compare/v11.1.0...v13.0.0) Updates `@electron/notarize` from 3.0.1 to 3.1.1 - [Release notes](https://github.com/electron/notarize/releases) - [Commits](https://github.com/electron/notarize/compare/v3.0.1...v3.1.1) Updates `@playwright/test` from 1.52.0 to 1.58.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.52.0...v1.58.1) Updates `concurrently` from 9.1.2 to 9.2.1 - [Release notes](https://github.com/open-cli-tools/concurrently/releases) - [Commits](https://github.com/open-cli-tools/concurrently/compare/v9.1.2...v9.2.1) Updates `dotenv` from 16.5.0 to 17.2.3 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v16.5.0...v17.2.3) Updates `electron` from 36.8.1 to 40.1.0 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v36.8.1...v40.1.0) Updates `electron-builder` from 26.0.12 to 26.7.0 - [Release notes](https://github.com/electron-userland/electron-builder/releases) - [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md) - [Commits](https://github.com/electron-userland/electron-builder/commits/electron-builder@26.7.0/packages/electron-builder) Updates `playwright` from 1.52.0 to 1.58.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.52.0...v1.58.1) Updates `playwright-core` from 1.52.0 to 1.58.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.52.0...v1.58.1) Updates `prettier` from 3.5.3 to 3.8.1 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.8.1) --- updated-dependencies: - dependency-name: electron-log dependency-version: 5.4.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies - dependency-name: electron-store dependency-version: 11.0.2 dependency-type: direct:production update-type: version-update:semver-major dependency-group: kopia-ui-npm-dependencies - dependency-name: electron-updater dependency-version: 6.7.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: semver dependency-version: 7.7.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies - dependency-name: uuid dependency-version: 13.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: kopia-ui-npm-dependencies - dependency-name: "@electron/notarize" dependency-version: 3.1.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: "@playwright/test" dependency-version: 1.58.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: concurrently dependency-version: 9.2.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: dotenv dependency-version: 17.2.3 dependency-type: direct:development update-type: version-update:semver-major dependency-group: kopia-ui-npm-dependencies - dependency-name: electron dependency-version: 40.1.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: kopia-ui-npm-dependencies - dependency-name: electron-builder dependency-version: 26.7.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: playwright dependency-version: 1.58.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: playwright-core dependency-version: 1.58.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: prettier dependency-version: 3.8.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] * chore(infra): add --always to git describe --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: J <1953782+julio-lopez@users.noreply.github.com> --- app/package-lock.json | 485 +++++++++++++++++++------------------- app/package.json | 22 +- tools/htmlui_changelog.sh | 2 +- 3 files changed, 258 insertions(+), 251 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 10daf11a1a8..68070b8dfbc 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -10,24 +10,24 @@ "license": "Apache-2.0", "dependencies": { "auto-launch": "^5.0.6", - "electron-log": "^5.4.0", - "electron-store": "^10.0.1", - "electron-updater": "^6.6.2", + "electron-log": "^5.4.3", + "electron-store": "^11.0.2", + "electron-updater": "^6.8.3", "minimist": "^1.2.8", "semver": "^7.7.2", - "uuid": "^11.1.0" + "uuid": "^13.0.0" }, "devDependencies": { - "@electron/notarize": "^3.0.1", - "@playwright/test": "^1.52.0", + "@electron/notarize": "^3.1.1", + "@playwright/test": "^1.58.2", "asar": "^3.2.0", - "concurrently": "^9.1.2", - "dotenv": "^16.5.0", - "electron": "^36.8.1", - "electron-builder": "^26.6.0", + "concurrently": "^9.2.1", + "dotenv": "^17.3.1", + "electron": "^39.6.0", + "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.5.3" + "prettier": "^3.8.1" } }, "node_modules/@develar/schema-utils": { @@ -165,9 +165,9 @@ } }, "node_modules/@electron/notarize": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-3.0.1.tgz", - "integrity": "sha512-5xzcOwvMGNjkSk7s0sPx4XcKWei9FYk4f2S5NkSorWW0ce5yktTOtlPa0W5yQHcREILh+C3JdH+t+M637g9TmQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-3.1.1.tgz", + "integrity": "sha512-uQQSlOiJnqRkTL1wlEBAxe90nVN/Fc/hEmk0bqpKk8nKjV1if/tXLHKUPePtv9Xsx90PtZU8aidx5lAiOpjkQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -308,6 +308,7 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, + "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -329,6 +330,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -338,29 +340,6 @@ "node": ">=14.14" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -581,13 +560,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", - "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.52.0" + "playwright": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -793,7 +772,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -888,9 +866,9 @@ "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.6.0.tgz", - "integrity": "sha512-P2naoSaGOqJY54cqTceO9lms2M790UM7BA8AlOuaolQhRp/LOshAVc4vzVlYFw4YNPtiuBJqdAhWALuoEKnayQ==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.8.1.tgz", + "integrity": "sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -905,7 +883,7 @@ "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", - "builder-util": "26.4.1", + "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chromium-pickle-js": "^0.2.0", "ci-info": "4.3.1", @@ -913,7 +891,7 @@ "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", - "electron-publish": "26.6.0", + "electron-publish": "26.8.1", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "isbinaryfile": "^5.0.0", @@ -926,7 +904,7 @@ "proper-lockfile": "^4.1.2", "resedit": "^1.7.0", "semver": "~7.7.3", - "tar": "^7.5.6", + "tar": "^7.5.7", "temp-file": "^3.4.0", "tiny-async-pool": "1.3.0", "which": "^5.0.0" @@ -935,8 +913,8 @@ "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "26.6.0", - "electron-builder-squirrel-windows": "26.6.0" + "dmg-builder": "26.8.1", + "electron-builder-squirrel-windows": "26.8.1" } }, "node_modules/app-builder-lib/node_modules/@electron/get": { @@ -1037,47 +1015,72 @@ "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "node_modules/app-builder-lib/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, "engines": { - "node": ">=12.0.0" + "node": "20 || >=22" } }, - "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "node_modules/app-builder-lib/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "balanced-match": "^4.0.2" }, "engines": { "node": "20 || >=22" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/app-builder-lib/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://dotenvx.com" } }, - "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/applescript": { @@ -1171,12 +1174,13 @@ } }, "node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "license": "MIT", "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, "node_modules/auto-launch": { @@ -1298,9 +1302,9 @@ "license": "MIT" }, "node_modules/builder-util": { - "version": "26.4.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.4.1.tgz", - "integrity": "sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.8.1.tgz", + "integrity": "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,23 +1327,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.3.1.tgz", - "integrity": "sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/builder-util/node_modules/builder-util-runtime": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -1387,6 +1377,7 @@ "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -1518,9 +1509,9 @@ "license": "MIT" }, "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -1676,19 +1667,18 @@ "license": "MIT" }, "node_modules/concurrently": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", - "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", @@ -1702,23 +1692,23 @@ } }, "node_modules/conf": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-13.1.0.tgz", - "integrity": "sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-15.1.0.tgz", + "integrity": "sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==", "license": "MIT", "dependencies": { "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "atomically": "^2.0.3", "debounce-fn": "^6.0.0", - "dot-prop": "^9.0.0", + "dot-prop": "^10.0.0", "env-paths": "^3.0.0", "json-schema-typed": "^8.0.1", - "semver": "^7.6.3", - "uint8array-extras": "^1.4.0" + "semver": "^7.7.2", + "uint8array-extras": "^1.5.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1783,7 +1773,8 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -1985,15 +1976,14 @@ } }, "node_modules/dmg-builder": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.6.0.tgz", - "integrity": "sha512-IkGlOLfJ3q7y9iaDMnNSArDdPg3Ntx8Ps6aL7yTEIpL6znA+t5L/LRTAGFz1J/12hM/NiNEYg0LoBEheqGdZXw==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.8.1.tgz", + "integrity": "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "app-builder-lib": "26.6.0", - "builder-util": "26.4.1", + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -2030,24 +2020,24 @@ } }, "node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", + "integrity": "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==", "license": "MIT", "dependencies": { - "type-fest": "^4.18.2" + "type-fest": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2073,6 +2063,19 @@ "url": "https://dotenvx.com" } }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2112,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "36.8.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.8.1.tgz", - "integrity": "sha512-honaH58/cyCb9QAzIvD+WXWuNIZ0tW9zfBqMz5wZld/rXB+LCTEDb2B3TAv8+pDmlzPlkPio95RkUe86l6MNjg==", + "version": "39.6.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.6.0.tgz", + "integrity": "sha512-KQK3sJ6JCyymY3HQxV0N/bVBQwKQETRW0N/+OYcrL9H6tZhpmTSaZY3qSxcruWrPIuouvoiP3Vk/JKUpw05ZIw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2131,18 +2134,18 @@ } }, "node_modules/electron-builder": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.6.0.tgz", - "integrity": "sha512-57JzccIwhqVRw83RaTdMLnSjzLL0dRQcp8r8oD7piRNBQh8UcCPaKeFmuJIzJabAAvQhG0+gx3F0pOVEOVXYwQ==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.8.1.tgz", + "integrity": "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "26.6.0", - "builder-util": "26.4.1", + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "ci-info": "^4.2.0", - "dmg-builder": "26.6.0", + "dmg-builder": "26.8.1", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", @@ -2157,50 +2160,36 @@ } }, "node_modules/electron-builder-squirrel-windows": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.6.0.tgz", - "integrity": "sha512-uKc/N0qPcygd2YDr52wfj07XOJPMG5KNT1ZTrumtmsykdBGreV1/poDcG5d/0KmoOpmxlkrnNJekM3eDvPzlQQ==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.8.1.tgz", + "integrity": "sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "app-builder-lib": "26.6.0", - "builder-util": "26.4.1", + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", "electron-winstaller": "5.4.0" } }, - "node_modules/electron-builder/node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/electron-log": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.0.tgz", - "integrity": "sha512-AXI5OVppskrWxEAmCxuv8ovX+s2Br39CpCAgkGMNHQtjYT3IiVbSQTncEjFVGPgoH35ZygRm/mvUMBDWwhRxgg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.3.tgz", + "integrity": "sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ==", "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/electron-publish": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.6.0.tgz", - "integrity": "sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==", + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.8.1.tgz", + "integrity": "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "26.4.1", + "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "form-data": "^4.0.5", @@ -2209,28 +2198,14 @@ "mime": "^2.5.2" } }, - "node_modules/electron-publish/node_modules/builder-util-runtime": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", - "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/electron-store": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-10.0.1.tgz", - "integrity": "sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-11.0.2.tgz", + "integrity": "sha512-4VkNRdN+BImL2KcCi41WvAYbh6zLX5AUTi4so68yPqiItjbgTjqpEnGAqasgnG+lB6GuAyUltKwVopp6Uv+gwQ==", "license": "MIT", "dependencies": { - "conf": "^13.0.0", - "type-fest": "^4.20.0" + "conf": "^15.0.2", + "type-fest": "^5.0.1" }, "engines": { "node": ">=20" @@ -2240,18 +2215,18 @@ } }, "node_modules/electron-updater": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz", - "integrity": "sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==", + "version": "6.8.3", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.8.3.tgz", + "integrity": "sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ==", "license": "MIT", "dependencies": { - "builder-util-runtime": "9.3.1", + "builder-util-runtime": "9.5.1", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", - "semver": "^7.6.3", + "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, @@ -2262,6 +2237,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -2282,6 +2258,7 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -2297,6 +2274,7 @@ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", + "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -2307,6 +2285,7 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 4.0.0" } @@ -2490,9 +2469,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -3107,13 +3086,13 @@ } }, "node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/jackspeak": { @@ -3187,9 +3166,9 @@ "license": "MIT" }, "node_modules/json-schema-typed": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.1.tgz", - "integrity": "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, "node_modules/json-stringify-safe": { @@ -3439,11 +3418,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3868,7 +3847,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3877,13 +3855,13 @@ } }, "node_modules/playwright": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", - "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.52.0" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -3896,9 +3874,9 @@ } }, "node_modules/playwright-core": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", - "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3930,6 +3908,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -3947,14 +3926,15 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { @@ -4163,6 +4143,7 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -4244,9 +4225,9 @@ "license": "ISC" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4318,9 +4299,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", "engines": { @@ -4528,9 +4509,19 @@ } }, "node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "license": "MIT" }, "node_modules/sumchecker": { "version": "3.0.1", @@ -4561,6 +4552,18 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tar": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", @@ -4594,6 +4597,7 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -4704,21 +4708,24 @@ "license": "0BSD" }, "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, "engines": { - "node": ">=16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "license": "MIT", "engines": { "node": ">=18" @@ -4803,16 +4810,16 @@ "license": "MIT" }, "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/esm/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/verror": { @@ -4842,9 +4849,9 @@ } }, "node_modules/when-exit": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", - "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", "license": "MIT" }, "node_modules/which": { diff --git a/app/package.json b/app/package.json index 82503e729f8..7e4cfe00fb5 100644 --- a/app/package.json +++ b/app/package.json @@ -4,12 +4,12 @@ "repository": "github:kopia/kopia", "dependencies": { "auto-launch": "^5.0.6", - "electron-log": "^5.4.0", - "electron-store": "^10.0.1", - "electron-updater": "^6.6.2", + "electron-log": "^5.4.3", + "electron-store": "^11.0.2", + "electron-updater": "^6.8.3", "minimist": "^1.2.8", "semver": "^7.7.2", - "uuid": "^11.1.0" + "uuid": "^13.0.0" }, "type": "module", "author": { @@ -122,16 +122,16 @@ "appArmorProfile": "kopia-ui.apparmor" }, "devDependencies": { - "@electron/notarize": "^3.0.1", - "@playwright/test": "^1.52.0", + "@electron/notarize": "^3.1.1", + "@playwright/test": "^1.58.2", "asar": "^3.2.0", - "concurrently": "^9.1.2", - "dotenv": "^16.5.0", - "electron": "^36.8.1", - "electron-builder": "^26.6.0", + "concurrently": "^9.2.1", + "dotenv": "^17.3.1", + "electron": "^39.6.0", + "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.5.3" + "prettier": "^3.8.1" }, "homepage": "./", "description": "Fast and secure open source backup.", diff --git a/tools/htmlui_changelog.sh b/tools/htmlui_changelog.sh index c71b5e11d65..964dacf61ac 100755 --- a/tools/htmlui_changelog.sh +++ b/tools/htmlui_changelog.sh @@ -3,7 +3,7 @@ set -xe if [ -z "$CI_TAG" ]; then echo "CI_TAG is not set. Looking for previous tag." - start_commit=$(git describe --tags --abbrev=0 HEAD^) + start_commit=$(git describe --tags --abbrev=0 --always HEAD^) end_commit=HEAD else echo "CI_TAG is set to $CI_TAG. Using it as the start commit." From 418b4849d866110a0f01a5180e401b9f9652087b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 19 Feb 2026 20:14:49 -0800 Subject: [PATCH 041/156] fix(providers): perform maximum of 2 attempt in `PutBlobInPath` (#5168) Adjusts tests accordingly. Also, - fix error injection for MkdirAll in tests. - make `TestFileStorageTouch` more robust. - misc cleanups in FS storage tests --- internal/retry/retry.go | 7 + repo/blob/filesystem/filesystem_storage.go | 8 +- .../filesystem/filesystem_storage_test.go | 223 +++++++++++++----- repo/blob/filesystem/osinterface_mock_test.go | 11 +- 4 files changed, 193 insertions(+), 56 deletions(-) diff --git a/internal/retry/retry.go b/internal/retry/retry.go index 6310c601dc3..bd1de0560a6 100644 --- a/internal/retry/retry.go +++ b/internal/retry/retry.go @@ -100,6 +100,13 @@ func WithExponentialBackoffNoValue(ctx context.Context, desc string, attempt fun return err } +// NoValueFn is an adapter from func() error to func() (any, error). +func NoValueFn(f func() error) func() (any, error) { + return func() (any, error) { + return nil, f() + } +} + // Always is a retry function that retries all errors. func Always(error) bool { return true diff --git a/repo/blob/filesystem/filesystem_storage.go b/repo/blob/filesystem/filesystem_storage.go index 1d58cefc8eb..39740987073 100644 --- a/repo/blob/filesystem/filesystem_storage.go +++ b/repo/blob/filesystem/filesystem_storage.go @@ -166,7 +166,9 @@ func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data return errors.Wrap(blob.ErrUnsupportedPutBlobOption, "do-not-recreate") } - return retry.WithExponentialBackoffNoValue(ctx, "PutBlobInPath:"+path, func() error { + const maxAttempts = 2 + + _, err := retry.WithExponentialBackoffMaxRetries(ctx, maxAttempts, "PutBlobInPath:"+path, retry.NoValueFn(func() error { tempFile, err := fs.createTempFileWithData(path, data) if err != nil { return err @@ -204,7 +206,9 @@ func (fs *fsImpl) PutBlobInPath(ctx context.Context, dirPath, path string, data } return nil - }, fs.isRetriable) + }), fs.isRetriable) + + return err } // createTempFileWithData creates a temporary file, writes data to it, syncs and closes it. diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index e76f8344c8f..20f6d29d903 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -93,17 +93,15 @@ func TestFileStorageTouch(t *testing.T) { ctx := testlogging.Context(t) - path := testutil.TempDirectory(t) - r, err := New(ctx, &Options{ - Path: path, + Path: testutil.TempDirectory(t), }, true) - if r == nil || err != nil { - t.Errorf("unexpected result: %v %v", r, err) - } + require.NoError(t, err) + require.NotNil(t, r) fs := testutil.EnsureType[*fsStorage](t, r) + require.NoError(t, fs.PutBlob(ctx, t1, gather.FromSlice([]byte{1}), blob.PutOptions{})) time.Sleep(2 * time.Second) // sleep a bit to accommodate Apple filesystems with low timestamp resolution require.NoError(t, fs.PutBlob(ctx, t2, gather.FromSlice([]byte{1}), blob.PutOptions{})) @@ -137,12 +135,10 @@ func TestFileStorageConcurrency(t *testing.T) { t.Parallel() testutil.ProviderTest(t) - path := testutil.TempDirectory(t) - ctx := testlogging.Context(t) st, err := New(ctx, &Options{ - Path: path, + Path: testutil.TempDirectory(t), }, true) require.NoError(t, err) @@ -183,15 +179,12 @@ func TestFileStorage_GetBlob_RetriesOnReadError(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - - dataDir := testutil.TempDirectory(t) - osi := newMockOS() osi.readFileRemainingErrors.Store(1) st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, @@ -214,11 +207,10 @@ func TestFileStorage_GetMetadata_RetriesOnError(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - dataDir := testutil.TempDirectory(t) osi := newMockOS() st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, @@ -249,66 +241,191 @@ func TestFileStorage_PutBlob_RetriesOnErrors(t *testing.T) { ctx := testlogging.Context(t) - dataDir := testutil.TempDirectory(t) - - osi := newMockOS() - - osi.createNewFileRemainingErrors.Store(3) - osi.mkdirAllRemainingErrors.Store(2) - osi.writeFileRemainingErrors.Store(3) - osi.writeFileCloseRemainingErrors.Store(2) - osi.renameRemainingErrors.Store(1) - osi.removeRemainingRetriableErrors.Store(3) - osi.chownRemainingErrors.Store(3) - osi.chtimesRemainingErrors.Store(3) + cases := []struct { + desc string + injectError func(*mockOS) + }{ + { + desc: "CreateNewFile", + injectError: func(osi *mockOS) { osi.createNewFileRemainingErrors.Store(1) }, + }, + { + desc: "Mkdir", + injectError: func(osi *mockOS) { osi.mkdirRemainingErrors.Store(1) }, + }, + { + desc: "Write", + injectError: func(osi *mockOS) { osi.writeFileRemainingErrors.Store(1) }, + }, + { + desc: "Close", + injectError: func(osi *mockOS) { osi.writeFileCloseRemainingErrors.Store(1) }, + }, + { + desc: "Rename", + injectError: func(osi *mockOS) { osi.renameRemainingErrors.Store(1) }, + }, + { + desc: "Chown", + injectError: func(osi *mockOS) { osi.chownRemainingErrors.Store(2) }, // these are ignored + }, + { + desc: "Chtimes", + injectError: func(osi *mockOS) { osi.chtimesRemainingErrors.Store(1) }, + }, + } fileUID := 3 fileGID := 4 - st, err := New(ctx, &Options{ - Path: dataDir, - FileUID: &fileUID, - FileGID: &fileGID, - Options: sharded.Options{ - DirectoryShards: []int{5, 2}, - }, - osInterfaceOverride: osi, - }, true) - require.NoError(t, err) + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + osi := newMockOS() - defer st.Close(ctx) + st, err := New(ctx, &Options{ + Path: testutil.TempDirectory(t), + FileUID: &fileUID, + FileGID: &fileGID, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) - require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) + defer st.Close(ctx) - var buf gather.WriteBuffer - defer buf.Close() + // create dummy blob to force creating .shards file, so it does not interfere with error injection + require.NoError(t, st.PutBlob(ctx, "dummy", gather.FromSlice([]byte{0}), blob.PutOptions{})) - require.NoError(t, st.GetBlob(ctx, "someblob1234567812345678", 1, 2, &buf)) - require.Equal(t, []byte{2, 3}, buf.ToByteSlice()) + tc.injectError(osi) // inject error - var mt time.Time + require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + SetModTime: time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC), // exercise chtimes code path + })) - require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ - GetModTime: &mt, - })) + var buf gather.WriteBuffer + defer buf.Close() - require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ - SetModTime: time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC), - })) + require.NoError(t, st.GetBlob(ctx, "someblob1234567812345678", 1, 2, &buf)) + require.Equal(t, []byte{2, 3}, buf.ToByteSlice()) + + var mt time.Time + + require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + GetModTime: &mt, + })) + + require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + SetModTime: time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC), + })) + }) + } } -func TestFileStorage_DeleteBlob_ErrorHandling(t *testing.T) { +func TestFileStorage_PutBlob_DoesNotExceedRetriesOnErrors(t *testing.T) { t.Parallel() ctx := testlogging.Context(t) - dataDir := testutil.TempDirectory(t) + cases := []struct { + desc string + injectError func(*mockOS) + expectGetBlobSucceed bool + }{ + { + desc: "CreateNewFile", + injectError: func(osi *mockOS) { osi.createNewFileRemainingErrors.Store(2) }, + }, + { + desc: "Mkdir", + injectError: func(osi *mockOS) { osi.mkdirRemainingErrors.Store(2) }, + }, + + { + desc: "Write", + injectError: func(osi *mockOS) { osi.writeFileRemainingErrors.Store(2) }, + }, + + { + desc: "Close", + injectError: func(osi *mockOS) { osi.writeFileCloseRemainingErrors.Store(2) }, + }, + + { + desc: "Rename", + injectError: func(osi *mockOS) { osi.renameRemainingErrors.Store(2) }, + }, + { + desc: "Chtimes", + injectError: func(osi *mockOS) { osi.chtimesRemainingErrors.Store(2) }, + expectGetBlobSucceed: true, + }, + } + + fileUID := 3 + fileGID := 4 + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + osi := newMockOS() + + st, err := New(ctx, &Options{ + Path: testutil.TempDirectory(t), + FileUID: &fileUID, + FileGID: &fileGID, + Options: sharded.Options{ + DirectoryShards: []int{5, 2}, + }, + osInterfaceOverride: osi, + }, true) + require.NoError(t, err) + + defer st.Close(ctx) + + // create dummy blob to force creating .shards file, so it does not interfere with error injection + require.NoError(t, st.PutBlob(ctx, "dummy", gather.FromSlice([]byte{0}), blob.PutOptions{})) + + tc.injectError(osi) + + require.Error(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + SetModTime: time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC), + })) + + var buf gather.WriteBuffer + defer buf.Close() + + if err := st.GetBlob(ctx, "someblob1234567812345678", 1, 2, &buf); tc.expectGetBlobSucceed { + require.NoError(t, err) + } else { + require.Error(t, err) + require.Zero(t, buf.Length()) + } + + var mt time.Time + + // these PutBlob calls should succeed since the injected errors are exhausted + require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + GetModTime: &mt, + })) + + require.NoError(t, st.PutBlob(ctx, "someblob1234567812345678", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{ + SetModTime: time.Date(2020, 1, 1, 12, 0, 0, 0, time.UTC), + })) + }) + } +} + +func TestFileStorage_DeleteBlob_ErrorHandling(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) osi := newMockOS() osi.removeRemainingNonRetriableErrors.Store(1) st, err := New(ctx, &Options{ - Path: dataDir, + Path: testutil.TempDirectory(t), Options: sharded.Options{ DirectoryShards: []int{5, 2}, }, diff --git a/repo/blob/filesystem/osinterface_mock_test.go b/repo/blob/filesystem/osinterface_mock_test.go index 53eb3c6a272..af4579960e5 100644 --- a/repo/blob/filesystem/osinterface_mock_test.go +++ b/repo/blob/filesystem/osinterface_mock_test.go @@ -20,6 +20,7 @@ type mockOS struct { writeFileCloseRemainingErrors atomic.Int32 writeFileSyncRemainingErrors atomic.Int32 createNewFileRemainingErrors atomic.Int32 + mkdirRemainingErrors atomic.Int32 mkdirAllRemainingErrors atomic.Int32 renameRemainingErrors atomic.Int32 removeRemainingRetriableErrors atomic.Int32 @@ -141,13 +142,21 @@ func (osi *mockOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, e } func (osi *mockOS) Mkdir(fname string, mode os.FileMode) error { - if osi.mkdirAllRemainingErrors.Add(-1) >= 0 { + if osi.mkdirRemainingErrors.Add(-1) >= 0 { return &os.PathError{Op: "mkdir", Err: errors.New("injected mkdir error")} } return osi.osInterface.Mkdir(fname, mode) } +func (osi *mockOS) MkdirAll(fname string, mode os.FileMode) error { + if osi.mkdirAllRemainingErrors.Add(-1) >= 0 { + return &os.PathError{Op: "mkdirall", Err: errors.New("injected mkdirall error")} + } + + return osi.osInterface.MkdirAll(fname, mode) +} + func (osi *mockOS) Geteuid() int { return osi.effectiveUID } From a5086ac9ab43b906209d3211c83b719233efb9e1 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Thu, 19 Feb 2026 20:56:20 -0800 Subject: [PATCH 042/156] feat(ui): upgraded htmlui to the latest version (#5172) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d7b50ccad3c..167b8f9e9fc 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.2 - github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 + github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 72e3a3f5aa0..2dd5f361ae9 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.2 h1:9qtQy2tKEVpVB8Pfq87ZljHZb60/LbeTQ1OxV8EGzdE= github.com/klauspost/reedsolomon v1.13.2/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= -github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030 h1:dib7t4FiGe+HSuq9AweSiVjrXn/d7p6eoIZ2gmtM5BI= -github.com/kopia/htmluibuild v0.0.1-0.20260204055701-cfa4cf572030/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58 h1:dUURSXpQySMEkxEt+9ZBCngOfFeHB93rLxYYdCbuSD8= +github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From a49a34b31d57276d3a5c51902555e9433c34ed46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 05:00:45 +0000 Subject: [PATCH 043/156] build(deps): bump google.golang.org/api (#5170) Bumps the common-golang-dependencies group with 1 update: [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `google.golang.org/api` from 0.266.0 to 0.267.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.266.0...v0.267.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.267.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 167b8f9e9fc..827456c7ac2 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( golang.org/x/sys v0.41.0 golang.org/x/term v0.40.0 golang.org/x/text v0.34.0 - google.golang.org/api v0.266.0 + google.golang.org/api v0.267.0 google.golang.org/grpc v1.79.1 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 diff --git a/go.sum b/go.sum index 2dd5f361ae9..a34b44e5ad7 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.266.0 h1:hco+oNCf9y7DmLeAtHJi/uBAY7n/7XC9mZPxu1ROiyk= -google.golang.org/api v0.266.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= +google.golang.org/api v0.267.0 h1:w+vfWPMPYeRs8qH1aYYsFX68jMls5acWl/jocfLomwE= +google.golang.org/api v0.267.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= From 48ed6122d99321ae569c063fbb23e1b80c86f3f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:03:04 -0800 Subject: [PATCH 044/156] build(deps-dev): bump electron (#5171) Bumps the kopia-ui-npm-dependencies group in /app with 1 update: [electron](https://github.com/electron/electron). Updates `electron` from 39.6.0 to 39.6.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v39.6.0...v39.6.1) --- updated-dependencies: - dependency-name: electron dependency-version: 39.6.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 8 ++++---- app/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 68070b8dfbc..b86bc4efb8f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -23,7 +23,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.3.1", - "electron": "^39.6.0", + "electron": "^39.6.1", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", @@ -2115,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "39.6.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-39.6.0.tgz", - "integrity": "sha512-KQK3sJ6JCyymY3HQxV0N/bVBQwKQETRW0N/+OYcrL9H6tZhpmTSaZY3qSxcruWrPIuouvoiP3Vk/JKUpw05ZIw==", + "version": "39.6.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.6.1.tgz", + "integrity": "sha512-pgmTbWnT3rP+eo3EolO5EdNw5f7/x/0S7vP+eXC8Zyp2sWGjP4+kmo1RyeAYCChwIRWJFKQ2rQVl/ZkqwK6O2Q==", "dev": true, "hasInstallScript": true, "license": "MIT", diff --git a/app/package.json b/app/package.json index 7e4cfe00fb5..bb3596428a9 100644 --- a/app/package.json +++ b/app/package.json @@ -127,7 +127,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.3.1", - "electron": "^39.6.0", + "electron": "^39.6.1", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", From 888f049c9ced86f7c7dee39e9f49070048953107 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:00:26 -0800 Subject: [PATCH 045/156] build(deps): bump ajv from 6.12.6 to 6.14.0 in /app (#5175) Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0. - [Release notes](https://github.com/ajv-validator/ajv/releases) - [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0) --- updated-dependencies: - dependency-name: ajv dependency-version: 6.14.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index b86bc4efb8f..2ca0ed83b9a 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -767,9 +767,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { From 3a3ae93d7495d5b94544654f995b956fd763fb4f Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:18:22 -0800 Subject: [PATCH 046/156] feat(ui): upgraded htmlui to the latest version (#5177) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 827456c7ac2..9e8f500d611 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.2 - github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58 + github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index a34b44e5ad7..b8ff66bed99 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.2 h1:9qtQy2tKEVpVB8Pfq87ZljHZb60/LbeTQ1OxV8EGzdE= github.com/klauspost/reedsolomon v1.13.2/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= -github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58 h1:dUURSXpQySMEkxEt+9ZBCngOfFeHB93rLxYYdCbuSD8= -github.com/kopia/htmluibuild v0.0.1-0.20260220043103-12827e348d58/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9 h1:yxrtNk9N0FoteomfltTc8PRkMqVzv3kLQut78hk2iBY= +github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 5adebb8347b1d430b8e5c7b0ca30483b65801377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Mon, 23 Feb 2026 20:28:15 -0800 Subject: [PATCH 047/156] refactor(general): add byte units to maintenance stat summaries (#5178) - add byte units to maintenance stat summaries - fix typo in comment --- repo/maintenancestats/stats_clean_up_log.go | 8 ++++++-- repo/maintenancestats/stats_cleanup_superseded_indexes.go | 3 ++- repo/maintenancestats/stats_compact_single_epoch.go | 3 ++- repo/maintenancestats/stats_delete_unreferenced_packs.go | 3 ++- repo/maintenancestats/stats_rewrite_contents.go | 3 ++- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/repo/maintenancestats/stats_clean_up_log.go b/repo/maintenancestats/stats_clean_up_log.go index eca79270bc0..388877d98c1 100644 --- a/repo/maintenancestats/stats_clean_up_log.go +++ b/repo/maintenancestats/stats_clean_up_log.go @@ -4,11 +4,12 @@ import ( "fmt" "github.com/kopia/kopia/internal/contentlog" + "github.com/kopia/kopia/internal/units" ) const cleanupLogsStatsKind = "cleanupLogsStats" -// CleanupLogsStats are the stats for cleanning up logs. +// CleanupLogsStats are the stats for cleaning up logs. type CleanupLogsStats struct { ToDeleteBlobCount int `json:"toDeleteBlobCount"` ToDeleteBlobSize int64 `json:"toDeleteBlobSize"` @@ -32,7 +33,10 @@ func (cs *CleanupLogsStats) WriteValueTo(jw *contentlog.JSONWriter) { // Summary generates a human readable summary for the stats. func (cs *CleanupLogsStats) Summary() string { - return fmt.Sprintf("Found %v(%v) logs blobs for deletion and deleted %v(%v) of them. Retained %v(%v) log blobs.", cs.ToDeleteBlobCount, cs.ToDeleteBlobSize, cs.DeletedBlobCount, cs.DeletedBlobSize, cs.RetainedBlobCount, cs.RetainedBlobSize) + return fmt.Sprintf("Found %v(%v) logs blobs for deletion and deleted %v(%v) of them. Retained %v(%v) log blobs.", + cs.ToDeleteBlobCount, units.BytesString(cs.ToDeleteBlobSize), cs.DeletedBlobCount, + units.BytesString(cs.DeletedBlobSize), cs.RetainedBlobCount, + units.BytesString(cs.RetainedBlobSize)) } // Kind returns the kind name for the stats. diff --git a/repo/maintenancestats/stats_cleanup_superseded_indexes.go b/repo/maintenancestats/stats_cleanup_superseded_indexes.go index dff8bc788e0..52025d0e3cb 100644 --- a/repo/maintenancestats/stats_cleanup_superseded_indexes.go +++ b/repo/maintenancestats/stats_cleanup_superseded_indexes.go @@ -5,6 +5,7 @@ import ( "time" "github.com/kopia/kopia/internal/contentlog" + "github.com/kopia/kopia/internal/units" ) const cleanupSupersededIndexesStatsKind = "cleanupSupersededIndexesStats" @@ -27,7 +28,7 @@ func (cs *CleanupSupersededIndexesStats) WriteValueTo(jw *contentlog.JSONWriter) // Summary generates a human readable summary for the stats. func (cs *CleanupSupersededIndexesStats) Summary() string { - return fmt.Sprintf("Cleaned up %v(%v) superseded index blobs, max replacement time %v", cs.DeletedBlobCount, cs.DeletedTotalSize, cs.MaxReplacementTime) + return fmt.Sprintf("Cleaned up %v(%v) superseded index blobs, max replacement time %v", cs.DeletedBlobCount, units.BytesString(cs.DeletedTotalSize), cs.MaxReplacementTime) } // Kind returns the kind name for the stats. diff --git a/repo/maintenancestats/stats_compact_single_epoch.go b/repo/maintenancestats/stats_compact_single_epoch.go index 1dfc930648c..49e5b5e70bf 100644 --- a/repo/maintenancestats/stats_compact_single_epoch.go +++ b/repo/maintenancestats/stats_compact_single_epoch.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/kopia/kopia/internal/contentlog" + "github.com/kopia/kopia/internal/units" ) const compactSingleEpochStatsKind = "compactSingleEpochStats" @@ -26,7 +27,7 @@ func (cs *CompactSingleEpochStats) WriteValueTo(jw *contentlog.JSONWriter) { // Summary generates a human readable summary for the stats. func (cs *CompactSingleEpochStats) Summary() string { - return fmt.Sprintf("Compacted %v(%v) index blobs for epoch %v", cs.SupersededIndexBlobCount, cs.SupersededIndexTotalSize, cs.Epoch) + return fmt.Sprintf("Compacted %v(%v) index blobs for epoch %v", cs.SupersededIndexBlobCount, units.BytesString(cs.SupersededIndexTotalSize), cs.Epoch) } // Kind returns the kind name for the stats. diff --git a/repo/maintenancestats/stats_delete_unreferenced_packs.go b/repo/maintenancestats/stats_delete_unreferenced_packs.go index d20a1a2f061..b303e6925bc 100644 --- a/repo/maintenancestats/stats_delete_unreferenced_packs.go +++ b/repo/maintenancestats/stats_delete_unreferenced_packs.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/kopia/kopia/internal/contentlog" + "github.com/kopia/kopia/internal/units" ) const deleteUnreferencedPacksStatsKind = "deleteUnreferencedPacksStats" @@ -33,7 +34,7 @@ func (ds *DeleteUnreferencedPacksStats) WriteValueTo(jw *contentlog.JSONWriter) // Summary generates a human readable summary for the stats. func (ds *DeleteUnreferencedPacksStats) Summary() string { return fmt.Sprintf("Found %v(%v) unreferenced pack blobs to delete and deleted %v(%v). Retained %v(%v) unreferenced pack blobs.", - ds.UnreferencedPackCount, ds.UnreferencedTotalSize, ds.DeletedPackCount, ds.DeletedTotalSize, ds.RetainedPackCount, ds.RetainedTotalSize) + ds.UnreferencedPackCount, units.BytesString(ds.UnreferencedTotalSize), ds.DeletedPackCount, units.BytesString(ds.DeletedTotalSize), ds.RetainedPackCount, units.BytesString(ds.RetainedTotalSize)) } // Kind returns the kind name for the stats. diff --git a/repo/maintenancestats/stats_rewrite_contents.go b/repo/maintenancestats/stats_rewrite_contents.go index f86681b6c86..22128bb99df 100644 --- a/repo/maintenancestats/stats_rewrite_contents.go +++ b/repo/maintenancestats/stats_rewrite_contents.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/kopia/kopia/internal/contentlog" + "github.com/kopia/kopia/internal/units" ) const rewriteContentsStatsKind = "rewriteContentsStats" @@ -33,7 +34,7 @@ func (rs *RewriteContentsStats) WriteValueTo(jw *contentlog.JSONWriter) { // Summary generates a human readable summary for the stats. func (rs *RewriteContentsStats) Summary() string { return fmt.Sprintf("Found %v(%v) contents to rewrite and rewrote %v(%v). Retained %v(%v) contents from rewrite", - rs.ToRewriteContentCount, rs.ToRewriteContentSize, rs.RewrittenContentCount, rs.RewrittenContentSize, rs.RetainedContentCount, rs.RetainedContentSize) + rs.ToRewriteContentCount, units.BytesString(rs.ToRewriteContentSize), rs.RewrittenContentCount, units.BytesString(rs.RewrittenContentSize), rs.RetainedContentCount, units.BytesString(rs.RetainedContentSize)) } // Kind returns the kind name for the stats. From 359854fabd579f18cf7cbe8bfd6fca0dfc500e43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 20:29:19 -0800 Subject: [PATCH 048/156] build(deps): bump google.golang.org/api (#5179) Bumps the common-golang-dependencies group with 1 update: [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `google.golang.org/api` from 0.267.0 to 0.268.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.267.0...v0.268.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.268.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 9e8f500d611..594926f9adf 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/kopia/kopia -go 1.25 +go 1.25.0 toolchain go1.25.7 @@ -67,7 +67,7 @@ require ( golang.org/x/sys v0.41.0 golang.org/x/term v0.40.0 golang.org/x/text v0.34.0 - google.golang.org/api v0.267.0 + google.golang.org/api v0.268.0 google.golang.org/grpc v1.79.1 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 diff --git a/go.sum b/go.sum index b8ff66bed99..60c8809544f 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.267.0 h1:w+vfWPMPYeRs8qH1aYYsFX68jMls5acWl/jocfLomwE= -google.golang.org/api v0.267.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= +google.golang.org/api v0.268.0 h1:hgA3aS4lt9rpF5RCCkX0Q2l7DvHgvlb53y4T4u6iKkA= +google.golang.org/api v0.268.0/go.mod h1:HXMyMH496wz+dAJwD/GkAPLd3ZL33Kh0zEG32eNvy9w= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= From f3f8c3c5c3a983f606992a4e44e6bccfeae518aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 05:10:56 +0000 Subject: [PATCH 049/156] build(deps): bump the common-golang-dependencies group with 2 updates (#5191) Bumps the common-golang-dependencies group with 2 updates: [golang.org/x/net](https://github.com/golang/net) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `golang.org/x/net` from 0.50.0 to 0.51.0 - [Commits](https://github.com/golang/net/compare/v0.50.0...v0.51.0) Updates `google.golang.org/api` from 0.268.0 to 0.269.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.268.0...v0.269.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.51.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.269.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 594926f9adf..8e0f35a82a3 100644 --- a/go.mod +++ b/go.mod @@ -61,13 +61,13 @@ require ( golang.org/x/crypto v0.48.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 golang.org/x/mod v0.33.0 - golang.org/x/net v0.50.0 + golang.org/x/net v0.51.0 golang.org/x/oauth2 v0.35.0 golang.org/x/sync v0.19.0 golang.org/x/sys v0.41.0 golang.org/x/term v0.40.0 golang.org/x/text v0.34.0 - google.golang.org/api v0.268.0 + google.golang.org/api v0.269.0 google.golang.org/grpc v1.79.1 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -77,7 +77,7 @@ require ( al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.1 // indirect + cloud.google.com/go/auth v0.18.2 // 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.3 // indirect @@ -116,7 +116,7 @@ require ( github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect @@ -149,6 +149,6 @@ require ( golang.org/x/time v0.14.0 // indirect google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 60c8809544f..3f550c52b72 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= -cloud.google.com/go/auth v0.18.1/go.mod h1:GfTYoS9G3CWpRA3Va9doKN9mjPGRS+v41jmZAhBzbrA= +cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= +cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -155,8 +155,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 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/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= -github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= +github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= +github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -334,8 +334,8 @@ golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnL golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= +golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= @@ -357,14 +357,14 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.268.0 h1:hgA3aS4lt9rpF5RCCkX0Q2l7DvHgvlb53y4T4u6iKkA= -google.golang.org/api v0.268.0/go.mod h1:HXMyMH496wz+dAJwD/GkAPLd3ZL33Kh0zEG32eNvy9w= +google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= +google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 266021cc73b511381c77753ef4a39a4ad9ad69a7 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Sun, 1 Mar 2026 21:30:44 -0800 Subject: [PATCH 050/156] feat(ui): upgraded htmlui to the latest version (#5190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julio López <1953782+julio-lopez@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8e0f35a82a3..1776a90878c 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.2 - github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9 + github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 3f550c52b72..1383c0b55ed 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.2 h1:9qtQy2tKEVpVB8Pfq87ZljHZb60/LbeTQ1OxV8EGzdE= github.com/klauspost/reedsolomon v1.13.2/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= -github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9 h1:yxrtNk9N0FoteomfltTc8PRkMqVzv3kLQut78hk2iBY= -github.com/kopia/htmluibuild v0.0.1-0.20260223225928-affc284183d9/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 h1:zLII9D9ueGu4gEaIla82qEghSJA1ZeUsIjZqHxoem04= +github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 9cc4af9559e98fac63b63fc7d2652217040f32f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 09:14:01 -0800 Subject: [PATCH 051/156] build(deps-dev): bump minimatch from 3.1.2 to 3.1.5 in /app (#5193) Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5. - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5) --- updated-dependencies: - dependency-name: minimatch dependency-version: 3.1.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 2ca0ed83b9a..306f995a9aa 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -286,13 +286,13 @@ } }, "node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -1068,16 +1068,16 @@ } }, "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1403,13 +1403,13 @@ "license": "ISC" }, "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -2533,9 +2533,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -3396,9 +3396,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { From 754c77739b6fba98ba192b7b0ab63989067e8dc0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:42:18 +0000 Subject: [PATCH 052/156] build(deps): bump the github-actions group with 6 updates (#5192) Bumps the github-actions group with 6 updates: | Package | From | To | | --- | --- | --- | | [actions/setup-go](https://github.com/actions/setup-go) | `6.2.0` | `6.3.0` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `6.0.0` | `7.0.0` | | [actions/dependency-review-action](https://github.com/actions/dependency-review-action) | `4.8.2` | `4.8.3` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `7.0.0` | `8.0.0` | | [github/codeql-action](https://github.com/github/codeql-action) | `4.32.1` | `4.32.4` | | [actions/stale](https://github.com/actions/stale) | `10.1.1` | `10.2.0` | Updates `actions/setup-go` from 6.2.0 to 6.3.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5...4b73464bb391d4059bd26b0524d20df3927bd417) Updates `actions/upload-artifact` from 6.0.0 to 7.0.0 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f) Updates `actions/dependency-review-action` from 4.8.2 to 4.8.3 - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261...05fe4576374b728f0c523d6a13d64c25081e0803) Updates `actions/download-artifact` from 7.0.0 to 8.0.0 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/37930b1c2abaa49bbe596cd826c3c89aef350131...70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3) Updates `github/codeql-action` from 4.32.1 to 4.32.4 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/6bc82e05fd0ea64601dd4b465378bbcf57de0314...89a39a4e59826350b863aa6b6252a07ad50cf83e) Updates `actions/stale` from 10.1.1 to 10.2.0 - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/997185467fa4f803885201cee163a9f38240193d...b5d41d4e1d5dceea10e7104786b73624c18a190f) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/upload-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/dependency-review-action dependency-version: 4.8.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: github/codeql-action dependency-version: 4.32.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/stale dependency-version: 10.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/code-coverage.yml | 4 ++-- .github/workflows/compat-test.yml | 4 ++-- .github/workflows/dependency-review.yml | 2 +- .github/workflows/endurance-test.yml | 4 ++-- .github/workflows/htmlui-tests.yml | 4 ++-- .github/workflows/license-check.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/make.yml | 10 +++++----- .github/workflows/ossf-scorecard.yml | 4 ++-- .github/workflows/providers-core.yml | 2 +- .github/workflows/providers-extra.yml | 2 +- .github/workflows/race-detector.yml | 2 +- .github/workflows/stale.yml | 2 +- .github/workflows/stress-test.yml | 4 ++-- .github/workflows/tests.yml | 4 ++-- .github/workflows/volume-shadow-copy-test.yml | 4 ++-- 16 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index 93908b7e86b..cad03908aca 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Run Tests @@ -26,7 +26,7 @@ jobs: with: files: coverage.txt - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml index 5f8931244f4..80ca95bf910 100644 --- a/.github/workflows/compat-test.yml +++ b/.github/workflows/compat-test.yml @@ -18,13 +18,13 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Compat Test run: make compat-tests - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 2a370ad10e9..90c794e57ad 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,4 +17,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: 'Dependency Review' - uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 #v4.8.2 + uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 #v4.8.3 diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml index 5ae0c8a2665..3d763ae6754 100644 --- a/.github/workflows/endurance-test.yml +++ b/.github/workflows/endurance-test.yml @@ -30,7 +30,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' check-latest: true @@ -38,7 +38,7 @@ jobs: - name: Endurance Tests run: make endurance-tests - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index c222c0d1fc0..4ec2d7c337b 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -31,7 +31,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' check-latest: true @@ -39,7 +39,7 @@ jobs: - name: Run Tests run: make htmlui-e2e-test - name: Upload Screenshots - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: path: .screenshots/**/*.png if-no-files-found: ignore diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml index 7fa92800d96..8c76e2b1c1c 100644 --- a/.github/workflows/license-check.yml +++ b/.github/workflows/license-check.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Download dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3eb3b573486..9ff25a605e2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,7 +30,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - id: govulncheck diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 907d5c67cde..8b4d436ae7d 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -40,7 +40,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' id: go @@ -92,7 +92,7 @@ jobs: # macOS signing certificate (base64-encoded), used by Electron Builder MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} - name: Upload Kopia Artifacts - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: kopia-${{ matrix.os }} path: | @@ -113,7 +113,7 @@ jobs: dist/kopia-ui/*.yml if-no-files-found: ignore - name: Upload Kopia Binary - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: kopia_binaries-${{ matrix.os }} path: | @@ -136,13 +136,13 @@ jobs: - name: Install Linux-specific packages run: "sudo apt-get install -y createrepo-c" - name: Download Artifacts - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: pattern: kopia-* merge-multiple: true path: dist - name: Download Kopia Binaries - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: pattern: kopia_binaries-* merge-multiple: true diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 88288e11d34..ebdc2afc567 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -39,13 +39,13 @@ jobs: - # Upload the results to GitHub's code scanning dashboard. name: "Upload to results to dashboard" - uses: github/codeql-action/upload-sarif@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v3.29.5 + uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v3.29.5 with: sarif_file: results.sarif category: ossf - name: "Upload analysis results as 'Job Artifact'" - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/providers-core.yml b/.github/workflows/providers-core.yml index ee89b62adec..0b5c5502319 100644 --- a/.github/workflows/providers-core.yml +++ b/.github/workflows/providers-core.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/providers-extra.yml b/.github/workflows/providers-extra.yml index 75cb87317aa..0f904b3226e 100644 --- a/.github/workflows/providers-extra.yml +++ b/.github/workflows/providers-extra.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/race-detector.yml b/.github/workflows/race-detector.yml index d315c932cd4..8d1b7abbb02 100644 --- a/.github/workflows/race-detector.yml +++ b/.github/workflows/race-detector.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Unit Tests diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 71af256e5ae..c162224d2e5 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -14,7 +14,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0 with: # process older PRs first ascending: true diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 078a7a0b309..9ba69d672a1 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -22,13 +22,13 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Stress Test run: make stress-test - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8b8b2b3f802..35b1c791477 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Install Windows-specific packages @@ -56,7 +56,7 @@ jobs: - name: Integration Tests run: make -j2 ci-integration-tests - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs-${{ matrix.os }} path: .logs/**/*.log diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml index ccc9954d45d..59abef0ba8a 100644 --- a/.github/workflows/volume-shadow-copy-test.yml +++ b/.github/workflows/volume-shadow-copy-test.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 + uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 with: go-version-file: 'go.mod' - name: Install gsudo @@ -32,7 +32,7 @@ jobs: - name: Non-Admin Test run: gsudo -i Medium make os-snapshot-tests - name: Upload Logs - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: logs path: .logs/**/*.log From 914d57c896b2dfca99f92a7691477001cd1f2a69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:07:54 +0000 Subject: [PATCH 053/156] build(deps-dev): bump electron (#5189) Bumps the kopia-ui-npm-dependencies group in /app with 1 update: [electron](https://github.com/electron/electron). Updates `electron` from 39.6.1 to 39.7.0 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v39.6.1...v39.7.0) --- updated-dependencies: - dependency-name: electron dependency-version: 39.7.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 8 ++++---- app/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 306f995a9aa..c8fc0ad3166 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -23,7 +23,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.3.1", - "electron": "^39.6.1", + "electron": "^39.7.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", @@ -2115,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "39.6.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-39.6.1.tgz", - "integrity": "sha512-pgmTbWnT3rP+eo3EolO5EdNw5f7/x/0S7vP+eXC8Zyp2sWGjP4+kmo1RyeAYCChwIRWJFKQ2rQVl/ZkqwK6O2Q==", + "version": "39.7.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.7.0.tgz", + "integrity": "sha512-Rz5QvP1pTqoU1DPRrG3EeX2oWBtS3uRmd6Z/wzZsb2e/iIUsrT+XcBaAhFr4FW48gDc8uP2wYVyY5Aamha/5Zg==", "dev": true, "hasInstallScript": true, "license": "MIT", diff --git a/app/package.json b/app/package.json index bb3596428a9..1124113e764 100644 --- a/app/package.json +++ b/app/package.json @@ -127,7 +127,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.3.1", - "electron": "^39.6.1", + "electron": "^39.7.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", From 665c463827cd265068e50b39f4bd30d0829231e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 01:19:29 +0000 Subject: [PATCH 054/156] build(deps): bump the telemetry-dependencies group with 4 updates (#5196) Bumps the telemetry-dependencies group with 4 updates: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go). Updates `go.opentelemetry.io/otel` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.40.0...v1.41.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.40.0...v1.41.0) Updates `go.opentelemetry.io/otel/sdk` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.40.0...v1.41.0) Updates `go.opentelemetry.io/otel/trace` from 1.40.0 to 1.41.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.40.0...v1.41.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 18 +++++++++--------- go.sum | 36 ++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 1776a90878c..e84c501c0a0 100644 --- a/go.mod +++ b/go.mod @@ -53,10 +53,10 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.6 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.40.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 - go.opentelemetry.io/otel/sdk v1.40.0 - go.opentelemetry.io/otel/trace v1.40.0 + go.opentelemetry.io/otel v1.41.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 + go.opentelemetry.io/otel/sdk v1.41.0 + go.opentelemetry.io/otel/trace v1.41.0 go.uber.org/zap v1.27.1 golang.org/x/crypto v0.48.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 @@ -118,7 +118,7 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect github.com/googleapis/gax-go/v2 v2.17.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect @@ -139,16 +139,16 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect + go.opentelemetry.io/otel/metric v1.41.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.41.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.14.0 // indirect google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 1383c0b55ed..ea08f76677c 100644 --- a/go.sum +++ b/go.sum @@ -161,8 +161,8 @@ github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= @@ -297,22 +297,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= +go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= +go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= +go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= +go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= +go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= +go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= +go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= +go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= +go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -361,8 +361,8 @@ google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= From af17b292c3356734dd10a57760af77b99bf261b1 Mon Sep 17 00:00:00 2001 From: Jarek Kowalski Date: Mon, 2 Mar 2026 17:51:18 -0800 Subject: [PATCH 055/156] chore(docs): generate lock file for netlify build (#5195) --- site/.gitignore | 1 - site/package-lock.json | 1099 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1099 insertions(+), 1 deletion(-) create mode 100644 site/package-lock.json diff --git a/site/.gitignore b/site/.gitignore index eb832e0e7a8..f535871bb24 100644 --- a/site/.gitignore +++ b/site/.gitignore @@ -3,6 +3,5 @@ resources/ node_modules/ tech-doc-hugo .tools/ -package-lock.json *.deb .hugo_build.lock diff --git a/site/package-lock.json b/site/package-lock.json new file mode 100644 index 00000000000..0a67a585e48 --- /dev/null +++ b/site/package-lock.json @@ -0,0 +1,1099 @@ +{ + "name": "site", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "site", + "version": "0.0.1", + "license": "ISC", + "devDependencies": { + "autoprefixer": "^10.4.14", + "postcss": "^8.4.24", + "postcss-cli": "^10.1.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001775", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz", + "integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz", + "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-cli": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz", + "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^13.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^4.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} From 49e0071ebe80ab8312b3ebcc8aa372d8872af7ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:19:51 +0000 Subject: [PATCH 056/156] build(deps-dev): bump tar from 7.5.9 to 7.5.10 in /app (#5204) Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.9 to 7.5.10. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.9...v7.5.10) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.10 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index c8fc0ad3166..8e638a735f6 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -4565,9 +4565,9 @@ } }, "node_modules/tar": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", - "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", + "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { From 24b93de857ef93257f54de49f33a4357e52dd64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:01:16 -0700 Subject: [PATCH 057/156] build(deps): upgrade Go to 1.25.8 (#5212) --- .github/workflows/lint.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9ff25a605e2..0f5c2bb781c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,7 +37,7 @@ jobs: uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 with: cache: false - go-version-input: '1.25.7' + go-version-input: '1.25.8' # An explicit Go version is needed for govulncheck-action since internally # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' # directive in the 'go.mod' file. diff --git a/go.mod b/go.mod index e84c501c0a0..e6b1eab2cbd 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25.0 -toolchain go1.25.7 +toolchain go1.25.8 require ( cloud.google.com/go/storage v1.60.0 From 00f9eddf9edc80d66ccb4c921bcf152b7e6bb6ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 00:34:42 +0000 Subject: [PATCH 058/156] build(deps): bump the common-golang-dependencies group across 1 directory with 7 updates (#5214) Bumps the common-golang-dependencies group with 6 updates in the / directory: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.60.0` | `1.61.0` | | [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) | `7.0.98` | `7.0.99` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.35.0` | `0.36.0` | | [golang.org/x/sync](https://github.com/golang/sync) | `0.19.0` | `0.20.0` | | [golang.org/x/sys](https://github.com/golang/sys) | `0.41.0` | `0.42.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.269.0` | `0.271.0` | Updates `cloud.google.com/go/storage` from 1.60.0 to 1.61.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.60.0...spanner/v1.61.0) Updates `github.com/minio/minio-go/v7` from 7.0.98 to 7.0.99 - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.98...v7.0.99) Updates `golang.org/x/oauth2` from 0.35.0 to 0.36.0 - [Commits](https://github.com/golang/oauth2/compare/v0.35.0...v0.36.0) Updates `golang.org/x/sync` from 0.19.0 to 0.20.0 - [Commits](https://github.com/golang/sync/compare/v0.19.0...v0.20.0) Updates `golang.org/x/sys` from 0.41.0 to 0.42.0 - [Commits](https://github.com/golang/sys/compare/v0.41.0...v0.42.0) Updates `google.golang.org/api` from 0.269.0 to 0.271.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.269.0...v0.271.0) Updates `google.golang.org/grpc` from 1.79.1 to 1.79.2 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.1...v1.79.2) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.61.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: github.com/minio/minio-go/v7 dependency-version: 7.0.99 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: golang.org/x/oauth2 dependency-version: 0.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sync dependency-version: 0.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sys dependency-version: 0.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.271.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/grpc dependency-version: 1.79.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 20 ++++++++++---------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index e6b1eab2cbd..c0238f09424 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25.0 toolchain go1.25.8 require ( - cloud.google.com/go/storage v1.60.0 + cloud.google.com/go/storage v1.61.0 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -34,7 +34,7 @@ require ( github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.98 + github.com/minio/minio-go/v7 v7.0.99 github.com/mocktools/go-smtp-mock/v2 v2.5.1 github.com/mxk/go-vss v1.2.0 github.com/natefinch/atomic v1.0.1 @@ -62,13 +62,13 @@ require ( golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 golang.org/x/mod v0.33.0 golang.org/x/net v0.51.0 - golang.org/x/oauth2 v0.35.0 - golang.org/x/sync v0.19.0 - golang.org/x/sys v0.41.0 + golang.org/x/oauth2 v0.36.0 + golang.org/x/sync v0.20.0 + golang.org/x/sys v0.42.0 golang.org/x/term v0.40.0 golang.org/x/text v0.34.0 - google.golang.org/api v0.269.0 - google.golang.org/grpc v1.79.1 + google.golang.org/api v0.271.0 + google.golang.org/grpc v1.79.2 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) @@ -116,7 +116,7 @@ require ( github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect @@ -146,9 +146,9 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/time v0.14.0 // indirect + golang.org/x/time v0.15.0 // indirect google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ea08f76677c..6bf73df0313 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7 cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= -cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= +cloud.google.com/go/storage v1.61.0 h1:8NGccs4oDZTqV1nBlom0CVJewloINXYW5Z0LoFqaVeI= +cloud.google.com/go/storage v1.61.0/go.mod h1:IvExELZv/uJe/DAzLgPeKNT8dm5+DM5gO0H1bkubD6Y= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -155,8 +155,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 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/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -205,8 +205,8 @@ github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.98 h1:MeAVKjLVz+XJ28zFcuYyImNSAh8Mq725uNW4beRisi0= -github.com/minio/minio-go/v7 v7.0.98/go.mod h1:cY0Y+W7yozf0mdIclrttzo1Iiu7mEf9y7nk2uXqMOvM= +github.com/minio/minio-go/v7 v7.0.99 h1:2vH/byrwUkIpFQFOilvTfaUpvAX3fEFhEzO+DR3DlCE= +github.com/minio/minio-go/v7 v7.0.99/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/mocktools/go-smtp-mock/v2 v2.5.1 h1:QcMJMChSgG1olVj4o6xxQFdrWzRjYNrcq660HAjd0wA= @@ -303,8 +303,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= @@ -336,37 +336,37 @@ golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= -golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= -golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= -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/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= -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/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= -google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= +google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= +google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= -google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= +google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From f4a4c4e48aa6331e4bbf0013d6236725f57fcf07 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 18:43:52 -0700 Subject: [PATCH 059/156] build(deps): bump the telemetry-dependencies group with 4 updates (#5209) Bumps the telemetry-dependencies group with 4 updates: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go). Updates `go.opentelemetry.io/otel` from 1.41.0 to 1.42.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.41.0...v1.42.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.41.0 to 1.42.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.41.0...v1.42.0) Updates `go.opentelemetry.io/otel/sdk` from 1.41.0 to 1.42.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.41.0...v1.42.0) Updates `go.opentelemetry.io/otel/trace` from 1.41.0 to 1.42.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.41.0...v1.42.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel dependency-version: 1.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index c0238f09424..7500e960922 100644 --- a/go.mod +++ b/go.mod @@ -53,10 +53,10 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.6 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.41.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 - go.opentelemetry.io/otel/sdk v1.41.0 - go.opentelemetry.io/otel/trace v1.41.0 + go.opentelemetry.io/otel v1.42.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 + go.opentelemetry.io/otel/sdk v1.42.0 + go.opentelemetry.io/otel/trace v1.42.0 go.uber.org/zap v1.27.1 golang.org/x/crypto v0.48.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 @@ -139,9 +139,9 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 // indirect - go.opentelemetry.io/otel/metric v1.41.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.41.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.42.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect diff --git a/go.sum b/go.sum index 6bf73df0313..e2d52092416 100644 --- a/go.sum +++ b/go.sum @@ -297,22 +297,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= -go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0 h1:ao6Oe+wSebTlQ1OEht7jlYTzQKE+pnx/iNywFvTbuuI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.41.0/go.mod h1:u3T6vz0gh/NVzgDgiwkgLxpsSF6PaPmo2il0apGJbls= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0 h1:mq/Qcf28TWz719lE3/hMB4KkyDuLJIvgJnFGcd0kEUI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.41.0/go.mod h1:yk5LXEYhsL2htyDNJbEq7fWzNEigeEdV5xBF/Y+kAv0= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= -go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= -go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= -go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= -go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= -go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= -go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= -go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= -go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= +go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= +go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= +go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= +go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= From e7075a8f4ddc689b6aa52150e6612b737f31e3a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 19:05:20 -0700 Subject: [PATCH 060/156] build(deps): bump github.com/klauspost/reedsolomon from 1.13.2 to 1.13.3 (#5211) Bumps [github.com/klauspost/reedsolomon](https://github.com/klauspost/reedsolomon) from 1.13.2 to 1.13.3. - [Release notes](https://github.com/klauspost/reedsolomon/releases) - [Commits](https://github.com/klauspost/reedsolomon/compare/v1.13.2...v1.13.3) --- updated-dependencies: - dependency-name: github.com/klauspost/reedsolomon dependency-version: 1.13.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7500e960922..4973acde6a2 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/hashicorp/cronexpr v1.1.3 github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 - github.com/klauspost/reedsolomon v1.13.2 + github.com/klauspost/reedsolomon v1.13.3 github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 diff --git a/go.sum b/go.sum index e2d52092416..7fe2534684d 100644 --- a/go.sum +++ b/go.sum @@ -179,8 +179,8 @@ github.com/klauspost/crc32 v1.3.0 h1:sSmTt3gUt81RP655XGZPElI0PelVTZ6YwCRnPSupoFM github.com/klauspost/crc32 v1.3.0/go.mod h1:D7kQaZhnkX/Y0tstFGf8VUzv2UofNGqCjnC3zdHB0Hw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/reedsolomon v1.13.2 h1:9qtQy2tKEVpVB8Pfq87ZljHZb60/LbeTQ1OxV8EGzdE= -github.com/klauspost/reedsolomon v1.13.2/go.mod h1:ggJT9lc71Vu+cSOPBlxGvBN6TfAS77qB4fp8vJ05NSA= +github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= +github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 h1:zLII9D9ueGu4gEaIla82qEghSJA1ZeUsIjZqHxoem04= github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= From d698345d6b1380878574ce38d6316b8a64c9a131 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 02:16:37 +0000 Subject: [PATCH 061/156] build(deps): bump github.com/mxk/go-vss from 1.2.0 to 1.2.1 (#5210) Bumps [github.com/mxk/go-vss](https://github.com/mxk/go-vss) from 1.2.0 to 1.2.1. - [Commits](https://github.com/mxk/go-vss/compare/v1.2.0...v1.2.1) --- updated-dependencies: - dependency-name: github.com/mxk/go-vss dependency-version: 1.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4973acde6a2..d9a48669317 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( github.com/mattn/go-isatty v0.0.20 github.com/minio/minio-go/v7 v7.0.99 github.com/mocktools/go-smtp-mock/v2 v2.5.1 - github.com/mxk/go-vss v1.2.0 + github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 github.com/pierrec/lz4 v2.6.1+incompatible diff --git a/go.sum b/go.sum index 7fe2534684d..df412d0d2bd 100644 --- a/go.sum +++ b/go.sum @@ -213,8 +213,8 @@ github.com/mocktools/go-smtp-mock/v2 v2.5.1 h1:QcMJMChSgG1olVj4o6xxQFdrWzRjYNrcq github.com/mocktools/go-smtp-mock/v2 v2.5.1/go.mod h1:Rr8M2njlxx//l5INl2+uESnsL2lDsL24teEykCrGfmE= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mxk/go-vss v1.2.0 h1:JpdOPc/P6B3XyRoddn0iMiG/ADBi3AuEsv8RlTb+JeE= -github.com/mxk/go-vss v1.2.0/go.mod h1:ZQ4yFxCG54vqPnCd+p2IxAe5jwZdz56wSjbwzBXiFd8= +github.com/mxk/go-vss v1.2.1 h1:shspH0qgqZ9l5sfIRsXS5BgZXz25/BY+ZQsW0HlD0fM= +github.com/mxk/go-vss v1.2.1/go.mod h1:ZQ4yFxCG54vqPnCd+p2IxAe5jwZdz56wSjbwzBXiFd8= github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde h1:x0TT0RDC7UhAVbbWWBzr41ElhJx5tXPWkIHA2HWPRuw= From 62106db4e9f99af5d665396d0998a4d46ec54c46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 02:58:06 +0000 Subject: [PATCH 062/156] build(deps-dev): bump tar from 7.5.10 to 7.5.11 in /app (#5213) Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.10 to 7.5.11. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.10...v7.5.11) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.11 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 8e638a735f6..cb3b0d36f7f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -4565,9 +4565,9 @@ } }, "node_modules/tar": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", - "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { From ce6b4504396336d46207841012b45c7ad171d89d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 00:33:19 +0000 Subject: [PATCH 063/156] build(deps): bump the common-golang-dependencies group with 7 updates (#5220) Bumps the common-golang-dependencies group with 7 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.61.0` | `1.61.3` | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.48.0` | `0.49.0` | | [golang.org/x/mod](https://github.com/golang/mod) | `0.33.0` | `0.34.0` | | [golang.org/x/net](https://github.com/golang/net) | `0.51.0` | `0.52.0` | | [golang.org/x/term](https://github.com/golang/term) | `0.40.0` | `0.41.0` | | [golang.org/x/text](https://github.com/golang/text) | `0.34.0` | `0.35.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.271.0` | `0.272.0` | Updates `cloud.google.com/go/storage` from 1.61.0 to 1.61.3 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.61.0...storage/v1.61.3) Updates `golang.org/x/crypto` from 0.48.0 to 0.49.0 - [Commits](https://github.com/golang/crypto/compare/v0.48.0...v0.49.0) Updates `golang.org/x/mod` from 0.33.0 to 0.34.0 - [Commits](https://github.com/golang/mod/compare/v0.33.0...v0.34.0) Updates `golang.org/x/net` from 0.51.0 to 0.52.0 - [Commits](https://github.com/golang/net/compare/v0.51.0...v0.52.0) Updates `golang.org/x/term` from 0.40.0 to 0.41.0 - [Commits](https://github.com/golang/term/compare/v0.40.0...v0.41.0) Updates `golang.org/x/text` from 0.34.0 to 0.35.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.34.0...v0.35.0) Updates `google.golang.org/api` from 0.271.0 to 0.272.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.271.0...v0.272.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.61.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: golang.org/x/crypto dependency-version: 0.49.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/mod dependency-version: 0.34.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/net dependency-version: 0.52.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/term dependency-version: 0.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/text dependency-version: 0.35.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.272.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 22 +++++++++++----------- go.sum | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index d9a48669317..5b654789808 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25.0 toolchain go1.25.8 require ( - cloud.google.com/go/storage v1.61.0 + cloud.google.com/go/storage v1.61.3 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -58,16 +58,16 @@ require ( go.opentelemetry.io/otel/sdk v1.42.0 go.opentelemetry.io/otel/trace v1.42.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.48.0 + golang.org/x/crypto v0.49.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.33.0 - golang.org/x/net v0.51.0 + golang.org/x/mod v0.34.0 + golang.org/x/net v0.52.0 golang.org/x/oauth2 v0.36.0 golang.org/x/sync v0.20.0 golang.org/x/sys v0.42.0 - golang.org/x/term v0.40.0 - golang.org/x/text v0.34.0 - google.golang.org/api v0.271.0 + golang.org/x/term v0.41.0 + golang.org/x/text v0.35.0 + google.golang.org/api v0.272.0 google.golang.org/grpc v1.79.2 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -117,7 +117,7 @@ require ( github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.17.0 // indirect + github.com/googleapis/gax-go/v2 v2.18.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -147,8 +147,8 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect + google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index df412d0d2bd..b73026fa3fc 100644 --- a/go.sum +++ b/go.sum @@ -12,14 +12,14 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= -cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= +cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= +cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.61.0 h1:8NGccs4oDZTqV1nBlom0CVJewloINXYW5Z0LoFqaVeI= -cloud.google.com/go/storage v1.61.0/go.mod h1:IvExELZv/uJe/DAzLgPeKNT8dm5+DM5gO0H1bkubD6Y= +cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= +cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -157,8 +157,8 @@ 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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= +github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= +github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -327,15 +327,15 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= -golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= -golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= @@ -347,24 +347,24 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= +golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= -google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/api v0.272.0 h1:eLUQZGnAS3OHn31URRf9sAmRk3w2JjMx37d2k8AjJmA= +google.golang.org/api v0.272.0/go.mod h1:wKjowi5LNJc5qarNvDCvNQBn3rVK8nSy6jg2SwRwzIA= +google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d h1:vsOm753cOAMkt76efriTCDKjpCbK18XGHMJHo0JUKhc= +google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:0oz9d7g9QLSdv9/lgbIjowW1JoxMbxmBVNe8i6tORJI= +google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1:EocjzKLywydp5uZ5tJ79iP6Q0UjDnyiHkGRWxuPBP8s= +google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 7723aa0274e2db84cba14e347593714ac1909705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Mon, 16 Mar 2026 22:01:42 -0700 Subject: [PATCH 064/156] chore(ci): avoid duplicate test failure output (#5222) --- Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 54b1a0fbb03..ea3f485c111 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ endif endif GOTESTSUM_FORMAT=pkgname-and-test-fails -GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped +GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --hide-summary=output GO_TEST?=$(gotestsum) $(GOTESTSUM_FLAGS) -- LINTER_DEADLINE=1200s @@ -279,13 +279,13 @@ test-with-coverage: export TESTING_ACTION_EXE ?= $(TESTING_ACTION_EXE) test-with-coverage: $(gotestsum) $(TESTING_ACTION_EXE) $(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -short -covermode=atomic -coverprofile=coverage.txt --coverpkg $(COVERAGE_PACKAGES) -timeout $(UNIT_TESTS_TIMEOUT) ./... -test: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped --jsonfile=.tmp.unit-tests.json +test: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=output --jsonfile=.tmp.unit-tests.json test: export TESTING_ACTION_EXE ?= $(TESTING_ACTION_EXE) test: $(gotestsum) $(TESTING_ACTION_EXE) $(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -timeout $(UNIT_TESTS_TIMEOUT) -skip '^TestIndexBlobManagerStress$$' ./... -$(gotestsum) tool slowest --jsonfile .tmp.unit-tests.json --threshold 1000ms -test-index-blob-v0: GOTESTSUM_FLAGS=--format=pkgname --no-summary=output,skipped +test-index-blob-v0: GOTESTSUM_FLAGS=--format=pkgname --no-summary=output test-index-blob-v0: $(gotestsum) $(TESTING_ACTION_EXE) $(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -tags testing -count=$(REPEAT_TEST) -timeout $(UNIT_TESTS_TIMEOUT) -run '^TestIndexBlobManagerStress$$' ./repo/content/indexblob/... @@ -295,7 +295,7 @@ PROVIDER_TEST_TARGET=... provider-tests: export KOPIA_PROVIDER_TEST=true provider-tests: export RCLONE_EXE=$(rclone) -provider-tests: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=skipped --jsonfile=.tmp.provider-tests.json +provider-tests: GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --no-summary=output --jsonfile=.tmp.provider-tests.json provider-tests: $(gotestsum) $(rclone) $(MINIO_MC_PATH) $(GO_TEST) $(UNIT_TEST_RACE_FLAGS) -count=$(REPEAT_TEST) -timeout 15m ./repo/blob/$(PROVIDER_TEST_TARGET) -$(gotestsum) tool slowest --jsonfile .tmp.provider-tests.json --threshold 1000ms @@ -318,7 +318,7 @@ $(TESTING_ACTION_EXE): tests/testingaction/main.go compat-tests: export KOPIA_CURRENT_EXE=$(CURDIR)/$(kopia_ui_embedded_exe) compat-tests: export KOPIA_08_EXE=$(kopia08) compat-tests: export KOPIA_017_EXE=$(kopia017) -compat-tests: GOTESTSUM_FLAGS=--format=testname --no-summary=skipped --jsonfile=.tmp.compat-tests.json +compat-tests: GOTESTSUM_FLAGS=--format=testname --no-summary=output --jsonfile=.tmp.compat-tests.json compat-tests: $(kopia_ui_embedded_exe) $(kopia08) $(kopia017) $(gotestsum) $(GO_TEST) $(TEST_FLAGS) -count=$(REPEAT_TEST) -parallel $(PARALLEL) -timeout 3600s github.com/kopia/kopia/tests/compat_test # -$(gotestsum) tool slowest --jsonfile .tmp.compat-tests.json --threshold 1000ms From 9039fffb23ab18bb07d20f9dd8cdcc651001979a Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Mon, 16 Mar 2026 22:28:27 -0700 Subject: [PATCH 065/156] feat(ui): upgraded htmlui to the latest version (#5223) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5b654789808..f2a75d2108f 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 + github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index b73026fa3fc..ee8d5f8d31c 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011 h1:zLII9D9ueGu4gEaIla82qEghSJA1ZeUsIjZqHxoem04= -github.com/kopia/htmluibuild v0.0.1-0.20260302044405-39cf4ae42011/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8 h1:M1Ew+mmcjmFemLrlInIhrrSqoUNBzuwPPI2Z8zMxWdY= +github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From ed40a2f8b48f60a1ae78e831147064ada4d68336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 17 Mar 2026 16:51:57 -0700 Subject: [PATCH 066/156] fix(repository): failures when exceeding Windows `MAX_PATH` (#5226) Fix Windows `MAX_PATH` failures in `realOS` filesystem methods - Add `longPath` helper to `realOS` filesystem methods to fix Windows `MAX_PATH` failures - Add `TestFileStorageLongPath` test Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> --- .../filesystem/filesystem_storage_test.go | 69 +++++++++++++++++++ repo/blob/filesystem/osinterface_realos.go | 30 +++++--- 2 files changed, 88 insertions(+), 11 deletions(-) diff --git a/repo/blob/filesystem/filesystem_storage_test.go b/repo/blob/filesystem/filesystem_storage_test.go index 20f6d29d903..1a451198ed2 100644 --- a/repo/blob/filesystem/filesystem_storage_test.go +++ b/repo/blob/filesystem/filesystem_storage_test.go @@ -6,6 +6,7 @@ import ( "path/filepath" "reflect" "sort" + "strings" "testing" "time" @@ -58,6 +59,74 @@ func TestFileStorage(t *testing.T) { } } +func TestFileStorageLongPath(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + + // Create a base temp directory and extend it to exceed Windows MAX_PATH (260 chars). + base := testutil.TempDirectoryShort(t) + + // Ensure the resulting path exceeds this length (slightly above 260). + const minLongPathLen = 270 + + longBase := base + if len(longBase) < minLongPathLen { + const maxSegmentLen = 60 + + // Append multiple reasonably sized subdirectories until the total path length + // exceeds minLongPathLen, avoiding a single over-long path component and + // guarding against negative repeat counts. + for len(longBase) < minLongPathLen { + remaining := minLongPathLen - len(longBase) + + // Leave room for a path separator added by filepath.Join. + segLen := maxSegmentLen + if remaining <= maxSegmentLen+1 { + segLen = remaining - 1 + } + + if segLen <= 0 { + break + } + + segment := strings.Repeat("x", segLen) + longBase = filepath.Join(longBase, segment) + } + } + + r, err := New(ctx, &Options{ + Path: longBase, + Options: sharded.Options{ + DirectoryShards: []int{2, 2}, + }, + }, true) + require.NoError(t, err) + require.NotNil(t, r) + + t.Cleanup(func() { + require.NoError(t, r.Close(testlogging.ContextForCleanup(t))) + }) + + blobID := blob.ID("testbloblongpath12345678") + data := []byte{1, 2, 3, 4, 5} + + require.NoError(t, r.PutBlob(ctx, blobID, gather.FromSlice(data), blob.PutOptions{})) + + var buf gather.WriteBuffer + defer buf.Close() + + require.NoError(t, r.GetBlob(ctx, blobID, 0, -1, &buf)) + require.Equal(t, data, buf.ToByteSlice()) + + blobs, err := blob.ListAllBlobs(ctx, r, "") + require.NoError(t, err) + require.Len(t, blobs, 1) + require.Equal(t, blobID, blobs[0].BlobID) + + require.NoError(t, r.DeleteBlob(ctx, blobID)) +} + func TestFileStorageValidate(t *testing.T) { t.Parallel() diff --git a/repo/blob/filesystem/osinterface_realos.go b/repo/blob/filesystem/osinterface_realos.go index c28a5094c25..1f581286bfe 100644 --- a/repo/blob/filesystem/osinterface_realos.go +++ b/repo/blob/filesystem/osinterface_realos.go @@ -5,13 +5,21 @@ import ( "io/fs" "os" "time" + + "github.com/kopia/kopia/internal/atomicfile" ) // realOS is an implementation of osInterface that uses real operating system calls. type realOS struct{} +// longPath applies MaybePrefixLongFilenameOnWindows to handle paths exceeding +// MAX_PATH on Windows. On non-Windows platforms this is a no-op. +func longPath(p string) string { + return atomicfile.MaybePrefixLongFilenameOnWindows(p) +} + func (realOS) Open(fname string) (osReadFile, error) { - f, err := os.Open(fname) //nolint:gosec + f, err := os.Open(longPath(fname)) if err != nil { //nolint:wrapcheck return nil, err @@ -28,12 +36,12 @@ func (realOS) IsPathSeparator(c byte) bool { return os.IsPathSeparator(c) } func (realOS) Rename(oldname, newname string) error { //nolint:wrapcheck - return os.Rename(oldname, newname) + return os.Rename(longPath(oldname), longPath(newname)) } func (realOS) ReadDir(dirname string) ([]fs.DirEntry, error) { //nolint:wrapcheck - return os.ReadDir(dirname) + return os.ReadDir(longPath(dirname)) } func (realOS) IsPathError(err error) bool { @@ -50,32 +58,32 @@ func (realOS) IsLinkError(err error) bool { func (realOS) Remove(fname string) error { //nolint:wrapcheck - return os.Remove(fname) + return os.Remove(longPath(fname)) } func (realOS) Stat(fname string) (os.FileInfo, error) { //nolint:wrapcheck - return os.Stat(fname) + return os.Stat(longPath(fname)) } func (realOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, error) { - //nolint:wrapcheck,gosec - return os.OpenFile(fname, os.O_CREATE|os.O_EXCL|os.O_WRONLY, perm) + //nolint:wrapcheck + return os.OpenFile(longPath(fname), os.O_CREATE|os.O_EXCL|os.O_WRONLY, perm) } func (realOS) Mkdir(fname string, mode os.FileMode) error { //nolint:wrapcheck - return os.Mkdir(fname, mode) + return os.Mkdir(longPath(fname), mode) } func (realOS) MkdirAll(fname string, mode os.FileMode) error { //nolint:wrapcheck - return os.MkdirAll(fname, mode) + return os.MkdirAll(longPath(fname), mode) } func (realOS) Chtimes(fname string, atime, mtime time.Time) error { //nolint:wrapcheck - return os.Chtimes(fname, atime, mtime) + return os.Chtimes(longPath(fname), atime, mtime) } func (realOS) Geteuid() int { @@ -84,7 +92,7 @@ func (realOS) Geteuid() int { func (realOS) Chown(fname string, uid, gid int) error { //nolint:wrapcheck - return os.Chown(fname, uid, gid) + return os.Chown(longPath(fname), uid, gid) } var _ osInterface = realOS{} From 873a89a08df4bc8a228ee309f9cf908ae99517cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 17 Mar 2026 17:43:08 -0700 Subject: [PATCH 067/156] refactor(general): move `SafeLongFilename` to `ospath` (#5227) - Move MaybePrefixLongFilenameOnWindows to ospath package and rename it to SafeLongFilename, along with corresponding test. - Elide the function implementation at build time on non-Windows platforms. - Update documentation and comments for clarity. - Rename package-local helper function. --- fs/localfs/shallow_fs.go | 7 ++-- internal/atomicfile/atomicfile.go | 37 +------------------ internal/ospath/ospath_nonwindows.go | 17 +++++++++ internal/ospath/ospath_windows.go | 35 ++++++++++++++++++ .../ospath_windows_test.go} | 12 +++--- repo/blob/filesystem/osinterface_realos.go | 28 ++++++-------- snapshot/restore/local_fs_output.go | 3 +- snapshot/restore/local_fs_output_windows.go | 4 +- snapshot/restore/shallow_helper.go | 4 +- tests/end_to_end_test/shallowrestore_test.go | 21 +++++------ 10 files changed, 90 insertions(+), 78 deletions(-) create mode 100644 internal/ospath/ospath_nonwindows.go rename internal/{atomicfile/atomicfile_test.go => ospath/ospath_windows_test.go} (85%) diff --git a/fs/localfs/shallow_fs.go b/fs/localfs/shallow_fs.go index ae1923d68b2..1dedc4c3af7 100644 --- a/fs/localfs/shallow_fs.go +++ b/fs/localfs/shallow_fs.go @@ -11,6 +11,7 @@ import ( "github.com/kopia/kopia/fs" "github.com/kopia/kopia/internal/atomicfile" + "github.com/kopia/kopia/internal/ospath" "github.com/kopia/kopia/snapshot" ) @@ -26,7 +27,7 @@ func placeholderPath(path string, et snapshot.EntryType) (string, error) { return path + ShallowEntrySuffix, nil case snapshot.EntryTypeDirectory: // Directories and regular files dirpath := path + ShallowEntrySuffix - if err := os.MkdirAll(atomicfile.MaybePrefixLongFilenameOnWindows(dirpath), os.FileMode(dirMode)); err != nil { + if err := os.MkdirAll(ospath.SafeLongFilename(dirpath), os.FileMode(dirMode)); err != nil { return "", errors.Wrap(err, "placeholderPath dir creation") } @@ -64,7 +65,7 @@ func WriteShallowPlaceholder(path string, de *snapshot.DirEntry) (string, error) } func dirEntryFromPlaceholder(path string) (*snapshot.DirEntry, error) { - b, err := os.ReadFile(atomicfile.MaybePrefixLongFilenameOnWindows(path)) + b, err := os.ReadFile(ospath.SafeLongFilename(path)) if err != nil { return nil, errors.Wrap(err, "dirEntryFromPlaceholder reading placeholder") } @@ -89,7 +90,7 @@ type shallowFilesystemDirectory struct { } func checkedDirEntryFromPlaceholder(path, php string) (*snapshot.DirEntry, error) { - if _, err := os.Lstat(atomicfile.MaybePrefixLongFilenameOnWindows(path)); err == nil { + if _, err := os.Lstat(ospath.SafeLongFilename(path)); err == nil { return nil, errors.Errorf("%q, %q exist: shallowrestore tree is corrupt probably because a previous restore into a shallow tree was interrupted", path, php) } diff --git a/internal/atomicfile/atomicfile.go b/internal/atomicfile/atomicfile.go index 5769e9093db..567b6593594 100644 --- a/internal/atomicfile/atomicfile.go +++ b/internal/atomicfile/atomicfile.go @@ -3,49 +3,14 @@ package atomicfile import ( "io" - "runtime" - "strings" "github.com/natefinch/atomic" "github.com/kopia/kopia/internal/ospath" ) -// Do not prefix files shorter than this, we are intentionally using less than MAX_PATH -// in Windows to allow some suffixes. -const maxPathLength = 240 - -// MaybePrefixLongFilenameOnWindows prefixes the given filename with \\?\ on Windows -// if the filename is longer than 260 characters, which is required to be able to -// use some low-level Windows APIs. -// Because long file names have certain limitations: -// - we must replace forward slashes with backslashes. -// - dummy path element (\.\) must be removed. -// -// Relative paths are always limited to a total of MAX_PATH characters: -// https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation -func MaybePrefixLongFilenameOnWindows(fname string) string { - if runtime.GOOS != "windows" || len(fname) < maxPathLength || - fname[:4] == `\\?\` || !ospath.IsAbs(fname) { - return fname - } - - fixed := strings.ReplaceAll(fname, "/", `\`) - - for { - fixed2 := strings.ReplaceAll(fixed, `\.\`, `\`) - if fixed2 == fixed { - break - } - - fixed = fixed2 - } - - return `\\?\` + fixed -} - // Write is a wrapper around atomic.WriteFile that handles long file names on Windows. func Write(filename string, r io.Reader) error { //nolint:wrapcheck - return atomic.WriteFile(MaybePrefixLongFilenameOnWindows(filename), r) + return atomic.WriteFile(ospath.SafeLongFilename(filename), r) } diff --git a/internal/ospath/ospath_nonwindows.go b/internal/ospath/ospath_nonwindows.go new file mode 100644 index 00000000000..22a7f03fa09 --- /dev/null +++ b/internal/ospath/ospath_nonwindows.go @@ -0,0 +1,17 @@ +//go:build !windows + +package ospath + +// SafeLongFilename handles long absolute file paths in a platform-specific manner. +// Currently it only handles absolute paths on Windows. It is a no-op on other +// platforms. +// +// On Windows, it prefixes the given filename with \\?\ when the filename length +// approximates MAX_PATH characters, which is required to be able to use some +// low-level Windows APIs. +// +// Relative paths are always limited to a total of MAX_PATH characters: +// https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation +func SafeLongFilename(fname string) string { + return fname +} diff --git a/internal/ospath/ospath_windows.go b/internal/ospath/ospath_windows.go index 6587775f434..15c64d1b81a 100644 --- a/internal/ospath/ospath_windows.go +++ b/internal/ospath/ospath_windows.go @@ -2,9 +2,44 @@ package ospath import ( "os" + "runtime" + "strings" ) func init() { userSettingsDir = os.Getenv("APPDATA") userLogsDir = os.Getenv("LOCALAPPDATA") } + +// SafeLongFilename prefixes the given filename with \\?\ on Windows when the +// filename length approximates MAX_PATH characters, which is required to be +// able to use some low-level Windows APIs. +// Because long file names have certain limitations: +// - we must replace forward slashes with backslashes. +// - dummy path element (\.\) must be removed. +// +// Relative paths are always limited to a total of MAX_PATH characters (typically 260): +// https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation +func SafeLongFilename(fname string) string { + // Do not prefix when the name is shorter than this. + // Intentionally using less than MAX_PATH in Windows to allow some suffixes. + const maxPathLength = 240 + + if runtime.GOOS != "windows" || len(fname) < maxPathLength || + fname[:4] == `\\?\` || !IsAbs(fname) { + return fname + } + + fixed := strings.ReplaceAll(fname, "/", `\`) + + for { + fixed2 := strings.ReplaceAll(fixed, `\.\`, `\`) + if fixed2 == fixed { + break + } + + fixed = fixed2 + } + + return `\\?\` + fixed +} diff --git a/internal/atomicfile/atomicfile_test.go b/internal/ospath/ospath_windows_test.go similarity index 85% rename from internal/atomicfile/atomicfile_test.go rename to internal/ospath/ospath_windows_test.go index 30786e147be..9e4611bde2c 100644 --- a/internal/atomicfile/atomicfile_test.go +++ b/internal/ospath/ospath_windows_test.go @@ -1,4 +1,4 @@ -package atomicfile +package ospath import ( "runtime" @@ -6,13 +6,13 @@ import ( "testing" ) -var veryLongSegment = strings.Repeat("f", 270) - -func TestMaybePrefixLongFilenameOnWindows(t *testing.T) { +func TestSafeLongFilename_Windows(t *testing.T) { if runtime.GOOS != "windows" { - return + t.Skip("Windows-only test") } + veryLongSegment := strings.Repeat("f", 270) + cases := []struct { input string want string @@ -37,7 +37,7 @@ func TestMaybePrefixLongFilenameOnWindows(t *testing.T) { } for _, tc := range cases { - if got := MaybePrefixLongFilenameOnWindows(tc.input); got != tc.want { + if got := SafeLongFilename(tc.input); got != tc.want { t.Errorf("invalid result for %v: got %v, want %v", tc.input, got, tc.want) } } diff --git a/repo/blob/filesystem/osinterface_realos.go b/repo/blob/filesystem/osinterface_realos.go index 1f581286bfe..faf85f90219 100644 --- a/repo/blob/filesystem/osinterface_realos.go +++ b/repo/blob/filesystem/osinterface_realos.go @@ -6,20 +6,14 @@ import ( "os" "time" - "github.com/kopia/kopia/internal/atomicfile" + "github.com/kopia/kopia/internal/ospath" ) // realOS is an implementation of osInterface that uses real operating system calls. type realOS struct{} -// longPath applies MaybePrefixLongFilenameOnWindows to handle paths exceeding -// MAX_PATH on Windows. On non-Windows platforms this is a no-op. -func longPath(p string) string { - return atomicfile.MaybePrefixLongFilenameOnWindows(p) -} - func (realOS) Open(fname string) (osReadFile, error) { - f, err := os.Open(longPath(fname)) + f, err := os.Open(ospath.SafeLongFilename(fname)) if err != nil { //nolint:wrapcheck return nil, err @@ -36,12 +30,12 @@ func (realOS) IsPathSeparator(c byte) bool { return os.IsPathSeparator(c) } func (realOS) Rename(oldname, newname string) error { //nolint:wrapcheck - return os.Rename(longPath(oldname), longPath(newname)) + return os.Rename(ospath.SafeLongFilename(oldname), ospath.SafeLongFilename(newname)) } func (realOS) ReadDir(dirname string) ([]fs.DirEntry, error) { //nolint:wrapcheck - return os.ReadDir(longPath(dirname)) + return os.ReadDir(ospath.SafeLongFilename(dirname)) } func (realOS) IsPathError(err error) bool { @@ -58,32 +52,32 @@ func (realOS) IsLinkError(err error) bool { func (realOS) Remove(fname string) error { //nolint:wrapcheck - return os.Remove(longPath(fname)) + return os.Remove(ospath.SafeLongFilename(fname)) } func (realOS) Stat(fname string) (os.FileInfo, error) { //nolint:wrapcheck - return os.Stat(longPath(fname)) + return os.Stat(ospath.SafeLongFilename(fname)) } func (realOS) CreateNewFile(fname string, perm os.FileMode) (osWriteFile, error) { //nolint:wrapcheck - return os.OpenFile(longPath(fname), os.O_CREATE|os.O_EXCL|os.O_WRONLY, perm) + return os.OpenFile(ospath.SafeLongFilename(fname), os.O_CREATE|os.O_EXCL|os.O_WRONLY, perm) } func (realOS) Mkdir(fname string, mode os.FileMode) error { //nolint:wrapcheck - return os.Mkdir(longPath(fname), mode) + return os.Mkdir(ospath.SafeLongFilename(fname), mode) } func (realOS) MkdirAll(fname string, mode os.FileMode) error { //nolint:wrapcheck - return os.MkdirAll(longPath(fname), mode) + return os.MkdirAll(ospath.SafeLongFilename(fname), mode) } func (realOS) Chtimes(fname string, atime, mtime time.Time) error { //nolint:wrapcheck - return os.Chtimes(longPath(fname), atime, mtime) + return os.Chtimes(ospath.SafeLongFilename(fname), atime, mtime) } func (realOS) Geteuid() int { @@ -92,7 +86,7 @@ func (realOS) Geteuid() int { func (realOS) Chown(fname string, uid, gid int) error { //nolint:wrapcheck - return os.Chown(longPath(fname), uid, gid) + return os.Chown(ospath.SafeLongFilename(fname), uid, gid) } var _ osInterface = realOS{} diff --git a/snapshot/restore/local_fs_output.go b/snapshot/restore/local_fs_output.go index 1d43ba03b0a..43cc026e787 100644 --- a/snapshot/restore/local_fs_output.go +++ b/snapshot/restore/local_fs_output.go @@ -15,6 +15,7 @@ import ( "github.com/kopia/kopia/fs/localfs" "github.com/kopia/kopia/internal/atomicfile" "github.com/kopia/kopia/internal/iocopy" + "github.com/kopia/kopia/internal/ospath" "github.com/kopia/kopia/internal/sparsefile" "github.com/kopia/kopia/internal/stat" "github.com/kopia/kopia/snapshot" @@ -433,7 +434,7 @@ func (o *FilesystemOutput) copyFileContent(ctx context.Context, targetPath strin } log(ctx).Debugf("copying file contents to: %v", targetPath) - targetPath = atomicfile.MaybePrefixLongFilenameOnWindows(targetPath) + targetPath = ospath.SafeLongFilename(targetPath) if o.WriteFilesAtomically { //nolint:wrapcheck diff --git a/snapshot/restore/local_fs_output_windows.go b/snapshot/restore/local_fs_output_windows.go index 1825ac8640b..a254763e871 100644 --- a/snapshot/restore/local_fs_output_windows.go +++ b/snapshot/restore/local_fs_output_windows.go @@ -7,7 +7,7 @@ import ( "github.com/pkg/errors" "golang.org/x/sys/windows" - "github.com/kopia/kopia/internal/atomicfile" + "github.com/kopia/kopia/internal/ospath" ) //nolint:revive @@ -24,7 +24,7 @@ func symlinkChtimes(linkPath string, atime, mtime time.Time) error { fta := windows.NsecToFiletime(atime.UnixNano()) ftw := windows.NsecToFiletime(mtime.UnixNano()) - linkPath = atomicfile.MaybePrefixLongFilenameOnWindows(linkPath) + linkPath = ospath.SafeLongFilename(linkPath) fn, err := windows.UTF16PtrFromString(linkPath) if err != nil { diff --git a/snapshot/restore/shallow_helper.go b/snapshot/restore/shallow_helper.go index 24dc9df2065..48ba6440161 100644 --- a/snapshot/restore/shallow_helper.go +++ b/snapshot/restore/shallow_helper.go @@ -5,7 +5,7 @@ import ( "strings" "github.com/kopia/kopia/fs/localfs" - "github.com/kopia/kopia/internal/atomicfile" + "github.com/kopia/kopia/internal/ospath" ) // PathIfPlaceholder returns the placeholder suffix trimmed from path or the @@ -23,7 +23,7 @@ func PathIfPlaceholder(path string) string { func SafeRemoveAll(path string) error { if SafelySuffixablePath(path) { //nolint:wrapcheck - return os.RemoveAll(atomicfile.MaybePrefixLongFilenameOnWindows(path + localfs.ShallowEntrySuffix)) + return os.RemoveAll(ospath.SafeLongFilename(path + localfs.ShallowEntrySuffix)) } // path can't possibly exist because we could have never written a file diff --git a/tests/end_to_end_test/shallowrestore_test.go b/tests/end_to_end_test/shallowrestore_test.go index 516b76bbbe5..4fef2870b0a 100644 --- a/tests/end_to_end_test/shallowrestore_test.go +++ b/tests/end_to_end_test/shallowrestore_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/require" "github.com/kopia/kopia/fs/localfs" - "github.com/kopia/kopia/internal/atomicfile" + "github.com/kopia/kopia/internal/ospath" "github.com/kopia/kopia/repo/object" "github.com/kopia/kopia/snapshot" "github.com/kopia/kopia/snapshot/restore" @@ -146,7 +146,7 @@ func TestShallowFullCycle(t *testing.T) { fpathinlong := filepath.Join(dirpathlong, "nestedfile") require.NoError(t, os.Mkdir(dirpathlong, 0o755)) - testdirtree.MustCreateRandomFile(t, atomicfile.MaybePrefixLongFilenameOnWindows(fpathinlong), testdirtree.DirectoryTreeOptions{}, (*testdirtree.DirectoryTreeCounters)(nil)) + testdirtree.MustCreateRandomFile(t, ospath.SafeLongFilename(fpathinlong), testdirtree.DirectoryTreeOptions{}, (*testdirtree.DirectoryTreeCounters)(nil)) e.RunAndExpectSuccess(t, "snapshot", "create", source) sources := clitestutil.ListSnapshotsAndExpectSuccess(t, e) @@ -224,9 +224,8 @@ func addOneFile(m *mutatorArgs) { func doNothing(_ *mutatorArgs) { } -// mplfow makes atomicfile.MaybePrefixLongFilenameOnWindows easier to type. -func mplfow(fname string) string { - return atomicfile.MaybePrefixLongFilenameOnWindows(fname) +func longName(fname string) string { + return ospath.SafeLongFilename(fname) } // moveDirectory moves a directory from one location to another (in the @@ -252,11 +251,11 @@ func moveDirectory(m *mutatorArgs) { require.NoError(m.t, os.Mkdir(neworiginaldir, 0o755)) // 3. move shallow dir into new dir, original dir into new dir - require.NoError(m.t, os.Rename(mplfow(dirinshallow), mplfow(filepath.Join(newshallowdir, relpath)))) - require.NoError(m.t, os.Rename(mplfow(filepath.Join(m.original, relpathinreal)), mplfow(filepath.Join(neworiginaldir, relpathinreal)))) + require.NoError(m.t, os.Rename(longName(dirinshallow), longName(filepath.Join(newshallowdir, relpath)))) + require.NoError(m.t, os.Rename(longName(filepath.Join(m.original, relpathinreal)), longName(filepath.Join(neworiginaldir, relpathinreal)))) // 4. fix new directory timestamp to be the same - fi, err := os.Stat(mplfow(newshallowdir)) + fi, err := os.Stat(longName(newshallowdir)) require.NoError(m.t, err) require.NoError(m.t, os.Chtimes(neworiginaldir, fi.ModTime(), fi.ModTime())) require.NoError(m.t, os.Chtimes(newshallowdir, fi.ModTime(), fi.ModTime())) @@ -283,11 +282,11 @@ func moveFile(m *mutatorArgs) { require.NoError(m.t, os.Mkdir(neworiginaldir, 0o755)) // 3. move shallow file into new dir, original dir into new dir - require.NoError(m.t, os.Rename(mplfow(fileinshallow), mplfow(filepath.Join(newshallowdir, relpath)))) - require.NoError(m.t, os.Rename(mplfow(filepath.Join(m.original, localfs.TrimShallowSuffix(relpath))), mplfow(filepath.Join(neworiginaldir, localfs.TrimShallowSuffix(relpath))))) + require.NoError(m.t, os.Rename(longName(fileinshallow), longName(filepath.Join(newshallowdir, relpath)))) + require.NoError(m.t, os.Rename(longName(filepath.Join(m.original, localfs.TrimShallowSuffix(relpath))), longName(filepath.Join(neworiginaldir, localfs.TrimShallowSuffix(relpath))))) // 4. fix new directory timestamp to be the same - fi, err := os.Stat(mplfow(newshallowdir)) + fi, err := os.Stat(longName(newshallowdir)) require.NoError(m.t, err) require.NoError(m.t, os.Chtimes(neworiginaldir, fi.ModTime(), fi.ModTime())) require.NoError(m.t, os.Chtimes(newshallowdir, fi.ModTime(), fi.ModTime())) From 38fb7ef699ef98288e8b639b347c0f7ce27ef93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 17 Mar 2026 22:12:00 -0700 Subject: [PATCH 068/156] refactor(testing): `TestSnapshotFail`* (#5225) - leverage require - remove unused return value - remove unnecessary intermediate vars - rename variable to maxDirDepth for clarity - limit test file sizes - improve to readability - improve sub-test naming format - run each file mode case in a sub-test - move test case to separate function - move long loop block to separate function - run loop iterations in sub-tests - rename test params for consistency - add t.Helper() - coarser-grained parallelism - restore each snapshot into a separate directory - update function comment --- tests/end_to_end_test/snapshot_fail_test.go | 452 +++++++++++--------- 1 file changed, 239 insertions(+), 213 deletions(-) diff --git a/tests/end_to_end_test/snapshot_fail_test.go b/tests/end_to_end_test/snapshot_fail_test.go index 33b734eba72..7427bbb17aa 100644 --- a/tests/end_to_end_test/snapshot_fail_test.go +++ b/tests/end_to_end_test/snapshot_fail_test.go @@ -82,7 +82,6 @@ func testSnapshotFailText(t *testing.T, isFailFast bool, snapshotCreateFlags []s testSnapshotFail(t, isFailFast, snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFromLog) } -//nolint:thelper,cyclop func testSnapshotFail( t *testing.T, isFailFast bool, @@ -90,6 +89,8 @@ func testSnapshotFail( snapshotCreateEnv map[string]string, parseSnapshotResultFn func(t *testing.T, stdOut, _ []string) parsedSnapshotResult, ) { + t.Helper() + if runtime.GOOS == windowsOSName { t.Skip("this test does not work on Windows") } @@ -98,195 +99,236 @@ func testSnapshotFail( t.Skip("this test does not work as root, because we're unable to remove permissions.") } - const dir0Path = "dir0" - for _, ignoreFileErr := range []string{"true", "false"} { - for _, ignoreDirErr := range []string{"true", "false"} { - ignoringDirs := ignoreDirErr == "true" - ignoringFiles := ignoreFileErr == "true" + // Use "inherit" instead of "false" sometimes. Inherit defaults to false + if ignoreFileErr == "false" && rand.Intn(2) == 0 { + ignoreFileErr = "inherit" + } - // Use "inherit" instead of "false" sometimes. Inherit defaults to false - if !ignoringFiles && rand.Intn(2) == 0 { - ignoreFileErr = "inherit" - } + t.Run(fmt.Sprintf("failFast=%v:ignoreFileErr=%s", isFailFast, ignoreFileErr), func(t *testing.T) { + t.Parallel() - if !ignoringDirs && rand.Intn(2) == 0 { - ignoreDirErr = "inherit" - } + for _, ignoreDirErr := range []string{"true", "false"} { + if ignoreDirErr == "false" && rand.Intn(2) == 0 { + ignoreDirErr = "inherit" + } - var ( - expectedSuccess = expectedSnapshotResult{success: true} - expectEarlyFailure = expectedSnapshotResult{success: false} - expectedWhenIgnoringFiles = expectedSnapshotResult{success: ignoringFiles, wantErrors: cond(ignoringFiles, 0, 1), wantIgnoredErrors: cond(ignoringFiles, 1, 0), wantPartial: !ignoringFiles && isFailFast} - expectedWhenIgnoringDirs = expectedSnapshotResult{success: ignoringDirs, wantErrors: cond(ignoringDirs, 0, 1), wantIgnoredErrors: cond(ignoringDirs, 1, 0), wantPartial: !ignoringDirs && isFailFast} - ) - - // Test the root dir permissions - for tcIdx, tc := range []struct { - desc string - modifyEntry string - snapSource string - expectSuccess map[os.FileMode]expectedSnapshotResult - }{ - { - desc: "Modify permissions of the parent dir of the snapshot source (source is a FILE)", - modifyEntry: dir0Path, - snapSource: filepath.Join(dir0Path, "file1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, // --- permission: cannot read directory - 0o100: expectedSuccess, // --X permission: can enter directory and take snapshot of the file (with full permissions) - 0o400: expectEarlyFailure, // R-- permission: can read the file name, but will be unable to snapshot it without entering directory - }, - }, - { - desc: "Modify permissions of the parent dir of the snapshot source (source is a DIRECTORY)", - modifyEntry: dir0Path, - snapSource: filepath.Join(dir0Path, "dir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, - 0o100: expectedSuccess, - 0o400: expectEarlyFailure, - }, - }, - { - desc: "Modify permissions of the parent dir of the snapshot source (source is an EMPTY directory)", - modifyEntry: dir0Path, - snapSource: filepath.Join(dir0Path, "emptyDir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, - 0o100: expectedSuccess, - 0o400: expectEarlyFailure, - }, - }, - { - desc: "Modify permissions of the snapshot source itself (source is a FILE)", - modifyEntry: filepath.Join(dir0Path, "file1"), - snapSource: filepath.Join(dir0Path, "file1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, - 0o100: expectEarlyFailure, - 0o400: expectedSuccess, - }, - }, - { - desc: "Modify permissions of the snapshot source itself (source is a DIRECTORY)", - modifyEntry: filepath.Join(dir0Path, "dir1"), - snapSource: filepath.Join(dir0Path, "dir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, - 0o100: expectEarlyFailure, - 0o400: expectEarlyFailure, - }, - }, - { - desc: "Modify permissions of the snapshot source itself (source is an EMPTY directory)", - modifyEntry: filepath.Join(dir0Path, "emptyDir1"), - snapSource: filepath.Join(dir0Path, "emptyDir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectEarlyFailure, - 0o100: expectEarlyFailure, - 0o400: expectedSuccess, - }, - }, - { - desc: "Modify permissions of a FILE in the snapshot directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "file2"), - snapSource: filepath.Join(dir0Path, "dir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringFiles, - 0o100: expectedWhenIgnoringFiles, - 0o400: expectedSuccess, - }, - }, - { - desc: "Modify permissions of a DIRECTORY in the snapshot directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "dir2"), - snapSource: filepath.Join(dir0Path, "dir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringDirs, - 0o100: expectedWhenIgnoringDirs, - 0o400: expectedWhenIgnoringDirs, - }, - }, - { - desc: "Modify permissions of an EMPTY directory in the snapshot directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "emptyDir2"), - snapSource: filepath.Join(dir0Path, "dir1"), - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringDirs, - 0o100: expectedWhenIgnoringDirs, - 0o400: expectedSuccess, - }, - }, - { - desc: "Modify permissions of a FILE in a subdirectory of the snapshot root directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "file2"), - snapSource: dir0Path, - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringFiles, - 0o100: expectedWhenIgnoringFiles, - 0o400: expectedSuccess, - }, - }, - { - desc: "Modify permissions of a DIRECTORY in a subdirectory of the snapshot root directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "dir2"), - snapSource: dir0Path, - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringDirs, - 0o100: expectedWhenIgnoringDirs, - 0o400: expectedWhenIgnoringDirs, - }, - }, - { - desc: "Modify permissions of an EMPTY directory in a subdirectory of the snapshot root directory", - modifyEntry: filepath.Join(dir0Path, "dir1", "emptyDir2"), - snapSource: dir0Path, - expectSuccess: map[os.FileMode]expectedSnapshotResult{ - 0o000: expectedWhenIgnoringDirs, - 0o100: expectedWhenIgnoringDirs, - 0o400: expectedSuccess, - }, - }, - } { - // Reference test conditions outside of range variables to satisfy linter - tcIgnoreDirErr := ignoreDirErr - tcIgnoreFileErr := ignoreFileErr - tname := fmt.Sprintf("%s_ignoreFileErr_%s_ignoreDirErr_%s_failFast_%v", tc.desc, ignoreDirErr, ignoreFileErr, isFailFast) - - t.Run(tname, func(t *testing.T) { + t.Run("ignoreDirErr="+ignoreDirErr, func(t *testing.T) { t.Parallel() - runner := testenv.NewInProcRunner(t) - e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) + testSnapshotFailCases(t, isFailFast, ignoreDirErr, ignoreFileErr, + snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFn) + }) + } + }) + } +} - defer e.RunAndExpectSuccess(t, "repo", "disconnect") +//nolint:cyclop +func testSnapshotFailCases( + t *testing.T, + isFailFast bool, + ignoreDirErr string, + ignoreFileErr string, + snapshotCreateFlags []string, + snapshotCreateEnv map[string]string, + parseSnapshotResultFn func(t *testing.T, stdOut, stderr []string) parsedSnapshotResult, +) { + t.Helper() + + const dir0Path = "dir0" + + var ( + ignoringDirs = ignoreDirErr == "true" + ignoringFiles = ignoreFileErr == "true" + expectedSuccess = expectedSnapshotResult{success: true} + expectEarlyFailure = expectedSnapshotResult{success: false} + + expectedWhenIgnoringFiles = expectedSnapshotResult{ + success: ignoringFiles, + wantErrors: cond(ignoringFiles, 0, 1), + wantIgnoredErrors: cond(ignoringFiles, 1, 0), + wantPartial: !ignoringFiles && isFailFast, + } + + expectedWhenIgnoringDirs = expectedSnapshotResult{ + success: ignoringDirs, + wantErrors: cond(ignoringDirs, 0, 1), + wantIgnoredErrors: cond(ignoringDirs, 1, 0), + wantPartial: !ignoringDirs && isFailFast, + } + ) + + // Test the root dir permissions + cases := []struct { + desc string + modifyEntry string + snapSource string + expectSuccess map[os.FileMode]expectedSnapshotResult + }{ + { + desc: "Modify permissions of the parent dir of the snapshot source (source is a FILE)", + modifyEntry: dir0Path, + snapSource: filepath.Join(dir0Path, "file1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, // --- permission: cannot read directory + 0o100: expectedSuccess, // --X permission: can enter directory and take snapshot of the file (with full permissions) + 0o400: expectEarlyFailure, // R-- permission: can read the file name, but will be unable to snapshot it without entering directory + }, + }, + { + desc: "Modify permissions of the parent dir of the snapshot source (source is a DIRECTORY)", + modifyEntry: dir0Path, + snapSource: filepath.Join(dir0Path, "dir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, + 0o100: expectedSuccess, + 0o400: expectEarlyFailure, + }, + }, + { + desc: "Modify permissions of the parent dir of the snapshot source (source is an EMPTY directory)", + modifyEntry: dir0Path, + snapSource: filepath.Join(dir0Path, "emptyDir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, + 0o100: expectedSuccess, + 0o400: expectEarlyFailure, + }, + }, + { + desc: "Modify permissions of the snapshot source itself (source is a FILE)", + modifyEntry: filepath.Join(dir0Path, "file1"), + snapSource: filepath.Join(dir0Path, "file1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, + 0o100: expectEarlyFailure, + 0o400: expectedSuccess, + }, + }, + { + desc: "Modify permissions of the snapshot source itself (source is a DIRECTORY)", + modifyEntry: filepath.Join(dir0Path, "dir1"), + snapSource: filepath.Join(dir0Path, "dir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, + 0o100: expectEarlyFailure, + 0o400: expectEarlyFailure, + }, + }, + { + desc: "Modify permissions of the snapshot source itself (source is an EMPTY directory)", + modifyEntry: filepath.Join(dir0Path, "emptyDir1"), + snapSource: filepath.Join(dir0Path, "emptyDir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectEarlyFailure, + 0o100: expectEarlyFailure, + 0o400: expectedSuccess, + }, + }, + { + desc: "Modify permissions of a FILE in the snapshot directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "file2"), + snapSource: filepath.Join(dir0Path, "dir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringFiles, + 0o100: expectedWhenIgnoringFiles, + 0o400: expectedSuccess, + }, + }, + { + desc: "Modify permissions of a DIRECTORY in the snapshot directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "dir2"), + snapSource: filepath.Join(dir0Path, "dir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringDirs, + 0o100: expectedWhenIgnoringDirs, + 0o400: expectedWhenIgnoringDirs, + }, + }, + { + desc: "Modify permissions of an EMPTY directory in the snapshot directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "emptyDir2"), + snapSource: filepath.Join(dir0Path, "dir1"), + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringDirs, + 0o100: expectedWhenIgnoringDirs, + 0o400: expectedSuccess, + }, + }, + { + desc: "Modify permissions of a FILE in a subdirectory of the snapshot root directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "file2"), + snapSource: dir0Path, + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringFiles, + 0o100: expectedWhenIgnoringFiles, + 0o400: expectedSuccess, + }, + }, + { + desc: "Modify permissions of a DIRECTORY in a subdirectory of the snapshot root directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "dir2"), + snapSource: dir0Path, + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringDirs, + 0o100: expectedWhenIgnoringDirs, + 0o400: expectedWhenIgnoringDirs, + }, + }, + { + desc: "Modify permissions of an EMPTY directory in a subdirectory of the snapshot root directory", + modifyEntry: filepath.Join(dir0Path, "dir1", "emptyDir2"), + snapSource: dir0Path, + expectSuccess: map[os.FileMode]expectedSnapshotResult{ + 0o000: expectedWhenIgnoringDirs, + 0o100: expectedWhenIgnoringDirs, + 0o400: expectedSuccess, + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + testSnapshotFailCase(t, tc.snapSource, tc.modifyEntry, ignoreDirErr, ignoreFileErr, snapshotCreateFlags, snapshotCreateEnv, tc.expectSuccess, parseSnapshotResultFn) + }) + } +} - e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir) +func testSnapshotFailCase( + t *testing.T, + tcSnapSource string, + tcModifyEntry string, + ignoreDirErr string, + ignoreFileErr string, + snapshotCreateFlags []string, + snapshotCreateEnv map[string]string, + expect map[os.FileMode]expectedSnapshotResult, + parseSnapshotResultFn func(t *testing.T, stdOut, stderr []string) parsedSnapshotResult, +) { + t.Helper() - scratchDir := testutil.TempDirectory(t) + runner := testenv.NewInProcRunner(t) + e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) - snapSource := filepath.Join(scratchDir, tc.snapSource) - modifyEntry := filepath.Join(scratchDir, tc.modifyEntry) + e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir) + defer e.RunAndExpectSuccess(t, "repo", "disconnect") - // Each directory tier will have a file, an empty directory, and the next tier's directory - // (unless at max depth). Naming scheme is [file|dir|emptyDir][tier #]. - createSimplestFileTree(t, 3, 0, scratchDir) + scratchDir := testutil.TempDirectory(t) + snapSource := filepath.Join(scratchDir, tcSnapSource) + modifyEntry := filepath.Join(scratchDir, tcModifyEntry) - restoreDirPrefix := filepath.Join(scratchDir, "target") + // Each directory tier will have a file, an empty directory, and the next tier's directory + // (unless at max depth). Naming scheme is [file|dir|emptyDir][tier #]. + createSimplestFileTree(t, 3, 0, scratchDir) + e.RunAndExpectSuccess(t, "policy", "set", snapSource, "--ignore-dir-errors", ignoreDirErr, "--ignore-file-errors", ignoreFileErr) - e.RunAndExpectSuccess(t, "policy", "set", snapSource, "--ignore-dir-errors", tcIgnoreDirErr, "--ignore-file-errors", tcIgnoreFileErr) - restoreDir := fmt.Sprintf("%s%d_%v_%v", restoreDirPrefix, tcIdx, tcIgnoreDirErr, tcIgnoreFileErr) - testPermissions(t, e, snapSource, modifyEntry, restoreDir, tc.expectSuccess, snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFn) + testPermissions(t, e, snapSource, modifyEntry, expect, snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFn) - e.RunAndExpectSuccess(t, "policy", "remove", snapSource) - }) - } - } - } + e.RunAndExpectSuccess(t, "policy", "remove", snapSource) } -func createSimplestFileTree(t *testing.T, dirDepth, currDepth int, currPath string) { +func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath string) { t.Helper() dirname := fmt.Sprintf("dir%d", currDepth) @@ -304,37 +346,37 @@ func createSimplestFileTree(t *testing.T, dirDepth, currDepth int, currPath stri fileName := fmt.Sprintf("file%d", currDepth+1) filePath := filepath.Join(dirPath, fileName) - testdirtree.MustCreateRandomFile(t, filePath, testdirtree.DirectoryTreeOptions{}, nil) + testdirtree.MustCreateRandomFile(t, filePath, testdirtree.DirectoryTreeOptions{MaxFileSize: 8}, nil) - if dirDepth > currDepth+1 { - createSimplestFileTree(t, dirDepth, currDepth+1, dirPath) + if maxDirDepth > currDepth+1 { + createSimplestFileTree(t, maxDirDepth, currDepth+1, dirPath) } } -// testPermissions iterates over readable and executable permission states, testing -// files and directories (if present). It issues the kopia snapshot command -// against "source" and will test permissions against all entries in "parentDir". -// It returns the number of successful snapshot operations. -// -//nolint:thelper +// testPermissions verifies that a kopia snapshot command returns +// the expected result when the access permissions of modifyEntry +// are set according to the expect map. +// It iterates over the permissions (keys in the expect map), changes +// the permissions for modifyEntry, then issues a kopia snapshot command +// against the modified source and verifies that the command returns +// the corresponding expectedSnapshotResult (value in the expect map). func testPermissions( t *testing.T, e *testenv.CLITest, - source, modifyEntry, restoreDir string, + source, modifyEntry string, expect map[os.FileMode]expectedSnapshotResult, snapshotCreateFlags []string, snapshotCreateEnv map[string]string, parseSnapshotResultFn func(_ *testing.T, _, _ []string) parsedSnapshotResult, -) int { - var numSuccessfulSnapshots int +) { + t.Helper() changeFile, err := os.Stat(modifyEntry) require.NoError(t, err) // Iterate over all permission bit configurations for chmod, expected := range expect { - // run in nested function go be able to do defer - func() { + t.Run("mode:"+chmod.String(), func(t *testing.T) { mode := changeFile.Mode() // restore permissions even if we fail to avoid leaving non-deletable files behind. @@ -362,33 +404,21 @@ func testPermissions( stdOut, stdErr, runErr := e.Run(t, !expected.success, snapshotCreateWithArgs...) - if got, want := (runErr == nil), expected.success; got != want { - t.Fatalf("unexpected success %v, want %v", got, want) - } + require.Equalf(t, expected.success, (runErr == nil), "expected success: %t", expected.success) parsed := parseSnapshotResultFn(t, stdOut, stdErr) if expected.success { - numSuccessfulSnapshots++ - - e.RunAndExpectSuccess(t, "snapshot", "restore", parsed.manifestID, restoreDir) - } - - if got, want := parsed.errorCount, expected.wantErrors; got != want { - t.Fatalf("unexpected number of errors: %v, want %v", got, want) - } + target := filepath.Join(t.TempDir(), "target") - if got, want := parsed.ignoredErrorCount, expected.wantIgnoredErrors; got != want { - t.Fatalf("unexpected number of ignored errors: %v, want %v", got, want) + e.RunAndExpectSuccess(t, "snapshot", "restore", parsed.manifestID, target) } - if got, want := parsed.partial, expected.wantPartial; got != want { - t.Fatalf("unexpected partial %v, want %v (%s)", got, want, stdErr) - } - }() + require.Equal(t, expected.wantErrors, parsed.errorCount, "unexpected number of errors") + require.Equal(t, expected.wantIgnoredErrors, parsed.ignoredErrorCount, "unexpected number of ignored errors") + require.Equal(t, expected.wantPartial, parsed.partial, "unexpected partial") + }) } - - return numSuccessfulSnapshots } var ( @@ -422,16 +452,12 @@ func parseSnapshotResultFromLog(t *testing.T, _, stdErr []string) parsedSnapshot if match := fatalErrorsPattern.FindStringSubmatch(l); match != nil { res.errorCount, err = strconv.Atoi(match[1]) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } if match := ignoredErrorsPattern.FindStringSubmatch(l); match != nil { res.ignoredErrorCount, err = strconv.Atoi(match[1]) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } } From 3ea28b4af382e10725bd8c3cd877c7a00fcf82b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 18 Mar 2026 20:52:31 -0700 Subject: [PATCH 069/156] refactor(testing): nits in TestSnapFail tests (#5228) * rename loop var for clarity * only log on error * rename var for clarity * use t.Cleanup * save environment once for all subtests * get perms for modified entry once * move repo setup to testPermissions * create empty dir so there are 3 entries in dir --- tests/end_to_end_test/snapshot_fail_test.go | 97 +++++++++------------ 1 file changed, 40 insertions(+), 57 deletions(-) diff --git a/tests/end_to_end_test/snapshot_fail_test.go b/tests/end_to_end_test/snapshot_fail_test.go index 7427bbb17aa..d2a1bd53732 100644 --- a/tests/end_to_end_test/snapshot_fail_test.go +++ b/tests/end_to_end_test/snapshot_fail_test.go @@ -290,44 +290,11 @@ func testSnapshotFailCases( for _, tc := range cases { t.Run(tc.desc, func(t *testing.T) { - testSnapshotFailCase(t, tc.snapSource, tc.modifyEntry, ignoreDirErr, ignoreFileErr, snapshotCreateFlags, snapshotCreateEnv, tc.expectSuccess, parseSnapshotResultFn) + testPermissions(t, tc.snapSource, tc.modifyEntry, ignoreDirErr, ignoreFileErr, tc.expectSuccess, snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFn) }) } } -func testSnapshotFailCase( - t *testing.T, - tcSnapSource string, - tcModifyEntry string, - ignoreDirErr string, - ignoreFileErr string, - snapshotCreateFlags []string, - snapshotCreateEnv map[string]string, - expect map[os.FileMode]expectedSnapshotResult, - parseSnapshotResultFn func(t *testing.T, stdOut, stderr []string) parsedSnapshotResult, -) { - t.Helper() - - runner := testenv.NewInProcRunner(t) - e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) - - e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir) - defer e.RunAndExpectSuccess(t, "repo", "disconnect") - - scratchDir := testutil.TempDirectory(t) - snapSource := filepath.Join(scratchDir, tcSnapSource) - modifyEntry := filepath.Join(scratchDir, tcModifyEntry) - - // Each directory tier will have a file, an empty directory, and the next tier's directory - // (unless at max depth). Naming scheme is [file|dir|emptyDir][tier #]. - createSimplestFileTree(t, 3, 0, scratchDir) - e.RunAndExpectSuccess(t, "policy", "set", snapSource, "--ignore-dir-errors", ignoreDirErr, "--ignore-file-errors", ignoreFileErr) - - testPermissions(t, e, snapSource, modifyEntry, expect, snapshotCreateFlags, snapshotCreateEnv, parseSnapshotResultFn) - - e.RunAndExpectSuccess(t, "policy", "remove", snapSource) -} - func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath string) { t.Helper() @@ -336,6 +303,10 @@ func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath s err := os.MkdirAll(dirPath, 0o700) require.NoError(t, err) + if currDepth >= maxDirDepth { + return + } + // Put an empty directory in the new directory emptyDirName := fmt.Sprintf("emptyDir%v", currDepth+1) emptyDirPath := filepath.Join(dirPath, emptyDirName) @@ -348,9 +319,7 @@ func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath s testdirtree.MustCreateRandomFile(t, filePath, testdirtree.DirectoryTreeOptions{MaxFileSize: 8}, nil) - if maxDirDepth > currDepth+1 { - createSimplestFileTree(t, maxDirDepth, currDepth+1, dirPath) - } + createSimplestFileTree(t, maxDirDepth, currDepth+1, dirPath) } // testPermissions verifies that a kopia snapshot command returns @@ -362,8 +331,7 @@ func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath s // the corresponding expectedSnapshotResult (value in the expect map). func testPermissions( t *testing.T, - e *testenv.CLITest, - source, modifyEntry string, + tcSnapSource, tcModifyEntry, ignoreDirErr, ignoreFileErr string, expect map[os.FileMode]expectedSnapshotResult, snapshotCreateFlags []string, snapshotCreateEnv map[string]string, @@ -371,35 +339,50 @@ func testPermissions( ) { t.Helper() + runner := testenv.NewInProcRunner(t) + e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) + + e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir) + defer e.RunAndExpectSuccess(t, "repo", "disconnect") + + scratchDir := testutil.TempDirectory(t) + source := filepath.Join(scratchDir, tcSnapSource) + + // Each directory tier will have a file, an empty directory, and the next tier's directory + // (unless at max depth). Naming scheme is [file|dir|emptyDir][tier #]. + createSimplestFileTree(t, 3, 0, scratchDir) + + e.RunAndExpectSuccess(t, "policy", "set", source, "--ignore-dir-errors", ignoreDirErr, "--ignore-file-errors", ignoreFileErr) + defer e.RunAndExpectSuccess(t, "policy", "remove", source) + + modifyEntry := filepath.Join(scratchDir, tcModifyEntry) + changeFile, err := os.Stat(modifyEntry) require.NoError(t, err) - // Iterate over all permission bit configurations - for chmod, expected := range expect { - t.Run("mode:"+chmod.String(), func(t *testing.T) { - mode := changeFile.Mode() + prevPerms := changeFile.Mode().Perm() + + // save environment so it can be restored after each subtest modifies it + oldEnv := e.Environment + defer func() { e.Environment = oldEnv }() - // restore permissions even if we fail to avoid leaving non-deletable files behind. - defer func() { - t.Logf("restoring file mode on %s to %v", modifyEntry, mode) - require.NoError(t, os.Chmod(modifyEntry, mode.Perm())) - }() + // Iterate over all permission bit configurations + for permissions, expected := range expect { + t.Run("mode:"+permissions.String(), func(t *testing.T) { + t.Cleanup(func() { + // restore permissions even if we fail to avoid leaving non-deletable files behind. + require.NoErrorf(t, os.Chmod(modifyEntry, prevPerms), "restoring file mode on %s to %v", modifyEntry, prevPerms) + }) - t.Logf("Chmod: path: %s, isDir: %v, prevMode: %v, newMode: %v", modifyEntry, changeFile.IsDir(), mode, chmod) + t.Logf("Chmod: path: %s, isDir: %v, prevMode: %v, newMode: %v", modifyEntry, changeFile.IsDir(), prevPerms, permissions) - err := os.Chmod(modifyEntry, chmod) + err := os.Chmod(modifyEntry, permissions) require.NoError(t, err) // set up environment for the child process. - oldEnv := e.Environment - - e.Environment = map[string]string{} - - maps.Copy(e.Environment, oldEnv) + e.Environment = maps.Clone(oldEnv) maps.Copy(e.Environment, snapshotCreateEnv) - defer func() { e.Environment = oldEnv }() - snapshotCreateWithArgs := append([]string{"snapshot", "create", source}, snapshotCreateFlags...) stdOut, stdErr, runErr := e.Run(t, !expected.success, snapshotCreateWithArgs...) From e37382478d37331f89e417923ad6af8e20ba52eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 16:31:34 +0000 Subject: [PATCH 070/156] build(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 (#5229) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.2 to 1.79.3. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.2...v1.79.3) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.79.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f2a75d2108f..5d2d2313ad6 100644 --- a/go.mod +++ b/go.mod @@ -68,7 +68,7 @@ require ( golang.org/x/term v0.41.0 golang.org/x/text v0.35.0 google.golang.org/api v0.272.0 - google.golang.org/grpc v1.79.2 + google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) diff --git a/go.sum b/go.sum index ee8d5f8d31c..333fc430952 100644 --- a/go.sum +++ b/go.sum @@ -365,8 +365,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1: google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= -google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 4fe60817a0d41710fab4a97c33e0c74c2ce2ebce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:24:38 -0700 Subject: [PATCH 071/156] fix(snapshots): inaccessible entry causes parent directory to be skipped (#5217) Revert "feat(snapshots): localfs support for passing options (#5044)" commit c8c461559568e5781471d96222864cac1c3f9d4f. Fix: return `ErrorEntry` for permission denied instead of aborting When iterating a directory, if `lstat` fails with permission denied on an entry, return an `ErrorEntry` instead of an error that stops the entire directory iteration. Previously, a single inaccessible entry, such as, a FUSE/sshfs mount owned by another user, would cause the entire containing directory to fail and be omitted from the snapshot, resulting in data loss. Now, the inaccessible entry is returned as an ErrorEntry which is handled according to the configured error handling policy, allowing iteration to continue and the rest of the directory to be backed up. - Fixes: #5045 Differentiate entry type when ignoring failed entries Fix tests for new behavior, including handling timing-dependent behavior when snapshots --fail-fast --------- Co-authored-by: Geoffrey D. Bennett --- fs/localfs/local_fs.go | 29 +- fs/localfs/local_fs_os.go | 74 +++--- fs/localfs/local_fs_test.go | 281 ++------------------ snapshot/upload/upload.go | 10 +- tests/end_to_end_test/snapshot_fail_test.go | 42 ++- 5 files changed, 115 insertions(+), 321 deletions(-) diff --git a/fs/localfs/local_fs.go b/fs/localfs/local_fs.go index d0ce32376ee..ed89abdbe19 100644 --- a/fs/localfs/local_fs.go +++ b/fs/localfs/local_fs.go @@ -13,16 +13,6 @@ import ( const numEntriesToRead = 100 // number of directory entries to read in one shot -// Options contains configuration options for localfs operations. -type Options struct { - // IgnoreUnreadableDirEntries, when true, causes unreadable directory entries - // to be silently skipped during directory iteration instead of causing errors. - IgnoreUnreadableDirEntries bool -} - -// DefaultOptions stores the default options used by localfs functions. -var DefaultOptions = &Options{} - type filesystemEntry struct { name string size int64 @@ -31,8 +21,7 @@ type filesystemEntry struct { owner fs.OwnerInfo device fs.DeviceInfo - prefix string - options *Options + prefix string } func (e *filesystemEntry) Name() string { @@ -103,7 +92,6 @@ func (fsd *filesystemDirectory) Size() int64 { type fileWithMetadata struct { *os.File - options *Options } func (f *fileWithMetadata) Entry() (fs.Entry, error) { @@ -114,7 +102,7 @@ func (f *fileWithMetadata) Entry() (fs.Entry, error) { basename, prefix := splitDirPrefix(f.Name()) - return newFilesystemFile(newEntry(basename, fi, prefix, f.options)), nil + return newFilesystemFile(newEntry(basename, fi, prefix)), nil } func (fsf *filesystemFile) Open(_ context.Context) (fs.Reader, error) { @@ -123,7 +111,7 @@ func (fsf *filesystemFile) Open(_ context.Context) (fs.Reader, error) { return nil, errors.Wrap(err, "unable to open local file") } - return &fileWithMetadata{File: f, options: fsf.options}, nil + return &fileWithMetadata{f}, nil } func (fsl *filesystemSymlink) Readlink(_ context.Context) (string, error) { @@ -137,7 +125,7 @@ func (fsl *filesystemSymlink) Resolve(_ context.Context) (fs.Entry, error) { return nil, errors.Wrapf(err, "cannot resolve symlink for '%q'", fsl.fullPath()) } - return NewEntryWithOptions(target, fsl.options) + return NewEntry(target) } func (e *filesystemErrorEntry) ErrorInfo() error { @@ -157,15 +145,8 @@ func splitDirPrefix(s string) (basename, prefix string) { } // Directory returns fs.Directory for the specified path. -// It uses DefaultOptions for configuration. func Directory(path string) (fs.Directory, error) { - return DirectoryWithOptions(path, DefaultOptions) -} - -// DirectoryWithOptions returns fs.Directory for the specified path. -// It uses the provided Options for configuration. -func DirectoryWithOptions(path string, options *Options) (fs.Directory, error) { - e, err := NewEntryWithOptions(path, options) + e, err := NewEntry(path) if err != nil { return nil, err } diff --git a/fs/localfs/local_fs_os.go b/fs/localfs/local_fs_os.go index cfc410d1d7a..97b13ea65b3 100644 --- a/fs/localfs/local_fs_os.go +++ b/fs/localfs/local_fs_os.go @@ -18,7 +18,6 @@ const separatorStr = string(filepath.Separator) type filesystemDirectoryIterator struct { dirHandle *os.File childPrefix string - options *Options currentIndex int currentBatch []os.DirEntry @@ -46,7 +45,7 @@ func (it *filesystemDirectoryIterator) Next(_ context.Context) (fs.Entry, error) n := it.currentIndex it.currentIndex++ - e, err := toDirEntryOrNil(it.currentBatch[n], it.childPrefix, it.options) + e, err := toDirEntryOrNil(it.currentBatch[n], it.childPrefix) if err != nil { // stop iteration return nil, err @@ -75,7 +74,7 @@ func (fsd *filesystemDirectory) Iterate(_ context.Context) (fs.DirectoryIterator childPrefix := fullPath + separatorStr - return &filesystemDirectoryIterator{dirHandle: d, childPrefix: childPrefix, options: fsd.options}, nil + return &filesystemDirectoryIterator{dirHandle: d, childPrefix: childPrefix}, nil } func (fsd *filesystemDirectory) Child(_ context.Context, name string) (fs.Entry, error) { @@ -90,39 +89,47 @@ func (fsd *filesystemDirectory) Child(_ context.Context, name string) (fs.Entry, return nil, errors.Wrap(err, "unable to get child") } - return entryFromDirEntry(name, st, fullPath+separatorStr, fsd.options), nil + return entryFromDirEntry(name, st, fullPath+separatorStr), nil } -func toDirEntryOrNil(dirEntry os.DirEntry, prefix string, options *Options) (fs.Entry, error) { +func toDirEntryOrNil(dirEntry os.DirEntry, prefix string) (fs.Entry, error) { n := dirEntry.Name() - fi, err := os.Lstat(prefix + n) - if err != nil { - if os.IsNotExist(err) { - return nil, nil - } - - if options != nil && options.IgnoreUnreadableDirEntries { - return nil, nil + switch fi, err := os.Lstat(prefix + n); { + case err == nil: + return entryFromDirEntry(n, fi, prefix), nil + case os.IsNotExist(err): + return nil, nil + case os.IsPermission(err): + // For permission denied errors, return an ErrorEntry instead of failing + // the entire directory iteration. This allows the upload process to + // handle the error according to the configured error handling policy + // and continue processing other entries in the directory. + // + // This is particularly important for inaccessible mount points such as + // FUSE/sshfs mounts owned by another user. If an error is returned here + // then a single inaccessible entry causes the entire containing directory + // to fail and be omitted from the snapshot, which results in omitting + // other accessible entries in the same directory. + e := filesystemEntry{ + name: TrimShallowSuffix(n), + size: 0, + mtimeNanos: 0, + mode: dirEntry.Type(), + owner: fs.OwnerInfo{}, + device: fs.DeviceInfo{}, + prefix: prefix, } + return newFilesystemErrorEntry(e, err), nil + default: return nil, errors.Wrap(err, "error reading directory") } - - return entryFromDirEntry(n, fi, prefix, options), nil } // NewEntry returns fs.Entry for the specified path, the result will be one of supported entry types: fs.File, fs.Directory, fs.Symlink // or fs.UnsupportedEntry. -// It uses DefaultOptions for configuration. func NewEntry(path string) (fs.Entry, error) { - return NewEntryWithOptions(path, DefaultOptions) -} - -// NewEntryWithOptions returns fs.Entry for the specified path, the result will be one of supported entry types: fs.File, fs.Directory, fs.Symlink -// or fs.UnsupportedEntry. -// It uses the provided Options for configuration. -func NewEntryWithOptions(path string, options *Options) (fs.Entry, error) { path = filepath.Clean(path) fi, err := os.Lstat(path) @@ -143,42 +150,42 @@ func NewEntryWithOptions(path string, options *Options) (fs.Entry, error) { } if path == "/" { - return entryFromDirEntry("/", fi, "", options), nil + return entryFromDirEntry("/", fi, ""), nil } basename, prefix := splitDirPrefix(path) - return entryFromDirEntry(basename, fi, prefix, options), nil + return entryFromDirEntry(basename, fi, prefix), nil } -func entryFromDirEntry(basename string, fi os.FileInfo, prefix string, options *Options) fs.Entry { +func entryFromDirEntry(basename string, fi os.FileInfo, prefix string) fs.Entry { isplaceholder := strings.HasSuffix(basename, ShallowEntrySuffix) maskedmode := fi.Mode() & os.ModeType switch { case maskedmode == os.ModeDir && !isplaceholder: - return newFilesystemDirectory(newEntry(basename, fi, prefix, options)) + return newFilesystemDirectory(newEntry(basename, fi, prefix)) case maskedmode == os.ModeDir && isplaceholder: - return newShallowFilesystemDirectory(newEntry(basename, fi, prefix, options)) + return newShallowFilesystemDirectory(newEntry(basename, fi, prefix)) case maskedmode == os.ModeSymlink && !isplaceholder: - return newFilesystemSymlink(newEntry(basename, fi, prefix, options)) + return newFilesystemSymlink(newEntry(basename, fi, prefix)) case maskedmode == 0 && !isplaceholder: - return newFilesystemFile(newEntry(basename, fi, prefix, options)) + return newFilesystemFile(newEntry(basename, fi, prefix)) case maskedmode == 0 && isplaceholder: - return newShallowFilesystemFile(newEntry(basename, fi, prefix, options)) + return newShallowFilesystemFile(newEntry(basename, fi, prefix)) default: - return newFilesystemErrorEntry(newEntry(basename, fi, prefix, options), fs.ErrUnknown) + return newFilesystemErrorEntry(newEntry(basename, fi, prefix), fs.ErrUnknown) } } var _ os.FileInfo = (*filesystemEntry)(nil) -func newEntry(basename string, fi os.FileInfo, prefix string, options *Options) filesystemEntry { +func newEntry(basename string, fi os.FileInfo, prefix string) filesystemEntry { return filesystemEntry{ TrimShallowSuffix(basename), fi.Size(), @@ -187,6 +194,5 @@ func newEntry(basename string, fi os.FileInfo, prefix string, options *Options) platformSpecificOwnerInfo(fi), platformSpecificDeviceInfo(fi), prefix, - options, } } diff --git a/fs/localfs/local_fs_test.go b/fs/localfs/local_fs_test.go index f44c340d57c..4f412753ac0 100644 --- a/fs/localfs/local_fs_test.go +++ b/fs/localfs/local_fs_test.go @@ -307,276 +307,45 @@ func TestSplitDirPrefix(t *testing.T) { } } -// getOptionsFromEntry extracts the options pointer from an fs.Entry by type assertion. -// Returns nil if the entry doesn't have options or if type assertion fails. -func getOptionsFromEntry(entry fs.Entry) *Options { - switch e := entry.(type) { - case *filesystemDirectory: - return e.options - case *filesystemFile: - return e.options - case *filesystemSymlink: - return e.options - case *filesystemErrorEntry: - return e.options - default: - return nil - } -} - -func TestOptionsPassedToChildEntries(t *testing.T) { - ctx := testlogging.Context(t) - tmp := testutil.TempDirectory(t) - - // Create a test directory structure - require.NoError(t, os.WriteFile(filepath.Join(tmp, "file1.txt"), []byte{1, 2, 3}, 0o777)) - require.NoError(t, os.WriteFile(filepath.Join(tmp, "file2.txt"), []byte{4, 5, 6}, 0o777)) - subdir := filepath.Join(tmp, "subdir") - require.NoError(t, os.Mkdir(subdir, 0o777)) - require.NoError(t, os.WriteFile(filepath.Join(subdir, "subfile.txt"), []byte{7, 8, 9}, 0o777)) - - // Create custom options - customOptions := &Options{ - IgnoreUnreadableDirEntries: true, - } - - // Create directory with custom options - dir, err := DirectoryWithOptions(tmp, customOptions) - require.NoError(t, err) - - // Verify the directory itself has the correct options - dirOptions := getOptionsFromEntry(dir) - require.NotNil(t, dirOptions, "directory should have options") - require.Equal(t, customOptions, dirOptions, "directory should have the same options pointer") - require.True(t, dirOptions.IgnoreUnreadableDirEntries, "directory options should match") - - // Test that options are passed to children via Child() - childFile, err := dir.Child(ctx, "file1.txt") - require.NoError(t, err) - - childOptions := getOptionsFromEntry(childFile) - require.NotNil(t, childOptions, "child file should have options") - require.Equal(t, customOptions, childOptions, "child file should have the same options pointer") - - // Test that options are passed to subdirectories - childDir, err := dir.Child(ctx, "subdir") - require.NoError(t, err) - - subdirOptions := getOptionsFromEntry(childDir) - require.NotNil(t, subdirOptions, "subdirectory should have options") - require.Equal(t, customOptions, subdirOptions, "subdirectory should have the same options pointer") - - // Test that options are passed to nested children - subdirEntry, ok := childDir.(fs.Directory) - require.True(t, ok, "child directory should be a directory") - - nestedFile, err := subdirEntry.Child(ctx, "subfile.txt") - require.NoError(t, err) - - nestedOptions := getOptionsFromEntry(nestedFile) - require.NotNil(t, nestedOptions, "nested file should have options") - require.Equal(t, customOptions, nestedOptions, "nested file should have the same options pointer") -} - -func TestOptionsPassedThroughIteration(t *testing.T) { - ctx := testlogging.Context(t) - tmp := testutil.TempDirectory(t) - - // Create a test directory structure - require.NoError(t, os.WriteFile(filepath.Join(tmp, "file1.txt"), []byte{1, 2, 3}, 0o777)) - require.NoError(t, os.WriteFile(filepath.Join(tmp, "file2.txt"), []byte{4, 5, 6}, 0o777)) - require.NoError(t, os.Mkdir(filepath.Join(tmp, "subdir"), 0o777)) - - // Create custom options - customOptions := &Options{ - IgnoreUnreadableDirEntries: true, - } - - // Create directory with custom options - dir, err := DirectoryWithOptions(tmp, customOptions) - require.NoError(t, err) - - // Iterate through entries and verify all have the same options pointer - iter, err := dir.Iterate(ctx) - require.NoError(t, err) - - defer iter.Close() - - entryCount := 0 - for { - entry, err := iter.Next(ctx) - if err != nil { - t.Fatalf("iteration error: %v", err) - } - - if entry == nil { - break - } - - entryCount++ - entryOptions := getOptionsFromEntry(entry) - require.NotNil(t, entryOptions, "entry %s should have options", entry.Name()) - require.Equal(t, customOptions, entryOptions, "entry %s should have the same options pointer", entry.Name()) +func TestIteratePermissionDenied(t *testing.T) { + if isWindows { + t.Skip("test not applicable on Windows") } - require.Equal(t, 3, entryCount, "should have found 3 entries") -} - -func TestOptionsPassedThroughSymlinkResolution(t *testing.T) { - ctx := testlogging.Context(t) - tmp := testutil.TempDirectory(t) - - // Create a target file - targetFile := filepath.Join(tmp, "target.txt") - require.NoError(t, os.WriteFile(targetFile, []byte{1, 2, 3}, 0o777)) - - // Create a symlink - symlinkPath := filepath.Join(tmp, "link") - require.NoError(t, os.Symlink(targetFile, symlinkPath)) - - // Create custom options - customOptions := &Options{ - IgnoreUnreadableDirEntries: true, + if os.Getuid() == 0 { + t.Skip("test cannot run as root") } - // Create symlink entry with custom options - symlinkEntry, err := NewEntryWithOptions(symlinkPath, customOptions) - require.NoError(t, err) - - // Verify the symlink has the correct options - symlinkOptions := getOptionsFromEntry(symlinkEntry) - require.NotNil(t, symlinkOptions, "symlink should have options") - require.Equal(t, customOptions, symlinkOptions, "symlink should have the same options pointer") - - // Resolve the symlink and verify the resolved entry has the same options - symlink, ok := symlinkEntry.(fs.Symlink) - require.True(t, ok, "entry should be a symlink") - - resolved, err := symlink.Resolve(ctx) - require.NoError(t, err) - - resolvedOptions := getOptionsFromEntry(resolved) - require.NotNil(t, resolvedOptions, "resolved entry should have options") - require.Equal(t, customOptions, resolvedOptions, "resolved entry should have the same options pointer") -} - -func TestOptionsPassedToNewEntry(t *testing.T) { tmp := testutil.TempDirectory(t) - // Create a file - filePath := filepath.Join(tmp, "testfile.txt") - require.NoError(t, os.WriteFile(filePath, []byte{1, 2, 3}, 0o777)) + // Create a directory with files, then remove execute permission. + // Without execute permission, the directory can be listed (read) + // but lstat on children will fail with permission denied. + require.NoError(t, os.WriteFile(filepath.Join(tmp, "a"), []byte{1}, 0o644)) + require.NoError(t, os.WriteFile(filepath.Join(tmp, "b"), []byte{2}, 0o644)) + require.NoError(t, os.WriteFile(filepath.Join(tmp, "c"), []byte{3}, 0o644)) - // Create custom options - customOptions := &Options{ - IgnoreUnreadableDirEntries: true, - } + require.NoError(t, os.Chmod(tmp, 0o644)) + t.Cleanup(func() { os.Chmod(tmp, 0o755) }) - // Create entry with custom options - entry, err := NewEntryWithOptions(filePath, customOptions) + dir, err := Directory(tmp) require.NoError(t, err) - // Verify the entry has the correct options - entryOptions := getOptionsFromEntry(entry) - require.NotNil(t, entryOptions, "entry should have options") - require.Equal(t, customOptions, entryOptions, "entry should have the same options pointer") -} - -func TestOptionsPassedToNestedDirectories(t *testing.T) { ctx := testlogging.Context(t) - tmp := testutil.TempDirectory(t) - // Create nested directory structure - level1 := filepath.Join(tmp, "level1") - level2 := filepath.Join(level1, "level2") - level3 := filepath.Join(level2, "level3") - - require.NoError(t, os.MkdirAll(level3, 0o777)) - require.NoError(t, os.WriteFile(filepath.Join(level3, "file.txt"), []byte{1, 2, 3}, 0o777)) - - // Create custom options - customOptions := &Options{ - IgnoreUnreadableDirEntries: true, - } - - // Create root directory with custom options - rootDir, err := DirectoryWithOptions(tmp, customOptions) - require.NoError(t, err) - - // Navigate through nested directories and verify options are passed - currentDir := rootDir - levels := []string{"level1", "level2", "level3"} - - for _, level := range levels { - child, err := currentDir.Child(ctx, level) - require.NoError(t, err) + var entries []fs.Entry - childOptions := getOptionsFromEntry(child) - require.NotNil(t, childOptions, "directory %s should have options", level) - require.Equal(t, customOptions, childOptions, "directory %s should have the same options pointer", level) + err = fs.IterateEntries(ctx, dir, func(ctx context.Context, e fs.Entry) error { + entries = append(entries, e) + return nil + }) - var ok bool + require.NoError(t, err, "iteration should complete without error") + require.Len(t, entries, 3, "should have 3 entries") - currentDir, ok = child.(fs.Directory) - require.True(t, ok, "child should be a directory") + for _, e := range entries { + ee, ok := e.(fs.ErrorEntry) + require.True(t, ok, "entry should be ErrorEntry") + require.True(t, os.IsPermission(ee.ErrorInfo()), "error should be permission denied") } - - // Verify the file in the deepest directory has the same options - file, err := currentDir.Child(ctx, "file.txt") - require.NoError(t, err) - - fileOptions := getOptionsFromEntry(file) - require.NotNil(t, fileOptions, "file should have options") - require.Equal(t, customOptions, fileOptions, "file should have the same options pointer") -} - -func TestDefaultOptionsUsedByDefault(t *testing.T) { - tmp := testutil.TempDirectory(t) - - // Create a file - filePath := filepath.Join(tmp, "testfile.txt") - require.NoError(t, os.WriteFile(filePath, []byte{1, 2, 3}, 0o777)) - - // Use default NewEntry (should use DefaultOptions) - entry, err := NewEntry(filePath) - require.NoError(t, err) - - // Verify the entry has DefaultOptions - entryOptions := getOptionsFromEntry(entry) - require.NotNil(t, entryOptions, "entry should have options") - require.Equal(t, DefaultOptions, entryOptions, "entry should have DefaultOptions pointer") -} - -func TestDifferentOptionsInstances(t *testing.T) { - tmp := testutil.TempDirectory(t) - - // Create two different files - filePath1 := filepath.Join(tmp, "testfile1.txt") - filePath2 := filepath.Join(tmp, "testfile2.txt") - - require.NoError(t, os.WriteFile(filePath1, []byte{1, 2, 3}, 0o777)) - require.NoError(t, os.WriteFile(filePath2, []byte{4, 5, 6}, 0o777)) - - // Create two different options instances with same values - options1 := &Options{IgnoreUnreadableDirEntries: true} - options2 := &Options{IgnoreUnreadableDirEntries: false} - - // Create entries with different options instances - entry1, err := NewEntryWithOptions(filePath1, options1) - require.NoError(t, err) - - entry2, err := NewEntryWithOptions(filePath2, options2) - require.NoError(t, err) - - // Verify they have the correct options pointers - entry1Options := getOptionsFromEntry(entry1) - entry2Options := getOptionsFromEntry(entry2) - - require.NotNil(t, entry1Options) - require.NotNil(t, entry2Options) - require.Equal(t, options1, entry1Options, "entry1 should have options1 pointer") - require.Equal(t, options2, entry2Options, "entry2 should have options2 pointer") - require.NotEqual(t, entry1Options, entry2Options, "entries should have different options pointers") - require.True(t, entry1Options.IgnoreUnreadableDirEntries, "entry1 options should have IgnoreUnreadableDirEntries=true") - require.False(t, entry2Options.IgnoreUnreadableDirEntries, "entry2 options should have IgnoreUnreadableDirEntries=false") } diff --git a/snapshot/upload/upload.go b/snapshot/upload/upload.go index 63b8d03152e..a9be1353339 100644 --- a/snapshot/upload/upload.go +++ b/snapshot/upload/upload.go @@ -831,7 +831,7 @@ func (u *Uploader) processDirectoryEntries( return nil } -//nolint:funlen +//nolint:funlen,gocyclo func (u *Uploader) processSingle( ctx context.Context, entry fs.Entry, @@ -938,8 +938,14 @@ func (u *Uploader) processSingle( prefix = "unknown entry" } else { - isIgnoredError = policyTree.EffectivePolicy().ErrorHandlingPolicy.IgnoreFileErrors.OrDefault(false) prefix = "error" + ehp := policyTree.EffectivePolicy().ErrorHandlingPolicy + + if entry.IsDir() { + isIgnoredError = ehp.IgnoreDirectoryErrors.OrDefault(false) + } else { + isIgnoredError = ehp.IgnoreFileErrors.OrDefault(false) + } } return u.processEntryUploadResult(ctx, nil, entry.ErrorInfo(), entryRelativePath, parentDirBuilder, diff --git a/tests/end_to_end_test/snapshot_fail_test.go b/tests/end_to_end_test/snapshot_fail_test.go index d2a1bd53732..2c2fbd47f8e 100644 --- a/tests/end_to_end_test/snapshot_fail_test.go +++ b/tests/end_to_end_test/snapshot_fail_test.go @@ -157,6 +157,13 @@ func testSnapshotFailCases( wantIgnoredErrors: cond(ignoringDirs, 1, 0), wantPartial: !ignoringDirs && isFailFast, } + + expectedWhenUnreadableDirEntries = expectedSnapshotResult{ + success: ignoringFiles && ignoringDirs, + wantErrors: fatalErrorCount(ignoringDirs, ignoringFiles), + wantIgnoredErrors: ignoredErrorCount(ignoringDirs, ignoringFiles), + wantPartial: !(ignoringFiles && ignoringDirs) && isFailFast, //nolint:staticcheck + } ) // Test the root dir permissions @@ -213,7 +220,7 @@ func testSnapshotFailCases( expectSuccess: map[os.FileMode]expectedSnapshotResult{ 0o000: expectEarlyFailure, 0o100: expectEarlyFailure, - 0o400: expectEarlyFailure, + 0o400: expectedWhenUnreadableDirEntries, }, }, { @@ -243,7 +250,7 @@ func testSnapshotFailCases( expectSuccess: map[os.FileMode]expectedSnapshotResult{ 0o000: expectedWhenIgnoringDirs, 0o100: expectedWhenIgnoringDirs, - 0o400: expectedWhenIgnoringDirs, + 0o400: expectedWhenUnreadableDirEntries, }, }, { @@ -273,7 +280,7 @@ func testSnapshotFailCases( expectSuccess: map[os.FileMode]expectedSnapshotResult{ 0o000: expectedWhenIgnoringDirs, 0o100: expectedWhenIgnoringDirs, - 0o400: expectedWhenIgnoringDirs, + 0o400: expectedWhenUnreadableDirEntries, }, }, { @@ -295,6 +302,24 @@ func testSnapshotFailCases( } } +func ignoredErrorCount(ignoringDirErrs, ignoringFileErrs bool) int { + var errCount int + + if ignoringDirErrs { + errCount += 2 + } + + if ignoringFileErrs { + errCount += 1 + } + + return errCount +} + +func fatalErrorCount(ignoringDirErrs, ignoringFileErrs bool) int { + return 3 - ignoredErrorCount(ignoringDirErrs, ignoringFileErrs) +} + func createSimplestFileTree(t *testing.T, maxDirDepth, currDepth int, currPath string) { t.Helper() @@ -397,9 +422,16 @@ func testPermissions( e.RunAndExpectSuccess(t, "snapshot", "restore", parsed.manifestID, target) } - require.Equal(t, expected.wantErrors, parsed.errorCount, "unexpected number of errors") - require.Equal(t, expected.wantIgnoredErrors, parsed.ignoredErrorCount, "unexpected number of ignored errors") require.Equal(t, expected.wantPartial, parsed.partial, "unexpected partial") + + if expected.wantPartial { + // for partial snapshots, only check that at least one fatal error was recorded + require.Positive(t, parsed.errorCount, "expected at least one fatal error") + } else { + // the total number of errors can only be validated for non-partial snapshots + require.Equal(t, expected.wantErrors, parsed.errorCount, "unexpected number of errors") + require.Equal(t, expected.wantIgnoredErrors, parsed.ignoredErrorCount, "unexpected number of ignored errors") + } }) } } From 66aa378203d1fc3c7c55035cf69f2ce83e4f14ae Mon Sep 17 00:00:00 2001 From: aujkb <72079962+aujkb@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:52:34 +1100 Subject: [PATCH 072/156] Fix typo in backup validity and consistency section (#5215) Corrected a typo in the consistency check explanation. --- site/content/docs/Features/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/docs/Features/_index.md b/site/content/docs/Features/_index.md index 97c5412863d..67ea20c5b83 100644 --- a/site/content/docs/Features/_index.md +++ b/site/content/docs/Features/_index.md @@ -125,7 +125,7 @@ Kopia supports [Reed-Solomon error correction algorithm](../advanced/ecc/) to he ### Verifying Backup Validity and Consistency -Backing up data is great, but you also need to be able to restore that data when (if) the time arises. Kopia has built-in functions that enable you to verify the consistency/validity of your backed up files. You can run these consistency checks are frequently as you like (e.g., once a month, once a year, etc.). Read the [repository consistency](../advanced/consistency/) help docs for more information. +Backing up data is great, but you also need to be able to restore that data when (if) the time arises. Kopia has built-in functions that enable you to verify the consistency/validity of your backed up files. You can run these consistency checks as frequently as you like (e.g., once a month, once a year, etc.). Read the [repository consistency](../advanced/consistency/) help docs for more information. ### Recovering Backed Up Data When There is Data Loss From df247ecf920967a3fc5fed72daf1b4e5e6048064 Mon Sep 17 00:00:00 2001 From: Baixiaochun <182930459+Bingtagui404@users.noreply.github.com> Date: Sat, 21 Mar 2026 08:05:51 +0800 Subject: [PATCH 073/156] fix(snapshots): ErrorEntry policy resolution to use child policy (#5234) Fix ErrorEntry child policy resolution, includes tests. - Fixes kopia/kopia#5232 --- internal/mockfs/mockfs.go | 20 +++++- snapshot/upload/upload.go | 9 ++- snapshot/upload/upload_test.go | 111 +++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 3 deletions(-) diff --git a/internal/mockfs/mockfs.go b/internal/mockfs/mockfs.go index 1a485201fe2..7b8459a983c 100644 --- a/internal/mockfs/mockfs.go +++ b/internal/mockfs/mockfs.go @@ -204,7 +204,7 @@ func (imd *Directory) AddDir(name string, permissions os.FileMode) *Directory { return subdir } -// AddErrorEntry adds a fake directory with a given name and permissions. +// AddErrorEntry adds a fake directory-typed error entry with a given name and permissions. func (imd *Directory) AddErrorEntry(name string, permissions os.FileMode, err error) *ErrorEntry { imd, name = imd.resolveSubdir(name) @@ -222,6 +222,24 @@ func (imd *Directory) AddErrorEntry(name string, permissions os.FileMode, err er return ee } +// AddFileErrorEntry adds a fake file-typed error entry with a given name and permissions. +func (imd *Directory) AddFileErrorEntry(name string, permissions os.FileMode, err error) *ErrorEntry { + imd, name = imd.resolveSubdir(name) + + ee := &ErrorEntry{ + entry: entry{ + name: name, + mode: permissions &^ os.ModeDir, + modTime: DefaultModTime, + }, + err: err, + } + + imd.addChild(ee) + + return ee +} + // AddDirDevice adds a fake directory with a given name and permissions. func (imd *Directory) AddDirDevice(name string, permissions os.FileMode, deviceInfo fs.DeviceInfo) *Directory { imd, name = imd.resolveSubdir(name) diff --git a/snapshot/upload/upload.go b/snapshot/upload/upload.go index a9be1353339..da18c0f8bd3 100644 --- a/snapshot/upload/upload.go +++ b/snapshot/upload/upload.go @@ -928,8 +928,13 @@ func (u *Uploader) processSingle( prefix string ) + // Use the child policy for the specific entry path, not the parent directory policy. + // This ensures per-entry error handling rules are respected, consistent with how + // directory processing derives childTree via policyTree.Child(). + childPolicy := policyTree.Child(entry.Name()).EffectivePolicy() + if errors.Is(entry.ErrorInfo(), fs.ErrUnknown) { - isIgnoredError = policyTree.EffectivePolicy().ErrorHandlingPolicy.IgnoreUnknownTypes.OrDefault(true) + isIgnoredError = childPolicy.ErrorHandlingPolicy.IgnoreUnknownTypes.OrDefault(true) // If unknown types are configured to be ignored, skip them completely without any error reporting if isIgnoredError { @@ -939,7 +944,7 @@ func (u *Uploader) processSingle( prefix = "unknown entry" } else { prefix = "error" - ehp := policyTree.EffectivePolicy().ErrorHandlingPolicy + ehp := childPolicy.ErrorHandlingPolicy if entry.IsDir() { isIgnoredError = ehp.IgnoreDirectoryErrors.OrDefault(false) diff --git a/snapshot/upload/upload_test.go b/snapshot/upload/upload_test.go index 5e1491b3b49..fdee296b1d6 100644 --- a/snapshot/upload/upload_test.go +++ b/snapshot/upload/upload_test.go @@ -520,6 +520,117 @@ func TestUpload_ErrorEntries(t *testing.T) { } } +func TestUpload_ErrorEntryChildPolicy(t *testing.T) { + t.Parallel() + + ctx := testlogging.Context(t) + th := newUploadTestHarness(ctx, t) + + t.Cleanup(th.cleanup) + + // Add a dir-typed error entry, a file-typed error entry, and an unknown-typed error entry under d1. + th.sourceDir.Subdir("d1").AddErrorEntry("dir-err", 0, errors.New("dir-error")) + th.sourceDir.Subdir("d1").AddFileErrorEntry("file-err", 0, errors.New("file-error")) + th.sourceDir.Subdir("d1").AddErrorEntry("unknown-err", os.ModeIrregular, fs.ErrUnknown) + + trueValue := policy.OptionalBool(true) + falseValue := policy.OptionalBool(false) + + cases := []struct { + desc string + defined map[string]*policy.Policy + defaultPolicy *policy.Policy + wantFatalErrors int + wantIgnoredErrors int + wantErrors entryPathToError + }{ + { + desc: "child policy ignores dir errors only", + defined: map[string]*policy.Policy{ + "./d1/dir-err": { + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreDirectoryErrors: &trueValue, + IgnoreFileErrors: &falseValue, + }, + }, + }, + defaultPolicy: &policy.Policy{ + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreDirectoryErrors: &falseValue, + IgnoreFileErrors: &falseValue, + }, + }, + wantFatalErrors: 1, // file-err is fatal (uses default policy) + wantIgnoredErrors: 1, // dir-err is ignored (uses child policy) + // unknown-err is silently skipped (IgnoreUnknownTypes defaults to true) + wantErrors: entryPathToError{ + "d1/dir-err": errors.New("dir-error"), + "d1/file-err": errors.New("file-error"), + }, + }, + { + desc: "child policy ignores file errors only", + defined: map[string]*policy.Policy{ + "./d1/file-err": { + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreDirectoryErrors: &falseValue, + IgnoreFileErrors: &trueValue, + }, + }, + }, + defaultPolicy: &policy.Policy{ + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreDirectoryErrors: &falseValue, + IgnoreFileErrors: &falseValue, + }, + }, + wantFatalErrors: 1, // dir-err is fatal (uses default policy) + wantIgnoredErrors: 1, // file-err is ignored (uses child policy) + // unknown-err is silently skipped (IgnoreUnknownTypes defaults to true) + wantErrors: entryPathToError{ + "d1/dir-err": errors.New("dir-error"), + "d1/file-err": errors.New("file-error"), + }, + }, + { + desc: "child policy disables unknown type ignore", + defined: map[string]*policy.Policy{ + "./d1/unknown-err": { + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreUnknownTypes: &falseValue, + }, + }, + }, + defaultPolicy: &policy.Policy{ + ErrorHandlingPolicy: policy.ErrorHandlingPolicy{ + IgnoreDirectoryErrors: &trueValue, + IgnoreFileErrors: &trueValue, + }, + }, + wantFatalErrors: 1, // unknown-err is fatal (child policy overrides default) + wantIgnoredErrors: 2, // dir-err and file-err are ignored (default policy) + wantErrors: entryPathToError{ + "d1/dir-err": errors.New("dir-error"), + "d1/file-err": errors.New("file-error"), + "d1/unknown-err": fs.ErrUnknown, + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + u := NewUploader(th.repo) + + policyTree := policy.BuildTree(tc.defined, tc.defaultPolicy) + + man, err := u.Upload(ctx, th.sourceDir, policyTree, snapshot.SourceInfo{}) + require.NoError(t, err) + + verifyErrors(t, man, tc.wantFatalErrors, tc.wantIgnoredErrors, tc.wantErrors) + }) + } +} + func verifyErrors(t *testing.T, man *snapshot.Manifest, wantFatalErrors, wantIgnoredErrors int, wantErrors entryPathToError) { t.Helper() From ad69cd2580250486095be751feeea4584aa3bd7e Mon Sep 17 00:00:00 2001 From: lif <1835304752@qq.com> Date: Sat, 21 Mar 2026 11:10:44 +0800 Subject: [PATCH 074/156] fix(general): do not included concatenated entries in log (#5231) Truncate concatenation debug log to avoid 1M+ char output Log entry count and total length instead of dumping the entire concatenatedEntries slice, which could produce 1M+ character JSON in debug logs. - Fixes #3093 Signed-off-by: majiayu000 <1835304752@qq.com> --- repo/object/object_manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo/object/object_manager.go b/repo/object/object_manager.go index d04b4acb3b6..4f4ec2121ad 100644 --- a/repo/object/object_manager.go +++ b/repo/object/object_manager.go @@ -129,7 +129,7 @@ func (om *Manager) Concatenate(ctx context.Context, objectIDs []ID, metadataComp } } - log(ctx).Debugf("concatenated: %v total: %v", concatenatedEntries, totalLength) + log(ctx).Debugf("concatenated %d entries, total object length: %d", len(concatenatedEntries), totalLength) w := om.NewWriter(ctx, WriterOptions{ Prefix: indirectContentPrefix, From d1bc68ef61b0b8fa245eef806f05ad332c43c011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:52:29 -0700 Subject: [PATCH 075/156] refactor(general): cleanup nits (#5236) Cleanup nits: - get error handling policy upfront and improve readability in uploader - update error message - update field documentation and update flag description - remove unused function - const `isWindows` and remove redundant condition check - add `getEnvVarBool` helper - refactor common helper for mockfs.AddError* functions, and add mockfs.AddErrorEntry wrappers for clarity. - removed list of skipped tests from gotestsum summary --- Makefile | 2 +- cli/command_repository_set_parameters.go | 4 +-- cli/command_repository_set_parameters_test.go | 2 +- cli/command_repository_status.go | 2 +- fs/localfs/local_fs_windows.go | 2 +- internal/epoch/epoch_manager.go | 9 ++---- internal/epoch/epoch_manager_test.go | 2 +- internal/mockfs/mockfs.go | 30 ++++++++----------- internal/ospath/ospath_windows.go | 3 +- internal/testutil/tmpdir.go | 11 +++++-- repo/blob/azure/azure_storage.go | 2 +- snapshot/upload/upload.go | 9 +++--- snapshot/upload/upload_test.go | 14 ++++----- 13 files changed, 44 insertions(+), 48 deletions(-) diff --git a/Makefile b/Makefile index ea3f485c111..92728dc4aa1 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ endif endif GOTESTSUM_FORMAT=pkgname-and-test-fails -GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --hide-summary=output +GOTESTSUM_FLAGS=--format=$(GOTESTSUM_FORMAT) --hide-summary=output,skipped GO_TEST?=$(gotestsum) $(GOTESTSUM_FLAGS) -- LINTER_DEADLINE=1200s diff --git a/cli/command_repository_set_parameters.go b/cli/command_repository_set_parameters.go index 5baf3399d35..df61c37a499 100644 --- a/cli/command_repository_set_parameters.go +++ b/cli/command_repository_set_parameters.go @@ -54,7 +54,7 @@ func (c *commandRepositorySetParameters) setup(svc appServices, parent commandPa cmd.Flag("epoch-advance-on-count", "Advance epoch if the number of indexes exceeds given threshold").IntVar(&c.epochAdvanceOnCount) cmd.Flag("epoch-advance-on-size-mb", "Advance epoch if the total size of indexes exceeds given threshold").Int64Var(&c.epochAdvanceOnSizeMB) cmd.Flag("epoch-delete-parallelism", "Epoch delete parallelism").IntVar(&c.epochDeleteParallelism) - cmd.Flag("epoch-checkpoint-frequency", "Checkpoint frequency").IntVar(&c.epochCheckpointFrequency) + cmd.Flag("epoch-checkpoint-frequency", "Epoch range-compaction period").PlaceHolder("number-of-epochs").IntVar(&c.epochCheckpointFrequency) if svc.enableTestOnlyFlags() { cmd.Flag("add-required-feature", "Add required feature which must be present to open the repository").Hidden().StringVar(&c.addRequiredFeature) @@ -212,7 +212,7 @@ func (c *commandRepositorySetParameters) run(ctx context.Context, rep repo.Direc setIntParameter(ctx, c.epochAdvanceOnCount, "epoch advance on count", &mp.EpochParameters.EpochAdvanceOnCountThreshold, &anyChange) setSizeMBParameter(ctx, c.epochAdvanceOnSizeMB, "epoch advance on total size", &mp.EpochParameters.EpochAdvanceOnTotalSizeBytesThreshold, &anyChange) setIntParameter(ctx, c.epochDeleteParallelism, "epoch delete parallelism", &mp.EpochParameters.DeleteParallelism, &anyChange) - setIntParameter(ctx, c.epochCheckpointFrequency, "epoch checkpoint frequency", &mp.EpochParameters.FullCheckpointFrequency, &anyChange) + setIntParameter(ctx, c.epochCheckpointFrequency, "epoch range-compaction period", &mp.EpochParameters.FullCheckpointFrequency, &anyChange) requiredFeatures = c.addRemoveUpdateRequiredFeatures(requiredFeatures, &anyChange) diff --git a/cli/command_repository_set_parameters_test.go b/cli/command_repository_set_parameters_test.go index 68dfa5ae259..425b8bbc0b0 100644 --- a/cli/command_repository_set_parameters_test.go +++ b/cli/command_repository_set_parameters_test.go @@ -184,7 +184,7 @@ func (s *formatSpecificTestSuite) TestRepositorySetParametersUpgrade(t *testing. require.Contains(t, out, "Format version: 3") require.Contains(t, out, "Epoch cleanup margin: 23h0m0s") require.Contains(t, out, "Epoch advance on: 22 blobs or 80.7 MB, minimum 3h0m0s") - require.Contains(t, out, "Epoch checkpoint every: 9 epochs") + require.Contains(t, out, "Epoch range-compaction every: 9 epochs") env.RunAndExpectSuccess(t, "index", "epoch", "list") } diff --git a/cli/command_repository_status.go b/cli/command_repository_status.go index 7eb2cf22212..a7a813f3db1 100644 --- a/cli/command_repository_status.go +++ b/cli/command_repository_status.go @@ -211,7 +211,7 @@ func (c *commandRepositoryStatus) run(ctx context.Context, rep repo.Repository) c.out.printStdout("Epoch refresh frequency: %v\n", mp.EpochParameters.EpochRefreshFrequency) c.out.printStdout("Epoch advance on: %v blobs or %v, minimum %v\n", mp.EpochParameters.EpochAdvanceOnCountThreshold, units.BytesString(mp.EpochParameters.EpochAdvanceOnTotalSizeBytesThreshold), mp.EpochParameters.MinEpochDuration) c.out.printStdout("Epoch cleanup margin: %v\n", mp.EpochParameters.CleanupSafetyMargin) - c.out.printStdout("Epoch checkpoint every: %v epochs\n", mp.EpochParameters.FullCheckpointFrequency) + c.out.printStdout("Epoch range-compaction every: %v epochs\n", mp.EpochParameters.FullCheckpointFrequency) } else { c.out.printStdout("Epoch Manager: disabled\n") } diff --git a/fs/localfs/local_fs_windows.go b/fs/localfs/local_fs_windows.go index 3553075dae7..742aafc3793 100644 --- a/fs/localfs/local_fs_windows.go +++ b/fs/localfs/local_fs_windows.go @@ -8,7 +8,7 @@ import ( "github.com/kopia/kopia/fs" ) -var isWindows = runtime.GOOS == "windows" +const isWindows = runtime.GOOS == "windows" func platformSpecificOwnerInfo(_ os.FileInfo) fs.OwnerInfo { return fs.OwnerInfo{} diff --git a/internal/epoch/epoch_manager.go b/internal/epoch/epoch_manager.go index f6149875413..7cbf6674331 100644 --- a/internal/epoch/epoch_manager.go +++ b/internal/epoch/epoch_manager.go @@ -51,7 +51,7 @@ type Parameters struct { // how frequently each client will list blobs to determine the current epoch. EpochRefreshFrequency time.Duration `json:"EpochRefreshFrequency"` - // number of epochs between full checkpoints. + // number of epochs between range compactions. FullCheckpointFrequency int `json:"FullCheckpointFrequency"` // do not delete uncompacted blobs if the corresponding compacted blob age is less than this. @@ -80,11 +80,6 @@ func (p *Parameters) GetEpochRefreshFrequency() time.Duration { return p.EpochRefreshFrequency } -// GetEpochFullCheckpointFrequency returns the number of epochs between full checkpoints. -func (p *Parameters) GetEpochFullCheckpointFrequency() int { - return p.FullCheckpointFrequency -} - // GetEpochCleanupSafetyMargin returns safety margin to prevent uncompacted blobs from being deleted if the corresponding compacted blob age is less than this. func (p *Parameters) GetEpochCleanupSafetyMargin() time.Duration { return p.CleanupSafetyMargin @@ -127,7 +122,7 @@ func (p *Parameters) Validate() error { } if p.FullCheckpointFrequency <= 0 { - return errors.New("invalid epoch checkpoint frequency") + return errors.New("invalid epoch range compaction period") } if p.CleanupSafetyMargin < p.EpochRefreshFrequency*3 { diff --git a/internal/epoch/epoch_manager_test.go b/internal/epoch/epoch_manager_test.go index c1a83aff791..098205ea558 100644 --- a/internal/epoch/epoch_manager_test.go +++ b/internal/epoch/epoch_manager_test.go @@ -1313,7 +1313,7 @@ func TestValidateParameters(t *testing.T) { MinEpochDuration: 1 * time.Hour, EpochRefreshFrequency: 10 * time.Minute, FullCheckpointFrequency: -1, - }, "invalid epoch checkpoint frequency", + }, "invalid epoch range compaction period", }, { Parameters{ diff --git a/internal/mockfs/mockfs.go b/internal/mockfs/mockfs.go index 7b8459a983c..c23405c4401 100644 --- a/internal/mockfs/mockfs.go +++ b/internal/mockfs/mockfs.go @@ -204,32 +204,28 @@ func (imd *Directory) AddDir(name string, permissions os.FileMode) *Directory { return subdir } -// AddErrorEntry adds a fake directory-typed error entry with a given name and permissions. -func (imd *Directory) AddErrorEntry(name string, permissions os.FileMode, err error) *ErrorEntry { - imd, name = imd.resolveSubdir(name) - - ee := &ErrorEntry{ - entry: entry{ - name: name, - mode: permissions | os.ModeDir, - modTime: DefaultModTime, - }, - err: err, - } +// AddErrorEntryDir adds a fake directory-typed error entry with a given name and permissions. +func (imd *Directory) AddErrorEntryDir(name string, permissions os.FileMode, err error) *ErrorEntry { + return imd.addErrorEntry(name, permissions|os.ModeDir, err) +} - imd.addChild(ee) +// AddErrorEntryFile adds a fake file-typed error entry with a given name and permissions. +func (imd *Directory) AddErrorEntryFile(name string, permissions os.FileMode, err error) *ErrorEntry { + return imd.addErrorEntry(name, permissions&^os.ModeDir, err) +} - return ee +// AddErrorEntryIrregular adds a fake irregular-typed error entry with a given name and permissions. +func (imd *Directory) AddErrorEntryIrregular(name string, permissions os.FileMode, err error) *ErrorEntry { + return imd.addErrorEntry(name, permissions|os.ModeIrregular, err) } -// AddFileErrorEntry adds a fake file-typed error entry with a given name and permissions. -func (imd *Directory) AddFileErrorEntry(name string, permissions os.FileMode, err error) *ErrorEntry { +func (imd *Directory) addErrorEntry(name string, permissions os.FileMode, err error) *ErrorEntry { imd, name = imd.resolveSubdir(name) ee := &ErrorEntry{ entry: entry{ name: name, - mode: permissions &^ os.ModeDir, + mode: permissions, modTime: DefaultModTime, }, err: err, diff --git a/internal/ospath/ospath_windows.go b/internal/ospath/ospath_windows.go index 15c64d1b81a..be20d9c372b 100644 --- a/internal/ospath/ospath_windows.go +++ b/internal/ospath/ospath_windows.go @@ -2,7 +2,6 @@ package ospath import ( "os" - "runtime" "strings" ) @@ -25,7 +24,7 @@ func SafeLongFilename(fname string) string { // Intentionally using less than MAX_PATH in Windows to allow some suffixes. const maxPathLength = 240 - if runtime.GOOS != "windows" || len(fname) < maxPathLength || + if len(fname) < maxPathLength || fname[:4] == `\\?\` || !IsAbs(fname) { return fname } diff --git a/internal/testutil/tmpdir.go b/internal/testutil/tmpdir.go index 1d39e1332af..0ab7919749d 100644 --- a/internal/testutil/tmpdir.go +++ b/internal/testutil/tmpdir.go @@ -5,6 +5,7 @@ import ( "math/rand" "os" "path/filepath" + "strconv" "strings" "testing" "time" @@ -90,6 +91,12 @@ func TempDirectoryShort(tb testing.TB) string { return d } +func getEnvVarBool(name string) bool { + s, err := strconv.ParseBool(os.Getenv(name)) + + return err == nil && s +} + // TempLogDirectory returns a temporary directory used for storing logs. // If KOPIA_LOGS_DIR is provided. func TempLogDirectory(tb testing.TB) string { @@ -109,12 +116,12 @@ func TempLogDirectory(tb testing.TB) string { require.NoError(tb, os.MkdirAll(logsDir, logsDirPermissions)) tb.Cleanup(func() { - if os.Getenv("KOPIA_KEEP_LOGS") != "" { + if getEnvVarBool("KOPIA_KEEP_LOGS") { tb.Logf("logs preserved in %v", logsDir) return } - if tb.Failed() && os.Getenv("KOPIA_DISABLE_LOG_DUMP_ON_FAILURE") == "" { + if tb.Failed() && !getEnvVarBool("KOPIA_DISABLE_LOG_DUMP_ON_FAILURE") { dumpLogs(tb, logsDir) } diff --git a/repo/blob/azure/azure_storage.go b/repo/blob/azure/azure_storage.go index e82fef3656a..8092cac720b 100644 --- a/repo/blob/azure/azure_storage.go +++ b/repo/blob/azure/azure_storage.go @@ -477,7 +477,7 @@ func getAZService(opt *Options, storageHostname string) (*azblob.Client, error) service, serviceErr = azblob.NewClient(fmt.Sprintf("%s://%s/", protocol, storageHostname), cred, clientOptions) default: - return nil, errors.New("one of the storage key, SAS token, client secret, client certificate, or Azure Federated Token must be provided") + return nil, errors.New("one of the storage key, SAS token, client secret, client certificate, or Azure Federated Token file must be provided") } return service, errors.Wrap(serviceErr, "unable to create azure client") diff --git a/snapshot/upload/upload.go b/snapshot/upload/upload.go index da18c0f8bd3..c6975b53766 100644 --- a/snapshot/upload/upload.go +++ b/snapshot/upload/upload.go @@ -904,8 +904,8 @@ func (u *Uploader) processSingle( return nil case fs.Symlink: - childTree := policyTree.Child(entry.Name()) - de, err := u.uploadSymlinkInternal(ctx, entryRelativePath, entry, childTree.EffectivePolicy().MetadataCompressionPolicy.MetadataCompressor()) + compressor := policyTree.Child(entry.Name()).EffectivePolicy().MetadataCompressionPolicy.MetadataCompressor() + de, err := u.uploadSymlinkInternal(ctx, entryRelativePath, entry, compressor) return u.processEntryUploadResult(ctx, de, err, entryRelativePath, parentDirBuilder, policyTree.EffectivePolicy().ErrorHandlingPolicy.IgnoreFileErrors.OrDefault(false), @@ -931,10 +931,10 @@ func (u *Uploader) processSingle( // Use the child policy for the specific entry path, not the parent directory policy. // This ensures per-entry error handling rules are respected, consistent with how // directory processing derives childTree via policyTree.Child(). - childPolicy := policyTree.Child(entry.Name()).EffectivePolicy() + ehp := policyTree.Child(entry.Name()).EffectivePolicy().ErrorHandlingPolicy if errors.Is(entry.ErrorInfo(), fs.ErrUnknown) { - isIgnoredError = childPolicy.ErrorHandlingPolicy.IgnoreUnknownTypes.OrDefault(true) + isIgnoredError = ehp.IgnoreUnknownTypes.OrDefault(true) // If unknown types are configured to be ignored, skip them completely without any error reporting if isIgnoredError { @@ -944,7 +944,6 @@ func (u *Uploader) processSingle( prefix = "unknown entry" } else { prefix = "error" - ehp := childPolicy.ErrorHandlingPolicy if entry.IsDir() { isIgnoredError = ehp.IgnoreDirectoryErrors.OrDefault(false) diff --git a/snapshot/upload/upload_test.go b/snapshot/upload/upload_test.go index fdee296b1d6..3ad253a313a 100644 --- a/snapshot/upload/upload_test.go +++ b/snapshot/upload/upload_test.go @@ -427,9 +427,9 @@ func TestUpload_ErrorEntries(t *testing.T) { t.Cleanup(th.cleanup) - th.sourceDir.Subdir("d1").AddErrorEntry("some-unknown-entry", os.ModeIrregular, fs.ErrUnknown) - th.sourceDir.Subdir("d1").AddErrorEntry("some-failed-entry", 0, errors.New("some-other-error")) - th.sourceDir.Subdir("d2").AddErrorEntry("another-failed-entry", os.ModeIrregular, errors.New("another-error")) + th.sourceDir.Subdir("d1").AddErrorEntryIrregular("some-unknown-entry", 0, fs.ErrUnknown) + th.sourceDir.Subdir("d1").AddErrorEntryFile("some-failed-entry", 0, errors.New("some-other-error")) + th.sourceDir.Subdir("d2").AddErrorEntryIrregular("another-failed-entry", 0, errors.New("another-error")) trueValue := policy.OptionalBool(true) falseValue := policy.OptionalBool(false) @@ -529,9 +529,9 @@ func TestUpload_ErrorEntryChildPolicy(t *testing.T) { t.Cleanup(th.cleanup) // Add a dir-typed error entry, a file-typed error entry, and an unknown-typed error entry under d1. - th.sourceDir.Subdir("d1").AddErrorEntry("dir-err", 0, errors.New("dir-error")) - th.sourceDir.Subdir("d1").AddFileErrorEntry("file-err", 0, errors.New("file-error")) - th.sourceDir.Subdir("d1").AddErrorEntry("unknown-err", os.ModeIrregular, fs.ErrUnknown) + th.sourceDir.Subdir("d1").AddErrorEntryDir("dir-err", 0, errors.New("dir-error")) + th.sourceDir.Subdir("d1").AddErrorEntryFile("file-err", 0, errors.New("file-error")) + th.sourceDir.Subdir("d1").AddErrorEntryIrregular("unknown-err", 0, fs.ErrUnknown) trueValue := policy.OptionalBool(true) falseValue := policy.OptionalBool(false) @@ -1458,7 +1458,7 @@ func TestUploadLogging(t *testing.T) { sourceDir.AddFile("f2", []byte{1, 2, 3, 4}, defaultPermissions) sourceDir.AddFile("f3", []byte{1, 2, 3, 4, 5}, defaultPermissions) sourceDir.AddSymlink("f4", "f2", defaultPermissions) - sourceDir.AddErrorEntry("f5", defaultPermissions, errors.New("some error")) + sourceDir.AddErrorEntryFile("f5", defaultPermissions, errors.New("some error")) sourceDir.AddDir("d1", defaultPermissions) sourceDir.AddDir("d1/d3", defaultPermissions) From 568f9a8e86450f138a81cb92aba0c2d936bd3d80 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Mon, 23 Mar 2026 12:24:18 -0700 Subject: [PATCH 076/156] feat(ui): upgraded htmlui to the latest version (#5239) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5d2d2313ad6..e76b114a3d5 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.4 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8 + github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 333fc430952..fe4039a349c 100644 --- a/go.sum +++ b/go.sum @@ -181,8 +181,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8 h1:M1Ew+mmcjmFemLrlInIhrrSqoUNBzuwPPI2Z8zMxWdY= -github.com/kopia/htmluibuild v0.0.1-0.20260317050713-8dc0184502e8/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e h1:lyyxc8k8rZAGbg8/UM/scr3e5Stp7ZgIkw3Rn03duBg= +github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 39fcd3382363e5e5d10751f93c01899abeb3a7c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:16:12 -0700 Subject: [PATCH 077/156] build(deps): bump github.com/klauspost/compress from 1.18.4 to 1.18.5 (#5240) Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.18.4 to 1.18.5. - [Release notes](https://github.com/klauspost/compress/releases) - [Commits](https://github.com/klauspost/compress/compare/v1.18.4...v1.18.5) --- updated-dependencies: - dependency-name: github.com/klauspost/compress dependency-version: 1.18.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e76b114a3d5..ea97c06ecfb 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/hanwen/go-fuse/v2 v2.9.0 github.com/hashicorp/cronexpr v1.1.3 - github.com/klauspost/compress v1.18.4 + github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e diff --git a/go.sum b/go.sum index fe4039a349c..851e625f2ef 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,8 @@ github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1 github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 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/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= From e743e84b729dcdb16ae0f5bd89f84131f36c40bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 20:46:55 -0700 Subject: [PATCH 078/156] build(deps): bump github.com/zalando/go-keyring from 0.2.6 to 0.2.8 (#5241) Bumps [github.com/zalando/go-keyring](https://github.com/zalando/go-keyring) from 0.2.6 to 0.2.8. - [Release notes](https://github.com/zalando/go-keyring/releases) - [Commits](https://github.com/zalando/go-keyring/compare/v0.2.6...v0.2.8) --- updated-dependencies: - dependency-name: github.com/zalando/go-keyring dependency-version: 0.2.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 7 +++---- go.sum | 16 ++++++---------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index ea97c06ecfb..41a0161da61 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/studio-b12/gowebdav v0.12.0 github.com/tg123/go-htpasswd v1.2.4 - github.com/zalando/go-keyring v0.2.6 + github.com/zalando/go-keyring v0.2.8 github.com/zeebo/blake3 v0.2.4 go.opentelemetry.io/otel v1.42.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 @@ -74,7 +74,6 @@ require ( ) require ( - al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth v0.18.2 // indirect @@ -93,7 +92,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chromedp/sysutil v1.1.0 // indirect github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect - github.com/danieljoos/wincred v1.2.2 // indirect + github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect @@ -110,7 +109,7 @@ require ( github.com/gobwas/httphead v0.1.0 // indirect github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/golang/glog v1.2.5 // indirect github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect diff --git a/go.sum b/go.sum index 851e625f2ef..54f429d00b3 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho= -al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= @@ -75,8 +73,8 @@ github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/Buvy github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= -github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= +github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= +github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -125,8 +123,8 @@ github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs= github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= +github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= @@ -151,8 +149,6 @@ github.com/google/readahead v0.0.0-20161222183148-eaceba169032 h1:6Be3nkuJFyRfCg github.com/google/readahead v0.0.0-20161222183148-eaceba169032/go.mod h1:qYysrqQXuV4tzsizt4oOQ6mrBZQ0xnQXP3ylXX8Jk5Y= 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/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= 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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= @@ -281,8 +277,8 @@ github.com/tinylib/msgp v1.6.1 h1:ESRv8eL3u+DNHUoSAAQRE50Hm162zqAnBoGv9PzScPY= github.com/tinylib/msgp v1.6.1/go.mod h1:RSp0LW9oSxFut3KzESt5Voq4GVWyS+PSulT77roAqEA= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/zalando/go-keyring v0.2.6 h1:r7Yc3+H+Ux0+M72zacZoItR3UDxeWfKTcabvkI8ua9s= -github.com/zalando/go-keyring v0.2.6/go.mod h1:2TCrxYrbUNYfNS/Kgy/LSrkSQzZ5UPVH85RwfczwvcI= +github.com/zalando/go-keyring v0.2.8 h1:6sD/Ucpl7jNq10rM2pgqTs0sZ9V3qMrqfIIy5YPccHs= +github.com/zalando/go-keyring v0.2.8/go.mod h1:tsMo+VpRq5NGyKfxoBVjCuMrG47yj8cmakZDO5QGii0= github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI= From 6ac516b96a68c10d74fbb15497bbbbcdb0d19802 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:40:18 -0700 Subject: [PATCH 079/156] build(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 (#5242) Bumps [github.com/fatih/color](https://github.com/fatih/color) from 1.18.0 to 1.19.0. - [Release notes](https://github.com/fatih/color/releases) - [Commits](https://github.com/fatih/color/compare/v1.18.0...v1.19.0) --- updated-dependencies: - dependency-name: github.com/fatih/color dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 41a0161da61..3883ba28229 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/coreos/go-systemd/v22 v22.7.0 github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 github.com/edsrzf/mmap-go v1.2.0 - github.com/fatih/color v1.18.0 + github.com/fatih/color v1.19.0 github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c github.com/gofrs/flock v0.13.0 github.com/golang-jwt/jwt/v4 v4.5.2 diff --git a/go.sum b/go.sum index 54f429d00b3..29ad67426dd 100644 --- a/go.sum +++ b/go.sum @@ -94,8 +94,8 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -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/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= +github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= From ee9ad38efeaecdba392cfc30e1b63be67675abda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:53:42 -0700 Subject: [PATCH 080/156] build(deps-dev): gotestsum to v1.13.0 (#5246) --- tools/gettool/checksums.txt | 12 ++++++------ tools/tools.mk | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/gettool/checksums.txt b/tools/gettool/checksums.txt index 9d5e4d438d5..20a80e6df10 100644 --- a/tools/gettool/checksums.txt +++ b/tools/gettool/checksums.txt @@ -19,12 +19,12 @@ https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_L https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Linux_armv6.tar.gz: f1903865b6ede1a4324c71d3efa4155b7067d1d357ccfd844c07c2bb3dcb4af2 https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Linux_x86_64.tar.gz: 13bf8ef4ec33d4f3ff2d2c7c02361946e29d69093cf7102e46dcb49e48a31435 https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Windows_x86_64.zip: ccd955af3069c3f8a560e40b7d6a92566febeb5abb243274e4484c136ec7b4df -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_darwin_amd64.tar.gz: e857b31adde83a534cb7ae2b2eec73fed5d96687a25692267dd061e220df102e -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_darwin_arm64.tar.gz: 4e47a76a29150ff90638d249843c2d10c4ed6abdafdde5f8bf9fd9f19e36a3fd -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_linux_amd64.tar.gz: 531c37ec646a9793a3c473831b9ee5314da8056c263772840d96afe9a9498e93 -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_linux_arm64.tar.gz: 51c7fe29216678edaaa96bb67e38d58437fd54a83468f58a32513995f575dcc3 -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_linux_armv6.tar.gz: 79a6a904d73a7b6b010f82205803e0c0a8a202a63f51e93e555e2f9be8aa3ba3 -https://github.com/gotestyourself/gotestsum/releases/download/v1.11.0/gotestsum_1.11.0_windows_amd64.tar.gz: 1518b3dd6a44b5684e9732121933f52b9c3ccab3a6e9efdeac41e7b03f97d019 +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_darwin_amd64.tar.gz: 99529350f4c7b780b1efc543ca0d9721b09f0a4228f0efa9281261f58fefa05a +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_darwin_arm64.tar.gz: 509cb27aef747f48faf9bce424f59dcf79572c905204b990ee935bbfcc7fa0e9 +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_linux_amd64.tar.gz: 11ccddeaf708ef228889f9fe2f68291a75b27013ddfc3b18156e094f5f40e8ee +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_linux_arm64.tar.gz: 7644a4c5cd1bb978d56245aeab25a586ac5ac62adebed20a399548867c13499d +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_linux_armv6.tar.gz: 5ba38a53b4d612aa2214508052c2e0230b36aec60eed6dba434476b720dcf4d6 +https://github.com/gotestyourself/gotestsum/releases/download/v1.13.0/gotestsum_1.13.0_windows_amd64.tar.gz: fd5a6dc69e46a0970593e70d85a7e75f16714e9c61d6d72ccc324eb82df5bb8a https://github.com/kopia/kopia/releases/download/v0.17.0/kopia-0.17.0-linux-arm.tar.gz: 25804d7271a0dfe6d0821270c5640caa01da5e05a03a7c4783fd1edafb234d51 https://github.com/kopia/kopia/releases/download/v0.17.0/kopia-0.17.0-linux-arm64.tar.gz: 9679415cd2717a90cb6a793aa2d4accde4059084245b27fa4807d7e13fbe40a0 https://github.com/kopia/kopia/releases/download/v0.17.0/kopia-0.17.0-linux-x64.tar.gz: 6851bba9f49c2ca2cabc5bec85a813149a180472d1e338fad42a8285dad047ee diff --git a/tools/tools.mk b/tools/tools.mk index a0740fa6ff2..bae9e62406f 100644 --- a/tools/tools.mk +++ b/tools/tools.mk @@ -108,7 +108,7 @@ GOLANGCI_LINT_VERSION=2.6.1 CHECKLOCKS_VERSION=release-20241104.0 NODE_VERSION=22.15.1 HUGO_VERSION=0.113.0 -GOTESTSUM_VERSION=1.11.0 +GOTESTSUM_VERSION=1.13.0 GORELEASER_VERSION=v0.176.0 RCLONE_VERSION=1.68.2 GITCHGLOG_VERSION=0.15.1 From 14aa20e69937206e62a848aa4cc6e1afdac18f49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 09:53:32 -0700 Subject: [PATCH 081/156] build(deps-dev): bump picomatch from 4.0.3 to 4.0.4 in /app (#5249) Bumps [picomatch](https://github.com/micromatch/picomatch) from 4.0.3 to 4.0.4. - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4) --- updated-dependencies: - dependency-name: picomatch dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index cb3b0d36f7f..f366c9dd9b3 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -3842,9 +3842,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { From 61328d515d34f10a81db307cb862bda3884a880b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:58:46 +0000 Subject: [PATCH 082/156] build(deps-dev): bump picomatch from 2.3.1 to 2.3.2 in /site (#5248) Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2) --- updated-dependencies: - dependency-name: picomatch dependency-version: 2.3.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- site/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index 0a67a585e48..46057174910 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -660,9 +660,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { From 2c6b9b25967907f099d0df93ede9c42bb9dff28e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 09:59:59 -0700 Subject: [PATCH 083/156] build(deps-dev): bump yaml from 2.8.2 to 2.8.3 in /site (#5250) Bumps [yaml](https://github.com/eemeli/yaml) from 2.8.2 to 2.8.3. - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](https://github.com/eemeli/yaml/compare/v2.8.2...v2.8.3) --- updated-dependencies: - dependency-name: yaml dependency-version: 2.8.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- site/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index 46057174910..49ede594448 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1051,9 +1051,9 @@ } }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true, "license": "ISC", "bin": { From 1d7539e0d2315da3457724fd0cdef0b2a6f5ab21 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Thu, 26 Mar 2026 10:47:18 -0700 Subject: [PATCH 084/156] feat(ui): upgraded htmlui to the latest version (#5251) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 3883ba28229..9add36bfa99 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e + github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 29ad67426dd..3cfb803d897 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e h1:lyyxc8k8rZAGbg8/UM/scr3e5Stp7ZgIkw3Rn03duBg= -github.com/kopia/htmluibuild v0.0.1-0.20260323185607-1075ccc98b6e/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e h1:/i/Cm38r9uAYoJ1UN8DDaVNdSBxk6FIP+WLpxQHodR0= +github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 67f26feb931875a74537bca096f905f7268c3019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:16:08 -0700 Subject: [PATCH 085/156] test(kopiaui): skip htmlui tests that are timing out (#5257) This appears to be caused by changes in the Chrome version that is included in the updated runner image. --- tests/htmlui_e2e_test/htmlui_e2e_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/htmlui_e2e_test/htmlui_e2e_test.go b/tests/htmlui_e2e_test/htmlui_e2e_test.go index 1211c4e6c99..241f6dade48 100644 --- a/tests/htmlui_e2e_test/htmlui_e2e_test.go +++ b/tests/htmlui_e2e_test/htmlui_e2e_test.go @@ -207,6 +207,12 @@ func TestEndToEndTest(t *testing.T) { chromedp.Click("a[data-testid='tab-repo']"), tc.captureScreenshot("repository"), + chromedp.ActionFunc(func(context.Context) error { + t.Skip("Disconnect times out, skipping for now to unblock CI") + + return nil + }), + tc.log("disconnecting"), chromedp.Click("button[data-testid='disconnect']"), tc.captureScreenshot("disconnected"), @@ -255,6 +261,12 @@ func TestConnectDisconnectReconnect(t *testing.T) { chromedp.Click("a[data-testid='tab-repo']"), tc.captureScreenshot("repository"), + chromedp.ActionFunc(func(context.Context) error { + t.Skip("Disconnect times out, skipping for now to unblock CI") + + return nil + }), + tc.log("disconnecting"), chromedp.Click("button[data-testid='disconnect']"), tc.captureScreenshot("disconnected"), From 5a9bf683ae03b7d2b695ec4d1c59b6cf2ceade6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:41:36 -0700 Subject: [PATCH 086/156] use gotestsum for htmlui-e2e tests (#5258) --- .github/workflows/htmlui-tests.yml | 2 ++ Makefile | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index 4ec2d7c337b..a238148cf1a 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -36,6 +36,8 @@ jobs: go-version-file: 'go.mod' check-latest: true id: go + - name: Install gotestsum + run: make install-gotestsum - name: Run Tests run: make htmlui-e2e-test - name: Upload Screenshots diff --git a/Makefile b/Makefile index 92728dc4aa1..0818105b28c 100644 --- a/Makefile +++ b/Makefile @@ -385,8 +385,9 @@ ifneq ($(GOOS),windows) -e github.com/kopia/kopia/issues && exit 1 || echo repo/ layering ok endif +htmlui-e2e-test: GOTESTSUM_FORMAT=testname htmlui-e2e-test: - HTMLUI_E2E_TEST=1 go test -timeout 600s github.com/kopia/kopia/tests/htmlui_e2e_test -v $(TEST_FLAGS) + HTMLUI_E2E_TEST=1 $(GO_TEST) -timeout 600s github.com/kopia/kopia/tests/htmlui_e2e_test -v $(TEST_FLAGS) htmlui-e2e-test-local-htmlui-changes: (cd ../htmlui && npm run build) From 42729447ccdb42df2a7a71d9062f6311404468a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 02:42:44 +0000 Subject: [PATCH 087/156] build(deps): bump google.golang.org/api (#5254) Bumps the common-golang-dependencies group with 1 update: [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `google.golang.org/api` from 0.272.0 to 0.273.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.272.0...v0.273.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.273.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 9add36bfa99..fe083cb4116 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( golang.org/x/sys v0.42.0 golang.org/x/term v0.41.0 golang.org/x/text v0.35.0 - google.golang.org/api v0.272.0 + google.golang.org/api v0.273.1 google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -116,7 +116,7 @@ require ( github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.18.0 // indirect + github.com/googleapis/gax-go/v2 v2.19.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -146,8 +146,8 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3cfb803d897..5f99c50f0ff 100644 --- a/go.sum +++ b/go.sum @@ -153,8 +153,8 @@ 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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= -github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= +github.com/googleapis/gax-go/v2 v2.19.0 h1:fYQaUOiGwll0cGj7jmHT/0nPlcrZDFPrZRhTsoCr8hE= +github.com/googleapis/gax-go/v2 v2.19.0/go.mod h1:w2ROXVdfGEVFXzmlciUU4EdjHgWvB5h2n6x/8XSTTJA= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -353,14 +353,14 @@ golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.272.0 h1:eLUQZGnAS3OHn31URRf9sAmRk3w2JjMx37d2k8AjJmA= -google.golang.org/api v0.272.0/go.mod h1:wKjowi5LNJc5qarNvDCvNQBn3rVK8nSy6jg2SwRwzIA= -google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d h1:vsOm753cOAMkt76efriTCDKjpCbK18XGHMJHo0JUKhc= -google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:0oz9d7g9QLSdv9/lgbIjowW1JoxMbxmBVNe8i6tORJI= -google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1:EocjzKLywydp5uZ5tJ79iP6Q0UjDnyiHkGRWxuPBP8s= -google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/api v0.273.1 h1:L7G/TmpAMz0nKx/ciAVssVmWQiOF6+pOuXeKrWVsquY= +google.golang.org/api v0.273.1/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 h1:JNfk58HZ8lfmXbYK2vx/UvsqIL59TzByCxPIX4TDmsE= +google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:x5julN69+ED4PcFk/XWayw35O0lf/nGa4aNgODCmNmw= +google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 h1:CogIeEXn4qWYzzQU0QqvYBM8yDF9cFYzDq9ojSpv0Js= +google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 9360017c9f1780a2096fd08a973018be6cf47e8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 20:43:06 -0700 Subject: [PATCH 088/156] build(deps-dev): bump brace-expansion from 1.1.12 to 1.1.13 in /app (#5260) Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.13 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index f366c9dd9b3..8ac96217cbe 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -261,9 +261,9 @@ } }, "node_modules/@electron/universal/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -1026,16 +1026,16 @@ } }, "node_modules/app-builder-lib/node_modules/brace-expansion": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" } }, "node_modules/app-builder-lib/node_modules/ci-info": { @@ -1249,9 +1249,9 @@ "optional": true }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1364,9 +1364,9 @@ } }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -2523,9 +2523,9 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { From 0f6e60b62126a6e8bdb05a30f69fc6f2aa2294e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Mar 2026 20:50:07 -0700 Subject: [PATCH 089/156] build(deps-dev): bump @xmldom/xmldom from 0.8.11 to 0.8.12 in /app (#5261) Bumps [@xmldom/xmldom](https://github.com/xmldom/xmldom) from 0.8.11 to 0.8.12. - [Release notes](https://github.com/xmldom/xmldom/releases) - [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md) - [Commits](https://github.com/xmldom/xmldom/compare/0.8.11...0.8.12) --- updated-dependencies: - dependency-name: "@xmldom/xmldom" dependency-version: 0.8.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 8ac96217cbe..25da401ce02 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -730,9 +730,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", "dev": true, "license": "MIT", "engines": { From 78407b1d5f96e7771d4d0450111b178dab83a4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 1 Apr 2026 20:50:10 -0700 Subject: [PATCH 090/156] refactor(general): string nits (#5265) Minor improvements: Refactor the construction of a test string with many control characters in `TestJSONWriter_StringEscapingPerformanceWithManyControlChars` by using a `strings.Builder`. Rationale: address a future `modernize` linter warning. While this is also "more" efficient, it does not make any practical difference in this context. Simplify the conversion of a short flag to a string in `emitFlags` by removing an unnecessary byte slice conversion (`tools/cli2md/cli2md.go`). Rationale: simplify the expression for clarity and address a future linter warning. - Ref: #5247 --- internal/contentlog/contentlog_json_writer_test.go | 14 +++++++++++--- tools/cli2md/cli2md.go | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/internal/contentlog/contentlog_json_writer_test.go b/internal/contentlog/contentlog_json_writer_test.go index 27f0835444b..458efaa8695 100644 --- a/internal/contentlog/contentlog_json_writer_test.go +++ b/internal/contentlog/contentlog_json_writer_test.go @@ -3,6 +3,7 @@ package contentlog import ( "encoding/json" "os" + "strings" "testing" "time" @@ -741,11 +742,18 @@ func TestJSONWriter_StringEscapingPerformanceWithManyControlChars(t *testing.T) jw.BeginObject() // Create a string with many control characters to test performance - var testString string - for i := range 100 { - testString += string(rune(i % 32)) // Mix of control chars 0x00-0x1F + const testStringLen = 100 + + var sb strings.Builder + + sb.Grow(testStringLen) + + for i := range testStringLen { + sb.WriteRune(rune(i % 32)) // Mix of control chars 0x00-0x1F } + testString := sb.String() + jw.StringField("manyControlChars", testString) jw.EndObject() diff --git a/tools/cli2md/cli2md.go b/tools/cli2md/cli2md.go index a6e63c34053..e3d226c49e5 100644 --- a/tools/cli2md/cli2md.go +++ b/tools/cli2md/cli2md.go @@ -63,7 +63,7 @@ func emitFlags(w io.Writer, flags []*kingpin.FlagModel) { shortFlag := "" if f.Short != 0 { - shortFlag = "`-" + string([]byte{byte(f.Short)}) + "`" + shortFlag = "`-" + string(f.Short) + "`" } defaultValue := "" From 29d4118aac50fc0b2831588cfd2ae20526b59052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:51:44 -0700 Subject: [PATCH 091/156] refactor(general): address potential conversion overflows (#5266) Minor robustness improvements - add safety check when converting file descriptor (`os.File.Fd()`) to `int` - check that file descriptor returned by Open (on Linux) is non-negative before converting to `uintptr`. This addresses a linter warning for a most-likely-non-existent-edge-case of converting a negative file descriptor. - check that parsed content IDs (hashes) do not exceed the maximum id hash length. - add nolint annotation for safe conversion --- cli/password.go | 20 +++++++++++++++++++- internal/tempfile/tempfile_linux.go | 4 ++-- repo/content/index/content_id_to_bytes.go | 7 ++++++- repo/content/index/id.go | 6 ++++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/cli/password.go b/cli/password.go index e205a6f33e8..d452e7e7f8e 100644 --- a/cli/password.go +++ b/cli/password.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "math" "os" "strings" @@ -94,10 +95,15 @@ func (c *App) getPasswordFromFlags(ctx context.Context, isCreate, allowPersisten // askPass presents a given prompt and asks the user for password. func askPass(out io.Writer, prompt string) (string, error) { + fd, err := intFd(os.Stdin) + if err != nil { + return "", errors.Wrap(err, "password input error") + } + for range 5 { fmt.Fprint(out, prompt) //nolint:errcheck - passBytes, err := term.ReadPassword(int(os.Stdin.Fd())) + passBytes, err := term.ReadPassword(fd) if err != nil { return "", errors.Wrap(err, "password prompt error") } @@ -113,3 +119,15 @@ func askPass(out io.Writer, prompt string) (string, error) { return "", errors.New("can't get password") } + +var errFdConversionOverflows = errors.New("uintptr file descriptor conversion to int overflows") + +func intFd(f *os.File) (int, error) { + fd := f.Fd() + + if fd <= math.MaxInt { + return int(fd), nil + } + + return -1, errFdConversionOverflows +} diff --git a/internal/tempfile/tempfile_linux.go b/internal/tempfile/tempfile_linux.go index d0598039383..f70518559f8 100644 --- a/internal/tempfile/tempfile_linux.go +++ b/internal/tempfile/tempfile_linux.go @@ -17,11 +17,11 @@ func CreateAutoDelete() (*os.File, error) { // on reasonably modern Linux (3.11 and above) O_TMPFILE is supported, // which creates invisible, unlinked file in a given directory. fd, err := unix.Open(dir, unix.O_RDWR|unix.O_TMPFILE|unix.O_CLOEXEC, permissions) - if err == nil { + if err == nil && fd >= 0 { return os.NewFile(uintptr(fd), ""), nil } - if errors.Is(err, syscall.EISDIR) || errors.Is(err, syscall.EOPNOTSUPP) { + if err == nil || errors.Is(err, syscall.EISDIR) || errors.Is(err, syscall.EOPNOTSUPP) { return createUnixFallback() } diff --git a/repo/content/index/content_id_to_bytes.go b/repo/content/index/content_id_to_bytes.go index a7e06fa4c4c..f788749389a 100644 --- a/repo/content/index/content_id_to_bytes.go +++ b/repo/content/index/content_id_to_bytes.go @@ -2,6 +2,7 @@ package index import ( "bytes" + "fmt" ) func bytesToContentID(b []byte) ID { @@ -9,10 +10,14 @@ func bytesToContentID(b []byte) ID { return ID{} } + if len(b) > maxIDLength+1 { + panic(fmt.Sprintln("Content ID byte slice is longer than the maximum supported ID:", len(b))) + } + var id ID id.prefix = b[0] - id.idLen = byte(len(b) - 1) + id.idLen = uint8(len(b) - 1) //nolint:gosec // len(b) is checked above copy(id.data[0:len(b)-1], b[1:]) return id diff --git a/repo/content/index/id.go b/repo/content/index/id.go index 78312fd081d..aed97e4b548 100644 --- a/repo/content/index/id.go +++ b/repo/content/index/id.go @@ -28,11 +28,13 @@ func (p IDPrefix) ValidateSingle() error { return errors.New("invalid prefix, must be empty or a single letter between 'g' and 'z'") } +const maxIDLength = hashing.MaxHashSize + // ID is an identifier of content in content-addressable storage. // //nolint:recvcheck type ID struct { - data [hashing.MaxHashSize]byte + data [maxIDLength]byte // those 2 could be packed into one byte, but that seems like overkill prefix byte @@ -183,7 +185,7 @@ func IDFromHash(prefix IDPrefix, hash []byte) (ID, error) { id.prefix = prefix[0] } - id.idLen = byte(len(hash)) + id.idLen = uint8(len(hash)) //nolint:gosec // len(hash) is checked above copy(id.data[:], hash) return id, nil From b984c25a218a118ff756774add1ebc726eb05d72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:58:28 -0700 Subject: [PATCH 092/156] build(deps): bump codecov/codecov-action from 5.5.2 to 6.0.0 (#5269) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.2 to 6.0.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/671740ac38dd9b0130fbe1cec585b89eea48d3de...57e3a136b779b570ffcdbf80b3bdc90e7fab3de2) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/code-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index cad03908aca..707febcbf40 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -22,7 +22,7 @@ jobs: - name: Run Tests run: make test-with-coverage - name: Upload Coverage - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 with: files: coverage.txt - name: Upload Logs From af97e6199acfcdc57a53760b2fbceace2bf2b8c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:59:30 -0700 Subject: [PATCH 093/156] build(deps): bump the docker group with 2 updates (#5268) Bumps the docker group with 2 updates: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) and [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action). Updates `docker/setup-qemu-action` from 3.7.0 to 4.0.0 - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/c7c53464625b32c7a7e944ae62b3e17d2b600130...ce360397dd3f832beb865e1373c09c0e9f86d70a) Updates `docker/setup-buildx-action` from 3.12.0 to 4.0.0 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/8d2750c68a42422c14e847fe6c8ac0403b4cbd6f...4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: docker - dependency-name: docker/setup-buildx-action dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: docker ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/make.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 8b4d436ae7d..509b88e421b 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -130,9 +130,9 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up QEMU - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0 - name: Install Linux-specific packages run: "sudo apt-get install -y createrepo-c" - name: Download Artifacts From 065eea75cc72c4a6b999111a68ffb534e3defd5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 22:01:09 -0700 Subject: [PATCH 094/156] build(deps-dev): bump the kopia-ui-npm-dependencies group (#5270) Bumps the kopia-ui-npm-dependencies group in /app with 5 updates: | Package | From | To | | --- | --- | --- | | [@playwright/test](https://github.com/microsoft/playwright) | `1.58.2` | `1.59.1` | | [dotenv](https://github.com/motdotla/dotenv) | `17.3.1` | `17.4.0` | | [electron](https://github.com/electron/electron) | `39.7.0` | `41.1.1` | | [playwright](https://github.com/microsoft/playwright) | `1.58.2` | `1.59.1` | | [playwright-core](https://github.com/microsoft/playwright) | `1.58.2` | `1.59.1` | Updates `@playwright/test` from 1.58.2 to 1.59.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.58.2...v1.59.1) Updates `dotenv` from 17.3.1 to 17.4.0 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v17.3.1...v17.4.0) Updates `electron` from 39.7.0 to 41.1.1 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v39.7.0...v41.1.1) Updates `playwright` from 1.58.2 to 1.59.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.58.2...v1.59.1) Updates `playwright-core` from 1.58.2 to 1.59.1 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.58.2...v1.59.1) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.59.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: dotenv dependency-version: 17.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: electron dependency-version: 41.1.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: kopia-ui-npm-dependencies - dependency-name: playwright dependency-version: 1.59.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: playwright-core dependency-version: 1.59.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 56 +++++++++++++++++++++---------------------- app/package.json | 6 ++--- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 25da401ce02..cb106adc088 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -19,11 +19,11 @@ }, "devDependencies": { "@electron/notarize": "^3.1.1", - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.3.1", - "electron": "^39.7.0", + "dotenv": "^17.4.0", + "electron": "^41.1.1", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", @@ -560,13 +560,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.58.2" + "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -679,13 +679,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", - "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/plist": { @@ -2035,9 +2035,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2115,15 +2115,15 @@ } }, "node_modules/electron": { - "version": "39.7.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-39.7.0.tgz", - "integrity": "sha512-Rz5QvP1pTqoU1DPRrG3EeX2oWBtS3uRmd6Z/wzZsb2e/iIUsrT+XcBaAhFr4FW48gDc8uP2wYVyY5Aamha/5Zg==", + "version": "41.1.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-41.1.1.tgz", + "integrity": "sha512-8bgvDhBjli+3Z2YCKgzzoBPh6391pr7Xv2h/tTJG4ETgvPvUxZomObbZLs31mUzYb6VrlcDDd9cyWyNKtPm3tA==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", + "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { @@ -3855,13 +3855,13 @@ } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -3874,9 +3874,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4735,9 +4735,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, diff --git a/app/package.json b/app/package.json index 1124113e764..9df401961fb 100644 --- a/app/package.json +++ b/app/package.json @@ -123,11 +123,11 @@ }, "devDependencies": { "@electron/notarize": "^3.1.1", - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.3.1", - "electron": "^39.7.0", + "dotenv": "^17.4.0", + "electron": "^41.1.1", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", From 11edc7289d6eece2e480bf52a9fc825817af85e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 05:36:05 +0000 Subject: [PATCH 095/156] build(deps): bump the github-actions group with 4 updates (#5267) Bumps the github-actions group with 4 updates: [actions/setup-go](https://github.com/actions/setup-go), [actions/dependency-review-action](https://github.com/actions/dependency-review-action), [actions/download-artifact](https://github.com/actions/download-artifact) and [github/codeql-action](https://github.com/github/codeql-action). Updates `actions/setup-go` from 6.3.0 to 6.4.0 - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/4b73464bb391d4059bd26b0524d20df3927bd417...4a3601121dd01d1626a1e23e37211e3254c1c06c) Updates `actions/dependency-review-action` from 4.8.3 to 4.9.0 - [Release notes](https://github.com/actions/dependency-review-action/releases) - [Commits](https://github.com/actions/dependency-review-action/compare/05fe4576374b728f0c523d6a13d64c25081e0803...2031cfc080254a8a887f58cffee85186f0e49e48) Updates `actions/download-artifact` from 8.0.0 to 8.0.1 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3...3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c) Updates `github/codeql-action` from 4.32.4 to 4.35.1 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/89a39a4e59826350b863aa6b6252a07ad50cf83e...c10b8064de6f491fea524254123dbe5e09572f13) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: 6.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/dependency-review-action dependency-version: 4.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: github/codeql-action dependency-version: 4.35.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/code-coverage.yml | 2 +- .github/workflows/compat-test.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/endurance-test.yml | 2 +- .github/workflows/htmlui-tests.yml | 2 +- .github/workflows/license-check.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/make.yml | 6 +++--- .github/workflows/ossf-scorecard.yml | 2 +- .github/workflows/providers-core.yml | 2 +- .github/workflows/providers-extra.yml | 2 +- .github/workflows/race-detector.yml | 2 +- .github/workflows/stress-test.yml | 2 +- .github/workflows/tests.yml | 2 +- .github/workflows/volume-shadow-copy-test.yml | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index 707febcbf40..8412f706647 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Run Tests diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml index 80ca95bf910..92ef4c7faa2 100644 --- a/.github/workflows/compat-test.yml +++ b/.github/workflows/compat-test.yml @@ -18,7 +18,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Compat Test diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 90c794e57ad..714b0588ee3 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,4 +17,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: 'Dependency Review' - uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 #v4.8.3 + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 #v4.9.0 diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml index 3d763ae6754..fde8674cde3 100644 --- a/.github/workflows/endurance-test.yml +++ b/.github/workflows/endurance-test.yml @@ -30,7 +30,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' check-latest: true diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index a238148cf1a..919bc1f9ed0 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -31,7 +31,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' check-latest: true diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml index 8c76e2b1c1c..711a00deb0d 100644 --- a/.github/workflows/license-check.yml +++ b/.github/workflows/license-check.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Download dependencies diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0f5c2bb781c..18605fd59bf 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,7 +30,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - id: govulncheck diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 509b88e421b..22811bb47ce 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -40,7 +40,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' id: go @@ -136,13 +136,13 @@ jobs: - name: Install Linux-specific packages run: "sudo apt-get install -y createrepo-c" - name: Download Artifacts - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: kopia-* merge-multiple: true path: dist - name: Download Kopia Binaries - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: pattern: kopia_binaries-* merge-multiple: true diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index ebdc2afc567..55b73d7b67e 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -39,7 +39,7 @@ jobs: - # Upload the results to GitHub's code scanning dashboard. name: "Upload to results to dashboard" - uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v3.29.5 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 with: sarif_file: results.sarif category: ossf diff --git a/.github/workflows/providers-core.yml b/.github/workflows/providers-core.yml index 0b5c5502319..7ce690d84c5 100644 --- a/.github/workflows/providers-core.yml +++ b/.github/workflows/providers-core.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/providers-extra.yml b/.github/workflows/providers-extra.yml index 0f904b3226e..aeeff06c9da 100644 --- a/.github/workflows/providers-extra.yml +++ b/.github/workflows/providers-extra.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 ref: ${{ github.event.inputs.ref_name || github.ref }} - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Install Dependencies diff --git a/.github/workflows/race-detector.yml b/.github/workflows/race-detector.yml index 8d1b7abbb02..a7e24e22911 100644 --- a/.github/workflows/race-detector.yml +++ b/.github/workflows/race-detector.yml @@ -16,7 +16,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Unit Tests diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 9ba69d672a1..3a3c5bd7e4a 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Stress Test diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 35b1c791477..1d0d9d31070 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -38,7 +38,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Install Windows-specific packages diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml index 59abef0ba8a..f2cfd76a7da 100644 --- a/.github/workflows/volume-shadow-copy-test.yml +++ b/.github/workflows/volume-shadow-copy-test.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0 + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - name: Install gsudo From c7f3f5eda70612122ff8e38d46f4ed2f5f873fe8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:53:51 -0700 Subject: [PATCH 096/156] build(deps-dev): bump lodash from 4.17.23 to 4.18.1 in /app (#5272) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.18.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index cb106adc088..7ae803f2517 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -3221,9 +3221,9 @@ "license": "MIT" }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, From a2241dc06eead71a90a14fb726fcf6031914e2aa Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:13:29 -0700 Subject: [PATCH 097/156] feat(ui): upgraded htmlui to the latest version (#5274) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index fe083cb4116..7981aa9f25d 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e + github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 5f99c50f0ff..c24d0e0c454 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e h1:/i/Cm38r9uAYoJ1UN8DDaVNdSBxk6FIP+WLpxQHodR0= -github.com/kopia/htmluibuild v0.0.1-0.20260326173030-2e9a926f277e/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72 h1:hkMKkOyseYqOILzv4i1hv9S74V07uC9HLzGK9pX4bto= +github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 079585c35132db7e5ed1695472f8b2856d8379a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 04:28:22 +0000 Subject: [PATCH 098/156] build(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 (#5277) Bumps [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) from 4.1.3 to 4.1.4. - [Release notes](https://github.com/go-jose/go-jose/releases) - [Commits](https://github.com/go-jose/go-jose/compare/v4.1.3...v4.1.4) --- updated-dependencies: - dependency-name: github.com/go-jose/go-jose/v4 dependency-version: 4.1.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7981aa9f25d..1b80d2ccab5 100644 --- a/go.mod +++ b/go.mod @@ -101,7 +101,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/frankban/quicktest v1.13.1 // indirect github.com/go-ini/ini v1.67.0 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect diff --git a/go.sum b/go.sum index c24d0e0c454..16f50505750 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,8 @@ github.com/frankban/quicktest v1.13.1 h1:xVm/f9seEhZFL9+n5kv5XLrGwy6elc4V9v/XFY2 github.com/frankban/quicktest v1.13.1/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2 h1:iizUGZ9pEquQS5jTGkh4AqeeHCMbfbjeb0zMt0aEFzs= github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2/go.mod h1:TiCD2a1pcmjd7YnhGH0f/zKNcCD06B029pHhzV23c2M= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= From c7c0c163b449548153f4d8b3ad895e98d3960a11 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Thu, 2 Apr 2026 22:25:37 -0700 Subject: [PATCH 099/156] feat(ui): upgraded htmlui to the latest version (#5275) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1b80d2ccab5..03c0efa7028 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72 + github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 16f50505750..eec568f03b6 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72 h1:hkMKkOyseYqOILzv4i1hv9S74V07uC9HLzGK9pX4bto= -github.com/kopia/htmluibuild v0.0.1-0.20260402215232-8b08193fbf72/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749 h1:suKuaahbCpZlbTA7KbPu2kHWKz1yCvtgg4uWjstZzQw= +github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From a8359865c1428dc146a4f71d69ce4cb330d15202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Fri, 3 Apr 2026 10:52:22 -0700 Subject: [PATCH 100/156] chore(infra): tweak copilot instructions (#5278) --- .github/copilot-instructions.md | 41 +++++++++++++-------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1e34eb6cc61..a8bd477484e 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -65,18 +65,14 @@ make lint make lint-fix ``` +Note: Linting is **NOT** run on linux/arm64 or linux/arm platforms to avoid issues. + **Check code locks:** ```bash make check-locks ``` **Note:** Not available on linux/arm64 or linux/arm. -**Check JavaScript/TypeScript formatting (in app directory):** -```bash -make check-prettier -``` - -**Important:** Linting is **NOT** run on linux/arm64 or linux/arm platforms to avoid issues. ### Building Kopia CLI @@ -120,7 +116,7 @@ make kopia-ui make test ``` **Time:** ~2-4 minutes -**Runs:** All unit tests with gotestsum, excludes TestIndexBlobManagerStress +**Runs:** All unit tests with gotestsum **Timeout:** 1200s (20 minutes) per test **Format:** pkgname-and-test-fails @@ -132,12 +128,6 @@ make test-with-coverage **Time:** ~3-5 minutes **Note:** Used by Code Coverage workflow. Sets KOPIA_COVERAGE_TEST=1 -### Index Blob Tests (Separate) -```bash -make test-index-blob-v0 -``` -**Runs:** TestIndexBlobManagerStress (excluded from standard tests due to duration) - ### Integration Tests ```bash make build-integration-test-binary # Build test binary first @@ -146,6 +136,11 @@ make integration-tests **Time:** ~5-10 minutes **Requires:** KOPIA_INTEGRATION_EXE environment variable +**Race Detector Tests:** +```bash +make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s +``` + ### CI Test Suites ```bash make ci-tests # Runs: vet + test @@ -157,7 +152,7 @@ make ci-integration-tests # Runs: robustness-tool-tests + socket-activation-tes make provider-tests PROVIDER_TEST_TARGET=... ``` **Time:** 15 minutes timeout -**Requires:** KOPIA_PROVIDER_TEST=true, credentials for storage backend, rclone binary +**Requires:** KOPIA_PROVIDER_TEST=true, credentials for storage backend. **Note:** Tests various cloud storage providers (S3, Azure, GCS, etc.) ### Other Test Types @@ -167,11 +162,6 @@ make provider-tests PROVIDER_TEST_TARGET=... - `make stress-test` - Stress tests (1 hour timeout) - `make htmlui-e2e-test` - HTML UI end-to-end tests (10 minutes timeout) -**Race Detector Tests:** -```bash -make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s -``` - ## Common Issues & Workarounds ### Build Issues @@ -197,7 +187,7 @@ make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s 3. **Integration test binary:** Must build integration test binary explicitly with `make build-integration-test-binary` before running integration tests. -4. **Provider tests require environment:** Provider tests need KOPIA_PROVIDER_TEST=true and rclone binary available. +4. **Provider tests require environment:** Provider tests need KOPIA_PROVIDER_TEST=true and storage credentials. ### Environment Variables @@ -205,9 +195,8 @@ make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s - `UNIX_SHELL_ON_WINDOWS=true` - Required for Windows builds - `KOPIA_COVERAGE_TEST=1` - Enable coverage testing - `KOPIA_INTEGRATION_EXE` - Path to integration test binary -- `TESTING_ACTION_EXE` - Path to testing action binary - `KOPIA_PROVIDER_TEST=true` - Enable provider tests -- `RCLONE_EXE` - Path to rclone binary for provider tests + ## Project Structure @@ -270,9 +259,8 @@ make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s ### Configuration Files - `.golangci.yml` - Linter config with 40+ enabled linters, custom rules -- `.codecov.yml` - Code coverage reporting config -- `.goreleaser.yml` - Release automation config - `.github/workflows/*.yml` - GitHub Actions workflows (19 workflow files) +- `.codecov.yml` - Code coverage reporting config ## GitHub Actions Workflows @@ -408,4 +396,7 @@ make test UNIT_TEST_RACE_FLAGS=-race UNIT_TESTS_TIMEOUT=1200s - node - JavaScript runtime for app builds - hugo - Static site generator for website -10. **Trust these instructions** - These instructions have been validated by running all commands. Only search for additional information if something fails or if these instructions are incomplete or incorrect. +10. Do not commit executables or binary artifacts to the git repository. + Do not modify `.gitignore` files. + +11. **Trust these instructions** - These instructions have been validated by running all commands. Only search for additional information if something fails or if these instructions are incomplete or incorrect. From 179a2525452f312a5ba390a55a8a0017671267f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 11:18:46 -0700 Subject: [PATCH 101/156] build(deps): bump the common-golang-dependencies group with 3 updates (#5279) Bumps the common-golang-dependencies group with 3 updates: [github.com/minio/minio-go/v7](https://github.com/minio/minio-go), [google.golang.org/api](https://github.com/googleapis/google-api-go-client) and [google.golang.org/grpc](https://github.com/grpc/grpc-go). Updates `github.com/minio/minio-go/v7` from 7.0.99 to 7.0.100 - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.99...v7.0.100) Updates `google.golang.org/api` from 0.273.1 to 0.274.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.273.1...v0.274.0) Updates `google.golang.org/grpc` from 1.79.3 to 1.80.0 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.3...v1.80.0) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-version: 7.0.100 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.274.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/grpc dependency-version: 1.80.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 03c0efa7028..ea035b1141f 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 - github.com/minio/minio-go/v7 v7.0.99 + github.com/minio/minio-go/v7 v7.0.100 github.com/mocktools/go-smtp-mock/v2 v2.5.1 github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 @@ -67,8 +67,8 @@ require ( golang.org/x/sys v0.42.0 golang.org/x/term v0.41.0 golang.org/x/text v0.35.0 - google.golang.org/api v0.273.1 - google.golang.org/grpc v1.79.3 + google.golang.org/api v0.274.0 + google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) @@ -84,7 +84,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/go.sum b/go.sum index eec568f03b6..8144029855c 100644 --- a/go.sum +++ b/go.sum @@ -39,8 +39,8 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQ github.com/GehirnInc/crypt v0.0.0-20190301055215-6c0105aabd46/go.mod h1:kC29dT1vFpj7py2OvG1khBdQpo3kInWP+6QipLbdngo= github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 h1:IEjq88XO4PuBDcvmjQJcQGg+w+UaafSy8G5Kcb5tBhI= github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5/go.mod h1:exZ0C/1emQJAw5tHOaUDyY1ycttqBAPcxuzf7QbY6ec= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= @@ -201,8 +201,8 @@ github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.99 h1:2vH/byrwUkIpFQFOilvTfaUpvAX3fEFhEzO+DR3DlCE= -github.com/minio/minio-go/v7 v7.0.99/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= +github.com/minio/minio-go/v7 v7.0.100 h1:ShkWi8Tyj9RtU57OQB2HIXKz4bFgtVib0bbT1sbtLI8= +github.com/minio/minio-go/v7 v7.0.100/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/mocktools/go-smtp-mock/v2 v2.5.1 h1:QcMJMChSgG1olVj4o6xxQFdrWzRjYNrcq660HAjd0wA= @@ -351,18 +351,18 @@ golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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.273.1 h1:L7G/TmpAMz0nKx/ciAVssVmWQiOF6+pOuXeKrWVsquY= -google.golang.org/api v0.273.1/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= +google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 h1:JNfk58HZ8lfmXbYK2vx/UvsqIL59TzByCxPIX4TDmsE= google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:x5julN69+ED4PcFk/XWayw35O0lf/nGa4aNgODCmNmw= google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 h1:CogIeEXn4qWYzzQU0QqvYBM8yDF9cFYzDq9ojSpv0Js= google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y= google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w= google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 3134ebde50a1b71a467becab1b34fd68643375ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 18:46:30 +0000 Subject: [PATCH 102/156] build(deps): bump the telemetry-dependencies group with 4 updates (#5280) Bumps the telemetry-dependencies group with 4 updates: [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go), [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) and [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go). Updates `go.opentelemetry.io/otel` from 1.42.0 to 1.43.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.42.0 to 1.43.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0) Updates `go.opentelemetry.io/otel/sdk` from 1.42.0 to 1.43.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0) Updates `go.opentelemetry.io/otel/trace` from 1.42.0 to 1.43.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel dependency-version: 1.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: telemetry-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 20 ++++++++++---------- go.sum | 40 ++++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index ea035b1141f..c0f103949e0 100644 --- a/go.mod +++ b/go.mod @@ -53,10 +53,10 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.8 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.42.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 - go.opentelemetry.io/otel/sdk v1.42.0 - go.opentelemetry.io/otel/trace v1.42.0 + go.opentelemetry.io/otel v1.43.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 + go.opentelemetry.io/otel/sdk v1.43.0 + go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/zap v1.27.1 golang.org/x/crypto v0.49.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 @@ -138,16 +138,16 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 8144029855c..97dff9dabc1 100644 --- a/go.sum +++ b/go.sum @@ -293,24 +293,24 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= -go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -357,10 +357,10 @@ google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 h1:JNfk58HZ8lfmXbYK2vx/UvsqIL59TzByCxPIX4TDmsE= google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:x5julN69+ED4PcFk/XWayw35O0lf/nGa4aNgODCmNmw= -google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 h1:CogIeEXn4qWYzzQU0QqvYBM8yDF9cFYzDq9ojSpv0Js= -google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 h1:ndE4FoJqsIceKP2oYSnUZqhTdYufCYYkqwtFzfrhI7w= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From f868e2c29680339fa9ab2b7af8782f37d288516a Mon Sep 17 00:00:00 2001 From: Anthony Accioly <1591739+aaccioly@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:54:18 +0100 Subject: [PATCH 103/156] docs(site): document macOS mounting requirements (#5263) --- site/content/docs/Mounting/_index.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/site/content/docs/Mounting/_index.md b/site/content/docs/Mounting/_index.md index 7f43046a3f1..8b393978b37 100644 --- a/site/content/docs/Mounting/_index.md +++ b/site/content/docs/Mounting/_index.md @@ -106,3 +106,15 @@ PS> kopia mount all Z: # mount successful Mounted 'all' on Z: Press Ctrl-C to unmount. ``` + +## macOS + +On macOS, the recommended option is `kopia mount --webdav` for a WebDAV-based mount. This does not require any +additional software to be installed. + +As an alternative, FUSE-based mounts with `kopia mount` can be achieved using [macFUSE](https://macfuse.github.io/) and +its kernel backend. Refer to the [macFUSE getting started guide](https://github.com/macfuse/macfuse/wiki/Getting-Started#kernel-backend) for the current installation requirements +for your macOS version and architecture. + +>NOTE: KopiaUI "Mount as Local Filesystem" button currently uses FUSE-based mount paths on macOS, thus it requires +>macFUSE to be installed. From 6784d0b59104a84aac1565b63983c7bdb8e9a57f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 12:03:17 -0700 Subject: [PATCH 104/156] build(deps): bump github.com/mocktools/go-smtp-mock/v2 (#5281) Bumps [github.com/mocktools/go-smtp-mock/v2](https://github.com/mocktools/go-smtp-mock) from 2.5.1 to 2.5.3. - [Release notes](https://github.com/mocktools/go-smtp-mock/releases) - [Changelog](https://github.com/mocktools/go-smtp-mock/blob/master/CHANGELOG.md) - [Commits](https://github.com/mocktools/go-smtp-mock/compare/v2.5.1...v2.5.3) --- updated-dependencies: - dependency-name: github.com/mocktools/go-smtp-mock/v2 dependency-version: 2.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index c0f103949e0..40674ab31b0 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 github.com/minio/minio-go/v7 v7.0.100 - github.com/mocktools/go-smtp-mock/v2 v2.5.1 + github.com/mocktools/go-smtp-mock/v2 v2.5.3 github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 diff --git a/go.sum b/go.sum index 97dff9dabc1..fdcb6c98f3c 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ github.com/minio/minio-go/v7 v7.0.100 h1:ShkWi8Tyj9RtU57OQB2HIXKz4bFgtVib0bbT1sb github.com/minio/minio-go/v7 v7.0.100/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= -github.com/mocktools/go-smtp-mock/v2 v2.5.1 h1:QcMJMChSgG1olVj4o6xxQFdrWzRjYNrcq660HAjd0wA= -github.com/mocktools/go-smtp-mock/v2 v2.5.1/go.mod h1:Rr8M2njlxx//l5INl2+uESnsL2lDsL24teEykCrGfmE= +github.com/mocktools/go-smtp-mock/v2 v2.5.3 h1:vO8NwtRiuXg+GjF+u2QCkEfkp1pt1ZpINJ9mD2DDoNQ= +github.com/mocktools/go-smtp-mock/v2 v2.5.3/go.mod h1:qBGjYXy5jKKVFhDnB39DYQfn4hWfcqWAlJTcvrku3rg= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-vss v1.2.1 h1:shspH0qgqZ9l5sfIRsXS5BgZXz25/BY+ZQsW0HlD0fM= @@ -266,7 +266,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 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/studio-b12/gowebdav v0.12.0 h1:kFRtQECt8jmVAvA6RHBz3geXUGJHUZA6/IKpOVUs5kM= From 6e9b4ab05345961adab74108a299ede6e6f00a3d Mon Sep 17 00:00:00 2001 From: Aaron Hastings Date: Tue, 7 Apr 2026 01:11:45 +0100 Subject: [PATCH 105/156] docs(site): Improve grammar and clarity in maintenance documentation (#5276) --- .../docs/Advanced/Maintenance/_index.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/site/content/docs/Advanced/Maintenance/_index.md b/site/content/docs/Advanced/Maintenance/_index.md index b5edbb58de3..425c67f593a 100644 --- a/site/content/docs/Advanced/Maintenance/_index.md +++ b/site/content/docs/Advanced/Maintenance/_index.md @@ -6,36 +6,36 @@ weight: 30 ## Maintenance -Kopia repositories require periodic maintenance to ensure best possible performance and optimal storage usage. +Kopia repositories require periodic maintenance to ensure the best possible performance and optimal storage usage. -Starting with v0.6.0 the repository maintenance is automatic and will happen occasionally when `kopia` command-line client is used. This document describes maintenance functionality in greater detail. +Starting with v0.6.0, the repository maintenance is automatic, and will happen occasionally when the `kopia` command-line client is used. This document describes the maintenance functionality in greater detail. ### Maintenance Tasks Kopia uses the following types of maintenance tasks: -* **Quick Maintenance Tasks** are primarily responsible for keeping the number of frequently accessed blobs (`q` and `n`) low to ensure good performance. +* **Quick Maintenance Tasks** are primarily responsible for keeping the number of frequently-accessed blobs (`q` and `n`) low to ensure good performance. Quick Maintenance will never delete any metadata from the repository without ensuring that another copy of the same metadata exists. Quick Maintenance Tasks are enabled by default and will execute approximately every hour. - While the user can disable quick maintenance, it's not recommended as it will lead to reduced performance. + While the user can disable quick maintenance, it's not recommended, as it will lead to reduced performance. * **Full Maintenance Tasks** are responsible for keeping the repository compact and eliminate deleted files that the user no longer wishes to store. - The most important task is Snapshot GC which marks for deletion all contents that are no longer reachable from any of the active snapshots. Full Maintenance is also responsible for compaction of data pack blobs (`p`) after contents stored in them have been deleted. Full Maintenance Tasks are enabled by default and will execute every 24 hours. + The most important task is Snapshot GC, which marks for deletion all contents that are no longer reachable from any of the active snapshots. Full Maintenance is also responsible for compaction of data pack blobs (`p`) after contents stored in them have been deleted. Full Maintenance Tasks are enabled by default and will execute every 24 hours. ### Maintenance Task Ownership For correctness reasons, Kopia requires that no more than one instance of certain maintenance operations runs at any given time. To achieve that, one repository `user@hostname` is designated as the Maintenance Owner. Other repository users will not attempt to run maintenance automatically and the designated user will attempt to do so after holding an exclusive lock. -To see the current maintenance owner use `kopia maintenance info` command: +To see the current maintenance owner, use the `kopia maintenance info` command: ``` $ kopia maintenance info Owner: root@myhost ``` -To change the maintenance owner to either current user or another user use `kopia maintenance set` command: +To change the maintenance owner to either current user or another user, use the `kopia maintenance set` command: ``` $ kopia maintenance set --owner=me @@ -58,7 +58,7 @@ $ kopia maintenance set --quick-interval=2h $ kopia maintenance set --full-interval=8h ``` -It is also possible to pause quick or full maintenance for some time so that it automatically resumes after specified time elapses. To change the quick or full maintenance for some time use: +It is also possible to pause quick or full maintenance for some time so that it automatically resumes after the specified time elapses. To change the quick or full maintenance for a period of time, use: ``` $ kopia maintenance set --pause-quick=48h @@ -67,7 +67,7 @@ $ kopia maintenance set --pause-full=268h ### Manually Running Maintenance -To run maintenance manually use `kopia maintenance run`: +To run maintenance manually, use the `kopia maintenance run` command: ``` # quick maintenance @@ -81,11 +81,11 @@ The current user must be the maintenance owner. ### Maintenance Safety -Kopia's maintenance routine follows certain safety rules which rely on passage of time to ensure correctness. This is needed in case other Kopia clients are currently operating on the repository. To guarantee correctness, certain length of time must pass to ensure all caches and transient state are properly synchronized with the repository. Kopia must also account for eventual consistency delays introduced by the blob storage provider. +Kopia's maintenance routine follows certain safety rules which rely on the passage of time to ensure correctness. This is needed in case other Kopia clients are currently operating on the repository. To guarantee correctness, certain length of time must pass to ensure all caches and transient state are properly synchronized with the repository. Kopia must also account for eventual consistency delays introduced by the blob storage provider. -This means that effects of full maintenance are not immediate - it may take several hours and/or multiple maintenance cycles to remove blobs that are not in use. +This means that the effects of full maintenance are not immediate - it may take several hours and/or multiple maintenance cycles to remove blobs that are not in use. -Kopia 0.8 adds new flag that can be used to speed up full maintenance if the user can guarantee no kopia snapshots are being created. +Kopia 0.8 adds a new flag that can be used to speed up full maintenance if the user can guarantee no Kopia snapshots are being created. >WARNING: As the name implies, the `--safety=none` flag disables all safety features, so the user must ensure that no concurrent operations are happening and repository storage is properly in sync before attempting it. Failure to do so can introduce repository corruption. @@ -97,5 +97,5 @@ $ kopia maintenance run --full --safety=none ### Viewing Maintenance History -To view the history of maintenance operations use `kopia maintenance info`, which will display the history of last 5 maintenance runs. +To view the history of maintenance operations, use the `kopia maintenance info` command, which will display the history of the last 5 maintenance runs. From 632fb9bf342f6cc4861682a0314757f60faf49c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 17:13:51 -0700 Subject: [PATCH 106/156] build(deps): bump cloud.google.com/go/storage (#5290) Bumps the common-golang-dependencies group with 1 update: [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go). Updates `cloud.google.com/go/storage` from 1.61.3 to 1.62.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/storage/v1.61.3...spanner/v1.62.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.62.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 40674ab31b0..c671a8a5a52 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25.0 toolchain go1.25.8 require ( - cloud.google.com/go/storage v1.61.3 + cloud.google.com/go/storage v1.62.0 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -76,10 +76,10 @@ require ( require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.2 // indirect + cloud.google.com/go/auth v0.19.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.3 // indirect + cloud.google.com/go/iam v1.6.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect @@ -116,7 +116,7 @@ require ( github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.19.0 // indirect + github.com/googleapis/gax-go/v2 v2.20.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -146,7 +146,7 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 // indirect + google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index fdcb6c98f3c..50cb2262be1 100644 --- a/go.sum +++ b/go.sum @@ -2,22 +2,22 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= -cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= +cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= +cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= -cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= +cloud.google.com/go/iam v1.6.0 h1:JiSIcEi38dWBKhB3BtfKCW+dMvCZJEhBA2BsaGJgoxs= +cloud.google.com/go/iam v1.6.0/go.mod h1:ZS6zEy7QHmcNO18mjO2viYv/n+wOUkhJqGNkPPGueGU= cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= -cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= +cloud.google.com/go/storage v1.62.0 h1:w2pQJhpUqVerMON45vatE2FpCYsNTf7OHjkn6ux5mMU= +cloud.google.com/go/storage v1.62.0/go.mod h1:T5hz3qzcpnxZ5LdKc7y8Tw7lh4v9zeeVyrD/cLJAzZU= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -153,8 +153,8 @@ 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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.19.0 h1:fYQaUOiGwll0cGj7jmHT/0nPlcrZDFPrZRhTsoCr8hE= -github.com/googleapis/gax-go/v2 v2.19.0/go.mod h1:w2ROXVdfGEVFXzmlciUU4EdjHgWvB5h2n6x/8XSTTJA= +github.com/googleapis/gax-go/v2 v2.20.0 h1:NIKVuLhDlIV74muWlsMM4CcQZqN6JJ20Qcxd9YMuYcs= +github.com/googleapis/gax-go/v2 v2.20.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -298,8 +298,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bT go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 h1:lSZHgNHfbmQTPfuTmWVkEu8J8qXaQwuV30pjCcAUvP8= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0/go.mod h1:so9ounLcuoRDu033MW/E0AD4hhUjVqswrMF5FoZlBcw= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= @@ -354,8 +354,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= -google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 h1:JNfk58HZ8lfmXbYK2vx/UvsqIL59TzByCxPIX4TDmsE= -google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:x5julN69+ED4PcFk/XWayw35O0lf/nGa4aNgODCmNmw= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= From 0661f65703fd0dfdd1f367a3e369a9e876ca6798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Mon, 6 Apr 2026 21:38:59 -0700 Subject: [PATCH 107/156] chore(cli): handle potential conversion overflow when setting progress default (#5271) --- cli/cli_progress.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cli/cli_progress.go b/cli/cli_progress.go index 3b4d689c1de..02a1d5170be 100644 --- a/cli/cli_progress.go +++ b/cli/cli_progress.go @@ -31,9 +31,10 @@ type progressFlags struct { } func (p *progressFlags) setup(svc appServices, app *kingpin.Application) { - progressDefault := "true" - if !term.IsTerminal(int(os.Stdout.Fd())) { - progressDefault = "false" + progressDefault := "false" + + if fd, err := intFd(os.Stdout); err == nil && term.IsTerminal(fd) { + progressDefault = "true" } app.Flag("progress", "Enable progress output").Default(progressDefault).BoolVar(&p.enableProgress) From 0e8cded33b89fa1936964b2ba65cdf93f5610cc5 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Mon, 6 Apr 2026 21:42:20 -0700 Subject: [PATCH 108/156] feat(ui): upgraded htmlui to the latest version (#5291) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c671a8a5a52..e81ee9101ca 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749 + github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-isatty v0.0.20 diff --git a/go.sum b/go.sum index 50cb2262be1..352e780fdce 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749 h1:suKuaahbCpZlbTA7KbPu2kHWKz1yCvtgg4uWjstZzQw= -github.com/kopia/htmluibuild v0.0.1-0.20260402222501-e7bd71989749/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f h1:6MNle2yDlSjyMjHr5XCvbmsGwZPKeOxKaPXAJQo946I= +github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From 9833e92eb002706377b08ff9359c0b57a0cc1a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 7 Apr 2026 23:32:11 -0700 Subject: [PATCH 109/156] build(deps): Go 1.25.9 (#5297) --- .github/workflows/lint.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 18605fd59bf..13429542a5d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -37,7 +37,7 @@ jobs: uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 with: cache: false - go-version-input: '1.25.8' + go-version-input: '1.25.9' # An explicit Go version is needed for govulncheck-action since internally # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' # directive in the 'go.mod' file. diff --git a/go.mod b/go.mod index e81ee9101ca..62f7fcdea4e 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25.0 -toolchain go1.25.8 +toolchain go1.25.9 require ( cloud.google.com/go/storage v1.62.0 From 66b320a710eebbaab21770deaee1bffa1e5a9b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 8 Apr 2026 21:04:36 -0700 Subject: [PATCH 110/156] refactor(testing): prefer assert.NoError (#5299) --- repo/format/format_blob_test.go | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/repo/format/format_blob_test.go b/repo/format/format_blob_test.go index ab454ea97bf..c917d79f5a8 100644 --- a/repo/format/format_blob_test.go +++ b/repo/format/format_blob_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/pkg/errors" + "github.com/stretchr/testify/assert" "github.com/kopia/kopia/internal/blobtesting" "github.com/kopia/kopia/internal/gather" @@ -29,19 +30,19 @@ func TestFormatBlobRecovery(t *testing.T) { t.Errorf("unexpected checksummed length: %v, want %v", got, want) } - assertNoError(t, st.PutBlob(ctx, "some-blob-by-itself", gather.FromSlice(checksummed), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "some-blob-suffix", gather.FromSlice(append(append([]byte(nil), 1, 2, 3), checksummed...)), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "some-blob-prefix", gather.FromSlice(append(append([]byte(nil), checksummed...), 1, 2, 3)), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "some-blob-by-itself", gather.FromSlice(checksummed), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "some-blob-suffix", gather.FromSlice(append(append([]byte(nil), 1, 2, 3), checksummed...)), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "some-blob-prefix", gather.FromSlice(append(append([]byte(nil), checksummed...), 1, 2, 3)), blob.PutOptions{})) // mess up checksum checksummed[len(checksummed)-3] ^= 1 - assertNoError(t, st.PutBlob(ctx, "bad-checksum", gather.FromSlice(checksummed), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "zero-len", gather.FromSlice([]byte{}), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "one-len", gather.FromSlice([]byte{1}), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "two-len", gather.FromSlice([]byte{1, 2}), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "three-len", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "four-len", gather.FromSlice([]byte{1, 2, 3, 4}), blob.PutOptions{})) - assertNoError(t, st.PutBlob(ctx, "five-len", gather.FromSlice([]byte{1, 2, 3, 4, 5}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "bad-checksum", gather.FromSlice(checksummed), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "zero-len", gather.FromSlice([]byte{}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "one-len", gather.FromSlice([]byte{1}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "two-len", gather.FromSlice([]byte{1, 2}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "three-len", gather.FromSlice([]byte{1, 2, 3}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "four-len", gather.FromSlice([]byte{1, 2, 3, 4}), blob.PutOptions{})) + assert.NoError(t, st.PutBlob(ctx, "five-len", gather.FromSlice([]byte{1, 2, 3, 4, 5}), blob.PutOptions{})) cases := []struct { blobID blob.ID @@ -75,11 +76,3 @@ func TestFormatBlobRecovery(t *testing.T) { }) } } - -func assertNoError(t *testing.T, err error) { - t.Helper() - - if err != nil { - t.Errorf("err: %v", err) - } -} From 956bc4931020da78821eb7b35b734c34b5d58e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Wed, 8 Apr 2026 22:52:18 -0700 Subject: [PATCH 111/156] chore(ci): generate govulncheck SARIF report (#5300) * chore(ci): generate govulncheck SARIF report - Generate and uploads govulncheck SARIF report. - Invoke govulncheck directly instead of using the govulncheck-action. This also has the benefit of using the same Go version from the go.mod file, without having to explicitly specify it and update it in the workflow file. - Specify workflow and job permissions --- .github/workflows/lint.yml | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 13429542a5d..b693a0a4093 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,6 +16,8 @@ env: ENABLE_UNICODE_FILENAMES: ${{ secrets.ENABLE_UNICODE_FILENAMES }} # set (to any value other than false) to trigger very long filenames testing ENABLE_LONG_FILENAMES: ${{ secrets.ENABLE_LONG_FILENAMES }} +permissions: + contents: read jobs: build: strategy: @@ -24,6 +26,8 @@ jobs: os: [ubuntu-latest, macos-latest] name: Lint runs-on: ${{ matrix.os }} + permissions: + security-events: write steps: - name: Check out repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -34,15 +38,18 @@ jobs: with: go-version-file: 'go.mod' - id: govulncheck - uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4 + name: govulncheck + # generate report and then fail if issues are found + run: | + go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 + govulncheck -format sarif > govulncheck.sarif + govulncheck + - id: govulncheck-results + if: ${{ always() }} + name: "Upload govulncheck results to dashboard" + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 with: - cache: false - go-version-input: '1.25.9' - # An explicit Go version is needed for govulncheck-action since internally - # it uses an outdated setup-go@v5.0 action that does not respect the 'toolchain' - # directive in the 'go.mod' file. - #go-version-file: 'go.mod' - repo-checkout: false + sarif_file: govulncheck.sarif - name: Lint run: make lint - name: Check Locks From e1dce8a049c994eaf5f3ace5fdc53aa2c66886e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:26:02 -0700 Subject: [PATCH 112/156] fix(repository): sync index blob file before closing (#5292) - Sync index blob file before closing - Ensure file is closed even when there are errors - Remove temp file on error - Make writeTempFileAtomic testable - Test writeTempFile atomic --- .../committed_content_index_disk_cache.go | 26 -- repo/content/write_temp_file.go | 86 ++++++ repo/content/write_temp_file_test.go | 253 ++++++++++++++++++ 3 files changed, 339 insertions(+), 26 deletions(-) create mode 100644 repo/content/write_temp_file.go create mode 100644 repo/content/write_temp_file_test.go diff --git a/repo/content/committed_content_index_disk_cache.go b/repo/content/committed_content_index_disk_cache.go index 6a65908c920..d4aa2d2727f 100644 --- a/repo/content/committed_content_index_disk_cache.go +++ b/repo/content/committed_content_index_disk_cache.go @@ -10,7 +10,6 @@ import ( "github.com/pkg/errors" "github.com/kopia/kopia/internal/blobparam" - "github.com/kopia/kopia/internal/cache" "github.com/kopia/kopia/internal/contentlog" "github.com/kopia/kopia/internal/contentlog/logparam" "github.com/kopia/kopia/internal/gather" @@ -95,31 +94,6 @@ func (c *diskCommittedContentIndexCache) addContentToCache(ctx context.Context, return nil } -func writeTempFileAtomic(dirname string, data []byte) (string, error) { - // write to a temp file to avoid race where two processes are writing at the same time. - tf, err := os.CreateTemp(dirname, "tmp") - if err != nil { - if os.IsNotExist(err) { - os.MkdirAll(dirname, cache.DirMode) //nolint:errcheck - tf, err = os.CreateTemp(dirname, "tmp") - } - } - - if err != nil { - return "", errors.Wrap(err, "can't create tmp file") - } - - if _, err := tf.Write(data); err != nil { - return "", errors.Wrap(err, "can't write to temp file") - } - - if err := tf.Close(); err != nil { - return "", errors.New("can't close tmp file") - } - - return tf.Name(), nil -} - func (c *diskCommittedContentIndexCache) expireUnused(ctx context.Context, used []blob.ID) error { contentlog.Log2(ctx, c.log, "expireUnused", blobparam.BlobIDList("except", used), diff --git a/repo/content/write_temp_file.go b/repo/content/write_temp_file.go new file mode 100644 index 00000000000..78d7648c45c --- /dev/null +++ b/repo/content/write_temp_file.go @@ -0,0 +1,86 @@ +package content + +import ( + stderrors "errors" + "io" + "io/fs" + "os" + + "github.com/pkg/errors" + + "github.com/kopia/kopia/internal/cache" +) + +type file interface { + io.WriteCloser + Name() string + Sync() error +} + +type fsInterface interface { + CreateTemp(dir, pattern string) (file, error) + Remove(name string) error + MkdirAll(path string, perm fs.FileMode) error +} + +type localFS struct{} + +func (l localFS) CreateTemp(dir, pattern string) (file, error) { + return os.CreateTemp(dir, pattern) //nolint:wrapcheck +} + +func (l localFS) Remove(name string) error { + return os.Remove(name) //nolint:wrapcheck +} + +func (l localFS) MkdirAll(dirPath string, perm fs.FileMode) error { + return os.MkdirAll(dirPath, perm) //nolint:wrapcheck +} + +func writeTempFileAtomic(dirname string, data []byte) (filename string, err error) { + return writeTempFileAtomicImp(localFS{}, dirname, data) +} + +func writeTempFileAtomicImp(fsi fsInterface, dirname string, data []byte) (filename string, err error) { + // write to a temp file to avoid race where two processes are writing at the same time. + tf, err2 := fsi.CreateTemp(dirname, "tmp") + if err2 != nil { + if os.IsNotExist(err2) { + if mdErr := fsi.MkdirAll(dirname, cache.DirMode); mdErr != nil { + return "", stderrors.Join(errors.Wrap(mdErr, "cannot create parent directory for temp file"), + errors.Wrap(err2, "cannot create temp file")) + } + + tf, err2 = fsi.CreateTemp(dirname, "tmp") + } + } + + if err2 != nil { + return "", errors.Wrap(err2, "can't create tmp file") + } + + defer func() { + if cerr := tf.Close(); cerr != nil { + err = stderrors.Join(err, errors.Wrap(cerr, "can't close tmp file")) + } + + if err != nil { + // remove tmp file on error to avoid leaving them behind + if rerr := fsi.Remove(tf.Name()); rerr != nil { + err = stderrors.Join(err, errors.Wrap(rerr, "can't remove tmp file")) + } + + filename = "" + } + }() + + if _, err2 := tf.Write(data); err2 != nil { + return "", errors.Wrap(err2, "can't write to temp file") + } + + if err2 := tf.Sync(); err2 != nil { + return "", errors.Wrapf(err2, "cannot sync temporary file in dir %s", dirname) + } + + return tf.Name(), nil +} diff --git a/repo/content/write_temp_file_test.go b/repo/content/write_temp_file_test.go new file mode 100644 index 00000000000..e57bd9a3c2a --- /dev/null +++ b/repo/content/write_temp_file_test.go @@ -0,0 +1,253 @@ +package content + +import ( + "os" + "path/filepath" + "runtime" + "sync/atomic" + "testing" + + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +// TestWriteTempFileAtomic_HappyPath verifies that writeTempFileAtomic writes +// the expected content and returns a valid file path. +func TestWriteTempFileAtomic_HappyPath(t *testing.T) { + t.Parallel() + + dir := t.TempDir() + data := []byte("index-blob-content") + + name, err := writeTempFileAtomicImp(localFS{}, dir, data) + require.NoError(t, err) + require.NotEmpty(t, name) + + // File must exist under the given directory. + require.Equal(t, dir, filepath.Dir(name)) + + got, err := os.ReadFile(name) + require.NoError(t, err) + require.Equal(t, data, got) +} + +// TestWriteTempFileAtomic_EmptyData verifies that an empty payload is written +// without error and produces a valid (zero-byte) file. +func TestWriteTempFileAtomic_EmptyData(t *testing.T) { + t.Parallel() + + dir := t.TempDir() + + name, err := writeTempFileAtomicImp(localFS{}, dir, []byte{}) + require.NoError(t, err) + + info, err := os.Stat(name) + require.NoError(t, err) + require.EqualValues(t, 0, info.Size()) +} + +// TestWriteTempFileAtomic_CreatesDirectoryIfMissing verifies that +// writeTempFileAtomic creates the target directory when it does not exist, +// matching the MkdirAll fallback path. +func TestWriteTempFileAtomic_CreatesDirectoryIfMissing(t *testing.T) { + t.Parallel() + + // Use a path that does not yet exist. + dir := filepath.Join(t.TempDir(), "new", "nested", "dir") + + data := []byte("hello") + + name, err := writeTempFileAtomicImp(localFS{}, dir, data) + require.NoError(t, err) + require.Equal(t, dir, filepath.Dir(name)) + + got, err := os.ReadFile(name) + require.NoError(t, err) + require.Equal(t, data, got) +} + +// TestWriteTempFileAtomic_NonExistentDirUnwritable verifies that an error is +// returned when the directory cannot be created (e.g. parent is read-only). +// Skipped on platforms where root may bypass permissions. +func TestWriteTempFileAtomic_NonExistentDirUnwritable(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("does not work on windows due to chmod") + } + + if os.Getuid() == 0 { + t.Skip("skipping permission test when running as root") + } + + t.Parallel() + + // Create a read-only parent so that MkdirAll cannot create the child. + parent := t.TempDir() + require.NoError(t, os.Chmod(parent, 0o555)) + + t.Cleanup(func() { os.Chmod(parent, 0o755) }) //nolint:errcheck + + dir := filepath.Join(parent, "child") + + _, err := writeTempFileAtomicImp(localFS{}, dir, []byte("data")) + require.Error(t, err) + require.Contains(t, err.Error(), "cannot create parent directory for temp file") +} + +type mockFileSynced struct { + file + + synced atomic.Bool +} + +func (mf *mockFileSynced) Write(p []byte) (n int, err error) { + mf.synced.Store(false) + + return mf.file.Write(p) +} + +func (mf *mockFileSynced) Sync() error { + err := mf.file.Sync() + if err == nil { + mf.synced.Store(true) + } + + return err +} + +// TestWriteTempFileAtomic_FileIsSynced verifies that Sync is called after +// writing data to the temporary file. +func TestWriteTempFileAtomic_FileIsSynced(t *testing.T) { + t.Parallel() + + var mockedFile mockFileSynced + + dir := t.TempDir() + data := []byte("synced-content") + + mfs := mockfs{ + createWrapper: func(f file) file { + mockedFile.file = f + + return &mockedFile + }, + } + + name, err := writeTempFileAtomicImp(mfs, dir, data) + require.NoError(t, err) + require.True(t, mockedFile.synced.Load()) + + // Open a new handle to avoid OS read-cache of the same descriptor. + b, err := os.ReadFile(name) + require.NoError(t, err) + require.Equal(t, data, b) +} + +// TestWriteTempFileAtomic_NoTempFilesLeft verifies that writeTempFileAtomic +// does not leak the temporary file after a successful call — the caller is +// expected to rename it, but the file descriptor must already be closed. +// We confirm this indirectly: the returned path must be stat-able (file +// exists and is closed) with no other tmp* siblings beyond the returned one. +func TestWriteTempFileAtomic_NoTempFilesLeft(t *testing.T) { + t.Parallel() + + dir := t.TempDir() + + name, err := writeTempFileAtomicImp(localFS{}, dir, []byte("data")) + require.NoError(t, err) + + entries, err := os.ReadDir(dir) + require.NoError(t, err) + + // Only one file should exist: the one returned. + require.Len(t, entries, 1) + require.Equal(t, filepath.Base(name), entries[0].Name()) +} + +type mockfs struct { + localFS + + createWrapper func(file) file +} + +func (m mockfs) CreateTemp(dir, pattern string) (file, error) { + f, err := m.localFS.CreateTemp(dir, pattern) + + if m.createWrapper != nil { + f = m.createWrapper(f) + } + + return f, err +} + +type mockFileWriteError struct { + file +} + +func (mf mockFileWriteError) Write(p []byte) (n int, err error) { + return 0, errors.New("mock file write error") +} + +type mockFileSyncError struct { + file +} + +func (mf mockFileSyncError) Sync() error { + return errors.New("mock file sync error") +} + +type mockFileCloseError struct { + file +} + +func (mf mockFileCloseError) Close() error { + if err := mf.file.Close(); err != nil { + return err + } + + return errors.New("mock file close error") +} + +// TestWriteTempFileAtomic_NoTempFilesLeftOnError verifies that writeTempFileAtomic +// does not leak the temporary file after a write, sync, or close error. +func TestWriteTempFileAtomic_NoTempFilesLeftOnError(t *testing.T) { + t.Parallel() + + cases := []struct { + mockfs + description string + }{ + { + description: "write-error", + mockfs: mockfs{ + createWrapper: func(f file) file { return mockFileWriteError{file: f} }, + }, + }, + { + description: "sync-error", + mockfs: mockfs{ + createWrapper: func(f file) file { return mockFileSyncError{file: f} }, + }, + }, + { + description: "close-error", + mockfs: mockfs{ + createWrapper: func(f file) file { return mockFileCloseError{file: f} }, + }, + }, + } + + for _, c := range cases { + t.Run(c.description, func(t *testing.T) { + dir := t.TempDir() + + name, err := writeTempFileAtomicImp(c.mockfs, dir, []byte("data")) + require.Error(t, err) + require.Empty(t, name) + t.Log("error:", err) + + entries, err := os.ReadDir(dir) + require.NoError(t, err) + require.Empty(t, entries) + }) + } +} From 2a8ac65be4398019d97e5abfc6ed9fbdca959b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Fri, 10 Apr 2026 21:34:17 -0700 Subject: [PATCH 113/156] refactor(general): make counters and size stats uint64 for consistency (#5262) - make counters and size stats uint64 for consistency - pass `deleteParallelism` as a parameter --- internal/epoch/epoch_manager.go | 49 +++++++++---------- internal/epoch/epoch_manager_test.go | 30 ++++++------ repo/maintenance/blob_retain.go | 6 +-- repo/maintenance/blob_retain_test.go | 4 +- repo/maintenance/cleanup_logs.go | 14 +++--- repo/maintenance/content_rewrite.go | 12 ++--- repo/maintenance/maintenance_run.go | 2 +- repo/maintenance/pack_gc.go | 12 ++--- repo/maintenancestats/stats_advance_epoch.go | 6 +-- repo/maintenancestats/stats_clean_up_log.go | 24 ++++----- .../maintenancestats/stats_cleanup_markers.go | 8 +-- .../stats_cleanup_superseded_indexes.go | 8 +-- .../stats_compact_single_epoch.go | 12 ++--- .../stats_delete_unreferenced_packs.go | 24 ++++----- .../stats_extend_blob_retention.go | 8 +-- .../stats_generate_range_checkpoint.go | 8 +-- .../stats_rewrite_contents.go | 24 ++++----- repo/maintenancestats/stats_snapshot_gc.go | 48 +++++++++--------- repo/maintenancestats/typconversion_test.go | 41 ++++++++++++++++ repo/maintenancestats/typeconversion.go | 23 +++++++++ snapshot/snapshotgc/gc.go | 24 ++++----- 21 files changed, 223 insertions(+), 164 deletions(-) create mode 100644 repo/maintenancestats/typconversion_test.go create mode 100644 repo/maintenancestats/typeconversion.go diff --git a/internal/epoch/epoch_manager.go b/internal/epoch/epoch_manager.go index 7cbf6674331..7e075817d35 100644 --- a/internal/epoch/epoch_manager.go +++ b/internal/epoch/epoch_manager.go @@ -320,18 +320,18 @@ func (e *Manager) cleanupInternal(ctx context.Context, cs CurrentSnapshot, p *Pa // may have not observed them yet. maxReplacementTime := maxTime.Add(-p.CleanupSafetyMargin) - var deletedEpochMarkersCount, deletedWatermarksCount atomic.Int64 + var deletedEpochMarkersCount, deletedWatermarksCount atomic.Uint64 eg.Go(func() error { - deleted, err := e.cleanupEpochMarkers(ctx, cs) - deletedEpochMarkersCount.Store(int64(deleted)) + deleted, err := e.cleanupEpochMarkers(ctx, cs, p.DeleteParallelism) + deletedEpochMarkersCount.Store(deleted) return err }) eg.Go(func() error { - deleted, err := e.cleanupWatermarks(ctx, cs, p, maxReplacementTime) - deletedWatermarksCount.Store(int64(deleted)) + deleted, err := e.cleanupWatermarks(ctx, cs, maxReplacementTime, p.DeleteParallelism) + deletedWatermarksCount.Store(deleted) return err }) @@ -341,14 +341,14 @@ func (e *Manager) cleanupInternal(ctx context.Context, cs CurrentSnapshot, p *Pa } result := &maintenancestats.CleanupMarkersStats{ - DeletedEpochMarkerBlobCount: int(deletedEpochMarkersCount.Load()), - DeletedWatermarkBlobCount: int(deletedWatermarksCount.Load()), + DeletedEpochMarkerBlobCount: deletedEpochMarkersCount.Load(), + DeletedWatermarkBlobCount: deletedWatermarksCount.Load(), } return result, nil } -func (e *Manager) cleanupEpochMarkers(ctx context.Context, cs CurrentSnapshot) (int, error) { +func (e *Manager) cleanupEpochMarkers(ctx context.Context, cs CurrentSnapshot, deleteParallelism int) (uint64, error) { // delete epoch markers for epoch < current-1 var toDelete []blob.ID @@ -360,15 +360,10 @@ func (e *Manager) cleanupEpochMarkers(ctx context.Context, cs CurrentSnapshot) ( } } - p, err := e.getParameters(ctx) - if err != nil { - return 0, err - } - - return len(toDelete), errors.Wrap(blob.DeleteMultiple(ctx, e.st, toDelete, p.DeleteParallelism), "error deleting index blob marker") + return uint64(len(toDelete)), errors.Wrap(blob.DeleteMultiple(ctx, e.st, toDelete, deleteParallelism), "error deleting index blob marker") } -func (e *Manager) cleanupWatermarks(ctx context.Context, cs CurrentSnapshot, p *Parameters, maxReplacementTime time.Time) (int, error) { +func (e *Manager) cleanupWatermarks(ctx context.Context, cs CurrentSnapshot, maxReplacementTime time.Time, deleteParallelism int) (uint64, error) { var toDelete []blob.ID for _, bm := range cs.DeletionWatermarkBlobs { @@ -386,7 +381,7 @@ func (e *Manager) cleanupWatermarks(ctx context.Context, cs CurrentSnapshot, p * } } - return len(toDelete), errors.Wrap(blob.DeleteMultiple(ctx, e.st, toDelete, p.DeleteParallelism), "error deleting watermark blobs") + return uint64(len(toDelete)), errors.Wrap(blob.DeleteMultiple(ctx, e.st, toDelete, deleteParallelism), "error deleting watermark blobs") } // CleanupSupersededIndexes cleans up the indexes which have been superseded by compacted ones. @@ -426,13 +421,13 @@ func (e *Manager) CleanupSupersededIndexes(ctx context.Context) (*maintenancesta var toDelete []blob.ID - var deletedTotalSize int64 + var deletedTotalSize uint64 for _, bm := range blobs { if epoch, ok := epochNumberFromBlobID(bm.BlobID); ok { if blobSetWrittenEarlyEnough(cs.SingleEpochCompactionSets[epoch], maxReplacementTime) { toDelete = append(toDelete, bm.BlobID) - deletedTotalSize += bm.Length + deletedTotalSize += maintenancestats.ToUint64(bm.Length) } } } @@ -443,7 +438,7 @@ func (e *Manager) CleanupSupersededIndexes(ctx context.Context) (*maintenancesta return &maintenancestats.CleanupSupersededIndexesStats{ MaxReplacementTime: maxReplacementTime, - DeletedBlobCount: len(toDelete), + DeletedBlobCount: uint64(len(toDelete)), DeletedTotalSize: deletedTotalSize, }, nil } @@ -613,8 +608,8 @@ func (e *Manager) MaybeGenerateRangeCheckpoint(ctx context.Context) (*maintenanc } return &maintenancestats.GenerateRangeCheckpointStats{ - RangeMinEpoch: firstNonRangeCompacted, - RangeMaxEpoch: latestSettled, + RangeMinEpoch: maintenancestats.ToUint64(firstNonRangeCompacted), + RangeMaxEpoch: maintenancestats.ToUint64(latestSettled), }, nil } @@ -751,7 +746,7 @@ func (e *Manager) MaybeAdvanceWriteEpoch(ctx context.Context) (*maintenancestats e.mu.Unlock() result := &maintenancestats.AdvanceEpochStats{ - CurrentEpoch: cs.WriteEpoch, + CurrentEpoch: maintenancestats.ToUint64(cs.WriteEpoch), } if shouldAdvance(cs.UncompactedEpochSets[cs.WriteEpoch], p.MinEpochDuration, p.EpochAdvanceOnCountThreshold, p.EpochAdvanceOnTotalSizeBytesThreshold) { @@ -759,7 +754,7 @@ func (e *Manager) MaybeAdvanceWriteEpoch(ctx context.Context) (*maintenancestats return nil, errors.Wrap(err, "error advancing epoch") } - result.CurrentEpoch = cs.WriteEpoch + 1 + result.CurrentEpoch = maintenancestats.ToUint64(cs.WriteEpoch + 1) result.WasAdvanced = true } @@ -1043,15 +1038,15 @@ func (e *Manager) MaybeCompactSingleEpoch(ctx context.Context) (*maintenancestat uncompactedBlobs = ue } - var uncompactedSize int64 + var uncompactedSize uint64 for _, b := range uncompactedBlobs { - uncompactedSize += b.Length + uncompactedSize += maintenancestats.ToUint64(b.Length) } result := &maintenancestats.CompactSingleEpochStats{ - SupersededIndexBlobCount: len(uncompactedBlobs), + SupersededIndexBlobCount: uint64(len(uncompactedBlobs)), SupersededIndexTotalSize: uncompactedSize, - Epoch: uncompacted, + Epoch: maintenancestats.ToUint64(uncompacted), } contentlog.Log1(ctx, e.log, "starting single-epoch compaction for epoch", result) diff --git a/internal/epoch/epoch_manager_test.go b/internal/epoch/epoch_manager_test.go index 098205ea558..a1bc48bcbc4 100644 --- a/internal/epoch/epoch_manager_test.go +++ b/internal/epoch/epoch_manager_test.go @@ -624,7 +624,7 @@ func TestMaybeAdvanceEpoch_Empty(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, 0, stats.CurrentEpoch) + require.EqualValues(t, 0, stats.CurrentEpoch) require.False(t, stats.WasAdvanced) // check current epoch again @@ -674,7 +674,7 @@ func TestMaybeAdvanceEpoch(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, 1, stats.CurrentEpoch) + require.EqualValues(t, 1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) // force state refresh @@ -947,7 +947,7 @@ func TestMaybeCompactSingleEpoch_CompactionError(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, j+1, stats.CurrentEpoch) + require.EqualValues(t, j+1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) // force state refresh @@ -1000,7 +1000,7 @@ func TestMaybeCompactSingleEpoch(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, j+1, stats.CurrentEpoch) + require.EqualValues(t, j+1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) // force state refresh @@ -1024,8 +1024,8 @@ func TestMaybeCompactSingleEpoch(t *testing.T) { for j := range newestEpochToCompact { stats, err := te.mgr.MaybeCompactSingleEpoch(ctx) require.NoError(t, err) - require.Equal(t, idxCount, stats.SupersededIndexBlobCount) - require.Equal(t, j, stats.Epoch) + require.EqualValues(t, idxCount, stats.SupersededIndexBlobCount) + require.EqualValues(t, j, stats.Epoch) err = te.mgr.Refresh(ctx) // force state refresh require.NoError(t, err) @@ -1127,7 +1127,7 @@ func TestMaybeGenerateRangeCheckpoint_CompactionError(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, j+1, stats.CurrentEpoch) + require.EqualValues(t, j+1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) @@ -1178,7 +1178,7 @@ func TestMaybeGenerateRangeCheckpoint_FromUncompactedEpochs(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, j+1, stats.CurrentEpoch) + require.EqualValues(t, j+1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) @@ -1193,8 +1193,8 @@ func TestMaybeGenerateRangeCheckpoint_FromUncompactedEpochs(t *testing.T) { stats, err := te.mgr.MaybeGenerateRangeCheckpoint(ctx) require.NoError(t, err) - require.Equal(t, 0, stats.RangeMinEpoch) - require.Equal(t, 8, stats.RangeMaxEpoch) + require.EqualValues(t, 0, stats.RangeMinEpoch) + require.EqualValues(t, 8, stats.RangeMaxEpoch) err = te.mgr.Refresh(ctx) require.NoError(t, err) @@ -1233,7 +1233,7 @@ func TestMaybeGenerateRangeCheckpoint_FromCompactedEpochs(t *testing.T) { stats, err := te.mgr.MaybeAdvanceWriteEpoch(ctx) require.NoError(t, err) - require.Equal(t, j+1, stats.CurrentEpoch) + require.EqualValues(t, j+1, stats.CurrentEpoch) require.True(t, stats.WasAdvanced) err = te.mgr.Refresh(ctx) @@ -1250,8 +1250,8 @@ func TestMaybeGenerateRangeCheckpoint_FromCompactedEpochs(t *testing.T) { for j := range newestEpochToCompact { stats, err := te.mgr.MaybeCompactSingleEpoch(ctx) require.NoError(t, err) - require.Equal(t, idxCount, stats.SupersededIndexBlobCount) - require.Equal(t, j, stats.Epoch) + require.EqualValues(t, idxCount, stats.SupersededIndexBlobCount) + require.EqualValues(t, j, stats.Epoch) err = te.mgr.Refresh(ctx) // force state refresh require.NoError(t, err) @@ -1270,8 +1270,8 @@ func TestMaybeGenerateRangeCheckpoint_FromCompactedEpochs(t *testing.T) { stats, err := te.mgr.MaybeGenerateRangeCheckpoint(ctx) require.NoError(t, err) - require.Equal(t, 0, stats.RangeMinEpoch) - require.Equal(t, 8, stats.RangeMaxEpoch) + require.EqualValues(t, 0, stats.RangeMinEpoch) + require.EqualValues(t, 8, stats.RangeMaxEpoch) err = te.mgr.Refresh(ctx) require.NoError(t, err) diff --git a/repo/maintenance/blob_retain.go b/repo/maintenance/blob_retain.go index 8c45bf541ea..89f5bf5c880 100644 --- a/repo/maintenance/blob_retain.go +++ b/repo/maintenance/blob_retain.go @@ -56,7 +56,7 @@ func extendBlobRetentionTime(ctx context.Context, rep repo.DirectRepositoryWrite var ( wg errgroup.Group - extendedCount, toExtend, failedCount atomic.Uint32 + extendedCount, toExtend, failedCount atomic.Uint64 ) if opt.Parallel == 0 { @@ -79,7 +79,7 @@ func extendBlobRetentionTime(ctx context.Context, rep repo.DirectRepositoryWrite } if currentCount := extendedCount.Add(1); currentCount%100 == 0 { - contentlog.Log1(ctx, log, "extended blobs", logparam.UInt32("count", currentCount)) + contentlog.Log1(ctx, log, "extended blobs", logparam.UInt64("count", currentCount)) } } @@ -100,7 +100,7 @@ func extendBlobRetentionTime(ctx context.Context, rep repo.DirectRepositoryWrite close(extend) - contentlog.Log1(ctx, log, "Found blobs to extend", logparam.UInt32("count", toExtend.Load())) + contentlog.Log1(ctx, log, "Found blobs to extend", logparam.UInt64("count", toExtend.Load())) errWait := wg.Wait() // wait for all extend workers to finish. impossible.PanicOnError(errWait) diff --git a/repo/maintenance/blob_retain_test.go b/repo/maintenance/blob_retain_test.go index 4d78cb16e7a..154fc533678 100644 --- a/repo/maintenance/blob_retain_test.go +++ b/repo/maintenance/blob_retain_test.go @@ -73,8 +73,8 @@ func (s *formatSpecificTestSuite) TestExtendBlobRetentionTime(t *testing.T) { // extend retention time of all blobs stats, err := maintenance.ExtendBlobRetentionTime(ctx, env.RepositoryWriter, maintenance.ExtendBlobRetentionTimeOptions{}) require.NoError(t, err) - require.Equal(t, uint32(4), stats.ToExtendBlobCount) - require.Equal(t, uint32(4), stats.ExtendedBlobCount) + require.EqualValues(t, 4, stats.ToExtendBlobCount) + require.EqualValues(t, 4, stats.ExtendedBlobCount) require.Equal(t, "24h0m0s", stats.RetentionPeriod) gotMode, expiry, err = st.GetRetention(ctx, blobsBefore[lastBlobIdx].BlobID) diff --git a/repo/maintenance/cleanup_logs.go b/repo/maintenance/cleanup_logs.go index fb74131c64e..cb5982cb171 100644 --- a/repo/maintenance/cleanup_logs.go +++ b/repo/maintenance/cleanup_logs.go @@ -64,14 +64,14 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe return allLogBlobs[i].Timestamp.After(allLogBlobs[j].Timestamp) }) - var retainedSize int64 + var retainedSize uint64 deletePosition := len(allLogBlobs) for i, bm := range allLogBlobs { - retainedSize += bm.Length + retainedSize += maintenancestats.ToUint64(bm.Length) - if retainedSize > opt.MaxTotalSize && opt.MaxTotalSize > 0 { + if opt.MaxTotalSize > 0 && retainedSize > uint64(opt.MaxTotalSize) { deletePosition = i break } @@ -89,15 +89,15 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe toDelete := allLogBlobs[deletePosition:] - var toDeleteSize int64 + var toDeleteSize uint64 for _, bm := range toDelete { - toDeleteSize += bm.Length + toDeleteSize += maintenancestats.ToUint64(bm.Length) } result := &maintenancestats.CleanupLogsStats{ - RetainedBlobCount: deletePosition, + RetainedBlobCount: maintenancestats.ToUint64(deletePosition), RetainedBlobSize: retainedSize, - ToDeleteBlobCount: len(toDelete), + ToDeleteBlobCount: maintenancestats.ToUint64(len(toDelete)), ToDeleteBlobSize: toDeleteSize, DeletedBlobCount: 0, DeletedBlobSize: 0, diff --git a/repo/maintenance/content_rewrite.go b/repo/maintenance/content_rewrite.go index c94ad11175d..95d4fa5e6f5 100644 --- a/repo/maintenance/content_rewrite.go +++ b/repo/maintenance/content_rewrite.go @@ -142,12 +142,12 @@ func RewriteContents(ctx context.Context, rep repo.DirectRepositoryWriter, opt * rewrittenCount, rewrittenBytes := rewritten.Approximate() result := &maintenancestats.RewriteContentsStats{ - ToRewriteContentCount: int(toRewriteCount), - ToRewriteContentSize: toRewriteBytes, - RewrittenContentCount: int(rewrittenCount), - RewrittenContentSize: rewrittenBytes, - RetainedContentCount: int(retainedCount), - RetainedContentSize: retainedBytes, + ToRewriteContentCount: uint64(toRewriteCount), + ToRewriteContentSize: maintenancestats.ToUint64(toRewriteBytes), + RewrittenContentCount: uint64(rewrittenCount), + RewrittenContentSize: maintenancestats.ToUint64(rewrittenBytes), + RetainedContentCount: uint64(retainedCount), + RetainedContentSize: maintenancestats.ToUint64(retainedBytes), } contentlog.Log1(ctx, log, "Rewritten contents", result) diff --git a/repo/maintenance/maintenance_run.go b/repo/maintenance/maintenance_run.go index ac942b67a30..c733cea05eb 100644 --- a/repo/maintenance/maintenance_run.go +++ b/repo/maintenance/maintenance_run.go @@ -334,7 +334,7 @@ func runTaskCleanupLogs(ctx context.Context, runParams RunParameters, s *Schedul return ReportRun(ctx, runParams.rep, TaskCleanupLogs, s, func() (maintenancestats.Kind, error) { stats, err := CleanupLogs(ctx, runParams.rep, runParams.Params.LogRetention.OrDefault()) - var deletedLogCount int + var deletedLogCount uint64 if stats != nil { deletedLogCount = stats.DeletedBlobCount } diff --git a/repo/maintenance/pack_gc.go b/repo/maintenance/pack_gc.go index f2e13ed52c3..9103fdae73d 100644 --- a/repo/maintenance/pack_gc.go +++ b/repo/maintenance/pack_gc.go @@ -147,10 +147,10 @@ func DeleteUnreferencedPacks(ctx context.Context, rep repo.DirectRepositoryWrite retainedCount, retainedSize := retained.Approximate() result := &maintenancestats.DeleteUnreferencedPacksStats{ - UnreferencedPackCount: unreferencedCount, - UnreferencedTotalSize: unreferencedSize, - RetainedPackCount: retainedCount, - RetainedTotalSize: retainedSize, + UnreferencedPackCount: uint64(unreferencedCount), + UnreferencedTotalSize: maintenancestats.ToUint64(unreferencedSize), + RetainedPackCount: uint64(retainedCount), + RetainedTotalSize: maintenancestats.ToUint64(retainedSize), DeletedPackCount: 0, DeletedTotalSize: 0, } @@ -167,8 +167,8 @@ func DeleteUnreferencedPacks(ctx context.Context, rep repo.DirectRepositoryWrite } deletedCount, deletedSize := deleted.Approximate() - result.DeletedPackCount = deletedCount - result.DeletedTotalSize = deletedSize + result.DeletedPackCount = uint64(deletedCount) + result.DeletedTotalSize = maintenancestats.ToUint64(deletedSize) contentlog.Log1(ctx, log, "Completed deleting unreferenced pack blobs", result) diff --git a/repo/maintenancestats/stats_advance_epoch.go b/repo/maintenancestats/stats_advance_epoch.go index 6f35a7dfe8d..0854533f170 100644 --- a/repo/maintenancestats/stats_advance_epoch.go +++ b/repo/maintenancestats/stats_advance_epoch.go @@ -10,14 +10,14 @@ const advanceEpochStatsKind = "advanceEpochStats" // AdvanceEpochStats are the stats for advancing write epoch. type AdvanceEpochStats struct { - CurrentEpoch int `json:"currentEpoch"` - WasAdvanced bool `json:"wasAdvanced"` + CurrentEpoch uint64 `json:"currentEpoch"` + WasAdvanced bool `json:"wasAdvanced"` } // WriteValueTo writes the stats to JSONWriter. func (as *AdvanceEpochStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(as.Kind()) - jw.IntField("currentEpoch", as.CurrentEpoch) + jw.UInt64Field("currentEpoch", as.CurrentEpoch) jw.BoolField("wasAdvanced", as.WasAdvanced) jw.EndObject() } diff --git a/repo/maintenancestats/stats_clean_up_log.go b/repo/maintenancestats/stats_clean_up_log.go index 388877d98c1..a68464ac88c 100644 --- a/repo/maintenancestats/stats_clean_up_log.go +++ b/repo/maintenancestats/stats_clean_up_log.go @@ -11,23 +11,23 @@ const cleanupLogsStatsKind = "cleanupLogsStats" // CleanupLogsStats are the stats for cleaning up logs. type CleanupLogsStats struct { - ToDeleteBlobCount int `json:"toDeleteBlobCount"` - ToDeleteBlobSize int64 `json:"toDeleteBlobSize"` - DeletedBlobCount int `json:"deletedBlobCount"` - DeletedBlobSize int64 `json:"deletedBlobSize"` - RetainedBlobCount int `json:"retainedBlobCount"` - RetainedBlobSize int64 `json:"retainedBlobSize"` + ToDeleteBlobCount uint64 `json:"toDeleteBlobCount"` + ToDeleteBlobSize uint64 `json:"toDeleteBlobSize"` + DeletedBlobCount uint64 `json:"deletedBlobCount"` + DeletedBlobSize uint64 `json:"deletedBlobSize"` + RetainedBlobCount uint64 `json:"retainedBlobCount"` + RetainedBlobSize uint64 `json:"retainedBlobSize"` } // WriteValueTo writes the stats to JSONWriter. func (cs *CleanupLogsStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(cs.Kind()) - jw.IntField("toDeleteBlobCount", cs.ToDeleteBlobCount) - jw.Int64Field("toDeleteBlobSize", cs.ToDeleteBlobSize) - jw.IntField("deletedBlobCount", cs.DeletedBlobCount) - jw.Int64Field("deletedBlobSize", cs.DeletedBlobSize) - jw.IntField("retainedBlobCount", cs.RetainedBlobCount) - jw.Int64Field("retainedBlobSize", cs.RetainedBlobSize) + jw.UInt64Field("toDeleteBlobCount", cs.ToDeleteBlobCount) + jw.UInt64Field("toDeleteBlobSize", cs.ToDeleteBlobSize) + jw.UInt64Field("deletedBlobCount", cs.DeletedBlobCount) + jw.UInt64Field("deletedBlobSize", cs.DeletedBlobSize) + jw.UInt64Field("retainedBlobCount", cs.RetainedBlobCount) + jw.UInt64Field("retainedBlobSize", cs.RetainedBlobSize) jw.EndObject() } diff --git a/repo/maintenancestats/stats_cleanup_markers.go b/repo/maintenancestats/stats_cleanup_markers.go index f212f719330..0b45897ca4e 100644 --- a/repo/maintenancestats/stats_cleanup_markers.go +++ b/repo/maintenancestats/stats_cleanup_markers.go @@ -10,15 +10,15 @@ const cleanupMarkersStatsKind = "cleanupMarkersStats" // CleanupMarkersStats are the stats for cleaning up markers. type CleanupMarkersStats struct { - DeletedEpochMarkerBlobCount int `json:"deletedEpochMarkerBlobCount"` - DeletedWatermarkBlobCount int `json:"deletedWatermarkBlobCount"` + DeletedEpochMarkerBlobCount uint64 `json:"deletedEpochMarkerBlobCount"` + DeletedWatermarkBlobCount uint64 `json:"deletedWatermarkBlobCount"` } // WriteValueTo writes the stats to JSONWriter. func (cs *CleanupMarkersStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(cs.Kind()) - jw.IntField("deletedEpochMarkerBlobCount", cs.DeletedEpochMarkerBlobCount) - jw.IntField("deletedWatermarkBlobCount", cs.DeletedWatermarkBlobCount) + jw.UInt64Field("deletedEpochMarkerBlobCount", cs.DeletedEpochMarkerBlobCount) + jw.UInt64Field("deletedWatermarkBlobCount", cs.DeletedWatermarkBlobCount) jw.EndObject() } diff --git a/repo/maintenancestats/stats_cleanup_superseded_indexes.go b/repo/maintenancestats/stats_cleanup_superseded_indexes.go index 52025d0e3cb..ff8485ec0db 100644 --- a/repo/maintenancestats/stats_cleanup_superseded_indexes.go +++ b/repo/maintenancestats/stats_cleanup_superseded_indexes.go @@ -13,16 +13,16 @@ const cleanupSupersededIndexesStatsKind = "cleanupSupersededIndexesStats" // CleanupSupersededIndexesStats are the stats for cleaning up superseded indexes. type CleanupSupersededIndexesStats struct { MaxReplacementTime time.Time `json:"maxReplacementTime"` - DeletedBlobCount int `json:"deletedBlobCount"` - DeletedTotalSize int64 `json:"deletedTotalSize"` + DeletedBlobCount uint64 `json:"deletedBlobCount"` + DeletedTotalSize uint64 `json:"deletedTotalSize"` } // WriteValueTo writes the stats to JSONWriter. func (cs *CleanupSupersededIndexesStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(cs.Kind()) jw.TimeField("maxReplacementTime", cs.MaxReplacementTime) - jw.IntField("deletedBlobCount", cs.DeletedBlobCount) - jw.Int64Field("deletedTotalSize", cs.DeletedTotalSize) + jw.UInt64Field("deletedBlobCount", cs.DeletedBlobCount) + jw.UInt64Field("deletedTotalSize", cs.DeletedTotalSize) jw.EndObject() } diff --git a/repo/maintenancestats/stats_compact_single_epoch.go b/repo/maintenancestats/stats_compact_single_epoch.go index 49e5b5e70bf..616f1624751 100644 --- a/repo/maintenancestats/stats_compact_single_epoch.go +++ b/repo/maintenancestats/stats_compact_single_epoch.go @@ -11,17 +11,17 @@ const compactSingleEpochStatsKind = "compactSingleEpochStats" // CompactSingleEpochStats are the stats for compacting an index epoch. type CompactSingleEpochStats struct { - SupersededIndexBlobCount int `json:"supersededIndexBlobCount"` - SupersededIndexTotalSize int64 `json:"supersededIndexTotalSize"` - Epoch int `json:"epoch"` + SupersededIndexBlobCount uint64 `json:"supersededIndexBlobCount"` + SupersededIndexTotalSize uint64 `json:"supersededIndexTotalSize"` + Epoch uint64 `json:"epoch"` } // WriteValueTo writes the stats to JSONWriter. func (cs *CompactSingleEpochStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(cs.Kind()) - jw.IntField("supersededIndexBlobCount", cs.SupersededIndexBlobCount) - jw.Int64Field("supersededIndexTotalSize", cs.SupersededIndexTotalSize) - jw.IntField("epoch", cs.Epoch) + jw.UInt64Field("supersededIndexBlobCount", cs.SupersededIndexBlobCount) + jw.UInt64Field("supersededIndexTotalSize", cs.SupersededIndexTotalSize) + jw.UInt64Field("epoch", cs.Epoch) jw.EndObject() } diff --git a/repo/maintenancestats/stats_delete_unreferenced_packs.go b/repo/maintenancestats/stats_delete_unreferenced_packs.go index b303e6925bc..32a6d6e9b2e 100644 --- a/repo/maintenancestats/stats_delete_unreferenced_packs.go +++ b/repo/maintenancestats/stats_delete_unreferenced_packs.go @@ -11,23 +11,23 @@ const deleteUnreferencedPacksStatsKind = "deleteUnreferencedPacksStats" // DeleteUnreferencedPacksStats are the stats for deleting unreferenced packs. type DeleteUnreferencedPacksStats struct { - UnreferencedPackCount uint32 `json:"unreferencedPackCount"` - UnreferencedTotalSize int64 `json:"unreferencedTotalSize"` - DeletedPackCount uint32 `json:"deletedPackCount"` - DeletedTotalSize int64 `json:"deletedTotalSize"` - RetainedPackCount uint32 `json:"retainedPackCount"` - RetainedTotalSize int64 `json:"retainedTotalSize"` + UnreferencedPackCount uint64 `json:"unreferencedPackCount"` + UnreferencedTotalSize uint64 `json:"unreferencedTotalSize"` + DeletedPackCount uint64 `json:"deletedPackCount"` + DeletedTotalSize uint64 `json:"deletedTotalSize"` + RetainedPackCount uint64 `json:"retainedPackCount"` + RetainedTotalSize uint64 `json:"retainedTotalSize"` } // WriteValueTo writes the stats to JSONWriter. func (ds *DeleteUnreferencedPacksStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(ds.Kind()) - jw.UInt32Field("unreferencedPackCount", ds.UnreferencedPackCount) - jw.Int64Field("unreferencedTotalSize", ds.UnreferencedTotalSize) - jw.UInt32Field("deletedPackCount", ds.DeletedPackCount) - jw.Int64Field("deletedTotalSize", ds.DeletedTotalSize) - jw.UInt32Field("retainedPackCount", ds.RetainedPackCount) - jw.Int64Field("retainedTotalSize", ds.RetainedTotalSize) + jw.UInt64Field("unreferencedPackCount", ds.UnreferencedPackCount) + jw.UInt64Field("unreferencedTotalSize", ds.UnreferencedTotalSize) + jw.UInt64Field("deletedPackCount", ds.DeletedPackCount) + jw.UInt64Field("deletedTotalSize", ds.DeletedTotalSize) + jw.UInt64Field("retainedPackCount", ds.RetainedPackCount) + jw.UInt64Field("retainedTotalSize", ds.RetainedTotalSize) jw.EndObject() } diff --git a/repo/maintenancestats/stats_extend_blob_retention.go b/repo/maintenancestats/stats_extend_blob_retention.go index 0663aa94f19..960c1dbbacd 100644 --- a/repo/maintenancestats/stats_extend_blob_retention.go +++ b/repo/maintenancestats/stats_extend_blob_retention.go @@ -10,16 +10,16 @@ const extendBlobRetentionStatsKind = "extendBlobRetentionStats" // ExtendBlobRetentionStats are the stats for extending blob retention time. type ExtendBlobRetentionStats struct { - ToExtendBlobCount uint32 `json:"toExtendBlobCount"` - ExtendedBlobCount uint32 `json:"extendedBlobCount"` + ToExtendBlobCount uint64 `json:"toExtendBlobCount"` + ExtendedBlobCount uint64 `json:"extendedBlobCount"` RetentionPeriod string `json:"retentionPeriod"` } // WriteValueTo writes the stats to JSONWriter. func (es *ExtendBlobRetentionStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(es.Kind()) - jw.UInt32Field("toExtendBlobCount", es.ToExtendBlobCount) - jw.UInt32Field("extendedBlobCount", es.ExtendedBlobCount) + jw.UInt64Field("toExtendBlobCount", es.ToExtendBlobCount) + jw.UInt64Field("extendedBlobCount", es.ExtendedBlobCount) jw.StringField("retentionPeriod", es.RetentionPeriod) jw.EndObject() } diff --git a/repo/maintenancestats/stats_generate_range_checkpoint.go b/repo/maintenancestats/stats_generate_range_checkpoint.go index d8b6c7fa890..dc4efc656b8 100644 --- a/repo/maintenancestats/stats_generate_range_checkpoint.go +++ b/repo/maintenancestats/stats_generate_range_checkpoint.go @@ -10,15 +10,15 @@ const generateRangeCheckpointStatsKind = "generateRangeCheckpointStats" // GenerateRangeCheckpointStats are the stats for generating range checkpoints. type GenerateRangeCheckpointStats struct { - RangeMinEpoch int `json:"rangeMinEpoch"` - RangeMaxEpoch int `json:"rangeMaxEpoch"` + RangeMinEpoch uint64 `json:"rangeMinEpoch"` + RangeMaxEpoch uint64 `json:"rangeMaxEpoch"` } // WriteValueTo writes the stats to JSONWriter. func (gs *GenerateRangeCheckpointStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(gs.Kind()) - jw.IntField("rangeMinEpoch", gs.RangeMinEpoch) - jw.IntField("rangeMaxEpoch", gs.RangeMaxEpoch) + jw.UInt64Field("rangeMinEpoch", gs.RangeMinEpoch) + jw.UInt64Field("rangeMaxEpoch", gs.RangeMaxEpoch) jw.EndObject() } diff --git a/repo/maintenancestats/stats_rewrite_contents.go b/repo/maintenancestats/stats_rewrite_contents.go index 22128bb99df..def0e576432 100644 --- a/repo/maintenancestats/stats_rewrite_contents.go +++ b/repo/maintenancestats/stats_rewrite_contents.go @@ -11,23 +11,23 @@ const rewriteContentsStatsKind = "rewriteContentsStats" // RewriteContentsStats are the stats for rewriting contents. type RewriteContentsStats struct { - ToRewriteContentCount int `json:"toRewriteContentCount"` - ToRewriteContentSize int64 `json:"toRewriteContentSize"` - RewrittenContentCount int `json:"rewrittenContentCount"` - RewrittenContentSize int64 `json:"rewrittenContentSize"` - RetainedContentCount int `json:"retainedContentCount"` - RetainedContentSize int64 `json:"retainedContentSize"` + ToRewriteContentCount uint64 `json:"toRewriteContentCount"` + ToRewriteContentSize uint64 `json:"toRewriteContentSize"` + RewrittenContentCount uint64 `json:"rewrittenContentCount"` + RewrittenContentSize uint64 `json:"rewrittenContentSize"` + RetainedContentCount uint64 `json:"retainedContentCount"` + RetainedContentSize uint64 `json:"retainedContentSize"` } // WriteValueTo writes the stats to JSONWriter. func (rs *RewriteContentsStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(rs.Kind()) - jw.IntField("toRewriteContentCount", rs.ToRewriteContentCount) - jw.Int64Field("toRewriteContentSize", rs.ToRewriteContentSize) - jw.IntField("rewrittenContentCount", rs.RewrittenContentCount) - jw.Int64Field("rewrittenContentSize", rs.RewrittenContentSize) - jw.IntField("retainedContentCount", rs.RetainedContentCount) - jw.Int64Field("retainedContentSize", rs.RetainedContentSize) + jw.UInt64Field("toRewriteContentCount", rs.ToRewriteContentCount) + jw.UInt64Field("toRewriteContentSize", rs.ToRewriteContentSize) + jw.UInt64Field("rewrittenContentCount", rs.RewrittenContentCount) + jw.UInt64Field("rewrittenContentSize", rs.RewrittenContentSize) + jw.UInt64Field("retainedContentCount", rs.RetainedContentCount) + jw.UInt64Field("retainedContentSize", rs.RetainedContentSize) jw.EndObject() } diff --git a/repo/maintenancestats/stats_snapshot_gc.go b/repo/maintenancestats/stats_snapshot_gc.go index 47ccb169442..02de50653fd 100644 --- a/repo/maintenancestats/stats_snapshot_gc.go +++ b/repo/maintenancestats/stats_snapshot_gc.go @@ -10,35 +10,35 @@ const snapshotGCStatsKind = "snapshotGCStats" // SnapshotGCStats delivers are the stats for snapshot GC. type SnapshotGCStats struct { - UnreferencedContentCount uint32 `json:"unreferencedContentCount"` - UnreferencedContentSize int64 `json:"unreferencedContentSize"` - DeletedContentCount uint32 `json:"deletedContentCount"` - DeletedContentSize int64 `json:"deletedContentSize"` - UnreferencedRecentContentCount uint32 `json:"unreferencedRecentContentCount"` - UnreferencedRecentContentSize int64 `json:"unreferencedRecentContentSize"` - InUseContentCount uint32 `json:"inUseContentCount"` - InUseContentSize int64 `json:"inUseContentSize"` - InUseSystemContentCount uint32 `json:"inUseSystemContentCount"` - InUseSystemContentSize int64 `json:"inUseSystemContentSize"` - RecoveredContentCount uint32 `json:"recoveredContentCount"` - RecoveredContentSize int64 `json:"recoveredContentSize"` + UnreferencedContentCount uint64 `json:"unreferencedContentCount"` + UnreferencedContentSize uint64 `json:"unreferencedContentSize"` + DeletedContentCount uint64 `json:"deletedContentCount"` + DeletedContentSize uint64 `json:"deletedContentSize"` + UnreferencedRecentContentCount uint64 `json:"unreferencedRecentContentCount"` + UnreferencedRecentContentSize uint64 `json:"unreferencedRecentContentSize"` + InUseContentCount uint64 `json:"inUseContentCount"` + InUseContentSize uint64 `json:"inUseContentSize"` + InUseSystemContentCount uint64 `json:"inUseSystemContentCount"` + InUseSystemContentSize uint64 `json:"inUseSystemContentSize"` + RecoveredContentCount uint64 `json:"recoveredContentCount"` + RecoveredContentSize uint64 `json:"recoveredContentSize"` } // WriteValueTo writes the stats to JSONWriter. func (ss *SnapshotGCStats) WriteValueTo(jw *contentlog.JSONWriter) { jw.BeginObjectField(ss.Kind()) - jw.UInt32Field("unreferencedContentCount", ss.UnreferencedContentCount) - jw.Int64Field("unreferencedContentSize", ss.UnreferencedContentSize) - jw.UInt32Field("deletedContentCount", ss.DeletedContentCount) - jw.Int64Field("deletedContentSize", ss.DeletedContentSize) - jw.UInt32Field("unreferencedRecentContentCount", ss.UnreferencedRecentContentCount) - jw.Int64Field("unreferencedRecentContentSize", ss.UnreferencedRecentContentSize) - jw.UInt32Field("inUseContentCount", ss.InUseContentCount) - jw.Int64Field("inUseContentSize", ss.InUseContentSize) - jw.UInt32Field("inUseSystemContentCount", ss.InUseSystemContentCount) - jw.Int64Field("inUseSystemContentSize", ss.InUseSystemContentSize) - jw.UInt32Field("recoveredContentCount", ss.RecoveredContentCount) - jw.Int64Field("recoveredContentSize", ss.RecoveredContentSize) + jw.UInt64Field("unreferencedContentCount", ss.UnreferencedContentCount) + jw.UInt64Field("unreferencedContentSize", ss.UnreferencedContentSize) + jw.UInt64Field("deletedContentCount", ss.DeletedContentCount) + jw.UInt64Field("deletedContentSize", ss.DeletedContentSize) + jw.UInt64Field("unreferencedRecentContentCount", ss.UnreferencedRecentContentCount) + jw.UInt64Field("unreferencedRecentContentSize", ss.UnreferencedRecentContentSize) + jw.UInt64Field("inUseContentCount", ss.InUseContentCount) + jw.UInt64Field("inUseContentSize", ss.InUseContentSize) + jw.UInt64Field("inUseSystemContentCount", ss.InUseSystemContentCount) + jw.UInt64Field("inUseSystemContentSize", ss.InUseSystemContentSize) + jw.UInt64Field("recoveredContentCount", ss.RecoveredContentCount) + jw.UInt64Field("recoveredContentSize", ss.RecoveredContentSize) jw.EndObject() } diff --git a/repo/maintenancestats/typconversion_test.go b/repo/maintenancestats/typconversion_test.go new file mode 100644 index 00000000000..283a1936bd7 --- /dev/null +++ b/repo/maintenancestats/typconversion_test.go @@ -0,0 +1,41 @@ +package maintenancestats + +import ( + "math" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestToUint64(t *testing.T) { + cases := []struct { + in int + expected uint64 + }{ + { + in: math.MinInt, + expected: 0, + }, + { + in: -1, + expected: 0, + }, + { + in: 0, + expected: 0, + }, + { + in: 1, + expected: 1, + }, + { + in: math.MaxInt, + expected: math.MaxInt, + }, + } + + for _, c := range cases { + v := ToUint64(c.in) + require.Equal(t, c.expected, v) + } +} diff --git a/repo/maintenancestats/typeconversion.go b/repo/maintenancestats/typeconversion.go new file mode 100644 index 00000000000..4e1d692fe97 --- /dev/null +++ b/repo/maintenancestats/typeconversion.go @@ -0,0 +1,23 @@ +package maintenancestats + +import ( + "log" + + "golang.org/x/time/rate" +) + +var limit = rate.Sometimes{First: 10} //nolint:mnd + +// ToUint64 converts v from a signed integer type T to uint64 while checking that +// the value is non-negative. It returns 0 for negative values. +func ToUint64[T int8 | int16 | int32 | int | int64](v T) uint64 { + if v >= 0 { + return uint64(v) + } + + limit.Do(func() { + log.Println("warning, converting negative value to uint64:", v) + }) + + return 0 +} diff --git a/snapshot/snapshotgc/gc.go b/snapshot/snapshotgc/gc.go index 8c97dc2cb00..53c4901ad63 100644 --- a/snapshot/snapshotgc/gc.go +++ b/snapshot/snapshotgc/gc.go @@ -214,28 +214,28 @@ func buildGCResult(unused, inUse, system, tooRecent, undeleted, deleted *stats.C result := &maintenancestats.SnapshotGCStats{} cnt, size := unused.Approximate() - result.UnreferencedContentCount = cnt - result.UnreferencedContentSize = size + result.UnreferencedContentCount = uint64(cnt) + result.UnreferencedContentSize = maintenancestats.ToUint64(size) cnt, size = tooRecent.Approximate() - result.UnreferencedRecentContentCount = cnt - result.UnreferencedRecentContentSize = size + result.UnreferencedRecentContentCount = uint64(cnt) + result.UnreferencedRecentContentSize = maintenancestats.ToUint64(size) cnt, size = inUse.Approximate() - result.InUseContentCount = cnt - result.InUseContentSize = size + result.InUseContentCount = uint64(cnt) + result.InUseContentSize = maintenancestats.ToUint64(size) cnt, size = system.Approximate() - result.InUseSystemContentCount = cnt - result.InUseSystemContentSize = size + result.InUseSystemContentCount = uint64(cnt) + result.InUseSystemContentSize = maintenancestats.ToUint64(size) cnt, size = undeleted.Approximate() - result.RecoveredContentCount = cnt - result.RecoveredContentSize = size + result.RecoveredContentCount = uint64(cnt) + result.RecoveredContentSize = maintenancestats.ToUint64(size) cnt, size = deleted.Approximate() - result.DeletedContentCount = cnt - result.DeletedContentSize = size + result.DeletedContentCount = uint64(cnt) + result.DeletedContentSize = maintenancestats.ToUint64(size) return result } From 775fadcfcf0e7d67804edf55595a10ffb33f24c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:59:07 -0700 Subject: [PATCH 114/156] fix(general): retained log size double counting (#5302) Fix computation CleanupLogsStats.RetainedBlobSize. The size of the first blob being deleted was also accounted towards the retained blob size. Fix: retainedSize is now incremented only after the size check. Rename package-private rate limiter variable from limit to negativeValueWarningLimit for clarity. --- repo/maintenance/cleanup_logs.go | 6 ++++-- repo/maintenancestats/typeconversion.go | 4 ++-- .../{typconversion_test.go => typeconversion_test.go} | 0 3 files changed, 6 insertions(+), 4 deletions(-) rename repo/maintenancestats/{typconversion_test.go => typeconversion_test.go} (100%) diff --git a/repo/maintenance/cleanup_logs.go b/repo/maintenance/cleanup_logs.go index cb5982cb171..ad1930c3fdd 100644 --- a/repo/maintenance/cleanup_logs.go +++ b/repo/maintenance/cleanup_logs.go @@ -69,9 +69,9 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe deletePosition := len(allLogBlobs) for i, bm := range allLogBlobs { - retainedSize += maintenancestats.ToUint64(bm.Length) + bmlen := maintenancestats.ToUint64(bm.Length) - if opt.MaxTotalSize > 0 && retainedSize > uint64(opt.MaxTotalSize) { + if opt.MaxTotalSize > 0 && retainedSize+bmlen > uint64(opt.MaxTotalSize) { deletePosition = i break } @@ -85,6 +85,8 @@ func CleanupLogs(ctx context.Context, rep repo.DirectRepositoryWriter, opt LogRe deletePosition = i break } + + retainedSize += bmlen } toDelete := allLogBlobs[deletePosition:] diff --git a/repo/maintenancestats/typeconversion.go b/repo/maintenancestats/typeconversion.go index 4e1d692fe97..1cb5b279708 100644 --- a/repo/maintenancestats/typeconversion.go +++ b/repo/maintenancestats/typeconversion.go @@ -6,7 +6,7 @@ import ( "golang.org/x/time/rate" ) -var limit = rate.Sometimes{First: 10} //nolint:mnd +var negativeValueWarningLimit = rate.Sometimes{First: 10} //nolint:mnd // ToUint64 converts v from a signed integer type T to uint64 while checking that // the value is non-negative. It returns 0 for negative values. @@ -15,7 +15,7 @@ func ToUint64[T int8 | int16 | int32 | int | int64](v T) uint64 { return uint64(v) } - limit.Do(func() { + negativeValueWarningLimit.Do(func() { log.Println("warning, converting negative value to uint64:", v) }) diff --git a/repo/maintenancestats/typconversion_test.go b/repo/maintenancestats/typeconversion_test.go similarity index 100% rename from repo/maintenancestats/typconversion_test.go rename to repo/maintenancestats/typeconversion_test.go From 55629c6d12a889fcd57b50ab5bb2b3d2b824f2bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 17:57:36 -0700 Subject: [PATCH 115/156] build(deps): bump the common-golang-dependencies group with 8 updates (#5304) Bumps the common-golang-dependencies group with 8 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.62.0` | `1.62.1` | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.49.0` | `0.50.0` | | [golang.org/x/mod](https://github.com/golang/mod) | `0.34.0` | `0.35.0` | | [golang.org/x/net](https://github.com/golang/net) | `0.52.0` | `0.53.0` | | [golang.org/x/sys](https://github.com/golang/sys) | `0.42.0` | `0.43.0` | | [golang.org/x/term](https://github.com/golang/term) | `0.41.0` | `0.42.0` | | [golang.org/x/text](https://github.com/golang/text) | `0.35.0` | `0.36.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.274.0` | `0.275.0` | Updates `cloud.google.com/go/storage` from 1.62.0 to 1.62.1 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.62.0...storage/v1.62.1) Updates `golang.org/x/crypto` from 0.49.0 to 0.50.0 - [Commits](https://github.com/golang/crypto/compare/v0.49.0...v0.50.0) Updates `golang.org/x/mod` from 0.34.0 to 0.35.0 - [Commits](https://github.com/golang/mod/compare/v0.34.0...v0.35.0) Updates `golang.org/x/net` from 0.52.0 to 0.53.0 - [Commits](https://github.com/golang/net/compare/v0.52.0...v0.53.0) Updates `golang.org/x/sys` from 0.42.0 to 0.43.0 - [Commits](https://github.com/golang/sys/compare/v0.42.0...v0.43.0) Updates `golang.org/x/term` from 0.41.0 to 0.42.0 - [Commits](https://github.com/golang/term/compare/v0.41.0...v0.42.0) Updates `golang.org/x/text` from 0.35.0 to 0.36.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.35.0...v0.36.0) Updates `google.golang.org/api` from 0.274.0 to 0.275.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.274.0...v0.275.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/storage dependency-version: 1.62.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: golang.org/x/crypto dependency-version: 0.50.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/mod dependency-version: 0.35.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/net dependency-version: 0.53.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/sys dependency-version: 0.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/term dependency-version: 0.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: golang.org/x/text dependency-version: 0.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.275.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 28 +++++++++++++-------------- go.sum | 60 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index 62f7fcdea4e..ee0cde247ca 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.25.0 toolchain go1.25.9 require ( - cloud.google.com/go/storage v1.62.0 + cloud.google.com/go/storage v1.62.1 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 @@ -58,16 +58,17 @@ require ( go.opentelemetry.io/otel/sdk v1.43.0 go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.49.0 + golang.org/x/crypto v0.50.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.34.0 - golang.org/x/net v0.52.0 + golang.org/x/mod v0.35.0 + golang.org/x/net v0.53.0 golang.org/x/oauth2 v0.36.0 golang.org/x/sync v0.20.0 - golang.org/x/sys v0.42.0 - golang.org/x/term v0.41.0 - golang.org/x/text v0.35.0 - google.golang.org/api v0.274.0 + golang.org/x/sys v0.43.0 + golang.org/x/term v0.42.0 + golang.org/x/text v0.36.0 + golang.org/x/time v0.15.0 + google.golang.org/api v0.275.0 google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -76,10 +77,10 @@ require ( require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.19.0 // indirect + cloud.google.com/go/auth v0.20.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.6.0 // indirect + cloud.google.com/go/iam v1.7.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect @@ -116,7 +117,7 @@ require ( github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.20.0 // indirect + github.com/googleapis/gax-go/v2 v2.21.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -136,8 +137,8 @@ require ( github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect @@ -145,7 +146,6 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/time v0.15.0 // indirect google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect diff --git a/go.sum b/go.sum index 352e780fdce..435a0e3e1d2 100644 --- a/go.sum +++ b/go.sum @@ -2,22 +2,22 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= -cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.6.0 h1:JiSIcEi38dWBKhB3BtfKCW+dMvCZJEhBA2BsaGJgoxs= -cloud.google.com/go/iam v1.6.0/go.mod h1:ZS6zEy7QHmcNO18mjO2viYv/n+wOUkhJqGNkPPGueGU= +cloud.google.com/go/iam v1.7.0 h1:JD3zh0C6LHl16aCn5Akff0+GELdp1+4hmh6ndoFLl8U= +cloud.google.com/go/iam v1.7.0/go.mod h1:tetWZW1PD/m6vcuY2Zj/aU0eCHNPuxedbnbRTyKXvdY= cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= -cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= -cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= +cloud.google.com/go/longrunning v0.9.0 h1:0EzbDEGsAvOZNbqXopgniY0w0a1phvu5IdUFq8grmqY= +cloud.google.com/go/longrunning v0.9.0/go.mod h1:pkTz846W7bF4o2SzdWJ40Hu0Re+UoNT6Q5t+igIcb8E= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.62.0 h1:w2pQJhpUqVerMON45vatE2FpCYsNTf7OHjkn6ux5mMU= -cloud.google.com/go/storage v1.62.0/go.mod h1:T5hz3qzcpnxZ5LdKc7y8Tw7lh4v9zeeVyrD/cLJAzZU= +cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= +cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= @@ -153,8 +153,8 @@ 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/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.20.0 h1:NIKVuLhDlIV74muWlsMM4CcQZqN6JJ20Qcxd9YMuYcs= -github.com/googleapis/gax-go/v2 v2.20.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= +github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= +github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -288,18 +288,18 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 h1:lSZHgNHfbmQTPfuTmWVkEu8J8qXaQwuV30pjCcAUvP8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0/go.mod h1:so9ounLcuoRDu033MW/E0AD4hhUjVqswrMF5FoZlBcw= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= @@ -322,15 +322,15 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= @@ -340,20 +340,20 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= -google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= +google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= From 40e645e11cebbdd95fdf413e6772c6da1b545c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Mon, 13 Apr 2026 19:17:55 -0700 Subject: [PATCH 116/156] refactor(cli): leverage x/term.IsTerminal (#5308) --- cli/error_notifications.go | 4 ++-- go.mod | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/error_notifications.go b/cli/error_notifications.go index 4061b0c13c2..40e92c1a0d7 100644 --- a/cli/error_notifications.go +++ b/cli/error_notifications.go @@ -3,7 +3,7 @@ package cli import ( "os" - "github.com/mattn/go-isatty" + "golang.org/x/term" ) const ( @@ -25,7 +25,7 @@ func (c *App) enableErrorNotifications() bool { return false } - if isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) { + if fd, err := intFd(os.Stdout); err == nil && term.IsTerminal(fd) { // interactive terminal, don't send notifications return false } diff --git a/go.mod b/go.mod index ee0cde247ca..b4a35f3eb3a 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,6 @@ require ( github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 - github.com/mattn/go-isatty v0.0.20 github.com/minio/minio-go/v7 v7.0.100 github.com/mocktools/go-smtp-mock/v2 v2.5.3 github.com/mxk/go-vss v1.2.1 @@ -122,6 +121,7 @@ require ( github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/crc64nvme v1.1.1 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect From e6b1d56c74a8e8593588ff1399458acf7f29ce0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Apr 2026 02:39:28 +0000 Subject: [PATCH 117/156] build(deps): bump github.com/mocktools/go-smtp-mock/v2 (#5306) Bumps [github.com/mocktools/go-smtp-mock/v2](https://github.com/mocktools/go-smtp-mock) from 2.5.3 to 2.5.4. - [Release notes](https://github.com/mocktools/go-smtp-mock/releases) - [Changelog](https://github.com/mocktools/go-smtp-mock/blob/master/CHANGELOG.md) - [Commits](https://github.com/mocktools/go-smtp-mock/compare/v2.5.3...v2.5.4) --- updated-dependencies: - dependency-name: github.com/mocktools/go-smtp-mock/v2 dependency-version: 2.5.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b4a35f3eb3a..1445040fad1 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/minio/minio-go/v7 v7.0.100 - github.com/mocktools/go-smtp-mock/v2 v2.5.3 + github.com/mocktools/go-smtp-mock/v2 v2.5.4 github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 diff --git a/go.sum b/go.sum index 435a0e3e1d2..9a834d2048b 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ github.com/minio/minio-go/v7 v7.0.100 h1:ShkWi8Tyj9RtU57OQB2HIXKz4bFgtVib0bbT1sb github.com/minio/minio-go/v7 v7.0.100/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= -github.com/mocktools/go-smtp-mock/v2 v2.5.3 h1:vO8NwtRiuXg+GjF+u2QCkEfkp1pt1ZpINJ9mD2DDoNQ= -github.com/mocktools/go-smtp-mock/v2 v2.5.3/go.mod h1:qBGjYXy5jKKVFhDnB39DYQfn4hWfcqWAlJTcvrku3rg= +github.com/mocktools/go-smtp-mock/v2 v2.5.4 h1:U89Y4SuOhDFUfboMYUtXzWDp7hNLrofRa5yNqGSESSM= +github.com/mocktools/go-smtp-mock/v2 v2.5.4/go.mod h1:qBGjYXy5jKKVFhDnB39DYQfn4hWfcqWAlJTcvrku3rg= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-vss v1.2.1 h1:shspH0qgqZ9l5sfIRsXS5BgZXz25/BY+ZQsW0HlD0fM= From 5fdfb19e7fa913b260fb289726ebe422b1e419d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 20:03:52 -0700 Subject: [PATCH 118/156] build(deps): bump github.com/mattn/go-isatty from 0.0.20 to 0.0.21 (#5305) Bumps [github.com/mattn/go-isatty](https://github.com/mattn/go-isatty) from 0.0.20 to 0.0.21. - [Commits](https://github.com/mattn/go-isatty/compare/v0.0.20...v0.0.21) --- updated-dependencies: - dependency-name: github.com/mattn/go-isatty dependency-version: 0.0.21 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1445040fad1..b24acd3d111 100644 --- a/go.mod +++ b/go.mod @@ -121,7 +121,7 @@ require ( github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect github.com/kr/fs v0.1.0 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect github.com/minio/crc64nvme v1.1.1 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum index 9a834d2048b..491e1a4ff30 100644 --- a/go.sum +++ b/go.sum @@ -195,8 +195,8 @@ github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kUL github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= 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-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= +github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI= github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= From c9334c9bc56d4a504ce223e6268dcbc0dde14873 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Mon, 13 Apr 2026 20:36:36 -0700 Subject: [PATCH 119/156] feat(ui): upgraded htmlui to the latest version (#5307) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b24acd3d111..dce4ed1090c 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f + github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/minio/minio-go/v7 v7.0.100 diff --git a/go.sum b/go.sum index 491e1a4ff30..d77a7baae94 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f h1:6MNle2yDlSjyMjHr5XCvbmsGwZPKeOxKaPXAJQo946I= -github.com/kopia/htmluibuild v0.0.1-0.20260407042614-ef9b7e16a97f/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893 h1:J9g3qLDJAIebtq9ojSPov12B5V2G3WEQ8s96Y/e/4pk= +github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= From be2ce68b5cef040491b20ba0c7abe59d55ae5d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 16 Apr 2026 15:13:17 -0700 Subject: [PATCH 120/156] breaking(general): remove support for LZ4 (#5296) - It has been deprecated in Kopia since July 2022 (0985b80). - Dependency appears unmaintained. --- go.mod | 2 - go.sum | 14 ---- repo/compression/compression_ids.go | 2 +- repo/compression/compressor.go | 19 +++++ repo/compression/compressor_lz4.go | 76 +++---------------- repo/compression/compressor_test.go | 4 + repo/object/object_manager_test.go | 4 + .../docs/Advanced/Compression/_index.md | 41 +++++----- 8 files changed, 59 insertions(+), 103 deletions(-) diff --git a/go.mod b/go.mod index dce4ed1090c..2cad5d5f827 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,6 @@ require ( github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 - github.com/pierrec/lz4 v2.6.1+incompatible github.com/pkg/errors v0.9.1 github.com/pkg/profile v1.7.0 github.com/pkg/sftp v1.13.10 @@ -99,7 +98,6 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/frankban/quicktest v1.13.1 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-json-experiment/json v0.0.0-20250725192818-e39067aee2d2 // indirect diff --git a/go.sum b/go.sum index d77a7baae94..f7884be50af 100644 --- a/go.sum +++ b/go.sum @@ -72,7 +72,6 @@ github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/T github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -102,8 +101,6 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c h1:DBGU7zCwrrPPDsD6+gqKG8UfMxenWg9BOJE/Nmfph+4= github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c/go.mod h1:SHawtolbB0ZOFoRWgDwakX5WpwuIWAK88bUXVZqK0Ss= -github.com/frankban/quicktest v1.13.1 h1:xVm/f9seEhZFL9+n5kv5XLrGwy6elc4V9v/XFY2vmd8= -github.com/frankban/quicktest v1.13.1/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -137,7 +134,6 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/fswalker v0.3.3 h1:K2+d6cb3vNFjquVPRObIY+QaXJ6cbleVV6yZWLzkkQ8= github.com/google/fswalker v0.3.3/go.mod h1:9upMSscEE8oRi0WJ0rXZZYya1DmgUtJFhXAw7KNS3c4= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= @@ -181,12 +177,8 @@ github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893 h1:J9g3qLDJAIe github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= @@ -219,8 +211,6 @@ github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+ github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= 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/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -245,7 +235,6 @@ github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTU github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= 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/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= @@ -349,7 +338,6 @@ golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= @@ -365,10 +353,8 @@ google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07 google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/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-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/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 h1:2TSTkQ8PMvGOD5eeqqRVv6Z9+BYI+bowK97RCr3W+9M= gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216/go.mod h1:zJ2QpyDCYo1KvLXlmdnFlQAyF/Qfth0fB8239Qg7BIE= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/repo/compression/compression_ids.go b/repo/compression/compression_ids.go index 0142f1577b5..5fd0dd2ef51 100644 --- a/repo/compression/compression_ids.go +++ b/repo/compression/compression_ids.go @@ -23,7 +23,7 @@ const ( headerPgzipBestSpeed HeaderID = 0x1301 headerPgzipBestCompression HeaderID = 0x1302 - headerLZ4Default HeaderID = 0x1400 + headerLZ4Removed HeaderID = 0x1400 // historically used for LZ4 and must not be reused. headerDeflateDefault HeaderID = 0x1500 headerDeflateBestSpeed HeaderID = 0x1501 diff --git a/repo/compression/compressor.go b/repo/compression/compressor.go index 52e10856fe9..ac10807b62e 100644 --- a/repo/compression/compressor.go +++ b/repo/compression/compressor.go @@ -32,6 +32,7 @@ var ( ByName = map[Name]Compressor{} HeaderIDToName = map[HeaderID]Name{} IsDeprecated = map[Name]bool{} + isUnsupported = map[HeaderID]bool{} ) // RegisterCompressor registers the provided compressor implementation. @@ -56,6 +57,13 @@ func RegisterDeprecatedCompressor(name Name, c Compressor) { IsDeprecated[name] = true } +func registerUnsupportedCompressor(name Name, c Compressor) { + RegisterCompressor(name, c) + + IsDeprecated[name] = true + isUnsupported[c.HeaderID()] = true +} + func compressionHeader(id HeaderID) []byte { b := make([]byte, compressionHeaderSize) binary.BigEndian.PutUint32(b, uint32(id)) @@ -81,6 +89,17 @@ func DecompressByHeader(output io.Writer, input io.Reader) error { return errors.Wrap(compressor.Decompress(output, input, false), "error decompressing") } +// IsSupported returns whether a named compression scheme is supported. +func IsSupported(name Name) bool { + c := ByName[name] + + if c == nil { + return false + } + + return !isUnsupported[c.HeaderID()] +} + func mustSucceed(err error) { impossible.PanicOnError(err) } diff --git a/repo/compression/compressor_lz4.go b/repo/compression/compressor_lz4.go index 2136a908b83..d735b88cc71 100644 --- a/repo/compression/compressor_lz4.go +++ b/repo/compression/compressor_lz4.go @@ -1,82 +1,26 @@ package compression import ( + "errors" "io" - "sync" - - "github.com/pierrec/lz4" - "github.com/pkg/errors" - - "github.com/kopia/kopia/internal/freepool" - "github.com/kopia/kopia/internal/iocopy" ) func init() { - RegisterDeprecatedCompressor("lz4", newLZ4Compressor(headerLZ4Default)) + registerUnsupportedCompressor("lz4", lz4Compressor{}) } -func newLZ4Compressor(id HeaderID) Compressor { - return &lz4Compressor{id, compressionHeader(id), sync.Pool{ - New: func() any { - return lz4.NewWriter(io.Discard) - }, - }} -} +var errLZ4NotSupported = errors.New("LZ4 compressor is not supported in recent versions of kopia, version v0.22.3 or older is needed to read legacy repositories that use the LZ4 compressor") -type lz4Compressor struct { - id HeaderID - header []byte - pool sync.Pool -} +type lz4Compressor struct{} -func (c *lz4Compressor) HeaderID() HeaderID { - return c.id +func (c lz4Compressor) HeaderID() HeaderID { + return headerLZ4Removed } -func (c *lz4Compressor) Compress(output io.Writer, input io.Reader) error { - if _, err := output.Write(c.header); err != nil { - return errors.Wrap(err, "unable to write header") - } - - //nolint:forcetypeassert - w := c.pool.Get().(*lz4.Writer) - defer c.pool.Put(w) - - w.Reset(output) - - if err := iocopy.JustCopy(w, input); err != nil { - return errors.Wrap(err, "compression error") - } - - if err := w.Close(); err != nil { - return errors.Wrap(err, "compression close error") - } - - return nil +func (c lz4Compressor) Compress(_ io.Writer, _ io.Reader) error { + return errLZ4NotSupported } -//nolint:gochecknoglobals -var lz4DecoderPool = freepool.New(func() *lz4.Reader { - return lz4.NewReader(nil) -}, func(v *lz4.Reader) { - v.Reset(nil) -}) - -func (c *lz4Compressor) Decompress(output io.Writer, input io.Reader, withHeader bool) error { - if withHeader { - if err := verifyCompressionHeader(input, c.header); err != nil { - return err - } - } - - dec := lz4DecoderPool.Take() - defer lz4DecoderPool.Return(dec) - - dec.Reset(input) - - if err := iocopy.JustCopy(output, dec); err != nil { - return errors.Wrap(err, "decompression error") - } - - return nil +func (c lz4Compressor) Decompress(_ io.Writer, _ io.Reader, _ bool) error { + return errLZ4NotSupported } diff --git a/repo/compression/compressor_test.go b/repo/compression/compressor_test.go index 024bebc82a2..a0d75c8f0ec 100644 --- a/repo/compression/compressor_test.go +++ b/repo/compression/compressor_test.go @@ -14,6 +14,10 @@ func TestMain(m *testing.M) { testutil.MyTestMain(m) } func TestCompressor(t *testing.T) { for id, comp := range ByHeaderID { + if isUnsupported[id] { + continue + } + t.Run(fmt.Sprintf("compressible-data-%x", id), func(t *testing.T) { // make sure all-zero data is compressed data := make([]byte, 10000) diff --git a/repo/object/object_manager_test.go b/repo/object/object_manager_test.go index 4913b315dbf..61479ed8848 100644 --- a/repo/object/object_manager_test.go +++ b/repo/object/object_manager_test.go @@ -802,6 +802,10 @@ func TestEndToEndReadAndSeekWithCompression(t *testing.T) { for _, compressible := range []bool{false, true} { for compressorName := range compression.ByName { + if !compression.IsSupported(compressorName) { + continue + } + t.Run(string(compressorName), func(t *testing.T) { ctx := testlogging.Context(t) diff --git a/site/content/docs/Advanced/Compression/_index.md b/site/content/docs/Advanced/Compression/_index.md index 68910f7ca87..a5e4dd14b7f 100644 --- a/site/content/docs/Advanced/Compression/_index.md +++ b/site/content/docs/Advanced/Compression/_index.md @@ -35,18 +35,17 @@ Repeating 1 times per compression method (total 466.7 MiB). 3. s2-parallel-4 127.1 MiB 2.3 GiB/s 2951 344.1 MiB 4. pgzip-best-speed 96.7 MiB 2.1 GiB/s 4127 324.1 MiB 5. pgzip 86.3 MiB 1.2 GiB/s 4132 298.7 MiB - 6. lz4 131.8 MiB 458.9 MiB/s 17 321.7 MiB - 7. zstd-fastest 79.8 MiB 356.2 MiB/s 22503 246 MiB - 8. zstd 76.8 MiB 323.7 MiB/s 22605 237.8 MiB - 9. deflate-best-speed 96.7 MiB 220.8 MiB/s 45 310.8 MiB - 10. gzip-best-speed 94.9 MiB 165 MiB/s 40 305.2 MiB - 11. deflate-default 86.3 MiB 143.1 MiB/s 34 311 MiB - 12. zstd-better-compression 74.2 MiB 104 MiB/s 22496 251.4 MiB - 13. pgzip-best-compression 83 MiB 55.9 MiB/s 4359 299.1 MiB - 14. gzip 83.6 MiB 40.5 MiB/s 69 304.8 MiB - 15. zstd-best-compression 68.9 MiB 19.2 MiB/s 22669 303.4 MiB - 16. deflate-best-compression 83 MiB 5.6 MiB/s 134 311 MiB - 17. gzip-best-compression 83 MiB 5.1 MiB/s 137 304.8 MiB + 6. zstd-fastest 79.8 MiB 356.2 MiB/s 22503 246 MiB + 7. zstd 76.8 MiB 323.7 MiB/s 22605 237.8 MiB + 8. deflate-best-speed 96.7 MiB 220.8 MiB/s 45 310.8 MiB + 9. gzip-best-speed 94.9 MiB 165 MiB/s 40 305.2 MiB + 10. deflate-default 86.3 MiB 143.1 MiB/s 34 311 MiB + 11. zstd-better-compression 74.2 MiB 104 MiB/s 22496 251.4 MiB + 12. pgzip-best-compression 83 MiB 55.9 MiB/s 4359 299.1 MiB + 13. gzip 83.6 MiB 40.5 MiB/s 69 304.8 MiB + 14. zstd-best-compression 68.9 MiB 19.2 MiB/s 22669 303.4 MiB + 15. deflate-best-compression 83 MiB 5.6 MiB/s 134 311 MiB + 16. gzip-best-compression 83 MiB 5.1 MiB/s 137 304.8 MiB ``` As you can see, s2 compression clearly favors performance over compression ratio. zstd on the other hand results almost half the size as s2. pgzip arguably offers the best balance on two worlds. @@ -73,21 +72,23 @@ Repeating 100 times per compression method (total 12.5 MiB). 8. gzip-best-speed 33.7 KiB 150.6 MiB/s 28 1.2 MiB 9. pgzip-best-speed 34.3 KiB 143.7 MiB/s 1649 220.2 MiB 10. deflate-default 31.2 KiB 126.3 MiB/s 22 1.1 MiB - 11. lz4 44.7 KiB 112.6 MiB/s 435 816.7 MiB - 12. pgzip 31.2 KiB 94.6 MiB/s 2634 277.5 MiB - 13. gzip 30.4 KiB 39.5 MiB/s 26 874.7 KiB - 14. deflate-best-compression 30.4 KiB 25.4 MiB/s 21 1 MiB - 15. gzip-best-compression 30.4 KiB 24.5 MiB/s 27 874.9 KiB - 16. pgzip-best-compression 30.4 KiB 23.1 MiB/s 2646 281.8 MiB - 17. zstd-best-compression 25.1 KiB 19.3 MiB/s 882 99.3 MiB + 11. pgzip 31.2 KiB 94.6 MiB/s 2634 277.5 MiB + 12. gzip 30.4 KiB 39.5 MiB/s 26 874.7 KiB + 13. deflate-best-compression 30.4 KiB 25.4 MiB/s 21 1 MiB + 14. gzip-best-compression 30.4 KiB 24.5 MiB/s 27 874.9 KiB + 15. pgzip-best-compression 30.4 KiB 23.1 MiB/s 2646 281.8 MiB + 16. zstd-best-compression 25.1 KiB 19.3 MiB/s 882 99.3 MiB ``` -While s2 significantly uses way less memory in this case, pgzip's numbers seem indifferent to the input size. [Turns out](https://github.com/klauspost/pgzip/issues/44), pgzip has different memory usage logic. It would quickly allocate necessary memory and plateau, which s2 is more on a linear fashion. Here is rough graph is demonstrate the difference: +While s2 uses significantly less memory in this case, pgzip's numbers seem indifferent to the input size. [Turns out](https://github.com/klauspost/pgzip/issues/44), pgzip has different memory usage logic. It would quickly allocate necessary memory and plateau, which s2 is more on a linear fashion. Here is rough graph is demonstrate the difference: ![s2 vs pgzip](s2_vs_pgzip.svg) Therefore, if your backup target is small, and memory is extremely restricted, s2 might be necessary. Otherwise, all algorithms are valid candidates. + Note: Newer Kopia versions no longer support reading contents that were compressed with the deprecated LZ4 algorithm. If your repository contains data written with LZ4, you must migrate it first using a Kopia version that still supports LZ4—for example by restoring the affected snapshots and/or repacking the repository with one of the currently supported compression algorithms—before upgrading. + + ### Minimum file size and extensions to compress As discussed above, some compression algorithms make sense only if the payload is large enough. So it might be beneficial to set a minimum file size when using these algorithms. From 09542631c266956e30f2b1961f794972f7ad4f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 16 Apr 2026 16:21:34 -0700 Subject: [PATCH 121/156] fix(cli): hash benchmarking count (#5312) Ref: - #4181 - #4199 --- cli/command_benchmark_hashing.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cli/command_benchmark_hashing.go b/cli/command_benchmark_hashing.go index a1c2f31ceb0..25a31198742 100644 --- a/cli/command_benchmark_hashing.go +++ b/cli/command_benchmark_hashing.go @@ -25,7 +25,7 @@ type commandBenchmarkHashing struct { func (c *commandBenchmarkHashing) setup(svc appServices, parent commandParent) { cmd := parent.Command("hashing", "Run hashing function benchmarks").Alias("hash") cmd.Flag("block-size", "Size of a block to hash").Default("1MB").BytesVar(&c.blockSize) - cmd.Flag("repeat", "Number of repetitions").Default("10").IntVar(&c.repeat) + cmd.Flag("repeat", "Number of repetitions").Default("100").IntVar(&c.repeat) cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) cmd.Flag("print-options", "Print out options usable for repository creation").BoolVar(&c.optionPrint) cmd.Action(svc.noRepositoryAction(c.run)) @@ -82,9 +82,7 @@ func (c *commandBenchmarkHashing) runBenchmark(ctx context.Context) []cryptoBenc var hashOutput [hashing.MaxHashSize]byte for range hashCount { - for range hashOutput { - hf(hashOutput[:0], input) - } + hf(hashOutput[:0], input) } }) From 051312b1cef58cacdfadc629c4bbc2dd637c1071 Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Thu, 16 Apr 2026 17:18:41 -0700 Subject: [PATCH 122/156] feat(ui): upgraded htmlui to the latest version (#5311) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2cad5d5f827..8c4cc99fa88 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893 + github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/minio/minio-go/v7 v7.0.100 diff --git a/go.sum b/go.sum index f7884be50af..cd5cb7267a1 100644 --- a/go.sum +++ b/go.sum @@ -173,8 +173,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893 h1:J9g3qLDJAIebtq9ojSPov12B5V2G3WEQ8s96Y/e/4pk= -github.com/kopia/htmluibuild v0.0.1-0.20260414002305-a859d43ee893/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7 h1:tMcr+W8OCaLHen5nxHDrchOKLNigCqslt2X9/kdPfkA= +github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= From 5bedcd5057cb79fa3875bcb0ea7c92066541e7b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:24:29 -0700 Subject: [PATCH 123/156] build(deps): upgrade to github.com/golang-jwt/jwt v5.3.1 (#5314) - Changelog: https://github.com/golang-jwt/jwt/releases/tag/v5.3.1 - Remove dependency on github.com/golang-jwt/jwt/v4 --- go.mod | 3 +-- go.sum | 6 ++---- internal/server/server.go | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 8c4cc99fa88..a5e2dbeb28b 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/fatih/color v1.19.0 github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c github.com/gofrs/flock v0.13.0 - github.com/golang-jwt/jwt/v4 v4.5.2 + github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/fswalker v0.3.3 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 @@ -108,7 +108,6 @@ require ( github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.4.0 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect - github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/golang/glog v1.2.5 // indirect github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect diff --git a/go.sum b/go.sum index cd5cb7267a1..fe37e164b79 100644 --- a/go.sum +++ b/go.sum @@ -124,10 +124,8 @@ github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= -github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= -github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= -github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= diff --git a/internal/server/server.go b/internal/server/server.go index cb9b75fc5f4..1407448b009 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -15,7 +15,7 @@ import ( "sync" "time" - "github.com/golang-jwt/jwt/v4" + "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" "github.com/gorilla/mux" "github.com/pkg/errors" From d1e5c1d8a0f46eda868b90f6aa2d06468ab77cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:41:39 -0700 Subject: [PATCH 124/156] chore(general): clean nits (#5313) - make benchmarking params uint - prevent error in compression benchmarking - lint on Windows and address linter warnings - upgrade golang.org/x/exp - upgrade github.com/cncf/xds/go - upgrade github.com/dustinkirkland/golang-petname - direct users to forum - add warning about _recovery recipes_ --- .github/workflows/lint.yml | 3 +++ Makefile | 10 +++++++--- README.md | 15 +++++++-------- cli/command_benchmark.go | 14 ++++++++++++-- cli/command_benchmark_crypto.go | 8 ++++---- cli/command_benchmark_ecc.go | 8 ++++---- cli/command_benchmark_encryption.go | 8 ++++---- cli/command_benchmark_hashing.go | 8 ++++---- cli/command_benchmark_splitters.go | 8 ++++---- fs/localfs/local_fs_windows.go | 1 - go.mod | 6 +++--- go.sum | 12 ++++++------ internal/mount/mount_net_use.go | 2 +- .../filesystem_storage_capacity_windows.go | 2 +- repo/compression/compressor_test.go | 4 ++++ ...committed_content_index_disk_cache_windows.go | 4 ++++ repo/content/index/content_id_to_bytes.go | 2 +- site/content/_index.html | 16 +++++----------- site/content/docs/Advanced/Actions/_index.md | 2 +- site/content/docs/Advanced/Compression/_index.md | 4 ++-- site/content/docs/Advanced/Consistency/_index.md | 4 ++-- site/hugo.toml | 7 +------ .../multiclient_test/framework/client.go | 4 ---- 23 files changed, 80 insertions(+), 72 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b693a0a4093..22cbd6d02e4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -52,6 +52,9 @@ jobs: sarif_file: govulncheck.sarif - name: Lint run: make lint + - name: Lint Windows + if: ${{ contains(matrix.os, 'ubuntu') }} + run: make lint-windows - name: Check Locks run: make check-locks - name: Prettier diff --git a/Makefile b/Makefile index 0818105b28c..ebf9b4e7cba 100644 --- a/Makefile +++ b/Makefile @@ -87,13 +87,17 @@ endif lint-and-log: $(linter) $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) | tee .linterr.txt -lint-all: $(linter) +lint-windows: $(linter) GOOS=windows GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) + +lint-darwin: $(linter) + GOOS=darwin GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) + GOOS=darwin GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) + +lint-all: $(linter) lint-windows lint-darwin GOOS=linux GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=linux GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=linux GOARCH=arm $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) - GOOS=darwin GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) - GOOS=darwin GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=openbsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=freebsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) diff --git a/README.md b/README.md index a4d09c63fe0..5222c202963 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ Kopia ![Kopia](icons/kopia.svg) [![Build Status](https://github.com/kopia/kopia/workflows/Build/badge.svg)](https://github.com/kopia/kopia/actions?query=workflow%3ABuild) -[![Slack](https://img.shields.io/badge/discuss-slack-blue.svg)](https://slack.kopia.io/) [![GoDoc](https://godoc.org/github.com/kopia/kopia/repo?status.svg)](https://godoc.org/github.com/kopia/kopia/repo) [![Coverage Status](https://codecov.io/gh/kopia/kopia/branch/master/graph/badge.svg?token=CRK4RMRFSH)](https://codecov.io/gh/kopia/kopia)[![Go Report Card](https://goreportcard.com/badge/github.com/kopia/kopia)](https://goreportcard.com/report/github.com/kopia/kopia) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) @@ -58,22 +57,22 @@ Using Kopia via graphical user interface (note: the video is of an older version Getting Started --- -See [Kopia Documentation](https://kopia.io/docs/) for more information. - -Building Kopia ---- -See [Build Infrastructure](BUILD.md) for more information on building Kopia and working with the source code. +See [Kopia Documentation](https://kopia.io/docs/) for more information. Also check out the [users forum](https://kopia.discourse.group). Licensing --- Kopia is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full license text. +Building Kopia +--- +See [Build Infrastructure](BUILD.md) for more information on building Kopia and working with the source code. + Contribution Guidelines --- -Kopia is open source and contributions are welcome. For more information on how to contribute see the [Contribution Guidelines](https://kopia.io/docs/contribution-guidelines/). +Kopia is open source. For more information see the [Contribution Guidelines](https://kopia.io/docs/contribution-guidelines/). Reporting Security Issues --- -If you find a security issue you'd like to disclose privately, please contact `security@kopia.io` or via direct message to maintainers on [Slack](https://slack.kopia.io). +If you find a security issue you'd like to disclose privately, please contact `security@kopia.io`. [![Netlify Status](https://api.netlify.com/api/v1/badges/6b5c1fe4-a0da-4e7e-939b-ff1105251985/deploy-status)](https://app.netlify.com/sites/kopia/deploys) diff --git a/cli/command_benchmark.go b/cli/command_benchmark.go index 447926b59cc..714430d0bbc 100644 --- a/cli/command_benchmark.go +++ b/cli/command_benchmark.go @@ -31,7 +31,11 @@ type cryptoBenchResult struct { throughput float64 } -func runInParallelNoInputNoResult(n int, run func()) { +func runInParallelNoInputNoResult(n uint, run func()) { + if n == 0 { + return + } + dummyArgs := make([]int, n) runInParallelNoResult(dummyArgs, func(_ int) { @@ -39,7 +43,13 @@ func runInParallelNoInputNoResult(n int, run func()) { }) } -func runInParallelNoInput[T any](n int, run func() T) T { +func runInParallelNoInput[T any](n uint, run func() T) T { + if n == 0 { + var zero T + + return zero + } + dummyArgs := make([]int, n) return runInParallel(dummyArgs, func(_ int) T { diff --git a/cli/command_benchmark_crypto.go b/cli/command_benchmark_crypto.go index dda48ef4d81..ddba8dedf90 100644 --- a/cli/command_benchmark_crypto.go +++ b/cli/command_benchmark_crypto.go @@ -16,10 +16,10 @@ import ( type commandBenchmarkCrypto struct { blockSize atunits.Base2Bytes - repeat int + repeat uint deprecatedAlgorithms bool optionPrint bool - parallel int + parallel uint out textOutput } @@ -27,9 +27,9 @@ type commandBenchmarkCrypto struct { func (c *commandBenchmarkCrypto) setup(svc appServices, parent commandParent) { cmd := parent.Command("crypto", "Run combined hash and encryption benchmarks") cmd.Flag("block-size", "Size of a block to encrypt").Default("1MB").BytesVar(&c.blockSize) - cmd.Flag("repeat", "Number of repetitions").Default("100").IntVar(&c.repeat) + cmd.Flag("repeat", "Number of repetitions").Default("100").UintVar(&c.repeat) cmd.Flag("deprecated", "Include deprecated algorithms").BoolVar(&c.deprecatedAlgorithms) - cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) + cmd.Flag("parallel", "Number of parallel goroutines").Default("1").UintVar(&c.parallel) cmd.Flag("print-options", "Print out options usable for repository creation").BoolVar(&c.optionPrint) cmd.Action(svc.noRepositoryAction(c.run)) c.out.setup(svc) diff --git a/cli/command_benchmark_ecc.go b/cli/command_benchmark_ecc.go index 59e90dc89f8..addf8b75f75 100644 --- a/cli/command_benchmark_ecc.go +++ b/cli/command_benchmark_ecc.go @@ -16,9 +16,9 @@ import ( type commandBenchmarkEcc struct { blockSize atunits.Base2Bytes - repeat int + repeat uint optionPrint bool - parallel int + parallel uint out textOutput } @@ -26,8 +26,8 @@ type commandBenchmarkEcc struct { func (c *commandBenchmarkEcc) setup(svc appServices, parent commandParent) { cmd := parent.Command("ecc", "Run ECC benchmarks") cmd.Flag("block-size", "Size of a block to encrypt").Default("10MB").BytesVar(&c.blockSize) - cmd.Flag("repeat", "Number of repetitions").Default("100").IntVar(&c.repeat) - cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) + cmd.Flag("repeat", "Number of repetitions").Default("100").UintVar(&c.repeat) + cmd.Flag("parallel", "Number of parallel goroutines").Default("1").UintVar(&c.parallel) cmd.Flag("print-options", "Print out options usable for repository creation").BoolVar(&c.optionPrint) cmd.Action(svc.noRepositoryAction(c.run)) c.out.setup(svc) diff --git a/cli/command_benchmark_encryption.go b/cli/command_benchmark_encryption.go index aa3362420ad..9a62dc1e32f 100644 --- a/cli/command_benchmark_encryption.go +++ b/cli/command_benchmark_encryption.go @@ -16,10 +16,10 @@ import ( type commandBenchmarkEncryption struct { blockSize atunits.Base2Bytes - repeat int + repeat uint deprecatedAlgorithms bool optionPrint bool - parallel int + parallel uint out textOutput } @@ -27,9 +27,9 @@ type commandBenchmarkEncryption struct { func (c *commandBenchmarkEncryption) setup(svc appServices, parent commandParent) { cmd := parent.Command("encryption", "Run encryption benchmarks") cmd.Flag("block-size", "Size of a block to encrypt").Default("1MB").BytesVar(&c.blockSize) - cmd.Flag("repeat", "Number of repetitions").Default("1000").IntVar(&c.repeat) + cmd.Flag("repeat", "Number of repetitions").Default("1000").UintVar(&c.repeat) cmd.Flag("deprecated", "Include deprecated algorithms").BoolVar(&c.deprecatedAlgorithms) - cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) + cmd.Flag("parallel", "Number of parallel goroutines").Default("1").UintVar(&c.parallel) cmd.Flag("print-options", "Print out options usable for repository creation").BoolVar(&c.optionPrint) cmd.Action(svc.noRepositoryAction(c.run)) c.out.setup(svc) diff --git a/cli/command_benchmark_hashing.go b/cli/command_benchmark_hashing.go index 25a31198742..36fa79cbc54 100644 --- a/cli/command_benchmark_hashing.go +++ b/cli/command_benchmark_hashing.go @@ -15,9 +15,9 @@ import ( type commandBenchmarkHashing struct { blockSize atunits.Base2Bytes - repeat int + repeat uint optionPrint bool - parallel int + parallel uint out textOutput } @@ -25,8 +25,8 @@ type commandBenchmarkHashing struct { func (c *commandBenchmarkHashing) setup(svc appServices, parent commandParent) { cmd := parent.Command("hashing", "Run hashing function benchmarks").Alias("hash") cmd.Flag("block-size", "Size of a block to hash").Default("1MB").BytesVar(&c.blockSize) - cmd.Flag("repeat", "Number of repetitions").Default("100").IntVar(&c.repeat) - cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) + cmd.Flag("repeat", "Number of repetitions").Default("100").UintVar(&c.repeat) + cmd.Flag("parallel", "Number of parallel goroutines").Default("1").UintVar(&c.parallel) cmd.Flag("print-options", "Print out options usable for repository creation").BoolVar(&c.optionPrint) cmd.Action(svc.noRepositoryAction(c.run)) c.out.setup(svc) diff --git a/cli/command_benchmark_splitters.go b/cli/command_benchmark_splitters.go index f2fdb0df4e4..be75dfa06bc 100644 --- a/cli/command_benchmark_splitters.go +++ b/cli/command_benchmark_splitters.go @@ -19,9 +19,9 @@ import ( type commandBenchmarkSplitters struct { randSeed int64 blockSize atunits.Base2Bytes - blockCount int + blockCount uint printOption bool - parallel int + parallel uint out textOutput } @@ -31,9 +31,9 @@ func (c *commandBenchmarkSplitters) setup(svc appServices, parent commandParent) cmd.Flag("rand-seed", "Random seed").Default("42").Int64Var(&c.randSeed) cmd.Flag("data-size", "Size of a data to split").Default("32MB").BytesVar(&c.blockSize) - cmd.Flag("block-count", "Number of data blocks to split").Default("16").IntVar(&c.blockCount) + cmd.Flag("block-count", "Number of data blocks to split").Default("16").UintVar(&c.blockCount) cmd.Flag("print-options", "Print out the fastest dynamic splitter option").BoolVar(&c.printOption) - cmd.Flag("parallel", "Number of parallel goroutines").Default("1").IntVar(&c.parallel) + cmd.Flag("parallel", "Number of parallel goroutines").Default("1").UintVar(&c.parallel) cmd.Action(svc.noRepositoryAction(c.run)) diff --git a/fs/localfs/local_fs_windows.go b/fs/localfs/local_fs_windows.go index 742aafc3793..6a20b813f42 100644 --- a/fs/localfs/local_fs_windows.go +++ b/fs/localfs/local_fs_windows.go @@ -25,7 +25,6 @@ func trailingSeparator(fsd *filesystemDirectory) string { fsd.prefix == `\\?\GLOBALROOT\Device\` && strings.HasPrefix(fsd.Name(), "HarddiskVolumeShadowCopy") && !strings.HasSuffix(fsd.Name(), separatorStr) { - return separatorStr } diff --git a/go.mod b/go.mod index a5e2dbeb28b..562d64784bb 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/chromedp/cdproto v0.0.0-20250724212937-08a3db8b4327 github.com/chromedp/chromedp v0.14.2 github.com/coreos/go-systemd/v22 v22.7.0 - github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 + github.com/dustinkirkland/golang-petname v0.0.0-20260215035315-f0c533e9ce9b github.com/edsrzf/mmap-go v1.2.0 github.com/fatih/color v1.19.0 github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c @@ -57,7 +57,7 @@ require ( go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/zap v1.27.1 golang.org/x/crypto v0.50.0 - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 + golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f golang.org/x/mod v0.35.0 golang.org/x/net v0.53.0 golang.org/x/oauth2 v0.36.0 @@ -90,7 +90,7 @@ require ( github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chromedp/sysutil v1.1.0 // indirect - github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect + github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect diff --git a/go.sum b/go.sum index fe37e164b79..bcf4b4be9e6 100644 --- a/go.sum +++ b/go.sum @@ -68,8 +68,8 @@ github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHG github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= @@ -81,8 +81,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0 h1:90Ly+6UfUypEF6vvvW5rQIv9opIL8CbmW9FT20LDQoY= -github.com/dustinkirkland/golang-petname v0.0.0-20191129215211-8e5a1ed0cff0/go.mod h1:V+Qd57rJe8gd4eiGzZyg4h54VLHmYVVw54iMnlAMrF8= +github.com/dustinkirkland/golang-petname v0.0.0-20260215035315-f0c533e9ce9b h1:qZ21OofI7zneC9dOEqul4FmIWz/YjJJMrf6fL7jrFYQ= +github.com/dustinkirkland/golang-petname v0.0.0-20260215035315-f0c533e9ce9b/go.mod h1:8AuBTZBRSFqEYBPYULd+NN474/zZBLP+6WeT5S9xlAc= github.com/edsrzf/mmap-go v1.2.0 h1:hXLYlkbaPzt1SaQk+anYwKSRNhufIDCchSPkUD6dD84= github.com/edsrzf/mmap-go v1.2.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= @@ -311,8 +311,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= diff --git a/internal/mount/mount_net_use.go b/internal/mount/mount_net_use.go index b5987d94b8f..20f8c74f4c4 100644 --- a/internal/mount/mount_net_use.go +++ b/internal/mount/mount_net_use.go @@ -61,7 +61,7 @@ func netUseMount(ctx context.Context, driveLetter, webdavURL string) (string, er // colon. s := bufio.NewScanner(strings.NewReader(out)) for s.Scan() { - for _, word := range strings.Split(s.Text(), " ") { + for word := range strings.SplitSeq(s.Text(), " ") { if isWindowsDrive(word) { return word, nil } diff --git a/repo/blob/filesystem/filesystem_storage_capacity_windows.go b/repo/blob/filesystem/filesystem_storage_capacity_windows.go index 4780befc45a..9446ff7d9f0 100644 --- a/repo/blob/filesystem/filesystem_storage_capacity_windows.go +++ b/repo/blob/filesystem/filesystem_storage_capacity_windows.go @@ -11,7 +11,7 @@ import ( "github.com/kopia/kopia/repo/blob" ) -func (fs *fsStorage) GetCapacity(ctx context.Context) (blob.Capacity, error) { +func (fs *fsStorage) GetCapacity(_ context.Context) (blob.Capacity, error) { var c blob.Capacity pathPtr, err := windows.UTF16PtrFromString(fs.RootPath) diff --git a/repo/compression/compressor_test.go b/repo/compression/compressor_test.go index a0d75c8f0ec..a68d277a9bf 100644 --- a/repo/compression/compressor_test.go +++ b/repo/compression/compressor_test.go @@ -99,6 +99,10 @@ func BenchmarkCompressor(b *testing.B) { var sortedNames []Name for id := range ByName { + if !IsSupported(id) { + continue + } + sortedNames = append(sortedNames, id) } diff --git a/repo/content/committed_content_index_disk_cache_windows.go b/repo/content/committed_content_index_disk_cache_windows.go index 4815dc67737..a23489032d6 100644 --- a/repo/content/committed_content_index_disk_cache_windows.go +++ b/repo/content/committed_content_index_disk_cache_windows.go @@ -31,9 +31,11 @@ func (c *diskCommittedContentIndexCache) mmapFile(ctx context.Context, filename retryCount := 0 for err != nil && retryCount < maxRetries { retryCount++ + contentlog.Log2(ctx, c.log, "retry unable to mmap.Open()", logparam.Int("retryCount", retryCount), logparam.Error("err", err)) + time.Sleep(nextDelay) nextDelay *= 2 @@ -54,9 +56,11 @@ func (c *diskCommittedContentIndexCache) mmapFile(ctx context.Context, filename if err2 := mm.Unmap(); err2 != nil { return errors.Wrapf(err2, "error unmapping index %v", filename) } + if err2 := f.Close(); err2 != nil { return errors.Wrapf(err2, "error closing index %v", filename) } + return nil }, nil } diff --git a/repo/content/index/content_id_to_bytes.go b/repo/content/index/content_id_to_bytes.go index f788749389a..b8add38229d 100644 --- a/repo/content/index/content_id_to_bytes.go +++ b/repo/content/index/content_id_to_bytes.go @@ -11,7 +11,7 @@ func bytesToContentID(b []byte) ID { } if len(b) > maxIDLength+1 { - panic(fmt.Sprintln("Content ID byte slice is longer than the maximum supported ID:", len(b))) + panic(fmt.Sprintf("Content ID byte slice is longer than the maximum supported ID: %d", len(b))) } var id ID diff --git a/site/content/_index.html b/site/content/_index.html index b1edb381d07..873787c5269 100644 --- a/site/content/_index.html +++ b/site/content/_index.html @@ -13,13 +13,10 @@ Download -
- User Support Forum - - - Developer Discussion + User Forum +

Encrypted, Compressed, and Deduplicated Backups Using the Cloud Storage You Pick.

Supports GUI and CLI on Windows, macOS and Linux.

@@ -52,14 +49,11 @@

Demo of Kopia's Graphical User Interface

With a secure and scalable architecture, **Kopia** can back up everything from small laptops to large servers. {{% /blocks/feature %}} - -{{% blocks/feature icon="fab fa-github" title="Contributions Welcome!" url="https://github.com/kopia/kopia/blob/master/GOVERNANCE.md" %}} -We use a [Pull Request](https://github.com/kopia/kopia/pulls) contributions workflow on GitHub. New contributors and bug reports are always welcome! +{{% blocks/feature icon="fas fa-comments" title="Join The Conversation" %}} +Join the [user forum](https://kopia.discourse.group) to get started with using **Kopia**, discuss features and issues. {{% /blocks/feature %}} - -{{% blocks/feature icon="fab fa-slack" title="Join The Conversation" %}} -Find us on [Slack](https://slack.kopia.io) to get started with using **Kopia**, discuss features and issues, meet the team, and more. +{{% blocks/feature icon="fab fa-github" title="Contributing" url="https://github.com/kopia/kopia/blob/master/GOVERNANCE.md" %}} {{% /blocks/feature %}} diff --git a/site/content/docs/Advanced/Actions/_index.md b/site/content/docs/Advanced/Actions/_index.md index e1d580f9bba..80cdb227b29 100644 --- a/site/content/docs/Advanced/Actions/_index.md +++ b/site/content/docs/Advanced/Actions/_index.md @@ -253,7 +253,7 @@ kopia policy set --after-folder-action "powershell -WindowStyle Hi Those are just some initial ideas, we're certain more interesting types of actions will be developed using this mechanism, including LVM snapshots, BTRFS Snapshots, notifications and more. -If you have ideas for extending this mechanism, definitely [file an Issue on Github](https://github.com/kopia/kopia/issues). +If you have ideas for extending this mechanism, please [file an Issue on Github](https://github.com/kopia/kopia/issues). If you develop a useful action script that you'd like to share with the community, we encourage you to do so by sending us a pull request to add to this web page or you can put them in your own repository and we'll be happy to link it from here. diff --git a/site/content/docs/Advanced/Compression/_index.md b/site/content/docs/Advanced/Compression/_index.md index a5e4dd14b7f..d3f998aae57 100644 --- a/site/content/docs/Advanced/Compression/_index.md +++ b/site/content/docs/Advanced/Compression/_index.md @@ -80,13 +80,13 @@ Repeating 100 times per compression method (total 12.5 MiB). 16. zstd-best-compression 25.1 KiB 19.3 MiB/s 882 99.3 MiB ``` -While s2 uses significantly less memory in this case, pgzip's numbers seem indifferent to the input size. [Turns out](https://github.com/klauspost/pgzip/issues/44), pgzip has different memory usage logic. It would quickly allocate necessary memory and plateau, which s2 is more on a linear fashion. Here is rough graph is demonstrate the difference: +While s2 uses significantly less memory in this case, pgzip's numbers seem indifferent to the input size. [Turns out](https://github.com/klauspost/pgzip/issues/44), pgzip has different memory usage logic. It would quickly allocate necessary memory and plateau, which s2 exhibits more of a linear growth. The graph below illustrates the difference. ![s2 vs pgzip](s2_vs_pgzip.svg) Therefore, if your backup target is small, and memory is extremely restricted, s2 might be necessary. Otherwise, all algorithms are valid candidates. - Note: Newer Kopia versions no longer support reading contents that were compressed with the deprecated LZ4 algorithm. If your repository contains data written with LZ4, you must migrate it first using a Kopia version that still supports LZ4—for example by restoring the affected snapshots and/or repacking the repository with one of the currently supported compression algorithms—before upgrading. +Note: Newer Kopia versions no longer support reading contents that were compressed with the deprecated LZ4 algorithm. If your repository contains data written with LZ4, you must migrate it first using a Kopia version that still supports LZ4—for example by restoring the affected snapshots and/or repacking the repository with one of the currently supported compression algorithms—before upgrading. ### Minimum file size and extensions to compress diff --git a/site/content/docs/Advanced/Consistency/_index.md b/site/content/docs/Advanced/Consistency/_index.md index 8e8c547fd56..60c6a475010 100644 --- a/site/content/docs/Advanced/Consistency/_index.md +++ b/site/content/docs/Advanced/Consistency/_index.md @@ -52,6 +52,6 @@ There are few tips to try, which are generally safe to try: 4. If a repository can’t be opened but was working recently and maintenance has not run yet, it may be helpful to try to remove (or stash away) the most recently-written index files whose names start with `x` in the reverse timestamp order one by one until the issue is fixed. This will effectively roll back the repository writes to a prior state. Exercise caution when removing the files. -5. If the steps above do not help, report your issue on https://kopia.discourse.group or https://slack.kopia.io. Kopia has many low-level data recovery tools, but they should not be used by end users without guidance from developers. +5. If the steps above do not help, report your issue on https://kopia.discourse.group. -> NOTE: Since all data corruption cases are unique, it’s generally not recommended to attempt fixes recommended to other users even for possibly similar issues, since the particular fix method may not be applicable. +> NOTE: While Kopia has many low-level data recovery tools, it’s generally not recommended to attempt fixes recommended to other users even for possibly similar issues, since all data corruption cases are unique and the particular fix method may not be applicable. Following those methods may damage the repository further and make the data completely unrecoverable. diff --git a/site/hugo.toml b/site/hugo.toml index 187aaeeb5ee..15932a09505 100644 --- a/site/hugo.toml +++ b/site/hugo.toml @@ -117,16 +117,11 @@ no = 'Sorry to hear that. Please Date: Thu, 16 Apr 2026 22:35:45 -0700 Subject: [PATCH 125/156] build(deps): dependabot cooldown (#5316) --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7f6a19dd925..3078efb44ad 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,6 +5,8 @@ updates: open-pull-requests-limit: 5 schedule: interval: weekly + cooldown: + default-days: 4 ignore: # htmluibuild is explicitly updated by us - dependency-name: "github.com/kopia/htmluibuild" @@ -29,6 +31,8 @@ updates: open-pull-requests-limit: 5 schedule: interval: monthly + cooldown: + default-days: 4 groups: github-actions: patterns: @@ -41,6 +45,8 @@ updates: directory: "/app" schedule: interval: monthly + cooldown: + default-days: 7 groups: # create once-per-week PR for all KopiaUI dependency bumps, that usually includes # electron, electron-builder, etc. From e82297d9c2d2d0c710dd0ae4073c118847907a08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 05:59:03 +0000 Subject: [PATCH 126/156] build(deps-dev): bump the kopia-ui-npm-dependencies group (#5317) Bumps the kopia-ui-npm-dependencies group in /app with 3 updates: [dotenv](https://github.com/motdotla/dotenv), [electron](https://github.com/electron/electron) and [prettier](https://github.com/prettier/prettier). Updates `dotenv` from 17.4.0 to 17.4.1 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v17.4.0...v17.4.1) Updates `electron` from 41.1.1 to 41.2.0 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v41.1.1...v41.2.0) Updates `prettier` from 3.8.1 to 3.8.2 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.8.1...3.8.2) --- updated-dependencies: - dependency-name: dotenv dependency-version: 17.4.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies - dependency-name: electron dependency-version: 41.2.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies - dependency-name: prettier dependency-version: 3.8.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 24 ++++++++++++------------ app/package.json | 6 +++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 7ae803f2517..185e32afada 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -22,12 +22,12 @@ "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.4.0", - "electron": "^41.1.1", + "dotenv": "^17.4.1", + "electron": "^41.2.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.8.1" + "prettier": "^3.8.2" } }, "node_modules/@develar/schema-utils": { @@ -2035,9 +2035,9 @@ } }, "node_modules/dotenv": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", - "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2115,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "41.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-41.1.1.tgz", - "integrity": "sha512-8bgvDhBjli+3Z2YCKgzzoBPh6391pr7Xv2h/tTJG4ETgvPvUxZomObbZLs31mUzYb6VrlcDDd9cyWyNKtPm3tA==", + "version": "41.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-41.2.0.tgz", + "integrity": "sha512-0OKLiymqfV0WK68RBXqAm3Myad2TpI5wwxLCBEUcH5Nugo3YfSk7p1Js/AL9266qTz5xZioUnxt9hG8FFwax0g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3932,9 +3932,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz", + "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", "dev": true, "license": "MIT", "bin": { diff --git a/app/package.json b/app/package.json index 9df401961fb..f6e211fa6c0 100644 --- a/app/package.json +++ b/app/package.json @@ -126,12 +126,12 @@ "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.4.0", - "electron": "^41.1.1", + "dotenv": "^17.4.1", + "electron": "^41.2.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.8.1" + "prettier": "^3.8.2" }, "homepage": "./", "description": "Fast and secure open source backup.", From 526dbbc2cfc8af003a693b81ea3f20457a5df6b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 06:01:05 +0000 Subject: [PATCH 127/156] build(deps): bump actions/upload-artifact in the github-actions group (#5318) Bumps the github-actions group with 1 update: [actions/upload-artifact](https://github.com/actions/upload-artifact). Updates `actions/upload-artifact` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/bbbca2ddaa5d8feaa63e36b76fdaad77386f024f...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/code-coverage.yml | 2 +- .github/workflows/compat-test.yml | 2 +- .github/workflows/endurance-test.yml | 2 +- .github/workflows/htmlui-tests.yml | 2 +- .github/workflows/make.yml | 4 ++-- .github/workflows/ossf-scorecard.yml | 2 +- .github/workflows/stress-test.yml | 2 +- .github/workflows/tests.yml | 2 +- .github/workflows/volume-shadow-copy-test.yml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index 8412f706647..3ba1314df80 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -26,7 +26,7 @@ jobs: with: files: coverage.txt - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml index 92ef4c7faa2..54b777fe8fa 100644 --- a/.github/workflows/compat-test.yml +++ b/.github/workflows/compat-test.yml @@ -24,7 +24,7 @@ jobs: - name: Compat Test run: make compat-tests - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml index fde8674cde3..79daccecb64 100644 --- a/.github/workflows/endurance-test.yml +++ b/.github/workflows/endurance-test.yml @@ -38,7 +38,7 @@ jobs: - name: Endurance Tests run: make endurance-tests - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml index 919bc1f9ed0..4ed5fb8db33 100644 --- a/.github/workflows/htmlui-tests.yml +++ b/.github/workflows/htmlui-tests.yml @@ -41,7 +41,7 @@ jobs: - name: Run Tests run: make htmlui-e2e-test - name: Upload Screenshots - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: path: .screenshots/**/*.png if-no-files-found: ignore diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 22811bb47ce..290d87af782 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -92,7 +92,7 @@ jobs: # macOS signing certificate (base64-encoded), used by Electron Builder MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} - name: Upload Kopia Artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: kopia-${{ matrix.os }} path: | @@ -113,7 +113,7 @@ jobs: dist/kopia-ui/*.yml if-no-files-found: ignore - name: Upload Kopia Binary - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: kopia_binaries-${{ matrix.os }} path: | diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 55b73d7b67e..901040a9d46 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -45,7 +45,7 @@ jobs: category: ossf - name: "Upload analysis results as 'Job Artifact'" - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml index 3a3c5bd7e4a..ab1bf7a661a 100644 --- a/.github/workflows/stress-test.yml +++ b/.github/workflows/stress-test.yml @@ -28,7 +28,7 @@ jobs: - name: Stress Test run: make stress-test - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs path: .logs/**/*.log diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1d0d9d31070..b6a9288d994 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -56,7 +56,7 @@ jobs: - name: Integration Tests run: make -j2 ci-integration-tests - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs-${{ matrix.os }} path: .logs/**/*.log diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml index f2cfd76a7da..e369b9a31f1 100644 --- a/.github/workflows/volume-shadow-copy-test.yml +++ b/.github/workflows/volume-shadow-copy-test.yml @@ -32,7 +32,7 @@ jobs: - name: Non-Admin Test run: gsudo -i Medium make os-snapshot-tests - name: Upload Logs - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: logs path: .logs/**/*.log From c8b8fe1c7ff6cadd8a0e2eb32f10c60c880f1cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Sat, 18 Apr 2026 12:00:47 -0700 Subject: [PATCH 128/156] refactor(general): bigmapbench profiling (#5321) - improve bigmapbench stats output - refactor bigmapbench profiling and remove unneeded dependency - nit: unexport const --- cli/observability_flags.go | 6 +- go.mod | 3 - go.sum | 12 --- internal/bigmap/bigmapbench/main.go | 158 ++++++++++++++++++++++------ 4 files changed, 128 insertions(+), 51 deletions(-) diff --git a/cli/observability_flags.go b/cli/observability_flags.go index 442d59acdde..b75637baee9 100644 --- a/cli/observability_flags.go +++ b/cli/observability_flags.go @@ -29,8 +29,8 @@ import ( "github.com/kopia/kopia/repo" ) -// DirMode is the directory mode for output directories. -const DirMode = 0o700 +// dirMode is the directory mode for output directories. +const dirMode = 0o700 //nolint:gochecknoglobals var metricsPushFormats = map[string]expfmt.Format{ @@ -165,7 +165,7 @@ func (c *observabilityFlags) start(ctx context.Context) error { func mkSubdirectories(directoryNames ...string) (dirName string, err error) { dirName = filepath.Join(directoryNames...) - if err := os.MkdirAll(dirName, DirMode); err != nil { + if err := os.MkdirAll(dirName, dirMode); err != nil { return "", errors.Wrapf(err, "could not create '%q' subdirectory to save diagnostics output", dirName) } diff --git a/go.mod b/go.mod index 562d64784bb..536dad19b7b 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,6 @@ require ( github.com/natefinch/atomic v1.0.1 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 github.com/pkg/errors v0.9.1 - github.com/pkg/profile v1.7.0 github.com/pkg/sftp v1.13.10 github.com/prometheus/client_golang v1.23.2 github.com/prometheus/client_model v0.6.2 @@ -96,7 +95,6 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect @@ -109,7 +107,6 @@ require ( github.com/gobwas/ws v1.4.0 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/golang/glog v1.2.5 // indirect - github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect diff --git a/go.sum b/go.sum index bcf4b4be9e6..0333dc755bb 100644 --- a/go.sum +++ b/go.sum @@ -65,9 +65,6 @@ github.com/chromedp/chromedp v0.14.2 h1:r3b/WtwM50RsBZHMUm9fsNhhzRStTHrKdr2zmwbZ github.com/chromedp/chromedp v0.14.2/go.mod h1:rHzAv60xDE7VNy/MYtTUrYreSc0ujt2O1/C3bzctYBo= github.com/chromedp/sysutil v1.1.0 h1:PUFNv5EcprjqXZD9nJb9b/c9ibAbxiYo4exNWZyipwM= github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHGPTUfWTJ8= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= @@ -95,8 +92,6 @@ github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= -github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= -github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c h1:DBGU7zCwrrPPDsD6+gqKG8UfMxenWg9BOJE/Nmfph+4= @@ -136,9 +131,6 @@ 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/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-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= -github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= -github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= github.com/google/readahead v0.0.0-20161222183148-eaceba169032 h1:6Be3nkuJFyRfCgr6qTIzmRp8y9QwDIbqy/nYr9WDPos= github.com/google/readahead v0.0.0-20161222183148-eaceba169032/go.mod h1:qYysrqQXuV4tzsizt4oOQ6mrBZQ0xnQXP3ylXX8Jk5Y= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= @@ -157,7 +149,6 @@ github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= -github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= 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/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= @@ -213,8 +204,6 @@ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmd github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= -github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pkg/sftp v1.13.10 h1:+5FbKNTe5Z9aspU88DPIKJ9z2KZoaGCu6Sr6kKR/5mU= github.com/pkg/sftp v1.13.10/go.mod h1:bJ1a7uDhrX/4OII+agvy28lzRvQrmIQuaHrcI1HbeGA= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -324,7 +313,6 @@ golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= diff --git a/internal/bigmap/bigmapbench/main.go b/internal/bigmap/bigmapbench/main.go index 760ada05f01..aa99ffeda8a 100644 --- a/internal/bigmap/bigmapbench/main.go +++ b/internal/bigmap/bigmapbench/main.go @@ -7,13 +7,14 @@ import ( "encoding/binary" "flag" "fmt" + "log" "os" + "path/filepath" "runtime" + "runtime/pprof" "sync" "time" - "github.com/pkg/profile" - "github.com/kopia/kopia/internal/bigmap" "github.com/kopia/kopia/internal/clock" "github.com/kopia/kopia/repo/logging" @@ -27,10 +28,11 @@ const ( //nolint:gochecknoglobals var ( - impl = flag.Int("impl", implMapWithEmptyValue, "Select implementation") - profileDir = flag.String("profile-dir", "", "Profile directory") - profileCPU = flag.Bool("profile-cpu", false, "Profile CPU") - profileMemory = flag.Bool("profile-memory", false, "Profile RAM") + impl = flag.Int("impl", implMapWithEmptyValue, "Select implementation") + profileDir = flag.String("profile-dir", "", "Profile directory") + profileCPU = flag.Bool("profile-cpu", false, "Profile CPU") + profileMemory = flag.Bool("profile-memory", false, "Profile memory usage") + profileMemoryRate = flag.Int("profile-memory-rate", -1, "Profile memory rate") ) func main() { @@ -46,17 +48,7 @@ func main() { ms0 runtime.MemStats ) - if *profileDir != "" { - pp := profile.ProfilePath(*profileDir) - - if *profileCPU { - defer profile.Start(pp, profile.CPUProfile).Stop() - } - - if *profileMemory { - defer profile.Start(pp, profile.MemProfile).Stop() - } - } + defer maybeStartProfiling().stop() switch *impl { case implSyncMap: @@ -80,22 +72,6 @@ func main() { t0 := clock.Now() for i := range 300_000_000 { - if i%1_000_000 == 0 && i > 0 { - var ms runtime.MemStats - - runtime.ReadMemStats(&ms) - - alloc := ms.HeapAlloc - ms0.HeapAlloc - dur := clock.Now().Sub(t0).Truncate(time.Second) - - fmt.Printf("elapsed %v count: %v M bytes: %v MB bytes/item: %v Mitems/sec: %.1f\n", - dur, - float64(i)/1e6, - alloc/1e6, - alloc/uint64(i), - float64(i)/dur.Seconds()/1e6) - } - // generate key=sha256(i) without allocations. h.Reset() binary.LittleEndian.PutUint64(num[:], uint64(i)) //nolint:gosec @@ -110,5 +86,121 @@ func main() { case implMapWithValues: bm.PutIfAbsent(ctx, keyBuf[:], keyBuf[:]) } + + count := uint64(i + 1) //nolint:gosec + + if count%1_000_000 == 0 { + var ms runtime.MemStats + + runtime.ReadMemStats(&ms) + + alloc := ms.HeapAlloc - ms0.HeapAlloc + dur := clock.Now().Sub(t0) + + fmt.Printf("elapsed %v, count: %v M, bytes: %v MB, bytes/item: %v, Mitems/sec: %.1f\n", + dur.Truncate(time.Second), + float64(count)/1e6, + alloc/1e6, + alloc/count, + float64(count)/dur.Seconds()/1e6) + } + } +} + +// dirMode is the directory mode for output directories. +const dirMode = 0o700 + +type stopperFn func() + +func (f stopperFn) stop() { + f() +} + +func maybeStartProfiling() stopperFn { + if *profileDir == "" { + return func() {} + } + + // ensure upfront that the pprof output dir can be created. + if err := os.MkdirAll(*profileDir, dirMode); err != nil { + log.Fatalln("could not create directory for profile output:", err) + } + + var cpuProfileStopper stopperFn + + if *profileCPU { + cpuProfileStopper = startCPUProfiling(*profileDir) + } + + if *profileMemory && *profileMemoryRate >= 0 { + runtime.MemProfileRate = *profileMemoryRate + } + + return func() { + if cpuProfileStopper != nil { + cpuProfileStopper() + } + + if *profileMemory { + dumpProfiles(*profileDir) + } + } +} + +func startCPUProfiling(profDir string) stopperFn { + // start CPU profile dumper + f, err := os.Create(filepath.Join(profDir, "cpu.pprof")) //nolint:gosec + if err != nil { + log.Fatalln("could not create CPU profile output file:", err) + } + + // CPU profile profStopper + profStopper := func() { + pprof.StopCPUProfile() + + if err := f.Close(); err != nil { + log.Println("error closing CPU profile output file:", err) + } + } + + if err := pprof.StartCPUProfile(f); err != nil { + profStopper() + + log.Fatalln("could not start CPU profile:", err) + } + + return profStopper +} + +func dumpProfiles(profDir string) { + if err := os.MkdirAll(profDir, dirMode); err != nil { + log.Println("could not create directory for profile output:", err) + + return + } + + runtime.GC() // force GC to include stats since last GC + + for _, p := range pprof.Profiles() { + func() { + fname := filepath.Join(profDir, p.Name()+".pprof") + + f, err := os.Create(fname) //nolint:gosec + if err != nil { + log.Printf("unable to create profile output file '%s': %v", fname, err) + + return + } + + defer func() { + if err := f.Close(); err != nil { + log.Printf("unable to close profile output file '%s': %v", fname, err) + } + }() + + if err := p.WriteTo(f, 0); err != nil { + log.Printf("unable to write profile to file '%s': %v", fname, err) + } + }() } } From eee59b0e3c6eeab0f2b1bf9763d530a8a08eb554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Sun, 19 Apr 2026 22:30:58 -0700 Subject: [PATCH 129/156] chore(providers): warn messages for extra storage providers (#5324) Add warnings for unsupported, not actively tested and not maintained providers --- cli/app.go | 6 +++--- repo/blob/b2/b2_storage.go | 7 ++++++- repo/blob/gdrive/gdrive_storage.go | 2 ++ repo/blob/rclone/rclone_storage.go | 2 ++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cli/app.go b/cli/app.go index 3c6b5bf1b07..469efdc0a23 100644 --- a/cli/app.go +++ b/cli/app.go @@ -330,12 +330,12 @@ func NewApp() *App { {"from-config", "the provided configuration file", func() StorageFlags { return &storageFromConfigFlags{} }}, {"azure", "an Azure blob storage", func() StorageFlags { return &storageAzureFlags{} }}, - {"b2", "a B2 bucket", func() StorageFlags { return &storageB2Flags{} }}, + {"b2", "a B2 bucket [DEPRECATED]", func() StorageFlags { return &storageB2Flags{} }}, {"filesystem", "a filesystem", func() StorageFlags { return &storageFilesystemFlags{} }}, {"gcs", "a Google Cloud Storage bucket", func() StorageFlags { return &storageGCSFlags{} }}, - {"gdrive", "a Google Drive folder", func() StorageFlags { return &storageGDriveFlags{} }}, + {"gdrive", "a Google Drive folder [Not maintained]", func() StorageFlags { return &storageGDriveFlags{} }}, - {"rclone", "a rclone-based provided", func() StorageFlags { return &storageRcloneFlags{} }}, + {"rclone", "a rclone-based provider [Not maintained]", func() StorageFlags { return &storageRcloneFlags{} }}, {"s3", "an S3 bucket", func() StorageFlags { return &storageS3Flags{} }}, {"sftp", "an SFTP storage", func() StorageFlags { return &storageSFTPFlags{} }}, {"webdav", "a WebDAV storage", func() StorageFlags { return &storageWebDAVFlags{} }}, diff --git a/repo/blob/b2/b2_storage.go b/repo/blob/b2/b2_storage.go index 595f3dfacbe..a445e255b31 100644 --- a/repo/blob/b2/b2_storage.go +++ b/repo/blob/b2/b2_storage.go @@ -16,6 +16,7 @@ import ( "github.com/kopia/kopia/internal/timestampmeta" "github.com/kopia/kopia/repo/blob" "github.com/kopia/kopia/repo/blob/retrying" + "github.com/kopia/kopia/repo/logging" ) const ( @@ -24,6 +25,8 @@ const ( timeMapKey = "kopia-mtime" // case is important, must be all-lowercase ) +var log = logging.Module("b2") + type b2Storage struct { Options blob.DefaultProviderImplementation @@ -247,7 +250,9 @@ func (s *b2Storage) String() string { } // New creates new B2-backed storage with specified options. -func New(_ context.Context, opt *Options, isCreate bool) (blob.Storage, error) { +func New(ctx context.Context, opt *Options, isCreate bool) (blob.Storage, error) { + log(ctx).Warn("The B2 storage provider is deprecated and will be removed in the future, use the S3-compatible storage provider instead") + _ = isCreate if opt.BucketName == "" { diff --git a/repo/blob/gdrive/gdrive_storage.go b/repo/blob/gdrive/gdrive_storage.go index 417e42c97b1..b86bfcdfc49 100644 --- a/repo/blob/gdrive/gdrive_storage.go +++ b/repo/blob/gdrive/gdrive_storage.go @@ -547,6 +547,8 @@ func CreateDriveService(ctx context.Context, opt *Options) (*drive.Service, erro func New(ctx context.Context, opt *Options, isCreate bool) (blob.Storage, error) { _ = isCreate + log(ctx).Warn("The GDrive storage provider is not actively tested, it may cause data loss, use at your own risk") + if opt.FolderID == "" { return nil, errors.New("folder-id must be specified") } diff --git a/repo/blob/rclone/rclone_storage.go b/repo/blob/rclone/rclone_storage.go index b59bed2b679..5fdeeb47687 100644 --- a/repo/blob/rclone/rclone_storage.go +++ b/repo/blob/rclone/rclone_storage.go @@ -248,6 +248,8 @@ func (r *rcloneStorage) runRCloneAndWaitForServerAddress(ctx context.Context, c // //nolint:funlen func New(ctx context.Context, opt *Options, isCreate bool) (blob.Storage, error) { + log(ctx).Warn("The rclone storage provider is not actively tested, it may cause data loss, use at your own risk") + // generate directory for all temp files. td, err := os.MkdirTemp("", "kopia-rclone") if err != nil { From d7165959f6bcd256c30baab807b4f488e6175c1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 03:06:24 +0000 Subject: [PATCH 130/156] build(deps): bump the common-golang-dependencies group with 2 updates (#5325) Bumps the common-golang-dependencies group with 2 updates: [github.com/Azure/azure-sdk-for-go/sdk/azcore](https://github.com/Azure/azure-sdk-for-go) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `github.com/Azure/azure-sdk-for-go/sdk/azcore` from 1.21.0 to 1.21.1 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.21.0...sdk/azcore/v1.21.1) Updates `google.golang.org/api` from 0.275.0 to 0.276.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.275.0...v0.276.0) --- updated-dependencies: - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azcore dependency-version: 1.21.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.276.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 536dad19b7b..0374e6279d7 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.25.9 require ( cloud.google.com/go/storage v1.62.1 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 github.com/alecthomas/kingpin/v2 v2.4.0 @@ -65,7 +65,7 @@ require ( golang.org/x/term v0.42.0 golang.org/x/text v0.36.0 golang.org/x/time v0.15.0 - google.golang.org/api v0.275.0 + google.golang.org/api v0.276.0 google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -79,7 +79,7 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.7.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 // indirect github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect diff --git a/go.sum b/go.sum index 0333dc755bb..d2aa53b0b2e 100644 --- a/go.sum +++ b/go.sum @@ -20,14 +20,14 @@ cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYX cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 h1:fou+2+WFTib47nS+nz/ozhEBnvU96bKHy6LjRsY4E28= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0/go.mod h1:t76Ruy8AHvUAC8GfMWJMa0ElSbuIcO03NLpynfbgsPA= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 h1:jHb/wfvRikGdxMXYV3QG/SzUOPYN9KEUUuC0Yd0/vC0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1/go.mod h1:pzBXCYn05zvYIrwLgtK8Ap8QcjRg+0i76tMQdWN6wOk= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1 h1:Hk5QBxZQC1jb2Fwj6mpzme37xbCDdNTxU7O9eb5+LB4= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.1/go.mod h1:IYus9qsFobWIc2YVwe/WPjcnyCkPKtnHAqUYeebc8z0= 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.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2/go.mod h1:XtLgD3ZD34DAaVIIAyG3objl5DynM3CQ/vMcbBNJZGI= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 h1:fhqpLE3UEXi9lPaBRpQ6XuRW0nU7hgg4zlmZZa+a9q4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0/go.mod h1:7dCRMLwisfRH3dBupKeNCioWYUZ4SS09Z14H+7i8ZoY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1 h1:/Zt+cDPnpC3OVDm/JKLOs7M2DKmLRIIp3XIx9pHHiig= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1/go.mod h1:Ng3urmn6dYe8gnbCMoHHVl5APYz2txho3koEkV2o2HA= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 h1:jWQK1GI+LeGGUKBADtcH2rRqPxYB1Ljwms5gFA2LqrM= @@ -326,8 +326,8 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= -google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= +google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= From fd7a4fb5ffca6ec03950f8c762c1342f1ccf97e4 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:50:30 -0700 Subject: [PATCH 131/156] build(deps): upgrade uuid to v14 to resolve moderate npm audit vulnerability (#5341) Upgrade uuid to v14 to fix npm audit vulnerability --- app/package-lock.json | 8 ++++---- app/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 185e32afada..63fbe6dbce8 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -15,7 +15,7 @@ "electron-updater": "^6.8.3", "minimist": "^1.2.8", "semver": "^7.7.2", - "uuid": "^13.0.0" + "uuid": "^14.0.0" }, "devDependencies": { "@electron/notarize": "^3.1.1", @@ -4810,9 +4810,9 @@ "license": "MIT" }, "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/app/package.json b/app/package.json index f6e211fa6c0..f3bda4cc8ff 100644 --- a/app/package.json +++ b/app/package.json @@ -9,7 +9,7 @@ "electron-updater": "^6.8.3", "minimist": "^1.2.8", "semver": "^7.7.2", - "uuid": "^13.0.0" + "uuid": "^14.0.0" }, "type": "module", "author": { From fe57e8d8d9b6659d7e6c70eff691dd30d22071a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:16:23 -0700 Subject: [PATCH 132/156] chore(ci): skip setup step on PRs on MacOS (#5344) --- .github/workflows/make.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 290d87af782..a3a669363eb 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -62,7 +62,7 @@ jobs: CSC_KEYCHAIN: ${{ secrets.CSC_KEYCHAIN }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} - if: ${{ contains(matrix.os, 'macos') }} + if: ${{ contains(matrix.os, 'macos') && github.event_name != 'pull_request' }} - name: Install Windows signing tools # install signing tools and credentials for macOS and Windows outside of main # build process. @@ -90,7 +90,7 @@ jobs: WINDOWS_SIGN_TOOL: ${{ secrets.WINDOWS_SIGN_TOOL }} # macOS signing certificate (base64-encoded), used by Electron Builder - MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }} + MACOS_SIGNING_IDENTITY: ${{ github.event_name != 'pull_request' && secrets.MACOS_SIGNING_IDENTITY || '' }} - name: Upload Kopia Artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: From f7d80b90f8db48381e2b4e5e847dae3595164490 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:17:43 -0700 Subject: [PATCH 133/156] build(deps-dev): bump postcss (#5346) Bumps the npm_and_yarn group with 1 update in the /site directory: [postcss](https://github.com/postcss/postcss). Updates `postcss` from 8.5.8 to 8.5.12 - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.5.8...8.5.12) --- updated-dependencies: - dependency-name: postcss dependency-version: 8.5.12 dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- site/package-lock.json | 8 ++++---- site/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index 49ede594448..83ed864c1c8 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "devDependencies": { "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", + "postcss": "^8.5.12", "postcss-cli": "^10.1.0" } }, @@ -683,9 +683,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", "dev": true, "funding": [ { diff --git a/site/package.json b/site/package.json index 2d369e13318..dbfb9d3efac 100644 --- a/site/package.json +++ b/site/package.json @@ -7,7 +7,7 @@ "license": "ISC", "devDependencies": { "autoprefixer": "^10.4.14", - "postcss": "^8.4.24", + "postcss": "^8.5.12", "postcss-cli": "^10.1.0" } } From 3aa593164e570c8a9c3f959a7efbe0fde1eb4cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:39:17 -0700 Subject: [PATCH 134/156] chore(ci): license-check-go make target (#5347) --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ebf9b4e7cba..a85e198e5ea 100644 --- a/Makefile +++ b/Makefile @@ -306,8 +306,10 @@ provider-tests: $(gotestsum) $(rclone) $(MINIO_MC_PATH) ALLOWED_LICENSES=Apache-2.0;MIT;BSD-2-Clause;BSD-3-Clause;CC0-1.0;ISC;MPL-2.0;CC-BY-3.0;CC-BY-4.0;ODC-By-1.0;WTFPL;0BSD;Python-2.0;BSD;Unlicense -license-check: $(wwhrd) app-node-modules +license-check-go: $(wwhrd) $(wwhrd) check + +license-check: license-check-go app-node-modules (cd app && npx license-checker --summary --production --onlyAllow "$(ALLOWED_LICENSES)") vtest: $(gotestsum) From 7bd7f23910f92c03431a0f8a4066ff5cd6e68612 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 04:51:26 +0000 Subject: [PATCH 135/156] build(deps-dev): bump @xmldom/xmldom from 0.8.12 to 0.8.13 in /app (#5327) Bumps [@xmldom/xmldom](https://github.com/xmldom/xmldom) from 0.8.12 to 0.8.13. - [Release notes](https://github.com/xmldom/xmldom/releases) - [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md) - [Commits](https://github.com/xmldom/xmldom/compare/0.8.12...0.8.13) --- updated-dependencies: - dependency-name: "@xmldom/xmldom" dependency-version: 0.8.13 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 63fbe6dbce8..b533972c24f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -730,9 +730,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", - "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", "dev": true, "license": "MIT", "engines": { From 6ca7b3442c3430f61d5066ead5d17d07ab0610fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:54:19 -0700 Subject: [PATCH 136/156] build(deps-dev): bump the kopia-ui-npm-dependencies group across 1 directory with 3 updates (#5328) Bumps the kopia-ui-npm-dependencies group with 3 updates in the /app directory: [dotenv](https://github.com/motdotla/dotenv), [electron](https://github.com/electron/electron) and [prettier](https://github.com/prettier/prettier). Updates `dotenv` from 17.4.1 to 17.4.2 - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v17.4.1...v17.4.2) Updates `electron` from 41.2.0 to 41.2.2 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v41.2.0...v41.2.2) Updates `prettier` from 3.8.2 to 3.8.3 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.8.2...3.8.3) --- updated-dependencies: - dependency-name: dotenv dependency-version: 17.4.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies - dependency-name: electron dependency-version: 41.2.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies - dependency-name: prettier dependency-version: 3.8.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 24 ++++++++++++------------ app/package.json | 6 +++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index b533972c24f..ef05f5a71dc 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -22,12 +22,12 @@ "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.4.1", - "electron": "^41.2.0", + "dotenv": "^17.4.2", + "electron": "^41.2.2", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.8.2" + "prettier": "^3.8.3" } }, "node_modules/@develar/schema-utils": { @@ -2035,9 +2035,9 @@ } }, "node_modules/dotenv": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", - "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2115,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "41.2.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-41.2.0.tgz", - "integrity": "sha512-0OKLiymqfV0WK68RBXqAm3Myad2TpI5wwxLCBEUcH5Nugo3YfSk7p1Js/AL9266qTz5xZioUnxt9hG8FFwax0g==", + "version": "41.2.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-41.2.2.tgz", + "integrity": "sha512-3rzz/hVIpF726W9g7nleQzyF2IOEZbzZnUTUYGhMaEfsoab8fDyOYAWbdBdo4+DczS1Ifz11rdYo8IAAGcRx/g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3932,9 +3932,9 @@ } }, "node_modules/prettier": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz", - "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { diff --git a/app/package.json b/app/package.json index f3bda4cc8ff..035621aa3bb 100644 --- a/app/package.json +++ b/app/package.json @@ -126,12 +126,12 @@ "@playwright/test": "^1.59.1", "asar": "^3.2.0", "concurrently": "^9.2.1", - "dotenv": "^17.4.1", - "electron": "^41.2.0", + "dotenv": "^17.4.2", + "electron": "^41.2.2", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", - "prettier": "^3.8.2" + "prettier": "^3.8.3" }, "homepage": "./", "description": "Fast and secure open source backup.", From 7f8f4c2b237aa5837a922104871d93eacfeb1184 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:59:32 -0700 Subject: [PATCH 137/156] build(deps): bump github.com/hanwen/go-fuse/v2 from 2.9.0 to 2.10.1 (#5343) Bumps [github.com/hanwen/go-fuse/v2](https://github.com/hanwen/go-fuse) from 2.9.0 to 2.10.1. - [Commits](https://github.com/hanwen/go-fuse/compare/v2.9.0...v2.10.1) --- updated-dependencies: - dependency-name: github.com/hanwen/go-fuse/v2 dependency-version: 2.10.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0374e6279d7..d8d49432ff4 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 - github.com/hanwen/go-fuse/v2 v2.9.0 + github.com/hanwen/go-fuse/v2 v2.10.1 github.com/hashicorp/cronexpr v1.1.3 github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 diff --git a/go.sum b/go.sum index d2aa53b0b2e..f45fa776087 100644 --- a/go.sum +++ b/go.sum @@ -145,8 +145,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= -github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= +github.com/hanwen/go-fuse/v2 v2.10.1 h1:QAqZuc9+aBtTou+OPruU/hkYQYCkgPtQd2QaepHkTTs= +github.com/hanwen/go-fuse/v2 v2.10.1/go.mod h1:aU7NkGYZUmuJrZapoI3mEcNve7PZTySUOLBuch/vR6U= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= From 1d826e9cfe9dc8c7a0c8004c64456da6293a6148 Mon Sep 17 00:00:00 2001 From: ashmrtn <3891298+ashmrtn@users.noreply.github.com> Date: Wed, 29 Apr 2026 10:49:38 -0700 Subject: [PATCH 138/156] chore(ci): split out linux-based lint targets (#5349) --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a85e198e5ea..69a1e86dc17 100644 --- a/Makefile +++ b/Makefile @@ -94,10 +94,12 @@ lint-darwin: $(linter) GOOS=darwin GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=darwin GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) -lint-all: $(linter) lint-windows lint-darwin +lint-linux: $(linter) GOOS=linux GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=linux GOARCH=arm64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=linux GOARCH=arm $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) + +lint-all: $(linter) lint-windows lint-darwin lint-linux GOOS=openbsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) GOOS=freebsd GOARCH=amd64 $(linter) --timeout $(LINTER_DEADLINE) run $(linter_flags) From 6d259518115e943a3b3a2ef0786e554598610bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20L=C3=B3pez?= <1953782+julio-lopez@users.noreply.github.com> Date: Thu, 30 Apr 2026 08:25:04 -0700 Subject: [PATCH 139/156] refactor(cli): registration mechanism for storage providers (#5350) --- cli/app.go | 17 +----- cli/command_repository_connect_from_config.go | 8 +++ cli/storage_azure.go | 8 +++ cli/storage_b2.go | 8 +++ cli/storage_filesystem.go | 8 +++ cli/storage_gcs.go | 8 +++ cli/storage_gdrive.go | 8 +++ cli/storage_providers.go | 57 +++++++++++++++++++ cli/storage_rclone.go | 8 +++ cli/storage_s3.go | 8 +++ cli/storage_sftp.go | 8 +++ cli/storage_webdav.go | 8 +++ 12 files changed, 139 insertions(+), 15 deletions(-) diff --git a/cli/app.go b/cli/app.go index 469efdc0a23..42d7f8d55e2 100644 --- a/cli/app.go +++ b/cli/app.go @@ -325,21 +325,8 @@ type commandParent interface { // NewApp creates a new instance of App. func NewApp() *App { return &App{ - progress: &cliProgress{}, - cliStorageProviders: []StorageProvider{ - {"from-config", "the provided configuration file", func() StorageFlags { return &storageFromConfigFlags{} }}, - - {"azure", "an Azure blob storage", func() StorageFlags { return &storageAzureFlags{} }}, - {"b2", "a B2 bucket [DEPRECATED]", func() StorageFlags { return &storageB2Flags{} }}, - {"filesystem", "a filesystem", func() StorageFlags { return &storageFilesystemFlags{} }}, - {"gcs", "a Google Cloud Storage bucket", func() StorageFlags { return &storageGCSFlags{} }}, - {"gdrive", "a Google Drive folder [Not maintained]", func() StorageFlags { return &storageGDriveFlags{} }}, - - {"rclone", "a rclone-based provider [Not maintained]", func() StorageFlags { return &storageRcloneFlags{} }}, - {"s3", "an S3 bucket", func() StorageFlags { return &storageS3Flags{} }}, - {"sftp", "an SFTP storage", func() StorageFlags { return &storageSFTPFlags{} }}, - {"webdav", "a WebDAV storage", func() StorageFlags { return &storageWebDAVFlags{} }}, - }, + progress: &cliProgress{}, + cliStorageProviders: getRegisteredStorageProviders(), // testability hooks exitWithError: func(err error) { diff --git a/cli/command_repository_connect_from_config.go b/cli/command_repository_connect_from_config.go index 56e215f7ca4..f48d68a65e5 100644 --- a/cli/command_repository_connect_from_config.go +++ b/cli/command_repository_connect_from_config.go @@ -101,3 +101,11 @@ func (c *storageFromConfigFlags) connectToStorageFromStorageConfigStdin(ctx cont return c.connectToStorageFromConfigToken(ctx, string(tokenData)) } + +func init() { + mustRegisterStorageProvider( + "from-config", + "the provided configuration file", + func() StorageFlags { return &storageFromConfigFlags{} }, + ) +} diff --git a/cli/storage_azure.go b/cli/storage_azure.go index 14abda32b6d..68bcb37e59b 100644 --- a/cli/storage_azure.go +++ b/cli/storage_azure.go @@ -58,3 +58,11 @@ func (c *storageAzureFlags) Connect(ctx context.Context, isCreate bool, formatVe //nolint:wrapcheck return azure.New(ctx, &c.azOptions, isCreate) } + +func init() { + mustRegisterStorageProvider( + "azure", + "an Azure blob storage", + func() StorageFlags { return &storageAzureFlags{} }, + ) +} diff --git a/cli/storage_b2.go b/cli/storage_b2.go index 6d0273e7431..e2506c9f1d4 100644 --- a/cli/storage_b2.go +++ b/cli/storage_b2.go @@ -27,3 +27,11 @@ func (c *storageB2Flags) Connect(ctx context.Context, isCreate bool, formatVersi //nolint:wrapcheck return b2.New(ctx, &c.b2options, isCreate) } + +func init() { + mustRegisterStorageProvider( + "b2", + "a B2 bucket [DEPRECATED]", + func() StorageFlags { return &storageB2Flags{} }, + ) +} diff --git a/cli/storage_filesystem.go b/cli/storage_filesystem.go index bfd10b4baa5..c0394104230 100644 --- a/cli/storage_filesystem.go +++ b/cli/storage_filesystem.go @@ -97,3 +97,11 @@ func getFileModeValue(value string, def os.FileMode) os.FileMode { return def } + +func init() { + mustRegisterStorageProvider( + "filesystem", + "a filesystem", + func() StorageFlags { return &storageFilesystemFlags{} }, + ) +} diff --git a/cli/storage_gcs.go b/cli/storage_gcs.go index 707407aad6b..173ff86dd45 100644 --- a/cli/storage_gcs.go +++ b/cli/storage_gcs.go @@ -66,3 +66,11 @@ func (c *storageGCSFlags) Connect(ctx context.Context, isCreate bool, formatVers //nolint:wrapcheck return gcs.New(ctx, &c.options, isCreate) } + +func init() { + mustRegisterStorageProvider( + "gcs", + "a Google Cloud Storage bucket", + func() StorageFlags { return &storageGCSFlags{} }, + ) +} diff --git a/cli/storage_gdrive.go b/cli/storage_gdrive.go index 1ff81b8065e..d41c5a137fe 100644 --- a/cli/storage_gdrive.go +++ b/cli/storage_gdrive.go @@ -43,3 +43,11 @@ func (c *storageGDriveFlags) Connect(ctx context.Context, isCreate bool, formatV //nolint:wrapcheck return gdrive.New(ctx, &c.options, isCreate) } + +func init() { + mustRegisterStorageProvider( + "gdrive", + "a Google Drive folder [Not maintained]", + func() StorageFlags { return &storageGDriveFlags{} }, + ) +} diff --git a/cli/storage_providers.go b/cli/storage_providers.go index 67a720263ff..c58ef8940fe 100644 --- a/cli/storage_providers.go +++ b/cli/storage_providers.go @@ -3,9 +3,14 @@ package cli import ( "context" "io" + "maps" + "slices" + "sync" "github.com/alecthomas/kingpin/v2" + "github.com/pkg/errors" + "github.com/kopia/kopia/internal/impossible" "github.com/kopia/kopia/repo/blob" "github.com/kopia/kopia/repo/blob/throttling" ) @@ -35,6 +40,58 @@ type StorageProvider struct { NewFlags func() StorageFlags } +//nolint:gochecknoglobals +var ( + registeredProvidersMu sync.Mutex + // +checklocks:registeredProvidersMu + registeredProviders = make(map[string]StorageProvider) + + errStorageAlreadyRegistered = errors.New("storage provider already registered") // +checklocksignore +) + +// mustRegisterStorageProvider registers a storage provider for use with the CLI repository connect command. +// It should typically be called from init() functions in storage provider packages. +// It panics if the storage provider has already been registered. +func mustRegisterStorageProvider(name, description string, newFlags func() StorageFlags) { + impossible.PanicOnError(registerStorageProvider(name, description, newFlags)) +} + +func registerStorageProvider(name, description string, newFlags func() StorageFlags) error { + registeredProvidersMu.Lock() + defer registeredProvidersMu.Unlock() + + if _, ok := registeredProviders[name]; ok { + return errors.Wrapf(errStorageAlreadyRegistered, "%s", name) + } + + registeredProviders[name] = StorageProvider{ + Name: name, + Description: description, + NewFlags: newFlags, + } + + return nil +} + +// getRegisteredStorageProviders returns a copy of all registered storage providers. +// This is used internally by the App to build the list of available storage providers. +func getRegisteredStorageProviders() []StorageProvider { + registeredProvidersMu.Lock() + defer registeredProvidersMu.Unlock() + + // Return a copy to prevent external modification + p := make([]StorageProvider, 0, len(registeredProviders)) + for _, n := range slices.Sorted(maps.Keys(registeredProviders)) { + p = append(p, registeredProviders[n]) + } + + if len(p) != len(registeredProviders) { + panic("expected provider length mismatch") + } + + return p +} + func commonThrottlingFlags(cmd *kingpin.CmdClause, limits *throttling.Limits) { cmd.Flag("max-download-speed", "Limit the download speed.").PlaceHolder("BYTES_PER_SEC").FloatVar(&limits.DownloadBytesPerSecond) cmd.Flag("max-upload-speed", "Limit the upload speed.").PlaceHolder("BYTES_PER_SEC").FloatVar(&limits.UploadBytesPerSecond) diff --git a/cli/storage_rclone.go b/cli/storage_rclone.go index b289825cf6e..38502fa232c 100644 --- a/cli/storage_rclone.go +++ b/cli/storage_rclone.go @@ -48,3 +48,11 @@ func (c *storageRcloneFlags) Connect(ctx context.Context, isCreate bool, formatV //nolint:wrapcheck return rclone.New(ctx, &c.opt, isCreate) } + +func init() { + mustRegisterStorageProvider( + "rclone", + "a rclone-based provider [Not maintained]", + func() StorageFlags { return &storageRcloneFlags{} }, + ) +} diff --git a/cli/storage_s3.go b/cli/storage_s3.go index 89f947c8733..3325017bd09 100644 --- a/cli/storage_s3.go +++ b/cli/storage_s3.go @@ -89,3 +89,11 @@ func (c *storageS3Flags) Connect(ctx context.Context, isCreate bool, formatVersi //nolint:wrapcheck return s3.New(ctx, &c.s3options, isCreate) } + +func init() { + mustRegisterStorageProvider( + "s3", + "an S3 bucket", + func() StorageFlags { return &storageS3Flags{} }, + ) +} diff --git a/cli/storage_sftp.go b/cli/storage_sftp.go index 4ede083cbf2..754a9c476b3 100644 --- a/cli/storage_sftp.go +++ b/cli/storage_sftp.go @@ -118,3 +118,11 @@ func (c *storageSFTPFlags) Connect(ctx context.Context, isCreate bool, formatVer //nolint:wrapcheck return sftp.New(ctx, opt, isCreate) } + +func init() { + mustRegisterStorageProvider( + "sftp", + "an SFTP storage", + func() StorageFlags { return &storageSFTPFlags{} }, + ) +} diff --git a/cli/storage_webdav.go b/cli/storage_webdav.go index f86dd22ea34..01d0b464ae4 100644 --- a/cli/storage_webdav.go +++ b/cli/storage_webdav.go @@ -43,3 +43,11 @@ func (c *storageWebDAVFlags) Connect(ctx context.Context, isCreate bool, formatV //nolint:wrapcheck return webdav.New(ctx, &wo, isCreate) } + +func init() { + mustRegisterStorageProvider( + "webdav", + "a WebDAV storage", + func() StorageFlags { return &storageWebDAVFlags{} }, + ) +} From 35d7950da8028f0ed59539cae49fc9401e6b45ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 20:55:07 -0700 Subject: [PATCH 140/156] build(deps): bump github/codeql-action in the github-actions group (#5352) Bumps the github-actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action). Updates `github/codeql-action` from 4.35.1 to 4.35.2 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/c10b8064de6f491fea524254123dbe5e09572f13...95e58e9a2cdfd71adc6e0353d5c52f41a045d225) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.35.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 2 +- .github/workflows/ossf-scorecard.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 22cbd6d02e4..3b20f64512c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -47,7 +47,7 @@ jobs: - id: govulncheck-results if: ${{ always() }} name: "Upload govulncheck results to dashboard" - uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5 with: sarif_file: govulncheck.sarif - name: Lint diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 901040a9d46..3eb0ae1845d 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -39,7 +39,7 @@ jobs: - # Upload the results to GitHub's code scanning dashboard. name: "Upload to results to dashboard" - uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5 with: sarif_file: results.sarif category: ossf From 5db9d59b6e7891fe7d7fadeed4ffb8b108c7815e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 21:03:11 -0700 Subject: [PATCH 141/156] build(deps-dev): bump electron (#5351) Bumps the kopia-ui-npm-dependencies group in /app with 1 update: [electron](https://github.com/electron/electron). Updates `electron` from 41.2.2 to 41.3.0 - [Release notes](https://github.com/electron/electron/releases) - [Commits](https://github.com/electron/electron/compare/v41.2.2...v41.3.0) --- updated-dependencies: - dependency-name: electron dependency-version: 41.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: kopia-ui-npm-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 8 ++++---- app/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index ef05f5a71dc..ef5f83aaa6c 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -23,7 +23,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.4.2", - "electron": "^41.2.2", + "electron": "^41.3.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", @@ -2115,9 +2115,9 @@ } }, "node_modules/electron": { - "version": "41.2.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-41.2.2.tgz", - "integrity": "sha512-3rzz/hVIpF726W9g7nleQzyF2IOEZbzZnUTUYGhMaEfsoab8fDyOYAWbdBdo4+DczS1Ifz11rdYo8IAAGcRx/g==", + "version": "41.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-41.3.0.tgz", + "integrity": "sha512-2Q5aeocmFdeheZGDUTrAvSR3t+n0c3d104AJWWEnt7syJU0tE4VdibMYaPtQ47QuXSoUf0/xSsfUUvu/uSXIfg==", "dev": true, "hasInstallScript": true, "license": "MIT", diff --git a/app/package.json b/app/package.json index 035621aa3bb..f45b83b005b 100644 --- a/app/package.json +++ b/app/package.json @@ -127,7 +127,7 @@ "asar": "^3.2.0", "concurrently": "^9.2.1", "dotenv": "^17.4.2", - "electron": "^41.2.2", + "electron": "^41.3.0", "electron-builder": "^26.8.1", "playwright": "^1.37.1", "playwright-core": "^1.35.1", From 4d6a84a71b468e2eacff1d4a80eca6393166144b Mon Sep 17 00:00:00 2001 From: "Kopia Builder [bot]" <82682015+kopia-builder@users.noreply.github.com> Date: Fri, 1 May 2026 21:25:13 -0700 Subject: [PATCH 142/156] feat(ui): upgraded htmlui to the latest version (#5353) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d8d49432ff4..b2fba2f5aca 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.13.3 - github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7 + github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 github.com/minio/minio-go/v7 v7.0.100 diff --git a/go.sum b/go.sum index f45fa776087..81c1745c68b 100644 --- a/go.sum +++ b/go.sum @@ -162,8 +162,8 @@ github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= -github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7 h1:tMcr+W8OCaLHen5nxHDrchOKLNigCqslt2X9/kdPfkA= -github.com/kopia/htmluibuild v0.0.1-0.20260416161538-83b24c27eef7/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= +github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae h1:igSzPZDDs3icBsXWC/2zRFBRlzelXcBSODpxpORf6s8= +github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= From b53c0321db38079a85a6953236f055dbeb96c047 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:14:26 +0000 Subject: [PATCH 143/156] build(deps): bump the common-golang-dependencies group with 2 updates (#5355) Bumps the common-golang-dependencies group with 2 updates: [github.com/minio/minio-go/v7](https://github.com/minio/minio-go) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `github.com/minio/minio-go/v7` from 7.0.100 to 7.1.0 - [Release notes](https://github.com/minio/minio-go/releases) - [Commits](https://github.com/minio/minio-go/compare/v7.0.100...v7.1.0) Updates `google.golang.org/api` from 0.276.0 to 0.277.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.276.0...v0.277.0) --- updated-dependencies: - dependency-name: github.com/minio/minio-go/v7 dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies - dependency-name: google.golang.org/api dependency-version: 0.277.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: common-golang-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 11 ++++++----- go.sum | 26 ++++++++++++++------------ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index b2fba2f5aca..ab9560b9a47 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 - github.com/minio/minio-go/v7 v7.0.100 + github.com/minio/minio-go/v7 v7.1.0 github.com/mocktools/go-smtp-mock/v2 v2.5.4 github.com/mxk/go-vss v1.2.1 github.com/natefinch/atomic v1.0.1 @@ -65,7 +65,7 @@ require ( golang.org/x/term v0.42.0 golang.org/x/text v0.36.0 golang.org/x/time v0.15.0 - google.golang.org/api v0.276.0 + google.golang.org/api v0.277.0 google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 @@ -109,8 +109,8 @@ require ( github.com/golang/glog v1.2.5 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.21.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -129,6 +129,7 @@ require ( github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/tinylib/msgp v1.6.1 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect + github.com/zeebo/xxh3 v1.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect @@ -142,6 +143,6 @@ require ( go.yaml.in/yaml/v3 v3.0.4 // indirect google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 81c1745c68b..d65b2a1e559 100644 --- a/go.sum +++ b/go.sum @@ -137,10 +137,10 @@ 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.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= -github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= +github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas= +github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -182,8 +182,8 @@ github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.100 h1:ShkWi8Tyj9RtU57OQB2HIXKz4bFgtVib0bbT1sbtLI8= -github.com/minio/minio-go/v7 v7.0.100/go.mod h1:EtGNKtlX20iL2yaYnxEigaIvj0G0GwSDnifnG8ClIdw= +github.com/minio/minio-go/v7 v7.1.0 h1:QEt5IStDpxgGjEdtOgpiZ5QhmSl3ax7qy61vi2SwHO8= +github.com/minio/minio-go/v7 v7.1.0/go.mod h1:Dm7WS1AgLmBa0NcQD6SeJnJf+K/EUW3GR7Ks6olB3OA= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/mocktools/go-smtp-mock/v2 v2.5.4 h1:U89Y4SuOhDFUfboMYUtXzWDp7hNLrofRa5yNqGSESSM= @@ -254,12 +254,14 @@ github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8 github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/zalando/go-keyring v0.2.8 h1:6sD/Ucpl7jNq10rM2pgqTs0sZ9V3qMrqfIIy5YPccHs= github.com/zalando/go-keyring v0.2.8/go.mod h1:tsMo+VpRq5NGyKfxoBVjCuMrG47yj8cmakZDO5QGii0= -github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= -github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI= github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE= github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= @@ -326,14 +328,14 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= -google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.277.0 h1:HJfyJUiNeBBUMai7ez8u14wkp/gH/I4wpGbbO9o+cSk= +google.golang.org/api v0.277.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 3c3ff47e6e765f356ef81c4aeaab55c416c33598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:18:29 +0000 Subject: [PATCH 144/156] build(deps): bump go.uber.org/zap from 1.27.1 to 1.28.0 (#5356) Bumps [go.uber.org/zap](https://github.com/uber-go/zap) from 1.27.1 to 1.28.0. - [Release notes](https://github.com/uber-go/zap/releases) - [Changelog](https://github.com/uber-go/zap/blob/master/CHANGELOG.md) - [Commits](https://github.com/uber-go/zap/compare/v1.27.1...v1.28.0) --- updated-dependencies: - dependency-name: go.uber.org/zap dependency-version: 1.28.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ab9560b9a47..ed120b634b4 100644 --- a/go.mod +++ b/go.mod @@ -54,7 +54,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 go.opentelemetry.io/otel/sdk v1.43.0 go.opentelemetry.io/otel/trace v1.43.0 - go.uber.org/zap v1.27.1 + go.uber.org/zap v1.28.0 golang.org/x/crypto v0.50.0 golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f golang.org/x/mod v0.35.0 diff --git a/go.sum b/go.sum index d65b2a1e559..991ae252c6f 100644 --- a/go.sum +++ b/go.sum @@ -292,8 +292,8 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= -go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= +go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= From cf09101bc8e79cebde5b8d8e2994fa3d6ad7b5a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:19:23 +0000 Subject: [PATCH 145/156] build(deps): bump github.com/klauspost/reedsolomon from 1.13.3 to 1.14.0 (#5358) Bumps [github.com/klauspost/reedsolomon](https://github.com/klauspost/reedsolomon) from 1.13.3 to 1.14.0. - [Release notes](https://github.com/klauspost/reedsolomon/releases) - [Commits](https://github.com/klauspost/reedsolomon/compare/v1.13.3...v1.14.0) --- updated-dependencies: - dependency-name: github.com/klauspost/reedsolomon dependency-version: 1.14.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ed120b634b4..af89f469389 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/hashicorp/cronexpr v1.1.3 github.com/klauspost/compress v1.18.5 github.com/klauspost/pgzip v1.2.6 - github.com/klauspost/reedsolomon v1.13.3 + github.com/klauspost/reedsolomon v1.14.0 github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.14 diff --git a/go.sum b/go.sum index 991ae252c6f..89993853b7c 100644 --- a/go.sum +++ b/go.sum @@ -160,8 +160,8 @@ github.com/klauspost/crc32 v1.3.0 h1:sSmTt3gUt81RP655XGZPElI0PelVTZ6YwCRnPSupoFM github.com/klauspost/crc32 v1.3.0/go.mod h1:D7kQaZhnkX/Y0tstFGf8VUzv2UofNGqCjnC3zdHB0Hw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/reedsolomon v1.13.3 h1:01GwnO2xoCSaM0ShP4qwl+FsHg3csFShC6Tu/RS1ji0= -github.com/klauspost/reedsolomon v1.13.3/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= +github.com/klauspost/reedsolomon v1.14.0 h1:5YSZeclzSYg5nl349+GDG/agDtQ6MZiwUYXvVKN1Jx0= +github.com/klauspost/reedsolomon v1.14.0/go.mod h1:yjqqjgMTQkBUHSG97/rm4zipffCNbCiZcB3kTqr++sQ= github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae h1:igSzPZDDs3icBsXWC/2zRFBRlzelXcBSODpxpORf6s8= github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae/go.mod h1:h53A5JM3t2qiwxqxusBe+PFgGcgZdS+DWCQvG5PTlto= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= From 17e43ef84ac09019b20f24dd7ebf61e6d3ec1845 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 01:19:49 +0000 Subject: [PATCH 146/156] build(deps): bump github.com/klauspost/compress from 1.18.5 to 1.18.6 (#5357) Bumps [github.com/klauspost/compress](https://github.com/klauspost/compress) from 1.18.5 to 1.18.6. - [Release notes](https://github.com/klauspost/compress/releases) - [Commits](https://github.com/klauspost/compress/compare/v1.18.5...v1.18.6) --- updated-dependencies: - dependency-name: github.com/klauspost/compress dependency-version: 1.18.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index af89f469389..b39dc463692 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/hanwen/go-fuse/v2 v2.10.1 github.com/hashicorp/cronexpr v1.1.3 - github.com/klauspost/compress v1.18.5 + github.com/klauspost/compress v1.18.6 github.com/klauspost/pgzip v1.2.6 github.com/klauspost/reedsolomon v1.14.0 github.com/kopia/htmluibuild v0.0.1-0.20260502040510-a4505d4145ae diff --git a/go.sum b/go.sum index 89993853b7c..5dce19e4d4d 100644 --- a/go.sum +++ b/go.sum @@ -151,8 +151,8 @@ github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7 github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= 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/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= From c26c6a1b9734c5089217986ffa5cd19f8a6b8900 Mon Sep 17 00:00:00 2001 From: Jarek Kowalski Date: Mon, 4 May 2026 19:51:20 -0700 Subject: [PATCH 147/156] feat(cli): restrict insecure unauthenticated server to loopback binds (#5354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(cli): restrict insecure unauthenticated server to loopback binds Reject starting the server with --insecure and --without-password when --address would bind outside loopback (including empty host / all interfaces). Validate the actual listener after Listen so systemd socket activation cannot bypass the check. Add hidden --allow-extremely-dangerous-unauthenticated-server-on-the-network to opt into the previous behavior for isolated environments. Extract validation into internal/insecureserverbind with table-driven tests. Add end-to-end smoke tests for rejection and escape hatch. Co-authored-by: Cursor * Update internal/insecureserverbind/insecureserverbind.go Co-authored-by: Julio López <1953782+julio-lopez@users.noreply.github.com> * pr feedback --------- Co-authored-by: Cursor Co-authored-by: Julio López <1953782+julio-lopez@users.noreply.github.com> --- cli/command_server_start.go | 16 + cli/command_server_tls.go | 12 + .../insecureserverbind/insecureserverbind.go | 129 ++++++++ .../insecureserverbind_test.go | 280 ++++++++++++++++++ tests/end_to_end_test/server_start_test.go | 46 +++ 5 files changed, 483 insertions(+) create mode 100644 internal/insecureserverbind/insecureserverbind.go create mode 100644 internal/insecureserverbind/insecureserverbind_test.go diff --git a/cli/command_server_start.go b/cli/command_server_start.go index 5f00dac10b3..0bae249e953 100644 --- a/cli/command_server_start.go +++ b/cli/command_server_start.go @@ -20,6 +20,7 @@ import ( htpasswd "github.com/tg123/go-htpasswd" "github.com/kopia/kopia/internal/auth" + "github.com/kopia/kopia/internal/insecureserverbind" "github.com/kopia/kopia/internal/server" "github.com/kopia/kopia/notification" "github.com/kopia/kopia/notification/sender/jsonsender" @@ -75,6 +76,8 @@ type commandServerStart struct { logServerRequests bool + serverStartAllowDangerousUnauthenticatedNetwork bool + disableCSRFTokenChecks bool // disable CSRF token checks - used for development/debugging only sf serverFlags @@ -94,6 +97,10 @@ func (c *commandServerStart) setup(svc advancedAppServices, parent commandParent cmd.Flag("insecure", "Allow insecure configurations (do not use in production)").Hidden().BoolVar(&c.serverStartInsecure) cmd.Flag("max-concurrency", "Maximum number of server goroutines").Default("0").IntVar(&c.serverStartMaxConcurrency) + cmd.Flag(insecureserverbind.AllowDangerousUnauthenticatedNetworkFlag, insecureserverbind.AllowDangerousUnauthenticatedNetworkFlagHelp). + Hidden(). + BoolVar(&c.serverStartAllowDangerousUnauthenticatedNetwork) + cmd.Flag("without-password", "Start the server without a password").Hidden().BoolVar(&c.serverStartWithoutPassword) cmd.Flag("random-password", "Generate random password and print to stderr").Hidden().BoolVar(&c.serverStartRandomPassword) cmd.Flag("htpasswd-file", "Path to htpasswd file that contains allowed user@hostname entries").Hidden().ExistingFileVar(&c.serverStartHtpasswdFile) @@ -190,6 +197,15 @@ func (c *commandServerStart) initRepositoryPossiblyAsync(ctx context.Context, sr } func (c *commandServerStart) run(ctx context.Context) (reterr error) { + if err := insecureserverbind.ValidateListenAddressIfRestricted( + c.serverStartInsecure, + c.serverStartWithoutPassword, + c.serverStartAllowDangerousUnauthenticatedNetwork, + c.sf.serverAddress, + ); err != nil { + return errors.Wrap(err, "listen address not allowed for insecure server without password") + } + opts, err := c.serverStartOptions(ctx) if err != nil { return err diff --git a/cli/command_server_tls.go b/cli/command_server_tls.go index 99cc06ba5c3..bf30b566559 100644 --- a/cli/command_server_tls.go +++ b/cli/command_server_tls.go @@ -20,6 +20,7 @@ import ( "github.com/coreos/go-systemd/v22/activation" "github.com/pkg/errors" + "github.com/kopia/kopia/internal/insecureserverbind" "github.com/kopia/kopia/internal/tlsutil" ) @@ -62,6 +63,17 @@ func (c *commandServerStart) startServerWithOptionalTLS(ctx context.Context, htt return errors.Errorf("Too many activated sockets found. Expected 1, got %v", len(listeners)) } + if err := insecureserverbind.ValidateListenerAddrIfRestricted( + c.serverStartInsecure, + c.serverStartWithoutPassword, + c.serverStartAllowDangerousUnauthenticatedNetwork, + l.Addr(), + ); err != nil { + l.Close() //nolint:errcheck + + return errors.Wrap(err, "insecure server bind validation") + } + defer l.Close() //nolint:errcheck httpServer.Addr = l.Addr().String() diff --git a/internal/insecureserverbind/insecureserverbind.go b/internal/insecureserverbind/insecureserverbind.go new file mode 100644 index 00000000000..f095aeedd98 --- /dev/null +++ b/internal/insecureserverbind/insecureserverbind.go @@ -0,0 +1,129 @@ +// Package insecureserverbind validates listen addresses for insecure, unauthenticated Kopia servers. +package insecureserverbind + +import ( + "errors" + "fmt" + "net" + "net/url" + "strings" +) + +// AllowDangerousUnauthenticatedNetworkFlag is the CLI flag that disables bind restrictions. +const AllowDangerousUnauthenticatedNetworkFlag = "allow-extremely-dangerous-unauthenticated-server-on-the-network" + +// AllowDangerousUnauthenticatedNetworkFlagHelp is the kingpin description for that flag. +const AllowDangerousUnauthenticatedNetworkFlagHelp = "Allow unauthenticated server to listen on non-loopback addresses; " + + "exposes full repository and control API to the network without authentication which allows any external attacker to take full control of the server host (extremely dangerous)" + +// ErrDisallowedPublicBind is returned when the address would expose an unauthenticated server beyond loopback. +var ErrDisallowedPublicBind = errors.New("refusing to expose unauthenticated server on non-loopback network bind") + +// RestrictionApplies reports whether insecure unauthenticated bind checks must run. +func RestrictionApplies(insecure, withoutPassword, allowDangerousNetwork bool) bool { + return insecure && withoutPassword && !allowDangerousNetwork +} + +// ValidateListenAddressIfRestricted runs [ValidateListenAddressFlag] only when [RestrictionApplies] is true. +func ValidateListenAddressIfRestricted(insecure, withoutPassword, allowDangerousNetwork bool, address string) error { + if !RestrictionApplies(insecure, withoutPassword, allowDangerousNetwork) { + return nil + } + + return ValidateListenAddressFlag(address) +} + +// ValidateListenerAddrIfRestricted runs [ValidateListenerAddr] only when [RestrictionApplies] is true. +func ValidateListenerAddrIfRestricted(insecure, withoutPassword, allowDangerousNetwork bool, addr net.Addr) error { + if !RestrictionApplies(insecure, withoutPassword, allowDangerousNetwork) { + return nil + } + + return ValidateListenerAddr(addr) +} + +func stripProtocol(addr string) string { + return strings.TrimPrefix(strings.TrimPrefix(addr, "https://"), "http://") +} + +// ParseListenHost extracts the host part of a server listen address flag value. +// If isUnix is true, host is empty and the address refers to a Unix domain socket. +// +// Unix detection runs after stripping a leading http:// or https:// (same as the server’s +// stripProtocol). Any form that becomes unix:… is treated as a Unix socket, including: +// - unix:/path/to/socket +// - http://unix:/path/to/socket +// - https://unix:/path/to/socket +func ParseListenHost(address string) (host string, isUnix bool, err error) { + stripped := stripProtocol(address) + if strings.HasPrefix(stripped, "unix:") { + return "", true, nil + } + + s := stripped + if !strings.Contains(s, "://") { + s = "http://" + s + } + + u, err := url.Parse(s) + if err != nil { + return "", false, fmt.Errorf("parsing listen address: %w", err) + } + + return u.Hostname(), false, nil +} + +// ValidateListenAddressFlag checks that --address is safe for an insecure server without a UI password. +func ValidateListenAddressFlag(address string) error { + host, isUnix, err := ParseListenHost(address) + if err != nil { + return err + } + + if isUnix { + return nil + } + + if host == "" { + return fmt.Errorf("%w: missing host in listen address %q binds all interfaces; use loopback, a unix socket, or pass --%s (extremely dangerous)", + ErrDisallowedPublicBind, address, AllowDangerousUnauthenticatedNetworkFlag) + } + + if strings.EqualFold(host, "localhost") { + return nil + } + + if ip := net.ParseIP(host); ip != nil { + if ip.IsLoopback() { + return nil + } + + return fmt.Errorf("%w: %q is not a loopback address; pass --%s only in isolated lab environments (extremely dangerous)", + ErrDisallowedPublicBind, host, AllowDangerousUnauthenticatedNetworkFlag) + } + + return fmt.Errorf("%w: hostname %q is not localhost; pass --%s only in isolated lab environments (extremely dangerous)", + ErrDisallowedPublicBind, host, AllowDangerousUnauthenticatedNetworkFlag) +} + +// ValidateListenerAddr checks the bound listener address after Listen (covers socket activation). +func ValidateListenerAddr(addr net.Addr) error { + switch a := addr.(type) { + case *net.UnixAddr: + return nil + case *net.TCPAddr: + if a.IP != nil && a.IP.IsLoopback() { + return nil + } + + return fmt.Errorf("%w: listener %v is not loopback; pass --%s only in isolated lab environments (extremely dangerous)", + ErrDisallowedPublicBind, addr, AllowDangerousUnauthenticatedNetworkFlag) + default: + if addr.Network() == "unix" { + return nil + } + + return fmt.Errorf("%w: cannot validate listener type %T %v; pass --%s only if you accept the risk", + ErrDisallowedPublicBind, addr, addr, AllowDangerousUnauthenticatedNetworkFlag) + } +} diff --git a/internal/insecureserverbind/insecureserverbind_test.go b/internal/insecureserverbind/insecureserverbind_test.go new file mode 100644 index 00000000000..7bb90a759b8 --- /dev/null +++ b/internal/insecureserverbind/insecureserverbind_test.go @@ -0,0 +1,280 @@ +package insecureserverbind + +import ( + "net" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestRestrictionApplies(t *testing.T) { + t.Parallel() + + cases := []struct { + insecure, withoutPassword, allowDangerous bool + want bool + name string + }{ + {true, true, false, true, "all_restriction_flags"}, + {true, true, true, false, "escape_hatch"}, + {true, false, false, false, "no_without_password"}, + {false, true, false, false, "no_insecure"}, + {false, false, false, false, "neither"}, + {false, false, true, false, "neither_plus_escape"}, + {true, false, true, false, "insecure_escape_no_nopass"}, + {false, true, true, false, "nopass_escape_no_insecure"}, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got := RestrictionApplies(tc.insecure, tc.withoutPassword, tc.allowDangerous) + require.Equal(t, tc.want, got) + }) + } +} + +func TestValidateListenAddressIfRestricted(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + insecure, withoutPassword, allowDangerous bool + address string + wantErr bool + }{ + { + name: "when_restriction_does_not_apply_bad_address_ignored", + // not insecure+without-password: bad address is not validated + insecure: false, withoutPassword: true, allowDangerous: false, + address: "http://0.0.0.0:0", wantErr: false, + }, + { + name: "escape_hatch_skips_validation", + insecure: true, withoutPassword: true, allowDangerous: true, + address: "http://0.0.0.0:0", wantErr: false, + }, + { + name: "restricted_non_loopback_rejected", + insecure: true, withoutPassword: true, allowDangerous: false, + address: "http://0.0.0.0:0", wantErr: true, + }, + { + name: "restricted_loopback_ok", + insecure: true, withoutPassword: true, allowDangerous: false, + address: "http://127.0.0.1:0", wantErr: false, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + err := ValidateListenAddressIfRestricted( + tc.insecure, tc.withoutPassword, tc.allowDangerous, tc.address) + if tc.wantErr { + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) + + return + } + + require.NoError(t, err) + }) + } +} + +func TestValidateListenerAddrIfRestricted(t *testing.T) { + t.Parallel() + + pub := &net.TCPAddr{IP: net.ParseIP("192.0.2.1"), Port: 80} + loopback := &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 1} + + cases := []struct { + name string + insecure, withoutPassword, allowDangerous bool + addr net.Addr + wantErr bool + }{ + { + name: "when_restriction_does_not_apply_public_listener_ignored", + insecure: false, withoutPassword: true, allowDangerous: false, + addr: pub, wantErr: false, + }, + { + name: "escape_hatch_skips_validation", + insecure: true, withoutPassword: true, allowDangerous: true, + addr: pub, wantErr: false, + }, + { + name: "restricted_public_listener_rejected", + insecure: true, withoutPassword: true, allowDangerous: false, + addr: pub, wantErr: true, + }, + { + name: "restricted_loopback_ok", + insecure: true, withoutPassword: true, allowDangerous: false, + addr: loopback, wantErr: false, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + err := ValidateListenerAddrIfRestricted( + tc.insecure, tc.withoutPassword, tc.allowDangerous, tc.addr) + if tc.wantErr { + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) + + return + } + + require.NoError(t, err) + }) + } +} + +func TestParseListenHost(t *testing.T) { + t.Parallel() + + cases := []struct { + in string + wantHost string + wantUnix bool + wantError bool + }{ + {"http://127.0.0.1:51515", "127.0.0.1", false, false}, + {"https://127.0.0.1:51515", "127.0.0.1", false, false}, + {"127.0.0.1:51515", "127.0.0.1", false, false}, + {"http://LOCALHOST:0", "LOCALHOST", false, false}, + {"http://[::1]:123", "::1", false, false}, + {"unix:/tmp/kopia.sock", "", true, false}, + {"http://unix:/wrong", "", true, false}, + {"http://:51515", "", false, false}, + {"http://0.0.0.0:0", "0.0.0.0", false, false}, + {"http://192.0.2.1:1", "192.0.2.1", false, false}, + {"http://example.com:80", "example.com", false, false}, + } + + for _, tc := range cases { + t.Run(tc.in, func(t *testing.T) { + t.Parallel() + + host, isUnix, err := ParseListenHost(tc.in) + if tc.wantError { + require.Error(t, err) + + return + } + + require.NoError(t, err) + require.Equal(t, tc.wantHost, host) + require.Equal(t, tc.wantUnix, isUnix) + }) + } +} + +func TestValidateListenAddressFlag(t *testing.T) { + t.Parallel() + + ok := []string{ + "http://127.0.0.1:51515", + "http://localhost:0", + "http://LoCaLhOsT:51515", + "http://LOCALHOST:9999", + "http://[::1]:123", + "http://127.0.0.2:1", + "unix:/tmp/foo.sock", + "https://127.0.0.1:1", + } + + for _, addr := range ok { + t.Run(addr, func(t *testing.T) { + t.Parallel() + require.NoError(t, ValidateListenAddressFlag(addr)) + }) + } + + bad := []string{ + "http://0.0.0.0:0", + "http://:51515", + "http://192.0.2.1:80", + "http://example.com:80", + } + + for _, addr := range bad { + t.Run(addr, func(t *testing.T) { + t.Parallel() + + err := ValidateListenAddressFlag(addr) + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) + require.ErrorContains(t, err, AllowDangerousUnauthenticatedNetworkFlag) + }) + } +} + +func TestValidateListenerAddr(t *testing.T) { + t.Parallel() + + require.NoError(t, ValidateListenerAddr(&net.UnixAddr{Name: "/tmp/x", Net: "unix"})) + + require.NoError(t, ValidateListenerAddr(&net.TCPAddr{ + IP: net.ParseIP("127.0.0.1"), + Port: 51515, + })) + + require.NoError(t, ValidateListenerAddr(&net.TCPAddr{ + IP: net.ParseIP("127.0.0.2"), + Port: 1, + })) + + require.NoError(t, ValidateListenerAddr(&net.TCPAddr{ + IP: net.ParseIP("::1"), + Port: 1, + })) + + err := ValidateListenerAddr(&net.TCPAddr{ + IP: net.ParseIP("192.0.2.1"), + Port: 80, + }) + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) + require.ErrorContains(t, err, AllowDangerousUnauthenticatedNetworkFlag) + + err = ValidateListenerAddr(&net.TCPAddr{ + IP: net.ParseIP("0.0.0.0"), + Port: 51515, + }) + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) + + err = ValidateListenerAddr(&net.TCPAddr{ + Port: 51515, + }) + require.Error(t, err) +} + +type stubAddr struct { + network, s string +} + +func (a stubAddr) Network() string { return a.network } +func (a stubAddr) String() string { return a.s } + +func TestValidateListenerAddr_unknownType(t *testing.T) { + t.Parallel() + + err := ValidateListenerAddr(stubAddr{network: "tcp", s: "192.0.2.1:80"}) + require.Error(t, err) + require.ErrorIs(t, err, ErrDisallowedPublicBind) +} + +func TestValidateListenerAddr_stubUnixNetwork(t *testing.T) { + t.Parallel() + + require.NoError(t, ValidateListenerAddr(stubAddr{network: "unix", s: "/tmp/kopia.sock"})) +} diff --git a/tests/end_to_end_test/server_start_test.go b/tests/end_to_end_test/server_start_test.go index 1cdb7fe02d3..4d8dc49f9cf 100644 --- a/tests/end_to_end_test/server_start_test.go +++ b/tests/end_to_end_test/server_start_test.go @@ -15,6 +15,7 @@ import ( "github.com/kopia/kopia/internal/apiclient" "github.com/kopia/kopia/internal/clock" + "github.com/kopia/kopia/internal/insecureserverbind" "github.com/kopia/kopia/internal/retry" "github.com/kopia/kopia/internal/serverapi" "github.com/kopia/kopia/internal/testlogging" @@ -545,6 +546,51 @@ func TestServerStartInsecure(t *testing.T) { e.RunAndExpectFailure(t, "server", "start", "--ui", "--address=localhost:0") } +func TestServerStartInsecureUnauthenticatedNonLoopbackRejected(t *testing.T) { + t.Parallel() + + runner := testenv.NewInProcRunner(t) + e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) + + defer e.RunAndExpectSuccess(t, "repo", "disconnect") + + e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir, "--override-hostname=fake-hostname", "--override-username=fake-username") + + e.RunAndExpectFailure(t, "server", "start", "--ui", + "--address=http://0.0.0.0:0", + "--without-password", + "--insecure", + ) +} + +func TestServerStartInsecureUnauthenticatedEscapeHatchNonLoopback(t *testing.T) { + t.Parallel() + + runner := testenv.NewInProcRunner(t) + e := testenv.NewCLITest(t, testenv.RepoFormatNotImportant, runner) + + defer e.RunAndExpectSuccess(t, "repo", "disconnect") + + e.RunAndExpectSuccess(t, "repo", "create", "filesystem", "--path", e.RepoDir, "--override-hostname=fake-hostname", "--override-username=fake-username") + + var sp testutil.ServerParameters + + wait, kill := e.RunAndProcessStderr(t, sp.ProcessOutput, + "server", "start", + "--address=http://0.0.0.0:0", + "--without-password", + "--insecure", + "--"+insecureserverbind.AllowDangerousUnauthenticatedNetworkFlag, + ) + + require.Eventually(t, func() bool { return sp.BaseURL != "" }, 15*time.Second, 50*time.Millisecond) + + kill() + wait() + + require.NotEmpty(t, sp.BaseURL) +} + func verifyServerConnected(t *testing.T, cli *apiclient.KopiaAPIClient, want bool) *serverapi.StatusResponse { t.Helper() From 24a5085e0b94092e42b8bb48c1da58bad2973b53 Mon Sep 17 00:00:00 2001 From: ashmrtn <3891298+ashmrtn@users.noreply.github.com> Date: Fri, 8 May 2026 11:02:10 -0700 Subject: [PATCH 148/156] Update golang toolchain to 1.25.10 (#5365) --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b39dc463692..6dd832f15dd 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25.0 -toolchain go1.25.9 +toolchain go1.25.10 require ( cloud.google.com/go/storage v1.62.1 From 1bb1901915e142e36785176c9c28e94461608db7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 14:48:11 -0700 Subject: [PATCH 149/156] build(deps): bump fast-uri from 3.1.0 to 3.1.2 in /app (#5366) Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index ef5f83aaa6c..6307f20e133 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -2469,9 +2469,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "funding": [ { "type": "github", From 981d5f95ad7b64f834c46b7ac244d524644fbb46 Mon Sep 17 00:00:00 2001 From: ashmrtn <3891298+ashmrtn@users.noreply.github.com> Date: Fri, 8 May 2026 15:15:37 -0700 Subject: [PATCH 150/156] build(deps-dev): update govulncheck version (#5367) --- .github/workflows/lint.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3b20f64512c..bffb263ad1e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -41,9 +41,9 @@ jobs: name: govulncheck # generate report and then fail if issues are found run: | - go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 - govulncheck -format sarif > govulncheck.sarif - govulncheck + go install golang.org/x/vuln/cmd/govulncheck@v1.3.0 + govulncheck -format sarif ./... > govulncheck.sarif + govulncheck ./... - id: govulncheck-results if: ${{ always() }} name: "Upload govulncheck results to dashboard" From cf9f030d6bf621e89ae24b3b6b77ed57b0f6de7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wenkai=20Yin=28=E5=B0=B9=E6=96=87=E5=BC=80=29?= Date: Fri, 15 Sep 2023 11:36:35 +0800 Subject: [PATCH 151/156] Add a new function to create the Azure backend storage with the provided client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a new function to create the Azure backend storage with the provided client so that we can wrap and reuse the storage implementation on Velero side Signed-off-by: Wenkai Yin(尹文开) --- repo/blob/azure/patch.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 repo/blob/azure/patch.go diff --git a/repo/blob/azure/patch.go b/repo/blob/azure/patch.go new file mode 100644 index 00000000000..07c5408affb --- /dev/null +++ b/repo/blob/azure/patch.go @@ -0,0 +1,34 @@ +package azure + +import ( + "context" + "fmt" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/kopia/kopia/internal/clock" + "github.com/kopia/kopia/repo/blob" + "github.com/kopia/kopia/repo/blob/retrying" + "github.com/pkg/errors" +) + +// NewWithClient creates new Azure backend storage with the specified client +func NewWithClient(ctx context.Context, opt *Options, client *azblob.Client) (blob.Storage, error) { + raw := &azStorage{ + Options: *opt, + container: opt.Container, + service: client, + } + + az := retrying.NewWrapper(raw) + + // verify Azure connection is functional by listing blobs in a bucket, which will fail if the container + // does not exist. We list with a prefix that will not exist, to avoid iterating through any objects. + nonExistentPrefix := fmt.Sprintf("kopia-azure-storage-initializing-%v", clock.Now().UnixNano()) + if err := raw.ListBlobs(ctx, blob.ID(nonExistentPrefix), func(md blob.Metadata) error { + return nil + }); err != nil { + return nil, errors.Wrap(err, "unable to list from the bucket") + } + + return az, nil +} From 9d5fd56a9cde692aebb39451ec2f424154960128 Mon Sep 17 00:00:00 2001 From: Tiger Kaovilai Date: Tue, 17 Mar 2026 15:39:57 -0400 Subject: [PATCH 152/156] fix(deps): OADP-7565: bump Go toolchain to 1.25.8 and update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update Go toolchain from go1.25.4 to go1.25.8 to address multiple CVEs: - GO-2026-4337, GO-2026-4340 (crypto/tls) - GO-2026-4341 (net/url) - GO-2026-4342 (archive/zip) - CVE-2026-25679 (net/url IPv6 host parsing) - CVE-2026-27137 (crypto/x509 email constraints) Update golang.org/x/* dependencies: - x/crypto v0.49.0 (fixes GHSA-j5w8-q4qc-rx2x, GHSA-f6x5-jh6r-wrfv) - x/net v0.52.0 (fixes GHSA-vvgc-356p-c3xw) - x/sys v0.42.0, x/text v0.35.0, x/term v0.41.0, x/sync v0.20.0 Update go.opentelemetry.io/otel/sdk v1.38.0 → v1.42.0 (fixes GHSA-9h8m-3fm2-qjrq: arbitrary code execution via PATH hijacking) Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy --- app/package-lock.json | 316 ++++++++++++++++++++++++------------------ go.mod | 67 ++++----- go.sum | 141 ++++++++++--------- 3 files changed, 291 insertions(+), 233 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index 6307f20e133..7c401ab3655 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -48,6 +48,40 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@develar/schema-utils/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@develar/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/@develar/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -271,9 +305,9 @@ } }, "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "dev": true, "license": "MIT", "dependencies": { @@ -324,9 +358,9 @@ } }, "node_modules/@electron/windows-sign/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "dev": true, "license": "MIT", "optional": true, @@ -410,13 +444,13 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -560,13 +594,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.1" + "playwright": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -730,9 +764,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", "dev": true, "license": "MIT", "engines": { @@ -767,16 +801,15 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -800,38 +833,6 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1016,19 +1017,19 @@ } }, "node_modules/app-builder-lib/node_modules/balanced-match": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", - "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" } }, "node_modules/app-builder-lib/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { @@ -1038,6 +1039,20 @@ "node": "18 || 20 || >=22" } }, + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/app-builder-lib/node_modules/ci-info": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", @@ -1054,19 +1069,6 @@ "node": ">=8" } }, - "node_modules/app-builder-lib/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/app-builder-lib/node_modules/minimatch": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", @@ -1083,6 +1085,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/applescript": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz", @@ -1339,6 +1354,20 @@ "node": ">=12.0.0" } }, + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -1714,22 +1743,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conf/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/conf/node_modules/env-paths": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", @@ -1742,12 +1755,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conf/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2019,6 +2026,32 @@ "node": ">=8" } }, + "node_modules/dmg-license/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/dmg-license/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/dot-prop": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", @@ -2172,6 +2205,20 @@ "electron-winstaller": "5.4.0" } }, + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/electron-log": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.4.3.tgz", @@ -2198,6 +2245,20 @@ "mime": "^2.5.2" } }, + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/electron-store": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-11.0.2.tgz", @@ -2513,9 +2574,9 @@ } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3159,10 +3220,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-schema-typed": { @@ -3221,9 +3281,9 @@ "license": "MIT" }, "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -3578,9 +3638,9 @@ } }, "node_modules/node-abi": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.26.0.tgz", - "integrity": "sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.28.0.tgz", + "integrity": "sha512-Qfp5XZL1cJDOabOT8H5gnqMTmM4NjvYzHp4I/Kt/Sl76OVkOBBHRFlPspGV0hYvMoqQsypFjT/Yp7Km0beXW9g==", "dev": true, "license": "MIT", "dependencies": { @@ -3842,9 +3902,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -3855,13 +3915,13 @@ } }, "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.1" + "playwright-core": "1.58.2" }, "bin": { "playwright": "cli.js" @@ -3874,9 +3934,9 @@ } }, "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4552,18 +4612,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/tagged-tag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", - "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tar": { "version": "7.5.11", "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", diff --git a/go.mod b/go.mod index 6dd832f15dd..692a269e812 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/kopia/kopia go 1.25.0 -toolchain go1.25.10 +toolchain go1.25.8 require ( cloud.google.com/go/storage v1.62.1 @@ -50,31 +50,31 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.8 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.43.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 - go.opentelemetry.io/otel/sdk v1.43.0 - go.opentelemetry.io/otel/trace v1.43.0 - go.uber.org/zap v1.28.0 - golang.org/x/crypto v0.50.0 - golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f - golang.org/x/mod v0.35.0 - golang.org/x/net v0.53.0 - golang.org/x/oauth2 v0.36.0 + go.opentelemetry.io/otel v1.42.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 + go.opentelemetry.io/otel/sdk v1.42.0 + go.opentelemetry.io/otel/trace v1.42.0 + go.uber.org/zap v1.27.1 + golang.org/x/crypto v0.49.0 + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 + golang.org/x/mod v0.33.0 + golang.org/x/net v0.52.0 + golang.org/x/oauth2 v0.35.0 golang.org/x/sync v0.20.0 - golang.org/x/sys v0.43.0 - golang.org/x/term v0.42.0 - golang.org/x/text v0.36.0 - golang.org/x/time v0.15.0 - google.golang.org/api v0.277.0 - google.golang.org/grpc v1.80.0 + golang.org/x/sys v0.42.0 + golang.org/x/term v0.41.0 + golang.org/x/text v0.35.0 + google.golang.org/api v0.256.0 + google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) require ( + al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.25.1 // indirect - cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.20.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.7.0 // indirect @@ -89,12 +89,13 @@ require ( github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chromedp/sysutil v1.1.0 // indirect - github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect - github.com/danieljoos/wincred v1.2.3 // indirect + github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect + github.com/danieljoos/wincred v1.2.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect + github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect @@ -109,8 +110,8 @@ require ( github.com/golang/glog v1.2.5 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect - github.com/googleapis/gax-go/v2 v2.22.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect + github.com/googleapis/gax-go/v2 v2.15.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -132,17 +133,17 @@ require ( github.com/zeebo/xxh3 v1.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.10.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.42.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect - google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect + golang.org/x/time v0.14.0 // indirect + google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 5dce19e4d4d..41b2cceda2f 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,11 @@ +al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho= +al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= -cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= -cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= -cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= +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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -65,12 +67,16 @@ github.com/chromedp/chromedp v0.14.2 h1:r3b/WtwM50RsBZHMUm9fsNhhzRStTHrKdr2zmwbZ github.com/chromedp/chromedp v0.14.2/go.mod h1:rHzAv60xDE7VNy/MYtTUrYreSc0ujt2O1/C3bzctYBo= github.com/chromedp/sysutil v1.1.0 h1:PUFNv5EcprjqXZD9nJb9b/c9ibAbxiYo4exNWZyipwM= github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHGPTUfWTJ8= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= -github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= -github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= -github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= +github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo= +github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= +github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -90,8 +96,10 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= -github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= +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/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= +github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c h1:DBGU7zCwrrPPDsD6+gqKG8UfMxenWg9BOJE/Nmfph+4= @@ -145,8 +153,8 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hanwen/go-fuse/v2 v2.10.1 h1:QAqZuc9+aBtTou+OPruU/hkYQYCkgPtQd2QaepHkTTs= -github.com/hanwen/go-fuse/v2 v2.10.1/go.mod h1:aU7NkGYZUmuJrZapoI3mEcNve7PZTySUOLBuch/vR6U= +github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= +github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= @@ -266,28 +274,28 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= -go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= -go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= +go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= +go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= +go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= +go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -300,44 +308,45 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= -golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= -golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= -golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= +golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= -gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.277.0 h1:HJfyJUiNeBBUMai7ez8u14wkp/gH/I4wpGbbO9o+cSk= -google.golang.org/api v0.277.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= -google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= -google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= -google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= -google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= -google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI= +google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= +google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From cf18400be16cd6052af88ebdf363ff5b5404cbd4 Mon Sep 17 00:00:00 2001 From: Michal Pryc Date: Wed, 1 Apr 2026 22:53:37 +0200 Subject: [PATCH 153/156] UPSTREAM: : Add OWNERS file Signed-off-by: Michal Pryc Co-authored-by: Michal Pryc Co-Authored-By: Claude Opus 4.6 --- OWNERS | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 OWNERS diff --git a/OWNERS b/OWNERS new file mode 100644 index 00000000000..302c452a189 --- /dev/null +++ b/OWNERS @@ -0,0 +1,16 @@ +approvers: + - joeavaikath + - kaovilai + - mpryc + - rayfordj + - shawn-hurley + - shubham-pampattiwar + - sseago + - weshayutin +reviewers: + - joeavaikath + - kaovilai + - mpryc + - shubham-pampattiwar + - sseago + - weshayutin From 0a10e5b919ea6ca89ff3227be2a59efb3c875a4e Mon Sep 17 00:00:00 2001 From: Michal Pryc Date: Thu, 2 Apr 2026 11:15:07 +0200 Subject: [PATCH 154/156] UPSTREAM: : Disable irrelevant upstream GitHub Actions workflows Disable 16 upstream kopia GitHub Actions workflows that are not relevant to our downstream fork (renamed to .yml.disabled): - auto-merge.yml: missing secrets, kopia-specific - check-pr-title.yml: kopia-specific title checks - code-coverage.yml: not needed for downstream - compat-test.yml: kopia compatibility tests - dependency-review.yml: dependency graph not enabled - endurance-test.yml: kopia repo guard, irrelevant - htmlui-tests.yml: no HTML UI in downstream - license-check.yml: not needed - make.yml: kopia-specific builds, secrets, UI artifacts - ossf-scorecard.yml: kopia-specific scorecard - providers-core.yml: kopia cloud provider tests - providers-extra.yml: kopia cloud provider tests - race-detector.yml: not needed - stale.yml: kopia-specific stale management - stress-test.yml: kopia repo guard, irrelevant - volume-shadow-copy-test.yml: Windows VSS not relevant Signed-off-by: Michal Pryc Co-authored-by: Michal Pryc Co-Authored-By: Claude Opus 4.6 --- .github/workflows/{auto-merge.yml => auto-merge.yml.disabled} | 0 .../workflows/{check-pr-title.yml => check-pr-title.yml.disabled} | 0 .../workflows/{code-coverage.yml => code-coverage.yml.disabled} | 0 .github/workflows/{compat-test.yml => compat-test.yml.disabled} | 0 .../{dependency-review.yml => dependency-review.yml.disabled} | 0 .../workflows/{endurance-test.yml => endurance-test.yml.disabled} | 0 .github/workflows/{htmlui-tests.yml => htmlui-tests.yml.disabled} | 0 .../workflows/{license-check.yml => license-check.yml.disabled} | 0 .github/workflows/{make.yml => make.yml.disabled} | 0 .../workflows/{ossf-scorecard.yml => ossf-scorecard.yml.disabled} | 0 .../workflows/{providers-core.yml => providers-core.yml.disabled} | 0 .../{providers-extra.yml => providers-extra.yml.disabled} | 0 .../workflows/{race-detector.yml => race-detector.yml.disabled} | 0 .github/workflows/{stale.yml => stale.yml.disabled} | 0 .github/workflows/{stress-test.yml => stress-test.yml.disabled} | 0 ...-shadow-copy-test.yml => volume-shadow-copy-test.yml.disabled} | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{auto-merge.yml => auto-merge.yml.disabled} (100%) rename .github/workflows/{check-pr-title.yml => check-pr-title.yml.disabled} (100%) rename .github/workflows/{code-coverage.yml => code-coverage.yml.disabled} (100%) rename .github/workflows/{compat-test.yml => compat-test.yml.disabled} (100%) rename .github/workflows/{dependency-review.yml => dependency-review.yml.disabled} (100%) rename .github/workflows/{endurance-test.yml => endurance-test.yml.disabled} (100%) rename .github/workflows/{htmlui-tests.yml => htmlui-tests.yml.disabled} (100%) rename .github/workflows/{license-check.yml => license-check.yml.disabled} (100%) rename .github/workflows/{make.yml => make.yml.disabled} (100%) rename .github/workflows/{ossf-scorecard.yml => ossf-scorecard.yml.disabled} (100%) rename .github/workflows/{providers-core.yml => providers-core.yml.disabled} (100%) rename .github/workflows/{providers-extra.yml => providers-extra.yml.disabled} (100%) rename .github/workflows/{race-detector.yml => race-detector.yml.disabled} (100%) rename .github/workflows/{stale.yml => stale.yml.disabled} (100%) rename .github/workflows/{stress-test.yml => stress-test.yml.disabled} (100%) rename .github/workflows/{volume-shadow-copy-test.yml => volume-shadow-copy-test.yml.disabled} (100%) diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml.disabled similarity index 100% rename from .github/workflows/auto-merge.yml rename to .github/workflows/auto-merge.yml.disabled diff --git a/.github/workflows/check-pr-title.yml b/.github/workflows/check-pr-title.yml.disabled similarity index 100% rename from .github/workflows/check-pr-title.yml rename to .github/workflows/check-pr-title.yml.disabled diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml.disabled similarity index 100% rename from .github/workflows/code-coverage.yml rename to .github/workflows/code-coverage.yml.disabled diff --git a/.github/workflows/compat-test.yml b/.github/workflows/compat-test.yml.disabled similarity index 100% rename from .github/workflows/compat-test.yml rename to .github/workflows/compat-test.yml.disabled diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml.disabled similarity index 100% rename from .github/workflows/dependency-review.yml rename to .github/workflows/dependency-review.yml.disabled diff --git a/.github/workflows/endurance-test.yml b/.github/workflows/endurance-test.yml.disabled similarity index 100% rename from .github/workflows/endurance-test.yml rename to .github/workflows/endurance-test.yml.disabled diff --git a/.github/workflows/htmlui-tests.yml b/.github/workflows/htmlui-tests.yml.disabled similarity index 100% rename from .github/workflows/htmlui-tests.yml rename to .github/workflows/htmlui-tests.yml.disabled diff --git a/.github/workflows/license-check.yml b/.github/workflows/license-check.yml.disabled similarity index 100% rename from .github/workflows/license-check.yml rename to .github/workflows/license-check.yml.disabled diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml.disabled similarity index 100% rename from .github/workflows/make.yml rename to .github/workflows/make.yml.disabled diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml.disabled similarity index 100% rename from .github/workflows/ossf-scorecard.yml rename to .github/workflows/ossf-scorecard.yml.disabled diff --git a/.github/workflows/providers-core.yml b/.github/workflows/providers-core.yml.disabled similarity index 100% rename from .github/workflows/providers-core.yml rename to .github/workflows/providers-core.yml.disabled diff --git a/.github/workflows/providers-extra.yml b/.github/workflows/providers-extra.yml.disabled similarity index 100% rename from .github/workflows/providers-extra.yml rename to .github/workflows/providers-extra.yml.disabled diff --git a/.github/workflows/race-detector.yml b/.github/workflows/race-detector.yml.disabled similarity index 100% rename from .github/workflows/race-detector.yml rename to .github/workflows/race-detector.yml.disabled diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml.disabled similarity index 100% rename from .github/workflows/stale.yml rename to .github/workflows/stale.yml.disabled diff --git a/.github/workflows/stress-test.yml b/.github/workflows/stress-test.yml.disabled similarity index 100% rename from .github/workflows/stress-test.yml rename to .github/workflows/stress-test.yml.disabled diff --git a/.github/workflows/volume-shadow-copy-test.yml b/.github/workflows/volume-shadow-copy-test.yml.disabled similarity index 100% rename from .github/workflows/volume-shadow-copy-test.yml rename to .github/workflows/volume-shadow-copy-test.yml.disabled From 5b4c2dad467bb0dbca1c2017b6c43951fb4b66ec Mon Sep 17 00:00:00 2001 From: Michal Pryc Date: Thu, 2 Apr 2026 11:15:35 +0200 Subject: [PATCH 155/156] UPSTREAM: : Update lint and test workflows for downstream - Update branch filters from master to oadp-dev/oadp-1.* - Trim OS matrix to ubuntu-latest only - Remove Windows/macOS-specific install steps - Remove scheduled CI runs - Remove ci-integration-tests (uses upstream kopia commands) Signed-off-by: Michal Pryc Co-authored-by: Michal Pryc Co-Authored-By: Claude Opus 4.6 --- .github/workflows/lint.yml | 24 ++---------------------- .github/workflows/tests.yml | 20 ++++---------------- repo/blob/azure/patch.go | 7 ++++--- 3 files changed, 10 insertions(+), 41 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index bffb263ad1e..13d4d7769e6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ name: Lint on: pull_request: - branches: [ master ] + branches: [ oadp-dev, oadp-1.* ] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] name: Lint runs-on: ${{ matrix.os }} permissions: @@ -37,25 +37,5 @@ jobs: uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - - id: govulncheck - name: govulncheck - # generate report and then fail if issues are found - run: | - go install golang.org/x/vuln/cmd/govulncheck@v1.3.0 - govulncheck -format sarif ./... > govulncheck.sarif - govulncheck ./... - - id: govulncheck-results - if: ${{ always() }} - name: "Upload govulncheck results to dashboard" - uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v3.29.5 - with: - sarif_file: govulncheck.sarif - name: Lint run: make lint - - name: Lint Windows - if: ${{ contains(matrix.os, 'ubuntu') }} - run: make lint-windows - - name: Check Locks - run: make check-locks - - name: Prettier - run: make check-prettier diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b6a9288d994..8d14a14fd5b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,15 +1,11 @@ name: Tests on: pull_request: - branches: [ master ] + branches: [ oadp-dev, oadp-1.* ] push: - # ci-sandbox is a branch dedicated to testing post-submit code. - branches: [ master, artifacts-pr ] + branches: [ oadp-dev, oadp-1.* ] tags: - v* - schedule: - # run on Mondays at 8AM - - cron: '0 8 * * 1' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -29,7 +25,7 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest, ubuntu-latest, macos-latest, ubuntu-24.04-arm ] + os: [ubuntu-latest] name: Tests runs-on: ${{ matrix.os }} steps: @@ -41,20 +37,12 @@ jobs: uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: go-version-file: 'go.mod' - - name: Install Windows-specific packages - run: "choco install --no-progress -y make zip unzip curl" - if: ${{ contains(matrix.os, 'windows') }} - - name: Install macOS-specific packages - run: "sudo xcode-select -r" - if: ${{ contains(matrix.os, 'macos') }} - name: Setup - run: make -j4 ci-setup + run: make -j4 go-modules all-tools - name: Test Blob Index Manager V0 run: make test-index-blob-v0 - name: Tests run: make ci-tests - - name: Integration Tests - run: make -j2 ci-integration-tests - name: Upload Logs uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: diff --git a/repo/blob/azure/patch.go b/repo/blob/azure/patch.go index 07c5408affb..56dbf72b634 100644 --- a/repo/blob/azure/patch.go +++ b/repo/blob/azure/patch.go @@ -5,13 +5,14 @@ import ( "fmt" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/pkg/errors" + "github.com/kopia/kopia/internal/clock" "github.com/kopia/kopia/repo/blob" "github.com/kopia/kopia/repo/blob/retrying" - "github.com/pkg/errors" ) -// NewWithClient creates new Azure backend storage with the specified client +// NewWithClient creates new Azure backend storage with the specified client. func NewWithClient(ctx context.Context, opt *Options, client *azblob.Client) (blob.Storage, error) { raw := &azStorage{ Options: *opt, @@ -24,7 +25,7 @@ func NewWithClient(ctx context.Context, opt *Options, client *azblob.Client) (bl // verify Azure connection is functional by listing blobs in a bucket, which will fail if the container // does not exist. We list with a prefix that will not exist, to avoid iterating through any objects. nonExistentPrefix := fmt.Sprintf("kopia-azure-storage-initializing-%v", clock.Now().UnixNano()) - if err := raw.ListBlobs(ctx, blob.ID(nonExistentPrefix), func(md blob.Metadata) error { + if err := raw.ListBlobs(ctx, blob.ID(nonExistentPrefix), func(_ blob.Metadata) error { return nil }); err != nil { return nil, errors.Wrap(err, "unable to list from the bucket") From 7e9fd52cd2e4f4d5a84dcb362d32b29aff6d7fd9 Mon Sep 17 00:00:00 2001 From: oadp-team-rebase-bot Date: Wed, 13 May 2026 01:08:06 +0000 Subject: [PATCH 156/156] UPSTREAM: : Updating go modules --- go.mod | 53 ++++++++++----------- go.sum | 129 ++++++++++++++++++++++++---------------------------- site/go.mod | 5 -- site/go.sum | 6 --- 4 files changed, 85 insertions(+), 108 deletions(-) delete mode 100644 site/go.sum diff --git a/go.mod b/go.mod index 692a269e812..bef3e8044de 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/kopia/kopia go 1.25.0 -toolchain go1.25.8 - require ( cloud.google.com/go/storage v1.62.1 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 @@ -50,31 +48,31 @@ require ( github.com/tg123/go-htpasswd v1.2.4 github.com/zalando/go-keyring v0.2.8 github.com/zeebo/blake3 v0.2.4 - go.opentelemetry.io/otel v1.42.0 + go.opentelemetry.io/otel v1.43.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 - go.opentelemetry.io/otel/sdk v1.42.0 - go.opentelemetry.io/otel/trace v1.42.0 + go.opentelemetry.io/otel/sdk v1.43.0 + go.opentelemetry.io/otel/trace v1.43.0 go.uber.org/zap v1.27.1 - golang.org/x/crypto v0.49.0 + golang.org/x/crypto v0.50.0 golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/mod v0.33.0 - golang.org/x/net v0.52.0 - golang.org/x/oauth2 v0.35.0 + golang.org/x/mod v0.34.0 + golang.org/x/net v0.53.0 + golang.org/x/oauth2 v0.36.0 golang.org/x/sync v0.20.0 - golang.org/x/sys v0.42.0 - golang.org/x/term v0.41.0 - golang.org/x/text v0.35.0 - google.golang.org/api v0.256.0 - google.golang.org/grpc v1.79.3 + golang.org/x/sys v0.43.0 + golang.org/x/term v0.42.0 + golang.org/x/text v0.36.0 + golang.org/x/time v0.15.0 + google.golang.org/api v0.274.0 + google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/kothar/go-backblaze.v0 v0.0.0-20210124194846-35409b867216 ) require ( - al.essio.dev/pkg/shellescape v1.5.1 // indirect cel.dev/expr v0.25.1 // indirect - cloud.google.com/go v0.121.6 // indirect - cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go v0.123.0 // indirect + cloud.google.com/go/auth v0.19.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.7.0 // indirect @@ -90,12 +88,11 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chromedp/sysutil v1.1.0 // indirect github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect - github.com/danieljoos/wincred v1.2.2 // indirect + github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/felixge/fgprof v0.9.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-ini/ini v1.67.0 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect @@ -110,8 +107,8 @@ require ( github.com/golang/glog v1.2.5 // indirect github.com/google/readahead v0.0.0-20161222183148-eaceba169032 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect - github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.21.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/crc32 v1.3.0 // indirect @@ -133,17 +130,17 @@ require ( github.com/zeebo/xxh3 v1.1.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect - golang.org/x/time v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 41b2cceda2f..b41d9092709 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,9 @@ -al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho= -al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890= cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= -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 v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= +cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= 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/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -67,16 +65,12 @@ github.com/chromedp/chromedp v0.14.2 h1:r3b/WtwM50RsBZHMUm9fsNhhzRStTHrKdr2zmwbZ github.com/chromedp/chromedp v0.14.2/go.mod h1:rHzAv60xDE7VNy/MYtTUrYreSc0ujt2O1/C3bzctYBo= github.com/chromedp/sysutil v1.1.0 h1:PUFNv5EcprjqXZD9nJb9b/c9ibAbxiYo4exNWZyipwM= github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHGPTUfWTJ8= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= -github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo= -github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= -github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= +github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= +github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= +github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= +github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -96,10 +90,8 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= -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/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= -github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w= +github.com/fatih/color v1.19.0/go.mod h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/foomo/htpasswd v0.0.0-20200116085101-e3a90e78da9c h1:DBGU7zCwrrPPDsD6+gqKG8UfMxenWg9BOJE/Nmfph+4= @@ -145,16 +137,16 @@ 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.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas= -github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= -github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= +github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= -github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= +github.com/hanwen/go-fuse/v2 v2.10.1 h1:QAqZuc9+aBtTou+OPruU/hkYQYCkgPtQd2QaepHkTTs= +github.com/hanwen/go-fuse/v2 v2.10.1/go.mod h1:aU7NkGYZUmuJrZapoI3mEcNve7PZTySUOLBuch/vR6U= github.com/hashicorp/cronexpr v1.1.3 h1:rl5IkxXN2m681EfivTlccqIryzYJSXRGRNa0xeG7NA4= github.com/hashicorp/cronexpr v1.1.3/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= @@ -274,79 +266,78 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.39.0 h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE= go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= -go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= -golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= -golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= -golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= -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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI= -google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964= -google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= -google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57 h1:mWPCjDEyshlQYzBpMNHaEof6UX1PmHcaUODUywQ0uac= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= +google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/site/go.mod b/site/go.mod index ff7a94a609d..fab555c0ebe 100644 --- a/site/go.mod +++ b/site/go.mod @@ -1,8 +1,3 @@ module github.com/kopia/kopia/site go 1.25 - -require ( - github.com/google/docsy v0.7.0 // indirect - github.com/google/docsy/dependencies v0.7.0 // indirect -) diff --git a/site/go.sum b/site/go.sum deleted file mode 100644 index 7e7d9becd85..00000000000 --- a/site/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= -github.com/google/docsy v0.7.0 h1:JaeZ0/KufX/BJ3SyATb/fmZa1DFI7o5d9KU+i6+lLJY= -github.com/google/docsy v0.7.0/go.mod h1:5WhIFchr5BfH6agjcInhpLRz7U7map0bcmKSpcrg6BE= -github.com/google/docsy/dependencies v0.7.0 h1:/xUlWCZOSMDubHfrhIz1YtaRn2Oc/swfJ7OUfglXE8U= -github.com/google/docsy/dependencies v0.7.0/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= -github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=