diff --git a/.argo-ci/ci.yaml b/.argo-ci/ci.yaml index b92020b4cd02..482c29aaf39d 100644 --- a/.argo-ci/ci.yaml +++ b/.argo-ci/ci.yaml @@ -22,16 +22,13 @@ spec: value: "{{item}}" withItems: - make controller-image executor-image - - make cli-linux - - make cli-darwin + - make release-clis - name: test template: ci-builder arguments: parameters: - name: cmd - value: "{{item}}" - withItems: - - dep ensure && make lint test verify-codegen + value: dep ensure && make lint test verify-codegen - name: ci-builder inputs: @@ -67,10 +64,11 @@ spec: env: - name: DOCKER_HOST value: 127.0.0.1 + - name: DOCKER_BUILDKIT + value: "1" sidecars: - name: dind - image: docker:17.10-dind + image: docker:18.09-dind securityContext: privileged: true mirrorVolumeMounts: true - diff --git a/.dockerignore b/.dockerignore index 848b59e797ff..f515f4519087 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -* -!dist -dist/pkg -!Gopkg.* \ No newline at end of file +# Prevent vendor directory from being copied to ensure we are not not pulling unexpected cruft from +# a user's workspace, and are only building off of what is locked by dep. +vendor +dist \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 58c833e48377..2732baaa1dda 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,17 +15,17 @@ Go to https://github.com/argoproj/ ## How to suggest a new feature -Go to https://groups.google.com/forum/#!forum/argoproj -* Create a new topic to discuss your feature. +Go to https://github.com/argoproj/ +* Open an issue and discuss it. ## How to setup your dev environment ### Requirements -* Golang 1.10 +* Golang 1.11 * Docker * dep v0.5 * Mac Install: `brew install dep` -* gometalinter v2.0.5 +* gometalinter v2.0.12 ### Quickstart ``` @@ -36,9 +36,16 @@ $ make ``` ### Build workflow-controller and executor images -The following will build the workflow-controller and executor images tagged with the `latest` tag, then push to a personal dockerhub repository: +The following will build the release versions of workflow-controller and executor images tagged +with the `latest` tag, then push to a personal dockerhub repository, `mydockerrepo`: +``` +$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=mydockerrepo DOCKER_PUSH=true +``` +Building release versions of the images will be slow during development, since the build happens +inside a docker build context, which cannot re-use the golang build cache between builds. To build +images quicker (for development purposes), images can be built by adding DEV_IMAGE=true. ``` -$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=jessesuen DOCKER_PUSH=true +$ make controller-image executor-image IMAGE_TAG=latest IMAGE_NAMESPACE=mydockerrepo DOCKER_PUSH=true DEV_IMAGE=true ``` ### Build argo cli @@ -49,6 +56,6 @@ $ ./dist/argo version ### Deploying controller with alternative controller/executor images ``` -$ helm install argo/argo --set images.namespace=jessesuen --set +$ helm install argo/argo --set images.namespace=mydockerrepo --set images.controller workflow-controller:latest ``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000000..79330882d7db --- /dev/null +++ b/Dockerfile @@ -0,0 +1,87 @@ +#################################################################################################### +# Builder image +# Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image +# Also used as the image in CI jobs so needs all dependencies +#################################################################################################### +FROM golang:1.11.4 as builder + +RUN apt-get update && apt-get install -y \ + git \ + make \ + wget \ + gcc \ + zip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +WORKDIR /tmp + +# Install docker +ENV DOCKER_CHANNEL stable +ENV DOCKER_VERSION 18.09.1 +RUN wget -O docker.tgz "https://download.docker.com/linux/static/${DOCKER_CHANNEL}/x86_64/docker-${DOCKER_VERSION}.tgz" && \ + tar --extract --file docker.tgz --strip-components 1 --directory /usr/local/bin/ && \ + rm docker.tgz + +# Install dep +ENV DEP_VERSION=0.5.0 +RUN wget https://github.com/golang/dep/releases/download/v${DEP_VERSION}/dep-linux-amd64 -O /usr/local/bin/dep && \ + chmod +x /usr/local/bin/dep + +# Install gometalinter +ENV GOMETALINTER_VERSION=2.0.12 +RUN curl -sLo- https://github.com/alecthomas/gometalinter/releases/download/v${GOMETALINTER_VERSION}/gometalinter-${GOMETALINTER_VERSION}-linux-amd64.tar.gz | \ + tar -xzC "$GOPATH/bin" --exclude COPYING --exclude README.md --strip-components 1 -f- && \ + ln -s $GOPATH/bin/gometalinter $GOPATH/bin/gometalinter.v2 + + +#################################################################################################### +# Argo Build stage which performs the actual build of Argo binaries +#################################################################################################### +FROM builder as argo-build + +# A dummy directory is created under $GOPATH/src/dummy so we are able to use dep +# to install all the packages of our dep lock file +COPY Gopkg.toml ${GOPATH}/src/dummy/Gopkg.toml +COPY Gopkg.lock ${GOPATH}/src/dummy/Gopkg.lock + +RUN cd ${GOPATH}/src/dummy && \ + dep ensure -vendor-only && \ + mv vendor/* ${GOPATH}/src/ && \ + rmdir vendor + +# Perform the build +WORKDIR /go/src/github.com/argoproj/argo +COPY . . +ARG MAKE_TARGET="controller executor cli-linux-amd64" +RUN make $MAKE_TARGET + + +#################################################################################################### +# argoexec +#################################################################################################### +FROM debian:9.6-slim as argoexec +# NOTE: keep the version synced with https://storage.googleapis.com/kubernetes-release/release/stable.txt +ENV KUBECTL_VERSION=1.13.1 +RUN apt-get update && \ + apt-get install -y curl jq procps git tar mime-support && \ + rm -rf /var/lib/apt/lists/* && \ + curl -L -o /usr/local/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \ + chmod +x /usr/local/bin/kubectl +COPY --from=argo-build /go/src/github.com/argoproj/argo/dist/argoexec /usr/local/bin/ + + +#################################################################################################### +# workflow-controller +#################################################################################################### +FROM scratch as workflow-controller +COPY --from=argo-build /go/src/github.com/argoproj/argo/dist/workflow-controller /bin/ +ENTRYPOINT [ "workflow-controller" ] + + +#################################################################################################### +# argocli +#################################################################################################### +FROM scratch as argocli +COPY --from=argo-build /go/src/github.com/argoproj/argo/dist/argo-linux-amd64 /bin/argo +ENTRYPOINT [ "argo" ] diff --git a/Dockerfile-argoexec b/Dockerfile-argoexec deleted file mode 100644 index 159290c6f759..000000000000 --- a/Dockerfile-argoexec +++ /dev/null @@ -1,16 +0,0 @@ -FROM debian:9.5-slim - -RUN apt-get update && \ - apt-get install -y curl jq procps git tar mime-support && \ - rm -rf /var/lib/apt/lists/* && \ - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/$(uname -m|sed 's/x86_64/amd64/g')/kubectl && \ - chmod +x ./kubectl && \ - mv ./kubectl /bin/ - -ENV DOCKER_VERSION=18.06.0 -RUN curl -O https://download.docker.com/linux/static/stable/$(uname -m)/docker-${DOCKER_VERSION}-ce.tgz && \ - tar -xzf docker-${DOCKER_VERSION}-ce.tgz && \ - mv docker/docker /usr/local/bin/docker && \ - rm -rf ./docker - -COPY dist/argoexec /bin/ diff --git a/Dockerfile-builder b/Dockerfile-builder deleted file mode 100644 index 5eb5caacd77d..000000000000 --- a/Dockerfile-builder +++ /dev/null @@ -1,32 +0,0 @@ -FROM debian:9.5-slim - -RUN apt-get update && apt-get install -y \ - git \ - make \ - curl \ - wget && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -# Install go -ENV GO_VERSION 1.10.3 -ENV GOPATH /root/go -ENV PATH ${GOPATH}/bin:/usr/local/go/bin:${PATH} -RUN ARCH=$(uname -m|sed 's/x86_64/amd64/g') && \ - wget https://storage.googleapis.com/golang/go${GO_VERSION}.linux-${ARCH}.tar.gz && \ - tar -C /usr/local/ -xf /go${GO_VERSION}.linux-${ARCH}.tar.gz && \ - rm /go${GO_VERSION}.linux-${ARCH}.tar.gz && \ - wget https://github.com/golang/dep/releases/download/v0.5.0/dep-linux-${ARCH} -O /usr/local/bin/dep && \ - chmod +x /usr/local/bin/dep && \ - mkdir -p ${GOPATH}/bin && \ - curl -sLo- https://github.com/alecthomas/gometalinter/releases/download/v2.0.5/gometalinter-2.0.5-linux-${ARCH}.tar.gz | \ - tar -xzC "$GOPATH/bin" --exclude COPYING --exclude README.md --strip-components 1 -f- - -# A dummy directory is created under $GOPATH/src/dummy so we are able to use dep -# to install all the packages of our dep lock file -COPY Gopkg.toml ${GOPATH}/src/dummy/Gopkg.toml -COPY Gopkg.lock ${GOPATH}/src/dummy/Gopkg.lock -RUN cd ${GOPATH}/src/dummy && \ - dep ensure -vendor-only && \ - mv vendor/* ${GOPATH}/src/ && \ - rmdir vendor diff --git a/Dockerfile-ci-builder b/Dockerfile-ci-builder deleted file mode 100644 index 37a3c8a712cd..000000000000 --- a/Dockerfile-ci-builder +++ /dev/null @@ -1,12 +0,0 @@ -FROM golang:1.10.3 - -WORKDIR /tmp - -RUN curl -O https://download.docker.com/linux/static/stable/$(uname -m)/docker-18.06.0-ce.tgz && \ - tar -xzf docker-18.06.0-ce.tgz && \ - mv docker/docker /usr/local/bin/docker && \ - rm -rf ./docker && \ - wget https://github.com/golang/dep/releases/download/v0.5.0/dep-linux-$(uname -m|sed 's/x86_64/amd64/g') -O /usr/local/bin/dep && \ - chmod +x /usr/local/bin/dep && \ - curl -sLo- https://github.com/alecthomas/gometalinter/releases/download/v2.0.5/gometalinter-2.0.5-linux-$(uname -m|sed 's/x86_64/amd64/g').tar.gz | \ - tar -xzC "$GOPATH/bin" --exclude COPYING --exclude README.md --strip-components 1 -f- diff --git a/Dockerfile-cli b/Dockerfile-cli deleted file mode 100644 index 39f6c45b9523..000000000000 --- a/Dockerfile-cli +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:3.7 - -COPY dist/argo-linux-amd64 /bin/argo -ENTRYPOINT [ "/bin/argo" ] diff --git a/Dockerfile-workflow-controller b/Dockerfile-workflow-controller deleted file mode 100644 index b7694f7d0dc6..000000000000 --- a/Dockerfile-workflow-controller +++ /dev/null @@ -1,5 +0,0 @@ -FROM debian:9.4 - -COPY dist/workflow-controller /bin/ - -ENTRYPOINT [ "/bin/workflow-controller" ] diff --git a/Dockerfile.argoexec-dev b/Dockerfile.argoexec-dev new file mode 100644 index 000000000000..06df127ffc8b --- /dev/null +++ b/Dockerfile.argoexec-dev @@ -0,0 +1,12 @@ +#################################################################################################### +# argoexec-dev +#################################################################################################### +FROM debian:9.6-slim as argoexec-dev +# NOTE: keep the version synced with https://storage.googleapis.com/kubernetes-release/release/stable.txt +ENV KUBECTL_VERSION=1.13.1 +RUN apt-get update && \ + apt-get install -y curl jq procps git tar mime-support && \ + rm -rf /var/lib/apt/lists/* && \ + curl -L -o /usr/local/bin/kubectl -LO https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \ + chmod +x /usr/local/bin/kubectl +COPY argoexec /usr/local/bin/ diff --git a/Dockerfile.workflow-controller-dev b/Dockerfile.workflow-controller-dev new file mode 100644 index 000000000000..9c9c6d1f4649 --- /dev/null +++ b/Dockerfile.workflow-controller-dev @@ -0,0 +1,6 @@ +#################################################################################################### +# workflow-controller-dev +#################################################################################################### +FROM scratch as workflow-controller-dev +COPY workflow-controller /bin/ +ENTRYPOINT [ "workflow-controller" ] diff --git a/Makefile b/Makefile index a9dee64bece5..1e0b730763ea 100644 --- a/Makefile +++ b/Makefile @@ -9,13 +9,13 @@ GIT_COMMIT=$(shell git rev-parse HEAD) GIT_TAG=$(shell if [ -z "`git status --porcelain`" ]; then git describe --exact-match --tags HEAD 2>/dev/null; fi) GIT_TREE_STATE=$(shell if [ -z "`git status --porcelain`" ]; then echo "clean" ; else echo "dirty"; fi) -BUILDER_IMAGE=argo-builder -# NOTE: the volume mount of ${DIST_DIR}/pkg below is optional and serves only -# to speed up subsequent builds by caching ${GOPATH}/pkg between builds. -BUILDER_CMD=docker run --rm \ - -v ${CURRENT_DIR}:/root/go/src/${PACKAGE} \ - -v ${DIST_DIR}/pkg:/root/go/pkg \ - -w /root/go/src/${PACKAGE} ${BUILDER_IMAGE} +# docker image publishing options +DOCKER_PUSH=false +IMAGE_TAG=latest +# perform static compilation +STATIC_BUILD=true +# build development images +DEV_IMAGE=false override LDFLAGS += \ -X ${PACKAGE}.version=${VERSION} \ @@ -23,22 +23,16 @@ override LDFLAGS += \ -X ${PACKAGE}.gitCommit=${GIT_COMMIT} \ -X ${PACKAGE}.gitTreeState=${GIT_TREE_STATE} -# docker image publishing options -DOCKER_PUSH=false -IMAGE_TAG=latest +ifeq (${STATIC_BUILD}, true) +override LDFLAGS += -extldflags "-static" +endif ifneq (${GIT_TAG},) IMAGE_TAG=${GIT_TAG} override LDFLAGS += -X ${PACKAGE}.gitTag=${GIT_TAG} endif -ifneq (${IMAGE_NAMESPACE},) -override LDFLAGS += -X ${PACKAGE}/cmd/argo/commands.imageNamespace=${IMAGE_NAMESPACE} -endif -ifneq (${IMAGE_TAG},) -override LDFLAGS += -X ${PACKAGE}/cmd/argo/commands.imageTag=${IMAGE_TAG} -endif -ifeq (${DOCKER_PUSH},true) +ifeq (${DOCKER_PUSH}, true) ifndef IMAGE_NAMESPACE $(error IMAGE_NAMESPACE must be set to push images (e.g. IMAGE_NAMESPACE=argoproj)) endif @@ -50,99 +44,80 @@ endif # Build the project .PHONY: all -all: cli cli-image controller-image executor-image +all: cli controller-image executor-image -.PHONY: builder -builder: - docker build -t ${BUILDER_IMAGE} -f Dockerfile-builder . +.PHONY: builder-image +builder-image: + docker build -t $(IMAGE_PREFIX)argo-ci-builder:$(IMAGE_TAG) --target builder . .PHONY: cli cli: - CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${ARGO_CLI_NAME} ./cmd/argo + go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${ARGO_CLI_NAME} ./cmd/argo .PHONY: cli-linux-amd64 -cli-linux-amd64: builder - ${BUILDER_CMD} make cli \ - CGO_ENABLED=0 \ - GOOS=linux \ - GOARCH=amd64 \ - IMAGE_TAG=$(IMAGE_TAG) \ - IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) \ - LDFLAGS='-extldflags "-static"' \ - ARGO_CLI_NAME=argo-linux-amd64 +cli-linux-amd64: + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argo-linux-amd64 ./cmd/argo .PHONY: cli-linux-ppc64le -cli-linux-ppc64le: builder - ${BUILDER_CMD} make cli \ - CGO_ENABLED=0 \ - GOOS=linux \ - GOARCH=ppc64le \ - IMAGE_TAG=$(IMAGE_TAG) \ - IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) \ - LDFLAGS='-extldflags "-static"' \ - ARGO_CLI_NAME=argo-linux-ppc64le +cli-linux-ppc64le: + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argo-linux-ppc64le ./cmd/argo .PHONY: cli-linux-s390x -cli-linux-s390x: builder - ${BUILDER_CMD} make cli \ - CGO_ENABLED=0 \ - GOOS=linux \ - GOARCH=s390x \ - IMAGE_TAG=$(IMAGE_TAG) \ - IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) \ - LDFLAGS='-extldflags "-static"' \ - ARGO_CLI_NAME=argo-linux-s390x +cli-linux-s390x: + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argo-linux-s390x ./cmd/argo .PHONY: cli-linux cli-linux: cli-linux-amd64 cli-linux-ppc64le cli-linux-s390x .PHONY: cli-darwin -cli-darwin: builder - ${BUILDER_CMD} make cli \ - GOOS=darwin \ - IMAGE_TAG=$(IMAGE_TAG) \ - IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) \ - ARGO_CLI_NAME=argo-darwin-amd64 +cli-darwin: + CGO_ENABLED=0 GOOS=darwin go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argo-darwin-amd64 ./cmd/argo .PHONY: cli-windows -cli-windows: builder - ${BUILDER_CMD} make cli \ - GOARCH=amd64 \ - GOOS=windows \ - IMAGE_TAG=$(IMAGE_TAG) \ - IMAGE_NAMESPACE=$(IMAGE_NAMESPACE) \ - LDFLAGS='-extldflags "-static"' \ - ARGO_CLI_NAME=argo-windows-amd64 - -.PHONY: controller -controller: - go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/workflow-controller ./cmd/workflow-controller +cli-windows: + CGO_ENABLED=0 GOARCH=amd64 GOOS=windows go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argo-windows-amd64 ./cmd/argo .PHONY: cli-image -cli-image: cli-linux - docker build -t $(IMAGE_PREFIX)argocli:$(IMAGE_TAG) -f Dockerfile-cli . +cli-image: + docker build -t $(IMAGE_PREFIX)argocli:$(IMAGE_TAG) --target argocli . @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)argocli:$(IMAGE_TAG) ; fi -.PHONY: controller-linux -controller-linux: builder - ${BUILDER_CMD} make controller +.PHONY: controller +controller: + CGO_ENABLED=0 go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/workflow-controller ./cmd/workflow-controller .PHONY: controller-image -controller-image: controller-linux - docker build -t $(IMAGE_PREFIX)workflow-controller:$(IMAGE_TAG) -f Dockerfile-workflow-controller . +controller-image: +ifeq ($(DEV_IMAGE), true) + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o workflow-controller ./cmd/workflow-controller + docker build -t $(IMAGE_PREFIX)workflow-controller:$(IMAGE_TAG) -f Dockerfile.workflow-controller-dev --target workflow-controller-dev . + rm -f workflow-controller +else + docker build -t $(IMAGE_PREFIX)workflow-controller:$(IMAGE_TAG) --target workflow-controller . +endif @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)workflow-controller:$(IMAGE_TAG) ; fi .PHONY: executor executor: go build -v -i -ldflags '${LDFLAGS}' -o ${DIST_DIR}/argoexec ./cmd/argoexec -.PHONY: executor-linux -executor-linux: builder - ${BUILDER_CMD} make executor - +# The DEV_IMAGE versions of controller-image and executor-image are speed optimized development +# builds of workflow-controller and argoexec images respectively. It allows for faster image builds +# by re-using the golang build cache of the desktop environment. Ideally, we would not need extra +# Dockerfiles for these, and the targets would be defined as new targets in the main Dockerfile, but +# intelligent skipping of docker build stages requires DOCKER_BUILDKIT=1 enabled, which not all +# docker daemons support (including the daemon currently used by minikube). +# TODO: move these targets to the main Dockerfile once DOCKER_BUILDKIT=1 is more pervasive. +# NOTE: have to output ouside of dist directory since dist is under .dockerignore .PHONY: executor-image -executor-image: executor-linux - docker build -t $(IMAGE_PREFIX)argoexec:$(IMAGE_TAG) -f Dockerfile-argoexec . +executor-image: +ifeq ($(DEV_IMAGE), true) + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -i -ldflags '${LDFLAGS}' -o argoexec ./cmd/argo + docker build -t $(IMAGE_PREFIX)argoexec:$(IMAGE_TAG) -f Dockerfile.argoexec-dev --target argoexec-dev . + rm -f argoexec +else + docker build -t $(IMAGE_PREFIX)argoexec:$(IMAGE_TAG) --target argoexec . +endif @if [ "$(DOCKER_PUSH)" = "true" ] ; then docker push $(IMAGE_PREFIX)argoexec:$(IMAGE_TAG) ; fi .PHONY: lint @@ -153,8 +128,8 @@ lint: test: go test ./... -.PHONY: update-codegen -update-codegen: +.PHONY: codegen +codegen: ./hack/update-codegen.sh ./hack/update-openapigen.sh go run ./hack/gen-openapi-spec/main.go ${VERSION} > ${CURRENT_DIR}/api/openapi-spec/swagger.json @@ -167,8 +142,8 @@ verify-codegen: go run ./hack/gen-openapi-spec/main.go ${VERSION} > ${CURRENT_DIR}/dist/swagger.json diff ${CURRENT_DIR}/dist/swagger.json ${CURRENT_DIR}/api/openapi-spec/swagger.json -.PHONY: update-manifests -update-manifests: +.PHONY: manifests +manifests: ./hack/update-manifests.sh .PHONY: clean @@ -179,10 +154,22 @@ clean: precheckin: test lint verify-codegen .PHONY: release-precheck -release-precheck: precheckin +release-precheck: manifests codegen precheckin @if [ "$(GIT_TREE_STATE)" != "clean" ]; then echo 'git tree state is $(GIT_TREE_STATE)' ; exit 1; fi @if [ -z "$(GIT_TAG)" ]; then echo 'commit must be tagged to perform release' ; exit 1; fi @if [ "$(GIT_TAG)" != "v$(VERSION)" ]; then echo 'git tag ($(GIT_TAG)) does not match VERSION (v$(VERSION))'; exit 1; fi +.PHONY: release-clis +release-clis: cli-image + docker build --iidfile /tmp/argo-cli-build --target argo-build --build-arg MAKE_TARGET="cli-darwin cli-windows" . + docker create --name tmp-cli `cat /tmp/argo-cli-build` + mkdir -p ${DIST_DIR} + docker cp tmp-cli:/go/src/github.com/argoproj/argo/dist/argo-darwin-amd64 ${DIST_DIR}/argo-darwin-amd64 + docker cp tmp-cli:/go/src/github.com/argoproj/argo/dist/argo-windows-amd64 ${DIST_DIR}/argo-windows-amd64 + docker rm tmp-cli + docker create --name tmp-cli $(IMAGE_PREFIX)argocli:$(IMAGE_TAG) + docker cp tmp-cli:/bin/argo ${DIST_DIR}/argo-linux-amd64 + docker rm tmp-cli + .PHONY: release -release: release-precheck controller-image cli-darwin cli-linux cli-windows executor-image cli-image +release: release-precheck controller-image executor-image cli-image release-clis diff --git a/gometalinter.json b/gometalinter.json index 408aa6a9c98a..42b62bf2758f 100644 --- a/gometalinter.json +++ b/gometalinter.json @@ -19,6 +19,7 @@ ], "Exclude": [ "pkg/client", - "vendor/" + "vendor/", + ".*warning.*fmt.Fprint" ] } diff --git a/workflow/executor/resource.go b/workflow/executor/resource.go index 2072eb23e215..fa671798e5ec 100644 --- a/workflow/executor/resource.go +++ b/workflow/executor/resource.go @@ -97,7 +97,7 @@ func (we *WorkflowExecutor) WaitResource(resourceNamespace string, resourceName // Start the condition result reader using PollImmediateInfinite // Poll intervall of 5 seconds serves as a backoff intervall in case of immediate result reader failure - err := wait.PollImmediateInfinite(time.Duration(time.Second*5), + err := wait.PollImmediateInfinite(time.Second*5, func() (bool, error) { isErrRetry, err := checkResourceState(resourceNamespace, resourceName, successReqs, failReqs)