├── VERSION ├── ui ├── .nvmrc ├── tsconfig.json ├── .jshintrc ├── __mocks__ │ └── fileMock.js ├── .dockerignore ├── .gitignore ├── .babelrc ├── babel.config.js ├── src │ ├── assets │ │ └── images │ │ │ ├── argo.png │ │ │ ├── stars.gif │ │ │ └── resources │ │ │ ├── pod.svg │ │ │ ├── ns.svg │ │ │ ├── deploy.svg │ │ │ ├── job.svg │ │ │ ├── limits.svg │ │ │ ├── hpa.svg │ │ │ ├── ing.svg │ │ │ ├── crb.svg │ │ │ ├── crd.svg │ │ │ ├── user.svg │ │ │ ├── pvc.svg │ │ │ ├── c-role.svg │ │ │ ├── sa.svg │ │ │ ├── svc.svg │ │ │ ├── rb.svg │ │ │ ├── group.svg │ │ │ ├── cm.svg │ │ │ ├── cronjob.svg │ │ │ └── netpol.svg │ └── app │ │ ├── help │ │ └── index.tsx │ │ ├── login │ │ └── index.tsx │ │ ├── settings │ │ ├── index.ts │ │ └── components │ │ │ ├── project-role-jwt-tokens │ │ │ └── project-role-jwt-tokens.scss │ │ │ ├── account-details │ │ │ └── account-details.scss │ │ │ ├── project-details │ │ │ └── project-details.scss │ │ │ ├── project-sync-windows-edit │ │ │ └── project-sync-windows-edit.scss │ │ │ └── project-events │ │ │ └── project-events.tsx │ │ ├── user-info │ │ ├── index.ts │ │ └── components │ │ │ ├── user-info-overview │ │ │ └── user-info-overview.scss │ │ │ └── user-info-container.tsx │ │ ├── applications │ │ ├── index.ts │ │ └── components │ │ │ ├── applications-list │ │ │ └── applications-tiles.scss │ │ │ ├── resource-label.ts │ │ │ ├── resource-label.test.ts │ │ │ ├── application-resources-diff │ │ │ └── application-resources-diff.scss │ │ │ ├── application-operation-state │ │ │ └── application-operation-state.scss │ │ │ ├── applications-container.tsx │ │ │ ├── application-conditions │ │ │ └── application-conditions.scss │ │ │ └── application-create-panel │ │ │ └── application-create-panel.scss │ │ ├── typings.d.ts │ │ ├── shared │ │ ├── components │ │ │ ├── yaml-editor │ │ │ │ └── yaml-editor.scss │ │ │ ├── repo.tsx │ │ │ ├── timestamp.tsx │ │ │ ├── spinner.tsx │ │ │ ├── empty-state │ │ │ │ ├── empty-state.tsx │ │ │ │ └── empty-state.scss │ │ │ ├── checkbox │ │ │ │ └── checkbox-field.tsx │ │ │ ├── revision-help-icon.tsx │ │ │ └── events-list │ │ │ │ └── events-list.scss │ │ ├── utils.ts │ │ ├── services │ │ │ ├── auth-service.ts │ │ │ ├── version-service.ts │ │ │ └── user-service.ts │ │ └── context.ts │ │ ├── index.tsx │ │ ├── index.html │ │ └── tsconfig.json ├── .prettierrc ├── scripts │ └── build_docker.sh ├── jest.config.js └── tslint.json ├── hack ├── custom-boilerplate.go.txt ├── .dockerignore ├── installers │ ├── install-lint-tools.sh │ ├── install-codegen-tools.sh │ ├── install-dep-linux.sh │ ├── install-jq-linux.sh │ ├── install-swagger-linux.sh │ ├── install-helm-linux.sh │ ├── install-helm2-linux.sh │ ├── install-kubectl-linux.sh │ ├── install-protoc-linux.sh │ ├── install-codegen-go-tools.sh │ └── install-kubectx-linux.sh ├── versions.sh ├── gpg-wrapper.sh ├── git-ask-pass.sh ├── tool-versions.sh ├── Dockerfile.dev-tools └── install.sh ├── util ├── app │ ├── path │ │ └── testdata │ │ │ └── file.txt │ └── discovery │ │ └── testdata │ │ ├── baz │ │ └── Chart.yaml │ │ ├── foo │ │ └── Kustomization │ │ └── bar │ │ └── bar-components │ │ └── params.libsonnet ├── lua │ └── testdata │ │ └── example.lua ├── helm │ ├── testdata │ │ ├── external │ │ │ └── external-secret.txt │ │ ├── redis │ │ │ ├── .helmignore │ │ │ ├── OWNERS │ │ │ ├── templates │ │ │ │ ├── redis-serviceaccount.yaml │ │ │ │ ├── redis-role.yaml │ │ │ │ └── redis-rolebinding.yaml │ │ │ └── Chart.yaml │ │ ├── api-versions │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── sample.yaml │ │ ├── invalid-version │ │ │ └── Chart.yaml │ │ ├── helm2-dependency │ │ │ ├── .helmignore │ │ │ ├── OWNERS │ │ │ ├── requirements.yaml │ │ │ ├── requirements.lock │ │ │ ├── templates │ │ │ │ ├── externaldb-secrets.yaml │ │ │ │ ├── tls-secrets.yaml │ │ │ │ └── secrets.yaml │ │ │ └── Chart.yaml │ │ ├── minio │ │ │ ├── .helmignore │ │ │ ├── templates │ │ │ │ └── secrets.yaml │ │ │ └── Chart.yaml │ │ └── dependency │ │ │ └── Chart.yaml │ ├── version.go │ ├── version_test.go │ └── helmver_test.go ├── kustomize │ └── testdata │ │ ├── Kustomization │ │ └── Kustomization │ │ ├── kustomization_yml │ │ └── kustomization.yml │ │ └── kustomization_yaml │ │ ├── kustomization.yaml │ │ └── deployment.yaml ├── gpg │ └── testdata │ │ ├── bad_signature_nodata.txt │ │ ├── bad_signature_preeof2.txt │ │ ├── bad_signature_preeof1.txt │ │ ├── unknown_signature.txt │ │ ├── bad_signature_bad.txt │ │ ├── good_signature.txt │ │ ├── bad_signature_badkeyid.txt │ │ ├── bad_signature_malformed2.txt │ │ ├── bad_signature_malformed3.txt │ │ ├── bad_signature_malformed1.txt │ │ └── bad_signature_manipulated.txt ├── kube │ └── testdata │ │ ├── svc.yaml │ │ └── job.yaml ├── hash │ └── hash.go ├── text │ ├── text.go │ └── label │ │ ├── label_test.go │ │ └── label.go ├── rand │ └── rand_test.go ├── clusterauth │ └── testdata │ │ └── argocd-manager-sa.yaml ├── util_test.go ├── glob │ └── glob.go ├── argo │ └── normalizers │ │ └── util.go ├── http │ └── http_test.go ├── cache │ └── client.go ├── healthz │ └── healthz.go └── resource │ └── revision.go ├── test ├── e2e │ ├── testdata │ │ ├── helm-crd │ │ │ ├── values.yaml │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ ├── instance.yaml │ │ │ │ └── crd.yaml │ │ ├── helm │ │ │ ├── values.yaml │ │ │ ├── baz.yaml │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── config-map.yaml │ │ ├── helm2 │ │ │ ├── values.yaml │ │ │ ├── baz.yaml │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── config-map.yaml │ │ ├── .hidden-helm │ │ │ ├── values.yaml │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── config-map.yaml │ │ ├── helm3-crd │ │ │ ├── values.yaml │ │ │ ├── templates │ │ │ │ └── config-map.yaml │ │ │ ├── Chart.yaml │ │ │ └── crds │ │ │ │ └── crd.yaml │ │ ├── helm-values │ │ │ ├── values.yaml │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── config-map.yaml │ │ ├── ksonnet │ │ │ ├── environments │ │ │ │ ├── dev │ │ │ │ │ ├── globals.libsonnet │ │ │ │ │ ├── main.jsonnet │ │ │ │ │ └── params.libsonnet │ │ │ │ ├── prod │ │ │ │ │ ├── globals.libsonnet │ │ │ │ │ ├── main.jsonnet │ │ │ │ │ └── params.libsonnet │ │ │ │ ├── default │ │ │ │ │ ├── globals.libsonnet │ │ │ │ │ ├── main.jsonnet │ │ │ │ │ └── params.libsonnet │ │ │ │ └── base.libsonnet │ │ │ ├── .gitignore │ │ │ ├── app.yaml │ │ │ └── components │ │ │ │ └── params.libsonnet │ │ ├── helm2-with-dependencies │ │ │ ├── Chart.yaml │ │ │ └── requirements.yaml │ │ ├── always-outofsync │ │ │ ├── kustomization.yaml │ │ │ └── always-outofsync.yaml │ │ ├── invalid-kustomize │ │ │ └── kustomization.yaml │ │ ├── crd-creation │ │ │ ├── kustomization.yaml │ │ │ ├── README.md │ │ │ ├── crd-instances.yaml │ │ │ └── crd.yaml │ │ ├── failure-during-sync │ │ │ ├── kustomization.yaml │ │ │ └── failure-during-sync.yaml │ │ ├── helm-kube-version │ │ │ ├── Chart.yaml │ │ │ └── templates │ │ │ │ └── config-map.yaml │ │ ├── bad-servicecatalog │ │ │ ├── kustomization.yaml │ │ │ ├── servicecatalog-svc.yaml │ │ │ └── servicecatalog-apiservice.yaml │ │ ├── networking │ │ │ ├── README.md │ │ │ ├── guestbook-ui-svc.yaml │ │ │ ├── guestbook-ui-internal-svc.yaml │ │ │ └── guestbook-ui-deployment.yaml │ │ ├── config-map │ │ │ ├── config-map.yaml │ │ │ └── kustomization.yaml │ │ ├── helm-repo │ │ │ ├── helm-1.0.0.tgz │ │ │ ├── helm2-1.0.0.tgz │ │ │ └── index.yaml │ │ ├── jsonnet-nested-dir-with-imports │ │ │ ├── include │ │ │ │ └── common.libsonnet │ │ │ └── apps │ │ │ │ ├── test-root.jsonnet │ │ │ │ └── nested │ │ │ │ └── directory │ │ │ │ └── test.jsonnet │ │ ├── kustomize │ │ │ ├── kustomization.yaml │ │ │ └── pod.yaml │ │ ├── hook-custom-health │ │ │ ├── kustomization.yaml │ │ │ └── config-map.yaml │ │ ├── guestbook │ │ │ ├── kustomization.yaml │ │ │ ├── guestbook-ui-svc.yaml │ │ │ └── guestbook-ui-deployment.yaml │ │ ├── ssh-kustomize-base │ │ │ └── kustomization.yaml │ │ ├── crashing-guestbook │ │ │ ├── kustomization.yaml │ │ │ └── guestbook-deployment.yaml │ │ ├── guestbook_local │ │ │ ├── kustomization.yaml │ │ │ ├── guestbook-ui-svc.yaml │ │ │ └── guestbook-ui-deployment.yaml │ │ ├── helm-with-dependencies │ │ │ └── Chart.yaml │ │ ├── https-kustomize-base │ │ │ └── kustomization.yaml │ │ ├── service │ │ │ └── service.yaml │ │ ├── deprecated-extensions │ │ │ ├── network-policy.yaml │ │ │ ├── ingress.yaml │ │ │ └── pod-security-policy.yaml │ │ ├── guestbook-with-namespace │ │ │ ├── guestbook-ui-svc.yaml │ │ │ ├── guestbook-ui-svc-ns.yaml │ │ │ ├── kustomization.yaml │ │ │ ├── guestbook-ui-deployment.yaml │ │ │ └── guestbook-ui-deployment-ns.yaml │ │ ├── jsonnet-ext-var │ │ │ └── config-map.jsonnet │ │ ├── hook │ │ │ ├── pod.yaml │ │ │ └── hook.yaml │ │ ├── sync-waves │ │ │ ├── pod-1.yaml │ │ │ └── pod-2.yaml │ │ ├── cluster-role │ │ │ ├── pod.yaml │ │ │ └── cluster-role.yaml │ │ ├── global-with-no-namesapce │ │ │ └── console.yaml │ │ ├── two-nice-pods │ │ │ ├── pod-1.yaml │ │ │ └── pod-2.yaml │ │ ├── jsonnet-tla-cm │ │ │ └── config-map.jsonnet │ │ ├── git-submodule │ │ │ └── submodule-pod.yaml │ │ ├── kustomize-cm-gen │ │ │ └── kustomization.yaml │ │ ├── sync-options-validate-false │ │ │ └── invalid-cm.yaml │ │ ├── secrets │ │ │ └── secrets.yaml │ │ ├── declarative-apps │ │ │ ├── app.yaml │ │ │ └── invalid-helm.yaml │ │ ├── hook-and-deployment │ │ │ └── hook.yaml │ │ ├── self-managed-app │ │ │ └── resources.yaml │ │ ├── failed-conversion │ │ │ └── apiservice.yaml │ │ ├── deployment │ │ │ └── deployment.yaml │ │ ├── one-deployment │ │ │ └── deployment.yaml │ │ ├── crd-validation │ │ │ └── deployment.yaml │ │ └── openshift │ │ │ └── manifests.yaml │ ├── user_info_test.go │ ├── fixture │ │ ├── cmd.go │ │ ├── util.go │ │ └── tmpl.go │ └── pruning_required_test.go ├── fixture │ ├── testrepos │ │ ├── .htpasswd │ │ ├── ssh_host_ed25519_key.pub │ │ ├── ssh_host_ecdsa_key.pub │ │ ├── Procfile │ │ ├── start-git.sh │ │ ├── ssh_host_rsa_key.pub │ │ ├── id_rsa.pub │ │ ├── ssh_host_ed25519_key │ │ └── ssh_host_ecdsa_key │ ├── gpg │ │ └── signingkey.asc │ ├── test │ │ ├── flaky.go │ │ └── ci.go │ ├── revision_metadata │ │ ├── author_test.go │ │ └── author.go │ ├── log │ │ └── log.go │ └── certs │ │ └── ssh_known_hosts ├── testdata │ └── static │ │ └── test.html ├── manifests │ └── base │ │ ├── kustomization.yaml │ │ └── patches.yaml └── container │ └── uid_entrypoint.sh ├── manifests ├── ha │ ├── base │ │ ├── redis-ha │ │ │ ├── chart │ │ │ │ ├── .gitignore │ │ │ │ ├── Chart.yaml │ │ │ │ ├── requirements.yaml │ │ │ │ ├── values.yaml │ │ │ │ └── requirements.lock │ │ │ ├── overlays │ │ │ │ ├── remove-namespace.yaml │ │ │ │ ├── service-selector.yaml │ │ │ │ ├── modify-labels.yaml │ │ │ │ ├── haproxy-service-selector.yaml │ │ │ │ └── haproxy-modify-labels.yaml │ │ │ └── README.md │ │ ├── overlays │ │ │ └── argocd-application-controller-statefulset.yaml │ │ └── kustomization.yaml │ ├── namespace-install │ │ └── kustomization.yaml │ └── cluster-install │ │ └── kustomization.yaml ├── namespace-install │ └── kustomization.yaml ├── crds │ └── kustomization.yaml ├── cluster-install │ └── kustomization.yaml ├── base │ ├── config │ │ ├── argocd-cm.yaml │ │ ├── argocd-rbac-cm.yaml │ │ ├── argocd-gpg-keys-cm.yaml │ │ ├── argocd-secret.yaml │ │ ├── argocd-tls-certs-cm.yaml │ │ └── kustomization.yaml │ ├── repo-server │ │ ├── kustomization.yaml │ │ └── argocd-repo-server-service.yaml │ ├── server │ │ ├── argocd-server-sa.yaml │ │ ├── kustomization.yaml │ │ ├── argocd-server-metrics.yaml │ │ ├── argocd-server-rolebinding.yaml │ │ └── argocd-server-service.yaml │ ├── dex │ │ ├── argocd-dex-server-sa.yaml │ │ ├── kustomization.yaml │ │ ├── argocd-dex-server-role.yaml │ │ ├── argocd-dex-server-rolebinding.yaml │ │ └── argocd-dex-server-service.yaml │ ├── kustomization.yaml │ ├── application-controller │ │ ├── argocd-application-controller-sa.yaml │ │ ├── kustomization.yaml │ │ ├── argocd-metrics.yaml │ │ └── argocd-application-controller-rolebinding.yaml │ └── redis │ │ ├── kustomization.yaml │ │ └── argocd-redis-service.yaml └── cluster-rbac │ ├── kustomization.yaml │ ├── argocd-server-clusterrolebinding.yaml │ ├── argocd-application-controller-clusterrole.yaml │ └── argocd-application-controller-clusterrolebinding.yaml ├── reposerver ├── repository │ └── testdata │ │ ├── Kustomization │ │ └── Kustomization │ │ ├── invalid-helm │ │ └── Chart.yaml │ │ ├── invalid-kustomize │ │ └── Kustomization │ │ ├── my-chart │ │ ├── my-chart-values.yaml │ │ ├── Chart.yaml │ │ └── templates │ │ │ └── my-map.yaml │ │ ├── kustomization_yaml │ │ └── kustomization.yaml │ │ ├── kustomization_yml │ │ └── kustomization.yml │ │ ├── my-chart-2 │ │ ├── my-chart-2-values.yaml │ │ ├── Chart.yaml │ │ └── templates │ │ │ └── my-map.yaml │ │ ├── app-parameters │ │ ├── .argocd-source.yaml │ │ ├── kustomization.yaml │ │ └── guestbook.yaml │ │ ├── recurse │ │ ├── baz.yaml │ │ └── foo │ │ │ └── bar.yaml │ │ ├── utf-16 │ │ └── utf-16.yaml │ │ ├── null-list │ │ └── null-list.yaml │ │ ├── empty-list │ │ └── empty-list.yaml │ │ ├── jsonnet │ │ ├── params.libsonnet │ │ └── vendor │ │ │ └── nested │ │ │ └── service.libsonnet │ │ ├── weird-list │ │ └── weird-list.yaml │ │ └── concatenated │ │ └── concatenated.yaml └── apiclient │ └── mocks │ └── Clientset.go ├── .github ├── no-response.yml ├── stale.yml └── ISSUE_TEMPLATE │ └── enhancement_proposal.md ├── docs ├── assets │ ├── argo.png │ ├── logo.png │ ├── favicon.png │ ├── new-app.png │ ├── saml-1.png │ ├── saml-2.png │ ├── saml-3.png │ ├── saml-4.png │ ├── argocd-ui.gif │ ├── create-app.png │ ├── dashboard.jpg │ ├── select_env.png │ ├── sync-apps.png │ ├── connect-repo.png │ ├── destination.png │ ├── filter-apps.png │ ├── groups-claim.png │ ├── groups-scope.png │ ├── register-app.png │ ├── repo-add-ssh.png │ ├── select_repo.png │ ├── api-management.png │ ├── guestbook-app.png │ ├── guestbook-tree.png │ ├── keycloak-login.png │ ├── new-app-of-apps.png │ ├── oauth2-config.png │ ├── repo-add-https.png │ ├── selective-sync.png │ ├── webhook-config.png │ ├── openunison-portal.png │ ├── repo-add-overview.png │ ├── terminate-button.png │ ├── app-ui-information.png │ ├── argocd_architecture.png │ ├── keycloak-add-client.png │ ├── keycloak-add-scope.png │ ├── keycloak-user-group.png │ ├── orphaned-resources.png │ ├── sync-option-no-prune.png │ ├── azure-api-permissions.png │ ├── azure-enterprise-users.png │ ├── cert-management-remove.png │ ├── keycloak-client-scope.png │ ├── keycloak-client-secret.png │ ├── keycloak-groups-mapper.png │ ├── synchronization-button.png │ ├── azure-enterprise-claims.png │ ├── azure-token-configuration.png │ ├── cert-management-add-ssh.png │ ├── cert-management-add-tls.png │ ├── cert-management-overview.png │ ├── keycloak-configure-client.png │ ├── application-of-applications.png │ ├── azure-enterprise-saml-urls.png │ ├── download-codegen-patch-file.png │ ├── status-badge-healthy-synced.png │ ├── keycloak-client-scope-selected.png │ ├── sync-option-no-prune-sync-status.png │ └── compare-option-ignore-needs-pruning.png ├── CONTRIBUTING.md ├── user-guide │ ├── commands │ │ └── argocd_cli.md │ ├── index.md │ └── selective_sync.md ├── developer-guide │ ├── ci-pipeline-failed.png │ ├── index.md │ └── site.md ├── operator-manual │ ├── index.md │ └── upgrading │ │ ├── 1.2-1.3.md │ │ ├── 1.0-1.1.md │ │ └── 1.5-1.6.md └── SUPPORT.md ├── cmd ├── argocd │ ├── commands │ │ └── testdata │ │ │ ├── test.cert.pem │ │ │ └── test.key.pem │ └── main.go └── argocd-server │ ├── commands │ └── common.go │ └── main.go ├── resource_customizations ├── apps │ ├── DaemonSet │ │ └── actions │ │ │ ├── discovery.lua │ │ │ ├── action_test.yaml │ │ │ └── restart │ │ │ └── action.lua │ ├── Deployment │ │ └── actions │ │ │ ├── discovery.lua │ │ │ ├── action_test.yaml │ │ │ └── restart │ │ │ └── action.lua │ └── StatefulSet │ │ └── actions │ │ ├── discovery.lua │ │ ├── action_test.yaml │ │ └── restart │ │ └── action.lua ├── extensions │ ├── DaemonSet │ │ └── actions │ │ │ ├── discovery.lua │ │ │ ├── action_test.yaml │ │ │ └── restart │ │ │ └── action.lua │ └── Deployment │ │ └── actions │ │ ├── discovery.lua │ │ ├── action_test.yaml │ │ └── restart │ │ └── action.lua ├── argoproj.io │ ├── Rollout │ │ ├── actions │ │ │ ├── restart │ │ │ │ └── action.lua │ │ │ ├── resume │ │ │ │ └── action.lua │ │ │ └── discovery.lua │ │ └── testdata │ │ │ └── degraded_invalidSpec.yaml │ └── AnalysisRun │ │ └── testdata │ │ └── pendingAnalysisRun.yaml ├── zookeeper.pravega.io │ └── ZookeeperCluster │ │ ├── health_test.yaml │ │ └── health.lua ├── kafka.strimzi.io │ └── KafkaConnect │ │ ├── health_test.yaml │ │ └── health.lua ├── kiali.io │ └── Kiali │ │ ├── health_test.yaml │ │ └── health.lua ├── jaegertracing.io │ └── Jaeger │ │ ├── health_test.yaml │ │ ├── testdata │ │ ├── progressing.yaml │ │ ├── degraded.yaml │ │ └── healthy.yaml │ │ └── health.lua ├── sparkoperator.k8s.io │ └── SparkApplication │ │ └── health_test.yaml ├── stacks.crossplane.io │ └── ClusterStackInstall │ │ ├── health_test.yaml │ │ └── health.lua ├── operator.knative.dev │ ├── KnativeEventing │ │ └── health_test.yaml │ └── KnativeServing │ │ └── health_test.yaml ├── cert-manager.io │ ├── Issuer │ │ ├── health_test.yaml │ │ ├── testdata │ │ │ └── progressing_noStatus.yaml │ │ └── health.lua │ └── Certificate │ │ └── health.lua ├── certmanager.k8s.io │ ├── Issuer │ │ ├── health_test.yaml │ │ ├── testdata │ │ │ └── progressing_noStatus.yaml │ │ └── health.lua │ └── Certificate │ │ └── health.lua ├── networking.gke.io │ └── ManagedCertificate │ │ └── health_test.yaml ├── kafka.banzaicloud.io │ └── KafkaCluster │ │ └── health_test.yaml └── install.istio.io │ └── IstioOperator │ └── health_test.yaml ├── pkg ├── client │ └── clientset │ │ └── versioned │ │ ├── doc.go │ │ ├── fake │ │ └── doc.go │ │ ├── scheme │ │ └── doc.go │ │ └── typed │ │ └── application │ │ └── v1alpha1 │ │ ├── fake │ │ └── doc.go │ │ ├── doc.go │ │ └── generated_expansion.go ├── apis │ └── application │ │ ├── v1alpha1 │ │ └── doc.go │ │ └── register.go └── apiclient │ └── project │ └── forwarder_overwrite.go ├── OWNERS ├── examples └── known-hosts │ ├── argocd-known-hosts.yaml │ └── kustomization.yaml ├── .gitignore ├── SECURITY_CONTACTS ├── server ├── settings │ └── oidc │ │ └── claims.proto └── project │ └── util.go ├── Dockerfile.dev ├── .dockerignore ├── assets └── model.conf ├── .codecov.yml ├── .golangci.yml └── tools └── cmd-docs └── main.go /VERSION: -------------------------------------------------------------------------------- 1 | 1.8.0 2 | -------------------------------------------------------------------------------- /ui/.nvmrc: -------------------------------------------------------------------------------- 1 | v12.18.4 2 | -------------------------------------------------------------------------------- /hack/custom-boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/app/path/testdata/file.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hack/.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile.dev-tools -------------------------------------------------------------------------------- /test/e2e/testdata/helm-crd/values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm/values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm2/values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | src/app/tsconfig.json -------------------------------------------------------------------------------- /test/e2e/testdata/.hidden-helm/values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm/baz.yaml: -------------------------------------------------------------------------------- 1 | a: b 2 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm2/baz.yaml: -------------------------------------------------------------------------------- 1 | a: b 2 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm3-crd/values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/app/discovery/testdata/baz/Chart.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6 3 | } 4 | -------------------------------------------------------------------------------- /util/app/discovery/testdata/foo/Kustomization: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/chart/.gitignore: -------------------------------------------------------------------------------- 1 | charts -------------------------------------------------------------------------------- /test/e2e/testdata/helm-values/values.yaml: -------------------------------------------------------------------------------- 1 | foo: bar -------------------------------------------------------------------------------- /ui/__mocks__/fileMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /util/lua/testdata/example.lua: -------------------------------------------------------------------------------- 1 | return 'Hello World' -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/chart/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: redis-ha -------------------------------------------------------------------------------- /reposerver/repository/testdata/Kustomization/Kustomization: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/invalid-helm/Chart.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .git 3 | Dockerfile 4 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/invalid-kustomize/Kustomization: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart/my-chart-values.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/app/discovery/testdata/bar/bar-components/params.libsonnet: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/helm/testdata/external/external-secret.txt: -------------------------------------------------------------------------------- 1 | YW9maWUyOTRBUwo= -------------------------------------------------------------------------------- /reposerver/repository/testdata/kustomization_yaml/kustomization.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/kustomization_yml/kustomization.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm2/Chart.yaml: -------------------------------------------------------------------------------- 1 | version: 1.0.0 2 | name: helm2 -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/dev/globals.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/prod/globals.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /.github/no-response.yml: -------------------------------------------------------------------------------- 1 | # See https://github.com/probot/no-response 2 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart-2/my-chart-2-values.yaml: -------------------------------------------------------------------------------- 1 | app: go -------------------------------------------------------------------------------- /test/e2e/testdata/.hidden-helm/Chart.yaml: -------------------------------------------------------------------------------- 1 | version: 1.0.0 2 | name: helm -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/default/globals.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /util/kustomize/testdata/Kustomization/Kustomization: -------------------------------------------------------------------------------- 1 | kind: Kustomization -------------------------------------------------------------------------------- /util/kustomize/testdata/kustomization_yml/kustomization.yml: -------------------------------------------------------------------------------- 1 | kind: Kustomization -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: my-chart 2 | version: 1.1.0 -------------------------------------------------------------------------------- /test/e2e/testdata/helm/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | version: 1.0.0 3 | name: helm -------------------------------------------------------------------------------- /test/e2e/testdata/helm2-with-dependencies/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: helm-with-dependencies -------------------------------------------------------------------------------- /test/fixture/testrepos/.htpasswd: -------------------------------------------------------------------------------- 1 | admin:$apr1$VuJfjgOh$H1b0xyAZCw3n3tmwqOVi01 2 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart-2/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: my-chart 2 | version: 1.1.0 -------------------------------------------------------------------------------- /test/e2e/testdata/helm-crd/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | version: 1.0.0 3 | name: helm-crd -------------------------------------------------------------------------------- /ui/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .vscode 4 | junit.xml 5 | coverage 6 | /yarn-error.log -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_nodata.txt: -------------------------------------------------------------------------------- 1 | Lorem ipsum 2 | Lorem ipsum 3 | Lorem ipsum 4 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/.helmignore: -------------------------------------------------------------------------------- 1 | .git 2 | # OWNERS file for Kubernetes 3 | OWNERS 4 | -------------------------------------------------------------------------------- /docs/assets/argo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/argo.png -------------------------------------------------------------------------------- /docs/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/logo.png -------------------------------------------------------------------------------- /test/e2e/testdata/always-outofsync/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - always-outofsync.yaml 3 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm-values/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | version: 1.0.0 3 | name: helm-values -------------------------------------------------------------------------------- /test/e2e/testdata/invalid-kustomize/kustomization.yaml: -------------------------------------------------------------------------------- 1 | configurations: 2 | - does-not-exist.yaml -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_preeof2.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | -------------------------------------------------------------------------------- /docs/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/favicon.png -------------------------------------------------------------------------------- /docs/assets/new-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/new-app.png -------------------------------------------------------------------------------- /docs/assets/saml-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/saml-1.png -------------------------------------------------------------------------------- /docs/assets/saml-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/saml-2.png -------------------------------------------------------------------------------- /docs/assets/saml-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/saml-3.png -------------------------------------------------------------------------------- /docs/assets/saml-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/saml-4.png -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/overlays/remove-namespace.yaml: -------------------------------------------------------------------------------- 1 | - {op: remove, path: /metadata/namespace} 2 | -------------------------------------------------------------------------------- /test/e2e/testdata/crd-creation/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - crd.yaml 3 | - crd-instances.yaml -------------------------------------------------------------------------------- /test/e2e/testdata/failure-during-sync/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - failure-during-sync.yaml 3 | -------------------------------------------------------------------------------- /util/helm/testdata/api-versions/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | version: 1.0.0 3 | name: api-versions 4 | -------------------------------------------------------------------------------- /util/helm/testdata/invalid-version/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v99 2 | version: 1.0.0 3 | name: my-chart 4 | -------------------------------------------------------------------------------- /docs/assets/argocd-ui.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/argocd-ui.gif -------------------------------------------------------------------------------- /docs/assets/create-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/create-app.png -------------------------------------------------------------------------------- /docs/assets/dashboard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/dashboard.jpg -------------------------------------------------------------------------------- /docs/assets/select_env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/select_env.png -------------------------------------------------------------------------------- /docs/assets/sync-apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/sync-apps.png -------------------------------------------------------------------------------- /ui/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "@babel/preset-env", 4 | "@babel/preset-react" 5 | ] 6 | } -------------------------------------------------------------------------------- /docs/assets/connect-repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/connect-repo.png -------------------------------------------------------------------------------- /docs/assets/destination.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/destination.png -------------------------------------------------------------------------------- /docs/assets/filter-apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/filter-apps.png -------------------------------------------------------------------------------- /docs/assets/groups-claim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/groups-claim.png -------------------------------------------------------------------------------- /docs/assets/groups-scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/groups-scope.png -------------------------------------------------------------------------------- /docs/assets/register-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/register-app.png -------------------------------------------------------------------------------- /docs/assets/repo-add-ssh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/repo-add-ssh.png -------------------------------------------------------------------------------- /docs/assets/select_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/select_repo.png -------------------------------------------------------------------------------- /test/e2e/testdata/helm-kube-version/Chart.yaml: -------------------------------------------------------------------------------- 1 | version: 1.0.0 2 | name: helm-kube-version 3 | kubeVersion: 1.0.0 -------------------------------------------------------------------------------- /ui/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@babel/preset-env', '@babel/preset-react'], 3 | }; 4 | -------------------------------------------------------------------------------- /cmd/argocd/commands/testdata/test.cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | test-cert-data 3 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /docs/assets/api-management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/api-management.png -------------------------------------------------------------------------------- /docs/assets/guestbook-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/guestbook-app.png -------------------------------------------------------------------------------- /docs/assets/guestbook-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/guestbook-tree.png -------------------------------------------------------------------------------- /docs/assets/keycloak-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-login.png -------------------------------------------------------------------------------- /docs/assets/new-app-of-apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/new-app-of-apps.png -------------------------------------------------------------------------------- /docs/assets/oauth2-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/oauth2-config.png -------------------------------------------------------------------------------- /docs/assets/repo-add-https.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/repo-add-https.png -------------------------------------------------------------------------------- /docs/assets/selective-sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/selective-sync.png -------------------------------------------------------------------------------- /docs/assets/webhook-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/webhook-config.png -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/.gitignore: -------------------------------------------------------------------------------- 1 | /lib 2 | /.ksonnet/registries 3 | /app.override.yaml 4 | /.ks_environment 5 | -------------------------------------------------------------------------------- /test/fixture/gpg/signingkey.asc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/test/fixture/gpg/signingkey.asc -------------------------------------------------------------------------------- /ui/src/assets/images/argo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/ui/src/assets/images/argo.png -------------------------------------------------------------------------------- /ui/src/assets/images/stars.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/ui/src/assets/images/stars.gif -------------------------------------------------------------------------------- /docs/assets/openunison-portal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/openunison-portal.png -------------------------------------------------------------------------------- /docs/assets/repo-add-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/repo-add-overview.png -------------------------------------------------------------------------------- /docs/assets/terminate-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/terminate-button.png -------------------------------------------------------------------------------- /cmd/argocd/commands/testdata/test.key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | test-key-data 3 | -----END RSA PRIVATE KEY----- -------------------------------------------------------------------------------- /docs/assets/app-ui-information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/app-ui-information.png -------------------------------------------------------------------------------- /docs/assets/argocd_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/argocd_architecture.png -------------------------------------------------------------------------------- /docs/assets/keycloak-add-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-add-client.png -------------------------------------------------------------------------------- /docs/assets/keycloak-add-scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-add-scope.png -------------------------------------------------------------------------------- /docs/assets/keycloak-user-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-user-group.png -------------------------------------------------------------------------------- /docs/assets/orphaned-resources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/orphaned-resources.png -------------------------------------------------------------------------------- /docs/assets/sync-option-no-prune.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/sync-option-no-prune.png -------------------------------------------------------------------------------- /resource_customizations/apps/DaemonSet/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["restart"] = {} 3 | return actions 4 | -------------------------------------------------------------------------------- /resource_customizations/apps/Deployment/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["restart"] = {} 3 | return actions 4 | -------------------------------------------------------------------------------- /resource_customizations/apps/StatefulSet/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["restart"] = {} 3 | return actions 4 | -------------------------------------------------------------------------------- /ui/src/app/help/index.tsx: -------------------------------------------------------------------------------- 1 | import {Help} from './components/help'; 2 | 3 | export default { 4 | component: Help 5 | }; 6 | -------------------------------------------------------------------------------- /docs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Please refer to [the Contribution Guide](https://argoproj.github.io/argo-cd/developer-guide/contributing/) 2 | -------------------------------------------------------------------------------- /docs/assets/azure-api-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/azure-api-permissions.png -------------------------------------------------------------------------------- /docs/assets/azure-enterprise-users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/azure-enterprise-users.png -------------------------------------------------------------------------------- /docs/assets/cert-management-remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/cert-management-remove.png -------------------------------------------------------------------------------- /docs/assets/keycloak-client-scope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-client-scope.png -------------------------------------------------------------------------------- /docs/assets/keycloak-client-secret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-client-secret.png -------------------------------------------------------------------------------- /docs/assets/keycloak-groups-mapper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-groups-mapper.png -------------------------------------------------------------------------------- /docs/assets/synchronization-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/synchronization-button.png -------------------------------------------------------------------------------- /docs/user-guide/commands/argocd_cli.md: -------------------------------------------------------------------------------- 1 | # ArgoCD Command Reference 2 | 3 | ArgoCD command reference can be found [here](./argocd.md). -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart-2/templates/my-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map -------------------------------------------------------------------------------- /reposerver/repository/testdata/my-chart/templates/my-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map -------------------------------------------------------------------------------- /resource_customizations/extensions/DaemonSet/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["restart"] = {} 3 | return actions 4 | -------------------------------------------------------------------------------- /resource_customizations/extensions/Deployment/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["restart"] = {} 3 | return actions 4 | -------------------------------------------------------------------------------- /test/e2e/testdata/bad-servicecatalog/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - servicecatalog-apiservice.yaml 3 | - servicecatalog-svc.yaml -------------------------------------------------------------------------------- /test/e2e/testdata/networking/README.md: -------------------------------------------------------------------------------- 1 | Sample app which deploys application with networking resources. Useful for manual testing. 2 | -------------------------------------------------------------------------------- /ui/src/app/login/index.tsx: -------------------------------------------------------------------------------- 1 | import {Login} from './components/login'; 2 | 3 | export default { 4 | component: Login 5 | }; 6 | -------------------------------------------------------------------------------- /util/kustomize/testdata/kustomization_yaml/kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - ./deployment.yaml 3 | - ./statefulset.yaml 4 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # See https://github.com/probot/stale 2 | # See https://github.com/probot/stale 3 | exemptLabels: 4 | - backlog 5 | -------------------------------------------------------------------------------- /docs/assets/azure-enterprise-claims.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/azure-enterprise-claims.png -------------------------------------------------------------------------------- /docs/assets/azure-token-configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/azure-token-configuration.png -------------------------------------------------------------------------------- /docs/assets/cert-management-add-ssh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/cert-management-add-ssh.png -------------------------------------------------------------------------------- /docs/assets/cert-management-add-tls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/cert-management-add-tls.png -------------------------------------------------------------------------------- /docs/assets/cert-management-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/cert-management-overview.png -------------------------------------------------------------------------------- /docs/assets/keycloak-configure-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-configure-client.png -------------------------------------------------------------------------------- /test/e2e/testdata/config-map/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: bar -------------------------------------------------------------------------------- /docs/assets/application-of-applications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/application-of-applications.png -------------------------------------------------------------------------------- /docs/assets/azure-enterprise-saml-urls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/azure-enterprise-saml-urls.png -------------------------------------------------------------------------------- /docs/assets/download-codegen-patch-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/download-codegen-patch-file.png -------------------------------------------------------------------------------- /docs/assets/status-badge-healthy-synced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/status-badge-healthy-synced.png -------------------------------------------------------------------------------- /docs/developer-guide/ci-pipeline-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/developer-guide/ci-pipeline-failed.png -------------------------------------------------------------------------------- /reposerver/repository/testdata/app-parameters/.argocd-source.yaml: -------------------------------------------------------------------------------- 1 | kustomize: 2 | images: 3 | - gcr.io/heptio-images/ks-guestbook-demo:0.2 -------------------------------------------------------------------------------- /test/e2e/testdata/helm-repo/helm-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/test/e2e/testdata/helm-repo/helm-1.0.0.tgz -------------------------------------------------------------------------------- /test/e2e/testdata/helm-repo/helm2-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/test/e2e/testdata/helm-repo/helm2-1.0.0.tgz -------------------------------------------------------------------------------- /test/e2e/testdata/helm/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: bar -------------------------------------------------------------------------------- /test/e2e/testdata/helm2/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: bar -------------------------------------------------------------------------------- /test/e2e/testdata/jsonnet-nested-dir-with-imports/include/common.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | name: 'hello-world', 3 | rootname: 'hello-root', 4 | } -------------------------------------------------------------------------------- /docs/assets/keycloak-client-scope-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/keycloak-client-scope-selected.png -------------------------------------------------------------------------------- /test/e2e/testdata/.hidden-helm/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: bar -------------------------------------------------------------------------------- /test/e2e/testdata/helm3-crd/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: bar -------------------------------------------------------------------------------- /test/e2e/testdata/kustomize/kustomization.yaml: -------------------------------------------------------------------------------- 1 | kind: Kustomization 2 | apiVersion: kustomize.config.k8s.io/v1beta1 3 | resources: 4 | - pod.yaml -------------------------------------------------------------------------------- /cmd/argocd-server/commands/common.go: -------------------------------------------------------------------------------- 1 | package commands 2 | 3 | const ( 4 | // cliName is the name of the CLI 5 | cliName = "argocd-server" 6 | ) 7 | -------------------------------------------------------------------------------- /docs/assets/sync-option-no-prune-sync-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/sync-option-no-prune-sync-status.png -------------------------------------------------------------------------------- /reposerver/repository/testdata/recurse/baz.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMapList 3 | items: 4 | --- 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm-crd/templates/instance.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: stable.example.com/v1 2 | kind: CronTab 3 | metadata: 4 | name: {{ .Release.Name }}-inst -------------------------------------------------------------------------------- /test/fixture/testrepos/ssh_host_ed25519_key.pub: -------------------------------------------------------------------------------- 1 | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAYynaOD/wo8xg3YN4BbdrEozPZ5TvQ3R/qxLzy9gMr8 root@0f72fbb593e1 2 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_preeof1.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/.helmignore: -------------------------------------------------------------------------------- 1 | .git 2 | # OWNERS file for Kubernetes 3 | OWNERS 4 | # example production yaml 5 | values-production.yaml -------------------------------------------------------------------------------- /docs/assets/compare-option-ignore-needs-pruning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/docs/assets/compare-option-ignore-needs-pruning.png -------------------------------------------------------------------------------- /reposerver/repository/testdata/recurse/foo/bar.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMapList 3 | items: 4 | --- 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/utf-16/utf-16.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikebryant/argo-cd/master/reposerver/repository/testdata/utf-16/utf-16.yaml -------------------------------------------------------------------------------- /test/e2e/testdata/helm2-with-dependencies/requirements.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: helm2 3 | repository: "@custom-repo" 4 | version: v1.0.0 5 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/chart/requirements.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: redis-ha 3 | version: 4.5.3 4 | repository: https://dandydeveloper.github.io/charts -------------------------------------------------------------------------------- /test/e2e/testdata/helm-values/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | foo: {{.Values.foo}} -------------------------------------------------------------------------------- /manifests/namespace-install/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../crds 6 | - ../base 7 | -------------------------------------------------------------------------------- /resource_customizations/argoproj.io/Rollout/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | obj.spec.restartAt = os.date("!%Y-%m-%dT%XZ") 3 | return obj 4 | -------------------------------------------------------------------------------- /test/e2e/testdata/config-map/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | 5 | resources: 6 | - config-map.yaml 7 | -------------------------------------------------------------------------------- /hack/installers/install-lint-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | GO111MODULE=on go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0 5 | -------------------------------------------------------------------------------- /manifests/ha/namespace-install/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../../crds 6 | - ../base 7 | -------------------------------------------------------------------------------- /ui/src/app/settings/index.ts: -------------------------------------------------------------------------------- 1 | import {SettingsContainer} from './components/settings-container'; 2 | 3 | export default { 4 | component: SettingsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/user-info/index.ts: -------------------------------------------------------------------------------- 1 | import {UserInfoContainer} from './components/user-info-container'; 2 | 3 | export default { 4 | component: UserInfoContainer 5 | }; 6 | -------------------------------------------------------------------------------- /manifests/crds/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - application-crd.yaml 6 | - appproject-crd.yaml 7 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/doc.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | // This package has the automatically generated clientset. 4 | package versioned 5 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/fake/doc.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | // This package has the automatically generated fake clientset. 4 | package fake 5 | -------------------------------------------------------------------------------- /manifests/cluster-install/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../namespace-install 6 | - ../cluster-rbac 7 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm-kube-version/templates/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | data: 6 | kubeVersion: {{.Capabilities.KubeVersion}} -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/base.libsonnet: -------------------------------------------------------------------------------- 1 | local components = std.extVar("__ksonnet/components"); 2 | components + { 3 | // Insert user-specified overrides here. 4 | } 5 | -------------------------------------------------------------------------------- /test/testdata/static/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Static test asset page 4 | 5 | 6 |

This is a static page.

7 | 8 | -------------------------------------------------------------------------------- /ui/src/app/applications/index.ts: -------------------------------------------------------------------------------- 1 | import {ApplicationsContainer} from './components/applications-container'; 2 | 3 | export default { 4 | component: ApplicationsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | owners: 2 | - alexmt 3 | - jessesuen 4 | 5 | approvers: 6 | - alexec 7 | - alexmt 8 | - dthomson25 9 | - jannfis 10 | - jessesuen 11 | - mayzhang2000 12 | - rachelwang20 13 | -------------------------------------------------------------------------------- /manifests/ha/cluster-install/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../namespace-install 6 | - ../../cluster-rbac 7 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm3-crd/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: argocd-helm3-crd 3 | description: A Helm chart for Kubernetes 4 | type: application 5 | version: 0.1.0 6 | appVersion: 1.16.0 7 | -------------------------------------------------------------------------------- /util/gpg/testdata/unknown_signature.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Mon Aug 26 20:59:48 2019 CEST 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | gpg: Can't check signature: No public key 4 | -------------------------------------------------------------------------------- /util/helm/version.go: -------------------------------------------------------------------------------- 1 | package helm 2 | 3 | import "github.com/Masterminds/semver" 4 | 5 | func IsVersion(text string) bool { 6 | _, err := semver.NewVersion(text) 7 | return err == nil 8 | } 9 | -------------------------------------------------------------------------------- /examples/known-hosts/argocd-known-hosts.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: argocd-known-hosts 6 | data: 7 | known_hosts: |- 8 | 9 | -------------------------------------------------------------------------------- /hack/installers/install-codegen-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | KUSTOMIZE_VERSION=3.8.1 "$(dirname $0)/../install.sh" helm2-linux jq-linux kustomize-linux protoc-linux swagger-linux -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/scheme/doc.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | // This package contains the scheme of the automatically generated clientset. 4 | package scheme 5 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/application/v1alpha1/fake/doc.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | // Package fake has the automatically generated clients. 4 | package fake 5 | -------------------------------------------------------------------------------- /resource_customizations/apps/DaemonSet/actions/action_test.yaml: -------------------------------------------------------------------------------- 1 | actionTests: 2 | - action: restart 3 | inputPath: testdata/daemonset.yaml 4 | expectedOutputPath: testdata/daemonset-restarted.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/testdata/hook-custom-health/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../guestbook 6 | 7 | resources: 8 | - config-map.yaml -------------------------------------------------------------------------------- /util/helm/testdata/api-versions/templates/sample.yaml: -------------------------------------------------------------------------------- 1 | {{ if .Capabilities.APIVersions.Has "sample/v2" }} 2 | apiVersion: "sample/v2" 3 | {{ else }} 4 | apiVersion: "sample/v1" {{ end }} 5 | kind: Test -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/application/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | // This package has the automatically generated typed clients. 4 | package v1alpha1 5 | -------------------------------------------------------------------------------- /resource_customizations/apps/Deployment/actions/action_test.yaml: -------------------------------------------------------------------------------- 1 | actionTests: 2 | - action: restart 3 | inputPath: testdata/deployment.yaml 4 | expectedOutputPath: testdata/deployment-restarted.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/testdata/hook-custom-health/config-map.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: my-map 5 | annotations: 6 | argocd.argoproj.io/hook: PreSync 7 | data: 8 | foo: bar -------------------------------------------------------------------------------- /ui/src/app/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare var SYSTEM_INFO: { version: string; }; 2 | // suppress TS7016: Could not find a declaration file for module 3 | declare module 'react-diff-view'; 4 | declare module 'unidiff'; -------------------------------------------------------------------------------- /manifests/base/config/argocd-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: argocd-cm 5 | labels: 6 | app.kubernetes.io/name: argocd-cm 7 | app.kubernetes.io/part-of: argocd 8 | -------------------------------------------------------------------------------- /resource_customizations/apps/StatefulSet/actions/action_test.yaml: -------------------------------------------------------------------------------- 1 | actionTests: 2 | - action: restart 3 | inputPath: testdata/statefulset.yaml 4 | expectedOutputPath: testdata/statefulset-restarted.yaml 5 | -------------------------------------------------------------------------------- /resource_customizations/extensions/DaemonSet/actions/action_test.yaml: -------------------------------------------------------------------------------- 1 | actionTests: 2 | - action: restart 3 | inputPath: testdata/daemonset.yaml 4 | expectedOutputPath: testdata/daemonset-restarted.yaml 5 | -------------------------------------------------------------------------------- /resource_customizations/extensions/Deployment/actions/action_test.yaml: -------------------------------------------------------------------------------- 1 | actionTests: 2 | - action: restart 3 | inputPath: testdata/deployment.yaml 4 | expectedOutputPath: testdata/deployment-restarted.yaml 5 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ./guestbook-ui-deployment.yaml 6 | - ./guestbook-ui-svc.yaml 7 | -------------------------------------------------------------------------------- /test/e2e/testdata/ssh-kustomize-base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ssh://root@localhost:2222/tmp/argo-e2e/testdata.git//config-map 6 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/applications-list/applications-tiles.scss: -------------------------------------------------------------------------------- 1 | .applications-tiles { 2 | .argo-table-list__row { 3 | padding-top: 0; 4 | padding-bottom: 0; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /manifests/base/repo-server/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-repo-server-deployment.yaml 6 | - argocd-repo-server-service.yaml 7 | -------------------------------------------------------------------------------- /pkg/apis/application/v1alpha1/doc.go: -------------------------------------------------------------------------------- 1 | // Package v1alpha1 is the v1alpha1 version of the API. 2 | // +groupName=argoproj.io 3 | // +k8s:deepcopy-gen=package,register 4 | // +k8s:openapi-gen=true 5 | package v1alpha1 6 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/null-list/null-list.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMapList 3 | items: 4 | --- 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: prometheus-operator-operator 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/crashing-guestbook/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../guestbook 6 | 7 | patches: 8 | - guestbook-deployment.yaml 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook_local/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ./guestbook-ui-deployment.yaml 6 | - ./guestbook-ui-svc.yaml 7 | -------------------------------------------------------------------------------- /ui/src/app/settings/components/project-role-jwt-tokens/project-role-jwt-tokens.scss: -------------------------------------------------------------------------------- 1 | .project-role-jwt-tokens__hide-token { 2 | position: absolute; 3 | right: 1em; 4 | top: 1em; 5 | cursor: pointer; 6 | } -------------------------------------------------------------------------------- /reposerver/repository/testdata/empty-list/empty-list.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMapList 3 | items: [] 4 | --- 5 | apiVersion: v1 6 | kind: ServiceAccount 7 | metadata: 8 | name: prometheus-operator-operator 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm-with-dependencies/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: helm-with-dependencies 3 | version: v1.0.0 4 | dependencies: 5 | - name: helm 6 | repository: "@custom-repo" 7 | version: v1.0.0 8 | -------------------------------------------------------------------------------- /ui/src/app/user-info/components/user-info-overview/user-info-overview.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .user-info-overview { 4 | &__panel { 5 | margin: 18px 0; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /manifests/base/config/argocd-rbac-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: argocd-rbac-cm 5 | labels: 6 | app.kubernetes.io/name: argocd-rbac-cm 7 | app.kubernetes.io/part-of: argocd 8 | -------------------------------------------------------------------------------- /pkg/apiclient/project/forwarder_overwrite.go: -------------------------------------------------------------------------------- 1 | package project 2 | 3 | import ( 4 | "github.com/argoproj/pkg/grpc/http" 5 | ) 6 | 7 | func init() { 8 | forward_ProjectService_List_0 = http.UnaryForwarder 9 | } 10 | -------------------------------------------------------------------------------- /test/fixture/testrepos/ssh_host_ecdsa_key.pub: -------------------------------------------------------------------------------- 1 | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCk3mMbdKoeHKJvXHoPAHa0D8ZZnuGbNN0iM9Lo0o52V7vErpBmKb0qkmGajVqR7XvflAHhkmSfIDXLz4/Pxp4E= root@0f72fbb593e1 2 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/resource-label.ts: -------------------------------------------------------------------------------- 1 | import {resources} from './resources'; 2 | 3 | export const ResourceLabel = ({kind}: {kind: string}) => { 4 | return resources.get(kind) || kind.toLowerCase(); 5 | }; 6 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/OWNERS: -------------------------------------------------------------------------------- 1 | approvers: 2 | - prydonius 3 | - tompizmor 4 | - sameersbn 5 | - carrodher 6 | - juan131 7 | reviewers: 8 | - prydonius 9 | - tompizmor 10 | - sameersbn 11 | - carrodher 12 | - juan131 -------------------------------------------------------------------------------- /test/e2e/testdata/https-kustomize-base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - https://localhost:9443/argo-e2e/testdata.git//guestbook 6 | 7 | namePrefix: child- -------------------------------------------------------------------------------- /hack/versions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Update required versions of dependencies here whenever you change them in 3 | # go.mod 4 | kube_version=v0.19.2 5 | grpc_version=v1.26.0 6 | protobuf_version=v1.3.2 7 | grpc_gateway_version=v1.12.2 8 | -------------------------------------------------------------------------------- /manifests/base/config/argocd-gpg-keys-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-gpg-keys-cm 6 | app.kubernetes.io/part-of: argocd 7 | name: argocd-gpg-keys-cm 8 | -------------------------------------------------------------------------------- /manifests/base/config/argocd-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: argocd-secret 5 | labels: 6 | app.kubernetes.io/name: argocd-secret 7 | app.kubernetes.io/part-of: argocd 8 | type: Opaque 9 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/overlays/service-selector.yaml: -------------------------------------------------------------------------------- 1 | - {op: remove, path: /spec/selector/app} 2 | - {op: remove, path: /spec/selector/release} 3 | - {op: add, path: /spec/selector/app.kubernetes.io~1name, value: argocd-redis-ha} 4 | -------------------------------------------------------------------------------- /ui/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": false, 3 | "jsxSingleQuote": true, 4 | "printWidth": 180, 5 | "singleQuote": true, 6 | "tabWidth": 4, 7 | "jsxBracketSameLine": true, 8 | "quoteProps": "consistent" 9 | } 10 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/OWNERS: -------------------------------------------------------------------------------- 1 | approvers: 2 | - prydonius 3 | - tompizmor 4 | - sameersbn 5 | - carrodher 6 | - juan131 7 | reviewers: 8 | - prydonius 9 | - tompizmor 10 | - sameersbn 11 | - carrodher 12 | - juan131 -------------------------------------------------------------------------------- /util/kube/testdata/svc.yaml: -------------------------------------------------------------------------------- 1 | kind: Service 2 | apiVersion: v1 3 | metadata: 4 | name: my-service 5 | spec: 6 | selector: 7 | app: MyApp 8 | ports: 9 | - protocol: TCP 10 | port: 80 11 | targetPort: 9376 12 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook/guestbook-ui-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: guestbook-ui 11 | -------------------------------------------------------------------------------- /test/fixture/test/flaky.go: -------------------------------------------------------------------------------- 1 | package test 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | // invoke this method to indicate it is a flaky test that should be skipped on CI 8 | func Flaky(t *testing.T) { 9 | LocalOnly(t) 10 | } 11 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_bad.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | gpg: BAD signature from "GitHub (web-flow commit signing) " [ultimate] 4 | -------------------------------------------------------------------------------- /util/gpg/testdata/good_signature.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | gpg: Good signature from "GitHub (web-flow commit signing) " [ultimate] 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | .idea/ 3 | .DS_Store 4 | vendor/ 5 | dist/ 6 | site/ 7 | *.iml 8 | # delve debug binaries 9 | cmd/**/debug 10 | debug.test 11 | coverage.out 12 | test-results 13 | .scannerwork 14 | .scratch 15 | node_modules/ 16 | -------------------------------------------------------------------------------- /manifests/base/config/argocd-tls-certs-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-tls-certs-cm 6 | app.kubernetes.io/part-of: argocd 7 | name: argocd-tls-certs-cm 8 | data: -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/overlays/modify-labels.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /metadata/labels 3 | value: 4 | app.kubernetes.io/name: argocd-redis-ha 5 | app.kubernetes.io/component: redis 6 | app.kubernetes.io/part-of: argocd 7 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/jsonnet/params.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | containerPort: 80, 3 | image: "gcr.io/heptio-images/ks-guestbook-demo:0.2", 4 | name: "guestbook-ui", 5 | replicas: 1, 6 | servicePort: 80, 7 | type: "ClusterIP", 8 | } 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook_local/guestbook-ui-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | ports: 7 | - port: 81 8 | targetPort: 81 9 | selector: 10 | app: guestbook-ui 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/jsonnet-nested-dir-with-imports/apps/test-root.jsonnet: -------------------------------------------------------------------------------- 1 | local common = import '../include/common.libsonnet'; 2 | 3 | { 4 | apiVersion: 'v1', 5 | kind: 'Namespace', 6 | metadata: { 7 | name: common.rootname, 8 | } 9 | } -------------------------------------------------------------------------------- /test/e2e/testdata/service/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: my-service 5 | spec: 6 | selector: 7 | app: MyApp 8 | ports: 9 | - protocol: TCP 10 | port: 80 11 | targetPort: 9376 -------------------------------------------------------------------------------- /docs/user-guide/index.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | This guide is for developers who have Argo CD installed for them and are managing applications. 4 | 5 | !!! note 6 | Please make sure you've completed the [getting started guide](../getting_started.md). -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/overlays/haproxy-service-selector.yaml: -------------------------------------------------------------------------------- 1 | - {op: remove, path: /spec/selector/app} 2 | - {op: remove, path: /spec/selector/release} 3 | - {op: add, path: /spec/selector/app.kubernetes.io~1name, value: argocd-redis-ha-haproxy} 4 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/application/v1alpha1/generated_expansion.go: -------------------------------------------------------------------------------- 1 | // Code generated by client-gen. DO NOT EDIT. 2 | 3 | package v1alpha1 4 | 5 | type AppProjectExpansion interface{} 6 | 7 | type ApplicationExpansion interface{} 8 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/weird-list/weird-list.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: NotAList 3 | items: 4 | spec: 5 | foo: bar 6 | --- 7 | apiVersion: v1 8 | kind: ServiceAccount 9 | metadata: 10 | name: prometheus-operator-operator 11 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_badkeyid.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 5F4AEE18F83AFDEB23 3 | gpg: Good signature from "GitHub (web-flow commit signing) " [ultimate] 4 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_malformed2.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key noreply@github.com 3 | gpg: Good signature from "GitHub (web-flow commit signing) " [ultimate] 4 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_malformed3.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | gpg: Good signature from "GitHub (web-flow commit signing)" " [ultimate] 4 | -------------------------------------------------------------------------------- /util/hash/hash.go: -------------------------------------------------------------------------------- 1 | package hash 2 | 3 | import ( 4 | "hash/fnv" 5 | ) 6 | 7 | // FNVa computes a FNVa hash on a string 8 | func FNVa(s string) uint32 { 9 | h := fnv.New32a() 10 | _, _ = h.Write([]byte(s)) 11 | return h.Sum32() 12 | } 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/deprecated-extensions/network-policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: NetworkPolicy 3 | metadata: 4 | name: allow-default 5 | spec: 6 | podSelector: {} 7 | policyTypes: 8 | - Ingress 9 | - Egress 10 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_malformed1.txt: -------------------------------------------------------------------------------- 1 | gpg: Signature was made Wed Feb 26 23:22:34 2020 CET 2 | gpg: using RSA key 4AEE18F83AFDEB23 3 | gpg: Good signature from "GitHub (web-flow commit signing) " [ultimate] 4 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/requirements.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: mariadb 3 | version: 4.x.x 4 | repository: https://kubernetes-charts.storage.googleapis.com/ 5 | condition: mariadb.enabled 6 | tags: 7 | - wordpress-database 8 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/overlays/haproxy-modify-labels.yaml: -------------------------------------------------------------------------------- 1 | - op: replace 2 | path: /metadata/labels 3 | value: 4 | app.kubernetes.io/name: argocd-redis-ha-haproxy 5 | app.kubernetes.io/component: redis 6 | app.kubernetes.io/part-of: argocd 7 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/app-parameters/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - guestbook.yaml 6 | images: 7 | - name: gcr.io/heptio-images/ks-guestbook-demo 8 | newTag: "0.2" 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook-with-namespace/guestbook-ui-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: guestbook-ui 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/jsonnet-ext-var/config-map.jsonnet: -------------------------------------------------------------------------------- 1 | { 2 | apiVersion: 'v1', 3 | kind: 'ConfigMap', 4 | metadata: { 5 | name: 'my-map', 6 | }, 7 | data: { 8 | foo: std.extVar('foo'), 9 | bar: std.extVar('bar'), 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/e2e/testdata/jsonnet-nested-dir-with-imports/apps/nested/directory/test.jsonnet: -------------------------------------------------------------------------------- 1 | local common = import '../../../include/common.libsonnet'; 2 | 3 | { 4 | apiVersion: 'v1', 5 | kind: 'Namespace', 6 | metadata: { 7 | name: common.name, 8 | } 9 | } -------------------------------------------------------------------------------- /test/e2e/testdata/networking/guestbook-ui-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: guestbook-ui 11 | type: LoadBalancer -------------------------------------------------------------------------------- /test/fixture/revision_metadata/author_test.go: -------------------------------------------------------------------------------- 1 | package revision_metadata 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestAuthor(t *testing.T) { 10 | assert.Regexp(t, ".*<.*>", Author) 11 | } 12 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/yaml-editor/yaml-editor.scss: -------------------------------------------------------------------------------- 1 | .yaml-editor { 2 | position: relative; 3 | 4 | &__buttons { 5 | position: absolute; 6 | right: 1em; 7 | top: 1em; 8 | z-index: 1; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /docs/operator-manual/index.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | This guide is for administrator and operator wanting to install and configure Argo CD for other developers. 4 | 5 | !!! note 6 | Please make sure you've completed the [getting started guide](../getting_started.md). -------------------------------------------------------------------------------- /manifests/base/server/argocd-server-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: server 8 | name: argocd-server 9 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/chart/values.yaml: -------------------------------------------------------------------------------- 1 | redis-ha: 2 | persistentVolume: 3 | enabled: false 4 | redis: 5 | masterGroupName: argocd 6 | config: 7 | save: "\"\"" 8 | haproxy: 9 | enabled: true 10 | image: 11 | tag: 5.0.8-alpine -------------------------------------------------------------------------------- /test/e2e/testdata/crd-creation/README.md: -------------------------------------------------------------------------------- 1 | ``` 2 | argocd app create crd-creation \ 3 | --repo https://github.com/argoproj/argo-cd.git \ 4 | --path test/e2e/functional/crd-creation \ 5 | --dest-server https://kubernetes.default.svc \ 6 | --dest-namespace default 7 | ``` -------------------------------------------------------------------------------- /test/e2e/testdata/networking/guestbook-ui-internal-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui-internal 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 80 9 | selector: 10 | app: guestbook-ui 11 | type: ClusterIP -------------------------------------------------------------------------------- /manifests/base/dex/argocd-dex-server-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-dex-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: dex-server 8 | name: argocd-dex-server 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook-with-namespace/guestbook-ui-svc-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: guestbook-ui 5 | namespace: namespace 6 | spec: 7 | ports: 8 | - port: 80 9 | targetPort: 80 10 | selector: 11 | app: guestbook-ui 12 | -------------------------------------------------------------------------------- /test/e2e/testdata/kustomize/pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:3.10.2 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never -------------------------------------------------------------------------------- /test/manifests/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../../../manifests/crds 6 | - ../../../manifests/base/config 7 | - ../../../manifests/cluster-rbac 8 | 9 | patchesStrategicMerge: 10 | - patches.yaml -------------------------------------------------------------------------------- /ui/src/app/shared/utils.ts: -------------------------------------------------------------------------------- 1 | export function hashCode(str: string) { 2 | let hash = 0; 3 | for (let i = 0; i < str.length; i++) { 4 | // tslint:disable-next-line:no-bitwise 5 | hash = ~~((hash << 5) - hash + str.charCodeAt(i)); 6 | } 7 | return hash; 8 | } 9 | -------------------------------------------------------------------------------- /hack/installers/install-dep-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | [ -e $DOWNLOADS/dep ] || curl -sLf --retry 3 -o $DOWNLOADS/dep https://github.com/golang/dep/releases/download/v0.5.3/dep-linux-$ARCHITECTURE 5 | cp $DOWNLOADS/dep $BIN/ 6 | chmod +x $BIN/dep 7 | dep version 8 | -------------------------------------------------------------------------------- /test/e2e/testdata/hook/pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:latest 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/sync-waves/pod-1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod-1 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "1" 7 | spec: 8 | containers: 9 | - name: main 10 | image: nginx:1.17.4-alpine 11 | imagePullPolicy: IfNotPresent -------------------------------------------------------------------------------- /test/fixture/log/log.go: -------------------------------------------------------------------------------- 1 | package log 2 | 3 | import ( 4 | log "github.com/sirupsen/logrus" 5 | ) 6 | 7 | // used to switch logging to debug level for a single func 8 | func Debug() func() { 9 | log.SetLevel(log.DebugLevel) 10 | return func() { log.SetLevel(log.InfoLevel) } 11 | } 12 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/pod.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/chart/requirements.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: redis-ha 3 | repository: https://dandydeveloper.github.io/charts 4 | version: 4.5.3 5 | digest: sha256:79e2a60f86c34dcd2c81217f111ef6dfb55e949dd71cc43aebf6a679dc27c042 6 | generated: "2020-04-06T18:11:37.013005+09:00" 7 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook-with-namespace/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ./guestbook-ui-deployment.yaml 6 | - ./guestbook-ui-svc.yaml 7 | - ./guestbook-ui-deployment-ns.yaml 8 | - ./guestbook-ui-svc-ns.yaml 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/sync-waves/pod-2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod-2 5 | annotations: 6 | argocd.argoproj.io/sync-wave: "2" 7 | spec: 8 | containers: 9 | - name: main 10 | image: nginx:1.17.4-alpine 11 | imagePullPolicy: IfNotPresent 12 | -------------------------------------------------------------------------------- /test/e2e/testdata/cluster-role/pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: my-pod 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:3.10.2 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/global-with-no-namesapce/console.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: config.openshift.io/v1 3 | kind: Console 4 | metadata: 5 | name: cluster 6 | annotations: 7 | argocd.argoproj.io/sync-options: Prune=false 8 | spec: 9 | authentication: 10 | logoutRedirect: "https://google.com" -------------------------------------------------------------------------------- /test/e2e/testdata/two-nice-pods/pod-1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod-1 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:3.10.2 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/two-nice-pods/pod-2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod-2 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:3.10.2 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never 13 | -------------------------------------------------------------------------------- /docs/operator-manual/upgrading/1.2-1.3.md: -------------------------------------------------------------------------------- 1 | # v1.2 to 1.3 2 | 3 | # API Changes 4 | 5 | The 1.3 release introduces backward incompatible changes in some public Argo CD APIs. Please make sure to upgrade 6 | Argo CD CLI to v1.3. 7 | 8 | From here on you can follow the [regular upgrade process](./overview.md). -------------------------------------------------------------------------------- /manifests/base/config/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-cm.yaml 6 | - argocd-secret.yaml 7 | - argocd-rbac-cm.yaml 8 | - argocd-ssh-known-hosts-cm.yaml 9 | - argocd-tls-certs-cm.yaml 10 | - argocd-gpg-keys-cm.yaml 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/jsonnet-tla-cm/config-map.jsonnet: -------------------------------------------------------------------------------- 1 | function(foo='foo', bar='bar') 2 | { 3 | apiVersion: 'v1', 4 | kind: 'ConfigMap', 5 | metadata: { 6 | name: 'my-map', 7 | }, 8 | data: { 9 | foo: foo, 10 | bar: bar, 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ui/src/app/shared/services/auth-service.ts: -------------------------------------------------------------------------------- 1 | import {AuthSettings} from '../models'; 2 | import requests from './requests'; 3 | 4 | export class AuthService { 5 | public settings(): Promise { 6 | return requests.get('/settings').then(res => res.body as AuthSettings); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/requirements.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: mariadb 3 | repository: https://kubernetes-charts.storage.googleapis.com/ 4 | version: 4.3.1 5 | digest: sha256:82a0e5374376169d2ecf7d452c18a2ed93507f5d17c3393a1457f9ffad7e9b26 6 | generated: 2018-08-02T22:07:51.905271776Z 7 | -------------------------------------------------------------------------------- /SECURITY_CONTACTS: -------------------------------------------------------------------------------- 1 | # Defined below are the security contacts for this repo. 2 | # 3 | # DO NOT REPORT SECURITY VULNERABILITIES DIRECTLY TO THESE NAMES, FOLLOW THE 4 | # INSTRUCTIONS AT https://argoproj.github.io/argo-cd/security_considerations/#reporting-vulnerabilities 5 | 6 | alexmt 7 | edlee2121 8 | jessesuen 9 | -------------------------------------------------------------------------------- /docs/operator-manual/upgrading/1.0-1.1.md: -------------------------------------------------------------------------------- 1 | # v1.0 to 1.1 2 | 3 | The v1.1 release does not introduce backward incompatible changes. Please note that Kustomize v1.0 is deprecated and 4 | support will be removed in the Argo CD v1.2 release. 5 | 6 | From here on you can follow the [regular upgrade process](./overview.md). -------------------------------------------------------------------------------- /manifests/base/dex/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-dex-server-deployment.yaml 6 | - argocd-dex-server-role.yaml 7 | - argocd-dex-server-rolebinding.yaml 8 | - argocd-dex-server-sa.yaml 9 | - argocd-dex-server-service.yaml 10 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/ns.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/gpg/testdata/bad_signature_manipulated.txt: -------------------------------------------------------------------------------- 1 | gpg: CRC error; AF65FD - 3ABB26 2 | gpg: [don't know]: invalid packet (ctb=78) 3 | gpg: no signature found 4 | gpg: the signature could not be verified. 5 | Please remember that the signature file (.sig or .asc) 6 | should be the first file given on the command line. 7 | -------------------------------------------------------------------------------- /manifests/cluster-rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-application-controller-clusterrole.yaml 6 | - argocd-application-controller-clusterrolebinding.yaml 7 | - argocd-server-clusterrole.yaml 8 | - argocd-server-clusterrolebinding.yaml 9 | -------------------------------------------------------------------------------- /resource_customizations/argoproj.io/Rollout/actions/resume/action.lua: -------------------------------------------------------------------------------- 1 | if obj.status.pauseConditions ~= nil and table.getn(obj.status.pauseConditions) > 0 then 2 | obj.status.pauseConditions = nil 3 | end 4 | 5 | if obj.spec.paused ~= nil and obj.spec.paused then 6 | obj.spec.paused = false 7 | end 8 | 9 | return obj -------------------------------------------------------------------------------- /test/e2e/testdata/git-submodule/submodule-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: pod-in-submodule 5 | spec: 6 | containers: 7 | - name: main 8 | image: alpine:3.10.2 9 | imagePullPolicy: IfNotPresent 10 | command: 11 | - "true" 12 | restartPolicy: Never 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/kustomize-cm-gen/kustomization.yaml: -------------------------------------------------------------------------------- 1 | configMapGenerator: 2 | - name: my-map 3 | literals: 4 | - foo=bar 5 | generatorOptions: 6 | annotations: 7 | argocd.argoproj.io/compare-options: IgnoreExtraneous 8 | argocd.argoproj.io/sync-options: Prune=false 9 | kind: Kustomization 10 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/deploy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/known-hosts/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - github.com/argoproj/argo-cd//manifests/cluster-install?ref=stable 6 | 7 | patchesStrategicMerge: 8 | - argocd-known-hosts-mounts.yaml 9 | 10 | resources: 11 | - argocd-known-hosts.yaml 12 | -------------------------------------------------------------------------------- /hack/gpg-wrapper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Simple wrapper around gpg to prevent exit code != 0 3 | ARGS=$* 4 | OUTPUT=$(gpg $ARGS 2>&1) 5 | IFS='' 6 | RET=$? 7 | case "$RET" in 8 | 0) 9 | echo $OUTPUT 10 | ;; 11 | 1) 12 | echo $OUTPUT 13 | RET=0 14 | ;; 15 | *) 16 | echo $OUTPUT >&2 17 | ;; 18 | esac 19 | exit $RET 20 | -------------------------------------------------------------------------------- /hack/installers/install-jq-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/jq ] || curl -sLf --retry 3 -o $DOWNLOADS/jq https://github.com/stedolan/jq/releases/download/jq-${jq_version}/jq-linux64 7 | cp $DOWNLOADS/jq $BIN/jq 8 | chmod +x $BIN/jq 9 | jq --version -------------------------------------------------------------------------------- /server/settings/oidc/claims.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | option go_package = "github.com/argoproj/argo-cd/server/settings/oidc"; 3 | 4 | package github.com.argoproj.argo_cd.server.settings.oidc; 5 | 6 | message Claim { 7 | bool essential = 1; 8 | string value = 2; 9 | repeated string values = 3; 10 | } 11 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/resource-label.test.ts: -------------------------------------------------------------------------------- 1 | import {ResourceLabel} from './resource-label'; 2 | 3 | test('BuiltIn', () => { 4 | expect(ResourceLabel({kind: 'ConfigMap'})).toBe('cm'); 5 | }); 6 | 7 | test('CustomResource', () => { 8 | expect(ResourceLabel({kind: 'Word'})).toBe('word'); 9 | }); 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/crashing-guestbook/guestbook-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | replicas: 0 7 | progressDeadlineSeconds: 3 8 | template: 9 | spec: 10 | containers: 11 | - name: guestbook-ui 12 | command: ["fail"] 13 | -------------------------------------------------------------------------------- /ui/scripts/build_docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | TAG=${IMAGE_TAG:-'latest'} 6 | 7 | docker build --build-arg ARGO_VERSION=${TAG} -t ${IMAGE_NAMESPACE:-`whoami`}/argocd-ui:${TAG} . 8 | 9 | if [ "$DOCKER_PUSH" == "true" ] 10 | then 11 | docker push ${IMAGE_NAMESPACE:-`whoami`}/argocd-ui:${TAG} 12 | fi 13 | -------------------------------------------------------------------------------- /hack/git-ask-pass.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # This script is used as the command supplied to GIT_ASKPASS as a way to supply username/password 3 | # credentials to git, without having to use git credentials helpers, or having on-disk config. 4 | case "$1" in 5 | Username*) echo "${GIT_USERNAME}" ;; 6 | Password*) echo "${GIT_PASSWORD}" ;; 7 | esac 8 | -------------------------------------------------------------------------------- /manifests/base/server/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-server-deployment.yaml 6 | - argocd-server-role.yaml 7 | - argocd-server-rolebinding.yaml 8 | - argocd-server-sa.yaml 9 | - argocd-server-service.yaml 10 | - argocd-server-metrics.yaml 11 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/concatenated/concatenated.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: sa1 6 | --- 7 | apiVersion: v1 8 | kind: ServiceAccount 9 | metadata: 10 | name: sa2 11 | --- 12 | --- 13 | apiVersion: v1 14 | kind: ServiceAccount 15 | metadata: 16 | name: sa3 17 | --- 18 | -------------------------------------------------------------------------------- /util/kube/testdata/job.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | name: pi 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: pi 10 | image: perl 11 | command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] 12 | restartPolicy: Never 13 | backoffLimit: 4 14 | -------------------------------------------------------------------------------- /Dockerfile.dev: -------------------------------------------------------------------------------- 1 | #################################################################################################### 2 | # argocd-dev 3 | #################################################################################################### 4 | FROM argocd-base 5 | COPY argocd* /usr/local/bin/ 6 | COPY --from=argocd-ui ./src/dist/app /shared/app 7 | -------------------------------------------------------------------------------- /manifests/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | 5 | images: 6 | - name: argoproj/argocd 7 | newName: argoproj/argocd 8 | newTag: latest 9 | resources: 10 | - ./application-controller 11 | - ./dex 12 | - ./repo-server 13 | - ./server 14 | - ./config 15 | - ./redis 16 | -------------------------------------------------------------------------------- /manifests/base/application-controller/argocd-application-controller-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-application-controller 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: application-controller 8 | name: argocd-application-controller 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/bad-servicecatalog/servicecatalog-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: service-catalog-apiserver 5 | namespace: default 6 | spec: 7 | ports: 8 | - name: secure 9 | port: 443 10 | protocol: TCP 11 | targetPort: 8443 12 | selector: 13 | app: service-catalog-apiserver 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/hook/hook.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | annotations: 5 | argocd.argoproj.io/hook: Sync 6 | name: hook 7 | spec: 8 | containers: 9 | - command: 10 | - "true" 11 | image: "alpine:latest" 12 | imagePullPolicy: IfNotPresent 13 | name: main 14 | restartPolicy: Never -------------------------------------------------------------------------------- /ui/src/app/shared/services/version-service.ts: -------------------------------------------------------------------------------- 1 | import {VersionMessage} from '../models'; 2 | import requests from './requests'; 3 | 4 | export class VersionService { 5 | public version(): Promise { 6 | return requests.agent.get(requests.toAbsURL('/api/version')).then(res => res.body as VersionMessage); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/job.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/helm/version_test.go: -------------------------------------------------------------------------------- 1 | package helm 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestIsVersion(t *testing.T) { 10 | assert.False(t, IsVersion("*")) 11 | assert.False(t, IsVersion("1.*")) 12 | assert.False(t, IsVersion("1.0.*")) 13 | assert.True(t, IsVersion("1.0.0")) 14 | } 15 | -------------------------------------------------------------------------------- /test/e2e/testdata/sync-options-validate-false/invalid-cm.yaml: -------------------------------------------------------------------------------- 1 | # This configmap fails when running `kubectl apply`, but succeeds when running `kubectl apply --validate=false` 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: invalid-cm 6 | annotations: 7 | argocd.argoproj.io/sync-options: Validate=false 8 | invalidKey: this-fails 9 | -------------------------------------------------------------------------------- /util/text/text.go: -------------------------------------------------------------------------------- 1 | package text 2 | 3 | import "strings" 4 | 5 | // truncates messages to n characters 6 | func Trunc(message string, n int) string { 7 | if len(message) > n { 8 | return message[0:n-3] + "..." 9 | } 10 | return message 11 | } 12 | 13 | func SemVer(s string) string { 14 | return strings.ReplaceAll(s, "+", "") 15 | } 16 | -------------------------------------------------------------------------------- /test/container/uid_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if test "$(id -u)" == "0" -a "${USER_ID}" != ""; then 5 | useradd -u ${USER_ID} -d /home/user -s /bin/bash ${USER_NAME:-default} 6 | chown -R "${USER_NAME:-default}" ${GOCACHE} 7 | fi 8 | 9 | export PATH=$PATH:/usr/local/go/bin:/go/bin 10 | export GOROOT=/usr/local/go 11 | 12 | exec "$@" -------------------------------------------------------------------------------- /test/e2e/testdata/secrets/secrets.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: test-secret 6 | stringData: 7 | username: test-username 8 | data: 9 | password: dGVzdC1wYXNzd29yZA== 10 | 11 | --- 12 | apiVersion: v1 13 | kind: Secret 14 | metadata: 15 | name: test-secret2 16 | stringData: 17 | username: test-username 18 | -------------------------------------------------------------------------------- /test/e2e/testdata/deprecated-extensions/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: extensions-ingress 5 | spec: 6 | rules: 7 | - host: extensions-ingress 8 | http: 9 | paths: 10 | - backend: 11 | serviceName: extensions-service 12 | servicePort: 8080 13 | path: / 14 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/repo.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {repoUrl} from './urls'; 3 | 4 | export const Repo = ({url, children}: {url: string; children?: React.ReactNode}) => { 5 | const href = repoUrl(url); 6 | const content = children || url; 7 | return href !== null ? {content} : {content}; 8 | }; 9 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/timestamp.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import Moment from 'react-moment'; 3 | 4 | export const Timestamp = ({date}: {date: string | number}) => { 5 | return ( 6 | 7 | {date} ({date}) 8 | 9 | ); 10 | }; 11 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/limits.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | # Prevent vendor directory from being copied to ensure we are not not pulling unexpected cruft from 2 | # a user's workspace, and are only building off of what is locked by dep. 3 | .vscode/ 4 | .idea/ 5 | .DS_Store 6 | vendor/ 7 | dist/ 8 | *.iml 9 | # delve debug binaries 10 | cmd/**/debug 11 | debug.test 12 | coverage.out 13 | ui/node_modules/ 14 | -------------------------------------------------------------------------------- /docs/user-guide/selective_sync.md: -------------------------------------------------------------------------------- 1 | # Selective Sync 2 | 3 | A *selective sync* is one where only some resources are sync'd. You can choose which resources from the UI: 4 | 5 | ![selective sync](../assets/selective-sync.png) 6 | 7 | When doing so, bear in mind: 8 | 9 | * Your sync is not recorded in the history, and so rollback is not possible. 10 | * Hooks are not run. -------------------------------------------------------------------------------- /manifests/base/application-controller/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-application-controller-sa.yaml 6 | - argocd-application-controller-role.yaml 7 | - argocd-application-controller-rolebinding.yaml 8 | - argocd-application-controller-statefulset.yaml 9 | - argocd-metrics.yaml 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/failure-during-sync/failure-during-sync.yaml: -------------------------------------------------------------------------------- 1 | # This manifest will fail to sync because the spec is invalid. This manifest is useful for testing 2 | # auto-sync and ensuring sure it does not fall into a sync loop. 3 | apiVersion: v1 4 | kind: ServiceAccount 5 | metadata: 6 | name: failure-during-sync 7 | labels: 8 | my-label: has-inva/id-character! 9 | -------------------------------------------------------------------------------- /test/fixture/testrepos/Procfile: -------------------------------------------------------------------------------- 1 | sshd: mkdir -p /var/run/sshd && mkdir -p ~/.ssh && cat ./test/fixture/testrepos/id_rsa.pub > ~/.ssh/authorized_keys && /usr/sbin/sshd -p 2222 -D -e 2 | fcgiwrap: fcgiwrap -s unix:/var/run/fcgiwrap.socket & sleep 1 && chmod 777 /var/run/fcgiwrap.socket && wait 3 | nginx: nginx -prefix=$(pwd) -g 'daemon off;' -c $(pwd)/test/fixture/testrepos/nginx.conf 4 | -------------------------------------------------------------------------------- /hack/tool-versions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # The checksum of this file is used as cache key in our integration toolchain 3 | # 4 | helm2_version=2.15.2 5 | helm3_version=3.3.1 6 | jq_version=1.6 7 | ksonnet_version=0.13.1 8 | kubectl_version=1.17.8 9 | kubectx_version=0.6.3 10 | kustomize3_version=3.8.1 11 | packr_version=1.21.9 12 | protoc_version=3.7.1 13 | swagger_version=0.19.0 14 | -------------------------------------------------------------------------------- /manifests/base/redis/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argocd-redis-deployment.yaml 6 | - argocd-redis-service.yaml 7 | 8 | vars: 9 | - name: ARGOCD_REDIS_SERVICE 10 | objref: 11 | kind: Service 12 | name: argocd-redis 13 | apiVersion: v1 14 | fieldref: 15 | fieldpath: metadata.name -------------------------------------------------------------------------------- /resource_customizations/zookeeper.pravega.io/ZookeeperCluster/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Waiting for ZK Nodes to join the ensemble" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Healthy 8 | message: "All ZK Nodes have joined the ensemble" 9 | inputPath: testdata/healthy.yaml 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/helm-crd/templates/crd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apiextensions.k8s.io/v1beta1 2 | kind: CustomResourceDefinition 3 | metadata: 4 | name: crontabs.stable.example.com 5 | spec: 6 | group: stable.example.com 7 | version: v1 8 | scope: Namespaced 9 | names: 10 | plural: crontabs 11 | singular: crontab 12 | kind: CronTab 13 | shortNames: 14 | - ct -------------------------------------------------------------------------------- /test/e2e/testdata/helm3-crd/crds/crd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apiextensions.k8s.io/v1beta1 2 | kind: CustomResourceDefinition 3 | metadata: 4 | name: crontabs.stable.example.com 5 | spec: 6 | group: stable.example.com 7 | version: v1 8 | scope: Namespaced 9 | names: 10 | plural: crontabs 11 | singular: crontab 12 | kind: CronTab 13 | shortNames: 14 | - ct -------------------------------------------------------------------------------- /test/fixture/testrepos/start-git.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run --name e2e-git --rm -i \ 4 | -p 2222:2222 -p 9080:9080 -p 9443:9443 -p 9444:9444 -p 9445:9445 \ 5 | -w /go/src/github.com/argoproj/argo-cd -v $(pwd):/go/src/github.com/argoproj/argo-cd -v /tmp:/tmp argoproj/argo-cd-ci-builder:v1.0.0 \ 6 | bash -c "goreman -f ./test/fixture/testrepos/Procfile start" 7 | -------------------------------------------------------------------------------- /assets/model.conf: -------------------------------------------------------------------------------- 1 | [request_definition] 2 | r = sub, res, act, obj 3 | 4 | [policy_definition] 5 | p = sub, res, act, obj, eft 6 | 7 | [role_definition] 8 | g = _, _ 9 | 10 | [policy_effect] 11 | e = some(where (p.eft == allow)) && !some(where (p.eft == deny)) 12 | 13 | [matchers] 14 | m = g(r.sub, p.sub) && globMatch(r.res, p.res) && globMatch(r.act, p.act) && globMatch(r.obj, p.obj) 15 | -------------------------------------------------------------------------------- /hack/installers/install-swagger-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/swagger ] || curl -sLf --retry 3 -o $DOWNLOADS/swagger https://github.com/go-swagger/go-swagger/releases/download/v${swagger_version}/swagger_linux_$ARCHITECTURE 7 | cp $DOWNLOADS/swagger $BIN/swagger 8 | chmod +x $BIN/swagger 9 | swagger version 10 | -------------------------------------------------------------------------------- /resource_customizations/argoproj.io/Rollout/testdata/degraded_invalidSpec.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Rollout 3 | metadata: 4 | name: invalidSpec 5 | status: 6 | conditions: 7 | - type: AnotherValidCondition 8 | status: true 9 | - type: InvalidSpec 10 | status: true 11 | message: Rollout has missing field '.Spec.Strategy.Type' 12 | reason: MissingStrategy -------------------------------------------------------------------------------- /ui/src/assets/images/resources/hpa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/ing.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/application-resources-diff/application-resources-diff.scss: -------------------------------------------------------------------------------- 1 | .application-resources-diff { 2 | &__checkboxes { 3 | text-align: right; 4 | label { 5 | padding-right: 2em; 6 | } 7 | } 8 | &__diff { 9 | font-size: 10pt; 10 | &__title { 11 | font-weight: bold; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/crb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/rand/rand_test.go: -------------------------------------------------------------------------------- 1 | package rand 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func TestRandString(t *testing.T) { 8 | ss := RandStringCharset(10, "A") 9 | if ss != "AAAAAAAAAA" { 10 | t.Errorf("Expected 10 As, but got %q", ss) 11 | } 12 | ss = RandStringCharset(5, "ABC123") 13 | if len(ss) != 5 { 14 | t.Errorf("Expected random string of length 10, but got %q", ss) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/spinner.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {COLORS} from './colors'; 3 | 4 | export const Spinner = ({show, style = {}}: {show: boolean; style?: React.CSSProperties}) => 5 | show ? ( 6 | 7 | 8 | 9 | ) : null; 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/dev/main.jsonnet: -------------------------------------------------------------------------------- 1 | local base = import "base.libsonnet"; 2 | // uncomment if you reference ksonnet-lib 3 | // local k = import "k.libsonnet"; 4 | 5 | base + { 6 | // Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") 7 | // "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) 8 | } 9 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/prod/main.jsonnet: -------------------------------------------------------------------------------- 1 | local base = import "base.libsonnet"; 2 | // uncomment if you reference ksonnet-lib 3 | // local k = import "k.libsonnet"; 4 | 5 | base + { 6 | // Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") 7 | // "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) 8 | } 9 | -------------------------------------------------------------------------------- /util/clusterauth/testdata/argocd-manager-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | creationTimestamp: "2019-06-13T04:20:26Z" 5 | name: argocd-manager 6 | namespace: kube-system 7 | resourceVersion: "133015" 8 | selfLink: /api/v1/namespaces/kube-system/serviceaccounts/argocd-manager 9 | uid: 91dd37cf-8d92-11e9-a091-d65f2ae7fa8d 10 | secrets: 11 | - name: argocd-manager-token-tj79r -------------------------------------------------------------------------------- /util/util_test.go: -------------------------------------------------------------------------------- 1 | package util_test 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/argoproj/argo-cd/util" 7 | ) 8 | 9 | func TestMakeSignature(t *testing.T) { 10 | for size := 1; size <= 64; size++ { 11 | s, err := util.MakeSignature(size) 12 | if err != nil { 13 | t.Errorf("Could not generate signature of size %d: %v", size, err) 14 | } 15 | t.Logf("Generated token: %v", s) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /resource_customizations/kafka.strimzi.io/KafkaConnect/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Waiting for Kafka Connect" 5 | inputPath: testdata/progressing_noStatus.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "Error" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | inputPath: testdata/healthy.yaml 13 | -------------------------------------------------------------------------------- /test/e2e/testdata/bad-servicecatalog/servicecatalog-apiservice.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apiregistration.k8s.io/v1 2 | kind: APIService 3 | metadata: 4 | name: v1beta1.servicecatalog.k8s.io 5 | spec: 6 | caBundle: null 7 | group: servicecatalog.k8s.io 8 | groupPriorityMinimum: 10000 9 | service: 10 | name: service-catalog-apiserver 11 | namespace: default 12 | version: v1beta1 13 | versionPriority: 20 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/declarative-apps/app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: {{.Name}} 5 | namespace: {{.ArgoCDNamespace}} 6 | spec: 7 | project: {{.Project}} 8 | source: 9 | repoURL: {{.RepoURL}} 10 | targetRevision: HEAD 11 | path: {{.Path}} 12 | destination: 13 | server: https://kubernetes.default.svc 14 | namespace: {{.DeploymentNamespace}} -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/default/main.jsonnet: -------------------------------------------------------------------------------- 1 | local base = import "base.libsonnet"; 2 | // uncomment if you reference ksonnet-lib 3 | // local k = import "k.libsonnet"; 4 | 5 | base + { 6 | // Insert user-specified overrides here. For example if a component is named \"nginx-deployment\", you might have something like:\n") 7 | // "nginx-deployment"+: k.deployment.mixin.metadata.labels({foo: "bar"}) 8 | } 9 | -------------------------------------------------------------------------------- /test/manifests/base/patches.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: argocd-secret 6 | labels: 7 | app.kubernetes.io/name: argocd-secret 8 | app.kubernetes.io/part-of: argocd 9 | stringData: 10 | # admin.password is "password" 11 | admin.password: $2a$10$RncPyHW/B5ll2Z3J8s.IBOnbZ9uoJ4JhHLKzj5lzG/kU1KN1Oj3/K 12 | admin.passwordMtime: 2019-03-20T17:54:53Z 13 | type: Opaque 14 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/templates/redis-serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ template "redis.serviceAccountName" . }} 6 | labels: 7 | app: {{ template "redis.name" . }} 8 | chart: {{ template "redis.chart" . }} 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | {{- end -}} 12 | -------------------------------------------------------------------------------- /resource_customizations/apps/DaemonSet/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | if obj.spec.template.metadata == nil then 3 | obj.spec.template.metadata = {} 4 | end 5 | if obj.spec.template.metadata.annotations == nil then 6 | obj.spec.template.metadata.annotations = {} 7 | end 8 | obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ") 9 | return obj 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/hook-and-deployment/hook.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | name: my-hook 5 | annotations: 6 | argocd.argoproj.io/hook: Sync 7 | spec: 8 | template: 9 | spec: 10 | containers: 11 | - command: 12 | - "true" 13 | image: "alpine:3.10.2" 14 | imagePullPolicy: IfNotPresent 15 | name: main 16 | restartPolicy: Never -------------------------------------------------------------------------------- /ui/src/app/shared/components/empty-state/empty-state.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | require('./empty-state.scss'); 4 | 5 | export const EmptyState = ({icon, children}: {icon: string; children: React.ReactNode}) => ( 6 |
7 |
8 | 9 |
10 | {children} 11 |
12 | ); 13 | -------------------------------------------------------------------------------- /docs/SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support 2 | 3 | 1. Make sure you've read [understanding the basics](understand_the_basics.md) the [getting started guide](getting_started.md). 4 | 2. Looked for an answer [the frequently asked questions](faq.md). 5 | 3. Ask a question in [the Argo CD Slack channel ⧉](https://argoproj.github.io/community/join-slack). 6 | 4. [Read issues, report a bug, or request a feature ⧉](https://github.com/argoproj/argo-cd/issues) 7 | -------------------------------------------------------------------------------- /hack/installers/install-helm-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/helm.tar.gz ] || curl -sLf --retry 3 -o $DOWNLOADS/helm.tar.gz https://get.helm.sh/helm-v${helm3_version}-linux-$ARCHITECTURE.tar.gz 7 | mkdir -p /tmp/helm && tar -C /tmp/helm -xf $DOWNLOADS/helm.tar.gz 8 | cp /tmp/helm/linux-$ARCHITECTURE/helm $BIN/helm 9 | helm version --client 10 | -------------------------------------------------------------------------------- /manifests/base/redis/argocd-redis-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-redis 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: redis 8 | name: argocd-redis 9 | spec: 10 | ports: 11 | - name: tcp-redis 12 | port: 6379 13 | targetPort: 6379 14 | selector: 15 | app.kubernetes.io/name: argocd-redis 16 | -------------------------------------------------------------------------------- /resource_customizations/apps/Deployment/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | if obj.spec.template.metadata == nil then 3 | obj.spec.template.metadata = {} 4 | end 5 | if obj.spec.template.metadata.annotations == nil then 6 | obj.spec.template.metadata.annotations = {} 7 | end 8 | obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ") 9 | return obj 10 | -------------------------------------------------------------------------------- /resource_customizations/apps/StatefulSet/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | if obj.spec.template.metadata == nil then 3 | obj.spec.template.metadata = {} 4 | end 5 | if obj.spec.template.metadata.annotations == nil then 6 | obj.spec.template.metadata.annotations = {} 7 | end 8 | obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ") 9 | return obj 10 | -------------------------------------------------------------------------------- /util/glob/glob.go: -------------------------------------------------------------------------------- 1 | package glob 2 | 3 | import ( 4 | "github.com/gobwas/glob" 5 | log "github.com/sirupsen/logrus" 6 | ) 7 | 8 | func Match(pattern, text string, separators ...rune) bool { 9 | compiledGlob, err := glob.Compile(pattern, separators...) 10 | if err != nil { 11 | log.Warnf("failed to compile pattern %s due to error %v", pattern, err) 12 | return false 13 | } 14 | return compiledGlob.Match(text) 15 | } 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/enhancement_proposal.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Enhancement proposal 3 | about: Propose an enhancement for this project 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | --- 8 | # Summary 9 | 10 | What change you think needs making. 11 | 12 | # Motivation 13 | 14 | Please give examples of your use case, e.g. when would you use this. 15 | 16 | # Proposal 17 | 18 | How do you think this should be implemented? -------------------------------------------------------------------------------- /docs/developer-guide/index.md: -------------------------------------------------------------------------------- 1 | # Overview 2 | 3 | !!! warning "You probably don't want to be reading this section of the docs." 4 | This part of the manual is aimed at people wanting to develop third-party applications that interact with Argo CD, e.g. 5 | 6 | * An chat bot 7 | * An Slack integration 8 | 9 | !!! note 10 | Please make sure you've completed the [getting started guide](../getting_started.md). 11 | -------------------------------------------------------------------------------- /resource_customizations/extensions/DaemonSet/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | if obj.spec.template.metadata == nil then 3 | obj.spec.template.metadata = {} 4 | end 5 | if obj.spec.template.metadata.annotations == nil then 6 | obj.spec.template.metadata.annotations = {} 7 | end 8 | obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ") 9 | return obj 10 | -------------------------------------------------------------------------------- /resource_customizations/extensions/Deployment/actions/restart/action.lua: -------------------------------------------------------------------------------- 1 | local os = require("os") 2 | if obj.spec.template.metadata == nil then 3 | obj.spec.template.metadata = {} 4 | end 5 | if obj.spec.template.metadata.annotations == nil then 6 | obj.spec.template.metadata.annotations = {} 7 | end 8 | obj.spec.template.metadata.annotations["kubectl.kubernetes.io/restartedAt"] = os.date("!%Y-%m-%dT%XZ") 9 | return obj 10 | -------------------------------------------------------------------------------- /test/fixture/testrepos/ssh_host_rsa_key.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcBar/5tNRUw2MIeY2wzLllG4Opt9h4i/8dRnyxCdDQb30ioH0ervPFRoR1ZJVF/jVI4waHZJ74m/70OxwhSBVA/oPFtRl6C+at2BTgj5uLb9TqVoLSP/VT5M31ohWwBuIsYoQrbwpxwXpgLAQ65M+ghegW3SALnyxEuCWEd/mqCOmwcXWPKNDM32AB3OU/qhW3ID66aIo26LJ8OQ7yZSv/2xWWGiVbRShNjDLqGfkbk5+R+vpVdaIhJn22nX5d1i/modeBepJN8eo4gO7p0vkmCTFxq6aUrRtPPs2h7z61GsYG7miWn4hjjeGVrT1Xv0BTrnuWHxcJU1bSmKCx4rV root@0f72fbb593e1 2 | -------------------------------------------------------------------------------- /docs/operator-manual/upgrading/1.5-1.6.md: -------------------------------------------------------------------------------- 1 | # v1.5 to 1.6 2 | 3 | ## Removed Deprecated Field of /managed-resources API 4 | 5 | The deprecated `diff` field had been removed from `/api/v1/applications//managed-resources` API. The field is not used 6 | by Argo CD CLI or UI, so it might affect you only if you programmatically use the `managed-resources` API. 7 | 8 | From here on you can follow the [regular upgrade process](./overview.md). -------------------------------------------------------------------------------- /test/fixture/testrepos/id_rsa.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiXrlNhSdBElh/nMoc3wEJapKy08pvVrQzi+BV56doNzUyiqFhW9cmlMlFOcft5QmL9LWh5MmiiPW4qLhG5iDprjLgS+occh5BvM6o7dgGKZO8WrhJ3zUa+9XUSw9qTWZ2WFOHJbEo0Te3Q9SMRYg30tD5N903mwF4ViY0tPSH89cOcQT925L7CppXAl0/gbV0tz/O6Hba/MkOendhSi4LQAtHqWU69kXHVJgkE0M+9TpUiD59xLXp/JOAmjgPhJhOb3+BHHYVeox1DTNfSrpXCEkkeuePsirmwET9q8xIsSjKV4byrMDTOgzGtyAVmfYWG8GLYyMnxO4hCxIChIrd amatyushentsev@MTVL160740224.local 2 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/crd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource_customizations/kiali.io/Kiali/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Reconciling" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "Error Reconciling" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "Awaiting next reconciliation" 13 | inputPath: testdata/healthy.yaml 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/prod/params.libsonnet: -------------------------------------------------------------------------------- 1 | local params = std.extVar("__ksonnet/params"); 2 | local globals = import "globals.libsonnet"; 3 | local envParams = params + { 4 | components +: { 5 | "guestbook-ui" +: { 6 | type: "LoadBalancer", 7 | }, 8 | }, 9 | }; 10 | 11 | { 12 | components: { 13 | [x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /ui/src/app/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import {App} from './app'; 4 | 5 | ReactDOM.render(, document.getElementById('app')); 6 | 7 | const mdl = module as any; 8 | if (mdl.hot) { 9 | mdl.hot.accept('./app.tsx', () => { 10 | const UpdatedApp = require('./app.tsx').App; 11 | ReactDOM.render(, document.getElementById('app')); 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /manifests/base/dex/argocd-dex-server-role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: Role 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-dex-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: dex-server 8 | name: argocd-dex-server 9 | rules: 10 | - apiGroups: 11 | - "" 12 | resources: 13 | - secrets 14 | - configmaps 15 | verbs: 16 | - get 17 | - list 18 | - watch 19 | -------------------------------------------------------------------------------- /ui/src/app/settings/components/account-details/account-details.scss: -------------------------------------------------------------------------------- 1 | .account-details { 2 | &__new-token { 3 | white-space: nowrap; 4 | position: relative; 5 | 6 | p { 7 | word-wrap: break-word; 8 | white-space: pre-wrap; 9 | } 10 | } 11 | 12 | &__remove-token { 13 | position: absolute; 14 | top: 1em; 15 | right: 1em; 16 | cursor: pointer; 17 | } 18 | } -------------------------------------------------------------------------------- /.codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | - "**/*.pb.go" 3 | - "**/*.pb.gw.go" 4 | - "**/*generated.go" 5 | - "**/*generated.deepcopy.go" 6 | - "**/*_test.go" 7 | - "pkg/apis/client/.*" 8 | - "pkg/client/.*" 9 | - "vendor/.*" 10 | coverage: 11 | status: 12 | # we've found this not to be useful 13 | patch: off 14 | project: 15 | default: 16 | # allow test coverage to drop by 2%, assume that it's typically due to CI problems 17 | threshold: 2 -------------------------------------------------------------------------------- /resource_customizations/jaegertracing.io/Jaeger/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Waiting for Jaeger" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "Jaeger Failed For Some Reason" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "Jaeger is Running" 13 | inputPath: testdata/healthy.yaml 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/self-managed-app/resources.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: test-self-managed-apps 5 | namespace: argocd-e2e 6 | spec: 7 | project: default 8 | 9 | source: 10 | repoURL: https://github.com/argoproj/argo-cd.git 11 | targetRevision: HEAD 12 | path: self-managed-app 13 | 14 | destination: 15 | server: https://kubernetes.default.svc 16 | namespace: argocd-e2e 17 | -------------------------------------------------------------------------------- /ui/src/app/user-info/components/user-info-container.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {Route, RouteComponentProps, Switch} from 'react-router'; 3 | 4 | import {UserInfoOverview} from './user-info-overview/user-info-overview'; 5 | 6 | export const UserInfoContainer = (props: RouteComponentProps) => ( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /hack/installers/install-helm2-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/helm2.tar.gz ] || curl -sLf --retry 3 -o $DOWNLOADS/helm2.tar.gz https://storage.googleapis.com/kubernetes-helm/helm-v${helm2_version}-linux-$ARCHITECTURE.tar.gz 7 | mkdir -p /tmp/helm2 && tar -C /tmp/helm2 -xf $DOWNLOADS/helm2.tar.gz 8 | cp /tmp/helm2/linux-$ARCHITECTURE/helm $BIN/helm2 9 | helm2 version --client 10 | -------------------------------------------------------------------------------- /manifests/base/server/argocd-server-metrics.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-server-metrics 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: server 8 | name: argocd-server-metrics 9 | spec: 10 | ports: 11 | - name: metrics 12 | protocol: TCP 13 | port: 8083 14 | targetPort: 8083 15 | selector: 16 | app.kubernetes.io/name: argocd-server 17 | -------------------------------------------------------------------------------- /resource_customizations/jaegertracing.io/Jaeger/testdata/progressing.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: jaegertracing.io/v1 2 | kind: Jaeger 3 | metadata: 4 | generation: 3 5 | labels: 6 | argocd.argoproj.io/instance: jaeger-operator-default 7 | name: jaeger 8 | namespace: jaeger 9 | resourceVersion: "226432" 10 | selfLink: /apis/jaegertracing.io/v1/namespaces/2269-jaeger/jaegers/jaeger 11 | uid: 48d186c8-47d7-494b-8b6a-435747e406a4 12 | spec: {} 13 | status: {} -------------------------------------------------------------------------------- /test/e2e/testdata/cluster-role/cluster-role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1beta1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | namespace: cert-manager 5 | name: my-cluster-role-binding 6 | annotations: 7 | argocd.argoproj.io/hook: PreSync 8 | roleRef: 9 | apiGroup: rbac.authorization.k8s.io 10 | kind: ClusterRole 11 | name: cluster-admin 12 | subjects: 13 | - kind: ServiceAccount 14 | name: default 15 | namespace: default -------------------------------------------------------------------------------- /test/e2e/testdata/helm-repo/index.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | entries: 3 | helm: 4 | - created: 2019-07-08T23:26:50.723856689Z 5 | urls: 6 | - http://localhost:9080/argo-e2e/testdata.git/helm-repo/helm-1.0.0.tgz 7 | version: 1.0.0 8 | helm2: 9 | - created: "2020-03-02T08:16:19.960425-08:00" 10 | name: helm2 11 | urls: 12 | - http://localhost:9080/argo-e2e/testdata.git/helm-repo/helm2-1.0.0.tgz 13 | version: 1.0.0 -------------------------------------------------------------------------------- /test/e2e/user_info_test.go: -------------------------------------------------------------------------------- 1 | package e2e 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | 8 | . "github.com/argoproj/argo-cd/test/e2e/fixture" 9 | ) 10 | 11 | func TestUserInfo(t *testing.T) { 12 | EnsureCleanState(t) 13 | 14 | output, err := RunCli("account", "get-user-info") 15 | 16 | assert.NoError(t, err) 17 | assert.Equal(t, `Logged In: true 18 | Username: admin 19 | Issuer: argocd 20 | Groups: `, output) 21 | } 22 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/helm/testdata/minio/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /test/e2e/testdata/failed-conversion/apiservice.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apiregistration.k8s.io/v1beta1 2 | kind: APIService 3 | metadata: 4 | name: v1beta1.metrics.k8s.io 5 | labels: 6 | app: metrics-server 7 | chart: metrics-server 8 | spec: 9 | service: 10 | name: metrics-server 11 | namespace: kube-system 12 | group: metrics.k8s.io 13 | version: v1beta1 14 | insecureSkipTLSVerify: true 15 | groupPriorityMinimum: 100 16 | versionPriority: 100 -------------------------------------------------------------------------------- /test/fixture/testrepos/ssh_host_ed25519_key: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW 3 | QyNTUxOQAAACAGMp2jg/8KPMYN2DeAW3axKMz2eU70N0f6sS88vYDK/AAAAJjZDaih2Q2o 4 | oQAAAAtzc2gtZWQyNTUxOQAAACAGMp2jg/8KPMYN2DeAW3axKMz2eU70N0f6sS88vYDK/A 5 | AAAEAXkp8IShMHn+V4jsmjsyZyEwT7j9d170SJJPuDwu9SGgYynaOD/wo8xg3YN4BbdrEo 6 | zPZ5TvQ3R/qxLzy9gMr8AAAAEXJvb3RAMGY3MmZiYjU5M2UxAQIDBA== 7 | -----END OPENSSH PRIVATE KEY----- 8 | -------------------------------------------------------------------------------- /.golangci.yml: -------------------------------------------------------------------------------- 1 | run: 2 | timeout: 2m 3 | skip-files: 4 | - ".*\\.pb\\.go" 5 | skip-dirs: 6 | - pkg/client/ 7 | - vendor/ 8 | linters: 9 | enable: 10 | - vet 11 | - deadcode 12 | - goimports 13 | - varcheck 14 | - structcheck 15 | - ineffassign 16 | - unconvert 17 | - unparam 18 | linters-settings: 19 | goimports: 20 | local-prefixes: github.com/argoproj/argo-cd 21 | service: 22 | golangci-lint-version: 1.21.0 23 | -------------------------------------------------------------------------------- /manifests/base/server/argocd-server-rolebinding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: server 8 | name: argocd-server 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: Role 12 | name: argocd-server 13 | subjects: 14 | - kind: ServiceAccount 15 | name: argocd-server 16 | -------------------------------------------------------------------------------- /server/project/util.go: -------------------------------------------------------------------------------- 1 | package project 2 | 3 | func difference(a, b []string) []string { 4 | return unique(append(a, b...)) 5 | } 6 | 7 | func unique(slice []string) []string { 8 | encountered := map[string]int{} 9 | for _, v := range slice { 10 | encountered[v] = encountered[v] + 1 11 | } 12 | 13 | diff := make([]string, 0) 14 | for _, v := range slice { 15 | if encountered[v] == 1 { 16 | diff = append(diff, v) 17 | } 18 | } 19 | return diff 20 | } 21 | -------------------------------------------------------------------------------- /manifests/base/application-controller/argocd-metrics.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-metrics 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: metrics 8 | name: argocd-metrics 9 | spec: 10 | ports: 11 | - name: metrics 12 | protocol: TCP 13 | port: 8082 14 | targetPort: 8082 15 | selector: 16 | app.kubernetes.io/name: argocd-application-controller 17 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/checkbox/checkbox-field.tsx: -------------------------------------------------------------------------------- 1 | import {Checkbox} from 'argo-ui'; 2 | import * as React from 'react'; 3 | import * as ReactForm from 'react-form'; 4 | 5 | export const CheckboxField = ReactForm.FormField((props: {fieldApi: ReactForm.FieldApi; className: string; checked: boolean}) => { 6 | const { 7 | fieldApi: {getValue, setValue} 8 | } = props; 9 | 10 | return ; 11 | }); 12 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/revision-help-icon.tsx: -------------------------------------------------------------------------------- 1 | import {HelpIcon} from 'argo-ui'; 2 | import * as React from 'react'; 3 | 4 | export const RevisionHelpIcon = ({type, top}: {type: string; top?: string}) => ( 5 |
6 | {type === 'helm' ? : } 7 |
8 | ); 9 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/pvc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hack/installers/install-kubectl-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | # NOTE: keep the version synced with https://storage.googleapis.com/kubernetes-release/release/stable.txt 7 | [ -e $DOWNLOADS/kubectl ] || curl -sLf --retry 3 -o $DOWNLOADS/kubectl https://storage.googleapis.com/kubernetes-release/release/v${kubectl_version}/bin/linux/$ARCHITECTURE/kubectl 8 | cp $DOWNLOADS/kubectl $BIN/ 9 | chmod +x $BIN/kubectl 10 | -------------------------------------------------------------------------------- /reposerver/apiclient/mocks/Clientset.go: -------------------------------------------------------------------------------- 1 | package mocks 2 | 3 | import ( 4 | apiclient "github.com/argoproj/argo-cd/reposerver/apiclient" 5 | 6 | io "github.com/argoproj/gitops-engine/pkg/utils/io" 7 | ) 8 | 9 | type Clientset struct { 10 | RepoServerServiceClient apiclient.RepoServerServiceClient 11 | } 12 | 13 | func (c *Clientset) NewRepoServerClient() (io.Closer, apiclient.RepoServerServiceClient, error) { 14 | return io.NopCloser, c.RepoServerServiceClient, nil 15 | } 16 | -------------------------------------------------------------------------------- /test/e2e/testdata/crd-creation/crd-instances.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: argoproj.io/v1alpha1 3 | kind: Dummy 4 | metadata: 5 | name: dummy-crd-instance 6 | spec: 7 | requests: 8 | cpu: 2000m 9 | memory: 32Mi 10 | --- 11 | apiVersion: argoproj.io/v1alpha1 12 | kind: Dummy 13 | metadata: 14 | name: dummy-crd-instance 15 | namespace: kube-system 16 | --- 17 | apiVersion: argoproj.io/v1alpha1 18 | kind: ClusterDummy 19 | metadata: 20 | name: cluster-dummy-crd-instance 21 | -------------------------------------------------------------------------------- /test/e2e/testdata/deprecated-extensions/pod-security-policy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: PodSecurityPolicy 3 | metadata: 4 | name: pod-security-example 5 | spec: 6 | privileged: false # Don't allow privileged pods! 7 | # The rest fills in some required fields. 8 | seLinux: 9 | rule: RunAsAny 10 | supplementalGroups: 11 | rule: RunAsAny 12 | runAsUser: 13 | rule: RunAsAny 14 | fsGroup: 15 | rule: RunAsAny 16 | volumes: 17 | - '*' -------------------------------------------------------------------------------- /resource_customizations/sparkoperator.k8s.io/SparkApplication/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "SparkApplication is Pending Rerun" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "Job Failed" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "SparkApplication is in RunningState" 13 | inputPath: testdata/healthy.yaml 14 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/templates/redis-role.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.rbac.create .Values.rbac.role.rules -}} 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: {{ template "redis.fullname" . }} 6 | labels: 7 | app: {{ template "redis.name" . }} 8 | chart: {{ template "redis.chart" . }} 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | rules: 12 | {{ toYaml .Values.rbac.role.rules }} 13 | {{- end -}} 14 | -------------------------------------------------------------------------------- /util/kustomize/testdata/kustomization_yaml/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nginx-deployment 5 | labels: 6 | app: nginx 7 | spec: 8 | replicas: 3 9 | selector: 10 | matchLabels: 11 | app: nginx 12 | template: 13 | metadata: 14 | labels: 15 | app: nginx 16 | spec: 17 | containers: 18 | - name: nginx 19 | image: nginx:1.15.4 20 | ports: 21 | - containerPort: 80 -------------------------------------------------------------------------------- /manifests/base/dex/argocd-dex-server-rolebinding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-dex-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: dex-server 8 | name: argocd-dex-server 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: Role 12 | name: argocd-dex-server 13 | subjects: 14 | - kind: ServiceAccount 15 | name: argocd-dex-server 16 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/jsonnet/vendor/nested/service.libsonnet: -------------------------------------------------------------------------------- 1 | local new(params) = { 2 | apiVersion: 'v1', 3 | kind: 'Service', 4 | metadata: { 5 | name: params.name, 6 | }, 7 | spec: { 8 | ports: [ 9 | { 10 | port: params.servicePort, 11 | targetPort: params.containerPort, 12 | }, 13 | ], 14 | selector: { 15 | app: params.name, 16 | }, 17 | type: params.type, 18 | }, 19 | }; 20 | 21 | { 22 | new:: new, 23 | } 24 | -------------------------------------------------------------------------------- /test/e2e/testdata/deployment/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nginx-deployment 5 | labels: 6 | app: nginx 7 | spec: 8 | replicas: 0 9 | selector: 10 | matchLabels: 11 | app: nginx 12 | template: 13 | metadata: 14 | labels: 15 | app: nginx 16 | spec: 17 | containers: 18 | - name: nginx 19 | image: nginx:1.17.4-alpine 20 | ports: 21 | - containerPort: 80 22 | -------------------------------------------------------------------------------- /reposerver/repository/testdata/app-parameters/guestbook.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: guestbook-ui 9 | template: 10 | metadata: 11 | labels: 12 | app: guestbook-ui 13 | spec: 14 | containers: 15 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.1 16 | name: guestbook-ui 17 | ports: 18 | - containerPort: 81 19 | -------------------------------------------------------------------------------- /resource_customizations/jaegertracing.io/Jaeger/testdata/degraded.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: jaegertracing.io/v1 2 | kind: Jaeger 3 | metadata: 4 | generation: 3 5 | labels: 6 | argocd.argoproj.io/instance: jaeger-operator-default 7 | name: jaeger 8 | namespace: jaeger 9 | resourceVersion: "226432" 10 | selfLink: /apis/jaegertracing.io/v1/namespaces/2269-jaeger/jaegers/jaeger 11 | uid: 48d186c8-47d7-494b-8b6a-435747e406a4 12 | spec: {} 13 | status: 14 | phase: Failed 15 | version: 1.17.0 -------------------------------------------------------------------------------- /resource_customizations/jaegertracing.io/Jaeger/testdata/healthy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: jaegertracing.io/v1 2 | kind: Jaeger 3 | metadata: 4 | generation: 3 5 | labels: 6 | argocd.argoproj.io/instance: jaeger-operator-default 7 | name: jaeger 8 | namespace: jaeger 9 | resourceVersion: "226432" 10 | selfLink: /apis/jaegertracing.io/v1/namespaces/2269-jaeger/jaegers/jaeger 11 | uid: 48d186c8-47d7-494b-8b6a-435747e406a4 12 | spec: {} 13 | status: 14 | phase: Running 15 | version: 1.17.0 -------------------------------------------------------------------------------- /hack/installers/install-protoc-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/protoc.zip ] || curl -sLf --retry 3 -o $DOWNLOADS/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v${protoc_version}/protoc-${protoc_version}-linux-x86_64.zip 7 | unzip $DOWNLOADS/protoc.zip bin/protoc -d /usr/local/ 8 | chmod +x /usr/local/bin/protoc 9 | unzip $DOWNLOADS/protoc.zip include/* -d /usr/local/ 10 | protoc --version 11 | -------------------------------------------------------------------------------- /ui/src/app/settings/components/project-details/project-details.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .project-details { 4 | .white-box__details-row .fa-times { 5 | position: absolute; 6 | top: 1em; 7 | right: 0; 8 | cursor: pointer; 9 | } 10 | 11 | .select.argo-field { 12 | padding: 0; 13 | } 14 | 15 | .white-box { 16 | .help-tip { 17 | color: $argo-color-gray-6; 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /test/e2e/testdata/declarative-apps/invalid-helm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Application 3 | metadata: 4 | name: {{.Name}} 5 | namespace: {{.ArgoCDNamespace}} 6 | spec: 7 | project: {{.Project}} 8 | source: 9 | repoURL: {{.RepoURL}} 10 | targetRevision: HEAD 11 | path: {{.Path}} 12 | helm: 13 | valueFiles: 14 | - does-not-exist-values.yaml 15 | destination: 16 | server: https://kubernetes.default.svc 17 | namespace: {{.DeploymentNamespace}} -------------------------------------------------------------------------------- /tools/cmd-docs/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "log" 5 | "os" 6 | 7 | "github.com/argoproj/argo-cd/cmd/argocd/commands" 8 | 9 | "github.com/spf13/cobra/doc" 10 | ) 11 | 12 | func main() { 13 | // set HOME env var so that default values involve user's home directory do not depend on the running user. 14 | os.Setenv("HOME", "/home/user") 15 | 16 | err := doc.GenMarkdownTree(commands.NewCommand(), "./docs/user-guide/commands") 17 | if err != nil { 18 | log.Fatal(err) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resource_customizations/zookeeper.pravega.io/ZookeeperCluster/health.lua: -------------------------------------------------------------------------------- 1 | health_status = {} 2 | if obj.status ~= nil then 3 | if obj.status.readyReplicas ~= 0 and obj.status.readyReplicas == obj.status.replicas then 4 | health_status.status = "Healthy" 5 | health_status.message = "All ZK Nodes have joined the ensemble" 6 | return health_status 7 | end 8 | end 9 | health_status.status = "Progressing" 10 | health_status.message = "Waiting for ZK Nodes to join the ensemble" 11 | return health_status -------------------------------------------------------------------------------- /manifests/cluster-rbac/argocd-server-clusterrolebinding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: server 8 | name: argocd-server 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: ClusterRole 12 | name: argocd-server 13 | subjects: 14 | - kind: ServiceAccount 15 | name: argocd-server 16 | namespace: argocd 17 | -------------------------------------------------------------------------------- /manifests/ha/base/redis-ha/README.md: -------------------------------------------------------------------------------- 1 | # Redis HA Manifests 2 | 3 | The Redis HA manifests are taken from the upstream helm chart, and tweaked slightly to add 4 | Argo CD labels. 5 | * `chart` is a helm chart that references the upstream redis-ha chart. To update redis, update the 6 | version in `chart/requirements.yaml` with a later version of the chart. 7 | * `overlays` is a directory containing kustomize overlays for Argo CD, namely label modifications 8 | * `generate.sh` is a script to regenerate the final kustomize 9 | -------------------------------------------------------------------------------- /resource_customizations/stacks.crossplane.io/ClusterStackInstall/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: Waiting for stack to be installed 5 | inputPath: testdata/wait_stack.yaml 6 | - healthStatus: 7 | status: Progressing 8 | message: 'Resource is being created' 9 | inputPath: testdata/being_created_stack.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: 'Resource is available for use' 13 | inputPath: testdata/installed_stack.yaml 14 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/application-operation-state/application-operation-state.scss: -------------------------------------------------------------------------------- 1 | .application-operation-state { 2 | &__icons_container { 3 | position: absolute; 4 | left: 0; 5 | } 6 | 7 | &__icons_container_padding { 8 | left: 15px; 9 | position: relative; 10 | } 11 | 12 | &__message { 13 | white-space: normal; 14 | line-height: 16px; 15 | display: inline-block; 16 | vertical-align: middle; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ui/src/app/settings/components/project-sync-windows-edit/project-sync-windows-edit.scss: -------------------------------------------------------------------------------- 1 | .project-sync-windows-panel { 2 | &__form-row { 3 | position: relative; 4 | input.argo-field { 5 | margin-top: 29px; 6 | } 7 | 8 | .fa-times { 9 | position: absolute; 10 | cursor: pointer; 11 | left: -1.2em; 12 | top: 2.2em; 13 | } 14 | } 15 | 16 | form > .row > .columns { 17 | padding-left: 0; 18 | } 19 | } -------------------------------------------------------------------------------- /test/e2e/testdata/one-deployment/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: main 5 | spec: 6 | replicas: 1 7 | progressDeadlineSeconds: 10 8 | selector: 9 | matchLabels: 10 | my-label: whatever 11 | template: 12 | metadata: 13 | labels: 14 | my-label: whatever 15 | spec: 16 | containers: 17 | - name: main 18 | command: ["sleep", "999"] 19 | image: alpine:3.10.2 20 | imagePullPolicy: IfNotPresent 21 | 22 | -------------------------------------------------------------------------------- /ui/src/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Argo CD 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /manifests/base/server/argocd-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: server 8 | name: argocd-server 9 | spec: 10 | ports: 11 | - name: http 12 | protocol: TCP 13 | port: 80 14 | targetPort: 8080 15 | - name: https 16 | protocol: TCP 17 | port: 443 18 | targetPort: 8080 19 | selector: 20 | app.kubernetes.io/name: argocd-server 21 | -------------------------------------------------------------------------------- /manifests/cluster-rbac/argocd-application-controller-clusterrole.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRole 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-application-controller 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: application-controller 8 | name: argocd-application-controller 9 | rules: 10 | - apiGroups: 11 | - '*' 12 | resources: 13 | - '*' 14 | verbs: 15 | - '*' 16 | - nonResourceURLs: 17 | - '*' 18 | verbs: 19 | - '*' 20 | -------------------------------------------------------------------------------- /manifests/ha/base/overlays/argocd-application-controller-statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: argocd-application-controller 5 | spec: 6 | template: 7 | spec: 8 | containers: 9 | - name: argocd-application-controller 10 | command: 11 | - argocd-application-controller 12 | - --status-processors 13 | - "20" 14 | - --operation-processors 15 | - "10" 16 | - --redis 17 | - "argocd-redis-ha-haproxy:6379" 18 | -------------------------------------------------------------------------------- /test/e2e/testdata/networking/guestbook-ui-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | replicas: 0 7 | revisionHistoryLimit: 3 8 | selector: 9 | matchLabels: 10 | app: guestbook-ui 11 | template: 12 | metadata: 13 | labels: 14 | app: guestbook-ui 15 | spec: 16 | containers: 17 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.2 18 | name: guestbook-ui 19 | ports: 20 | - containerPort: 80 21 | -------------------------------------------------------------------------------- /resource_customizations/operator.knative.dev/KnativeEventing/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "1: InstallSucceeded | True\n2: Ready | Unknown\n" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "1: InstallSucceeded | True\n2: Ready | randomstatus\n" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "KnativeEventing is healthy." 13 | inputPath: testdata/healthy.yaml 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/crd-validation/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: nginx-deployment 5 | labels: 6 | app: nginx 7 | spec: 8 | replicas: 0 9 | selector: 10 | matchLabels: 11 | app: nginx 12 | template: 13 | metadata: 14 | labels: 15 | app: nginx 16 | spec: 17 | containers: 18 | - name: nginx 19 | image: nginx:1.17.4-alpine 20 | ports: 21 | - containerPort: "80" 22 | imagePullPolicy: IfNotPresent -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook_local/guestbook-ui-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | replicas: 0 7 | revisionHistoryLimit: 3 8 | selector: 9 | matchLabels: 10 | app: guestbook-ui 11 | template: 12 | metadata: 13 | labels: 14 | app: guestbook-ui 15 | spec: 16 | containers: 17 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.3 18 | name: guestbook-ui 19 | ports: 20 | - containerPort: 81 21 | 22 | -------------------------------------------------------------------------------- /util/argo/normalizers/util.go: -------------------------------------------------------------------------------- 1 | package normalizers 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | ) 7 | 8 | func getGroupKindForOverrideKey(key string) (string, string, error) { 9 | var group, kind string 10 | parts := strings.Split(key, "/") 11 | 12 | if len(parts) == 2 { 13 | group = parts[0] 14 | kind = parts[1] 15 | } else if len(parts) == 1 { 16 | kind = parts[0] 17 | } else { 18 | return "", "", fmt.Errorf("override key must be / or , got: '%s' ", key) 19 | } 20 | return group, kind, nil 21 | } 22 | -------------------------------------------------------------------------------- /util/http/http_test.go: -------------------------------------------------------------------------------- 1 | package http 2 | 3 | import ( 4 | "strings" 5 | "testing" 6 | 7 | "github.com/stretchr/testify/assert" 8 | ) 9 | 10 | func TestCookieMaxLength(t *testing.T) { 11 | 12 | cookie, err := MakeCookieMetadata("foo", "bar") 13 | assert.NoError(t, err) 14 | assert.Equal(t, "foo=bar", cookie) 15 | 16 | cookie, err = MakeCookieMetadata("foo", strings.Repeat("_", 4093-3)) 17 | assert.EqualError(t, err, "invalid cookie, at 4094 long it is longer than the max length of 4093") 18 | assert.Equal(t, "", cookie) 19 | } 20 | -------------------------------------------------------------------------------- /resource_customizations/cert-manager.io/Issuer/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: Initializing issuer 5 | inputPath: testdata/progressing_noStatus.yaml 6 | - healthStatus: 7 | status: Healthy 8 | message: The ACME account was registered with the ACME server 9 | inputPath: testdata/healthy_registered.yaml 10 | - healthStatus: 11 | status: Degraded 12 | message: "Failed to verify ACME account: acme: : 404 page not found\n" 13 | inputPath: testdata/degraded_acmeFailed.yaml 14 | 15 | -------------------------------------------------------------------------------- /resource_customizations/certmanager.k8s.io/Issuer/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: Initializing issuer 5 | inputPath: testdata/progressing_noStatus.yaml 6 | - healthStatus: 7 | status: Healthy 8 | message: The ACME account was registered with the ACME server 9 | inputPath: testdata/healthy_registered.yaml 10 | - healthStatus: 11 | status: Degraded 12 | message: "Failed to verify ACME account: acme: : 404 page not found\n" 13 | inputPath: testdata/degraded_acmeFailed.yaml 14 | 15 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/dev/params.libsonnet: -------------------------------------------------------------------------------- 1 | local params = std.extVar("__ksonnet/params"); 2 | local globals = import "globals.libsonnet"; 3 | local envParams = params + { 4 | components +: { 5 | // Insert component parameter overrides here. Ex: 6 | // guestbook +: { 7 | // name: "guestbook-dev", 8 | // replicas: params.global.replicas, 9 | // }, 10 | }, 11 | }; 12 | 13 | { 14 | components: { 15 | [x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/c-role.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/sa.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/helm/testdata/dependency/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: foobar 3 | description: A Helm chart for Kubernetes 4 | home: https://localhost 5 | dependencies: 6 | - name: mongodb 7 | version: 7.8.10 8 | repository: https://charts.bitnami.com/bitnami 9 | condition: mongodb.enabled 10 | - name: eventstore 11 | version: 0.2.5 12 | repository: https://eventstore.github.io/EventStore.Charts 13 | condition: eventstore.enabled 14 | maintainers: 15 | - name: estahn 16 | type: application 17 | version: 0.1.0 18 | appVersion: 1.16.0 -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/templates/externaldb-secrets.yaml: -------------------------------------------------------------------------------- 1 | {{- if not .Values.mariadb.enabled }} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ printf "%s-%s" .Release.Name "externaldb" }} 6 | labels: 7 | app: {{ printf "%s-%s" .Release.Name "externaldb" }} 8 | chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | type: Opaque 12 | data: 13 | db-password: {{ .Values.externalDatabase.password | b64enc | quote }} 14 | {{- end }} 15 | -------------------------------------------------------------------------------- /resource_customizations/networking.gke.io/ManagedCertificate/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "At least one certificate is still being provisioned" 5 | inputPath: testdata/provisioning.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "At least one certificate has failed to be provisioned" 9 | inputPath: testdata/failed.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "All certificates are active" 13 | inputPath: testdata/active.yaml 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/environments/default/params.libsonnet: -------------------------------------------------------------------------------- 1 | local params = std.extVar("__ksonnet/params"); 2 | local globals = import "globals.libsonnet"; 3 | local envParams = params + { 4 | components +: { 5 | // Insert component parameter overrides here. Ex: 6 | // guestbook +: { 7 | // name: "guestbook-dev", 8 | // replicas: params.global.replicas, 9 | // }, 10 | }, 11 | }; 12 | 13 | { 14 | components: { 15 | [x]: envParams.components[x] + globals, for x in std.objectFields(envParams.components) 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /manifests/base/repo-server/argocd-repo-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-repo-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: repo-server 8 | name: argocd-repo-server 9 | spec: 10 | ports: 11 | - name: server 12 | protocol: TCP 13 | port: 8081 14 | targetPort: 8081 15 | - name: metrics 16 | protocol: TCP 17 | port: 8084 18 | targetPort: 8084 19 | selector: 20 | app.kubernetes.io/name: argocd-repo-server 21 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/templates/tls-secrets.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled }} 2 | {{- range .Values.ingress.secrets }} 3 | apiVersion: v1 4 | kind: Secret 5 | metadata: 6 | name: {{ .name }} 7 | labels: 8 | app: {{ template "fullname" $ }} 9 | chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" 10 | release: "{{ $.Release.Name }}" 11 | heritage: "{{ $.Release.Service }}" 12 | type: kubernetes.io/tls 13 | data: 14 | tls.crt: {{ .certificate | b64enc }} 15 | tls.key: {{ .key | b64enc }} 16 | --- 17 | {{- end }} 18 | {{- end }} -------------------------------------------------------------------------------- /util/helm/testdata/minio/templates/secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ template "minio.fullname" . }} 5 | labels: 6 | app: {{ template "minio.name" . }} 7 | chart: {{ template "minio.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | type: Opaque 11 | data: 12 | accesskey: {{ .Values.accessKey | b64enc }} 13 | secretkey: {{ .Values.secretKey | b64enc }} 14 | {{- if .Values.gcsgateway.enabled }} 15 | gcs_key.json: {{ .Values.gcsgateway.gcsKeyJson | b64enc }} 16 | {{- end }} -------------------------------------------------------------------------------- /util/helm/testdata/minio/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | description: Minio is a high performance distributed object storage server, designed for large-scale private cloud infrastructure. 3 | name: minio 4 | version: 1.6.0 5 | appVersion: RELEASE.2018-07-10T01-42-11Z 6 | keywords: 7 | - storage 8 | - object-storage 9 | - S3 10 | home: https://minio.io 11 | icon: https://www.minio.io/img/logo_160x160.png 12 | sources: 13 | - https://github.com/minio/minio 14 | maintainers: 15 | - name: Acaleph 16 | email: hello@acale.ph 17 | - name: Minio 18 | email: dev@minio.io 19 | -------------------------------------------------------------------------------- /resource_customizations/argoproj.io/Rollout/actions/discovery.lua: -------------------------------------------------------------------------------- 1 | actions = {} 2 | actions["resume"] = {["disabled"] = false} 3 | actions["restart"] = {["disabled"] = false} 4 | 5 | local paused = false 6 | 7 | if obj.status ~= nil and obj.status.pauseConditions ~= nil then 8 | paused = table.getn(obj.status.pauseConditions) > 0 9 | elseif obj.spec.paused ~= nil then 10 | paused = obj.spec.paused 11 | end 12 | if paused then 13 | actions["resume"]["disabled"] = false 14 | else 15 | actions["resume"]["disabled"] = true 16 | end 17 | 18 | return actions 19 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook/guestbook-ui-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | replicas: 0 7 | revisionHistoryLimit: 3 8 | selector: 9 | matchLabels: 10 | app: guestbook-ui 11 | template: 12 | metadata: 13 | labels: 14 | app: guestbook-ui 15 | spec: 16 | containers: 17 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.2 18 | imagePullPolicy: IfNotPresent 19 | name: guestbook-ui 20 | ports: 21 | - containerPort: 80 22 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/svc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: wordpress 2 | version: 2.1.10 3 | appVersion: 4.9.8 4 | description: Web publishing platform for building blogs and websites. 5 | icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png 6 | keywords: 7 | - wordpress 8 | - cms 9 | - blog 10 | - http 11 | - web 12 | - application 13 | - php 14 | home: http://www.wordpress.com/ 15 | sources: 16 | - https://github.com/bitnami/bitnami-docker-wordpress 17 | maintainers: 18 | - name: bitnami-bot 19 | email: containers@bitnami.com 20 | engine: gotpl 21 | -------------------------------------------------------------------------------- /manifests/base/application-controller/argocd-application-controller-rolebinding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-application-controller 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: application-controller 8 | name: argocd-application-controller 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: Role 12 | name: argocd-application-controller 13 | subjects: 14 | - kind: ServiceAccount 15 | name: argocd-application-controller 16 | -------------------------------------------------------------------------------- /manifests/ha/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | 5 | patchesStrategicMerge: 6 | - overlays/argocd-repo-server-deployment.yaml 7 | - overlays/argocd-server-deployment.yaml 8 | - overlays/argocd-application-controller-statefulset.yaml 9 | 10 | 11 | images: 12 | - name: argoproj/argocd 13 | newName: argoproj/argocd 14 | newTag: latest 15 | resources: 16 | - ../../base/application-controller 17 | - ../../base/dex 18 | - ../../base/repo-server 19 | - ../../base/server 20 | - ../../base/config 21 | - ./redis-ha 22 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/rb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/fixture/testrepos/ssh_host_ecdsa_key: -------------------------------------------------------------------------------- 1 | -----BEGIN OPENSSH PRIVATE KEY----- 2 | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS 3 | 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQQpN5jG3SqHhyib1x6DwB2tA/GWZ7hm 4 | zTdIjPS6NKOdle7xK6QZim9KpJhmo1ake1735QB4ZJknyA1y8+Pz8aeBAAAAsI/h/DWP4f 5 | w1AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCk3mMbdKoeHKJvX 6 | HoPAHa0D8ZZnuGbNN0iM9Lo0o52V7vErpBmKb0qkmGajVqR7XvflAHhkmSfIDXLz4/Pxp4 7 | EAAAAgUhE0Inf5lP5ph20d/AbP0Ng8Q4c8hesBF4RKEFYFXGUAAAARcm9vdEAwZjcyZmJi 8 | NTkzZTEBAgMEBQYH 9 | -----END OPENSSH PRIVATE KEY----- 10 | -------------------------------------------------------------------------------- /hack/installers/install-codegen-go-tools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | GO111MODULE=on go get github.com/gogo/protobuf/gogoproto@v1.3.1 5 | GO111MODULE=on go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.3 6 | GO111MODULE=on go get github.com/golang/protobuf/protoc-gen-go@v1.4.2 7 | GO111MODULE=on go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v1.12.2 8 | GO111MODULE=on go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v1.12.2 9 | GO111MODULE=on go get golang.org/x/tools/cmd/goimports@v0.0.0-20190627203933-19ff4fff8850 10 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook-with-namespace/guestbook-ui-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | spec: 6 | replicas: 0 7 | revisionHistoryLimit: 3 8 | selector: 9 | matchLabels: 10 | app: guestbook-ui 11 | template: 12 | metadata: 13 | labels: 14 | app: guestbook-ui 15 | spec: 16 | containers: 17 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.2 18 | imagePullPolicy: IfNotPresent 19 | name: guestbook-ui 20 | ports: 21 | - containerPort: 80 22 | -------------------------------------------------------------------------------- /util/cache/client.go: -------------------------------------------------------------------------------- 1 | package cache 2 | 3 | import ( 4 | "context" 5 | "errors" 6 | "time" 7 | ) 8 | 9 | var ErrCacheMiss = errors.New("cache: key is missing") 10 | 11 | type Item struct { 12 | Key string 13 | Object interface{} 14 | // Expiration is the cache expiration time. 15 | Expiration time.Duration 16 | } 17 | 18 | type CacheClient interface { 19 | Set(item *Item) error 20 | Get(key string, obj interface{}) error 21 | Delete(key string) error 22 | OnUpdated(ctx context.Context, key string, callback func() error) error 23 | NotifyUpdated(key string) error 24 | } 25 | -------------------------------------------------------------------------------- /resource_customizations/jaegertracing.io/Jaeger/health.lua: -------------------------------------------------------------------------------- 1 | health_status = {} 2 | if obj.status ~= nil then 3 | if obj.status.phase == "Running" then 4 | health_status.status = "Healthy" 5 | health_status.message = "Jaeger is Running" 6 | return health_status 7 | end 8 | if obj.status.phase == "Failed" then 9 | health_status.status = "Degraded" 10 | health_status.message = "Jaeger Failed For Some Reason" 11 | return health_status 12 | end 13 | end 14 | health_status.status = "Progressing" 15 | health_status.message = "Waiting for Jaeger" 16 | return health_status -------------------------------------------------------------------------------- /test/e2e/testdata/always-outofsync/always-outofsync.yaml: -------------------------------------------------------------------------------- 1 | # This manifest will always be out of sync because the empty string for apiGroup will get defaulted 2 | # to rbac.authorization.k8s.io by kubernetes, resulting in a difference. This manifest is useful for 3 | # testing auto-sync and ensuring sure it does not fall into a sync loop. 4 | apiVersion: rbac.authorization.k8s.io/v1 5 | kind: RoleBinding 6 | metadata: 7 | name: always-outofsync 8 | subjects: 9 | - apiGroup: "" 10 | kind: User 11 | name: jane 12 | roleRef: 13 | apiGroup: "" 14 | kind: Role 15 | name: doesnt-matter 16 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/developer-guide/site.md: -------------------------------------------------------------------------------- 1 | # Site 2 | 3 | ## Developing And Testing 4 | 5 | The web site is build using `mkdocs` and `mkdocs-material`. 6 | 7 | To test: 8 | 9 | ```bash 10 | make serve-docs 11 | ``` 12 | 13 | Check for broken external links: 14 | 15 | ```bash 16 | make lint-docs 17 | ``` 18 | 19 | ## Deploying 20 | 21 | ```bash 22 | make publish-docs 23 | ``` 24 | 25 | ## Analytics 26 | 27 | !!! tip 28 | Don't forget to disable your ad-blocker when testing. 29 | 30 | We collect [Google Analytics](https://analytics.google.com/analytics/web/#/report-home/a105170809w198079555p192782995). -------------------------------------------------------------------------------- /hack/installers/install-kubectx-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | . $(dirname $0)/../tool-versions.sh 5 | 6 | [ -e $DOWNLOADS/kubectx.zip ] || curl -sLf --retry 3 -o $DOWNLOADS/kubectx.zip https://github.com/ahmetb/kubectx/archive/v${kubectx_version}.zip 7 | unzip $DOWNLOADS/kubectx.zip kubectx-${kubectx_version}/kubectx -d $DOWNLOADS 8 | unzip $DOWNLOADS/kubectx.zip kubectx-${kubectx_version}/kubens -d $DOWNLOADS 9 | mv $DOWNLOADS/kubectx-${kubectx_version}/kubectx $BIN/ 10 | mv $DOWNLOADS/kubectx-${kubectx_version}/kubens $BIN/ 11 | chmod +x $BIN/kubectx 12 | chmod +x $BIN/kubens 13 | -------------------------------------------------------------------------------- /manifests/cluster-rbac/argocd-application-controller-clusterrolebinding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: ClusterRoleBinding 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-application-controller 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: application-controller 8 | name: argocd-application-controller 9 | roleRef: 10 | apiGroup: rbac.authorization.k8s.io 11 | kind: ClusterRole 12 | name: argocd-application-controller 13 | subjects: 14 | - kind: ServiceAccount 15 | name: argocd-application-controller 16 | namespace: argocd 17 | -------------------------------------------------------------------------------- /test/e2e/testdata/crd-creation/crd.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apiextensions.k8s.io/v1beta1 3 | kind: CustomResourceDefinition 4 | metadata: 5 | name: dummies.argoproj.io 6 | spec: 7 | group: argoproj.io 8 | version: v1alpha1 9 | scope: Namespaced 10 | names: 11 | kind: Dummy 12 | plural: dummies 13 | --- 14 | apiVersion: apiextensions.k8s.io/v1beta1 15 | kind: CustomResourceDefinition 16 | metadata: 17 | name: clusterdummies.argoproj.io 18 | spec: 19 | group: argoproj.io 20 | version: v1alpha1 21 | scope: Cluster 22 | names: 23 | kind: ClusterDummy 24 | plural: clusterdummies 25 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/app.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 0.1.0 2 | environments: 3 | default: 4 | destination: 5 | namespace: default 6 | server: https://kubernetes.default.svc 7 | k8sVersion: v1.10.0 8 | path: default 9 | dev: 10 | destination: 11 | namespace: dev 12 | server: https://kubernetes.default.svc 13 | k8sVersion: v1.10.0 14 | path: dev 15 | prod: 16 | destination: 17 | namespace: prod 18 | server: https://kubernetes.default.svc 19 | k8sVersion: v1.10.0 20 | path: prod 21 | kind: ksonnet.io/app 22 | name: guestbook 23 | version: 0.0.1 24 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: redis 3 | version: 3.6.5 4 | appVersion: 4.0.10 5 | description: Open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. 6 | keywords: 7 | - redis 8 | - keyvalue 9 | - database 10 | home: http://redis.io/ 11 | icon: https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png 12 | sources: 13 | - https://github.com/bitnami/bitnami-docker-redis 14 | maintainers: 15 | - name: bitnami-bot 16 | email: containers@bitnami.com 17 | engine: gotpl 18 | -------------------------------------------------------------------------------- /test/e2e/testdata/guestbook-with-namespace/guestbook-ui-deployment-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: guestbook-ui 5 | namespace: namespace 6 | spec: 7 | replicas: 0 8 | revisionHistoryLimit: 3 9 | selector: 10 | matchLabels: 11 | app: guestbook-ui 12 | template: 13 | metadata: 14 | labels: 15 | app: guestbook-ui 16 | spec: 17 | containers: 18 | - image: gcr.io/heptio-images/ks-guestbook-demo:0.2 19 | imagePullPolicy: IfNotPresent 20 | name: guestbook-ui 21 | ports: 22 | - containerPort: 80 23 | -------------------------------------------------------------------------------- /ui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'node', 4 | reporters: ['default', 'jest-junit'], 5 | collectCoverage: true, 6 | transformIgnorePatterns: ['node_modules/(?!(argo-ui)/)'], 7 | globals: { 8 | 'ts-jest': { 9 | isolatedModules: true, 10 | }, 11 | }, 12 | moduleNameMapper: { 13 | // https://github.com/facebook/jest/issues/3094 14 | '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/__mocks__/fileMock.js', 15 | '.+\\.(css|styl|less|sass|scss)$': 'jest-transform-css', 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /test/e2e/fixture/cmd.go: -------------------------------------------------------------------------------- 1 | package fixture 2 | 3 | import ( 4 | "os" 5 | "os/exec" 6 | "strings" 7 | 8 | argoexec "github.com/argoproj/pkg/exec" 9 | ) 10 | 11 | func Run(workDir, name string, args ...string) (string, error) { 12 | return RunWithStdin("", workDir, name, args...) 13 | } 14 | 15 | func RunWithStdin(stdin, workDir, name string, args ...string) (string, error) { 16 | cmd := exec.Command(name, args...) 17 | if stdin != "" { 18 | cmd.Stdin = strings.NewReader(stdin) 19 | } 20 | cmd.Env = os.Environ() 21 | cmd.Dir = workDir 22 | 23 | return argoexec.RunCommandExt(cmd, argoexec.CmdOpts{}) 24 | } 25 | -------------------------------------------------------------------------------- /util/text/label/label_test.go: -------------------------------------------------------------------------------- 1 | package label 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestParseLabels(t *testing.T) { 10 | validLabels := []string{"key=value", "foo=bar", "intuit=inc"} 11 | 12 | result, err := Parse(validLabels) 13 | assert.NoError(t, err) 14 | assert.Len(t, result, 3) 15 | 16 | invalidLabels := []string{"key=value", "too=many=equals"} 17 | _, err = Parse(invalidLabels) 18 | assert.Error(t, err) 19 | 20 | emptyLabels := []string{} 21 | result, err = Parse(emptyLabels) 22 | assert.NoError(t, err) 23 | assert.Len(t, result, 0) 24 | } 25 | -------------------------------------------------------------------------------- /hack/Dockerfile.dev-tools: -------------------------------------------------------------------------------- 1 | FROM argocd-test-tools:latest as base 2 | 3 | RUN ./install.sh codegen-tools 4 | RUN ./install.sh codegen-go-tools 5 | RUN ./install.sh lint-tools 6 | 7 | RUN mkdir -p /home/user && chmod 777 /home/user 8 | RUN HELM_HOME=/home/user/.helm helm2 init --client-only 9 | 10 | RUN git config --system user.name "ArgoCD Test User" 11 | RUN git config --system user.email "noreply@example.com" 12 | 13 | RUN mkdir -p /go/pkg && chmod 777 /go/pkg 14 | 15 | RUN mkdir -p /home/user/.cache && chmod 777 /home/user/.cache 16 | 17 | RUN apt-get clean && \ 18 | rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 19 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/cm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/cronjob.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /util/healthz/healthz.go: -------------------------------------------------------------------------------- 1 | package healthz 2 | 3 | import ( 4 | "fmt" 5 | "net/http" 6 | 7 | log "github.com/sirupsen/logrus" 8 | ) 9 | 10 | // ServeHealthCheck serves the health check endpoint. 11 | // ServeHealthCheck relies on the provided function to return an error if unhealthy and nil otherwise. 12 | func ServeHealthCheck(mux *http.ServeMux, f func() error) { 13 | mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { 14 | if err := f(); err != nil { 15 | w.WriteHeader(http.StatusServiceUnavailable) 16 | log.Errorln(w, err) 17 | } else { 18 | fmt.Fprintln(w, "ok") 19 | } 20 | }) 21 | } 22 | -------------------------------------------------------------------------------- /manifests/base/dex/argocd-dex-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app.kubernetes.io/name: argocd-dex-server 6 | app.kubernetes.io/part-of: argocd 7 | app.kubernetes.io/component: dex-server 8 | name: argocd-dex-server 9 | spec: 10 | ports: 11 | - name: http 12 | protocol: TCP 13 | port: 5556 14 | targetPort: 5556 15 | - name: grpc 16 | protocol: TCP 17 | port: 5557 18 | targetPort: 5557 19 | - name: metrics 20 | port: 5558 21 | protocol: TCP 22 | targetPort: 5558 23 | selector: 24 | app.kubernetes.io/name: argocd-dex-server 25 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/applications-container.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {Route, RouteComponentProps, Switch} from 'react-router'; 3 | import {ApplicationDetails} from './application-details/application-details'; 4 | import {ApplicationsList} from './applications-list/applications-list'; 5 | 6 | export const ApplicationsContainer = (props: RouteComponentProps) => ( 7 | 8 | 9 | 10 | 11 | ); 12 | -------------------------------------------------------------------------------- /util/helm/testdata/redis/templates/redis-rolebinding.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create -}} 2 | apiVersion: rbac.authorization.k8s.io/v1beta1 3 | kind: RoleBinding 4 | metadata: 5 | name: {{ template "redis.fullname" . }} 6 | labels: 7 | app: {{ template "redis.name" . }} 8 | chart: {{ template "redis.chart" . }} 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | roleRef: 12 | apiGroup: rbac.authorization.k8s.io 13 | kind: Role 14 | name: {{ template "redis.fullname" . }} 15 | subjects: 16 | - kind: ServiceAccount 17 | name: {{ template "redis.serviceAccountName" . }} 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /test/e2e/testdata/openshift/manifests.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: authorization.openshift.io/v1 2 | kind: Role 3 | metadata: 4 | name: test-role 5 | rules: 6 | - apiGroups: 7 | - "" 8 | resources: 9 | - configmaps 10 | - secrets 11 | verbs: 12 | - get 13 | - list 14 | - watch 15 | 16 | --- 17 | apiVersion: authorization.openshift.io/v1 18 | kind: RoleBinding 19 | metadata: 20 | name: test-role-binding 21 | roleRef: 22 | name: test-role 23 | subjects: 24 | - kind: ServiceAccount 25 | name: test 26 | 27 | --- 28 | apiVersion: project.openshift.io/v1 29 | kind: Project 30 | metadata: 31 | name: test 32 | -------------------------------------------------------------------------------- /test/fixture/revision_metadata/author.go: -------------------------------------------------------------------------------- 1 | package revision_metadata 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | argoexec "github.com/argoproj/pkg/exec" 8 | 9 | "github.com/argoproj/gitops-engine/pkg/utils/errors" 10 | ) 11 | 12 | var Author string 13 | 14 | func init() { 15 | userName, err := argoexec.RunCommand("git", argoexec.CmdOpts{}, "config", "--get", "user.name") 16 | errors.CheckError(err) 17 | userEmail, err := argoexec.RunCommand("git", argoexec.CmdOpts{}, "config", "--get", "user.email") 18 | errors.CheckError(err) 19 | Author = fmt.Sprintf("%s <%s>", strings.TrimSpace(userName), strings.TrimSpace(userEmail)) 20 | } 21 | -------------------------------------------------------------------------------- /ui/src/app/settings/components/project-events/project-events.tsx: -------------------------------------------------------------------------------- 1 | import {MockupList} from 'argo-ui'; 2 | import * as React from 'react'; 3 | 4 | import {DataLoader, EventsList} from '../../../shared/components'; 5 | import {services} from '../../../shared/services'; 6 | 7 | export const ProjectEvents = (props: {projectName: string}) => ( 8 |
9 | services.projects.events(props.projectName)} loadingRenderer={() => }> 10 | {events => } 11 | 12 |
13 | ); 14 | -------------------------------------------------------------------------------- /util/text/label/label.go: -------------------------------------------------------------------------------- 1 | package label 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | ) 7 | 8 | const labelFieldDelimiter = "=" 9 | 10 | func Parse(labels []string) (map[string]string, error) { 11 | var selectedLabels map[string]string 12 | if labels != nil { 13 | selectedLabels = map[string]string{} 14 | for _, r := range labels { 15 | fields := strings.Split(r, labelFieldDelimiter) 16 | if len(fields) != 2 { 17 | return nil, fmt.Errorf("labels should have key%svalue, but instead got: %s", labelFieldDelimiter, r) 18 | } 19 | selectedLabels[fields[0]] = fields[1] 20 | } 21 | } 22 | return selectedLabels, nil 23 | } 24 | -------------------------------------------------------------------------------- /resource_customizations/cert-manager.io/Issuer/testdata/progressing_noStatus.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cert-manager.io/v1alpha2 2 | kind: Issuer 3 | metadata: 4 | creationTimestamp: "2018-11-06T23:14:18Z" 5 | generation: 1 6 | name: test-issuer 7 | namespace: argocd 8 | resourceVersion: "48889060" 9 | selfLink: /apis/cert-manager.io/v1alpha2/namespaces/argocd/issuers/argo-cd-issuer 10 | uid: b0045219-e219-11e8-9f93-42010a80021d 11 | spec: 12 | acme: 13 | email: myemail@test.com 14 | http01: {} 15 | privateKeySecretRef: 16 | key: "" 17 | name: letsencrypt 18 | server: https://acme-v02.api.letsencrypt.org/directory 19 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/events-list/events-list.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .events-list { 4 | &__event { 5 | border-left: 5px solid $argo-color-gray-4; 6 | 7 | &--Warning { 8 | border-left-color: $argo-failed-color; 9 | } 10 | 11 | &--Normal { 12 | border-left-color: $argo-success-color; 13 | } 14 | 15 | .row { 16 | line-height: 2; 17 | padding-top: 15px; 18 | padding-bottom: 15px; 19 | } 20 | 21 | .columns { 22 | white-space: normal; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /util/resource/revision.go: -------------------------------------------------------------------------------- 1 | package resource 2 | 3 | import ( 4 | "strconv" 5 | 6 | "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 7 | ) 8 | 9 | func GetRevision(obj *unstructured.Unstructured) int64 { 10 | if obj == nil { 11 | return 0 12 | } 13 | for _, name := range []string{"deployment.kubernetes.io/revision", "rollout.argoproj.io/revision"} { 14 | text, ok := obj.GetAnnotations()[name] 15 | if ok { 16 | revision, _ := strconv.ParseInt(text, 10, 64) 17 | return revision 18 | } 19 | } 20 | 21 | text, ok := obj.UnstructuredContent()["revision"].(int64) 22 | if ok { 23 | return text 24 | } 25 | 26 | return 0 27 | } 28 | -------------------------------------------------------------------------------- /resource_customizations/certmanager.k8s.io/Issuer/testdata/progressing_noStatus.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: certmanager.k8s.io/v1alpha1 2 | kind: Issuer 3 | metadata: 4 | creationTimestamp: "2018-11-06T23:14:18Z" 5 | generation: 1 6 | name: test-issuer 7 | namespace: argocd 8 | resourceVersion: "48889060" 9 | selfLink: /apis/certmanager.k8s.io/v1alpha1/namespaces/argocd/issuers/argo-cd-issuer 10 | uid: b0045219-e219-11e8-9f93-42010a80021d 11 | spec: 12 | acme: 13 | email: myemail@test.com 14 | http01: {} 15 | privateKeySecretRef: 16 | key: "" 17 | name: letsencrypt 18 | server: https://acme-v02.api.letsencrypt.org/directory 19 | -------------------------------------------------------------------------------- /resource_customizations/operator.knative.dev/KnativeServing/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "1: DependenciesInstalled | True\n2: DeploymentsAvailable | True\n3: InstallSucceeded | True\n4: Ready | Unknown\n" 5 | inputPath: testdata/progressing.yaml 6 | - healthStatus: 7 | status: Degraded 8 | message: "1: DependenciesInstalled | True\n2: DeploymentsAvailable | True\n3: InstallSucceeded | True\n4: Ready | randomstatus\n" 9 | inputPath: testdata/degraded.yaml 10 | - healthStatus: 11 | status: Healthy 12 | message: "KnativeServing is healthy." 13 | inputPath: testdata/healthy.yaml 14 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/application-conditions/application-conditions.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .application-conditions { 4 | &__condition { 5 | border-left: 5px solid $argo-color-gray-4; 6 | 7 | &--error { 8 | border-left-color: $argo-failed-color-dark; 9 | } 10 | 11 | &--warning { 12 | border-left-color: $argo-failed-color-light; 13 | } 14 | 15 | &--info { 16 | border-left-color: $argo-success-color; 17 | } 18 | 19 | .columns { 20 | white-space: normal; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /hack/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | export DOWNLOADS=/tmp/dl 5 | export BIN=${BIN:-/usr/local/bin} 6 | 7 | mkdir -p $DOWNLOADS 8 | 9 | ARCHITECTURE="" 10 | case $(uname -m) in 11 | x86_64) ARCHITECTURE="amd64" ;; 12 | arm|armv7l|armv8l|aarch64) dpkg --print-architecture | grep -q "arm64" && ARCHITECTURE="arm64" || ARCHITECTURE="arm" ;; 13 | esac 14 | 15 | if [ -z "$ARCHITECTURE" ]; then 16 | echo "Could not detect the architecture of the system" 17 | exit 1 18 | fi 19 | 20 | for product in $*; do 21 | ARCHITECTURE=$ARCHITECTURE "$(dirname $0)/installers/install-${product}.sh" 22 | done 23 | -------------------------------------------------------------------------------- /ui/src/app/shared/context.ts: -------------------------------------------------------------------------------- 1 | import {AppContext as ArgoAppContext, NavigationApi, NotificationsApi, PopupApi} from 'argo-ui'; 2 | import {History} from 'history'; 3 | import * as React from 'react'; 4 | 5 | export type AppContext = ArgoAppContext & {apis: {popup: PopupApi; notifications: NotificationsApi; navigation: NavigationApi; baseHref: string}}; 6 | 7 | export interface ContextApis { 8 | popup: PopupApi; 9 | notifications: NotificationsApi; 10 | navigation: NavigationApi; 11 | baseHref: string; 12 | } 13 | export const Context = React.createContext(null); 14 | export const {Provider, Consumer} = Context; 15 | -------------------------------------------------------------------------------- /ui/src/app/applications/components/application-create-panel/application-create-panel.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .application-create-panel { 4 | 5 | &__yaml-button { 6 | position: absolute; 7 | right: 1em; 8 | top: 1em; 9 | } 10 | 11 | &__sync-params { 12 | padding-top: 5px; 13 | } 14 | 15 | .checkbox-container { 16 | margin: 0.5em ; 17 | } 18 | 19 | pre { 20 | font-family: monospace; 21 | line-height: normal; 22 | white-space: pre; 23 | } 24 | 25 | .row.argo-form-row .columns { 26 | padding-left: 0; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /util/helm/testdata/helm2-dependency/templates/secrets.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ template "fullname" . }} 5 | labels: 6 | app: {{ template "fullname" . }} 7 | chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" 8 | release: "{{ .Release.Name }}" 9 | heritage: "{{ .Release.Service }}" 10 | type: Opaque 11 | data: 12 | {{ if .Values.wordpressPassword }} 13 | wordpress-password: {{ default "" .Values.wordpressPassword | b64enc | quote }} 14 | {{ else }} 15 | wordpress-password: {{ randAlphaNum 10 | b64enc | quote }} 16 | {{ end }} 17 | smtp-password: {{ default "" .Values.smtpPassword | b64enc | quote }} 18 | -------------------------------------------------------------------------------- /test/fixture/test/ci.go: -------------------------------------------------------------------------------- 1 | package test 2 | 3 | import ( 4 | "os" 5 | "testing" 6 | ) 7 | 8 | // invoke this method to indicate test that should be skipped on CI, i.e. you only need it for manual testing/locally 9 | func LocalOnly(t *testing.T) { 10 | if os.Getenv("CI") == "true" { 11 | t.Skipf("test %s skipped when envvar CI=true", t.Name()) 12 | } 13 | } 14 | 15 | // invoke this method to indicate test should only run on CI, i.e. edge-case test on code that rarely changes and needs 16 | // extra software install 17 | func CIOnly(t *testing.T) { 18 | if os.Getenv("CI") != "true" { 19 | t.Skipf("test %s skipped when envvar CI!=true", t.Name()) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ui/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "tslint:recommended", "tslint-react", "tslint-plugin-prettier", "tslint-config-prettier" 4 | ], 5 | "jsRules": {}, 6 | "rules": { 7 | "prettier": true, 8 | "quotemark": [true, "single"], 9 | "no-var-requires": false, 10 | "interface-name": false, 11 | "jsx-no-multiline-js": false, 12 | "object-literal-sort-keys": false, 13 | "jsx-alignment": false, 14 | "max-line-length": [true, 180], 15 | "jsx-no-lambda": false, 16 | "array-type": false, 17 | "max-classes-per-file": false 18 | }, 19 | "rulesDirectory": [] 20 | } 21 | -------------------------------------------------------------------------------- /test/e2e/pruning_required_test.go: -------------------------------------------------------------------------------- 1 | package e2e 2 | 3 | import ( 4 | "testing" 5 | 6 | . "github.com/argoproj/gitops-engine/pkg/sync/common" 7 | 8 | . "github.com/argoproj/argo-cd/test/e2e/fixture/app" 9 | ) 10 | 11 | // check we fail with message if we delete a non-prunable resource 12 | func TestPruningRequired(t *testing.T) { 13 | Given(t). 14 | Path("two-nice-pods"). 15 | Prune(false). 16 | When(). 17 | IgnoreErrors(). 18 | Create(). 19 | Sync(). 20 | Then(). 21 | Expect(OperationPhaseIs(OperationSucceeded)). 22 | When(). 23 | DeleteFile("pod-2.yaml"). 24 | Sync(). 25 | Then(). 26 | Expect(Error("", "1 resources require pruning")) 27 | } 28 | -------------------------------------------------------------------------------- /test/e2e/testdata/ksonnet/components/params.libsonnet: -------------------------------------------------------------------------------- 1 | { 2 | global: { 3 | // User-defined global parameters; accessible to all component and environments, Ex: 4 | // replicas: 4, 5 | }, 6 | components: { 7 | // Component-level parameters, defined initially from 'ks prototype use ...' 8 | // Each object below should correspond to a component in the components/ directory 9 | "guestbook-ui": { 10 | containerPort: 80, 11 | image: "gcr.io/heptio-images/ks-guestbook-demo:0.2", 12 | name: "ks-guestbook-ui", 13 | replicas: 0, 14 | servicePort: 80, 15 | type: "ClusterIP", 16 | command: null, 17 | }, 18 | }, 19 | } 20 | -------------------------------------------------------------------------------- /cmd/argocd/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/argoproj/gitops-engine/pkg/utils/errors" 5 | 6 | commands "github.com/argoproj/argo-cd/cmd/argocd/commands" 7 | 8 | // load the gcp plugin (required to authenticate against GKE clusters). 9 | _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" 10 | // load the oidc plugin (required to authenticate with OpenID Connect). 11 | _ "k8s.io/client-go/plugin/pkg/client/auth/oidc" 12 | // load the azure plugin (required to authenticate with AKS clusters). 13 | _ "k8s.io/client-go/plugin/pkg/client/auth/azure" 14 | ) 15 | 16 | func main() { 17 | err := commands.NewCommand().Execute() 18 | errors.CheckError(err) 19 | } 20 | -------------------------------------------------------------------------------- /resource_customizations/kafka.banzaicloud.io/KafkaCluster/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Kafka Cluster is Reconciling." 5 | inputPath: testdata/reconciling.yaml 6 | - healthStatus: 7 | status: Progressing 8 | message: "Waiting for KafkaCluster" 9 | inputPath: testdata/updating.yaml 10 | - healthStatus: 11 | status: Degraded 12 | message: "Broker Config is out of Sync or CruiseControlState is not Ready" 13 | inputPath: testdata/degraded.yaml 14 | - healthStatus: 15 | status: Healthy 16 | message: "Kafka Brokers, CruiseControl and cluster are in Healthy State." 17 | inputPath: testdata/healthy.yaml 18 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/empty-state/empty-state.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .empty-state { 4 | text-align: center; 5 | &__icon { 6 | position: relative; 7 | background-color: $argo-color-gray-4; 8 | width: 15em; 9 | height: 15em; 10 | border-radius: 7.5em; 11 | margin: 2em auto; 12 | i { 13 | position: absolute; 14 | top: 50%; 15 | left: 50%; 16 | transform: translateY(-50%) translateX(-50%); 17 | color: white; 18 | &::before { 19 | font-size: 10em; 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ui/src/app/shared/services/user-service.ts: -------------------------------------------------------------------------------- 1 | import {UserInfo} from '../models'; 2 | import requests from './requests'; 3 | 4 | export class UserService { 5 | public login(username: string, password: string): Promise<{token: string}> { 6 | return requests 7 | .post('/session') 8 | .send({username, password}) 9 | .then(res => ({token: res.body.token})); 10 | } 11 | 12 | public logout(): Promise { 13 | return requests.delete('/session').then(() => true); 14 | } 15 | 16 | public get(): Promise { 17 | return requests.get('/session/userinfo').then(res => res.body as UserInfo); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ui/src/app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./../../dist/app", 4 | "sourceMap": true, 5 | "noImplicitAny": true, 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "target": "es5", 9 | "jsx": "react", 10 | "experimentalDecorators": true, 11 | "noUnusedLocals": true, 12 | "declaration": false, 13 | "lib": [ 14 | "es2017", 15 | "dom" 16 | ] 17 | }, 18 | "include": [ 19 | "./**/*" 20 | ], 21 | "exclude": [ 22 | "node_modules", 23 | "./**/*.test.ts", 24 | "./**/*.test.tsx" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /cmd/argocd-server/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/argoproj/gitops-engine/pkg/utils/errors" 5 | 6 | commands "github.com/argoproj/argo-cd/cmd/argocd-server/commands" 7 | 8 | // load the gcp plugin (required to authenticate against GKE clusters). 9 | _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" 10 | // load the oidc plugin (required to authenticate with OpenID Connect). 11 | _ "k8s.io/client-go/plugin/pkg/client/auth/oidc" 12 | // load the azure plugin (required to authenticate with AKS clusters). 13 | _ "k8s.io/client-go/plugin/pkg/client/auth/azure" 14 | ) 15 | 16 | func main() { 17 | err := commands.NewCommand().Execute() 18 | errors.CheckError(err) 19 | } 20 | -------------------------------------------------------------------------------- /resource_customizations/stacks.crossplane.io/ClusterStackInstall/health.lua: -------------------------------------------------------------------------------- 1 | hs = { 2 | status = "Progressing", 3 | message = "Waiting for stack to be installed" 4 | } 5 | if obj.status ~= nil then 6 | if obj.status.conditionedStatus ~= nil then 7 | if obj.status.conditionedStatus.conditions ~= nil then 8 | for i, condition in ipairs(obj.status.conditionedStatus.conditions) do 9 | if condition.type == "Ready" then 10 | hs.message = condition.reason 11 | if condition.status == "True" then 12 | hs.status = "Healthy" 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | end 19 | end 20 | return hs 21 | -------------------------------------------------------------------------------- /test/e2e/fixture/util.go: -------------------------------------------------------------------------------- 1 | package fixture 2 | 3 | import ( 4 | "regexp" 5 | "strings" 6 | ) 7 | 8 | var ( 9 | matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)") 10 | matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])") 11 | ) 12 | 13 | // returns dns friends string which is no longer than 63 characters and has specified postfix at the end 14 | func DnsFriendly(str string, postfix string) string { 15 | str = matchFirstCap.ReplaceAllString(str, "${1}-${2}") 16 | str = matchAllCap.ReplaceAllString(str, "${1}-${2}") 17 | str = strings.ToLower(str) 18 | 19 | if diff := len(str) + len(postfix) - 63; diff > 0 { 20 | str = str[:len(str)-diff] 21 | } 22 | return str + postfix 23 | } 24 | -------------------------------------------------------------------------------- /util/helm/helmver_test.go: -------------------------------------------------------------------------------- 1 | package helm 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestGetHelmVersion_Helm3(t *testing.T) { 10 | ver, err := getHelmVersion("./testdata/minio") 11 | assert.NoError(t, err) 12 | assert.Equal(t, ver.binaryName, HelmV3.binaryName) 13 | } 14 | 15 | func TestGetHelmVersion_Helm2(t *testing.T) { 16 | ver, err := getHelmVersion("./testdata/helm2-dependency") 17 | assert.NoError(t, err) 18 | assert.Equal(t, ver.binaryName, HelmV2.binaryName) 19 | } 20 | 21 | func TestGetHelmVersion_InvalidVersion(t *testing.T) { 22 | _, err := getHelmVersion("./testdata/invalid-version") 23 | assert.Error(t, err) 24 | } 25 | -------------------------------------------------------------------------------- /resource_customizations/argoproj.io/AnalysisRun/testdata/pendingAnalysisRun.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: AnalysisRun 3 | metadata: 4 | name: analysis-template 5 | spec: 6 | metrics: 7 | - name: memory-usage 8 | interval: 10 9 | successCondition: result > 95 10 | failureCondition: result < 92 11 | provider: 12 | prometheus: 13 | address: http://prometheus-operator-prometheus.prometheus-operator:9090 14 | query: | 15 | sum(rate(nginx_ingress_controller_requests{ingress="canary-demo-preview",status!~"[4-5].*"}[2m])) / sum(rate(nginx_ingress_controller_requests{ingress="canary-demo-preview"}[2m])) 16 | status: 17 | phase: Pending -------------------------------------------------------------------------------- /resource_customizations/cert-manager.io/Issuer/health.lua: -------------------------------------------------------------------------------- 1 | hs = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | if condition.type == "Ready" and condition.status == "False" then 6 | hs.status = "Degraded" 7 | hs.message = condition.message 8 | return hs 9 | end 10 | if condition.type == "Ready" and condition.status == "True" then 11 | hs.status = "Healthy" 12 | hs.message = condition.message 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | 19 | hs.status = "Progressing" 20 | hs.message = "Initializing issuer" 21 | return hs 22 | -------------------------------------------------------------------------------- /resource_customizations/kafka.strimzi.io/KafkaConnect/health.lua: -------------------------------------------------------------------------------- 1 | hs = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | if condition.type == "NotReady" and condition.status == "True" then 6 | hs.status = "Degraded" 7 | hs.message = condition.message 8 | return hs 9 | end 10 | if condition.type == "Ready" and condition.status == "True" then 11 | hs.status = "Healthy" 12 | hs.message = "" 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | 19 | hs.status = "Progressing" 20 | hs.message = "Waiting for Kafka Connect" 21 | return hs 22 | -------------------------------------------------------------------------------- /resource_customizations/kiali.io/Kiali/health.lua: -------------------------------------------------------------------------------- 1 | health_status = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | health_status.message = condition.message 6 | if condition.reason == "Successful" then 7 | health_status.status = "Healthy" 8 | elseif condition.reason == "Running" then 9 | health_status.status = "Progressing" 10 | else 11 | health_status.status = "Degraded" 12 | end 13 | return health_status 14 | end 15 | end 16 | end 17 | health_status.status = "Progressing" 18 | health_status.message = "Waiting for Kiali" 19 | return health_status -------------------------------------------------------------------------------- /test/fixture/certs/ssh_known_hosts: -------------------------------------------------------------------------------- 1 | [localhost]:2222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLle3IiLWy+Cwz6/JT3K8PSGAEZAJnaxiWk0u9wkAvbZ9wHTffctg25coBa8J4Oo1l5GTIkezib2C4PjCE01BZM= 2 | [localhost]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhRWyu6rg0Kd0ugLxNGZ8gzUjasF4Z0oT16RUC/L9EkJWATAu4TkkoozZ5AcejlS29jUZXTkKt0La4dmIooeMDNd8b5vg1dWzSDDHwxd8Wa/4XZsUlL6zkUFrnqOPaFc/7EwM3I30064zT/Gt0BVvQUxKoT/TTea2KhQqeLmlWh4cVWJBuhZ8YODUf2VD4TSYfvpcqW/jVw2oG8Pj3WIaaG2+Bcp4Q4sJS2K+2kkiqmZ/hiPK1X/UbMRN2zWQBp5UPWFY2ctuC9B8yhLwAyMkHzuWLfB39dNEdn1jTjDsOUWbC3kDsWHsY5gtBxN30NizBWC+83NpaWbrzAlGb0JV1 3 | [localhost]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG2t7Tcavp5oUqbbSwEKRaGwEq94b8BFK16AEBbgRCTp 4 | -------------------------------------------------------------------------------- /resource_customizations/certmanager.k8s.io/Issuer/health.lua: -------------------------------------------------------------------------------- 1 | hs = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | if condition.type == "Ready" and condition.status == "False" then 6 | hs.status = "Degraded" 7 | hs.message = condition.message 8 | return hs 9 | end 10 | if condition.type == "Ready" and condition.status == "True" then 11 | hs.status = "Healthy" 12 | hs.message = condition.message 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | 19 | hs.status = "Progressing" 20 | hs.message = "Initializing issuer" 21 | return hs 22 | -------------------------------------------------------------------------------- /test/e2e/fixture/tmpl.go: -------------------------------------------------------------------------------- 1 | package fixture 2 | 3 | import ( 4 | "bytes" 5 | "regexp" 6 | "strings" 7 | "text/template" 8 | 9 | . "github.com/argoproj/gitops-engine/pkg/utils/errors" 10 | ) 11 | 12 | // utility method to template a string using a map 13 | func Tmpl(text string, values interface{}) string { 14 | parse, err := template.New(text).Parse(text) 15 | CheckError(err) 16 | buf := new(bytes.Buffer) 17 | err = parse.Execute(buf, values) 18 | CheckError(err) 19 | return buf.String() 20 | } 21 | 22 | // utility method to deal with white-space 23 | func NormalizeOutput(text string) string { 24 | return regexp.MustCompile(` +`). 25 | ReplaceAllString(strings.TrimSpace(text), " ") 26 | } 27 | -------------------------------------------------------------------------------- /ui/src/assets/images/resources/netpol.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg/apis/application/register.go: -------------------------------------------------------------------------------- 1 | package application 2 | 3 | const ( 4 | // API Group 5 | Group string = "argoproj.io" 6 | 7 | // Application constants 8 | ApplicationKind string = "Application" 9 | ApplicationSingular string = "application" 10 | ApplicationPlural string = "applications" 11 | ApplicationShortName string = "app" 12 | ApplicationFullName string = ApplicationPlural + "." + Group 13 | 14 | // AppProject constants 15 | AppProjectKind string = "AppProject" 16 | AppProjectSingular string = "appproject" 17 | AppProjectPlural string = "appprojects" 18 | AppProjectShortName string = "appproject" 19 | AppProjectFullName string = AppProjectPlural + "." + Group 20 | ) 21 | -------------------------------------------------------------------------------- /resource_customizations/cert-manager.io/Certificate/health.lua: -------------------------------------------------------------------------------- 1 | hs = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | if condition.type == "Ready" and condition.status == "False" then 6 | hs.status = "Degraded" 7 | hs.message = condition.message 8 | return hs 9 | end 10 | if condition.type == "Ready" and condition.status == "True" then 11 | hs.status = "Healthy" 12 | hs.message = condition.message 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | 19 | hs.status = "Progressing" 20 | hs.message = "Waiting for certificate" 21 | return hs 22 | -------------------------------------------------------------------------------- /resource_customizations/certmanager.k8s.io/Certificate/health.lua: -------------------------------------------------------------------------------- 1 | hs = {} 2 | if obj.status ~= nil then 3 | if obj.status.conditions ~= nil then 4 | for i, condition in ipairs(obj.status.conditions) do 5 | if condition.type == "Ready" and condition.status == "False" then 6 | hs.status = "Degraded" 7 | hs.message = condition.message 8 | return hs 9 | end 10 | if condition.type == "Ready" and condition.status == "True" then 11 | hs.status = "Healthy" 12 | hs.message = condition.message 13 | return hs 14 | end 15 | end 16 | end 17 | end 18 | 19 | hs.status = "Progressing" 20 | hs.message = "Waiting for certificate" 21 | return hs 22 | -------------------------------------------------------------------------------- /resource_customizations/install.istio.io/IstioOperator/health_test.yaml: -------------------------------------------------------------------------------- 1 | tests: 2 | - healthStatus: 3 | status: Progressing 4 | message: "Component is being updated to a different version." 5 | inputPath: testdata/progressing_updating.yaml 6 | - healthStatus: 7 | status: Progressing 8 | message: "Controller has started but not yet completed reconciliation loop for the component." 9 | inputPath: testdata/progressing_reconciling.yaml 10 | - healthStatus: 11 | status: Degraded 12 | message: "Component is in an error state." 13 | inputPath: testdata/degraded.yaml 14 | - healthStatus: 15 | status: Healthy 16 | message: "Component is healthy." 17 | inputPath: testdata/healthy.yaml --------------------------------------------------------------------------------