From 7d5cc21a3d5eb7af9a0723fe33e891c4879603b2 Mon Sep 17 00:00:00 2001 From: Mmadu Manasseh Date: Tue, 9 Jan 2024 18:01:31 +0100 Subject: [PATCH] Fix conflicts --- Earthfile | 6 ---- Tiltfile | 16 +++++----- docs/contributing.md | 2 +- localdev/kubechecks/values.yaml | 45 ++++++++++++++++++--------- pkg/app_watcher/appwatcher.go | 6 ++-- pkg/config/config.go | 12 +++---- pkg/config/server_config.go | 55 --------------------------------- pkg/config/vcs_argo_app_map.go | 49 ----------------------------- pkg/config/vcstoargomap.go | 6 ++-- 9 files changed, 52 insertions(+), 145 deletions(-) delete mode 100644 pkg/config/server_config.go delete mode 100644 pkg/config/vcs_argo_app_map.go diff --git a/Earthfile b/Earthfile index 3fbf5ddc..76bd9926 100644 --- a/Earthfile +++ b/Earthfile @@ -139,14 +139,8 @@ dlv: SAVE ARTIFACT /go/bin/dlv docker-debug: -<<<<<<< HEAD - ARG GOARCH="amd64" - ARG CI_REGISTRY_IMAGE="kubechecks" - FROM +docker --GIT_TAG=debug --GIT_COMMIT=abcdef --CI_REGISTRY_IMAGE=$CI_REGISTRY_IMAGE --GOARCH=$GOARCH -======= ARG IMAGE_NAME="kubechecks:debug" FROM +docker --GIT_TAG=debug --GIT_COMMIT=abcdef ->>>>>>> origin/main COPY (+dlv/dlv --GOARCH=$GOARCH --VARIANT=$TARGETVARIANT) /usr/local/bin/dlv COPY (+build-debug-binary/kubechecks --GOARCH=$GOARCH --VARIANT=$TARGETVARIANT) . diff --git a/Tiltfile b/Tiltfile index 73f119fe..9082a49c 100644 --- a/Tiltfile +++ b/Tiltfile @@ -169,13 +169,15 @@ k8s_yaml(helm( namespace='kubechecks', name='kubechecks', values='./localdev/kubechecks/values.yaml', - set=['deployment.env.KUBECHECKS_WEBHOOK_URL_BASE=' + get_ngrok_url(cfg), 'deployment.env.NGROK_URL=' + get_ngrok_url(cfg), - 'deployment.env.KUBECHECKS_ARGOCD_WEBHOOK_URL='+ get_ngrok_url(cfg) +'/argocd/api/webhook', - 'deployment.env.KUBECHECKS_ENABLE_CONFTEST=true', - 'deployment.env.KUBECHECKS_VCS_TYPE=' + cfg.get('vcs-type', 'gitlab'), - 'secrets.env.KUBECHECKS_VCS_TOKEN=' + (os.getenv('GITLAB_TOKEN') if 'gitlab' in cfg.get('vcs-type', 'gitlab') else os.getenv('GITHUB_TOKEN')), - 'secrets.env.KUBECHECKS_WEBHOOK_SECRET=' + (os.getenv('KUBECHECKS_WEBHOOK_SECRET') if os.getenv('KUBECHECKS_WEBHOOK_SECRET') != None else ""), - 'secrets.env.KUBECHECKS_OPENAI_API_TOKEN=' + (os.getenv('OPENAI_API_TOKEN') if os.getenv('OPENAI_API_TOKEN') != None else ""),], + set=[ + 'deployment.env[0].name=KUBECHECKS_WEBHOOK_URL_BASE', 'deployment.env[0].value=' + get_ngrok_url(cfg), + 'deployment.env[1].name=NGROK_URL', 'deployment.env[1].value=' + get_ngrok_url(cfg), + 'deployment.env[2].name=KUBECHECKS_ARGOCD_WEBHOOK_URL', 'deployment.env[2].value=' + get_ngrok_url(cfg) +'/argocd/api/webhook', + 'deployment.env[3].name=KUBECHECKS_VCS_TYPE', 'deployment.env[3].value=' + cfg.get('vcs-type', 'gitlab'), + 'secrets.env.KUBECHECKS_VCS_TOKEN=' + (os.getenv('GITLAB_TOKEN') if 'gitlab' in cfg.get('vcs-type', 'gitlab') else os.getenv('GITHUB_TOKEN')), + 'secrets.env.KUBECHECKS_WEBHOOK_SECRET=' + (os.getenv('KUBECHECKS_WEBHOOK_SECRET') if os.getenv('KUBECHECKS_WEBHOOK_SECRET') != None else ""), + 'secrets.env.KUBECHECKS_OPENAI_API_TOKEN=' + (os.getenv('OPENAI_API_TOKEN') if os.getenv('OPENAI_API_TOKEN') != None else ""), + ], )) k8s_resource( diff --git a/docs/contributing.md b/docs/contributing.md index 746a5cfb..cd5be179 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -106,7 +106,7 @@ Click the Detailed view button at the top, and click the refresh button next to #### Minikube -If you're using minikube with Tilt we recommend following this [guide](https://github.com/tilt-dev/minikube-local) to setup a local registry that Tilt can push to automatically. Without this Tilt will attempt to push up to Docker Hub by default. +If you're using minikube with Tilt we recommend following this [guide](https://github.com/tilt-dev/ctlptl) to setup a local registry that Tilt can push to automatically. Without this Tilt will attempt to push up to Docker Hub by default. ### Code Changes diff --git a/localdev/kubechecks/values.yaml b/localdev/kubechecks/values.yaml index 2cb6129f..f47241ae 100644 --- a/localdev/kubechecks/values.yaml +++ b/localdev/kubechecks/values.yaml @@ -2,28 +2,43 @@ deployment: annotations: reloader.stakater.com/auto: "true" env: - KUBECHECKS_LOG_LEVEL: debug - KUBECHECKS_ENABLE_WEBHOOK_CONTROLLER: false - KUBECHECKS_ARGOCD_API_INSECURE: true - KUBECHECKS_ARGOCD_API_PATH_PREFIX : '/argocd' - KUBECHECKS_ARGOCD_NAMESPACE: 'kubechecks' - KUBECHECKS_WEBHOOK_URL_PREFIX: 'kubechecks' - KUBECHECKS_NAMESPACE: 'kubechecks' - KUBECHECKS_FALLBACK_K8S_VERSION: "1.25.0" - KUBECHECKS_SHOW_DEBUG_INFO: "true" + - name: KUBECHECKS_LOG_LEVEL + value: debug + - name: KUBECHECKS_ENABLE_WEBHOOK_CONTROLLER + value: "false" + - name: KUBECHECKS_ARGOCD_API_INSECURE + value: "true" + - name: KUBECHECKS_ARGOCD_API_PATH_PREFIX + value : '/argocd' + - name: KUBECHECKS_ARGOCD_NAMESPACE + value: 'kubechecks' + - name: KUBECHECKS_WEBHOOK_URL_PREFIX + value: 'kubechecks' + - name: KUBECHECKS_NAMESPACE + value: 'kubechecks' + - name: KUBECHECKS_FALLBACK_K8S_VERSION + value: "1.25.0" + - name: KUBECHECKS_SHOW_DEBUG_INFO + value: "true" # OTEL - KUBECHECKS_OTEL_COLLECTOR_PORT: "4317" - KUBECHECKS_OTEL_ENABLED: "false" + - name: KUBECHECKS_OTEL_COLLECTOR_PORT + value: "4317" + - name: KUBECHECKS_OTEL_ENABLED + value: "false" # Webhook Management - KUBECHECKS_ENSURE_WEBHOOKS: "true" - KUBECHECKS_MONITOR_ALL_APPLICATIONS: "true" + - name: KUBECHECKS_ENSURE_WEBHOOKS + value: "true" + - name: KUBECHECKS_MONITOR_ALL_APPLICATIONS + value: "true" # # KUBECHECKS_LABEL_FILTER: "test" # On your PR/MR, prefix this with "kubechecks:" # KUBECHECKS_SCHEMAS_LOCATION: https://github.com/zapier/kubecheck-schemas.git - KUBECHECKS_TIDY_OUTDATED_COMMENTS_MODE: "delete" + - name: KUBECHECKS_TIDY_OUTDATED_COMMENTS_MODE + value: "delete" + - name: KUBECHECKS_ENABLE_CONFTEST + value: "true" image: - repository: "" pullPolicy: Always name: "kubechecks" tag: "" diff --git a/pkg/app_watcher/appwatcher.go b/pkg/app_watcher/appwatcher.go index 716e990a..a4fe66da 100644 --- a/pkg/app_watcher/appwatcher.go +++ b/pkg/app_watcher/appwatcher.go @@ -79,7 +79,7 @@ func (ctrl *ApplicationWatcher) onApplicationAdded(obj interface{}) { log.Error().Err(err).Msg("appwatcher: could not get key for added application") } log.Trace().Str("key", key).Msg("appwatcher: onApplicationAdded") - ctrl.cfg.VcsToArgoMap.AddApp(obj.(*appv1alpha1.Application)) + ctrl.cfg.VcsToArgoMap.AddApp(obj.(appv1alpha1.Application)) } func (ctrl *ApplicationWatcher) onApplicationUpdated(old, new interface{}) { @@ -114,10 +114,10 @@ func (ctrl *ApplicationWatcher) newApplicationInformerAndLister() (cache.SharedI informer := cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options metav1.ListOptions) (apiruntime.Object, error) { - return ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.cfg.ArgoCdNamespace).List(context.TODO(), options) + return ctrl.applicationClientset.ArgoprojV1alpha1().Applications("").List(context.TODO(), options) }, WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - return ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.cfg.ArgoCdNamespace).Watch(context.TODO(), options) + return ctrl.applicationClientset.ArgoprojV1alpha1().Applications("").Watch(context.TODO(), options) }, }, &appv1alpha1.Application{}, diff --git a/pkg/config/config.go b/pkg/config/config.go index ace5b34b..cebfe480 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -12,21 +12,21 @@ import ( "github.com/zapier/kubechecks/pkg/vcs" ) -type repoURL struct { +type RepoURL struct { Host, Path string } -func (r repoURL) CloneURL() string { +func (r RepoURL) CloneURL() string { return fmt.Sprintf("git@%s:%s", r.Host, r.Path) } -func buildNormalizedRepoUrl(host, path string) repoURL { +func buildNormalizedRepoUrl(host, path string) RepoURL { path = strings.TrimPrefix(path, "/") path = strings.TrimSuffix(path, ".git") - return repoURL{host, path} + return RepoURL{host, path} } -func normalizeRepoUrl(s string) (repoURL, error) { +func NormalizeRepoUrl(s string) (RepoURL, error) { var parser func(string) (*url.URL, error) if strings.HasPrefix(s, "http") { @@ -37,7 +37,7 @@ func normalizeRepoUrl(s string) (repoURL, error) { r, err := parser(s) if err != nil { - return repoURL{}, err + return RepoURL{}, err } return buildNormalizedRepoUrl(r.Host, r.Path), nil diff --git a/pkg/config/server_config.go b/pkg/config/server_config.go deleted file mode 100644 index bcb6ba4c..00000000 --- a/pkg/config/server_config.go +++ /dev/null @@ -1,55 +0,0 @@ -package config - -import ( - "fmt" - "net/url" - "strings" - - giturls "github.com/whilp/git-urls" -) - -type ServerConfig struct { - ArgoCdNamespace string - UrlPrefix string - WebhookSecret string - VcsToArgoMap VcsToArgoMap -} - -func (cfg *ServerConfig) GetVcsRepos() []string { - var repos []string - for key := range cfg.VcsToArgoMap.vcsAppStubsByRepo { - repos = append(repos, key.CloneURL()) - } - return repos -} - -type RepoURL struct { - Host, Path string -} - -func (r RepoURL) CloneURL() string { - return fmt.Sprintf("git@%s:%s", r.Host, r.Path) -} - -func buildNormalizedRepoUrl(host, path string) RepoURL { - path = strings.TrimPrefix(path, "/") - path = strings.TrimSuffix(path, ".git") - return RepoURL{host, path} -} - -func NormalizeRepoUrl(s string) (RepoURL, error) { - var parser func(string) (*url.URL, error) - - if strings.HasPrefix(s, "http") { - parser = url.Parse - } else { - parser = giturls.Parse - } - - r, err := parser(s) - if err != nil { - return RepoURL{}, err - } - - return buildNormalizedRepoUrl(r.Host, r.Path), nil -} diff --git a/pkg/config/vcs_argo_app_map.go b/pkg/config/vcs_argo_app_map.go deleted file mode 100644 index 013cdf9b..00000000 --- a/pkg/config/vcs_argo_app_map.go +++ /dev/null @@ -1,49 +0,0 @@ -package config - -import ( - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" - "github.com/rs/zerolog/log" - "github.com/zapier/kubechecks/pkg/app_directory" -) - -type VcsToArgoMap struct { - vcsAppStubsByRepo map[RepoURL]*app_directory.AppDirectory -} - -func NewVcsToArgoMap() VcsToArgoMap { - return VcsToArgoMap{ - vcsAppStubsByRepo: make(map[RepoURL]*app_directory.AppDirectory), - } -} - -func (v2a *VcsToArgoMap) GetAppsInRepo(repoCloneUrl string) *app_directory.AppDirectory { - repoUrl, err := NormalizeRepoUrl(repoCloneUrl) - if err != nil { - log.Warn().Err(err).Msgf("failed to parse %s", repoCloneUrl) - } - - return v2a.vcsAppStubsByRepo[repoUrl] -} - -func (v2a *VcsToArgoMap) AddApp(app *v1alpha1.Application) { - if app.Spec.Source == nil { - log.Warn().Msgf("%s/%s: no source, skipping", app.Namespace, app.Name) - return - } - - rawRepoUrl := app.Spec.Source.RepoURL - cleanRepoUrl, err := NormalizeRepoUrl(rawRepoUrl) - if err != nil { - log.Warn().Err(err).Msgf("%s/%s: failed to parse %s", app.Namespace, app.Name, rawRepoUrl) - return - } - - log.Debug().Msgf("%s/%s: %s => %s", app.Namespace, app.Name, rawRepoUrl, cleanRepoUrl) - - appDirectory := v2a.vcsAppStubsByRepo[cleanRepoUrl] - if appDirectory == nil { - appDirectory = app_directory.NewAppDirectory() - } - appDirectory.AddApp(app) - v2a.vcsAppStubsByRepo[cleanRepoUrl] = appDirectory -} diff --git a/pkg/config/vcstoargomap.go b/pkg/config/vcstoargomap.go index 47e82f22..3df9a8f5 100644 --- a/pkg/config/vcstoargomap.go +++ b/pkg/config/vcstoargomap.go @@ -12,12 +12,12 @@ import ( ) type VcsToArgoMap struct { - appDirByRepo map[repoURL]*AppDirectory + appDirByRepo map[RepoURL]*AppDirectory } func NewVcsToArgoMap() VcsToArgoMap { return VcsToArgoMap{ - appDirByRepo: make(map[repoURL]*AppDirectory), + appDirByRepo: make(map[RepoURL]*AppDirectory), } } @@ -37,7 +37,7 @@ func BuildAppsMap(ctx context.Context) (VcsToArgoMap, error) { } func (v2a *VcsToArgoMap) GetAppsInRepo(repoCloneUrl string) *AppDirectory { - repoUrl, err := normalizeRepoUrl(repoCloneUrl) + repoUrl, err := NormalizeRepoUrl(repoCloneUrl) if err != nil { log.Warn().Err(err).Msgf("failed to parse %s", repoCloneUrl) }