Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kargo-cli for openSUSE:Factory checked in at 2025-11-26 17:18:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kargo-cli (Old) and /work/SRC/openSUSE:Factory/.kargo-cli.new.14147 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kargo-cli" Wed Nov 26 17:18:16 2025 rev:38 rq:1320121 version:1.8.4 Changes: -------- --- /work/SRC/openSUSE:Factory/kargo-cli/kargo-cli.changes 2025-11-04 18:44:39.291228276 +0100 +++ /work/SRC/openSUSE:Factory/.kargo-cli.new.14147/kargo-cli.changes 2025-11-26 17:18:27.681845611 +0100 @@ -1,0 +2,18 @@ +Wed Nov 26 06:22:50 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 1.8.4: + no CLI-related changes + * chore(backport release-1.8): chore(deps): bump the go-patch + group with 11 updates (#5398) + * chore(backport release-1.8): chore(deps/api): bump the go-patch + group in /api with 3 updates (#5397) + * chore(backport release-1.8): chore(deps): bump golang from + 1.25.3-trixie to 1.25.4-trixie (#5371) + * chore(backport release-1.8): chore(deps): bump the go-patch + group with 6 updates (#5370) + * chore(backport release-1.8): chore(deps): bump + github.com/containerd/containerd from 1.7.28 to 1.7.29 (#5360) + * chore(backport release-1.8): fix(test): increase time duration + app last operation completion test (#5338) + +------------------------------------------------------------------- Old: ---- kargo-cli-1.8.3.obscpio New: ---- kargo-cli-1.8.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kargo-cli.spec ++++++ --- /var/tmp/diff_new_pack.HJSXKi/_old 2025-11-26 17:18:30.577967786 +0100 +++ /var/tmp/diff_new_pack.HJSXKi/_new 2025-11-26 17:18:30.601968799 +0100 @@ -19,7 +19,7 @@ %define executable_name kargo Name: kargo-cli -Version: 1.8.3 +Version: 1.8.4 Release: 0 Summary: CLI for the Kubernetes Application lifecycle orchestration License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.HJSXKi/_old 2025-11-26 17:18:30.977984662 +0100 +++ /var/tmp/diff_new_pack.HJSXKi/_new 2025-11-26 17:18:31.021986518 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/akuity/kargo</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.8.3</param> + <param name="revision">v1.8.4</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.HJSXKi/_old 2025-11-26 17:18:31.269996980 +0100 +++ /var/tmp/diff_new_pack.HJSXKi/_new 2025-11-26 17:18:31.301998330 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/akuity/kargo</param> - <param name="changesrevision">f9635a1b6479f96d11bfbe690f72b786764ed418</param></service></servicedata> + <param name="changesrevision">dc38d05ff871ace7ae40fc23ef333ca717c96909</param></service></servicedata> (No newline at EOF) ++++++ kargo-cli-1.8.3.obscpio -> kargo-cli-1.8.4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/Dockerfile new/kargo-cli-1.8.4/Dockerfile --- old/kargo-cli-1.8.3/Dockerfile 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/Dockerfile 2025-11-25 22:45:38.000000000 +0100 @@ -20,7 +20,7 @@ #################################################################################################### # back-end-builder #################################################################################################### -FROM --platform=$BUILDPLATFORM golang:1.25.3-trixie AS back-end-builder +FROM --platform=$BUILDPLATFORM golang:1.25.4-trixie AS back-end-builder ARG TARGETOS ARG TARGETARCH diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/Dockerfile.dev new/kargo-cli-1.8.4/Dockerfile.dev --- old/kargo-cli-1.8.3/Dockerfile.dev 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/Dockerfile.dev 2025-11-25 22:45:38.000000000 +0100 @@ -1,4 +1,4 @@ -FROM golang:1.25.3-trixie +FROM golang:1.25.4-trixie ARG TARGETARCH diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/api/go.mod new/kargo-cli-1.8.4/api/go.mod --- old/kargo-cli-1.8.3/api/go.mod 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/api/go.mod 2025-11-25 22:45:38.000000000 +0100 @@ -7,9 +7,9 @@ github.com/gogo/protobuf v1.3.2 github.com/stretchr/testify v1.11.1 google.golang.org/protobuf v1.36.10 - k8s.io/api v0.34.1 - k8s.io/apiextensions-apiserver v0.34.1 - k8s.io/apimachinery v0.34.1 + k8s.io/api v0.34.2 + k8s.io/apiextensions-apiserver v0.34.2 + k8s.io/apimachinery v0.34.2 sigs.k8s.io/yaml v1.6.0 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/api/go.sum new/kargo-cli-1.8.4/api/go.sum --- old/kargo-cli-1.8.3/api/go.sum 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/api/go.sum 2025-11-25 22:45:38.000000000 +0100 @@ -83,12 +83,12 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= -k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= -k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= -k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= -k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= -k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY= +k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw= +k8s.io/apiextensions-apiserver v0.34.2 h1:WStKftnGeoKP4AZRz/BaAAEJvYp4mlZGN0UCv+uvsqo= +k8s.io/apiextensions-apiserver v0.34.2/go.mod h1:398CJrsgXF1wytdaanynDpJ67zG4Xq7yj91GrmYN2SE= +k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= +k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/api/rbac/v1alpha1/annotations.go new/kargo-cli-1.8.4/api/rbac/v1alpha1/annotations.go --- old/kargo-cli-1.8.3/api/rbac/v1alpha1/annotations.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/api/rbac/v1alpha1/annotations.go 2025-11-25 22:45:38.000000000 +0100 @@ -51,6 +51,26 @@ return strings.TrimPrefix(key, AnnotationKeyOIDCClaimNamePrefix), true } +// stringOrArray is a helper type that can unmarshal from either a scalar string +// or an array of strings. +type stringOrArray []string + +func (s *stringOrArray) UnmarshalJSON(data []byte) error { + // Try unmarshaling as array first + var arr []string + if err := json.Unmarshal(data, &arr); err == nil { + *s = arr + return nil + } + // Fall back to scalar string + var str string + if err := json.Unmarshal(data, &str); err != nil { + return err + } + *s = []string{str} + return nil +} + // OIDCClaimsFromAnnotationValue parses the values of the newer, preferred // rbac.kargo.akuity.io/claims annotation as well as the values of older // annotations with keys of the form rbac.kargo.akuity.io/claim.<name> and @@ -60,9 +80,13 @@ claims := make(map[string][]string) // hydrate with new style claims if _, ok := annotations[AnnotationKeyOIDCClaims]; ok { - if err := json.Unmarshal([]byte(annotations[AnnotationKeyOIDCClaims]), &claims); err != nil { + flexClaims := map[string]stringOrArray{} + if err := json.Unmarshal([]byte(annotations[AnnotationKeyOIDCClaims]), &flexClaims); err != nil { return nil, fmt.Errorf("unmarshaling OIDC claims from annotation value: %w", err) } + for key, val := range flexClaims { + claims[key] = []string(val) + } } // hydrate with old style claims for name, values := range annotations { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/api/rbac/v1alpha1/annotations_test.go new/kargo-cli-1.8.4/api/rbac/v1alpha1/annotations_test.go --- old/kargo-cli-1.8.3/api/rbac/v1alpha1/annotations_test.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/api/rbac/v1alpha1/annotations_test.go 2025-11-25 22:45:38.000000000 +0100 @@ -9,7 +9,7 @@ ) func TestOIDCClaimsFromAnnotationValues(t *testing.T) { - for _, test := range []struct { + testCases := []struct { name string annotations map[string]string expected map[string][]string @@ -27,6 +27,18 @@ }, }, { + name: "new style with bug", + // Some versions incorrectly set the default claim annotations upon + // programmatic Project creation. + annotations: map[string]string{ + AnnotationKeyOIDCClaims: `{"groups": ["foo", "bar"], "email": "[email protected]"}`, + }, + expected: map[string][]string{ + "groups": {"bar", "foo"}, + "email": {"[email protected]"}, + }, + }, + { name: "new style with dupes", annotations: map[string]string{ AnnotationKeyOIDCClaims: `{"groups": ["foo", "foo"], "email": ["[email protected]", "[email protected]"]}`, @@ -90,16 +102,17 @@ shouldErrOut: true, expectedErrMsg: "unmarshaling OIDC claims from annotation value", }, - } { - t.Run(test.name, func(t *testing.T) { - got, err := OIDCClaimsFromAnnotationValues(test.annotations) - if test.shouldErrOut { + } + for _, testCase := range testCases { + t.Run(testCase.name, func(t *testing.T) { + got, err := OIDCClaimsFromAnnotationValues(testCase.annotations) + if testCase.shouldErrOut { require.Error(t, err) - require.ErrorContains(t, err, test.expectedErrMsg) + require.ErrorContains(t, err, testCase.expectedErrMsg) return } require.NoError(t, err) - require.Equal(t, test.expected, got) + require.Equal(t, testCase.expected, got) }) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/docs/docs/50-user-guide/20-how-to-guides/30-working-with-warehouses.md new/kargo-cli-1.8.4/docs/docs/50-user-guide/20-how-to-guides/30-working-with-warehouses.md --- old/kargo-cli-1.8.3/docs/docs/50-user-guide/20-how-to-guides/30-working-with-warehouses.md 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/docs/docs/50-user-guide/20-how-to-guides/30-working-with-warehouses.md 2025-11-25 22:45:38.000000000 +0100 @@ -97,6 +97,16 @@ This is a security risk and should only be used in development environments. ::: +- `strictSemvers`: StrictSemvers specifies whether only "strict" semver tags + should be considered. `StrictSemvers` specifies whether only "strict" semver + tags should be considered. A "strict" semver tag is one containing ALL of + major, minor, and patch version components. This is enabled by default, but + only has any effect when the `ImageSelectionStrategy` is `SemVer`. This + should be disabled cautiously, as it is not uncommon to tag container images + with short Git commit hashes, which have the potential to contain numeric + characters only and could be mistaken for a semver string containing the + major version number only. + #### Image Selection Strategies For subscriptions to container image repositories, the `imageSelectionStrategy` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/docs/docs/50-user-guide/60-reference-docs/30-promotion-steps/argocd-update.md new/kargo-cli-1.8.4/docs/docs/50-user-guide/60-reference-docs/30-promotion-steps/argocd-update.md --- old/kargo-cli-1.8.3/docs/docs/50-user-guide/60-reference-docs/30-promotion-steps/argocd-update.md 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/docs/docs/50-user-guide/60-reference-docs/30-promotion-steps/argocd-update.md 2025-11-25 22:45:38.000000000 +0100 @@ -146,7 +146,8 @@ sources: - repoURL: ${{ chartRepo }} chart: my-chart - targetRevision: ${{ chartFrom(chartRepo, "my-chart").Version }} + desiredRevision: ${{ chartFrom(chartRepo, "my-chart").Version }} + updateTargetRevision: true ``` ### Updating an Image with Kustomize diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/go.mod new/kargo-cli-1.8.4/go.mod --- old/kargo-cli-1.8.3/go.mod 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/go.mod 2025-11-25 22:45:38.000000000 +0100 @@ -13,15 +13,15 @@ github.com/Masterminds/semver/v3 v3.4.0 github.com/adrg/xdg v0.5.3 github.com/akuity/kargo/api v0.0.0 - github.com/aws/aws-sdk-go-v2 v1.39.5 - github.com/aws/aws-sdk-go-v2/config v1.31.16 - github.com/aws/aws-sdk-go-v2/credentials v1.18.20 - github.com/aws/aws-sdk-go-v2/service/ecr v1.51.1 - github.com/aws/aws-sdk-go-v2/service/sts v1.39.0 + github.com/aws/aws-sdk-go-v2 v1.39.6 + github.com/aws/aws-sdk-go-v2/config v1.31.20 + github.com/aws/aws-sdk-go-v2/credentials v1.18.24 + github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2 + github.com/aws/aws-sdk-go-v2/service/sts v1.40.2 github.com/bmatcuk/doublestar/v4 v4.9.1 github.com/bombsimon/logrusr/v4 v4.1.0 github.com/coreos/go-oidc/v3 v3.16.0 - github.com/cyphar/filepath-securejoin v0.5.1 + github.com/cyphar/filepath-securejoin v0.6.0 github.com/evanphx/json-patch/v5 v5.9.11 github.com/expr-lang/expr v1.17.6 github.com/fatih/structtag v1.2.0 @@ -68,18 +68,18 @@ google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.19.0 - k8s.io/api v0.34.1 - k8s.io/apiextensions-apiserver v0.34.1 - k8s.io/apimachinery v0.34.1 - k8s.io/apiserver v0.34.1 - k8s.io/cli-runtime v0.34.1 - k8s.io/client-go v0.34.1 + helm.sh/helm/v3 v3.19.2 + k8s.io/api v0.34.2 + k8s.io/apiextensions-apiserver v0.34.2 + k8s.io/apimachinery v0.34.2 + k8s.io/apiserver v0.34.2 + k8s.io/cli-runtime v0.34.2 + k8s.io/client-go v0.34.2 k8s.io/klog/v2 v2.130.1 k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 oras.land/oras-go/v2 v2.6.0 sigs.k8s.io/cli-utils v0.37.2 - sigs.k8s.io/controller-runtime v0.22.3 + sigs.k8s.io/controller-runtime v0.22.4 sigs.k8s.io/kustomize/api v0.20.1 sigs.k8s.io/kustomize/kyaml v0.20.1 sigs.k8s.io/yaml v1.6.0 @@ -97,21 +97,21 @@ github.com/Masterminds/sprig/v3 v3.3.0 // indirect github.com/Masterminds/squirrel v1.5.4 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.12 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.12 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.4 // indirect - github.com/aws/smithy-go v1.23.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.7 // indirect + github.com/aws/smithy-go v1.23.2 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect - github.com/containerd/containerd v1.7.28 // indirect + github.com/containerd/containerd v1.7.29 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect @@ -224,7 +224,7 @@ gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gotest.tools/v3 v3.4.0 // indirect - k8s.io/component-base v0.34.1 // indirect + k8s.io/component-base v0.34.2 // indirect k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect k8s.io/kubectl v0.34.0 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/go.sum new/kargo-cli-1.8.4/go.sum --- old/kargo-cli-1.8.3/go.sum 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/go.sum 2025-11-25 22:45:38.000000000 +0100 @@ -44,34 +44,34 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go-v2 v1.39.5 h1:e/SXuia3rkFtapghJROrydtQpfQaaUgd1cUvyO1mp2w= -github.com/aws/aws-sdk-go-v2 v1.39.5/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM= -github.com/aws/aws-sdk-go-v2/config v1.31.16 h1:E4Tz+tJiPc7kGnXwIfCyUj6xHJNpENlY11oKpRTgsjc= -github.com/aws/aws-sdk-go-v2/config v1.31.16/go.mod h1:2S9hBElpCyGMifv14WxQ7EfPumgoeCPZUpuPX8VtW34= -github.com/aws/aws-sdk-go-v2/credentials v1.18.20 h1:KFndAnHd9NUuzikHjQ8D5CfFVO+bgELkmcGY8yAw98Q= -github.com/aws/aws-sdk-go-v2/credentials v1.18.20/go.mod h1:9mCi28a+fmBHSQ0UM79omkz6JtN+PEsvLrnG36uoUv0= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.12 h1:VO3FIM2TDbm0kqp6sFNR0PbioXJb/HzCDW6NtIZpIWE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.12/go.mod h1:6C39gB8kg82tx3r72muZSrNhHia9rjGkX7ORaS2GKNE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 h1:p/9flfXdoAnwJnuW9xHEAFY22R3A6skYkW19JFF9F+8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12/go.mod h1:ZTLHakoVCTtW8AaLGSwJ3LXqHD9uQKnOcv1TrpO6u2k= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 h1:2lTWFvRcnWFFLzHWmtddu5MTchc5Oj2OOey++99tPZ0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12/go.mod h1:hI92pK+ho8HVcWMHKHrK3Uml4pfG7wvL86FzO0LVtQQ= +github.com/aws/aws-sdk-go-v2 v1.39.6 h1:2JrPCVgWJm7bm83BDwY5z8ietmeJUbh3O2ACnn+Xsqk= +github.com/aws/aws-sdk-go-v2 v1.39.6/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE= +github.com/aws/aws-sdk-go-v2/config v1.31.20 h1:/jWF4Wu90EhKCgjTdy1DGxcbcbNrjfBHvksEL79tfQc= +github.com/aws/aws-sdk-go-v2/config v1.31.20/go.mod h1:95Hh1Tc5VYKL9NJ7tAkDcqeKt+MCXQB1hQZaRdJIZE0= +github.com/aws/aws-sdk-go-v2/credentials v1.18.24 h1:iJ2FmPT35EaIB0+kMa6TnQ+PwG5A1prEdAw+PsMzfHg= +github.com/aws/aws-sdk-go-v2/credentials v1.18.24/go.mod h1:U91+DrfjAiXPDEGYhh/x29o4p0qHX5HDqG7y5VViv64= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 h1:T1brd5dR3/fzNFAQch/iBKeX07/ffu/cLu+q+RuzEWk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13/go.mod h1:Peg/GBAQ6JDt+RoBf4meB1wylmAipb7Kg2ZFakZTlwk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 h1:a+8/MLcWlIxo1lF9xaGt3J/u3yOZx+CdSveSNwjhD40= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13/go.mod h1:oGnKwIYZ4XttyU2JWxFrwvhF6YKiK/9/wmE3v3Iu9K8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 h1:HBSI2kDkMdWz4ZM7FjwE7e/pWDEZ+nR95x8Ztet1ooY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13/go.mod h1:YE94ZoDArI7awZqJzBAZ3PDD2zSfuP7w6P2knOzIn8M= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= -github.com/aws/aws-sdk-go-v2/service/ecr v1.51.1 h1:1G4mc5St/5fsa+eKOY/zABuzSRqv0CeUL5Epk5/HYrE= -github.com/aws/aws-sdk-go-v2/service/ecr v1.51.1/go.mod h1:2nWjy9RsAoNBrG9x+XddEg43nDd1q3fMeGlVYeYrW6M= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.12 h1:MM8imH7NZ0ovIVX7D2RxfMDv7Jt9OiUXkcQ+GqywA7M= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.12/go.mod h1:gf4OGwdNkbEsb7elw2Sy76odfhwNktWII3WgvQgQQ6w= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.0 h1:xHXvxst78wBpJFgDW07xllOx0IAzbryrSdM4nMVQ4Dw= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.0/go.mod h1:/e8m+AO6HNPPqMyfKRtzZ9+mBF5/x1Wk8QiDva4m07I= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.4 h1:tBw2Qhf0kj4ZwtsVpDiVRU3zKLvjvjgIjHMKirxXg8M= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.4/go.mod h1:Deq4B7sRM6Awq/xyOBlxBdgW8/Z926KYNNaGMW2lrkA= -github.com/aws/aws-sdk-go-v2/service/sts v1.39.0 h1:C+BRMnasSYFcgDw8o9H5hzehKzXyAb9GY5v/8bP9DUY= -github.com/aws/aws-sdk-go-v2/service/sts v1.39.0/go.mod h1:4EjU+4mIx6+JqKQkruye+CaigV7alL3thVPfDd9VlMs= -github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M= -github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2 h1:aq2N/9UkbEyljIQ7OFcudEgUsJzO8MYucmfsM/k/dmc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.51.2/go.mod h1:1NVD1KuMjH2GqnPwMotPndQaT/MreKkWpjkF12d6oKU= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 h1:kDqdFvMY4AtKoACfzIGD8A0+hbT41KTKF//gq7jITfM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13/go.mod h1:lmKuogqSU3HzQCwZ9ZtcqOc5XGMqtDK7OIc2+DxiUEg= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.3 h1:NjShtS1t8r5LUfFVtFeI8xLAHQNTa7UI0VawXlrBMFQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.3/go.mod h1:fKvyjJcz63iL/ftA6RaM8sRCtN4r4zl4tjL3qw5ec7k= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.7 h1:gTsnx0xXNQ6SBbymoDvcoRHL+q4l/dAFsQuKfDWSaGc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.7/go.mod h1:klO+ejMvYsB4QATfEOIXk8WAEwN4N0aBfJpvC+5SZBo= +github.com/aws/aws-sdk-go-v2/service/sts v1.40.2 h1:HK5ON3KmQV2HcAunnx4sKLB9aPf3gKGwVAf7xnx0QT0= +github.com/aws/aws-sdk-go-v2/service/sts v1.40.2/go.mod h1:E19xDjpzPZC7LS2knI9E6BaRFDK43Eul7vd6rSq2HWk= +github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM= +github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -90,8 +90,8 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= -github.com/containerd/containerd v1.7.28 h1:Nsgm1AtcmEh4AHAJ4gGlNSaKgXiNccU270Dnf81FQ3c= -github.com/containerd/containerd v1.7.28/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= +github.com/containerd/containerd v1.7.29 h1:90fWABQsaN9mJhGkoVnuzEY+o1XDPbg9BTC9QTAHnuE= +github.com/containerd/containerd v1.7.29/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= @@ -108,8 +108,8 @@ github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.5.1 h1:eYgfMq5yryL4fbWfkLpFFy2ukSELzaJOTaUTuh+oF48= -github.com/cyphar/filepath-securejoin v0.5.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cyphar/filepath-securejoin v0.6.0 h1:BtGB77njd6SVO6VztOHfPxKitJvd/VPT+OFBFMOi1Is= +github.com/cyphar/filepath-securejoin v0.6.0/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc= 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= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -617,22 +617,22 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.19.0 h1:krVyCGa8fa/wzTZgqw0DUiXuRT5BPdeqE/sQXujQ22k= -helm.sh/helm/v3 v3.19.0/go.mod h1:Lk/SfzN0w3a3C3o+TdAKrLwJ0wcZ//t1/SDXAvfgDdc= -k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= -k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= -k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= -k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= -k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= -k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= -k8s.io/apiserver v0.34.1 h1:U3JBGdgANK3dfFcyknWde1G6X1F4bg7PXuvlqt8lITA= -k8s.io/apiserver v0.34.1/go.mod h1:eOOc9nrVqlBI1AFCvVzsob0OxtPZUCPiUJL45JOTBG0= -k8s.io/cli-runtime v0.34.1 h1:btlgAgTrYd4sk8vJTRG6zVtqBKt9ZMDeQZo2PIzbL7M= -k8s.io/cli-runtime v0.34.1/go.mod h1:aVA65c+f0MZiMUPbseU/M9l1Wo2byeaGwUuQEQVVveE= -k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= -k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= -k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A= -k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0= +helm.sh/helm/v3 v3.19.2 h1:psQjaM8aIWrSVEly6PgYtLu/y6MRSmok4ERiGhZmtUY= +helm.sh/helm/v3 v3.19.2/go.mod h1:gX10tB5ErM+8fr7bglUUS/UfTOO8UUTYWIBH1IYNnpE= +k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY= +k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw= +k8s.io/apiextensions-apiserver v0.34.2 h1:WStKftnGeoKP4AZRz/BaAAEJvYp4mlZGN0UCv+uvsqo= +k8s.io/apiextensions-apiserver v0.34.2/go.mod h1:398CJrsgXF1wytdaanynDpJ67zG4Xq7yj91GrmYN2SE= +k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= +k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/apiserver v0.34.2 h1:2/yu8suwkmES7IzwlehAovo8dDE07cFRC7KMDb1+MAE= +k8s.io/apiserver v0.34.2/go.mod h1:gqJQy2yDOB50R3JUReHSFr+cwJnL8G1dzTA0YLEqAPI= +k8s.io/cli-runtime v0.34.2 h1:cct1GEuWc3IyVT8MSCoIWzRGw9HJ/C5rgP32H60H6aE= +k8s.io/cli-runtime v0.34.2/go.mod h1:X13tsrYexYUCIq8MarCBy8lrm0k0weFPTpcaNo7lms4= +k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M= +k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE= +k8s.io/component-base v0.34.2 h1:HQRqK9x2sSAsd8+R4xxRirlTjowsg6fWCPwWYeSvogQ= +k8s.io/component-base v0.34.2/go.mod h1:9xw2FHJavUHBFpiGkZoKuYZ5pdtLKe97DEByaA+hHbM= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= @@ -645,8 +645,8 @@ oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o= sigs.k8s.io/cli-utils v0.37.2 h1:GOfKw5RV2HDQZDJlru5KkfLO1tbxqMoyn1IYUxqBpNg= sigs.k8s.io/cli-utils v0.37.2/go.mod h1:V+IZZr4UoGj7gMJXklWBg6t5xbdThFBcpj4MrZuCYco= -sigs.k8s.io/controller-runtime v0.22.3 h1:I7mfqz/a/WdmDCEnXmSPm8/b/yRTy6JsKKENTijTq8Y= -sigs.k8s.io/controller-runtime v0.22.3/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= +sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= +sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/kustomize/api v0.20.1 h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/bare_repo.go new/kargo-cli-1.8.4/pkg/controller/git/bare_repo.go --- old/kargo-cli-1.8.3/pkg/controller/git/bare_repo.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/bare_repo.go 2025-11-25 22:45:38.000000000 +0100 @@ -98,10 +98,11 @@ } b := &bareRepo{ baseRepo: &baseRepo{ - creds: clientOpts.Credentials, - dir: filepath.Join(homeDir, "repo"), - homeDir: homeDir, - url: repoURL, + creds: clientOpts.Credentials, + dir: filepath.Join(homeDir, "repo"), + homeDir: homeDir, + originalURL: repoURL, + accessURL: repoURL, }, } if err = b.setupClient(homeDir, clientOpts); err != nil { @@ -113,14 +114,17 @@ if err = b.saveDirs(); err != nil { return nil, err } + if err = b.saveOriginalURL(); err != nil { + return nil, err + } return b, nil } func (b *bareRepo) clone() error { - cmd := b.buildGitCommand("clone", "--bare", b.url, b.dir) + cmd := b.buildGitCommand("clone", "--bare", b.accessURL, b.dir) cmd.Dir = b.homeDir // Override the cmd.Dir that's set by r.buildGitCommand() if _, err := libExec.Exec(cmd); err != nil { - return fmt.Errorf("error cloning repo %q into %q: %w", b.url, b.dir, err) + return fmt.Errorf("error cloning repo %q into %q: %w", b.originalURL, b.dir, err) } return nil } @@ -142,7 +146,7 @@ if err := b.loadHomeDir(); err != nil { return nil, fmt.Errorf("error reading repo home dir from config: %w", err) } - if err := b.loadURL(); err != nil { + if err := b.loadURLs(); err != nil { return nil, fmt.Errorf(`error reading URL of remote "origin" from config: %w`, err) } @@ -192,10 +196,11 @@ } return &workTree{ baseRepo: &baseRepo{ - creds: b.creds, - dir: path, - homeDir: b.homeDir, - url: b.url, + creds: b.creds, + dir: path, + homeDir: b.homeDir, + originalURL: b.originalURL, + accessURL: b.accessURL, }, bareRepo: b, }, nil @@ -242,10 +247,11 @@ for i, workTreePath := range workTreePaths { workTrees[i] = &workTree{ baseRepo: &baseRepo{ - creds: b.creds, - dir: workTreePath, - homeDir: b.homeDir, - url: b.url, + creds: b.creds, + dir: workTreePath, + homeDir: b.homeDir, + originalURL: b.originalURL, + accessURL: b.accessURL, }, bareRepo: b, } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/bare_repo_test.go new/kargo-cli-1.8.4/pkg/controller/git/bare_repo_test.go --- old/kargo-cli-1.8.3/pkg/controller/git/bare_repo_test.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/bare_repo_test.go 2025-11-25 22:45:38.000000000 +0100 @@ -79,11 +79,12 @@ require.True(t, ok) t.Run("can clone", func(t *testing.T) { - var repoURL *url.URL - repoURL, err = url.Parse(r.url) + require.Equal(t, testRepoURL, r.originalURL) + var accessURL *url.URL + accessURL, err = url.Parse(r.accessURL) require.NoError(t, err) - repoURL.User = nil - require.Equal(t, testRepoURL, repoURL.String()) + accessURL.User = nil + require.Equal(t, testRepoURL, accessURL.String()) require.NotEmpty(t, r.homeDir) var fi os.FileInfo fi, err = os.Stat(r.homeDir) @@ -96,7 +97,7 @@ }) t.Run("can get the repo url", func(t *testing.T) { - require.Equal(t, r.url, r.URL()) + require.Equal(t, r.originalURL, r.URL()) }) t.Run("can get the home dir", func(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/base_repo.go new/kargo-cli-1.8.4/pkg/controller/git/base_repo.go --- old/kargo-cli-1.8.3/pkg/controller/git/base_repo.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/base_repo.go 2025-11-25 22:45:38.000000000 +0100 @@ -17,6 +17,10 @@ const ( defaultUsername = "Kargo" defaultEmail = "[email protected]" + + repoDirConfigKey = "kargo.repoDir" + repoHomeDirConfigKey = "kargo.repoHomeDir" + repoOriginalURLConfigKey = "kargo.repoOriginalURL" ) // baseRepo implements the common underpinnings of a Git repository with a @@ -26,7 +30,11 @@ creds *RepoCredentials dir string homeDir string - url string + // Store the URL two ways: + // 1. Exactly as it was originally provided + // 2. Modified in ways required for internal use by this type's methods + originalURL string + accessURL string } // ClientOptions represents options for a repository-specific Git client. @@ -218,14 +226,15 @@ return nil } - lowerURL := strings.ToLower(b.url) + // Add username@ to the URL that will be used internally... + lowerURL := strings.ToLower(b.accessURL) if strings.HasPrefix(lowerURL, "http://") || strings.HasPrefix(lowerURL, "https://") { - u, err := url.Parse(b.url) + u, err := url.Parse(b.accessURL) if err != nil { - return fmt.Errorf("error parsing URL %q: %w", b.url, err) + return fmt.Errorf("error parsing URL %q: %w", b.accessURL, err) } u.User = url.User(b.creds.Username) - b.url = u.String() + b.accessURL = u.String() } return nil @@ -238,14 +247,14 @@ func (b *baseRepo) saveDirs() error { if _, err := libExec.Exec(b.buildGitCommand( "config", - "kargo.repoDir", + repoDirConfigKey, b.dir, )); err != nil { return fmt.Errorf("error saving repo dir as config: %w", err) } if _, err := libExec.Exec(b.buildGitCommand( "config", - "kargo.repoHomeDir", + repoHomeDirConfigKey, b.homeDir, )); err != nil { return fmt.Errorf("error saving repo home dir as config: %w", err) @@ -253,13 +262,27 @@ return nil } +// saveOriginalURL saves the original URL of the repository to the repository's +// configuration. This is useful for reliably determining this information when +// an existing repository or working tree is loaded from the file system. +func (b *baseRepo) saveOriginalURL() error { + if _, err := libExec.Exec(b.buildGitCommand( + "config", + repoOriginalURLConfigKey, + b.originalURL, + )); err != nil { + return fmt.Errorf("error saving original URL as config: %w", err) + } + return nil +} + // loadHomeDir restores the repository's home directory from the repository's // configuration. This is useful for reliably determining this information when // an existing repository or working tree is loaded from the file system. func (b *baseRepo) loadHomeDir() error { res, err := libExec.Exec(b.buildGitCommand( "config", - "kargo.repoHomeDir", + repoHomeDirConfigKey, )) if err != nil { return fmt.Errorf("error reading repo home dir from config: %w", err) @@ -268,12 +291,23 @@ return nil } -func (b *baseRepo) loadURL() error { - res, err := libExec.Exec(b.buildGitCommand("config", "remote.origin.url")) +// loadURLs restores the repository's original and access URLs from the +// repository's configuration. This is useful for reliably determining this +// information when an existing repository or working tree is loaded from the +// file system. +func (b *baseRepo) loadURLs() error { + res, err := libExec.Exec(b.buildGitCommand("config", repoOriginalURLConfigKey)) if err != nil { + return fmt.Errorf(`error getting original URL of remote "origin": %w`, err) + } + b.originalURL = strings.TrimSpace(string(res)) + if res, err = libExec.Exec(b.buildGitCommand( + "config", + "remote.origin.url", + )); err != nil { return fmt.Errorf(`error getting URL of remote "origin": %w`, err) } - b.url = strings.TrimSpace(string(res)) + b.accessURL = strings.TrimSpace(string(res)) return nil } @@ -324,7 +358,7 @@ "ls-remote", "--heads", "--exit-code", // Return 2 if not found - b.url, + b.accessURL, branch, )) var exitErr *libExec.ExitError @@ -336,7 +370,7 @@ return false, fmt.Errorf( "error checking for existence of branch %q in remote repo %q: %w", branch, - b.url, + b.originalURL, err, ) } @@ -344,7 +378,7 @@ } func (b *baseRepo) URL() string { - return b.url + return b.originalURL } func (b *baseRepo) setCmdHome(cmd *exec.Cmd, homeDir string) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/repo.go new/kargo-cli-1.8.4/pkg/controller/git/repo.go --- old/kargo-cli-1.8.3/pkg/controller/git/repo.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/repo.go 2025-11-25 22:45:38.000000000 +0100 @@ -19,7 +19,8 @@ // HomeDir returns an absolute path to the home directory of the system user // who has cloned this repo. HomeDir() string - // URL returns the remote URL of the repository. + // URL returns the remote URL of the repository as it was originally provided + // when the repository was cloned. URL() string WorkTree } @@ -86,10 +87,11 @@ fmt.Errorf("error resolving symlinks in path %s: %w", homeDir, err) } baseRepo := &baseRepo{ - creds: clientOpts.Credentials, - dir: filepath.Join(homeDir, "repo"), - homeDir: homeDir, - url: repoURL, + creds: clientOpts.Credentials, + dir: filepath.Join(homeDir, "repo"), + homeDir: homeDir, + originalURL: repoURL, + accessURL: repoURL, } r := &repo{ baseRepo: baseRepo, @@ -106,6 +108,9 @@ if err = r.saveDirs(); err != nil { return nil, err } + if err = r.saveOriginalURL(); err != nil { + return nil, err + } return r, nil } @@ -123,11 +128,11 @@ if opts.Depth > 0 { args = append(args, "--depth", fmt.Sprint(opts.Depth)) } - args = append(args, r.url, r.dir) + args = append(args, r.accessURL, r.dir) cmd := r.buildGitCommand(args...) cmd.Dir = r.homeDir // Override the cmd.Dir that's set by r.buildGitCommand() if _, err := libExec.Exec(cmd); err != nil { - return fmt.Errorf("error cloning repo %q into %q: %w", r.url, r.dir, err) + return fmt.Errorf("error cloning repo %q into %q: %w", r.originalURL, r.dir, err) } return nil } @@ -153,7 +158,7 @@ if err := r.loadHomeDir(); err != nil { return nil, fmt.Errorf("error reading repo home dir from config: %w", err) } - if err := r.loadURL(); err != nil { + if err := r.loadURLs(); err != nil { return nil, fmt.Errorf(`error reading URL of remote "origin" from config: %w`, err) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/repo_test.go new/kargo-cli-1.8.4/pkg/controller/git/repo_test.go --- old/kargo-cli-1.8.3/pkg/controller/git/repo_test.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/repo_test.go 2025-11-25 22:45:38.000000000 +0100 @@ -58,11 +58,12 @@ require.True(t, ok) t.Run("can clone", func(t *testing.T) { - var repoURL *url.URL - repoURL, err = url.Parse(r.url) + require.Equal(t, testRepoURL, r.originalURL) + var accessURL *url.URL + accessURL, err = url.Parse(r.accessURL) require.NoError(t, err) - repoURL.User = nil - require.Equal(t, testRepoURL, repoURL.String()) + accessURL.User = nil + require.Equal(t, testRepoURL, accessURL.String()) require.NotEmpty(t, r.homeDir) var fi os.FileInfo fi, err = os.Stat(r.homeDir) @@ -75,7 +76,7 @@ }) t.Run("can get the repo url", func(t *testing.T) { - require.Equal(t, r.url, r.URL()) + require.Equal(t, r.originalURL, r.URL()) }) t.Run("can get the home dir", func(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/git/work_tree.go new/kargo-cli-1.8.4/pkg/controller/git/work_tree.go --- old/kargo-cli-1.8.3/pkg/controller/git/work_tree.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/git/work_tree.go 2025-11-25 22:45:38.000000000 +0100 @@ -112,7 +112,7 @@ } res, err := libExec.Exec(w.buildGitCommand( "config", - "kargo.repoDir", + repoDirConfigKey, )) if err != nil { return nil, fmt.Errorf("error reading repo dir from config: %w", err) @@ -121,7 +121,7 @@ if err = w.loadHomeDir(); err != nil { return nil, fmt.Errorf("error reading repo home dir from config: %w", err) } - if err = w.loadURL(); err != nil { + if err = w.loadURLs(); err != nil { return nil, fmt.Errorf(`error reading URL of remote "origin" from config: %w`, err) } @@ -187,7 +187,10 @@ // paths within the repo. "--", )); err != nil { - return fmt.Errorf("error checking out branch %q from repo %q: %w", branch, w.url, err) + return fmt.Errorf( + "error checking out branch %q from repo %q: %w", + branch, w.originalURL, err, + ) } return nil } @@ -268,7 +271,10 @@ // paths within the repo. "--", )); err != nil { - return fmt.Errorf("error creating new branch %q for repo %q: %w", branch, w.url, err) + return fmt.Errorf( + "error creating new branch %q for repo %q: %w", + branch, w.originalURL, err, + ) } return nil } @@ -280,7 +286,10 @@ branch, "--discard-changes", )); err != nil { - return fmt.Errorf("error creating orphaned branch %q for repo %q: %w", branch, w.url, err) + return fmt.Errorf( + "error creating orphaned branch %q for repo %q: %w", + branch, w.originalURL, err, + ) } return w.Clean() } @@ -288,7 +297,10 @@ func (w *workTree) CurrentBranch() (string, error) { res, err := libExec.Exec(w.buildGitCommand("branch", "--show-current")) if err != nil { - return "", fmt.Errorf("error checking current branch for repo %q: %w", w.url, err) + return "", fmt.Errorf( + "error checking current branch for repo %q: %w", + w.originalURL, err, + ) } return strings.TrimSpace(string(res)), nil } @@ -300,7 +312,7 @@ "--force", branch, )); err != nil { - return fmt.Errorf("error deleting branch %q for repo %q: %w", branch, w.url, err) + return fmt.Errorf("error deleting branch %q for repo %q: %w", branch, w.accessURL, err) } return nil } @@ -413,7 +425,10 @@ commitsBytes, err := libExec.Exec(w.buildGitCommand(args...)) if err != nil { - return nil, fmt.Errorf("error listing commits for repo %q: %w", w.url, err) + return nil, fmt.Errorf( + "error listing commits for repo %q: %w", + w.originalURL, err, + ) } var commits []CommitMetadata @@ -497,7 +512,10 @@ func (w *workTree) ListTags() ([]TagMetadata, error) { if _, err := libExec.Exec(w.buildGitCommand("fetch", "origin", "--tags")); err != nil { - return nil, fmt.Errorf("error fetching tags from repo %q: %w", w.url, err) + return nil, fmt.Errorf( + "error fetching tags from repo %q: %w", + w.originalURL, err, + ) } // These formats are quite complex, so we break them down into smaller @@ -533,7 +551,10 @@ "refs/tags", )) if err != nil { - return nil, fmt.Errorf("error listing tags for repo %q: %w", w.url, err) + return nil, fmt.Errorf( + "error listing tags for repo %q: %w", + w.originalURL, err, + ) } var tags []TagMetadata diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/management/projects/projects.go new/kargo-cli-1.8.4/pkg/controller/management/projects/projects.go --- old/kargo-cli-1.8.3/pkg/controller/management/projects/projects.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/management/projects/projects.go 2025-11-25 22:45:38.000000000 +0100 @@ -815,7 +815,7 @@ } if creator, ok := project.Annotations[kargoapi.AnnotationKeyCreateActor]; ok { if parts := strings.SplitN(creator, ":", 2); len(parts) == 2 { - saAnnotations[rbacapi.AnnotationKeyOIDCClaims] = fmt.Sprintf("{%q:%q}", parts[0], parts[1]) + saAnnotations[rbacapi.AnnotationKeyOIDCClaims] = fmt.Sprintf("{%q:[%q]}", parts[0], parts[1]) } } for _, saName := range allRoles { @@ -861,9 +861,9 @@ Resources: []string{"events"}, Verbs: []string{"get", "list", "watch"}, }, - { // For managing project-level access and credentials + { // For managing project-level access, credentials, and other config APIGroups: []string{""}, - Resources: []string{"secrets", "serviceaccounts"}, + Resources: []string{"configmaps", "secrets", "serviceaccounts"}, Verbs: []string{"*"}, }, { // For managing project-level access @@ -915,7 +915,7 @@ Rules: []rbacv1.PolicyRule{ { APIGroups: []string{""}, - Resources: []string{"events", "serviceaccounts"}, + Resources: []string{"configmaps", "events", "serviceaccounts"}, Verbs: []string{"get", "list", "watch"}, }, { @@ -944,9 +944,9 @@ }, }, Rules: []rbacv1.PolicyRule{ - { // For viewing events and serviceaccounts + { // For viewing configmaps, events, and serviceaccounts APIGroups: []string{""}, - Resources: []string{"events", "serviceaccounts"}, + Resources: []string{"configmaps", "events", "serviceaccounts"}, Verbs: []string{"get", "list", "watch"}, }, { // For viewing project-level access diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/controller/management/projects/projects_test.go new/kargo-cli-1.8.4/pkg/controller/management/projects/projects_test.go --- old/kargo-cli-1.8.3/pkg/controller/management/projects/projects_test.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/controller/management/projects/projects_test.go 2025-11-25 22:45:38.000000000 +0100 @@ -19,6 +19,7 @@ "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/client/interceptor" + rbacapi "github.com/akuity/kargo/api/rbac/v1alpha1" kargoapi "github.com/akuity/kargo/api/v1alpha1" "github.com/akuity/kargo/pkg/conditions" ) @@ -1937,10 +1938,17 @@ return nil }, createServiceAccountFn: func( - context.Context, - client.Object, - ...client.CreateOption, + _ context.Context, + obj client.Object, + _ ...client.CreateOption, ) error { + sa, ok := obj.(*corev1.ServiceAccount) + require.True(t, ok) + require.Equal( + t, + `{"email":["[email protected]"]}`, + sa.Annotations[rbacapi.AnnotationKeyOIDCClaims], + ) return nil }, createRoleFn: func( @@ -1965,12 +1973,16 @@ } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { + p := &kargoapi.Project{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + kargoapi.AnnotationKeyCreateActor: "email:[email protected]", + }, + }, + } testCase.assertions( t, - testCase.reconciler.ensureDefaultUserRoles( - context.Background(), - &kargoapi.Project{}, - ), + testCase.reconciler.ensureDefaultUserRoles(context.Background(), p), ) }) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/health/checker/builtin/argocd_test.go new/kargo-cli-1.8.4/pkg/health/checker/builtin/argocd_test.go --- old/kargo-cli-1.8.3/pkg/health/checker/builtin/argocd_test.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/health/checker/builtin/argocd_test.go 2025-11-25 22:45:38.000000000 +0100 @@ -305,7 +305,7 @@ OperationState: &argocd.OperationState{ Phase: argocd.OperationSucceeded, FinishedAt: &metav1.Time{ - Time: time.Now().Add(-1*appHealthCooldownDuration + time.Second), + Time: time.Now().Add(-1*appHealthCooldownDuration + appHealthCooldownDuration/2), }, }, Health: argocd.HealthStatus{Status: argocd.HealthStatusHealthy}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/pkg/server/rbac/policy_rules.go new/kargo-cli-1.8.4/pkg/server/rbac/policy_rules.go --- old/kargo-cli-1.8.3/pkg/server/rbac/policy_rules.go 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/pkg/server/rbac/policy_rules.go 2025-11-25 22:45:38.000000000 +0100 @@ -180,13 +180,13 @@ // nolint: goconst func validateResourceTypeName(resource string) error { switch resource { - case "analysisruns", "analysistemplates", "events", "freights", + case "analysisruns", "analysistemplates", "configmaps", "events", "freights", "freights/status", "projectconfigs", "promotions", "rolebindings", "roles", "secrets", "serviceaccounts", "stages", "warehouses": return nil - case "analysisrun", "analysistemplate", "event", "freight", "projectconfig", - "promotion", "role", "rolebinding", "secret", "serviceaccount", "stage", - "warehouse": + case "analysisrun", "analysistemplate", "configmap", "event", "freight", + "projectconfig", "promotion", "role", "rolebinding", "secret", + "serviceaccount", "stage", "warehouse": return apierrors.NewBadRequest( fmt.Sprintf(`unrecognized resource type %q; did you mean "%ss"?`, resource, resource), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/ui/src/features/freight-timeline/open-container-initiative-utils.ts new/kargo-cli-1.8.4/ui/src/features/freight-timeline/open-container-initiative-utils.ts --- old/kargo-cli-1.8.3/ui/src/features/freight-timeline/open-container-initiative-utils.ts 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/ui/src/features/freight-timeline/open-container-initiative-utils.ts 2025-11-25 22:45:38.000000000 +0100 @@ -21,6 +21,10 @@ return url; } + if (!url) { + return ''; + } + return getGitCommitURL(url, revision); }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/ui/src/features/project/pipelines/nodes/stage-freight.tsx new/kargo-cli-1.8.4/ui/src/features/project/pipelines/nodes/stage-freight.tsx --- old/kargo-cli-1.8.3/ui/src/features/project/pipelines/nodes/stage-freight.tsx 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/ui/src/features/project/pipelines/nodes/stage-freight.tsx 2025-11-25 22:45:38.000000000 +0100 @@ -212,7 +212,7 @@ } return ( - <Flex vertical gap={2}> + <Flex vertical gap={2} align='center'> {TagComponent} <Typography.Text className='text-[10px] text-center' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/ui/src/features/project/settings/views/config-maps/config-map-yaml-example.ts new/kargo-cli-1.8.4/ui/src/features/project/settings/views/config-maps/config-map-yaml-example.ts --- old/kargo-cli-1.8.3/ui/src/features/project/settings/views/config-maps/config-map-yaml-example.ts 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/ui/src/features/project/settings/views/config-maps/config-map-yaml-example.ts 2025-11-25 22:45:38.000000000 +0100 @@ -1,11 +1,11 @@ -export const configMapYAMLExample = { +export const configMapYAMLExample = (project?: string) => ({ apiVersion: 'v1', kind: 'ConfigMap', metadata: { name: 'cm-1', - namespace: 'kargo-demo' + namespace: project || 'kargo-demo' }, data: { foo: 'bar' } -}; +}); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/ui/src/features/project/settings/views/config-maps/upsert-config-maps.tsx new/kargo-cli-1.8.4/ui/src/features/project/settings/views/config-maps/upsert-config-maps.tsx --- old/kargo-cli-1.8.3/ui/src/features/project/settings/views/config-maps/upsert-config-maps.tsx 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/ui/src/features/project/settings/views/config-maps/upsert-config-maps.tsx 2025-11-25 22:45:38.000000000 +0100 @@ -34,7 +34,7 @@ const configMapYaml = decodeRawData(getConfigMapQuery.data); - const [yaml, setYaml] = useState(stringify(configMapYAMLExample)); + const [yaml, setYaml] = useState(stringify(configMapYAMLExample(props.project))); useEffect(() => { if (configMapYaml) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kargo-cli-1.8.3/ui/src/features/project/settings/views/roles/rule-editor.tsx new/kargo-cli-1.8.4/ui/src/features/project/settings/views/roles/rule-editor.tsx --- old/kargo-cli-1.8.3/ui/src/features/project/settings/views/roles/rule-editor.tsx 2025-11-03 17:35:27.000000000 +0100 +++ new/kargo-cli-1.8.4/ui/src/features/project/settings/views/roles/rule-editor.tsx 2025-11-25 22:45:38.000000000 +0100 @@ -11,6 +11,7 @@ const availableResources = [ // core + 'configmaps', 'events', 'secrets', 'serviceaccounts', ++++++ kargo-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.HJSXKi/_old 2025-11-26 17:18:37.958279132 +0100 +++ /var/tmp/diff_new_pack.HJSXKi/_new 2025-11-26 17:18:37.958279132 +0100 @@ -1,5 +1,5 @@ name: kargo-cli -version: 1.8.3 -mtime: 1762187727 -commit: f9635a1b6479f96d11bfbe690f72b786764ed418 +version: 1.8.4 +mtime: 1764107138 +commit: dc38d05ff871ace7ae40fc23ef333ca717c96909 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/kargo-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.kargo-cli.new.14147/vendor.tar.gz differ: char 13, line 1
