diff --git a/.github/workflows/ci-build.yaml b/.github/workflows/ci-build.yaml index 0bd02956f7c7..9736509801c6 100644 --- a/.github/workflows/ci-build.yaml +++ b/.github/workflows/ci-build.yaml @@ -256,7 +256,7 @@ jobs: - test: test-cli profile: mysql use-api: true - # Cron tests are not retryable withou a controller restart + # Cron tests are not retryable without a controller restart - test: test-cron profile: minimal use-api: false @@ -264,6 +264,7 @@ jobs: - test: test-examples profile: minimal use-api: false + retries: 0 - test: test-plugins profile: plugins use-api: false diff --git a/docs/fields.md b/docs/fields.md index 6f6c779d8e9c..02b11fa33cbe 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -3977,61 +3977,173 @@ MetricLabel is a single label for a prometheus metric
Examples with this field (click to open) -- [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) - -- [`conditional-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-artifacts.yaml) +- [`arguments-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-artifacts.yaml) -- [`conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-parameters.yaml) +- [`artifactory-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifactory-artifact.yaml) -- [`graph-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/container-set-template/graph-workflow.yaml) +- [`ci-output-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/ci-output-artifact.yaml) -- [`outputs-result-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/container-set-template/outputs-result-workflow.yaml) +- [`ci.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/ci.yaml) -- [`parallel-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/container-set-template/parallel-workflow.yaml) +- [`colored-logs.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/colored-logs.yaml) -- [`sequence-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/container-set-template/sequence-workflow.yaml) +- [`continue-on-fail.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/continue-on-fail.yaml) -- [`workspace-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/container-set-template/workspace-workflow.yaml) +- [`cron-backfill.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/cron-backfill.yaml) - [`custom-metrics.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/custom-metrics.yaml) -- [`dag-conditional-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-conditional-artifacts.yaml) +- [`dag-coinflip.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-coinflip.yaml) -- [`dag-conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-conditional-parameters.yaml) +- [`dag-continue-on-fail.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-continue-on-fail.yaml) - [`dag-custom-metrics.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-custom-metrics.yaml) -- [`dag-inline-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-inline-workflow.yaml) +- [`dag-daemon-retry-strategy.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-daemon-retry-strategy.yaml) -- [`exit-handler-with-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/exit-handler-with-artifacts.yaml) +- [`dag-daemon-task.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-daemon-task.yaml) -- [`exit-handler-with-param.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/exit-handler-with-param.yaml) +- [`dag-disable-failFast.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-disable-failFast.yaml) -- [`expression-tag-template-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/expression-tag-template-workflow.yaml) +- [`dag-nested.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-nested.yaml) -- [`global-parameters-from-configmap-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml) +- [`dag-task-level-timeout.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/dag-task-level-timeout.yaml) -- [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`data-transformations.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/data-transformations.yaml) + +- [`exit-handler-dag-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/exit-handler-dag-level.yaml) + +- [`exit-handler-slack.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/exit-handler-slack.yaml) + +- [`exit-handlers.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/exit-handlers.yaml) + +- [`fibonacci-seq-conditional-param.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/fibonacci-seq-conditional-param.yaml) + +- [`forever.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/forever.yaml) + +- [`fun-with-gifs.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/fun-with-gifs.yaml) + +- [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) + +- [`hdfs-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hdfs-artifact.yaml) + +- [`hello-hybrid.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hello-hybrid.yaml) + +- [`hello-windows.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hello-windows.yaml) - [`hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hello-world.yaml) -- [`http-hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/http-hello-world.yaml) +- [`image-pull-secrets.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/image-pull-secrets.yaml) -- [`k8s-owner-reference.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/k8s-owner-reference.yaml) +- [`influxdb-ci.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/influxdb-ci.yaml) -- [`k8s-patch-json-pod.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/k8s-patch-json-pod.yaml) +- [`input-artifact-azure.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-azure.yaml) -- [`k8s-patch-merge-pod.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/k8s-patch-merge-pod.yaml) +- [`input-artifact-gcs.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-gcs.yaml) + +- [`input-artifact-git.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-git.yaml) + +- [`input-artifact-http.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-http.yaml) + +- [`input-artifact-oss.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-oss.yaml) + +- [`input-artifact-s3.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-s3.yaml) + +- [`intermediate-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/intermediate-parameters.yaml) + +- [`k8s-patch-json-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/k8s-patch-json-workflow.yaml) + +- [`k8s-wait-wf.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/k8s-wait-wf.yaml) + +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-arbitrary-sequential-steps.yaml) + +- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-dag.yaml) + +- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-maps.yaml) + +- [`loops-param-argument.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-param-argument.yaml) + +- [`loops-param-result.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-param-result.yaml) + +- [`loops-sequence.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/loops-sequence.yaml) + +- [`nested-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/nested-workflow.yaml) + +- [`node-selector.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/node-selector.yaml) + +- [`output-artifact-azure.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/output-artifact-azure.yaml) + +- [`output-artifact-gcs.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/output-artifact-gcs.yaml) + +- [`output-artifact-s3.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/output-artifact-s3.yaml) + +- [`parallelism-limit.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/parallelism-limit.yaml) + +- [`parallelism-nested-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/parallelism-nested-dag.yaml) + +- [`parallelism-nested-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/parallelism-nested-workflow.yaml) + +- [`parallelism-nested.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/parallelism-nested.yaml) + +- [`parallelism-template-limit.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/parallelism-template-limit.yaml) - [`pod-gc-strategy-with-label-selector.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/pod-gc-strategy-with-label-selector.yaml) +- [`pod-gc-strategy.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/pod-gc-strategy.yaml) + - [`pod-metadata-wf-field.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/pod-metadata-wf-field.yaml) - [`pod-metadata.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/pod-metadata.yaml) -- [`steps-inline-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/steps-inline-workflow.yaml) +- [`recursive-for-loop.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/recursive-for-loop.yaml) + +- [`resubmit.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/resubmit.yaml) + +- [`retry-backoff.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/retry-backoff.yaml) + +- [`retry-conditional.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/retry-conditional.yaml) + +- [`retry-on-error.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/retry-on-error.yaml) + +- [`retry-with-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/retry-with-steps.yaml) + +- [`secrets.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/secrets.yaml) + +- [`sidecar-dind.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/sidecar-dind.yaml) + +- [`step-level-timeout.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/step-level-timeout.yaml) + +- [`steps-daemon-retry-strategy.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/steps-daemon-retry-strategy.yaml) + +- [`suspend-template-outputs.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/suspend-template-outputs.yaml) + +- [`suspend-template.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/suspend-template.yaml) + +- [`synchronization-db-mutex-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/synchronization-db-mutex-tmpl-level.yaml) + +- [`synchronization-db-mutex-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/synchronization-db-mutex-wf-level.yaml) + +- [`synchronization-db-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/synchronization-db-tmpl-level.yaml) + +- [`synchronization-db-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/synchronization-db-wf-level.yaml) + +- [`synchronization-mutex-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/synchronization-mutex-tmpl-level.yaml) + +- [`template-defaults.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/template-defaults.yaml) + +- [`template-on-exit.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/template-on-exit.yaml) + +- [`timeouts-step.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/timeouts-step.yaml) + +- [`timeouts-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/timeouts-workflow.yaml) - [`title-and-description-with-markdown.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/title-and-description-with-markdown.yaml) + +- [`webhdfs-input-output-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/webhdfs-input-output-artifacts.yaml) + +- [`work-avoidance.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/work-avoidance.yaml) + +- [`workflow-of-workflows.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/workflow-of-workflows.yaml)
### Fields diff --git a/examples/arguments-artifacts.yaml b/examples/arguments-artifacts.yaml index 9dc69713b36a..aeac965f638a 100644 --- a/examples/arguments-artifacts.yaml +++ b/examples/arguments-artifacts.yaml @@ -8,6 +8,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: arguments-artifacts- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: kubectl-input-artifact arguments: @@ -24,6 +26,6 @@ spec: path: /usr/local/bin/kubectl mode: 0755 container: - image: debian:9.4 + image: busybox command: [sh, -c] args: ["kubectl version"] diff --git a/examples/arguments-parameters-from-configmap.yaml b/examples/arguments-parameters-from-configmap.yaml index 7e03b9bf70e4..e8816adf9784 100644 --- a/examples/arguments-parameters-from-configmap.yaml +++ b/examples/arguments-parameters-from-configmap.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: arguments-parameters-from-configmap- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example demonstrates loading parameter values from a ConfigMap. diff --git a/examples/artifact-disable-archive.yaml b/examples/artifact-disable-archive.yaml index 12633030be40..544f41653de8 100644 --- a/examples/artifact-disable-archive.yaml +++ b/examples/artifact-disable-archive.yaml @@ -57,7 +57,7 @@ spec: - name: hello-txt-nc path: /tmp/hello_nc.txt container: - image: alpine:latest + image: busybox command: [sh, -c] args: - cat /tmp/hello.txt && cat /tmp/hello_nc.txt && cd /tmp/etc && find . diff --git a/examples/artifact-passing-explicit-plugin.yaml b/examples/artifact-passing-explicit-plugin.yaml index d98058bf20df..366f265a9699 100644 --- a/examples/artifact-passing-explicit-plugin.yaml +++ b/examples/artifact-passing-explicit-plugin.yaml @@ -47,6 +47,6 @@ spec: - name: message path: /tmp/message container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["cat /tmp/message"] diff --git a/examples/artifact-passing-subpath.yaml b/examples/artifact-passing-subpath.yaml index 9692876c44d9..e785ed123f45 100644 --- a/examples/artifact-passing-subpath.yaml +++ b/examples/artifact-passing-subpath.yaml @@ -44,7 +44,7 @@ spec: - name: message path: /tmp/message container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["ls /tmp/message"] @@ -54,6 +54,6 @@ spec: - name: message path: /tmp/message container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["cat /tmp/message"] diff --git a/examples/artifact-passing.yaml b/examples/artifact-passing.yaml index 68dc0095ea3d..f24c4ff786c1 100644 --- a/examples/artifact-passing.yaml +++ b/examples/artifact-passing.yaml @@ -34,6 +34,6 @@ spec: - name: message path: /tmp/message container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["cat /tmp/message"] diff --git a/examples/artifactory-artifact.yaml b/examples/artifactory-artifact.yaml index e2df6e235e9d..e5791e39f0fa 100644 --- a/examples/artifactory-artifact.yaml +++ b/examples/artifactory-artifact.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: artifactory-artifact- spec: entrypoint: artifact-example @@ -54,6 +56,6 @@ spec: name: my-artifactory-credentials key: password container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["cat /tmp/message"] diff --git a/examples/artifacts-workflowtemplate.yaml b/examples/artifacts-workflowtemplate.yaml index 580d207c82cc..11e314d38e98 100644 --- a/examples/artifacts-workflowtemplate.yaml +++ b/examples/artifacts-workflowtemplate.yaml @@ -132,4 +132,4 @@ spec: - name: tgz-dir path: /out s3: - key: dir.tgz \ No newline at end of file + key: dir.tgz diff --git a/examples/buildkit-template.yaml b/examples/buildkit-template.yaml index 49939e5417ee..026152bb9d4a 100644 --- a/examples/buildkit-template.yaml +++ b/examples/buildkit-template.yaml @@ -105,7 +105,7 @@ spec: parameters: - name: path container: - image: golang:1.13 + image: golang:1.18 volumeMounts: - mountPath: /work name: work diff --git a/examples/ci-output-artifact.yaml b/examples/ci-output-artifact.yaml index 1a73f939e856..2e2763b3097e 100644 --- a/examples/ci-output-artifact.yaml +++ b/examples/ci-output-artifact.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: ci-output-artifact- spec: entrypoint: ci-example diff --git a/examples/ci.yaml b/examples/ci.yaml index 50b7a8f4b161..b7fd8de0f119 100644 --- a/examples/ci.yaml +++ b/examples/ci.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: ci-example- spec: # entrypoint is the name of the template used as the starting point of the workflow diff --git a/examples/coinflip-recursive.yaml b/examples/coinflip-recursive.yaml index 2c52c2fe0440..6dc56c8cab8d 100644 --- a/examples/coinflip-recursive.yaml +++ b/examples/coinflip-recursive.yaml @@ -32,6 +32,6 @@ spec: - name: heads container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was heads\""] diff --git a/examples/coinflip.yaml b/examples/coinflip.yaml index 19de8a4aa8f1..6718324eb892 100644 --- a/examples/coinflip.yaml +++ b/examples/coinflip.yaml @@ -35,12 +35,12 @@ spec: - name: heads container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was heads\""] - name: tails container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was tails\""] diff --git a/examples/colored-logs.yaml b/examples/colored-logs.yaml index fb379a0709ed..bcbb61964dc3 100644 --- a/examples/colored-logs.yaml +++ b/examples/colored-logs.yaml @@ -3,12 +3,14 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: colored-logs- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: print-colors templates: - name: print-colors script: - image: python:3.7 + image: python:alpine3.6 command: ["python"] source: | import time diff --git a/examples/conditional-artifacts.yaml b/examples/conditional-artifacts.yaml index 93ad9107f14d..8486a0e279cd 100644 --- a/examples/conditional-artifacts.yaml +++ b/examples/conditional-artifacts.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: conditional-artifacts- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | Conditional artifacts provide a way to choose the output artifacts based on expression. diff --git a/examples/conditional-parameters.yaml b/examples/conditional-parameters.yaml index 21d6f4de0440..5cda8165f499 100644 --- a/examples/conditional-parameters.yaml +++ b/examples/conditional-parameters.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: conditional-parameter- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | Conditional parameters provide a way to choose the output parameters based on expression. diff --git a/examples/conditionals-complex.yaml b/examples/conditionals-complex.yaml index 0c100c917574..e5e096773581 100644 --- a/examples/conditionals-complex.yaml +++ b/examples/conditionals-complex.yaml @@ -51,18 +51,18 @@ spec: - name: heads container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was heads\""] - name: tails container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was tails\""] - name: heads-tails-or-twice-tails container: - image: alpine:3.6 + image: busybox command: [sh, -c] - args: ["echo \"it was heads the first flip and tails the second. Or it was two times tails.\""] \ No newline at end of file + args: ["echo \"it was heads the first flip and tails the second. Or it was two times tails.\""] diff --git a/examples/container-set-template/graph-workflow.yaml b/examples/container-set-template/graph-workflow.yaml index 13833bf55a5d..8c62322514b1 100644 --- a/examples/container-set-template/graph-workflow.yaml +++ b/examples/container-set-template/graph-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: graph- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates running a graph of tasks within containers in a single pod. diff --git a/examples/container-set-template/outputs-result-workflow.yaml b/examples/container-set-template/outputs-result-workflow.yaml index a413a56056e5..cfc45737dfcd 100644 --- a/examples/container-set-template/outputs-result-workflow.yaml +++ b/examples/container-set-template/outputs-result-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: outputs-result- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates collecting outputs (specifically the stdout result) from a pod. diff --git a/examples/container-set-template/parallel-workflow.yaml b/examples/container-set-template/parallel-workflow.yaml index df1f125abd9d..cfade83298c9 100644 --- a/examples/container-set-template/parallel-workflow.yaml +++ b/examples/container-set-template/parallel-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: parallel- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates running parallel containers within a single pod. diff --git a/examples/container-set-template/sequence-workflow.yaml b/examples/container-set-template/sequence-workflow.yaml index 0594bf60d46b..409e9f99a4d7 100644 --- a/examples/container-set-template/sequence-workflow.yaml +++ b/examples/container-set-template/sequence-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: sequence- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates running a sequence of containers within a single pod. diff --git a/examples/container-set-template/workspace-workflow.yaml b/examples/container-set-template/workspace-workflow.yaml index 15a0269786b8..f5653a6d3171 100644 --- a/examples/container-set-template/workspace-workflow.yaml +++ b/examples/container-set-template/workspace-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: workspace- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates using a workspace to share files between containers. This also allows containers not diff --git a/examples/continue-on-fail.yaml b/examples/continue-on-fail.yaml index 954d9c8e9642..15f8c62177c3 100644 --- a/examples/continue-on-fail.yaml +++ b/examples/continue-on-fail.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: continue-on-fail- + labels: + workflows.argoproj.io/no-test: "expected-failure" spec: entrypoint: workflow-ignore parallelism: 1 @@ -29,6 +31,6 @@ spec: - name: intentional-fail container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["echo intentional failure; exit 1"] diff --git a/examples/cron-backfill.yaml b/examples/cron-backfill.yaml index 3cdb51e0b1fb..3cfc0695d3df 100644 --- a/examples/cron-backfill.yaml +++ b/examples/cron-backfill.yaml @@ -45,6 +45,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: backfill-v1 + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: main # the backfill must use a service account which can create workflows @@ -98,6 +100,15 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: backfill-v2 + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + This is the error, we should fix the service account + + workflowtaskresults.argoproj.io is forbidden: User + "system:serviceaccount:argo:argo-server" cannot create resource + "workflowtaskresults" in API group "argoproj.io" in the namespace "argo" spec: entrypoint: main # limit to one job at a time diff --git a/examples/custom-metrics.yaml b/examples/custom-metrics.yaml index d7c3e7cebfbf..2d2908f21267 100644 --- a/examples/custom-metrics.yaml +++ b/examples/custom-metrics.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: steps metrics: @@ -65,7 +67,7 @@ spec: valueFrom: path: /tmp/rand_int.txt container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["RAND_INT=$((1 + RANDOM % 10)); echo $RAND_INT; echo $RAND_INT > /tmp/rand_int.txt"] @@ -85,4 +87,4 @@ spec: image: python:alpine3.6 command: ["python", -c] # fail with a 66% probability - args: ["import random; import sys; exit_code = random.choice([0, 1, 1]); sys.exit(exit_code)"] \ No newline at end of file + args: ["import random; import sys; exit_code = random.choice([0, 1, 1]); sys.exit(exit_code)"] diff --git a/examples/daemon-nginx.yaml b/examples/daemon-nginx.yaml index 4ad13e03d97b..3918f4889c24 100644 --- a/examples/daemon-nginx.yaml +++ b/examples/daemon-nginx.yaml @@ -33,7 +33,7 @@ spec: parameters: - name: server-ip container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["/bin/sh", "-c"] args: ["echo curl --silent -G http://{{inputs.parameters.server-ip}}:80/ && curl --silent -G http://{{inputs.parameters.server-ip}}:80/"] diff --git a/examples/daemon-step.yaml b/examples/daemon-step.yaml index 14f9e0c6f869..d7dedd253ab1 100644 --- a/examples/daemon-step.yaml +++ b/examples/daemon-step.yaml @@ -22,13 +22,13 @@ spec: arguments: parameters: - name: cmd - value: for i in $(seq 1 20); do curl -XPOST 'http://{{steps.influx.ip}}:8086/write?db=mydb' -d "cpu,host=server01,region=uswest load=$i" ; sleep .5 ; done + value: for i in $(seq 1 10); do curl -XPOST 'http://{{steps.influx.ip}}:8086/write?db=mydb' -d "cpu,host=server01,region=uswest load=$i" ; sleep .5 ; done - name: producer-2 template: influxdb-client arguments: parameters: - name: cmd - value: for i in $(seq 1 20); do curl -XPOST 'http://{{steps.influx.ip}}:8086/write?db=mydb' -d "cpu,host=server02,region=uswest load=$((RANDOM % 100))" ; sleep .5 ; done + value: for i in $(seq 1 10); do curl -XPOST 'http://{{steps.influx.ip}}:8086/write?db=mydb' -d "cpu,host=server02,region=uswest load=$((RANDOM % 100))" ; sleep .5 ; done - name: producer-3 template: influxdb-client arguments: @@ -59,6 +59,6 @@ spec: parameters: - name: cmd container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["sh", "-c"] args: ["{{inputs.parameters.cmd}}"] diff --git a/examples/daemoned-stateful-set-with-service.yaml b/examples/daemoned-stateful-set-with-service.yaml index 662799128d0e..5cce0fb2011c 100644 --- a/examples/daemoned-stateful-set-with-service.yaml +++ b/examples/daemoned-stateful-set-with-service.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: daemoned-stateful-set-with-service- spec: entrypoint: create-wait-and-test @@ -70,7 +72,7 @@ spec: terminationGracePeriodSeconds: 10 containers: - name: nginx - image: registry.k8s.io/nginx-slim:0.8 + image: nginx:1.13 ports: - containerPort: 80 name: web diff --git a/examples/dag-coinflip.yaml b/examples/dag-coinflip.yaml index 3c19ff2fbd8c..12860ba61b12 100644 --- a/examples/dag-coinflip.yaml +++ b/examples/dag-coinflip.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-diamond-coinflip- + labels: + workflows.argoproj.io/no-test: "duration" annotations: workflows.argoproj.io/description: | This is an example of coin flip defined as a DAG. @@ -45,6 +47,6 @@ spec: - name: heads container: - image: alpine:3.6 + image: busybox command: [sh, -c] args: ["echo \"it was heads\""] diff --git a/examples/dag-conditional-artifacts.yaml b/examples/dag-conditional-artifacts.yaml index 3cee0454255a..7a60dc4be771 100644 --- a/examples/dag-conditional-artifacts.yaml +++ b/examples/dag-conditional-artifacts.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-conditional-artifacts- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | Conditional artifacts provides a way to choose the output artifacts based on an expression. diff --git a/examples/dag-conditional-parameters.yaml b/examples/dag-conditional-parameters.yaml index 86d0b7933836..f72aacb48b13 100644 --- a/examples/dag-conditional-parameters.yaml +++ b/examples/dag-conditional-parameters.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-conditional-parameter- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | Conditional parameters provide a way to choose the output parameters based on expression. diff --git a/examples/dag-continue-on-fail.yaml b/examples/dag-continue-on-fail.yaml index b2245087a2ac..fe63b7f65710 100644 --- a/examples/dag-continue-on-fail.yaml +++ b/examples/dag-continue-on-fail.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "expected-failure" generateName: dag-contiue-on-fail- spec: entrypoint: workflow @@ -37,6 +39,6 @@ spec: - name: intentional-fail container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["echo intentional failure; exit 1"] diff --git a/examples/dag-custom-metrics.yaml b/examples/dag-custom-metrics.yaml index baeda5fca648..5dee7b10d943 100644 --- a/examples/dag-custom-metrics.yaml +++ b/examples/dag-custom-metrics.yaml @@ -99,5 +99,5 @@ spec: counter: value: "1" container: - image: alpine:3.7 - command: [echo, "{{inputs.parameters.message}}"] \ No newline at end of file + image: busybox + command: [echo, "{{inputs.parameters.message}}"] diff --git a/examples/dag-daemon-retry-strategy.yaml b/examples/dag-daemon-retry-strategy.yaml index b5e2022d4190..0fd49aaa87a9 100644 --- a/examples/dag-daemon-retry-strategy.yaml +++ b/examples/dag-daemon-retry-strategy.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-daemon-retry- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: main @@ -19,14 +21,14 @@ spec: - name: server-ip value: "{{tasks.server.ip}}" withSequence: - count: "10" + count: "6" - name: server retryStrategy: - limit: "10" + limit: "6" daemon: true container: - image: nginx:latest + image: nginx:1.13 command: ["nginx"] args: ["-g", "daemon off;"] readinessProbe: @@ -44,6 +46,6 @@ spec: mutexes: - name: client-{{workflow.uid}} container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["/bin/sh", "-c"] args: ["echo curl --silent -G http://{{inputs.parameters.server-ip}}:80/ && curl --silent -G http://{{inputs.parameters.server-ip}}:80/"] diff --git a/examples/dag-daemon-task.yaml b/examples/dag-daemon-task.yaml index dc87fcf4c1ff..0d2d9ea41cfa 100644 --- a/examples/dag-daemon-task.yaml +++ b/examples/dag-daemon-task.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-daemon-task- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: daemon-example templates: @@ -68,6 +70,6 @@ spec: parameters: - name: cmd container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["sh", "-c"] args: ["{{inputs.parameters.cmd}}"] diff --git a/examples/dag-diamond-steps.yaml b/examples/dag-diamond-steps.yaml index 69ea072c5552..16575c57d3f2 100644 --- a/examples/dag-diamond-steps.yaml +++ b/examples/dag-diamond-steps.yaml @@ -32,7 +32,7 @@ spec: parameters: - name: message container: - image: alpine:3.7 + image: busybox command: [echo, "{{inputs.parameters.message}}"] - name: echo-thrice inputs: diff --git a/examples/dag-diamond.yaml b/examples/dag-diamond.yaml index 57368f42524f..9cd98fd5a0a9 100644 --- a/examples/dag-diamond.yaml +++ b/examples/dag-diamond.yaml @@ -40,5 +40,5 @@ spec: parameters: - name: message container: - image: alpine:3.7 + image: busybox command: [echo, "{{inputs.parameters.message}}"] diff --git a/examples/dag-disable-failFast.yaml b/examples/dag-disable-failFast.yaml index 662ce0547c9c..c2ee4eee791d 100644 --- a/examples/dag-disable-failFast.yaml +++ b/examples/dag-disable-failFast.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "expected-failure" generateName: dag-primay-branch- spec: entrypoint: statis @@ -14,14 +16,14 @@ spec: retryStrategy: limit: "2" container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["sleep 30; echo haha"] - name: c retryStrategy: limit: "3" container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["echo intentional failure; exit 2"] - name: d diff --git a/examples/dag-enhanced-depends.yaml b/examples/dag-enhanced-depends.yaml index 573718fc928d..ac5e805b3e26 100644 --- a/examples/dag-enhanced-depends.yaml +++ b/examples/dag-enhanced-depends.yaml @@ -30,15 +30,15 @@ spec: template: pass - name: pass container: - image: alpine:3.7 + image: busybox command: - sh - -c - exit 0 - name: fail container: - image: alpine:3.7 + image: busybox command: - sh - -c - - exit 1 \ No newline at end of file + - exit 1 diff --git a/examples/dag-inline-clusterworkflowtemplate.yaml b/examples/dag-inline-clusterworkflowtemplate.yaml index fa0a10a23d90..d3bc2f4ade78 100644 --- a/examples/dag-inline-clusterworkflowtemplate.yaml +++ b/examples/dag-inline-clusterworkflowtemplate.yaml @@ -15,4 +15,4 @@ spec: - name: a inline: container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/dag-inline-workflow.yaml b/examples/dag-inline-workflow.yaml index 6df2d57fb57b..fdd3a6d56598 100644 --- a/examples/dag-inline-workflow.yaml +++ b/examples/dag-inline-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-inline- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example demonstrates running a DAG with inline templates. @@ -17,4 +15,4 @@ spec: - name: a inline: container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/dag-inline-workflowtemplate.yaml b/examples/dag-inline-workflowtemplate.yaml index 95f3e9c10e5f..c5de4a81d784 100644 --- a/examples/dag-inline-workflowtemplate.yaml +++ b/examples/dag-inline-workflowtemplate.yaml @@ -15,4 +15,4 @@ spec: - name: a inline: container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/dag-multiroot.yaml b/examples/dag-multiroot.yaml index 5e9a95e60372..0c7d27887dc4 100644 --- a/examples/dag-multiroot.yaml +++ b/examples/dag-multiroot.yaml @@ -15,7 +15,7 @@ spec: parameters: - name: message container: - image: alpine:3.7 + image: busybox command: [echo, "{{inputs.parameters.message}}"] - name: multiroot dag: diff --git a/examples/dag-nested.yaml b/examples/dag-nested.yaml index 35f0e4ffe9ea..36e58cd9d730 100644 --- a/examples/dag-nested.yaml +++ b/examples/dag-nested.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-nested- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: diamond templates: @@ -10,7 +12,7 @@ spec: parameters: - name: message container: - image: alpine:3.7 + image: busybox command: [echo, "{{inputs.parameters.message}}"] - name: diamond dag: diff --git a/examples/dag-targets.yaml b/examples/dag-targets.yaml index b004816cbc6c..be0658f58616 100644 --- a/examples/dag-targets.yaml +++ b/examples/dag-targets.yaml @@ -63,5 +63,5 @@ spec: parameters: - name: message container: - image: alpine:3.7 + image: busybox command: [echo, "{{inputs.parameters.message}}"] diff --git a/examples/dag-task-level-timeout.yaml b/examples/dag-task-level-timeout.yaml index 3dea5ebe83ba..786c147fb826 100644 --- a/examples/dag-task-level-timeout.yaml +++ b/examples/dag-task-level-timeout.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "expected-failure" generateName: dag-task-level-timeout- spec: entrypoint: diamond @@ -30,5 +32,5 @@ spec: parameters: - name: timeout container: - image: alpine:3.7 + image: busybox command: [sleep, "15s"] diff --git a/examples/data-transformations.yaml b/examples/data-transformations.yaml index fc70fa96b694..f8c8a6512934 100644 --- a/examples/data-transformations.yaml +++ b/examples/data-transformations.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: data-transformations- annotations: workflows.argoproj.io/description: | diff --git a/examples/default-pdb-support.yaml b/examples/default-pdb-support.yaml index 86b0a5c31e6a..a90c8d74a1a2 100644 --- a/examples/default-pdb-support.yaml +++ b/examples/default-pdb-support.yaml @@ -11,6 +11,6 @@ spec: templates: - name: pdbcreate container: - image: alpine:latest + image: busybox command: [sh, -c] args: ["sleep 10"] diff --git a/examples/exit-handler-dag-level.yaml b/examples/exit-handler-dag-level.yaml index 8bf59993442b..7d175182ae7f 100644 --- a/examples/exit-handler-dag-level.yaml +++ b/examples/exit-handler-dag-level.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: exit-hanlder-dag-level- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: main templates: diff --git a/examples/exit-handler-slack.yaml b/examples/exit-handler-slack.yaml index 2b779f7ec345..f6c8686eee6d 100644 --- a/examples/exit-handler-slack.yaml +++ b/examples/exit-handler-slack.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: exit-handler-slack- spec: entrypoint: say-hello @@ -12,13 +14,13 @@ spec: templates: - name: say-hello container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo hello"] - name: exit-handler container: - image: curlimages/curl + image: curlimages/curl:latest command: [sh, -c] args: [ "curl -X POST --data-urlencode 'payload={ diff --git a/examples/exit-handler-with-artifacts.yaml b/examples/exit-handler-with-artifacts.yaml index 15f038109f09..0ceed2dcad61 100644 --- a/examples/exit-handler-with-artifacts.yaml +++ b/examples/exit-handler-with-artifacts.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: exit-handler-with-artifacts- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | onExitTemplate enables workflow to pass the arguments (parameters/Artifacts) to exit handler template. @@ -43,4 +41,4 @@ spec: container: image: python:alpine3.6 command: [sh, -c] - args: ["cat /tmp/message"] \ No newline at end of file + args: ["cat /tmp/message"] diff --git a/examples/exit-handler-with-param.yaml b/examples/exit-handler-with-param.yaml index ae11057e2d68..62a2cbc27c73 100644 --- a/examples/exit-handler-with-param.yaml +++ b/examples/exit-handler-with-param.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: exit-handler-with-param- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | onExitTemplate enables workflow to pass the arguments (parameters/Artifacts) to exit handler template. @@ -43,4 +41,4 @@ spec: image: python:alpine3.6 command: [ python ] source: | - print("{{inputs.parameters.message}}") \ No newline at end of file + print("{{inputs.parameters.message}}") diff --git a/examples/exit-handlers.yaml b/examples/exit-handlers.yaml index 919bd185b6c5..8bcc58ca42bf 100644 --- a/examples/exit-handlers.yaml +++ b/examples/exit-handlers.yaml @@ -9,6 +9,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "expected-failure" generateName: exit-handlers- spec: entrypoint: intentional-fail @@ -17,7 +19,7 @@ spec: # primary workflow template - name: intentional-fail container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo intentional failure; exit 1"] @@ -37,7 +39,7 @@ spec: when: "{{workflow.status}} != Succeeded" - name: send-email container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] # Tip: {{workflow.failures}} is a JSON list. If you're using bash to read it, we recommend using jq to manipulate # it. For example: @@ -49,11 +51,11 @@ spec: args: ["echo send e-mail: {{workflow.name}} {{workflow.status}} {{workflow.duration}}. Failed steps {{workflow.failures}}"] - name: celebrate container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo hooray!"] - name: cry container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo boohoo!"] diff --git a/examples/expression-destructure-json-complex.yaml b/examples/expression-destructure-json-complex.yaml index 88ea57234897..3044aa59405c 100644 --- a/examples/expression-destructure-json-complex.yaml +++ b/examples/expression-destructure-json-complex.yaml @@ -30,7 +30,7 @@ spec: value: "{{inputs.parameters.c}}" - name: D value: "{{inputs.parameters.d}}" - image: debian:9.4 - command: [bash] + image: busybox + command: [sh] source: | echo "$A$B$C$D" diff --git a/examples/expression-destructure-json.yaml b/examples/expression-destructure-json.yaml index 39c398bb9094..5f540db851be 100644 --- a/examples/expression-destructure-json.yaml +++ b/examples/expression-destructure-json.yaml @@ -28,7 +28,7 @@ spec: value: "{{inputs.parameters.b}}" - name: C value: "{{inputs.parameters.c}}" - image: debian:9.4 - command: [bash] + image: busybox + command: [sh] source: | echo "$A$B$C" diff --git a/examples/expression-reusing-verbose-snippets.yaml b/examples/expression-reusing-verbose-snippets.yaml index a51815c2a42e..c94da73dcf16 100644 --- a/examples/expression-reusing-verbose-snippets.yaml +++ b/examples/expression-reusing-verbose-snippets.yaml @@ -38,7 +38,7 @@ spec: value: "{{=jsonpath(inputs.parameters['week-temps'], '$.min')}}" - name: MAX value: "{{=jsonpath(inputs.parameters['week-temps'], '$.max')}}" - image: debian:9.4 - command: [bash] + image: busybox + command: [sh] source: | echo "The week's average temperature was $AVG with a minimum of $MIN and a maximum of $MAX." diff --git a/examples/expression-tag-template-workflow.yaml b/examples/expression-tag-template-workflow.yaml index 84e6cf24460d..1d30d9efafc8 100644 --- a/examples/expression-tag-template-workflow.yaml +++ b/examples/expression-tag-template-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: expression-tag-template- - labels: - workflows.argoproj.io/test: "true" annotations: # available in v3.1.0 workflows.argoproj.io/version: ">= 3.1.0" @@ -38,4 +36,4 @@ spec: parameters: - name: output valueFrom: - path: /output \ No newline at end of file + path: /output diff --git a/examples/fibonacci-seq-conditional-param.yaml b/examples/fibonacci-seq-conditional-param.yaml index 91cb0828541e..5fe878c8941c 100644 --- a/examples/fibonacci-seq-conditional-param.yaml +++ b/examples/fibonacci-seq-conditional-param.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: fibonacci- + labels: + workflows.argoproj.io/no-test: "environment" annotations: workflows.argoproj.io/description: | This example demonstrates fibonacci sequence problem using conditional parameter feature. @@ -118,6 +120,6 @@ spec: parameters: - name: result container: - image: alpine:latest + image: busybox command: [ sh, -c ] args: [ "echo {{inputs.parameters.result}}" ] diff --git a/examples/forever.yaml b/examples/forever.yaml index 943f429cab74..a545341a866f 100644 --- a/examples/forever.yaml +++ b/examples/forever.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "duration" name: forever spec: entrypoint: main diff --git a/examples/fun-with-gifs.yaml b/examples/fun-with-gifs.yaml index cad8660d0d99..0a1b5e9cf441 100644 --- a/examples/fun-with-gifs.yaml +++ b/examples/fun-with-gifs.yaml @@ -10,6 +10,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: fun-with-gifs- spec: entrypoint: run-workflow diff --git a/examples/global-outputs.yaml b/examples/global-outputs.yaml index 83633ebfc995..f032105a9052 100644 --- a/examples/global-outputs.yaml +++ b/examples/global-outputs.yaml @@ -17,7 +17,7 @@ spec: # Template which produces a global parameter and artifact - name: global-output container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: ["sleep 1; echo -n hello world > /tmp/hello_world.txt"] outputs: @@ -55,7 +55,7 @@ spec: - name: param value: "{{workflow.outputs.parameters.my-global-param}}" container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: ["echo {{inputs.parameters.param}}"] @@ -65,6 +65,6 @@ spec: - name: art path: /art container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: ["cat /art"] diff --git a/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml b/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml index 72e25bd8918f..769a017da96f 100644 --- a/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml +++ b/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: global-parameter-from-configmap-referenced-as-local-variable- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example demonstrates how a global parameter from a ConfigMap can be referenced as a template local variable. diff --git a/examples/global-parameters-from-configmap.yaml b/examples/global-parameters-from-configmap.yaml index 349cbb83a405..0d2d1e836518 100644 --- a/examples/global-parameters-from-configmap.yaml +++ b/examples/global-parameters-from-configmap.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: global-parameter-values-from-configmap- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example demonstrates loading global parameter values from a ConfigMap. diff --git a/examples/handle-large-output-results.yaml b/examples/handle-large-output-results.yaml index ee2bcc2ebf91..f5cd5c621c93 100644 --- a/examples/handle-large-output-results.yaml +++ b/examples/handle-large-output-results.yaml @@ -8,6 +8,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: handle-large-output-results- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: handle-large-output-results templates: @@ -28,7 +30,7 @@ spec: count: "{{steps.get-items.outputs.parameters.count}}" - name: get-items container: - image: alpine:latest + image: alpine:3.6 command: ["/bin/sh", "-c"] # This small array is just for an example. Make sure the count matches the actual size of # your JSON array. @@ -52,4 +54,4 @@ spec: image: stedolan/jq:latest command: [sh, -c] # jq is just one way to get the appropriate item. - args: ["cat /tmp/items | jq '.[{{inputs.parameters.index}}]'"] \ No newline at end of file + args: ["cat /tmp/items | jq '.[{{inputs.parameters.index}}]'"] diff --git a/examples/hdfs-artifact.yaml b/examples/hdfs-artifact.yaml index c39445d02b0d..51d3ffc71720 100644 --- a/examples/hdfs-artifact.yaml +++ b/examples/hdfs-artifact.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: hdfs-artifact- spec: entrypoint: artifact-example @@ -78,6 +80,6 @@ spec: # key: krb5.conf # krbServicePrincipalName: hdfs/_HOST container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["cat /tmp/message"] diff --git a/examples/hello-hybrid.yaml b/examples/hello-hybrid.yaml index 485195ec052e..3f35e26a2a52 100644 --- a/examples/hello-hybrid.yaml +++ b/examples/hello-hybrid.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: hello-hybrid- spec: entrypoint: mytemplate diff --git a/examples/hello-windows.yaml b/examples/hello-windows.yaml index 382c797dfa2c..5456b2920740 100644 --- a/examples/hello-windows.yaml +++ b/examples/hello-windows.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: hello-windows- spec: entrypoint: hello-win @@ -11,4 +13,4 @@ spec: container: image: mcr.microsoft.com/windows/nanoserver:1809 command: ["cmd", "/c"] - args: ["echo", "Hello from Windows Container!"] \ No newline at end of file + args: ["echo", "Hello from Windows Container!"] diff --git a/examples/http-hello-world.yaml b/examples/http-hello-world.yaml index 429120d4582e..2fdf06ce61e6 100644 --- a/examples/http-hello-world.yaml +++ b/examples/http-hello-world.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: http-template- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | Http template will demostrate http template functionality diff --git a/examples/http-success-condition.yaml b/examples/http-success-condition.yaml index 7bcb232b336c..b91d1fe528ec 100644 --- a/examples/http-success-condition.yaml +++ b/examples/http-success-condition.yaml @@ -13,7 +13,7 @@ spec: - - name: http-status-is-201-succeeds template: http-status-is-201 arguments: - parameters: [{name: url, value: "http://httpstat.us/201"}] # Returns status code 201 + parameters: [{name: url, value: "https://httpbin.org/status/201"}] # Returns status code 201 - name: http-body-contains-google-succeeds template: http-body-contains-google arguments: diff --git a/examples/image-pull-secrets.yaml b/examples/image-pull-secrets.yaml index 40ffde4fe9ef..a4762ec48418 100644 --- a/examples/image-pull-secrets.yaml +++ b/examples/image-pull-secrets.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: hello-world imagePullSecrets: diff --git a/examples/influxdb-ci.yaml b/examples/influxdb-ci.yaml index 4b6b865d09a7..bcebc8e4a9f6 100644 --- a/examples/influxdb-ci.yaml +++ b/examples/influxdb-ci.yaml @@ -2,7 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: influxdb-ci- - + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: influxdb-ci arguments: @@ -55,7 +56,7 @@ spec: - name: source path: /src container: - image: golang:1.9.2 + image: golang:1.18 command: ["/bin/sh", "-c"] args: ["cd /src && git status && ls -l"] @@ -69,7 +70,7 @@ spec: - name: influxd path: /go/bin container: - image: golang:1.9.2 + image: golang:1.18 command: ["/bin/sh", "-c"] args: [" cd /go/src/github.com/influxdata/influxdb && @@ -88,7 +89,7 @@ spec: - name: source path: /go/src/github.com/influxdata/influxdb container: - image: golang:1.9.2 + image: golang:1.18 command: ["/bin/sh", "-c"] args: [" cd /go/src/github.com/influxdata/influxdb && @@ -132,7 +133,7 @@ spec: - name: covreport path: /tmp/index.html container: - image: golang:1.9.2 + image: golang:1.18 command: ["/bin/sh", "-c"] args: [" cd /go/src/github.com/influxdata/influxdb && @@ -199,7 +200,7 @@ spec: - name: data path: /var/lib/influxdb/data container: - image: debian:9.4 + image: busybox readinessProbe: httpGet: path: /ping @@ -218,7 +219,7 @@ spec: parameters: - name: cmd container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["/bin/sh", "-c"] args: ["{{inputs.parameters.cmd}}"] resources: diff --git a/examples/init-container.yaml b/examples/init-container.yaml index dc2aeb03ba12..1836f411994e 100644 --- a/examples/init-container.yaml +++ b/examples/init-container.yaml @@ -7,14 +7,14 @@ spec: templates: - name: init-container-example container: - image: alpine:latest + image: alpine:3.6 command: ["echo", "bye"] volumeMounts: - name: foo mountPath: /foo initContainers: - name: hello - image: alpine:latest + image: alpine:3.6 command: ["echo", "hello"] mirrorVolumeMounts: true volumes: diff --git a/examples/input-artifact-azure.yaml b/examples/input-artifact-azure.yaml index 4e1eb240cbc5..1fdeb5d91123 100644 --- a/examples/input-artifact-azure.yaml +++ b/examples/input-artifact-azure.yaml @@ -9,6 +9,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-s3- spec: entrypoint: input-artifact-s3-example diff --git a/examples/input-artifact-gcs.yaml b/examples/input-artifact-gcs.yaml index d6f13fd87b7f..269ef032f46d 100644 --- a/examples/input-artifact-gcs.yaml +++ b/examples/input-artifact-gcs.yaml @@ -8,6 +8,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-gcs- spec: entrypoint: input-artifact-gcs-example diff --git a/examples/input-artifact-git.yaml b/examples/input-artifact-git.yaml index f8049b8c2e26..7712a82ae8e5 100644 --- a/examples/input-artifact-git.yaml +++ b/examples/input-artifact-git.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-git- spec: entrypoint: git-clone diff --git a/examples/input-artifact-http.yaml b/examples/input-artifact-http.yaml index 4d1e57b0c80f..7ae8dfcb55e4 100644 --- a/examples/input-artifact-http.yaml +++ b/examples/input-artifact-http.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-http- spec: entrypoint: http-artifact-example @@ -15,6 +17,6 @@ spec: http: url: https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubectl container: - image: debian:9.4 + image: alpine:3.6 command: [sh, -c] args: ["kubectl version"] diff --git a/examples/input-artifact-oss.yaml b/examples/input-artifact-oss.yaml index bae3f4acb773..b2fef4aaff8d 100644 --- a/examples/input-artifact-oss.yaml +++ b/examples/input-artifact-oss.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-oss- spec: entrypoint: input-artifact-oss-example diff --git a/examples/input-artifact-raw.yaml b/examples/input-artifact-raw.yaml index bb835ca549e0..2c682c2db535 100644 --- a/examples/input-artifact-raw.yaml +++ b/examples/input-artifact-raw.yaml @@ -16,6 +16,6 @@ spec: the raw file contents container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] - args: ["cat /tmp/file"] \ No newline at end of file + args: ["cat /tmp/file"] diff --git a/examples/input-artifact-s3.yaml b/examples/input-artifact-s3.yaml index 25a6e9812a16..e9e8761a98fa 100644 --- a/examples/input-artifact-s3.yaml +++ b/examples/input-artifact-s3.yaml @@ -8,6 +8,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-artifact-s3- spec: entrypoint: input-artifact-s3-example diff --git a/examples/intermediate-parameters.yaml b/examples/intermediate-parameters.yaml index 67a46ff32a5e..128db70b47e3 100644 --- a/examples/intermediate-parameters.yaml +++ b/examples/intermediate-parameters.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: intermediate-parameters-cicd- spec: entrypoint: cicd-pipeline diff --git a/examples/k8s-jobs.yaml b/examples/k8s-jobs.yaml index 8e4d6cdb7821..cd0ad8d08fc6 100644 --- a/examples/k8s-jobs.yaml +++ b/examples/k8s-jobs.yaml @@ -6,7 +6,15 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: - name: k8s-jobs + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + Error (exit code 64): no more retries Error from server (Forbidden): error when + creating "/tmp/manifest.yaml": jobs.batch is forbidden: User + "system:serviceaccount:argo:default" cannot create resource "jobs" in API group + "batch" in the namespace "argo" + name: k8s-jobs spec: entrypoint: rand-num templates: diff --git a/examples/k8s-orchestration.yaml b/examples/k8s-orchestration.yaml index 6ee146ddd5c7..15a5a2afff24 100644 --- a/examples/k8s-orchestration.yaml +++ b/examples/k8s-orchestration.yaml @@ -4,6 +4,14 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + main: Error (exit code 64): no more retries Error from server (Forbidden): + error when creating "/tmp/manifest.yaml": jobs.batch is forbidden: U ser + "system:serviceaccount:argo:default" cannot create resource "jobs" in API + group "batch" in the namespace "argo" generateName: k8s-orchestrate- spec: entrypoint: k8s-orchestrate diff --git a/examples/k8s-owner-reference.yaml b/examples/k8s-owner-reference.yaml index d31dfe24cc1a..34334efb7c45 100644 --- a/examples/k8s-owner-reference.yaml +++ b/examples/k8s-owner-reference.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: k8s-owner-reference- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example creates a Kubernetes resource that will be deleted @@ -30,4 +28,4 @@ spec: templates: - name: main container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/k8s-patch-json-pod.yaml b/examples/k8s-patch-json-pod.yaml index 1bf9ac569a6e..6cc4234e66c0 100644 --- a/examples/k8s-patch-json-pod.yaml +++ b/examples/k8s-patch-json-pod.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: k8s-patch-json-pod- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example shows a more advanced patch with json mergeStrategy diff --git a/examples/k8s-patch-json-workflow.yaml b/examples/k8s-patch-json-workflow.yaml index 6e417ca1de14..baa3ad5e5a08 100644 --- a/examples/k8s-patch-json-workflow.yaml +++ b/examples/k8s-patch-json-workflow.yaml @@ -1,6 +1,14 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + main: Error (exit code 64): no more retries Error from server (Forbidden): + workflows.argoproj.io "k8s-patch-json-workflow-mfwwt" is forb idden: User + "system:serviceaccount:argo:default" cannot patch resource "workflows" in + API group "argoproj.io" in the namespace "argo" generateName: k8s-patch-json-workflow- annotations: workflows.argoproj.io/description: | diff --git a/examples/k8s-patch-merge-pod.yaml b/examples/k8s-patch-merge-pod.yaml index be7028f170ea..5d88949f8afe 100644 --- a/examples/k8s-patch-merge-pod.yaml +++ b/examples/k8s-patch-merge-pod.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: k8s-patch-merge-pod- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example shows a more advanced JSON merge patch diff --git a/examples/k8s-patch-pod.yaml b/examples/k8s-patch-pod.yaml index ccbff1849c28..d32a45dac986 100644 --- a/examples/k8s-patch-pod.yaml +++ b/examples/k8s-patch-pod.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: k8s-patch-pod- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This example shows a standard patch with the default mergeStrategy (strategic) diff --git a/examples/k8s-resource-log-selector.yaml b/examples/k8s-resource-log-selector.yaml index 9f7f7c849eda..0944a96d333c 100644 --- a/examples/k8s-resource-log-selector.yaml +++ b/examples/k8s-resource-log-selector.yaml @@ -8,6 +8,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: k8s-jobs-log-selector- spec: entrypoint: tf-jobtmpl diff --git a/examples/k8s-set-owner-reference.yaml b/examples/k8s-set-owner-reference.yaml index a9de5a737d84..4fc3ffa01524 100644 --- a/examples/k8s-set-owner-reference.yaml +++ b/examples/k8s-set-owner-reference.yaml @@ -8,6 +8,14 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + main: Error (exit code 64): no more retries Error from server (Forbidden): + error when creating "/tmp/manifest.yaml": configmaps is forbidden: User + "system:serviceaccount:argo:default" cannot create resource "configmaps" + in API group "" in the namespace "argo" generateName: k8s-set-owner-reference- spec: entrypoint: k8s-set-owner-reference diff --git a/examples/k8s-wait-wf.yaml b/examples/k8s-wait-wf.yaml index c53711069ae0..a978fead9d09 100644 --- a/examples/k8s-wait-wf.yaml +++ b/examples/k8s-wait-wf.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: k8s-wait-wf- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: k8s-wait-wf templates: @@ -30,7 +32,7 @@ spec: templates: - name: sleep container: - image: alpine:latest + image: alpine:3.6 command: [sleep, "20"] outputs: parameters: diff --git a/examples/label-value-from-workflow.yaml b/examples/label-value-from-workflow.yaml index 6190667cc64c..8f76318b7168 100644 --- a/examples/label-value-from-workflow.yaml +++ b/examples/label-value-from-workflow.yaml @@ -21,4 +21,4 @@ spec: templates: - name: main container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/life-cycle-hooks-tmpl-level.yaml b/examples/life-cycle-hooks-tmpl-level.yaml index 91e51cb5c596..8e6b2e5d1571 100644 --- a/examples/life-cycle-hooks-tmpl-level.yaml +++ b/examples/life-cycle-hooks-tmpl-level.yaml @@ -1,39 +1,39 @@ - apiVersion: argoproj.io/v1alpha1 - kind: Workflow - metadata: - generateName: lifecycle-hook-tmpl-level- - spec: - entrypoint: main - templates: - - name: main - steps: - - - name: step-1 - hooks: - running: # Name of hook does not matter - # Expr will not support `-` on variable name. Variable should wrap with `[]` - expression: steps["step-1"].status == "Running" - template: http - success: - expression: steps["step-1"].status == "Succeeded" - template: http - template: echo - - - name: step2 - hooks: - running: - expression: steps.step2.status == "Running" - template: http - success: - expression: steps.step2.status == "Succeeded" - template: http - template: echo +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: lifecycle-hook-tmpl-level- +spec: + entrypoint: main + templates: + - name: main + steps: + - - name: step-1 + hooks: + running: # Name of hook does not matter + # Expr will not support `-` on variable name. Variable should wrap with `[]` + expression: steps["step-1"].status == "Running" + template: http + success: + expression: steps["step-1"].status == "Succeeded" + template: http + template: echo + - - name: step2 + hooks: + running: + expression: steps.step2.status == "Running" + template: http + success: + expression: steps.step2.status == "Succeeded" + template: http + template: echo - - name: echo - container: - image: alpine:3.6 - command: [sh, -c] - args: ["echo \"it was heads\""] + - name: echo + container: + image: alpine:3.6 + command: [sh, -c] + args: ["echo \"it was heads\""] - - name: http - http: - # url: http://dummy.restapiexample.com/api/v1/employees - url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json" + - name: http + http: + # url: http://dummy.restapiexample.com/api/v1/employees + url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json" diff --git a/examples/life-cycle-hooks-wf-level.yaml b/examples/life-cycle-hooks-wf-level.yaml index 5865589a87f7..2838aa6fd07d 100644 --- a/examples/life-cycle-hooks-wf-level.yaml +++ b/examples/life-cycle-hooks-wf-level.yaml @@ -25,4 +25,4 @@ spec: - name: http http: # url: http://dummy.restapiexample.com/api/v1/employees - url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json" \ No newline at end of file + url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json" diff --git a/examples/loops-arbitrary-sequential-steps.yaml b/examples/loops-arbitrary-sequential-steps.yaml index 1d30b0be1e70..4d83165d92dc 100644 --- a/examples/loops-arbitrary-sequential-steps.yaml +++ b/examples/loops-arbitrary-sequential-steps.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: loop-arbitrary-sequential-steps- spec: entrypoint: loop-arbitrary-sequential-steps-example @@ -44,6 +46,6 @@ spec: - name: exit_code - name: message container: - image: alpine + image: alpine:3.6 command: [ '/bin/sh', '-c' ] args: [ "echo {{inputs.parameters.message}}; exit {{inputs.parameters.exit_code}}" ] diff --git a/examples/loops-dag.yaml b/examples/loops-dag.yaml index 0a3f278a45c9..d81e83c59f16 100644 --- a/examples/loops-dag.yaml +++ b/examples/loops-dag.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: loops-dag- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: loops-dag templates: diff --git a/examples/loops-maps.yaml b/examples/loops-maps.yaml index 2b8fc96b6b3e..b3ba2f06f764 100644 --- a/examples/loops-maps.yaml +++ b/examples/loops-maps.yaml @@ -1,6 +1,13 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-resons: | + the code that checks images allowed to run in test runs before the actual + image value is applied. In this case it checks for the template variable + and it is not an allowed image generateName: loops-maps- spec: entrypoint: loop-map-example diff --git a/examples/loops-param-argument.yaml b/examples/loops-param-argument.yaml index e8f1730b64c1..b5ff5ec91259 100644 --- a/examples/loops-param-argument.yaml +++ b/examples/loops-param-argument.yaml @@ -3,6 +3,13 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-resons: | + the code that checks images allowed to run in test runs before the actual + image value is applied. In this case it checks for the template variable + and it is not an allowed image generateName: loops-param-arg- spec: entrypoint: loop-param-arg-example diff --git a/examples/loops-param-result.yaml b/examples/loops-param-result.yaml index a8f4ffd222ed..72f2bca15366 100644 --- a/examples/loops-param-result.yaml +++ b/examples/loops-param-result.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: loops-param-result- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: loop-param-result-example templates: @@ -33,6 +35,6 @@ spec: parameters: - name: seconds container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo sleeping for {{inputs.parameters.seconds}} seconds; sleep {{inputs.parameters.seconds}}; echo done"] diff --git a/examples/loops-sequence.yaml b/examples/loops-sequence.yaml index 52e37d5ede43..bcb5110dd96a 100644 --- a/examples/loops-sequence.yaml +++ b/examples/loops-sequence.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: loops-sequence- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: loops-sequence arguments: @@ -70,5 +72,5 @@ spec: parameters: - name: msg container: - image: alpine:latest + image: alpine:3.6 command: [echo, "{{inputs.parameters.msg}}"] diff --git a/examples/nested-workflow.yaml b/examples/nested-workflow.yaml index 3a36116d4191..b1882b41e9ff 100644 --- a/examples/nested-workflow.yaml +++ b/examples/nested-workflow.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: nested-workflow- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: nested-workflow-example templates: @@ -86,7 +88,7 @@ spec: - name: in-artifact path: /tmp/art container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: [" echo 'input parameter value: {{inputs.parameters.in-parameter}}' && diff --git a/examples/node-selector.yaml b/examples/node-selector.yaml index 6eb676bd79a3..72fc4cf20999 100644 --- a/examples/node-selector.yaml +++ b/examples/node-selector.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: node-selector- spec: entrypoint: print-arch diff --git a/examples/output-artifact-azure.yaml b/examples/output-artifact-azure.yaml index 294b8ac5d2fe..33144d143a5a 100644 --- a/examples/output-artifact-azure.yaml +++ b/examples/output-artifact-azure.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: output-artifact-s3- spec: entrypoint: hello-world-to-file diff --git a/examples/output-artifact-gcs.yaml b/examples/output-artifact-gcs.yaml index d5dbdfbebb58..62e3a1ee36a0 100644 --- a/examples/output-artifact-gcs.yaml +++ b/examples/output-artifact-gcs.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: output-artifact-gcs- spec: entrypoint: hello-world-to-file diff --git a/examples/output-artifact-s3.yaml b/examples/output-artifact-s3.yaml index 097a7df621e0..f8368353bb75 100644 --- a/examples/output-artifact-s3.yaml +++ b/examples/output-artifact-s3.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: output-artifact-s3- spec: entrypoint: hello-world-to-file diff --git a/examples/parallelism-limit.yaml b/examples/parallelism-limit.yaml index 2abcb6db51b3..a090a41be67f 100644 --- a/examples/parallelism-limit.yaml +++ b/examples/parallelism-limit.yaml @@ -1,6 +1,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "duration" generateName: parallelism-limit- spec: entrypoint: parallelism-limit @@ -24,5 +26,5 @@ spec: - name: sleep container: - image: alpine:latest + image: busybox command: [sh, -c, sleep 10] diff --git a/examples/parallelism-nested-dag.yaml b/examples/parallelism-nested-dag.yaml index a721e1416c4f..09286e779ceb 100644 --- a/examples/parallelism-nested-dag.yaml +++ b/examples/parallelism-nested-dag.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "duration" generateName: parallelism-nested-dag- spec: entrypoint: A @@ -82,6 +84,6 @@ spec: parameters: - name: msg container: - image: alpine + image: alpine:3.6 command: ['/bin/sh', '-c'] args: ["echo {{inputs.parameters.msg}}; sleep 10"] diff --git a/examples/parallelism-nested-workflow.yaml b/examples/parallelism-nested-workflow.yaml index 57ac4b914dcc..b112593046c2 100644 --- a/examples/parallelism-nested-workflow.yaml +++ b/examples/parallelism-nested-workflow.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: parallelism-nested-workflow- + labels: + workflows.argoproj.io/no-test: "duration" spec: arguments: parameters: @@ -47,6 +49,6 @@ spec: parameters: - name: seq-id container: - image: alpine + image: alpine:3.6 command: ['/bin/sh', '-c'] args: ["echo {{inputs.parameters.seq-id}}; sleep 30"] diff --git a/examples/parallelism-nested.yaml b/examples/parallelism-nested.yaml index 5fd18c31ed2e..5966fdb102e8 100644 --- a/examples/parallelism-nested.yaml +++ b/examples/parallelism-nested.yaml @@ -7,6 +7,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: parallelism-nested- + labels: + workflows.argoproj.io/no-test: "duration" spec: arguments: parameters: @@ -58,6 +60,6 @@ spec: - name: seq-id - name: parallel-id container: - image: alpine + image: alpine:3.6 command: ['/bin/sh', '-c'] args: ["echo {{inputs.parameters.parallel-id}} {{inputs.parameters.seq-id}}; sleep 10"] diff --git a/examples/parallelism-template-limit.yaml b/examples/parallelism-template-limit.yaml index 5b9d1ee2fe22..675ce3bd9308 100644 --- a/examples/parallelism-template-limit.yaml +++ b/examples/parallelism-template-limit.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: parallelism-template-limit- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: parallelism-template-limit templates: @@ -24,5 +26,5 @@ spec: - name: sleep container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c, sleep 10] diff --git a/examples/parameter-aggregation-dag.yaml b/examples/parameter-aggregation-dag.yaml index e3fd4e15b63c..c3e7dabd3e54 100644 --- a/examples/parameter-aggregation-dag.yaml +++ b/examples/parameter-aggregation-dag.yaml @@ -59,7 +59,7 @@ spec: parameters: - name: num container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: - | @@ -85,7 +85,7 @@ spec: parameters: - name: num container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: - echo $(({{inputs.parameters.num}}/2)) diff --git a/examples/parameter-aggregation-script.yaml b/examples/parameter-aggregation-script.yaml index bfdea86d35b3..76e812ff2314 100644 --- a/examples/parameter-aggregation-script.yaml +++ b/examples/parameter-aggregation-script.yaml @@ -47,7 +47,7 @@ spec: parameters: - name: num script: - image: alpine:latest + image: alpine:3.6 command: [sh, -x] source: | echo $(({{inputs.parameters.num}}/2)) diff --git a/examples/parameter-aggregation.yaml b/examples/parameter-aggregation.yaml index d823f183b413..e47aec5bc70d 100644 --- a/examples/parameter-aggregation.yaml +++ b/examples/parameter-aggregation.yaml @@ -54,7 +54,7 @@ spec: parameters: - name: num container: - image: alpine:latest + image: alpine:3.6 command: [sh, -xc] args: - | @@ -80,7 +80,7 @@ spec: parameters: - name: num script: - image: alpine:latest + image: alpine:3.6 command: [sh, -x] source: | #!/bin/sh diff --git a/examples/pod-gc-strategy-with-label-selector.yaml b/examples/pod-gc-strategy-with-label-selector.yaml index 7f52d50827d2..546e33e1149d 100644 --- a/examples/pod-gc-strategy-with-label-selector.yaml +++ b/examples/pod-gc-strategy-with-label-selector.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: pod-gc-strategy-with-label-selector- spec: entrypoint: pod-gc-strategy-with-label-selector diff --git a/examples/pod-gc-strategy.yaml b/examples/pod-gc-strategy.yaml index 969ead355ac6..5a291ce39ace 100644 --- a/examples/pod-gc-strategy.yaml +++ b/examples/pod-gc-strategy.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: pod-gc-strategy- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: pod-gc-strategy @@ -28,12 +30,12 @@ spec: - name: fail container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: ["exit 1"] - name: succeed container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: ["exit 0"] diff --git a/examples/pod-spec-from-previous-step.yaml b/examples/pod-spec-from-previous-step.yaml index d5f729debf06..9f22f1c365cb 100644 --- a/examples/pod-spec-from-previous-step.yaml +++ b/examples/pod-spec-from-previous-step.yaml @@ -25,7 +25,7 @@ spec: valueFrom: path: /tmp/resources.json script: - image: alpine:latest + image: alpine:3.6 command: [sh] source: | echo '{"memory": "10Gi", "cpu": "2000m"}' > /tmp/resources.json && cat /tmp/resources.json @@ -36,7 +36,7 @@ spec: - name: resources podSpecPatch: '{"containers":[{"name":"main", "resources":{"limits": {{inputs.parameters.resources}}, "requests": {{inputs.parameters.resources}} }}]}' script: - image: alpine:latest + image: alpine:3.6 command: [sh] source: | echo {{inputs.parameters.resources}} diff --git a/examples/recursive-for-loop.yaml b/examples/recursive-for-loop.yaml index 3839e41f1bf6..1e26d4328b9a 100644 --- a/examples/recursive-for-loop.yaml +++ b/examples/recursive-for-loop.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: recursive-loop- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: plan templates: diff --git a/examples/resource-delete-with-flags.yaml b/examples/resource-delete-with-flags.yaml index bcfedfbbb3ba..644c20e632e1 100644 --- a/examples/resource-delete-with-flags.yaml +++ b/examples/resource-delete-with-flags.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: resource-delete-with-flags- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: main diff --git a/examples/resource-flags.yaml b/examples/resource-flags.yaml index b4f289f80740..699c9031c667 100644 --- a/examples/resource-flags.yaml +++ b/examples/resource-flags.yaml @@ -6,6 +6,11 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" + annotations: + workflows.argoproj.io/no-test-reasons: | + route openshift crd not installed generateName: resource-validate- spec: entrypoint: resource-validate-example diff --git a/examples/resubmit.yaml b/examples/resubmit.yaml index f25f95f17239..39aef5573d51 100644 --- a/examples/resubmit.yaml +++ b/examples/resubmit.yaml @@ -6,6 +6,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: resubmit- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: rand-fail-dag templates: diff --git a/examples/retry-backoff.yaml b/examples/retry-backoff.yaml index 0b59be4d1f02..159f332e8d4c 100644 --- a/examples/retry-backoff.yaml +++ b/examples/retry-backoff.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: retry-backoff- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: retry-backoff templates: diff --git a/examples/retry-conditional.yaml b/examples/retry-conditional.yaml index 8a832274eef8..52949a9a7bf8 100644 --- a/examples/retry-conditional.yaml +++ b/examples/retry-conditional.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: retry-script- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: main templates: diff --git a/examples/retry-container-to-completion.yaml b/examples/retry-container-to-completion.yaml index f1df37216432..ee46b37feeaa 100644 --- a/examples/retry-container-to-completion.yaml +++ b/examples/retry-container-to-completion.yaml @@ -9,7 +9,7 @@ spec: - name: retry-to-completion retryStrategy: {} container: - image: python + image: python:alpine3.6 command: ["python", "-c"] # fail with a 80% probability args: ["import random; import sys; exit_code = random.choice(range(0, 5)); sys.exit(exit_code)"] diff --git a/examples/retry-on-error.yaml b/examples/retry-on-error.yaml index eb5fefc7b5c9..fb1829a3d8ad 100644 --- a/examples/retry-on-error.yaml +++ b/examples/retry-on-error.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: retry-on-error- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: error-container templates: @@ -11,7 +13,7 @@ spec: limit: "2" retryPolicy: "Always" # Retry on errors AND failures. Also available: "OnFailure" (default), "OnError", and "OnTransientError" (retry only on transient errors such as i/o or TLS handshake timeout. Available after v3.0.0-rc2) container: - image: python + image: python:alpine3.6 command: ["python", "-c"] # fail with a 80% probability args: ["import random; import sys; exit_code = random.choice(range(0, 5)); sys.exit(exit_code)"] diff --git a/examples/retry-with-steps.yaml b/examples/retry-with-steps.yaml index c720df3640c2..a0e1298e979f 100644 --- a/examples/retry-with-steps.yaml +++ b/examples/retry-with-steps.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: retry-with-steps- + labels: + workflows.argoproj.io/no-test: "flaky" spec: entrypoint: retry-with-steps templates: diff --git a/examples/scripts-bash.yaml b/examples/scripts-bash.yaml index 52591dfe33d4..8b0ba7b69141 100644 --- a/examples/scripts-bash.yaml +++ b/examples/scripts-bash.yaml @@ -25,8 +25,8 @@ spec: - name: gen-random-int script: - image: debian:9.4 - command: [bash] + image: alpine:3.6 + command: [sh, -c] source: | cat /dev/urandom | od -N2 -An -i | awk -v f=1 -v r=100 '{printf "%i\n", f + r * $1 / 65536}' @@ -35,6 +35,6 @@ spec: parameters: - name: message container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo result was: {{inputs.parameters.message}}"] diff --git a/examples/scripts-javascript.yaml b/examples/scripts-javascript.yaml index a6a2cc622f8c..4105cd67f6d0 100644 --- a/examples/scripts-javascript.yaml +++ b/examples/scripts-javascript.yaml @@ -36,6 +36,6 @@ spec: parameters: - name: message container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo result was: {{inputs.parameters.message}}"] diff --git a/examples/scripts-python.yaml b/examples/scripts-python.yaml index fe002b10220c..b9d415931e2f 100644 --- a/examples/scripts-python.yaml +++ b/examples/scripts-python.yaml @@ -37,6 +37,6 @@ spec: parameters: - name: message container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo result was: {{inputs.parameters.message}}"] diff --git a/examples/secrets.yaml b/examples/secrets.yaml index 7b7a9bb19966..0ccc64680026 100644 --- a/examples/secrets.yaml +++ b/examples/secrets.yaml @@ -11,6 +11,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: secrets- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: print-secret # To use a secret as files, it is exactly the same as mounting secrets as in @@ -25,7 +27,7 @@ spec: templates: - name: print-secret container: - image: alpine:3.7 + image: alpine:3.6 command: [sh, -c] args: [' echo "secret from env: $MYSECRETPASSWORD"; diff --git a/examples/sidecar-dind.yaml b/examples/sidecar-dind.yaml index fdf79f8462ac..1eaea7f42827 100644 --- a/examples/sidecar-dind.yaml +++ b/examples/sidecar-dind.yaml @@ -6,6 +6,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: sidecar-dind- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: dind-sidecar-example templates: diff --git a/examples/sidecar-nginx.yaml b/examples/sidecar-nginx.yaml index 445fb580d622..0f9eb19575b7 100644 --- a/examples/sidecar-nginx.yaml +++ b/examples/sidecar-nginx.yaml @@ -7,7 +7,7 @@ spec: templates: - name: sidecar-nginx-example container: - image: appropriate/curl + image: curlimages/curl:latest command: [sh, -c] args: ["until `curl -G 'http://127.0.0.1/' >& /tmp/out`; do echo sleep && sleep 1; done && cat /tmp/out"] sidecars: diff --git a/examples/sidecar.yaml b/examples/sidecar.yaml index c5e0dcb7d55a..5306db7b6e20 100644 --- a/examples/sidecar.yaml +++ b/examples/sidecar.yaml @@ -7,7 +7,7 @@ spec: templates: - name: sidecar-example container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: [" apk update && diff --git a/examples/step-level-timeout.yaml b/examples/step-level-timeout.yaml index 5d9dd0bebe43..c12e5e4bc809 100644 --- a/examples/step-level-timeout.yaml +++ b/examples/step-level-timeout.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: steps-tmpl-timeout- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: sleep-sleep templates: @@ -27,6 +29,6 @@ spec: parameters: - name: timeout container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 30s"] diff --git a/examples/steps-daemon-retry-strategy.yaml b/examples/steps-daemon-retry-strategy.yaml index c2c68ab87098..14e18a940d70 100644 --- a/examples/steps-daemon-retry-strategy.yaml +++ b/examples/steps-daemon-retry-strategy.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: steps-daemon-retry- + labels: + workflows.argoproj.io/no-test: "duration" spec: entrypoint: main @@ -24,7 +26,7 @@ spec: limit: "10" daemon: true container: - image: nginx:latest + image: nginx:1.13 command: ["nginx"] args: ["-g", "daemon off;"] readinessProbe: @@ -42,6 +44,6 @@ spec: mutexes: - name: client-{{workflow.uid}} container: - image: appropriate/curl:latest + image: curlimages/curl:latest command: ["/bin/sh", "-c"] args: ["echo curl --silent -G http://{{inputs.parameters.server-ip}}:80/ && curl --silent -G http://{{inputs.parameters.server-ip}}:80/"] diff --git a/examples/steps-inline-workflow.yaml b/examples/steps-inline-workflow.yaml index 647f2d53b9a2..b547fbac8679 100644 --- a/examples/steps-inline-workflow.yaml +++ b/examples/steps-inline-workflow.yaml @@ -2,8 +2,6 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: steps-inline- - labels: - workflows.argoproj.io/test: "true" annotations: workflows.argoproj.io/description: | This workflow demonstrates running a steps with inline templates. @@ -16,4 +14,4 @@ spec: - - name: a inline: container: - image: argoproj/argosay:v2 \ No newline at end of file + image: argoproj/argosay:v2 diff --git a/examples/suspend-template-outputs.yaml b/examples/suspend-template-outputs.yaml index 15c1b369c964..b357a36957b8 100644 --- a/examples/suspend-template-outputs.yaml +++ b/examples/suspend-template-outputs.yaml @@ -10,6 +10,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: suspend-outputs + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: suspend templates: diff --git a/examples/suspend-template.yaml b/examples/suspend-template.yaml index d85dedfc975f..9c47737371c0 100644 --- a/examples/suspend-template.yaml +++ b/examples/suspend-template.yaml @@ -13,6 +13,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: suspend-template- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: suspend templates: diff --git a/examples/synchronization-db-mutex-tmpl-level.yaml b/examples/synchronization-db-mutex-tmpl-level.yaml index 029a1b9cf2dd..278e4030bb0d 100644 --- a/examples/synchronization-db-mutex-tmpl-level.yaml +++ b/examples/synchronization-db-mutex-tmpl-level.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: synchronization-db-tmpl-level-mutex- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: synchronization-db-tmpl-level-mutex-example templates: @@ -31,7 +33,7 @@ spec: - name: welcome database: true # v3.7 and after container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 20; echo acquired lock"] @@ -41,6 +43,6 @@ spec: - name: test database: true # v3.7 and after container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 50; echo acquired lock"] diff --git a/examples/synchronization-db-mutex-wf-level.yaml b/examples/synchronization-db-mutex-wf-level.yaml index 582b00a44a5f..c9575fefb040 100644 --- a/examples/synchronization-db-mutex-wf-level.yaml +++ b/examples/synchronization-db-mutex-wf-level.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: synchronization-db-wf-level- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: hello-world synchronization: diff --git a/examples/synchronization-db-tmpl-level.yaml b/examples/synchronization-db-tmpl-level.yaml index 0f5ae6af9f8c..1d035f1a5897 100644 --- a/examples/synchronization-db-tmpl-level.yaml +++ b/examples/synchronization-db-tmpl-level.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: synchronization-db-tmpl-level- spec: entrypoint: synchronization-db-tmpl-level-example @@ -25,6 +27,6 @@ spec: - database: # v3.7 and after key: template container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 10; echo acquired lock"] diff --git a/examples/synchronization-db-wf-level.yaml b/examples/synchronization-db-wf-level.yaml index fd8befcb8d55..76fcd65428c1 100644 --- a/examples/synchronization-db-wf-level.yaml +++ b/examples/synchronization-db-wf-level.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: synchronization-db-wf-level- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: hello-world synchronization: diff --git a/examples/synchronization-mutex-tmpl-level.yaml b/examples/synchronization-mutex-tmpl-level.yaml index 948634e92e0f..76bf857259ae 100644 --- a/examples/synchronization-mutex-tmpl-level.yaml +++ b/examples/synchronization-mutex-tmpl-level.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: synchronization-tmpl-level-mutex- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: synchronization-tmpl-level-mutex-example templates: @@ -32,7 +34,7 @@ spec: # mutex: # deprecated: v3.5 and before # name: welcome container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 20; echo acquired lock"] @@ -43,6 +45,6 @@ spec: # mutex: # deprecated: v3.5 and before # name: test container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 50; echo acquired lock"] diff --git a/examples/synchronization-tmpl-level.yaml b/examples/synchronization-tmpl-level.yaml index 47232505ee32..4ac3fcdab00b 100644 --- a/examples/synchronization-tmpl-level.yaml +++ b/examples/synchronization-tmpl-level.yaml @@ -12,6 +12,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: synchronization-tmpl-level- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: synchronization-tmpl-level-example templates: @@ -36,6 +38,6 @@ spec: # name: my-config # key: template container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["sleep 10; echo acquired lock"] diff --git a/examples/synchronization-wf-level.yaml b/examples/synchronization-wf-level.yaml index 060c09cf1711..57a463c5e25a 100644 --- a/examples/synchronization-wf-level.yaml +++ b/examples/synchronization-wf-level.yaml @@ -12,6 +12,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: synchronization-wf-level- spec: entrypoint: hello-world diff --git a/examples/template-defaults.yaml b/examples/template-defaults.yaml index b3902b05091d..a215c6cb8d66 100644 --- a/examples/template-defaults.yaml +++ b/examples/template-defaults.yaml @@ -2,11 +2,15 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: template-defaults- + labels: + workflows.argoproj.io/no-test: "expected-failure" annotations: workflows.argoproj.io/description: | Template defaults will provide the fixability to configure the defaults values for all templates in workflow. Individual template can be overide default values. workflows.argoproj.io/version: '>= 3.1.0' + workflows.argoproj.io/no-test-reasons: | + This tests requires interaction and we can't test it automatically. spec: entrypoint: main templateDefaults: diff --git a/examples/template-on-exit.yaml b/examples/template-on-exit.yaml index bf704d56daa9..2c2b68cce855 100644 --- a/examples/template-on-exit.yaml +++ b/examples/template-on-exit.yaml @@ -15,6 +15,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: container-on-exit- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: step-template templates: @@ -24,12 +26,12 @@ spec: template: hello-world hooks: exit: - template: exitContainer + template: exit-container - - name: stepB template: hello-world hooks: exit: - template: exitContainer + template: exit-container - name: hello-world container: @@ -37,7 +39,7 @@ spec: command: [echo] args: ["hello world"] - - name: exitContainer + - name: exit-container container: image: busybox command: [echo] diff --git a/examples/timeouts-step.yaml b/examples/timeouts-step.yaml index 6482d7a16724..25b2b1497ed7 100644 --- a/examples/timeouts-step.yaml +++ b/examples/timeouts-step.yaml @@ -6,6 +6,17 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: timeouts-step- + labels: + workflows.argoproj.io/no-test: "expected-failure" + annotations: + workflows.argoproj.io/no-test-reason: | + It looks like the container does not terminate in a clean way + + time=2025-11-28T16:47:21.850Z level=DEBUG msg="ignore signal" argo=true signal="child exited" + time=2025-11-28T16:47:22.858Z level=DEBUG msg="forwarding signal" argo=true signal=terminated + time=2025-11-28T16:47:23.327Z level=INFO msg="sub-process exited" argo=true error="exit status 143" + time=2025-11-28T16:47:23.327Z level=DEBUG msg="ignore signal" argo=true signal="urgent I/O condition" + Error: exit status 143 spec: entrypoint: sleep templates: diff --git a/examples/timeouts-workflow.yaml b/examples/timeouts-workflow.yaml index e7c4ed4e7afa..8ba4c5525085 100644 --- a/examples/timeouts-workflow.yaml +++ b/examples/timeouts-workflow.yaml @@ -12,6 +12,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: timeouts-workflow- + labels: + workflows.argoproj.io/no-test: "environment" spec: activeDeadlineSeconds: 30 entrypoint: bunch-of-sleeps @@ -27,11 +29,11 @@ spec: - name: sleep container: - image: debian:9.5-slim + image: busybox command: [sleep, 1d] - name: unschedulable nodeSelector: beta.kubernetes.io/arch: no-such-arch container: - image: alpine:latest \ No newline at end of file + image: alpine:3.6 diff --git a/examples/volumes-emptydir.yaml b/examples/volumes-emptydir.yaml index ac94ebbfe420..02c7bf06c880 100644 --- a/examples/volumes-emptydir.yaml +++ b/examples/volumes-emptydir.yaml @@ -14,8 +14,8 @@ spec: templates: - name: volumes-emptydir-example container: - image: debian:latest - command: ["/bin/bash", "-c"] + image: alpine:3.6 + command: ["/bin/sh", "-c"] args: [" vol_found=`mount | grep /mnt/vol` && \ if [[ -n $vol_found ]]; then echo \"Volume mounted and found\"; else echo \"Not found\"; fi diff --git a/examples/volumes-existing.yaml b/examples/volumes-existing.yaml index f61e97369ade..3454df0254a6 100644 --- a/examples/volumes-existing.yaml +++ b/examples/volumes-existing.yaml @@ -28,7 +28,7 @@ spec: - name: append-to-accesslog container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo accessed at: $(date) | tee -a /mnt/vol/accesslog"] volumeMounts: @@ -37,7 +37,7 @@ spec: - name: print-accesslog container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo 'Volume access log:'; cat /mnt/vol/accesslog"] volumeMounts: diff --git a/examples/volumes-pvc.yaml b/examples/volumes-pvc.yaml index 383f43a920eb..684da7ae4a68 100644 --- a/examples/volumes-pvc.yaml +++ b/examples/volumes-pvc.yaml @@ -36,7 +36,7 @@ spec: - name: print-message-from-file container: - image: alpine:latest + image: alpine:3.6 command: [sh, -c] args: ["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"] volumeMounts: diff --git a/examples/webhdfs-input-output-artifacts.yaml b/examples/webhdfs-input-output-artifacts.yaml index 138073128898..0f101de4f96d 100644 --- a/examples/webhdfs-input-output-artifacts.yaml +++ b/examples/webhdfs-input-output-artifacts.yaml @@ -5,6 +5,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: + labels: + workflows.argoproj.io/no-test: "environment" generateName: input-output-artifact-webhdfs- spec: entrypoint: input-output-artifact-webhdfs-example diff --git a/examples/work-avoidance.yaml b/examples/work-avoidance.yaml index d007a2de55c9..350a605c59e1 100644 --- a/examples/work-avoidance.yaml +++ b/examples/work-avoidance.yaml @@ -3,6 +3,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: work-avoidance- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: main diff --git a/examples/workflow-event-binding/event-consumer-workfloweventbinding.yaml b/examples/workflow-event-binding/event-consumer-workfloweventbinding.yaml index fd92d5eb2edd..dc8011d1577e 100644 --- a/examples/workflow-event-binding/event-consumer-workfloweventbinding.yaml +++ b/examples/workflow-event-binding/event-consumer-workfloweventbinding.yaml @@ -12,4 +12,4 @@ spec: parameters: - name: appellation valueFrom: - event: payload.appellation \ No newline at end of file + event: payload.appellation diff --git a/examples/workflow-event-binding/event-consumer-workflowtemplate.yaml b/examples/workflow-event-binding/event-consumer-workflowtemplate.yaml index 0f863d71dde1..e7358390cfc8 100644 --- a/examples/workflow-event-binding/event-consumer-workflowtemplate.yaml +++ b/examples/workflow-event-binding/event-consumer-workflowtemplate.yaml @@ -27,4 +27,4 @@ spec: - name: appellation container: image: argoproj/argosay:v2 - args: [ echo, "{{inputs.parameters.salutation}} {{inputs.parameters.appellation}}" ] \ No newline at end of file + args: [ echo, "{{inputs.parameters.salutation}} {{inputs.parameters.appellation}}" ] diff --git a/examples/workflow-of-workflows.yaml b/examples/workflow-of-workflows.yaml index 162b462218d2..b9f36b3fb5f3 100644 --- a/examples/workflow-of-workflows.yaml +++ b/examples/workflow-of-workflows.yaml @@ -4,6 +4,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: workflow-of-workflows- + labels: + workflows.argoproj.io/no-test: "environment" spec: entrypoint: main templates: diff --git a/test/e2e/examples_test.go b/test/e2e/examples_test.go index 246a0d2ab967..d67a5af604da 100644 --- a/test/e2e/examples_test.go +++ b/test/e2e/examples_test.go @@ -3,47 +3,170 @@ package e2e import ( + "bytes" + "fmt" + "strings" "testing" - "github.com/stretchr/testify/suite" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/client-go/kubernetes" + + "github.com/argoproj/argo-workflows/v3/config" + "github.com/argoproj/argo-workflows/v3/pkg/client/clientset/versioned" "github.com/argoproj/argo-workflows/v3/test/e2e/fixtures" fileutil "github.com/argoproj/argo-workflows/v3/util/file" + "github.com/argoproj/argo-workflows/v3/util/kubeconfig" "github.com/argoproj/argo-workflows/v3/util/logging" + "github.com/argoproj/argo-workflows/v3/util/secrets" "github.com/argoproj/argo-workflows/v3/workflow/common" + "github.com/argoproj/argo-workflows/v3/workflow/hydrator" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/client-go/dynamic" + "sigs.k8s.io/yaml" ) -type ExamplesSuite struct { - fixtures.E2ESuite -} +func TestExampleWorkflows(t *testing.T) { + restConfig, err := kubeconfig.DefaultRestConfig() + if err != nil { + t.Fatal(err) + } + kubeClient, err := kubernetes.NewForConfig(restConfig) + if err != nil { + t.Fatal(err) + } + dyn := dynamic.NewForConfigOrDie(restConfig) -func (s *ExamplesSuite) BeforeTest(suiteName, testName string) { - s.E2ESuite.BeforeTest(suiteName, testName) - s.Given().KubectlApply("../../examples/configmaps/simple-parameters-configmap.yaml", fixtures.NoError) -} + configController := config.NewController(fixtures.Namespace, common.ConfigMapName, kubeClient) + ctx := logging.TestContext(t.Context()) + config, err := configController.Get(ctx) + if err != nil { + t.Fatal(err) + } + persistence := fixtures.NewPersistence(ctx, kubeClient, config) + + clientset, err := kubernetes.NewForConfig(restConfig) + if err != nil { + t.Fatal(err) + } + sec, err := clientset.CoreV1().Secrets(fixtures.Namespace).Get(ctx, secrets.TokenName("argo-server"), metav1.GetOptions{}) + if err != nil { + t.Fatal(err) + } + + kindToApply := map[string]bool{ + "ConfigMap": true, + "PersistentVolumeClaim": true, + "WorkflowTemplate": true, + "ClusterWorkflowTemplate": true, + } + + err = fileutil.WalkManifests(ctx, "../../examples", func(path string, data []byte) error { + docs := splitYAMLDocuments(data) + for _, doc := range docs { + if len(doc) == 0 { + continue + } + obj := &unstructured.Unstructured{} + err = yaml.Unmarshal(doc, &obj) + if err != nil || obj == nil { + continue + } + + if _, ok := kindToApply[obj.GetKind()]; !ok { + continue + } -func (s *ExamplesSuite) TestExampleWorkflows() { - ctx := logging.TestContext(s.T().Context()) - err := fileutil.WalkManifests(ctx, "../../examples", func(path string, data []byte) error { + gvr := obj.GroupVersionKind().GroupVersion().WithResource(strings.ToLower(obj.GetKind() + "s")) + if obj.GetKind() == "ClusterWorkflowTemplate" { + // cluster scoped resources don't need a namespace + _, err = dyn.Resource(gvr). + Apply( + ctx, + obj.GetName(), + obj, + metav1.ApplyOptions{ + FieldManager: "go-examples", + Force: true, + }) + } else { + _, err = dyn.Resource(gvr). + Namespace(fixtures.Namespace). + Apply( + ctx, + obj.GetName(), + obj, + metav1.ApplyOptions{ + FieldManager: "go-examples", + Force: true, + }) + } + if err != nil { + if apierrors.IsConflict(err) { + t.Logf("object %s/%s already exists or applied by another manager — skipping", obj.GetKind(), obj.GetName()) + continue + } + if apierrors.IsAlreadyExists(err) { + t.Logf("object %s/%s exists — skipping", obj.GetKind(), obj.GetName()) + continue + } + t.Fatalf("apply error %s/%s: %v", obj.GetKind(), obj.GetName(), err) + } + } + return nil + }) + if err != nil { + t.Fatal(err) + } + + err = fileutil.WalkManifests(ctx, "../../examples", func(path string, data []byte) error { wfs, err := common.SplitWorkflowYAMLFile(ctx, data, true) if err != nil { - s.T().Fatalf("Error parsing %s: %v", path, err) + t.Fatalf("Error parsing %s: %v", path, err) } for _, wf := range wfs { - if _, ok := wf.GetLabels()["workflows.argoproj.io/test"]; ok { - s.T().Logf("Found example workflow at %s with test label\n", path) - s.Given(). + t.Run(path, func(t *testing.T) { + t.Parallel() + noTestKeyword, noTextLabelExists := wf.GetLabels()["workflows.argoproj.io/no-test"] + if noTextLabelExists { + t.Skip(fmt.Sprintf("Impossible to run this example: %s", noTestKeyword)) + } + fixtures.NewGiven( + t, + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().Workflows(fixtures.Namespace), + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().WorkflowEventBindings(fixtures.Namespace), + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().WorkflowTemplates(fixtures.Namespace), + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().WorkflowTaskSets(fixtures.Namespace), + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().ClusterWorkflowTemplates(), + versioned.NewForConfigOrDie(restConfig).ArgoprojV1alpha1().CronWorkflows(fixtures.Namespace), + hydrator.New(persistence.OffloadNodeStatusRepo), + kubeClient, + string(sec.Data["token"]), + restConfig, + config). ExampleWorkflow(&wf). When(). SubmitWorkflow(). WaitForWorkflow(fixtures.ToBeSucceeded) - } + }) } return nil }) - s.CheckError(err) + if err != nil { + t.Fatal(err) + } } -func TestExamplesSuite(t *testing.T) { - suite.Run(t, new(ExamplesSuite)) +// helper: split multi-doc YAML +func splitYAMLDocuments(data []byte) [][]byte { + sections := bytes.Split(data, []byte("---")) + var docs [][]byte + for _, s := range sections { + trimmed := bytes.TrimSpace(s) + if len(trimmed) > 0 { + docs = append(docs, trimmed) + } + } + return docs } diff --git a/test/e2e/fixtures/e2e_suite.go b/test/e2e/fixtures/e2e_suite.go index 062e6f76e5fb..799c63d4a851 100644 --- a/test/e2e/fixtures/e2e_suite.go +++ b/test/e2e/fixtures/e2e_suite.go @@ -4,10 +4,11 @@ import ( "encoding/base64" "encoding/json" "fmt" - "github.com/argoproj/argo-workflows/v3/util/logging" "os" "time" + "github.com/argoproj/argo-workflows/v3/util/logging" + "github.com/argoproj/argo-workflows/v3/server/utils" "github.com/argoproj/argo-workflows/v3/util/secrets" @@ -84,8 +85,8 @@ func (s *E2ESuite) SetupSuite() { s.wfTemplateClient = versioned.NewForConfigOrDie(s.RestConfig).ArgoprojV1alpha1().WorkflowTemplates(Namespace) s.wftsClient = versioned.NewForConfigOrDie(s.RestConfig).ArgoprojV1alpha1().WorkflowTaskSets(Namespace) s.cronClient = versioned.NewForConfigOrDie(s.RestConfig).ArgoprojV1alpha1().CronWorkflows(Namespace) - s.Persistence = newPersistence(ctx, s.KubeClient, s.Config) - s.hydrator = hydrator.New(s.Persistence.offloadNodeStatusRepo) + s.Persistence = NewPersistence(ctx, s.KubeClient, s.Config) + s.hydrator = hydrator.New(s.Persistence.OffloadNodeStatusRepo) s.cwfTemplateClient = versioned.NewForConfigOrDie(s.RestConfig).ArgoprojV1alpha1().ClusterWorkflowTemplates() } diff --git a/test/e2e/fixtures/given.go b/test/e2e/fixtures/given.go index d8f62b0c77a2..35e385d307a6 100644 --- a/test/e2e/fixtures/given.go +++ b/test/e2e/fixtures/given.go @@ -20,6 +20,36 @@ import ( "github.com/argoproj/argo-workflows/v3/workflow/hydrator" ) +func NewGiven( + t *testing.T, + client v1alpha1.WorkflowInterface, + wfebClient v1alpha1.WorkflowEventBindingInterface, + wfTemplateClient v1alpha1.WorkflowTemplateInterface, + wftsClient v1alpha1.WorkflowTaskSetInterface, + cwfTemplateClient v1alpha1.ClusterWorkflowTemplateInterface, + cronClient v1alpha1.CronWorkflowInterface, + hydrator hydrator.Interface, + kubeClient kubernetes.Interface, + bearerToken string, + restConfig *rest.Config, + config *config.Config, +) *Given { + return &Given{ + t: t, + client: client, + wfebClient: wfebClient, + wfTemplateClient: wfTemplateClient, + wftsClient: wftsClient, + cwfTemplateClient: cwfTemplateClient, + cronClient: cronClient, + hydrator: hydrator, + kubeClient: kubeClient, + bearerToken: bearerToken, + restConfig: restConfig, + config: config, + } +} + type Given struct { t *testing.T client v1alpha1.WorkflowInterface @@ -136,7 +166,18 @@ func (g *Given) checkImages(wf interface{}, isExample bool) { image == "argoproj/argosay:v1" || image == "argoproj/argosay:v2" || image == "quay.io/argoproj/argocli:latest" || - (isExample && (image == "busybox" || image == "python:alpine3.6")) + (isExample && (image == "busybox" || + image == "python:alpine3.6" || + image == "golang:1.18" || + image == "nginx:1.13" || + image == "curlimages/curl:latest" || + image == "node:9.1-alpine" || + image == "docker:19.03.13" || + image == "docker:19.03.13-dind" || + image == "alpine/git:v2.26.2" || + image == "alpine:3.6" || + image == "stedolan/jq:latest" || + image == "influxdb:1.2")) } for _, t := range templates { container := t.Container diff --git a/test/e2e/fixtures/persistence.go b/test/e2e/fixtures/persistence.go index 5304dd32fa42..50c56a4c24d0 100644 --- a/test/e2e/fixtures/persistence.go +++ b/test/e2e/fixtures/persistence.go @@ -16,10 +16,10 @@ import ( type Persistence struct { WorkflowArchive persist.WorkflowArchive session db.Session - offloadNodeStatusRepo persist.OffloadNodeStatusRepo + OffloadNodeStatusRepo persist.OffloadNodeStatusRepo } -func newPersistence(ctx context.Context, kubeClient kubernetes.Interface, wcConfig *config.Config) *Persistence { +func NewPersistence(ctx context.Context, kubeClient kubernetes.Interface, wcConfig *config.Config) *Persistence { persistence := wcConfig.Persistence if persistence != nil { if persistence.PostgreSQL != nil { @@ -45,12 +45,12 @@ func newPersistence(ctx context.Context, kubeClient kubernetes.Interface, wcConf workflowArchive := persist.NewWorkflowArchive(session, persistence.GetClusterName(), Namespace, instanceIDService) return &Persistence{workflowArchive, session, offloadNodeStatusRepo} } else { - return &Persistence{offloadNodeStatusRepo: persist.ExplosiveOffloadNodeStatusRepo, WorkflowArchive: persist.NullWorkflowArchive} + return &Persistence{OffloadNodeStatusRepo: persist.ExplosiveOffloadNodeStatusRepo, WorkflowArchive: persist.NullWorkflowArchive} } } func (s *Persistence) IsEnabled() bool { - return s.offloadNodeStatusRepo.IsEnabled() + return s.OffloadNodeStatusRepo.IsEnabled() } func (s *Persistence) Close() { diff --git a/test/e2e/testdata/cluster-workflow-template-ref.yaml b/test/e2e/testdata/cluster-workflow-template-ref.yaml index 650c9b4b7991..389df33292c9 100644 --- a/test/e2e/testdata/cluster-workflow-template-ref.yaml +++ b/test/e2e/testdata/cluster-workflow-template-ref.yaml @@ -2,6 +2,8 @@ apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: workflow-template-hello-world- + labels: + workflows.argoproj.io/no-test-broken: "true" spec: entrypoint: whalesay-template arguments: