├── hack ├── custom-boilerplate.go.txt ├── nsswitch.conf ├── types.go ├── os.sh ├── jsonschema │ └── types.go ├── swagger │ ├── types.go │ └── main.go ├── auto-gen-msg.sh ├── free-port.sh ├── null_docgen.go ├── pull-build-images.sh ├── arch.sh ├── update-image-tags.sh ├── recurl.sh ├── capture-pprof.sh ├── main.go ├── cli │ └── main.go └── test-examples.sh ├── server ├── .gitignore ├── auth │ ├── rbac │ │ └── config.go │ └── authorizer.go ├── static │ ├── files.go.stub │ └── response-rewriter.go ├── apiserver │ └── config.go └── types │ └── clients.go ├── test ├── e2e │ ├── .gitignore │ ├── functional │ │ ├── ci.yaml │ │ ├── loops.yaml │ │ ├── steps.yaml │ │ ├── secrets.yaml │ │ ├── sidecar.yaml │ │ ├── coinflip.yaml │ │ ├── dag-nested.yaml │ │ ├── k8s-jobs.yaml │ │ ├── loops-dag.yaml │ │ ├── loops-maps.yaml │ │ ├── testvolume.yaml │ │ ├── conditionals.yaml │ │ ├── daemon-nginx.yaml │ │ ├── daemon-step.yaml │ │ ├── dag-coinflip.yaml │ │ ├── dag-diamond.yaml │ │ ├── dag-targets.yaml │ │ ├── hello-world.yaml │ │ ├── scripts-bash.yaml │ │ ├── sidecar-dind.yaml │ │ ├── volumes-pvc.yaml │ │ ├── dag-daemon-task.yaml │ │ ├── dag-multiroot.yaml │ │ ├── global-outputs.yaml │ │ ├── init-container.yaml │ │ ├── loops-sequence.yaml │ │ ├── nested-workflow.yaml │ │ ├── node-selector.yaml │ │ ├── retry-container.yaml │ │ ├── scripts-python.yaml │ │ ├── sidecar-nginx.yaml │ │ ├── artifact-passing.yaml │ │ ├── continue-on-fail.yaml │ │ ├── dag-diamond-steps.yaml │ │ ├── global-parameters.yaml │ │ ├── k8s-orchestration.yaml │ │ ├── output-parameter.yaml │ │ ├── parallelism-limit.yaml │ │ ├── retry-with-steps.yaml │ │ ├── suspend-template.yaml │ │ ├── volumes-emptydir.yaml │ │ ├── volumes-existing.yaml │ │ ├── arguments-artifacts.yaml │ │ ├── arguments-parameters.yaml │ │ ├── ci-output-artifact.yaml │ │ ├── coinflip-recursive.yaml │ │ ├── input-artifact-http.yaml │ │ ├── input-artifact-raw.yaml │ │ ├── loops-param-argument.yaml │ │ ├── loops-param-result.yaml │ │ ├── parallelism-nested.yaml │ │ ├── scripts-javascript.yaml │ │ ├── artifact-disable-archive.yaml │ │ ├── parameter-aggregation-dag.yaml │ │ ├── parameter-aggregation-script.yaml │ │ ├── retry-container-to-completion.yaml │ │ ├── success-event.yaml │ │ ├── synchronization-mutex-wf-level.yaml │ │ ├── synchronization-mutex-wf-level-1.yaml │ │ ├── sidecar-force-kill.yaml │ │ ├── workflow_level_host_aliases.yaml │ │ ├── template_level_host_aliases.yaml │ │ ├── hello-world.json │ │ ├── script-with-volume.yaml │ │ ├── stop-terminate-2.yaml │ │ ├── workflow_teemplate_level_host_aliases.yaml │ │ ├── stop-terminate.yaml │ │ ├── dag-with-retries.yaml │ │ ├── retry-script.yaml │ │ └── script-with-input-art.yaml │ ├── expectedfailures │ │ ├── exit-handlers.yaml │ │ ├── timeouts-step.yaml │ │ ├── timeouts-workflow.yaml │ │ ├── oom-kill.yaml │ │ ├── failed-step-event.yaml │ │ ├── large-workflow.yaml │ │ ├── exit-handler-failed.yaml │ │ └── unschedulable.yaml │ ├── manifests │ │ ├── argo-ns.yaml │ │ ├── stress │ │ │ ├── workflow-controller-pprof-service.yaml │ │ │ ├── argo-server-deployment.yaml │ │ │ ├── workflow-controller-configmap.yaml │ │ │ ├── kustomization.yaml │ │ │ └── workflow-controller-deployment.yaml │ │ ├── mixins │ │ │ ├── workflow-controller-deployment.yaml │ │ │ ├── argo-server-deployment.yaml │ │ │ └── workflow-controller-configmap.yaml │ │ ├── sso │ │ │ └── kustomization.yaml │ │ ├── postgres │ │ │ └── kustomization.yaml │ │ └── prometheus │ │ │ └── kustomization.yaml │ ├── images │ │ └── argosay │ │ │ ├── v2 │ │ │ ├── Dockerfile │ │ │ └── argosay │ │ │ └── v1 │ │ │ └── Dockerfile │ ├── http_logger.go │ ├── smoke │ │ ├── basic-2.yaml │ │ ├── basic.yaml │ │ ├── runasnonroot-workflow.yaml │ │ └── hello-world-workflow-tmpl.yaml │ ├── testdata │ │ ├── wellformed │ │ │ ├── wellformed-workflow-with-workflow-template-ref.yaml │ │ │ ├── wellformed-workflow-with-malformed-workflow-template-ref.yaml │ │ │ ├── wellformed-workflow-with-cluster-workflow-template-ref.yaml │ │ │ ├── wellformed-workflow-with-malformed-cluster-workflow-template-ref.yaml │ │ │ ├── wellformed-workflowtemplate.yaml │ │ │ ├── wellformed-clusterworkflowtemplate.yaml │ │ │ └── wellformed-cronworkflow.yaml │ │ ├── malformed │ │ │ ├── malformed-workflowtemplate-2.yaml │ │ │ ├── malformed-workflow.yaml │ │ │ ├── malformed-workflowtemplate.yaml │ │ │ ├── malformed-clusterworkflowtemplate.yaml │ │ │ └── malformed-cronworkflow.yaml │ │ ├── exit-1.yaml │ │ ├── sleep-3s.yaml │ │ ├── workflow-templates │ │ │ ├── workflowtemplate.yaml │ │ │ └── invalid-workflowtemplate.yaml │ │ ├── sleepy-workflow.yaml │ │ ├── basic-workflow.yaml │ │ ├── cannot-start-workflow.yaml │ │ ├── basic-workflowtemplate.yaml │ │ ├── basic-clusterworkflowtemplate.yaml │ │ ├── pending-workflow.yaml │ │ ├── workflow-template-ref.yaml │ │ ├── argo-server-test-role.yaml │ │ ├── workflow-template-ref-exithandler.yaml │ │ ├── basic-cronworkflow.yaml │ │ ├── retry-on-error-workflow.yaml │ │ ├── semaphore-wf-level.yaml │ │ ├── cluster-workflow-template-ref.yaml │ │ ├── sidecar-workflow.yaml │ │ ├── semaphore-wf-level-1.yaml │ │ ├── two-items.yaml │ │ ├── artifact-workflow.yaml │ │ ├── output-on-input-workflow.yaml │ │ ├── output-on-mount-workflow.yaml │ │ ├── sidecar-injected-workflow.yaml │ │ ├── retry-omit.yaml │ │ ├── input-on-mount-workflow.yaml │ │ ├── same-input-output-path-optional.yaml │ │ └── storage-limit.yaml │ ├── client.go │ ├── lintfail │ │ ├── disallow-unknown.yaml │ │ ├── invalid-spec.yaml │ │ └── malformed-spec.yaml │ └── cron │ │ └── basic.yaml └── util │ ├── workflow.go │ └── unstructured.go ├── workflow ├── executor │ ├── testdata │ │ ├── file │ │ ├── kubectl │ │ ├── file.gz │ │ ├── file.tgz │ │ ├── file.zip │ │ └── file.tar.gz │ ├── os-specific │ │ ├── chroot_windows.go │ │ ├── chroot_darwin.go │ │ ├── chroot_linux.go │ │ ├── umask_windows.go │ │ ├── umask_darwin.go │ │ ├── umask_linux.go │ │ ├── signal_darwin.go │ │ ├── signal_linux.go │ │ └── signal_windows.go │ ├── k8sapi │ │ └── k8sapi_test.go │ └── emissary │ │ ├── multi_reader_closer_test.go │ │ └── multi_reader_closer.go ├── artifacts │ ├── resource │ │ └── resource.go │ ├── common │ │ └── common.go │ └── s3 │ │ └── errors_test.go ├── controller │ ├── testdata │ │ ├── workflow-template-ref.yaml │ │ └── workflow-template-submittable.yaml │ ├── indexes │ │ ├── pod_index.go │ │ ├── uid_index.go │ │ └── configmap_index.go │ ├── estimation │ │ ├── dummy_estimator_factory.go │ │ └── dummy_estimator.go │ ├── http_template.go │ └── config_test.go ├── metrics │ ├── pod_missing_metric.go │ └── workflow_condition_metric.go ├── sync │ ├── common.go │ └── chain_throttler_test.go ├── common │ └── placeholder_test.go ├── artifactrepositories │ └── mocks │ │ └── default.go └── hydrator │ └── fake │ └── noop.go ├── ui ├── tsconfig.json ├── __mocks__ │ └── styleMock.js ├── .gitignore ├── src │ ├── app │ │ ├── typings.d.ts │ │ ├── login │ │ │ ├── components │ │ │ │ └── login.scss │ │ │ └── index.tsx │ │ ├── pipelines │ │ │ ├── components │ │ │ │ ├── pipeline-list │ │ │ │ │ └── pipeline-list.scss │ │ │ │ ├── pipeline-details │ │ │ │ │ ├── recent.ts │ │ │ │ │ ├── recent.test.ts │ │ │ │ │ └── pipeline.scss │ │ │ │ └── pipeline-container.tsx │ │ │ └── index.ts │ │ ├── help │ │ │ └── index.tsx │ │ ├── event-sources │ │ │ ├── components │ │ │ │ ├── event-source-list │ │ │ │ │ └── event-source-list.scss │ │ │ │ └── event-source-container.tsx │ │ │ └── index.ts │ │ ├── apidocs │ │ │ ├── index.tsx │ │ │ └── components │ │ │ │ └── apiDocs.tsx │ │ ├── userinfo │ │ │ └── index.tsx │ │ ├── assets │ │ │ └── fonts │ │ │ │ └── Heebo-Regular.ttf │ │ ├── shared │ │ │ ├── services │ │ │ │ ├── responses.ts │ │ │ │ └── event-service.ts │ │ │ ├── footnote.tsx │ │ │ ├── components │ │ │ │ ├── loading.tsx │ │ │ │ ├── phase.tsx │ │ │ │ ├── phase-icon.tsx │ │ │ │ ├── notice.tsx │ │ │ │ ├── link-button.tsx │ │ │ │ ├── query.tsx │ │ │ │ ├── text-input.tsx │ │ │ │ ├── example-manifests.tsx │ │ │ │ ├── namespace-filter.tsx │ │ │ │ ├── zero-state.tsx │ │ │ │ ├── fa-icons.tsx │ │ │ │ ├── object-parser.ts │ │ │ │ ├── number-input.tsx │ │ │ │ ├── progress-line.tsx │ │ │ │ ├── security-nudge.tsx │ │ │ │ ├── inline-table │ │ │ │ │ └── inline-table.scss │ │ │ │ ├── toggle-button.tsx │ │ │ │ ├── resource-editor │ │ │ │ │ └── resource.scss │ │ │ │ ├── drop-down-button.scss │ │ │ │ ├── cost-optimisation-nudge.tsx │ │ │ │ ├── graph │ │ │ │ │ └── layout.ts │ │ │ │ └── timestamp.tsx │ │ │ ├── pagination.ts │ │ │ ├── use-query-params.ts │ │ │ ├── cron.tsx │ │ │ ├── base.ts │ │ │ ├── debounce.ts │ │ │ └── context.ts │ │ ├── reports │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ └── report-container.tsx │ │ ├── sensors │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ └── sensors-container.tsx │ │ ├── workflows │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── workflow-logs-viewer │ │ │ │ └── workflow-logs-viewer.scss │ │ │ │ ├── workflow-dag │ │ │ │ ├── genres.ts │ │ │ │ └── icons.ts │ │ │ │ ├── workflow-link.tsx │ │ │ │ ├── workflow-details │ │ │ │ └── workflow-resource-panel.tsx │ │ │ │ └── workflows-container.tsx │ │ ├── event-flow │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── event-flow-container.tsx │ │ │ │ └── event-flow-details │ │ │ │ ├── genres.ts │ │ │ │ └── event-flow-page.scss │ │ ├── cron-workflows │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── cron-workflow-list │ │ │ │ └── cron-workflow-list.scss │ │ │ │ ├── cron-workflow-link.tsx │ │ │ │ └── cron-workflow-container.tsx │ │ ├── archived-workflows │ │ │ └── index.ts │ │ ├── workflow-templates │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── workflow-template-list │ │ │ │ └── workflow-template-list.scss │ │ │ │ └── workflow-template-link.tsx │ │ ├── workflow-event-bindings │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── workflow-event-bindings │ │ │ │ └── id.ts │ │ │ │ └── workflow-event-bindings-container.tsx │ │ ├── cluster-workflow-templates │ │ │ ├── index.ts │ │ │ └── components │ │ │ │ ├── cluster-workflow-template-list │ │ │ │ └── cluster-workflow-template-list.scss │ │ │ │ └── cluster-workflow-template-link.tsx │ │ ├── index.tsx │ │ ├── tsconfig.json │ │ └── index.html │ └── models │ │ ├── submit-opts.ts │ │ ├── index.ts │ │ ├── info.ts │ │ ├── cluster-workflow-templates.ts │ │ ├── pipeline.ts │ │ └── workflow-templates.ts ├── .yarnrc ├── .prettierrc ├── jest.config.js ├── test │ └── ui │ │ └── ui-workflow-error.yaml ├── README.md └── .snyk ├── pkg ├── apiclient │ ├── clusterworkflowtemplate │ │ └── testy.txt │ ├── workflow │ │ ├── workflow.go │ │ └── forwarder_overwrite.go │ ├── workflowtemplate │ │ └── workflowtemplate.go │ ├── sensor │ │ └── forwarder_overwrite.go │ ├── http1 │ │ ├── event-watch-client.go │ │ ├── pod-logs-client.go │ │ ├── watch-workflows-client.go │ │ └── facade_test.go │ ├── eventsource │ │ └── forwarder_overwrite.go │ ├── pipeline │ │ └── forwarder_overwrite.go │ └── apiclient_test.go ├── client │ └── clientset │ │ └── versioned │ │ ├── doc.go │ │ ├── fake │ │ └── doc.go │ │ ├── scheme │ │ └── doc.go │ │ └── typed │ │ └── workflow │ │ └── v1alpha1 │ │ ├── fake │ │ └── doc.go │ │ ├── doc.go │ │ └── generated_expansion.go └── apis │ └── workflow │ └── v1alpha1 │ ├── doc.go │ ├── generated.swagger.json │ ├── estimated_duration.go │ ├── estimated_duration_test.go │ ├── data_types_test.go │ ├── cron_workflow_types_test.go │ ├── workflow_phase_test.go │ └── workflow_template_types_test.go ├── CODEOWNERS ├── docs ├── assets │ ├── argo.png │ ├── logo.png │ ├── diagram.png │ ├── videos.png │ ├── ecosystem.png │ ├── katacoda.png │ ├── overview.jpeg │ ├── ide-step-1.png │ ├── ide-step-2.png │ ├── ide-step-3.png │ ├── screenshot.png │ ├── architecture.jpeg │ ├── intellij-ide-step-1-config.png │ ├── vscode-ide-step-3-spec-schema.png │ ├── vscode-ide-step-1-install-plugin.png │ ├── vscode-ide-step-2-schema-settings.png │ ├── vscode-ide-step-4-example-functionality.png │ └── intellij-ide-step-1-example-functionality.png ├── swagger.md ├── architecture.md ├── versioning.md ├── static-code-analysis.md ├── public-api.md ├── widgets.md ├── disaster-recovery.md ├── kubectl.md └── workflow-creator.md ├── manifests ├── base │ ├── crds │ │ ├── minimal │ │ │ ├── README.md │ │ │ └── kustomization.yaml │ │ ├── kustomization.yaml │ │ └── full │ │ │ ├── README.md │ │ │ └── kustomization.yaml │ ├── argo-server │ │ ├── argo-server-sa.yaml │ │ ├── kustomization.yaml │ │ └── argo-server-service.yaml │ ├── workflow-controller │ │ ├── workflow-controller-sa.yaml │ │ ├── workflow-controller-configmap.yaml │ │ ├── kustomization.yaml │ │ └── workflow-controller-metrics-service.yaml │ └── kustomization.yaml ├── quick-start │ ├── sso │ │ ├── dex │ │ │ ├── dex-sa.yaml │ │ │ ├── dev-svc.yaml │ │ │ ├── dex-role.yaml │ │ │ ├── dex-rb.yaml │ │ │ └── kustomization.yaml │ │ ├── kustomization.yaml │ │ └── overlays │ │ │ ├── argo-server-sa.yaml │ │ │ └── workflow-controller-configmap.yaml │ ├── base │ │ ├── webhooks │ │ │ ├── github.com-sa.yaml │ │ │ ├── kustomization.yaml │ │ │ └── github.com-rolebinding.yaml │ │ ├── argo-server-sso-secret.yaml │ │ ├── minio │ │ │ ├── kustomization.yaml │ │ │ ├── my-minio-cred-secret.yaml │ │ │ └── minio-service.yaml │ │ ├── prometheus │ │ │ ├── kustomization.yaml │ │ │ ├── prometheus-service.yaml │ │ │ └── prometheus-config-cluster.yaml │ │ ├── kubelet-executor-clusterrole.yaml │ │ ├── workflow-default-rolebinding.yaml │ │ ├── kubelet-executor-default-clusterrolebinding.yaml │ │ ├── overlays │ │ │ └── argo-server-deployment.yaml │ │ └── kustomization.yaml │ ├── minimal │ │ └── kustomization.yaml │ ├── mysql │ │ ├── argo-mysql-config-secret.yaml │ │ ├── mysql-service.yaml │ │ └── kustomization.yaml │ └── postgres │ │ ├── argo-postgres-config-secret.yaml │ │ ├── postgres-service.yaml │ │ └── kustomization.yaml ├── namespace-install │ ├── overlays │ │ ├── argo-server-deployment.yaml │ │ └── workflow-controller-deployment.yaml │ ├── argo-server-rbac │ │ ├── kustomization.yaml │ │ └── argo-server-rolebinding.yaml │ ├── workflow-controller-rbac │ │ ├── kustomization.yaml │ │ └── workflow-controller-rolebinding.yaml │ └── kustomization.yaml └── cluster-install │ ├── kustomization.yaml │ ├── argo-server-rbac │ ├── kustomization.yaml │ └── argo-server-clusterolebinding.yaml │ └── workflow-controller-rbac │ ├── workflow-controller-rolebinding.yaml │ ├── kustomization.yaml │ ├── workflow-controller-clusterrolebinding.yaml │ └── workflow-controller-role.yaml ├── config ├── image.go ├── node_events.go └── node_events_test.go ├── OWNERS ├── util ├── intstr │ └── parse.go ├── json │ ├── fix_test.go │ ├── jsonify.go │ └── fix.go ├── help │ └── topics.go ├── cmd │ └── glog.go ├── diff │ └── diff.go ├── kubeconfig │ └── roundtripper.go ├── logs │ └── log-entries.go ├── template │ ├── kind_test.go │ ├── expression_template_test.go │ └── validate.go ├── slice │ └── slice.go ├── wait │ └── backoff.go └── python │ └── python.go ├── examples ├── workflow-template │ ├── workflow-template-ref.yaml │ ├── workflow-template-ref-with-entrypoint-arg-passing.yaml │ ├── workflow-archive-logs.yaml │ └── hello-world.yaml ├── configmaps │ └── simple-parameters-configmap.yaml ├── cluster-workflow-template │ ├── workflow-template-ref.yaml │ └── workflow-template-ref-with-entrypoint-arg-passing.yaml ├── forever.yaml ├── hello-windows.yaml ├── testvolume.yaml ├── dag-inline-cronworkflow.yaml ├── workflow-event-binding │ └── event-consumer-workfloweventbinding.yaml ├── archive-location.yaml ├── sidecar-nginx.yaml ├── default-pdb-support.yaml ├── input-artifact-raw.yaml ├── pod-spec-patch.yaml ├── dag-inline-workflowtemplate.yaml ├── artifact-repository-ref.yaml ├── dag-inline-clusterworkflowtemplate.yaml ├── retry-container.yaml ├── pod-spec-yaml-patch.yaml ├── retry-container-to-completion.yaml ├── hello-world.yaml ├── init-container.yaml ├── retry-script.yaml ├── synchronization-mutex-wf-level.yaml ├── timeouts-step.yaml ├── validation_test.go ├── parallelism-limit.yaml └── input-artifact-http.yaml ├── cmd ├── argo │ ├── commands │ │ ├── server_test.go │ │ ├── auth │ │ │ ├── root.go │ │ │ └── token.go │ │ ├── common_test.go │ │ ├── archive │ │ │ └── root.go │ │ ├── client │ │ │ └── conn_test.go │ │ └── template │ │ │ └── root.go │ └── main.go └── argoexec │ └── commands │ └── data.go ├── persist └── sqldb │ ├── ansi_sql_change.go │ └── db_type.go ├── .dockerignore ├── community └── README.md ├── .codecov.yml ├── .github ├── ISSUE_TEMPLATE │ └── enhancement_proposal.md └── pull_request_template.md └── SECURITY.md /hack/custom-boilerplate.go.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | /static/files.go -------------------------------------------------------------------------------- /test/e2e/.gitignore: -------------------------------------------------------------------------------- 1 | kubeconfig -------------------------------------------------------------------------------- /workflow/executor/testdata/file: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | src/app/tsconfig.json -------------------------------------------------------------------------------- /hack/nsswitch.conf: -------------------------------------------------------------------------------- 1 | hosts: files dns 2 | -------------------------------------------------------------------------------- /pkg/apiclient/clusterworkflowtemplate/testy.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ui/__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | *.proto @jessesuen @alexec 2 | 3 | -------------------------------------------------------------------------------- /test/e2e/functional/ci.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/ci.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops.yaml -------------------------------------------------------------------------------- /test/e2e/functional/steps.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/steps.yaml -------------------------------------------------------------------------------- /test/e2e/functional/secrets.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/secrets.yaml -------------------------------------------------------------------------------- /test/e2e/functional/sidecar.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/sidecar.yaml -------------------------------------------------------------------------------- /test/e2e/functional/coinflip.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/coinflip.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-nested.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-nested.yaml -------------------------------------------------------------------------------- /test/e2e/functional/k8s-jobs.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/k8s-jobs.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops-dag.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops-dag.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops-maps.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops-maps.yaml -------------------------------------------------------------------------------- /test/e2e/functional/testvolume.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/testvolume.yaml -------------------------------------------------------------------------------- /ui/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | bundle 4 | .vscode 5 | 6 | -------------------------------------------------------------------------------- /hack/types.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type obj = map[string]interface{} 4 | -------------------------------------------------------------------------------- /test/e2e/functional/conditionals.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/conditionals.yaml -------------------------------------------------------------------------------- /test/e2e/functional/daemon-nginx.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/daemon-nginx.yaml -------------------------------------------------------------------------------- /test/e2e/functional/daemon-step.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/daemon-step.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-coinflip.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-coinflip.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-diamond.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-diamond.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-targets.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-targets.yaml -------------------------------------------------------------------------------- /test/e2e/functional/hello-world.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/hello-world.yaml -------------------------------------------------------------------------------- /test/e2e/functional/scripts-bash.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/scripts-bash.yaml -------------------------------------------------------------------------------- /test/e2e/functional/sidecar-dind.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/sidecar-dind.yaml -------------------------------------------------------------------------------- /test/e2e/functional/volumes-pvc.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/volumes-pvc.yaml -------------------------------------------------------------------------------- /hack/os.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | uname -s|tr '[:upper:]' '[:lower:]' -------------------------------------------------------------------------------- /test/e2e/functional/dag-daemon-task.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-daemon-task.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-multiroot.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-multiroot.yaml -------------------------------------------------------------------------------- /test/e2e/functional/global-outputs.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/global-outputs.yaml -------------------------------------------------------------------------------- /test/e2e/functional/init-container.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/init-container.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops-sequence.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops-sequence.yaml -------------------------------------------------------------------------------- /test/e2e/functional/nested-workflow.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/nested-workflow.yaml -------------------------------------------------------------------------------- /test/e2e/functional/node-selector.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/node-selector.yaml -------------------------------------------------------------------------------- /test/e2e/functional/retry-container.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/retry-container.yaml -------------------------------------------------------------------------------- /test/e2e/functional/scripts-python.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/scripts-python.yaml -------------------------------------------------------------------------------- /test/e2e/functional/sidecar-nginx.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/sidecar-nginx.yaml -------------------------------------------------------------------------------- /test/e2e/expectedfailures/exit-handlers.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/exit-handlers.yaml -------------------------------------------------------------------------------- /test/e2e/expectedfailures/timeouts-step.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/timeouts-step.yaml -------------------------------------------------------------------------------- /test/e2e/functional/artifact-passing.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/artifact-passing.yaml -------------------------------------------------------------------------------- /test/e2e/functional/continue-on-fail.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/continue-on-fail.yaml -------------------------------------------------------------------------------- /test/e2e/functional/dag-diamond-steps.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/dag-diamond-steps.yaml -------------------------------------------------------------------------------- /test/e2e/functional/global-parameters.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/global-parameters.yaml -------------------------------------------------------------------------------- /test/e2e/functional/k8s-orchestration.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/k8s-orchestration.yaml -------------------------------------------------------------------------------- /test/e2e/functional/output-parameter.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/output-parameter.yaml -------------------------------------------------------------------------------- /test/e2e/functional/parallelism-limit.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/parallelism-limit.yaml -------------------------------------------------------------------------------- /test/e2e/functional/retry-with-steps.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/retry-with-steps.yaml -------------------------------------------------------------------------------- /test/e2e/functional/suspend-template.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/suspend-template.yaml -------------------------------------------------------------------------------- /test/e2e/functional/volumes-emptydir.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/volumes-emptydir.yaml -------------------------------------------------------------------------------- /test/e2e/functional/volumes-existing.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/volumes-existing.yaml -------------------------------------------------------------------------------- /ui/src/app/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare var SYSTEM_INFO: { version: string; }; 2 | 3 | -------------------------------------------------------------------------------- /hack/jsonschema/types.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type obj = map[string]interface{} 4 | -------------------------------------------------------------------------------- /test/e2e/expectedfailures/timeouts-workflow.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/timeouts-workflow.yaml -------------------------------------------------------------------------------- /test/e2e/functional/arguments-artifacts.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/arguments-artifacts.yaml -------------------------------------------------------------------------------- /test/e2e/functional/arguments-parameters.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/arguments-parameters.yaml -------------------------------------------------------------------------------- /test/e2e/functional/ci-output-artifact.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/ci-output-artifact.yaml -------------------------------------------------------------------------------- /test/e2e/functional/coinflip-recursive.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/coinflip-recursive.yaml -------------------------------------------------------------------------------- /test/e2e/functional/input-artifact-http.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/input-artifact-http.yaml -------------------------------------------------------------------------------- /test/e2e/functional/input-artifact-raw.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/input-artifact-raw.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops-param-argument.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops-param-argument.yaml -------------------------------------------------------------------------------- /test/e2e/functional/loops-param-result.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/loops-param-result.yaml -------------------------------------------------------------------------------- /test/e2e/functional/parallelism-nested.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/parallelism-nested.yaml -------------------------------------------------------------------------------- /test/e2e/functional/scripts-javascript.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/scripts-javascript.yaml -------------------------------------------------------------------------------- /ui/src/app/login/components/login.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | -------------------------------------------------------------------------------- /workflow/executor/testdata/kubectl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "i/o timeout" >&2 4 | exit 1 5 | -------------------------------------------------------------------------------- /test/e2e/functional/artifact-disable-archive.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/artifact-disable-archive.yaml -------------------------------------------------------------------------------- /test/e2e/functional/parameter-aggregation-dag.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/parameter-aggregation-dag.yaml -------------------------------------------------------------------------------- /test/e2e/manifests/argo-ns.yaml: -------------------------------------------------------------------------------- 1 | kind: Namespace 2 | apiVersion: v1 3 | metadata: 4 | name: argo -------------------------------------------------------------------------------- /docs/assets/argo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/argo.png -------------------------------------------------------------------------------- /docs/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/logo.png -------------------------------------------------------------------------------- /manifests/base/crds/minimal/README.md: -------------------------------------------------------------------------------- 1 | # Minimal CRDs 2 | 3 | These CRDs omit schema validation. 4 | -------------------------------------------------------------------------------- /docs/assets/diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/diagram.png -------------------------------------------------------------------------------- /docs/assets/videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/videos.png -------------------------------------------------------------------------------- /test/e2e/functional/parameter-aggregation-script.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/parameter-aggregation-script.yaml -------------------------------------------------------------------------------- /test/e2e/functional/retry-container-to-completion.yaml: -------------------------------------------------------------------------------- 1 | ../../../examples/retry-container-to-completion.yaml -------------------------------------------------------------------------------- /docs/assets/ecosystem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/ecosystem.png -------------------------------------------------------------------------------- /docs/assets/katacoda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/katacoda.png -------------------------------------------------------------------------------- /docs/assets/overview.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/overview.jpeg -------------------------------------------------------------------------------- /docs/assets/ide-step-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/ide-step-1.png -------------------------------------------------------------------------------- /docs/assets/ide-step-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/ide-step-2.png -------------------------------------------------------------------------------- /docs/assets/ide-step-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/ide-step-3.png -------------------------------------------------------------------------------- /docs/assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/screenshot.png -------------------------------------------------------------------------------- /manifests/quick-start/sso/dex/dex-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: dex 5 | -------------------------------------------------------------------------------- /pkg/apiclient/workflow/workflow.go: -------------------------------------------------------------------------------- 1 | package workflow 2 | 3 | //go:generate mockery -name WorkflowServiceClient 4 | -------------------------------------------------------------------------------- /ui/src/app/pipelines/components/pipeline-list/pipeline-list.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | -------------------------------------------------------------------------------- /docs/assets/architecture.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/architecture.jpeg -------------------------------------------------------------------------------- /hack/swagger/types.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | type ( 4 | obj = map[string]interface{} 5 | array = []interface{} 6 | ) 7 | -------------------------------------------------------------------------------- /test/e2e/images/argosay/v2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM argoproj/argosay:v1 2 | 3 | ADD argosay / 4 | 5 | ENTRYPOINT ["/argosay"] 6 | -------------------------------------------------------------------------------- /manifests/base/argo-server/argo-server-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: argo-server 5 | -------------------------------------------------------------------------------- /ui/src/app/help/index.tsx: -------------------------------------------------------------------------------- 1 | import {Help} from './components/help'; 2 | 3 | export default { 4 | component: Help 5 | }; 6 | -------------------------------------------------------------------------------- /hack/auto-gen-msg.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eu -o pipefail 3 | 4 | echo "# This is an auto-generated file. DO NOT EDIT" 5 | cat -------------------------------------------------------------------------------- /ui/src/app/event-sources/components/event-source-list/event-source-list.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | -------------------------------------------------------------------------------- /ui/src/app/login/index.tsx: -------------------------------------------------------------------------------- 1 | import {Login} from './components/login'; 2 | 3 | export default { 4 | component: Login 5 | }; 6 | -------------------------------------------------------------------------------- /workflow/executor/testdata/file.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/workflow/executor/testdata/file.gz -------------------------------------------------------------------------------- /workflow/executor/testdata/file.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/workflow/executor/testdata/file.tgz -------------------------------------------------------------------------------- /workflow/executor/testdata/file.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/workflow/executor/testdata/file.zip -------------------------------------------------------------------------------- /manifests/base/workflow-controller/workflow-controller-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: argo 5 | -------------------------------------------------------------------------------- /manifests/quick-start/base/webhooks/github.com-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: github.com 5 | -------------------------------------------------------------------------------- /ui/src/app/apidocs/index.tsx: -------------------------------------------------------------------------------- 1 | import {ApiDocs} from './components/apiDocs'; 2 | 3 | export default { 4 | component: ApiDocs 5 | }; 6 | -------------------------------------------------------------------------------- /workflow/executor/testdata/file.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/workflow/executor/testdata/file.tar.gz -------------------------------------------------------------------------------- /ui/src/app/userinfo/index.tsx: -------------------------------------------------------------------------------- 1 | import {UserInfo} from './components/user-info'; 2 | 3 | export default { 4 | component: UserInfo 5 | }; 6 | -------------------------------------------------------------------------------- /docs/assets/intellij-ide-step-1-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/intellij-ide-step-1-config.png -------------------------------------------------------------------------------- /manifests/base/crds/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - minimal 6 | -------------------------------------------------------------------------------- /pkg/apiclient/workflowtemplate/workflowtemplate.go: -------------------------------------------------------------------------------- 1 | package workflowtemplate 2 | 3 | //go:generate mockery -name WorkflowTemplateServiceClient 4 | -------------------------------------------------------------------------------- /ui/.yarnrc: -------------------------------------------------------------------------------- 1 | --add.ignore-optional true 2 | --install.ignore-optional true 3 | --install.frozen-lockfile true 4 | --install.non-interactive true 5 | -------------------------------------------------------------------------------- /ui/src/app/assets/fonts/Heebo-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/ui/src/app/assets/fonts/Heebo-Regular.ttf -------------------------------------------------------------------------------- /ui/src/app/shared/services/responses.ts: -------------------------------------------------------------------------------- 1 | export interface WorkflowDeleteResponse { 2 | workflowName: string; 3 | status: string; 4 | } 5 | -------------------------------------------------------------------------------- /docs/assets/vscode-ide-step-3-spec-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/vscode-ide-step-3-spec-schema.png -------------------------------------------------------------------------------- /ui/src/models/submit-opts.ts: -------------------------------------------------------------------------------- 1 | export interface SubmitOpts { 2 | entryPoint?: string; 3 | parameters?: string[]; 4 | labels?: string; 5 | } 6 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/chroot_windows.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | func CallChroot() error { 4 | return nil // no chroot on windows 5 | } 6 | -------------------------------------------------------------------------------- /config/image.go: -------------------------------------------------------------------------------- 1 | package config 2 | 3 | type Image struct { 4 | Command []string `json:"command"` 5 | Args []string `json:"args,omitempty"` 6 | } 7 | -------------------------------------------------------------------------------- /docs/assets/vscode-ide-step-1-install-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/vscode-ide-step-1-install-plugin.png -------------------------------------------------------------------------------- /manifests/quick-start/minimal/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../base 6 | -------------------------------------------------------------------------------- /docs/assets/vscode-ide-step-2-schema-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/vscode-ide-step-2-schema-settings.png -------------------------------------------------------------------------------- /hack/free-port.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | port=$1 5 | 6 | lsof -s TCP:LISTEN -i ":$port" | grep -v PID | awk '{print $2}' | xargs -L 1 kill || true 7 | -------------------------------------------------------------------------------- /manifests/base/workflow-controller/workflow-controller-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: workflow-controller-configmap 5 | -------------------------------------------------------------------------------- /manifests/namespace-install/overlays/argo-server-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /spec/template/spec/containers/0/args/- 3 | value: 4 | --namespaced 5 | -------------------------------------------------------------------------------- /ui/src/app/reports/index.ts: -------------------------------------------------------------------------------- 1 | import {ReportsContainer} from './components/report-container'; 2 | 3 | export default { 4 | component: ReportsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/sensors/index.ts: -------------------------------------------------------------------------------- 1 | import {SensorsContainer} from './components/sensors-container'; 2 | 3 | export default { 4 | component: SensorsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /docs/assets/vscode-ide-step-4-example-functionality.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/vscode-ide-step-4-example-functionality.png -------------------------------------------------------------------------------- /docs/swagger.md: -------------------------------------------------------------------------------- 1 | # Argo Server API 2 | 3 | [Open the Swagger API docs](https://raw.githubusercontent.com/argoproj/argo-workflows/master/api/openapi-spec/swagger.json). 4 | -------------------------------------------------------------------------------- /manifests/namespace-install/overlays/workflow-controller-deployment.yaml: -------------------------------------------------------------------------------- 1 | - op: add 2 | path: /spec/template/spec/containers/0/args/- 3 | value: 4 | --namespaced 5 | -------------------------------------------------------------------------------- /ui/src/app/pipelines/index.ts: -------------------------------------------------------------------------------- 1 | import {PipelineContainer} from './components/pipeline-container'; 2 | 3 | export default { 4 | component: PipelineContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/workflows/index.ts: -------------------------------------------------------------------------------- 1 | import {WorkflowsContainer} from './components/workflows-container'; 2 | 3 | export default { 4 | component: WorkflowsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /docs/assets/intellij-ide-step-1-example-functionality.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canonical/argo-workflows/master/docs/assets/intellij-ide-step-1-example-functionality.png -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/src/app/event-flow/index.ts: -------------------------------------------------------------------------------- 1 | import {EventFlowContainer} from './components/event-flow-container'; 2 | 3 | export default { 4 | component: EventFlowContainer 5 | }; 6 | -------------------------------------------------------------------------------- /manifests/base/crds/full/README.md: -------------------------------------------------------------------------------- 1 | # Full CRDs 2 | 3 | These CRDs have full schema validation. As a result, they are large and probably not suitable to be used in your cluster. 4 | -------------------------------------------------------------------------------- /manifests/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - crds 6 | - workflow-controller 7 | - argo-server 8 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/src/app/cron-workflows/index.ts: -------------------------------------------------------------------------------- 1 | import {CronWorkflowContainer} from './components/cron-workflow-container'; 2 | 3 | export default { 4 | component: CronWorkflowContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/event-sources/index.ts: -------------------------------------------------------------------------------- 1 | import {EventSourceContainer} from './components/event-source-container'; 2 | 3 | export default { 4 | component: EventSourceContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/shared/footnote.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | export const Footnote = ({children}: {children: React.ReactNode}) =>

{children}

; 4 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/chroot_darwin.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | import "syscall" 4 | 5 | func CallChroot() error { 6 | err := syscall.Chroot(".") 7 | return err 8 | } 9 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/chroot_linux.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | import "syscall" 4 | 5 | func CallChroot() error { 6 | err := syscall.Chroot(".") 7 | return err 8 | } 9 | -------------------------------------------------------------------------------- /hack/null_docgen.go: -------------------------------------------------------------------------------- 1 | // +build fields 2 | 3 | package main 4 | 5 | func generateDocs() { 6 | panic("hack package was built with 'fields' tag; doc generation code was not included") 7 | } 8 | -------------------------------------------------------------------------------- /hack/pull-build-images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu -o pipefail 3 | 4 | grep FROM Dockerfile.dev | grep 'builder$\|argoexec-base$' | awk '{print $2}' | while read image; do docker pull $image; done 5 | -------------------------------------------------------------------------------- /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/workflow/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 | -------------------------------------------------------------------------------- /manifests/cluster-install/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../base 6 | - ./workflow-controller-rbac 7 | - ./argo-server-rbac 8 | -------------------------------------------------------------------------------- /pkg/client/clientset/versioned/typed/workflow/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 | -------------------------------------------------------------------------------- /ui/src/app/archived-workflows/index.ts: -------------------------------------------------------------------------------- 1 | import {ArchivedWorkflowContainer} from './components/archived-workflow-container'; 2 | 3 | export default { 4 | component: ArchivedWorkflowContainer 5 | }; 6 | -------------------------------------------------------------------------------- /ui/src/app/workflow-templates/index.ts: -------------------------------------------------------------------------------- 1 | import {WorkflowTemplateContainer} from './components/workflow-template-container'; 2 | 3 | export default { 4 | component: WorkflowTemplateContainer 5 | }; 6 | -------------------------------------------------------------------------------- /manifests/namespace-install/argo-server-rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argo-server-role.yaml 6 | - argo-server-rolebinding.yaml 7 | -------------------------------------------------------------------------------- /manifests/quick-start/sso/dex/dev-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: dex 5 | spec: 6 | ports: 7 | - name: http 8 | port: 5556 9 | selector: 10 | app: dex 11 | -------------------------------------------------------------------------------- /pkg/apis/workflow/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 | -------------------------------------------------------------------------------- /manifests/quick-start/base/argo-server-sso-secret.yaml: -------------------------------------------------------------------------------- 1 | kind: Secret 2 | apiVersion: v1 3 | metadata: 4 | name: argo-server-sso 5 | stringData: 6 | clientID: argo-server 7 | clientSecret: ZXhhbXBsZS1hcHAtc2VjcmV0 8 | -------------------------------------------------------------------------------- /server/auth/rbac/config.go: -------------------------------------------------------------------------------- 1 | package rbac 2 | 3 | type Config struct { 4 | Enabled bool `json:"enabled,omitempty"` 5 | } 6 | 7 | func (c *Config) IsEnabled() bool { 8 | return c != nil && c.Enabled 9 | } 10 | -------------------------------------------------------------------------------- /server/static/files.go.stub: -------------------------------------------------------------------------------- 1 | // File built without static files 2 | package static 3 | 4 | import "net/http" 5 | 6 | func ServeHTTP(http.ResponseWriter, *http.Request) {} 7 | 8 | func Hash(string) string { return "" } 9 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/umask_windows.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | func AllowGrantingAccessToEveryone() { 4 | // There's no umask in Windows. 5 | // TODO: figure out how we can allow this in Windows. 6 | } 7 | -------------------------------------------------------------------------------- /manifests/base/argo-server/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argo-server-deployment.yaml 6 | - argo-server-sa.yaml 7 | - argo-server-service.yaml 8 | -------------------------------------------------------------------------------- /manifests/cluster-install/argo-server-rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - argo-server-clusterole.yaml 6 | - argo-server-clusterolebinding.yaml 7 | -------------------------------------------------------------------------------- /ui/src/app/workflow-event-bindings/index.ts: -------------------------------------------------------------------------------- 1 | import {WorkflowEventBindingsContainer} from './components/workflow-event-bindings-container'; 2 | 3 | export default { 4 | component: WorkflowEventBindingsContainer 5 | }; 6 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | owners: 2 | - alexec 3 | 4 | reviewers: 5 | - terrytangyuan 6 | - xianlubird 7 | 8 | approvers: 9 | - alexec 10 | - alexmt 11 | - dtaniwaki 12 | - edlee2121 13 | - jessesuen 14 | - sarabala1979 15 | - simster7 16 | -------------------------------------------------------------------------------- /manifests/quick-start/base/minio/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - minio-deploy.yaml 6 | - minio-service.yaml 7 | - my-minio-cred-secret.yaml 8 | -------------------------------------------------------------------------------- /test/e2e/http_logger.go: -------------------------------------------------------------------------------- 1 | package e2e 2 | 3 | import log "github.com/sirupsen/logrus" 4 | 5 | type httpLogger struct{} 6 | 7 | func (d *httpLogger) Logf(fmt string, args ...interface{}) { 8 | log.Debugf(fmt, args...) 9 | } 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ui/src/app/cluster-workflow-templates/index.ts: -------------------------------------------------------------------------------- 1 | import {ClusterWorkflowTemplateContainer} from './components/cluster-workflow-template-container'; 2 | 3 | export default { 4 | component: ClusterWorkflowTemplateContainer 5 | }; 6 | -------------------------------------------------------------------------------- /hack/arch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | arch=$(uname -m) 5 | 6 | case $arch in 7 | x86_64) 8 | echo amd64 9 | ;; 10 | aarch64) 11 | echo arm64 12 | ;; 13 | *) 14 | echo $arch 15 | ;; 16 | esac 17 | -------------------------------------------------------------------------------- /manifests/namespace-install/workflow-controller-rbac/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - workflow-controller-role.yaml 6 | - workflow-controller-rolebinding.yaml 7 | -------------------------------------------------------------------------------- /util/intstr/parse.go: -------------------------------------------------------------------------------- 1 | package intstr 2 | 3 | import "k8s.io/apimachinery/pkg/util/intstr" 4 | 5 | // convenience func to get a pointer 6 | func ParsePtr(val string) *intstr.IntOrString { 7 | x := intstr.Parse(val) 8 | return &x 9 | } 10 | -------------------------------------------------------------------------------- /manifests/quick-start/base/prometheus/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - prometheus-deployment.yaml 6 | - prometheus-config-cluster.yaml 7 | - prometheus-service.yaml 8 | -------------------------------------------------------------------------------- /manifests/quick-start/base/prometheus/prometheus-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: prometheus 5 | spec: 6 | selector: 7 | app: prometheus 8 | ports: 9 | - name: metrics 10 | port: 9090 11 | -------------------------------------------------------------------------------- /examples/workflow-template/workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: workflow-template-hello-world- 5 | spec: 6 | workflowTemplateRef: 7 | name: workflow-template-submittable 8 | 9 | -------------------------------------------------------------------------------- /manifests/quick-start/base/minio/my-minio-cred-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | stringData: 3 | accesskey: admin 4 | secretkey: password 5 | kind: Secret 6 | metadata: 7 | name: my-minio-cred 8 | labels: 9 | app: minio 10 | type: Opaque 11 | -------------------------------------------------------------------------------- /manifests/quick-start/mysql/argo-mysql-config-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | stringData: 3 | username: mysql 4 | password: password 5 | kind: Secret 6 | metadata: 7 | name: argo-mysql-config 8 | labels: 9 | app: mysql 10 | type: Opaque 11 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/loading.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {MockupList} from '../../../../node_modules/argo-ui'; 3 | 4 | export const Loading = () => ( 5 |
6 | 7 |
8 | ); 9 | -------------------------------------------------------------------------------- /examples/configmaps/simple-parameters-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: simple-parameters 5 | namespace: argo 6 | labels: 7 | workflows.argoproj.io/configmap-type: Parameter 8 | data: 9 | msg: 'hello world' 10 | -------------------------------------------------------------------------------- /manifests/base/argo-server/argo-server-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: argo-server 5 | spec: 6 | selector: 7 | app: argo-server 8 | ports: 9 | - name: web 10 | port: 2746 11 | targetPort: 2746 12 | -------------------------------------------------------------------------------- /test/e2e/smoke/basic-2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: basic-2 5 | spec: 6 | entrypoint: run-workflow 7 | templates: 8 | - name: run-workflow 9 | container: 10 | image: argoproj/argosay:v2 -------------------------------------------------------------------------------- /ui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | "transformIgnorePatterns": [ 4 | "node_modules/(?!(argo-ui)/)" 5 | ], 6 | "moduleNameMapper": { 7 | "\\.(css|scss)$": "/__mocks__/styleMock.js" 8 | }, 9 | }; -------------------------------------------------------------------------------- /hack/update-image-tags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu -o pipefail 3 | 4 | dir=$1 5 | image_tag=$2 6 | 7 | find "$dir" -type f -name '*.yaml' | while read -r f ; do 8 | sed "s|argoproj/\(.*\):.*|argoproj/\1:${image_tag}|" "$f" > .tmp 9 | mv .tmp "$f" 10 | done 11 | -------------------------------------------------------------------------------- /manifests/quick-start/postgres/argo-postgres-config-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | stringData: 3 | username: postgres 4 | password: password 5 | kind: Secret 6 | metadata: 7 | name: argo-postgres-config 8 | labels: 9 | app: postgres 10 | type: Opaque 11 | -------------------------------------------------------------------------------- /workflow/artifacts/resource/resource.go: -------------------------------------------------------------------------------- 1 | package resource 2 | 3 | import "context" 4 | 5 | type Interface interface { 6 | GetSecret(ctx context.Context, name, key string) (string, error) 7 | GetConfigMapKey(ctx context.Context, name, key string) (string, error) 8 | } 9 | -------------------------------------------------------------------------------- /test/e2e/manifests/stress/workflow-controller-pprof-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: workflow-controller-pprof 5 | spec: 6 | selector: 7 | app: workflow-controller 8 | ports: 9 | - name: metrics 10 | port: 6060 11 | -------------------------------------------------------------------------------- /workflow/controller/testdata/workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: workflow-template-hello-world- 5 | namespace: test 6 | spec: 7 | workflowTemplateRef: 8 | name: workflow-template-submittable 9 | -------------------------------------------------------------------------------- /config/node_events.go: -------------------------------------------------------------------------------- 1 | package config 2 | 3 | type NodeEvents struct { 4 | Enabled *bool `json:"enabled,omitempty"` 5 | SendAsPod bool `json:"sendAsPod,omitempty"` 6 | } 7 | 8 | func (e NodeEvents) IsEnabled() bool { 9 | return e.Enabled == nil || *e.Enabled 10 | } 11 | -------------------------------------------------------------------------------- /docs/architecture.md: -------------------------------------------------------------------------------- 1 | # Architecture 2 | 3 | ## Diagram 4 | 5 | ![diagram](assets/diagram.png) 6 | 7 | ## Argo Workflow Overview 8 | 9 | ![diagram](assets/overview.jpeg) 10 | 11 | ## Workflow controller architecture 12 | 13 | ![diagram](assets/architecture.jpeg) 14 | 15 | -------------------------------------------------------------------------------- /test/e2e/testdata/wellformed/wellformed-workflow-with-workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: wellformed 5 | labels: 6 | workflows.argoproj.io/test: "true" 7 | spec: 8 | workflowTemplateRef: 9 | name: wellformed -------------------------------------------------------------------------------- /docs/versioning.md: -------------------------------------------------------------------------------- 1 | # Versioning 2 | 3 | Argo Workflows does not use Semantic Versioning, even though we have not introduced any breaking changes since v2. 4 | 5 | Breaking changes will be communicated in the release notes. 6 | 7 | See: 8 | 9 | * [Public API](public-api.md) 10 | -------------------------------------------------------------------------------- /manifests/quick-start/mysql/mysql-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mysql 5 | labels: 6 | app: mysql 7 | spec: 8 | selector: 9 | app: mysql 10 | ports: 11 | - protocol: TCP 12 | port: 3306 13 | targetPort: 3306 14 | -------------------------------------------------------------------------------- /manifests/quick-start/sso/dex/dex-role.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: Role 3 | metadata: 4 | name: dex 5 | rules: 6 | - apiGroups: 7 | - "" 8 | resources: 9 | - secrets 10 | - configmaps 11 | verbs: 12 | - get 13 | - list 14 | - watch 15 | -------------------------------------------------------------------------------- /test/e2e/testdata/malformed/malformed-workflowtemplate-2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: WorkflowTemplate 3 | metadata: 4 | name: malformed 5 | labels: 6 | argo-e2e: "true" 7 | spec: 8 | templates: 9 | - container: 10 | image: argoproj/argosay:v2 -------------------------------------------------------------------------------- /ui/src/app/cron-workflows/components/cron-workflow-list/cron-workflow-list.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .argo-table-list { 4 | &__row:hover { 5 | box-shadow: 1px 2px 3px rgba($argo-color-gray-9, .1), 0 0 0 1px rgba($argo-color-teal-5, .5); 6 | } 7 | } -------------------------------------------------------------------------------- /ui/src/app/pipelines/components/pipeline-details/recent.ts: -------------------------------------------------------------------------------- 1 | export const recent = (x: Date): boolean => { 2 | if (!x) { 3 | return false; 4 | } 5 | const minutesAgo = (new Date().getTime() - new Date(x).getTime()) / (1000 * 60); 6 | return minutesAgo < 15; 7 | }; 8 | -------------------------------------------------------------------------------- /ui/test/ui/ui-workflow-error.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: ui-workflow-error 5 | namespace: argo 6 | spec: 7 | entrypoint: main 8 | templates: 9 | - name: noop 10 | workflowTemplateRef: 11 | name: not-exists 12 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/umask_darwin.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | import "syscall" 4 | 5 | func AllowGrantingAccessToEveryone() { 6 | // default umask can be 022 7 | // setting umask as 0 allow granting write access to other non-root users 8 | syscall.Umask(0) 9 | } 10 | -------------------------------------------------------------------------------- /workflow/executor/os-specific/umask_linux.go: -------------------------------------------------------------------------------- 1 | package os_specific 2 | 3 | import "syscall" 4 | 5 | func AllowGrantingAccessToEveryone() { 6 | // default umask can be 022 7 | // setting umask as 0 allow granting write access to other non-root users 8 | syscall.Umask(0) 9 | } 10 | -------------------------------------------------------------------------------- /manifests/quick-start/base/minio/minio-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: minio 5 | labels: 6 | app: minio 7 | spec: 8 | selector: 9 | app: minio 10 | ports: 11 | - protocol: TCP 12 | port: 9000 13 | targetPort: 9000 14 | -------------------------------------------------------------------------------- /manifests/quick-start/sso/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - ../base 6 | - dex 7 | 8 | patchesStrategicMerge: 9 | - overlays/workflow-controller-configmap.yaml 10 | - overlays/argo-server-sa.yaml 11 | -------------------------------------------------------------------------------- /pkg/apiclient/sensor/forwarder_overwrite.go: -------------------------------------------------------------------------------- 1 | package sensor 2 | 3 | import ( 4 | "github.com/argoproj/pkg/grpc/http" 5 | ) 6 | 7 | func init() { 8 | forward_SensorService_SensorsLogs_0 = http.StreamForwarder 9 | forward_SensorService_WatchSensors_0 = http.StreamForwarder 10 | } 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/exit-1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: exit-1- 5 | spec: 6 | entrypoint: exit 7 | templates: 8 | - name: exit 9 | container: 10 | image: argoproj/argosay:v2 11 | args: [exit, "1"] -------------------------------------------------------------------------------- /test/e2e/testdata/malformed/malformed-workflow.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: malformed 5 | labels: 6 | workflows.argoproj.io/test: malformed 7 | spec: 8 | arguments: 9 | parameters: 10 | someParam: "Hello, world!" 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/wellformed/wellformed-workflow-with-malformed-workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: wellformed 5 | labels: 6 | workflows.argoproj.io/test: "true" 7 | spec: 8 | workflowTemplateRef: 9 | name: malformed -------------------------------------------------------------------------------- /hack/recurl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eux -o pipefail 3 | 4 | file=$1 5 | url=$2 6 | 7 | if [ ! -f "$file" ]; then 8 | # loop forever 9 | while ! curl -L -o "$file" -- "$url" ;do 10 | echo "sleeping before trying again" 11 | sleep 10s 12 | done 13 | fi 14 | 15 | chmod +x "$file" -------------------------------------------------------------------------------- /manifests/quick-start/base/webhooks/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - submit-workflow-template-role.yaml 6 | - github.com-sa.yaml 7 | - github.com-rolebinding.yaml 8 | - argo-workflows-webhook-clients-secret.yaml 9 | -------------------------------------------------------------------------------- /manifests/quick-start/postgres/postgres-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: postgres 5 | labels: 6 | app: postgres 7 | spec: 8 | selector: 9 | app: postgres 10 | ports: 11 | - protocol: TCP 12 | port: 5432 13 | targetPort: 5432 -------------------------------------------------------------------------------- /manifests/quick-start/sso/dex/dex-rb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: dex 5 | roleRef: 6 | apiGroup: rbac.authorization.k8s.io 7 | kind: Role 8 | name: dex 9 | subjects: 10 | - kind: ServiceAccount 11 | name: dex 12 | -------------------------------------------------------------------------------- /manifests/base/workflow-controller/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | resources: 5 | - workflow-controller-configmap.yaml 6 | - workflow-controller-deployment.yaml 7 | - workflow-controller-sa.yaml 8 | - workflow-controller-metrics-service.yaml 9 | -------------------------------------------------------------------------------- /manifests/quick-start/sso/overlays/argo-server-sa.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: argo-server 5 | annotations: 6 | workflows.argoproj.io/rbac-rule: "'authors' in groups && email == 'kilgore@kilgore.trout'" 7 | workflows.argoproj.io/rbac-rule-precedence: "1" 8 | -------------------------------------------------------------------------------- /ui/src/app/shared/components/phase.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {PhaseIcon} from './phase-icon'; 3 | 4 | export const Phase = ({value}: {value: string}) => { 5 | return ( 6 | <> 7 | {value} 8 | 9 | ); 10 | }; 11 | -------------------------------------------------------------------------------- /ui/src/app/workflows/components/workflow-logs-viewer/workflow-logs-viewer.scss: -------------------------------------------------------------------------------- 1 | .workflow-logs-viewer { 2 | .select { 3 | width: auto; 4 | } 5 | } 6 | 7 | .log-box { 8 | min-height: 500px; 9 | max-height: 800px; 10 | padding: 10px; 11 | margin: 10px; 12 | background-color: white; 13 | } -------------------------------------------------------------------------------- /util/json/fix_test.go: -------------------------------------------------------------------------------- 1 | package json 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func Test_Fix(t *testing.T) { 10 | assert.Equal(t, "<", Fix("\\u003c")) 11 | assert.Equal(t, ">", Fix("\\u003e")) 12 | assert.Equal(t, "&", Fix("\\u0026")) 13 | } 14 | -------------------------------------------------------------------------------- /docs/static-code-analysis.md: -------------------------------------------------------------------------------- 1 | # Static Code Analysis 2 | 3 | We use the following static code analysis tools: 4 | 5 | * golangci-lint and tslint for compile time linting 6 | * [snyk.io](https://app.snyk.io/org/argoproj/projects) - for image scanning 7 | 8 | These are at least run daily or on each pull request. 9 | -------------------------------------------------------------------------------- /test/e2e/manifests/mixins/workflow-controller-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: workflow-controller 5 | spec: 6 | replicas: 0 7 | template: 8 | spec: 9 | containers: 10 | - name: workflow-controller 11 | imagePullPolicy: Never -------------------------------------------------------------------------------- /test/e2e/smoke/basic.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: basic- 5 | spec: 6 | entrypoint: run-workflow 7 | templates: 8 | - name: run-workflow 9 | container: 10 | image: argoproj/argosay:v2 11 | args: [echo, ":) Hello Argo!"] -------------------------------------------------------------------------------- /test/e2e/testdata/malformed/malformed-workflowtemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: WorkflowTemplate 3 | metadata: 4 | name: malformed 5 | labels: 6 | workflows.argoproj.io/test: malformed 7 | spec: 8 | arguments: 9 | parameters: 10 | someParam: "Hello, world!" 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/sleep-3s.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: sleep-3s- 5 | spec: 6 | entrypoint: sleep-3s 7 | templates: 8 | - name: sleep-3s 9 | container: 10 | image: argoproj/argosay:v2 11 | args: ["sleep", "3s"] 12 | -------------------------------------------------------------------------------- /examples/cluster-workflow-template/workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | generateName: cluster-workflow-template-hello-world- 5 | spec: 6 | workflowTemplateRef: 7 | name: cluster-workflow-template-submittable 8 | clusterScope: true 9 | 10 | -------------------------------------------------------------------------------- /hack/swagger/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "os" 5 | ) 6 | 7 | func main() { 8 | switch os.Args[1] { 9 | case "kubeifyswagger": 10 | kubeifySwagger(os.Args[2], os.Args[3]) 11 | case "secondaryswaggergen": 12 | secondarySwaggerGen() 13 | default: 14 | panic(os.Args[1]) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /pkg/apiclient/http1/event-watch-client.go: -------------------------------------------------------------------------------- 1 | package http1 2 | 3 | import ( 4 | corev1 "k8s.io/api/core/v1" 5 | ) 6 | 7 | type eventWatchClient struct{ serverSentEventsClient } 8 | 9 | func (f eventWatchClient) Recv() (*corev1.Event, error) { 10 | v := &corev1.Event{} 11 | return v, f.RecvEvent(v) 12 | } 13 | -------------------------------------------------------------------------------- /util/json/jsonify.go: -------------------------------------------------------------------------------- 1 | package json 2 | 3 | import "encoding/json" 4 | 5 | func Jsonify(v interface{}) (map[string]interface{}, error) { 6 | data, err := json.Marshal(v) 7 | if err != nil { 8 | return nil, err 9 | } 10 | x := make(map[string]interface{}) 11 | return x, json.Unmarshal(data, &x) 12 | } 13 | -------------------------------------------------------------------------------- /pkg/apiclient/eventsource/forwarder_overwrite.go: -------------------------------------------------------------------------------- 1 | package eventsource 2 | 3 | import ( 4 | "github.com/argoproj/pkg/grpc/http" 5 | ) 6 | 7 | func init() { 8 | forward_EventSourceService_EventSourcesLogs_0 = http.StreamForwarder 9 | forward_EventSourceService_WatchEventSources_0 = http.StreamForwarder 10 | } 11 | -------------------------------------------------------------------------------- /test/e2e/testdata/malformed/malformed-clusterworkflowtemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: ClusterWorkflowTemplate 3 | metadata: 4 | name: malformed 5 | labels: 6 | workflows.argoproj.io/test: malformed 7 | spec: 8 | arguments: 9 | parameters: 10 | someParam: "Hello, world!" 11 | -------------------------------------------------------------------------------- /ui/src/app/workflow-templates/components/workflow-template-list/workflow-template-list.scss: -------------------------------------------------------------------------------- 1 | @import 'node_modules/argo-ui/src/styles/config'; 2 | 3 | .argo-table-list { 4 | margin: 1em; 5 | &__row:hover { 6 | box-shadow: 1px 2px 3px rgba($argo-color-gray-9, .1), 0 0 0 1px rgba($argo-color-teal-5, .5); 7 | } 8 | } -------------------------------------------------------------------------------- /docs/public-api.md: -------------------------------------------------------------------------------- 1 | # Public API 2 | 3 | Argo Workflows public API is defined by the following: 4 | 5 | * The file `api/openapi-spec/swagger.json` 6 | * The schema of the table `argo_archived_workflows`. 7 | * The installation options listed in `manifests/README.md`. 8 | 9 | See: 10 | 11 | * [Versioning](versioning.md) -------------------------------------------------------------------------------- /test/e2e/testdata/malformed/malformed-cronworkflow.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: CronWorkflow 3 | metadata: 4 | name: malformed 5 | labels: 6 | workflows.argoproj.io/test: malformed 7 | spec: 8 | workflowSpec: 9 | arguments: 10 | parameters: 11 | someParam: "Hello, world!" 12 | -------------------------------------------------------------------------------- /test/e2e/testdata/wellformed/wellformed-workflow-with-cluster-workflow-template-ref.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: Workflow 3 | metadata: 4 | name: wellformed 5 | labels: 6 | workflows.argoproj.io/test: "true" 7 | spec: 8 | workflowTemplateRef: 9 | name: wellformed 10 | clusterScope: true -------------------------------------------------------------------------------- /ui/src/app/shared/pagination.ts: -------------------------------------------------------------------------------- 1 | import {isNaN} from 'formik'; 2 | 3 | export interface Pagination { 4 | offset?: string; 5 | limit?: number; 6 | nextOffset?: string; 7 | } 8 | 9 | export function parseLimit(str: string) { 10 | const v = parseInt(str, 10); 11 | return !isNaN(v) ? v : null; 12 | } 13 | -------------------------------------------------------------------------------- /cmd/argo/commands/server_test.go: -------------------------------------------------------------------------------- 1 | package commands 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestDefaultSecureMode(t *testing.T) { 10 | // Secure mode by default 11 | cmd := NewServerCommand() 12 | assert.Equal(t, "true", cmd.Flag("secure").Value.String()) 13 | } 14 | -------------------------------------------------------------------------------- /test/e2e/testdata/workflow-templates/workflowtemplate.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: argoproj.io/v1alpha1 2 | kind: WorkflowTemplate 3 | metadata: 4 | name: basic 5 | spec: 6 | workflowMetadata: 7 | labels: 8 | 9 | entrypoint: main 10 | templates: 11 | - name: main 12 | container: 13 | image: argoproj/argosay:v2 -------------------------------------------------------------------------------- /ui/src/app/shared/components/phase-icon.tsx: -------------------------------------------------------------------------------- 1 | import * as classNames from 'classnames'; 2 | import * as React from 'react'; 3 | import {Utils} from '../utils'; 4 | 5 | export const PhaseIcon = ({value}: {value: string}) => { 6 | return