Skip to content

Commit 9f36f29

Browse files
authored
Merge pull request #1789 from fluxcd/upgrade-deps
Upgrade fluxcd/pkg cache, auth, git and gogit
2 parents a3f5db3 + 2dde6bf commit 9f36f29

File tree

4 files changed

+81
-39
lines changed

4 files changed

+81
-39
lines changed

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ require (
2424
github.com/fluxcd/cli-utils v0.36.0-flux.13
2525
github.com/fluxcd/pkg/apis/event v0.17.0
2626
github.com/fluxcd/pkg/apis/meta v1.11.0
27-
github.com/fluxcd/pkg/auth v0.10.0
28-
github.com/fluxcd/pkg/cache v0.8.0
29-
github.com/fluxcd/pkg/git v0.27.0
30-
github.com/fluxcd/pkg/git/gogit v0.28.0
27+
github.com/fluxcd/pkg/auth v0.11.0
28+
github.com/fluxcd/pkg/cache v0.9.0
29+
github.com/fluxcd/pkg/git v0.28.0
30+
github.com/fluxcd/pkg/git/gogit v0.30.0
3131
github.com/fluxcd/pkg/gittestserver v0.17.0
3232
github.com/fluxcd/pkg/helmtestserver v0.24.0
3333
github.com/fluxcd/pkg/lockedfile v0.6.0
@@ -164,7 +164,7 @@ require (
164164
github.com/containerd/log v0.1.0 // indirect
165165
github.com/containerd/platforms v0.2.1 // indirect
166166
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
167-
github.com/coreos/go-oidc/v3 v3.12.0 // indirect
167+
github.com/coreos/go-oidc/v3 v3.14.1 // indirect
168168
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
169169
github.com/cyberphone/json-canonicalization v0.0.0-20231011164504-785e29786b46 // indirect
170170
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpS
286286
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
287287
github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8=
288288
github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
289-
github.com/coreos/go-oidc/v3 v3.12.0 h1:sJk+8G2qq94rDI6ehZ71Bol3oUHy63qNYmkiSjrc/Jo=
290-
github.com/coreos/go-oidc/v3 v3.12.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0=
289+
github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk=
290+
github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU=
291291
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
292292
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
293293
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -374,14 +374,14 @@ github.com/fluxcd/pkg/apis/event v0.17.0 h1:foEINE++pCJlWVhWjYDXfkVmGKu8mQ4BDBlb
374374
github.com/fluxcd/pkg/apis/event v0.17.0/go.mod h1:0fLhLFiHlRTDKPDXdRnv+tS7mCMIQ0fJxnEfmvGM/5A=
375375
github.com/fluxcd/pkg/apis/meta v1.11.0 h1:h8q95k6ZEK1HCfsLkt8Np3i6ktb6ZzcWJ6hg++oc9w0=
376376
github.com/fluxcd/pkg/apis/meta v1.11.0/go.mod h1:+son1Va60x2eiDcTwd7lcctbI6C+K3gM7R+ULmEq1SI=
377-
github.com/fluxcd/pkg/auth v0.10.0 h1:acvokI08SVwZwYMMtlUqglZCPPSJKMvvFZ/3zRwWsLI=
378-
github.com/fluxcd/pkg/auth v0.10.0/go.mod h1:Fpzdo9QOpmWRs60s/frxy1sFb+XGN2WNDIty5aJjnbY=
379-
github.com/fluxcd/pkg/cache v0.8.0 h1:juNNGmJ2qKK16oLgX3mFA20kyo+LcfPwIBjt9KGG+S4=
380-
github.com/fluxcd/pkg/cache v0.8.0/go.mod h1:jMwabjWfsC5lW8hE7NM3wtGNwSJ38Javx6EKbEi7INU=
381-
github.com/fluxcd/pkg/git v0.27.0 h1:/IHNNKQY2eopq3xWjUpvx6F3WmH2RqWQ3gmRyeBfcUg=
382-
github.com/fluxcd/pkg/git v0.27.0/go.mod h1:s0EFqP4jTKkUq0z/jSlsIhnIAl6HvPTnucrkSqRxE5Q=
383-
github.com/fluxcd/pkg/git/gogit v0.28.0 h1:Eyi+0r7QFHv1rlGeZw2kclAiMe59WNAADl/YyUjPygQ=
384-
github.com/fluxcd/pkg/git/gogit v0.28.0/go.mod h1:hMl2Q5UpnOJ5NmfI1qT9wrlV5Shb8LojXRKdokFu+DI=
377+
github.com/fluxcd/pkg/auth v0.11.0 h1:1BC6fQ71lCLFKz7juGlvWq9ysR2HVl5JPOWoxy4RMWE=
378+
github.com/fluxcd/pkg/auth v0.11.0/go.mod h1:BJVrbanLH0AoUBzOH7u016D21Zl3dvEd0AnAWVOo5Vs=
379+
github.com/fluxcd/pkg/cache v0.9.0 h1:EGKfOLMG3fOwWnH/4Axl5xd425mxoQbZzlZoLfd8PDk=
380+
github.com/fluxcd/pkg/cache v0.9.0/go.mod h1:jMwabjWfsC5lW8hE7NM3wtGNwSJ38Javx6EKbEi7INU=
381+
github.com/fluxcd/pkg/git v0.28.0 h1:by7XTOvj4ZUPH1alYMJtDCVryhHue+UfjhrnPuJt5vA=
382+
github.com/fluxcd/pkg/git v0.28.0/go.mod h1:VPv6O3mYnYvn79LOdWAFCl4fE8o651cxW/p/yxBoq2g=
383+
github.com/fluxcd/pkg/git/gogit v0.30.0 h1:tdKRT4EDV8Cc2tBX+bg4H4gdcND7M4OEl6DQy1jSJmo=
384+
github.com/fluxcd/pkg/git/gogit v0.30.0/go.mod h1:UCm/fOBuvX43BNz7Rc61Sukp2gBG/qxlOASaBkwMFvc=
385385
github.com/fluxcd/pkg/gittestserver v0.17.0 h1:JlBvWZQTDOI+np5Z+084m3DkeAH1hMusEybyRUDF63k=
386386
github.com/fluxcd/pkg/gittestserver v0.17.0/go.mod h1:E/40EmLoXcMqd6gLuLDC9F6KJxqHVGbBBeMNKk5XdxU=
387387
github.com/fluxcd/pkg/helmtestserver v0.24.0 h1:9sSfRG17GnDIup4sI8V+fdvKROtunU4JyIo34uvXq3Q=

internal/controller/gitrepository_controller.go

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
"time"
2828

2929
securejoin "github.com/cyphar/filepath-securejoin"
30-
"github.com/fluxcd/pkg/auth/azure"
30+
"github.com/fluxcd/pkg/auth"
3131
"github.com/fluxcd/pkg/git/github"
3232
"github.com/fluxcd/pkg/runtime/logger"
3333
"github.com/go-git/go-git/v5/plumbing/transport"
@@ -485,9 +485,10 @@ func (r *GitRepositoryReconciler) reconcileSource(ctx context.Context, sp *patch
485485
}
486486

487487
var proxyOpts *transport.ProxyOptions
488+
var proxyURL *url.URL
488489
if obj.Spec.ProxySecretRef != nil {
489490
var err error
490-
proxyOpts, err = r.getProxyOpts(ctx, obj.Spec.ProxySecretRef.Name, obj.GetNamespace())
491+
proxyOpts, proxyURL, err = r.getProxyOpts(ctx, obj.Spec.ProxySecretRef.Name, obj.GetNamespace())
491492
if err != nil {
492493
e := serror.NewGeneric(
493494
fmt.Errorf("failed to configure proxy options: %w", err),
@@ -509,7 +510,7 @@ func (r *GitRepositoryReconciler) reconcileSource(ctx context.Context, sp *patch
509510
return sreconcile.ResultEmpty, e
510511
}
511512

512-
authOpts, err := r.getAuthOpts(ctx, obj, *u)
513+
authOpts, err := r.getAuthOpts(ctx, obj, *u, proxyURL)
513514
if err != nil {
514515
// Return error as the world as observed may change
515516
return sreconcile.ResultEmpty, err
@@ -622,28 +623,45 @@ func (r *GitRepositoryReconciler) reconcileSource(ctx context.Context, sp *patch
622623
// getProxyOpts fetches the secret containing the proxy settings, constructs a
623624
// transport.ProxyOptions object using those settings and then returns it.
624625
func (r *GitRepositoryReconciler) getProxyOpts(ctx context.Context, proxySecretName,
625-
proxySecretNamespace string) (*transport.ProxyOptions, error) {
626+
proxySecretNamespace string) (*transport.ProxyOptions, *url.URL, error) {
626627
proxyData, err := r.getSecretData(ctx, proxySecretName, proxySecretNamespace)
627628
if err != nil {
628-
return nil, fmt.Errorf("failed to get proxy secret '%s/%s': %w", proxySecretNamespace, proxySecretName, err)
629+
return nil, nil, fmt.Errorf("failed to get proxy secret '%s/%s': %w", proxySecretNamespace, proxySecretName, err)
629630
}
630-
address, ok := proxyData["address"]
631+
b, ok := proxyData["address"]
631632
if !ok {
632-
return nil, fmt.Errorf("invalid proxy secret '%s/%s': key 'address' is missing", proxySecretNamespace, proxySecretName)
633+
return nil, nil, fmt.Errorf("invalid proxy secret '%s/%s': key 'address' is missing", proxySecretNamespace, proxySecretName)
633634
}
634635

636+
address := string(b)
637+
username := string(proxyData["username"])
638+
password := string(proxyData["password"])
639+
635640
proxyOpts := &transport.ProxyOptions{
636-
URL: string(address),
637-
Username: string(proxyData["username"]),
638-
Password: string(proxyData["password"]),
641+
URL: address,
642+
Username: username,
643+
Password: password,
644+
}
645+
646+
proxyURL, err := url.Parse(string(address))
647+
if err != nil {
648+
return nil, nil, fmt.Errorf("invalid address in proxy secret '%s/%s': %w", proxySecretNamespace, proxySecretName, err)
639649
}
640-
return proxyOpts, nil
650+
switch {
651+
case username != "" && password == "":
652+
proxyURL.User = url.User(username)
653+
case username != "" && password != "":
654+
proxyURL.User = url.UserPassword(username, password)
655+
}
656+
657+
return proxyOpts, proxyURL, nil
641658
}
642659

643660
// getAuthOpts fetches the secret containing the auth options (if specified),
644661
// constructs a git.AuthOptions object using those options along with the provided
645662
// URL and returns it.
646-
func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1.GitRepository, u url.URL) (*git.AuthOptions, error) {
663+
func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1.GitRepository,
664+
u url.URL, proxyURL *url.URL) (*git.AuthOptions, error) {
647665
var authData map[string][]byte
648666
if obj.Spec.SecretRef != nil {
649667
var err error
@@ -659,7 +677,7 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
659677
}
660678

661679
// Configure authentication strategy to access the source
662-
authOpts, err := git.NewAuthOptions(u, authData)
680+
opts, err := git.NewAuthOptions(u, authData)
663681
if err != nil {
664682
e := serror.NewGeneric(
665683
fmt.Errorf("failed to configure authentication options: %w", err),
@@ -669,14 +687,28 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
669687
return nil, e
670688
}
671689

690+
var authOpts []auth.Option
691+
692+
if r.tokenCache != nil {
693+
involvedObject := cache.InvolvedObject{
694+
Kind: sourcev1.GitRepositoryKind,
695+
Name: obj.GetName(),
696+
Namespace: obj.GetNamespace(),
697+
Operation: cache.OperationReconcile,
698+
}
699+
authOpts = append(authOpts, auth.WithCache(*r.tokenCache, involvedObject))
700+
}
701+
702+
if proxyURL != nil {
703+
authOpts = append(authOpts, auth.WithProxyURL(*proxyURL))
704+
}
705+
672706
// Configure provider authentication if specified in spec
673707
switch obj.GetProvider() {
674708
case sourcev1.GitProviderAzure:
675-
authOpts.ProviderOpts = &git.ProviderOptions{
676-
Name: sourcev1.GitProviderAzure,
677-
AzureOpts: []azure.OptFunc{
678-
azure.WithAzureDevOpsScope(),
679-
},
709+
opts.ProviderOpts = &git.ProviderOptions{
710+
Name: sourcev1.GitProviderAzure,
711+
AuthOpts: authOpts,
680712
}
681713
case sourcev1.GitProviderGitHub:
682714
// if provider is github, but secret ref is not specified
@@ -689,11 +721,13 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
689721
return nil, e
690722
}
691723

692-
authOpts.ProviderOpts = &git.ProviderOptions{
724+
opts.ProviderOpts = &git.ProviderOptions{
693725
Name: sourcev1.GitProviderGitHub,
694726
GitHubOpts: []github.OptFunc{
695727
github.WithAppData(authData),
696-
github.WithCache(r.tokenCache, sourcev1.GitRepositoryKind, obj.GetName(), obj.GetNamespace()),
728+
github.WithProxyURL(proxyURL),
729+
github.WithCache(r.tokenCache, sourcev1.GitRepositoryKind,
730+
obj.GetName(), obj.GetNamespace(), cache.OperationReconcile),
697731
},
698732
}
699733
default:
@@ -707,7 +741,7 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
707741
return nil, e
708742
}
709743
}
710-
return authOpts, nil
744+
return opts, nil
711745
}
712746

713747
func (r *GitRepositoryReconciler) getSecretData(ctx context.Context, name, namespace string) (map[string][]byte, error) {
@@ -1116,7 +1150,8 @@ func (r *GitRepositoryReconciler) reconcileDelete(ctx context.Context, obj *sour
11161150
controllerutil.RemoveFinalizer(obj, sourcev1.SourceFinalizer)
11171151

11181152
// Cleanup caches.
1119-
r.tokenCache.DeleteEventsForObject(sourcev1.GitRepositoryKind, obj.GetName(), obj.GetNamespace())
1153+
r.tokenCache.DeleteEventsForObject(sourcev1.GitRepositoryKind,
1154+
obj.GetName(), obj.GetNamespace(), cache.OperationReconcile)
11201155

11211156
// Stop reconciliation as the object is being deleted
11221157
return sreconcile.ResultEmpty, nil

internal/controller/gitrepository_controller_test.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,7 @@ func TestGitRepositoryReconciler_getAuthOpts_provider(t *testing.T) {
899899
if tt.beforeFunc != nil {
900900
tt.beforeFunc(obj)
901901
}
902-
opts, err := r.getAuthOpts(context.TODO(), obj, *url)
902+
opts, err := r.getAuthOpts(context.TODO(), obj, *url, nil)
903903

904904
if tt.wantErr != nil {
905905
g.Expect(err).To(HaveOccurred())
@@ -2267,6 +2267,7 @@ func TestGitRepositoryReconciler_getProxyOpts(t *testing.T) {
22672267
secret string
22682268
err string
22692269
proxyOpts *transport.ProxyOptions
2270+
proxyURL *url.URL
22702271
}{
22712272
{
22722273
name: "non-existent secret",
@@ -2286,16 +2287,22 @@ func TestGitRepositoryReconciler_getProxyOpts(t *testing.T) {
22862287
Username: "user",
22872288
Password: "pass",
22882289
},
2290+
proxyURL: &url.URL{
2291+
Scheme: "https",
2292+
Host: "example.com",
2293+
User: url.UserPassword("user", "pass"),
2294+
},
22892295
},
22902296
}
22912297

22922298
for _, tt := range tests {
22932299
t.Run(tt.name, func(t *testing.T) {
22942300
g := NewWithT(t)
2295-
opts, err := r.getProxyOpts(context.TODO(), tt.secret, "default")
2301+
opts, proxyURL, err := r.getProxyOpts(context.TODO(), tt.secret, "default")
22962302
if opts != nil {
22972303
g.Expect(err).ToNot(HaveOccurred())
22982304
g.Expect(opts).To(Equal(tt.proxyOpts))
2305+
g.Expect(proxyURL).To(Equal(tt.proxyURL))
22992306
} else {
23002307
g.Expect(err).To(HaveOccurred())
23012308
g.Expect(err.Error()).To(ContainSubstring(tt.err))

0 commit comments

Comments
 (0)