Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
alexec authored Apr 7, 2021
2 parents 1f1d83e + 13fa652 commit b47fc46
Show file tree
Hide file tree
Showing 49 changed files with 1,121 additions and 584 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ git-ask-pass.sh
/pkg/apiclient/event/event.swagger.json
/pkg/apiclient/eventsource/eventsource.swagger.json
/pkg/apiclient/info/info.swagger.json
/pkg/apiclient/pipeline/pipeline.swagger.json
/pkg/apiclient/sensor/sensor.swagger.json
/pkg/apiclient/workflow/workflow.swagger.json
/pkg/apiclient/workflowarchive/workflow-archive.swagger.json
Expand All @@ -37,5 +38,3 @@ git-ask-pass.sh
/go-diagrams/
/.run/
pprof
pkg/apiclient/sensor/sensor.swagger.json
pkg/apiclient/eventsource/eventsource.swagger.json
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ ARG KUBECTL_VERSION
ARG JQ_VERSION

RUN apt-get update && \
apt-get --no-install-recommends install -y curl procps git apt-utils apt-transport-https ca-certificates tar mime-support && \
apt-get --no-install-recommends install -y curl procps git apt-utils apt-transport-https ca-certificates tar mime-support libcap2-bin && \
apt-get clean \
&& rm -rf \
/var/lib/apt/lists/* \
Expand Down Expand Up @@ -128,15 +128,15 @@ RUN --mount=type=cache,target=/root/.cache/go-build make dist/argo
FROM argoexec-base as argoexec

COPY --from=argoexec-build /go/src/github.com/argoproj/argo-workflows/dist/argoexec /usr/local/bin/

RUN setcap CAP_SYS_PTRACE,CAP_SYS_CHROOT+ei /usr/local/bin/argoexec
ENTRYPOINT [ "argoexec" ]

####################################################################################################

FROM argoexec-base as argoexec-dev

ADD argoexec /usr/local/bin/

RUN setcap CAP_SYS_PTRACE,CAP_SYS_CHROOT+ei /usr/local/bin/argoexec
ENTRYPOINT [ "argoexec" ]

####################################################################################################
Expand Down
49 changes: 32 additions & 17 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ GIT_BRANCH := $(shell git rev-parse --symbolic-full-name --verify --q
GIT_TAG := $(shell git describe --exact-match --tags --abbrev=0 2> /dev/null || echo untagged)
GIT_TREE_STATE := $(shell if [ -z "`git status --porcelain`" ]; then echo "clean" ; else echo "dirty"; fi)
RELEASE_TAG := $(shell if [[ "$(GIT_TAG)" =~ ^v[0-9]+\.[0-9]+\.[0-9]+.*$$ ]]; then echo "true"; else echo "false"; fi)
DEV_BRANCH := $(shell [ $(GIT_BRANCH) = master ] || [ `echo $(GIT_BRANCH) | cut -c -8` = release- ] || [ $(RELEASE_TAG) = true ] && echo false || echo true)
DEV_BRANCH := $(shell [ $(GIT_BRANCH) = master ] || [ `echo $(GIT_BRANCH) | cut -c -8` = release- ] || [ `echo $(GIT_BRANCH) | cut -c -4` = dev- ] || [ $(RELEASE_TAG) = true ] && echo false || echo true)

GREP_LOGS := ""

Expand All @@ -39,8 +39,6 @@ else
STATIC_FILES ?= $(shell [ $(DEV_BRANCH) = true ] && echo false || echo true)
endif

$(info GIT_COMMIT=$(GIT_COMMIT) GIT_BRANCH=$(GIT_BRANCH) GIT_TAG=$(GIT_TAG) GIT_TREE_STATE=$(GIT_TREE_STATE) RELEASE_TAG=$(RELEASE_TAG) DEV_BRANCH=$(DEV_BRANCH) VERSION=$(VERSION) STATIC_FILES=$(STATIC_FILES))

START_UI ?= $(shell [ "$(CI)" != "" ] && echo true || echo false)
GOTEST ?= go test -v
PROFILE ?= minimal
Expand All @@ -57,7 +55,9 @@ endif
# * `local` run the workflow–controller and argo-server as single replicas on the local machine (default)
# * `kubernetes` run the workflow-controller and argo-server on the Kubernetes cluster
RUN_MODE := local
K3D := $(shell if [[ "`which kubectl`" != '' ]] && [[ "`kubectl config current-context`" == "k3d-"* ]]; then echo true; else echo false; fi)
KUBECTX := $(shell [[ "`which kubectl`" != '' ]] && kubectl config current-context || echo none)
DOCKER_DESKTOP := $(shell [[ "$(KUBECTX)" == "docker-desktop" ]] && echo true || echo false)
K3D := $(shell [[ "$(KUBECTX)" == "k3d-"* ]] && echo true || echo false)
LOG_LEVEL := debug
UPPERIO_DB_DEBUG := 0
NAMESPACED := true
Expand All @@ -70,6 +70,10 @@ endif

ALWAYS_OFFLOAD_NODE_STATUS := false

$(info GIT_COMMIT=$(GIT_COMMIT) GIT_BRANCH=$(GIT_BRANCH) GIT_TAG=$(GIT_TAG) GIT_TREE_STATE=$(GIT_TREE_STATE) RELEASE_TAG=$(RELEASE_TAG) DEV_BRANCH=$(DEV_BRANCH) VERSION=$(VERSION))
$(info KUBECTX=$(KUBECTX) DOCKER_DESKTOP=$(DOCKER_DESKTOP) K3D=$(K3D) DOCKER_PUSH=$(DOCKER_PUSH))
$(info RUN_MODE=$(RUN_MODE) PROFILE=$(PROFILE) AUTH_MODE=$(AUTH_MODE) SECURE=$(SECURE) STATIC_FILES=$(STATIC_FILES) ALWAYS_OFFLOAD_NODE_STATUS=$(ALWAYS_OFFLOAD_NODE_STATUS) UPPERIO_DB_DEBUG=$(UPPERIO_DB_DEBUG) LOG_LEVEL=$(LOG_LEVEL) NAMESPACED=$(NAMESPACED))

override LDFLAGS += \
-X github.com/argoproj/argo-workflows/v3.version=$(VERSION) \
-X github.com/argoproj/argo-workflows/v3.buildDate=${BUILD_DATE} \
Expand Down Expand Up @@ -103,7 +107,7 @@ PROTO_BINARIES := $(GOPATH)/bin/protoc-gen-gogo $(GOPATH)/bin/protoc-gen-gogofas

# go_install,path
define go_install
[ -e ./vendor ] || go mod vendor
go mod vendor
go install -mod=vendor ./vendor/$(1)
endef

Expand Down Expand Up @@ -178,10 +182,10 @@ dist/argo-linux-s390x: GOARGS = GOOS=linux GOARCH=s390x
dist/argo-%.gz: dist/argo-%
gzip --force --keep dist/argo-$*

dist/argo-%: server/static/files.go argo-server.crt argo-server.key $(CLI_PKGS)
dist/argo-%: server/static/files.go argo-server.crt argo-server.key $(CLI_PKGS) go.sum
CGO_ENABLED=0 $(GOARGS) go build -v -i -ldflags '${LDFLAGS} -extldflags -static' -o $@ ./cmd/argo

dist/argo: server/static/files.go argo-server.crt argo-server.key $(CLI_PKGS)
dist/argo: server/static/files.go argo-server.crt argo-server.key $(CLI_PKGS) go.sum
ifeq ($(shell uname -s),Darwin)
# if local, then build fast: use CGO and dynamic-linking
go build -v -i -ldflags '${LDFLAGS}' -o $@ ./cmd/argo
Expand All @@ -197,7 +201,7 @@ argo-server.key:
.PHONY: cli-image
cli-image: dist/argocli.image

dist/argocli.image: $(CLI_PKGS) argo-server.crt argo-server.key
dist/argocli.image: $(CLI_PKGS) go.sum argo-server.crt argo-server.key
$(call docker_build,argocli)
touch dist/argocli.image

Expand All @@ -209,7 +213,7 @@ clis: dist/argo-linux-amd64.gz dist/argo-linux-arm64.gz dist/argo-linux-ppc64le.
.PHONY: controller
controller: dist/workflow-controller

dist/workflow-controller: $(CONTROLLER_PKGS)
dist/workflow-controller: $(CONTROLLER_PKGS) go.sum
ifeq ($(shell uname -s),Darwin)
# if local, then build fast: use CGO and dynamic-linking
go build -v -i -ldflags '${LDFLAGS}' -o $@ ./cmd/workflow-controller
Expand All @@ -220,13 +224,13 @@ endif
.PHONY: controller-image
controller-image: dist/controller.image

dist/controller.image: $(CONTROLLER_PKGS) Dockerfile
dist/controller.image: $(CONTROLLER_PKGS) go.sum Dockerfile
$(call docker_build,workflow-controller)
touch dist/controller.image

# argoexec

dist/argoexec: $(ARGOEXEC_PKGS)
dist/argoexec: $(ARGOEXEC_PKGS) go.sum
ifeq ($(shell uname -s),Darwin)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS} -extldflags -static' -o $@ ./cmd/argoexec
else
Expand All @@ -243,7 +247,7 @@ dist/argoexec.image: dist/argoexec
mv argoexec dist/
docker tag argoproj/argoexec-dev:latest argoproj/argoexec:latest
else
dist/argoexec.image: $(ARGOEXEC_PKGS)
dist/argoexec.image: $(ARGOEXEC_PKGS) go.sum
$(call docker_build,argoexec)
endif
touch dist/argoexec.image
Expand Down Expand Up @@ -416,6 +420,18 @@ ifeq ($(RUN_MODE),kubernetes)
kubectl -n $(KUBE_NAMESPACE) scale deploy/argo-server --replicas 1
endif

# nuke is like "clean" but attempts to return you to a state as if it had never been installed at all
# this only available in "safe" local development
ifeq (true,$(filter true, $(DOCKER_DESKTOP) $(K3D)))
nuke:
kubectl delete --ignore-not-found workflow,cronworkflow,clusterworkflowtemplate,workflowtemplate,workfloweventbinding --all || true
kubectl delete --ignore-not-found ns argo
kubectl delete --ignore-not-found -k manifests/base/crds/minimal
git clean -fxd
docker image rm argoproj/argoexec argoproj/argoexec-dev argoproj/argocli argoproj/workflow-controller || true
docker system prune -f
endif

.PHONY: argosay
argosay:
cd test/e2e/images/argosay/v2 && docker build . -t argoproj/argosay:v2
Expand Down Expand Up @@ -444,7 +460,7 @@ $(GOPATH)/bin/goreman:

.PHONY: start
ifeq ($(RUN_MODE),local)
start: install executor-image controller cli $(GOPATH)/bin/goreman
start: install controller cli $(GOPATH)/bin/goreman
else
start: install executor-image controller-image cli-image
endif
Expand All @@ -458,8 +474,7 @@ endif
grep '127.0.0.1[[:blank:]]*mysql' /etc/hosts
./hack/port-forward.sh
ifeq ($(RUN_MODE),local)
killall goreman node || true
env DEFAULT_REQUEUE_TIME=$(DEFAULT_REQUEUE_TIME) SECURE=$(SECURE) ALWAYS_OFFLOAD_NODE_STATUS=$(ALWAYS_OFFLOAD_NODE_STATUS) LOG_LEVEL=$(LOG_LEVEL) UPPERIO_DB_DEBUG=$(UPPERIO_DB_DEBUG) IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) VERSION=$(VERSION) AUTH_MODE=$(AUTH_MODE) NAMESPACED=$(NAMESPACED) NAMESPACE=$(KUBE_NAMESPACE) $(GOPATH)/bin/goreman -set-ports=false -logtime=false start controller argo-server logs watch-pods $(shell [ $(START_UI) = false ]&& echo ui || echo) $(shell if [ -z $GREP_LOGS ]; then echo; else echo "| grep \"$(GREP_LOGS)\""; fi)
env DEFAULT_REQUEUE_TIME=$(DEFAULT_REQUEUE_TIME) SECURE=$(SECURE) ALWAYS_OFFLOAD_NODE_STATUS=$(ALWAYS_OFFLOAD_NODE_STATUS) LOG_LEVEL=$(LOG_LEVEL) UPPERIO_DB_DEBUG=$(UPPERIO_DB_DEBUG) IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) VERSION=$(VERSION) AUTH_MODE=$(AUTH_MODE) NAMESPACED=$(NAMESPACED) NAMESPACE=$(KUBE_NAMESPACE) $(GOPATH)/bin/goreman -set-ports=false -logtime=false start $(shell if [ -z $GREP_LOGS ]; then echo; else echo "| grep \"$(GREP_LOGS)\""; fi)
endif

$(GOPATH)/bin/stern:
Expand All @@ -478,7 +493,7 @@ watch-pods:
-w

.PHONY: wait
wait:
wait: executor-image
# Wait for workflow controller
until lsof -i :9090 > /dev/null ; do sleep 10s ; done
# Wait for Argo Server
Expand Down Expand Up @@ -575,7 +590,7 @@ docs/fields.md: api/openapi-spec/swagger.json $(shell find examples -type f) hac
env ARGO_SECURE=false ARGO_INSECURE_SKIP_VERIFY=false ARGO_SERVER= ARGO_INSTANCEID= go run ./hack docgen

# generates several other files
docs/cli/argo.md: $(CLI_PKGS) server/static/files.go hack/cli/main.go
docs/cli/argo.md: $(CLI_PKGS) go.sum server/static/files.go hack/cli/main.go
go run ./hack/cli

.PHONY: validate-examples
Expand Down
7 changes: 4 additions & 3 deletions Procfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
controller: PNS_PRIVILEGED=true DEFAULT_REQUEUE_TIME=${DEFAULT_REQUEUE_TIME} LEADER_ELECTION_IDENTITY=local ALWAYS_OFFLOAD_NODE_STATUS=${ALWAYS_OFFLOAD_NODE_STATUS} OFFLOAD_NODE_STATUS_TTL=30s WORKFLOW_GC_PERIOD=30s UPPERIO_DB_DEBUG=${UPPERIO_DB_DEBUG} ARCHIVED_WORKFLOW_GC_PERIOD=30s ./dist/workflow-controller --executor-image ${IMAGE_NAMESPACE}/argoexec:${VERSION} --namespaced=${NAMESPACED} --namespace ${NAMESPACE} --loglevel ${LOG_LEVEL}
argo-server: UPPERIO_DB_DEBUG=${UPPERIO_DB_DEBUG} ./dist/argo --loglevel ${LOG_LEVEL} server --namespaced=${NAMESPACED} --namespace ${NAMESPACE} --auth-mode ${AUTH_MODE} --secure=$SECURE --x-frame-options=SAMEORIGIN
ui: yarn --cwd ui install && yarn --cwd ui start
executor-image : make executor-image
controller: ./hack/free-port.sh 9090 && PNS_PRIVILEGED=true DEFAULT_REQUEUE_TIME=${DEFAULT_REQUEUE_TIME} LEADER_ELECTION_IDENTITY=local ALWAYS_OFFLOAD_NODE_STATUS=${ALWAYS_OFFLOAD_NODE_STATUS} OFFLOAD_NODE_STATUS_TTL=30s WORKFLOW_GC_PERIOD=30s UPPERIO_DB_DEBUG=${UPPERIO_DB_DEBUG} ARCHIVED_WORKFLOW_GC_PERIOD=30s ./dist/workflow-controller --executor-image ${IMAGE_NAMESPACE}/argoexec:${VERSION} --namespaced=${NAMESPACED} --namespace ${NAMESPACE} --loglevel ${LOG_LEVEL}
argo-server: ./hack/free-port.sh 2746 && UPPERIO_DB_DEBUG=${UPPERIO_DB_DEBUG} ./dist/argo --loglevel ${LOG_LEVEL} server --namespaced=${NAMESPACED} --namespace ${NAMESPACE} --auth-mode ${AUTH_MODE} --secure=$SECURE --x-frame-options=SAMEORIGIN
ui: ./hack/free-port.sh 8080 && yarn --cwd ui install && yarn --cwd ui start
logs: make logs
watch-pods: make watch-pods
85 changes: 71 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,95 @@
[![slack](https://img.shields.io/badge/slack-argoproj-brightgreen.svg?logo=slack)](https://argoproj.github.io/community/join-slack)
[![CI](https://github.com/argoproj/argo-workflows/workflows/CI/badge.svg)](https://github.com/argoproj/argo-workflows/actions?query=event%3Apush+branch%3Amaster)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3830/badge)](https://bestpractices.coreinfrastructure.org/projects/3830)

![Argo Image](docs/assets/argo.png)
[![Twitter Follow](https://img.shields.io/twitter/follow/argoproj?style=social)](https://twitter.com/argoproj)

## What is Argo Workflows?
Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition).

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo
Workflows is implemented as a Kubernetes CRD (Custom Resource Definition).

* Define workflows where each step in the workflow is a container.
* Model multi-step workflows as a sequence of tasks or capture the dependencies between tasks using a directed acyclic graph (DAG).
* Easily run compute intensive jobs for machine learning or data processing in a fraction of the time using Argo Workflows on Kubernetes.
* Run CI/CD pipelines natively on Kubernetes without configuring complex software development products.
* Model multi-step workflows as a sequence of tasks or capture the dependencies between tasks using a directed acyclic
graph (DAG).
* Easily run compute intensive jobs for machine learning or data processing in a fraction of the time using Argo
Workflows on Kubernetes.

Argo is a [Cloud Native Computing Foundation (CNCF)](https://cncf.io/) hosted project.

[![Argo Workflows in 5 minutes](https://img.youtube.com/vi/TZgLkCFQ2tk/0.jpg)](https://www.youtube.com/watch?v=TZgLkCFQ2tk)

## Use Cases

* Machine Learning pipelines
* Data and batch processing
* ETL
* Infrastructure automation
* CI/CD

## Why Argo Workflows?
* Designed from the ground up for containers without the overhead and limitations of legacy VM and server-based environments.

* Argo Workflows is the most popular workflow execution engine for Kubernetes.
* It can run 1000s of workflows a day, each with 1000s of concurrent tasks.
* Our users say it is lighter-weight, faster, more powerful, and easier to use
* Designed from the ground up for containers without the overhead and limitations of legacy VM and server-based
environments.
* Cloud agnostic and can run on any Kubernetes cluster.
* Easily orchestrate highly parallel jobs on Kubernetes.
* Argo Workflows puts a cloud-scale supercomputer at your fingertips!

[Read what people said in our latest survey](https://blog.argoproj.io/argo-workflows-2021-survey-results-d6fa890030ee)

## Try Argo Workflows

[Access the demo enviromnment](https://workflows.apps.argoproj.io/workflows/argo) (login using Github)
[Access the demo environment](https://workflows.apps.argoproj.io/workflows/argo) (login using Github)

![Screenshot](docs/assets/screenshot.png)

## Ecosystem

![Ecosystem](docs/assets/ecosystem.png)

[Argo Events](https://github.com/argoproj/argo-events)
|
[Argo Workflows Catalog](https://argoproj-labs.github.io/argo-workflows-catalog/)
|
[Couler](https://github.com/couler-proj/couler)
|
[OnePanel](https://www.onepanel.ai/)
|
[Ploomber](https://github.com/ploomber/ploomber)
|
[SQLFlow](https://github.com/sql-machine-learning/sqlflow)
|
[Kubeflow Pipelines](https://github.com/kubeflow/pipelines)

## SDKs

Check out our [Java, Golang and Python SDKs](https://github.com/argoproj-labs/argo-client-gen).

## Quickstart

```bash
kubectl create namespace argo
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/stable/manifests/install.yaml
```

## Who uses Argo Workflows?

[Official Argo Workflows user list](USERS.md)

## Documentation

* [Get started here](docs/quick-start.md)
* [How to write Argo Workflow specs](examples/README.md)
* [How to configure your artifact repository](docs/configure-artifact-repository.md)

## Features

* UI to visualize and manage Workflows
* Artifact support (S3, Artifactory, Alibaba Cloud OSS, HTTP, Git, GCS, raw)
* Workflow templating to store commonly used Workflows in the cluster
* Archiving Workflows after executing for later access
* Scheduled workflows
* Server interface with REST API
* Scheduled workflows using cron
* Server interface with REST API (HTTP and GRPC)
* DAG or Steps based declaration of workflows
* Step level input & outputs (artifacts/parameters)
* Loops
Expand All @@ -71,14 +114,27 @@ kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflo
* Multiple executors
* Multiple pod and workflow garbage collection strategies
* Automatically calculated resource usage per step
* Java/Golang/Python SDKs
* Pod Disruption Budget support
* Single-sign on (OAuth2/OIDC)
* Webhook triggering
* CLI
* Out-of-the box and custom Prometheus metrics
* Windows container support
* Embedded widgets
* Multiplex log viewe

## Community Meetings
We host monthly community meetings where we and the community showcase demos and discuss the current and future state of the project. Feel free to join us! For Community Meeting information, minutes and recordings please [see here](https://bit.ly/argo-wf-cmty-mtng).

Participation in the Argo Workfows project is governed by the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)
We host monthly community meetings where we and the community showcase demos and discuss the current and future state of
the project. Feel free to join us! For Community Meeting information, minutes and recordings
please [see here](https://bit.ly/argo-wf-cmty-mtng).

Participation in the Argo Workflows project is governed by
the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)

## Community Blogs and Presentations

* [Automation of Everything - How To Combine Argo Events, Workflows & Pipelines, CD, and Rollouts](https://youtu.be/XNXJtxkUKeY)
* [Argo Workflows and Pipelines - CI/CD, Machine Learning, and Other Kubernetes Workflows](https://youtu.be/UMaivwrAyTA)
* [Argo Ansible role: Provisioning Argo Workflows on OpenShift](https://medium.com/@marekermk/provisioning-argo-on-openshift-with-ansible-and-kustomize-340a1fda8b50)
Expand All @@ -91,6 +147,7 @@ Participation in the Argo Workfows project is governed by the [CNCF Code of Cond
* TGI Kubernetes with Joe Beda: [Argo workflow system](https://www.youtube.com/watch?v=M_rxPPLG8pU&start=859)

## Project Resources

* Argo GitHub: https://github.com/argoproj
* Argo Website: https://argoproj.github.io/
* Argo Slack: [click here to join](https://argoproj.github.io/community/join-slack)
4 changes: 4 additions & 0 deletions USERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Currently, the following organizations are **officially** using Argo Workflows:
1. [BEI.RE](https://www.bei.re/)
1. [BioBox Analytics](https://biobox.io)
1. [BlackRock](https://www.blackrock.com/)
1. [ByteDance](https://www.bytedance.com/en/)
1. [bonprix](https://en.bonprix.de/corporate/our-company/)
1. [Canva](https://www.canva.com/)
1. [Capital One](https://www.capitalone.com/tech/)
Expand Down Expand Up @@ -64,6 +65,7 @@ Currently, the following organizations are **officially** using Argo Workflows:
1. [IBM](https://ibm.com)
1. [InsideBoard](https://www.insideboard.com)
1. [Interline Technologies](https://www.interline.io/blog/scaling-openstreetmap-data-workflows/)
1. [Intralinks](https://www.intralinks.com/)
1. [Intuit](https://www.intuit.com/)
1. [InVision](https://www.invisionapp.com/)
1. [İşbank](https://www.isbank.com.tr/en)
Expand Down Expand Up @@ -99,6 +101,7 @@ Currently, the following organizations are **officially** using Argo Workflows:
1. [Red Hat](https://www.redhat.com/en)
1. [Reserved AI](https://reserved.ai/)
1. [Riskified](https://www.riskified.com)
1. [Robinhood](https://robinhood.com/)
1. [Sage (Sage AI Labs)](https://sage.com/)
1. [SAP Fieldglass](https://www.fieldglass.com/)
1. [SAP Hybris](https://cx.sap.com/)
Expand All @@ -120,6 +123,7 @@ Currently, the following organizations are **officially** using Argo Workflows:
1. [Wavefront](https://www.wavefront.com/)
1. [Wellcome Trust](https://wellcome.ac.uk/)
1. [Woolworths Group](https://www.woolworthsgroup.com.au/)
1. [Zhihu](https://www.zhihu.com/)

### Projects Using Argo

Expand Down
Loading

0 comments on commit b47fc46

Please sign in to comment.