diff --git a/.circleci/config.yml b/.circleci/config.yml index 5ced18519..6e160c281 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,6 +17,10 @@ jobs: - run: go env - run: make build - run: make build-test-tools + - run: | + make tools + go mod vendor + make cross - save_cache: key: go-mod-cache-v1-{{ checksum "./go.sum" }} paths: @@ -25,38 +29,42 @@ jobs: root: ./ paths: - . + image: docker: - - image: circleci/golang:1.17.3 + - image: jdrouet/docker-with-buildx:stable working_directory: /home/circleci/workspace/helmfile steps: - checkout - - restore_cache: - keys: - - go-mod-cache-v1-{{ checksum "./go.sum" }} - - go-mod-cache-v1- - - setup_remote_docker + - run: mkdir ~/build + - attach_workspace: + at: ~/build + - run: mv -v ~/build/dist . + - setup_remote_docker: + version: 18.09.3 - run: command: | - make tools - go mod vendor + find dist + docker run --rm --privileged tonistiigi/binfmt:latest --install linux/arm64 + apk add --no-cache make git ORG=roboll BUILD_URL="$CIRCLE_BUILD_URL" make image image_debian: docker: - - image: circleci/golang:1.17.3 + - image: jdrouet/docker-with-buildx:stable working_directory: /home/circleci/workspace/helmfile steps: - checkout - - restore_cache: - keys: - - go-mod-cache-v1-{{ checksum "./go.sum" }} - - go-mod-cache-v1- - - setup_remote_docker + - run: mkdir ~/build + - attach_workspace: + at: ~/build + - run: mv -v ~/build/dist . + - setup_remote_docker: + version: 18.09.3 - run: command: | - make tools - go mod vendor + docker run --rm --privileged tonistiigi/binfmt:latest --install linux/arm64 + apk add --no-cache make git ORG=roboll BUILD_URL="$CIRCLE_BUILD_URL" make image/debian test: @@ -123,7 +131,8 @@ jobs: keys: - go-mod-cache-v1-{{ checksum "./go.sum" }} - go-mod-cache-v1- - - setup_remote_docker + - setup_remote_docker: + version: 18.09.3 - run: no_output_timeout: 30m command: | @@ -137,15 +146,12 @@ workflows: build_and_test: jobs: - build - - image - - image_debian - - test - - integration_tests: + - image: + requires: + - build + - image_debian: requires: - build - matrix: - parameters: - helm-version: ["v3.4.2", "v3.5.4", "v3.6.3", "v3.7.2"] - release: filters: branches: diff --git a/Dockerfile b/Dockerfile index 3a3e9ee7d..3200529eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,56 +1,52 @@ -FROM golang:1.17.3-alpine3.13 as builder - -RUN apk add --no-cache make git -WORKDIR /workspace/helmfile -COPY . /workspace/helmfile -RUN make static-linux - -# ----------------------------------------------------------------------------- - FROM alpine:3.13 RUN apk add --no-cache ca-certificates git bash curl jq +ARG TARGETARCH ARG HELM_VERSION="v3.7.2" -ARG HELM_SHA256="4ae30e48966aba5f807a4e140dad6736ee1a392940101e4d79ffb4ee86200a9e" ARG HELM_LOCATION="https://get.helm.sh" -ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" +ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" RUN set -x && \ + wget ${HELM_LOCATION}/${HELM_FILENAME}.sha256sum && \ + HELM_SHA256=$(cat ${HELM_FILENAME}.sha256sum) && \ wget ${HELM_LOCATION}/${HELM_FILENAME} && \ echo Verifying ${HELM_FILENAME}... && \ - sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ + sha256sum ${HELM_FILENAME} | grep "${HELM_SHA256}" && \ echo Extracting ${HELM_FILENAME}... && \ - tar zxvf ${HELM_FILENAME} && mv /linux-amd64/helm /usr/local/bin/ && \ - rm ${HELM_FILENAME} && rm -r /linux-amd64 + tar zxvf ${HELM_FILENAME} && mv /linux-${TARGETARCH}/helm /usr/local/bin/ && \ + rm ${HELM_FILENAME} && rm -r /linux-${TARGETARCH} # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ # for now but in a future version of alpine (in the testing version at the time of writing) # we should be able to install using apk add. -# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256 +# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256 # maybe a good idea to automate in the future? ENV KUBECTL_VERSION="v1.21.4" -ENV KUBECTL_SHA256="9410572396fb31e49d088f9816beaebad7420c7686697578691be1651d3bf85a" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256" && \ + KUBECTL_SHA256=$(cat kubectl.sha256) && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl ENV KUSTOMIZE_VERSION="v3.8.8" -ENV KUSTOMIZE_SHA256="175938206f23956ec18dac3da0816ea5b5b485a8493a839da278faac82e3c303" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | grep ${KUSTOMIZE_SHA256} && \ - tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt && \ + KUSTOMIZE_SHA256=$(grep kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz checksums.txt | awk '{print $1}') && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz | grep ${KUSTOMIZE_SHA256} && \ + tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + rm kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ mv kustomize /usr/local/bin/kustomize -RUN helm plugin install https://github.com/databus23/helm-diff --version v3.1.3 && \ +RUN set -x && \ + helm plugin install https://github.com/databus23/helm-diff --version v3.2.0 && \ helm plugin install https://github.com/jkroepke/helm-secrets --version v3.5.0 && \ helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.10.0 && \ helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.10.0 -COPY --from=builder /workspace/helmfile/dist/helmfile_linux_amd64 /usr/local/bin/helmfile +COPY dist/helmfile_linux_${TARGETARCH} /usr/local/bin/helmfile CMD ["/usr/local/bin/helmfile"] diff --git a/Dockerfile.debian b/Dockerfile.debian index 90e1e03b4..2b0d2ffbe 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -1,18 +1,3 @@ -FROM golang:1.17.3 as builder - -RUN apt-get update \ - && apt-get install --no-install-recommends -y \ - build-essential \ - git \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /workspace/helmfile -COPY . /workspace/helmfile - -RUN make static-linux - -# ----------------------------------------------------------------------------- - FROM debian:stable-slim RUN apt-get update \ @@ -25,46 +10,51 @@ RUN apt-get update \ wget \ && rm -rf /var/lib/apt/lists/* +ARG TARGETARCH ARG HELM_VERSION="v3.7.2" -ARG HELM_SHA256="4ae30e48966aba5f807a4e140dad6736ee1a392940101e4d79ffb4ee86200a9e" ARG HELM_LOCATION="https://get.helm.sh" -ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" +ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" RUN set -x && \ + wget ${HELM_LOCATION}/${HELM_FILENAME}.sha256sum && \ + HELM_SHA256=$(cat ${HELM_FILENAME}.sha256sum) && \ wget "${HELM_LOCATION}/${HELM_FILENAME}" && \ echo "Verifying ${HELM_FILENAME}..." && \ sha256sum "${HELM_FILENAME}" | grep -q "${HELM_SHA256}" && \ echo "Extracting ${HELM_FILENAME}..." && \ - tar zxvf "${HELM_FILENAME}" && mv /linux-amd64/helm /usr/local/bin/ && \ - rm ${HELM_FILENAME} && rm -r /linux-amd64 + tar zxvf "${HELM_FILENAME}" && mv /linux-${TARGETARCH}/helm /usr/local/bin/ && \ + rm ${HELM_FILENAME} && rm -r /linux-${TARGETARCH} # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ # for now but in a future version of alpine (in the testing version at the time of writing) # we should be able to install using apk add. -# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256 +# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256 # maybe a good idea to automate in the future? ENV KUBECTL_VERSION="v1.21.4" -ENV KUBECTL_SHA256="9410572396fb31e49d088f9816beaebad7420c7686697578691be1651d3bf85a" RUN set -x && \ - wget "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256" && \ + KUBECTL_SHA256=$(cat kubectl.sha256) && \ + wget "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl ENV KUSTOMIZE_VERSION="v3.8.8" -ENV KUSTOMIZE_SHA256="175938206f23956ec18dac3da0816ea5b5b485a8493a839da278faac82e3c303" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | grep ${KUSTOMIZE_SHA256} && \ - tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt && \ + KUSTOMIZE_SHA256=$(grep kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz checksums.txt | awk '{print $1}') && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz | grep ${KUSTOMIZE_SHA256} && \ + tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + rm kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ mv kustomize /usr/local/bin/kustomize -RUN helm plugin install https://github.com/databus23/helm-diff --version v3.1.3 && \ +RUN set -x && \ + helm plugin install https://github.com/databus23/helm-diff --version v3.2.0 && \ helm plugin install https://github.com/jkroepke/helm-secrets --version v3.5.0 && \ helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.10.0 && \ helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.10.0 -COPY --from=builder /workspace/helmfile/dist/helmfile_linux_amd64 /usr/local/bin/helmfile +COPY dist/helmfile_linux_${TARGETARCH} /usr/local/bin/helmfile CMD ["/usr/local/bin/helmfile"] diff --git a/Dockerfile.helm3 b/Dockerfile.helm3 index 1ae12f4c6..f6d25c4cb 100644 --- a/Dockerfile.helm3 +++ b/Dockerfile.helm3 @@ -1,55 +1,51 @@ -FROM golang:1.17.3-alpine3.13 as builder - -RUN apk add --no-cache make git -WORKDIR /workspace/helmfile -COPY . /workspace/helmfile -RUN make static-linux - -# ----------------------------------------------------------------------------- - FROM alpine:3.13 RUN apk add --no-cache ca-certificates git bash curl jq +ARG TARGETARCH ARG HELM_VERSION="v3.7.2" ARG HELM_LOCATION="https://get.helm.sh" -ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" -ARG HELM_SHA256="4ae30e48966aba5f807a4e140dad6736ee1a392940101e4d79ffb4ee86200a9e" +ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" + RUN set -x && \ + wget ${HELM_LOCATION}/${HELM_FILENAME}.sha256sum && \ + HELM_SHA256=$(cat ${HELM_FILENAME}.sha256sum) && \ wget ${HELM_LOCATION}/${HELM_FILENAME} && \ echo Verifying ${HELM_FILENAME}... && \ - sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ + sha256sum ${HELM_FILENAME} | grep "${HELM_SHA256}" && \ echo Extracting ${HELM_FILENAME}... && \ - tar zxvf ${HELM_FILENAME} && mv /linux-amd64/helm /usr/local/bin/ && \ - rm ${HELM_FILENAME} && rm -r /linux-amd64 + tar zxvf ${HELM_FILENAME} && mv /linux-${TARGETARCH}/helm /usr/local/bin/ && \ + rm ${HELM_FILENAME} && rm -r /linux-${TARGETARCH} # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ # for now but in a future version of alpine (in the testing version at the time of writing) # we should be able to install using apk add. -# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256 +# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256 # maybe a good idea to automate in the future? ENV KUBECTL_VERSION="v1.18.9" -ENV KUBECTL_SHA256="6a68756a2d3d04b4d0f52b00de6493ba2c1fcb28b32f3e4a0e99b3d9f6c4e8ed" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256" && \ + KUBECTL_SHA256=$(cat kubectl.sha256) && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl ENV KUSTOMIZE_VERSION="v3.8.8" -ENV KUSTOMIZE_SHA256="175938206f23956ec18dac3da0816ea5b5b485a8493a839da278faac82e3c303" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | grep ${KUSTOMIZE_SHA256} && \ - tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt && \ + KUSTOMIZE_SHA256=$(grep kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz checksums.txt | awk '{print $1}') && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz | grep ${KUSTOMIZE_SHA256} && \ + tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + rm kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ mv kustomize /usr/local/bin/kustomize -RUN helm plugin install https://github.com/databus23/helm-diff --version v3.1.3 && \ +RUN helm plugin install https://github.com/databus23/helm-diff --version v3.2.0 && \ helm plugin install https://github.com/jkroepke/helm-secrets --version v3.5.0 && \ helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.10.0 && \ helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.10.0 -COPY --from=builder /workspace/helmfile/dist/helmfile_linux_amd64 /usr/local/bin/helmfile +COPY dist/helmfile_linux_${TARGETARCH} /usr/local/bin/helmfile CMD ["/usr/local/bin/helmfile"] diff --git a/Dockerfile.helm3.ubuntu b/Dockerfile.helm3.ubuntu index ae46fd4f2..2ba025797 100644 --- a/Dockerfile.helm3.ubuntu +++ b/Dockerfile.helm3.ubuntu @@ -1,14 +1,3 @@ -FROM golang:1.17.3-buster as builder - -RUN apt update -qq && \ - apt install --no-install-recommends -y make git && \ - rm -rf /var/lib/apt/lists/* -WORKDIR /workspace/helmfile -COPY . /workspace/helmfile -RUN make static-linux - -# ----------------------------------------------------------------------------- - FROM ubuntu:20.10 RUN apt update -qq && \ @@ -17,47 +6,51 @@ RUN apt update -qq && \ git bash curl jq pip wget && \ rm -rf /var/lib/apt/lists/* +ARG TARGETARCH ARG HELM_VERSION="v3.7.2" ARG HELM_LOCATION="https://get.helm.sh" -ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" -ARG HELM_SHA256="4ae30e48966aba5f807a4e140dad6736ee1a392940101e4d79ffb4ee86200a9e" +ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" RUN set -x && \ + wget ${HELM_LOCATION}/${HELM_FILENAME}.sha256sum && \ + HELM_SHA256=$(cat ${HELM_FILENAME}.sha256sum) && \ wget ${HELM_LOCATION}/${HELM_FILENAME} && \ echo Verifying ${HELM_FILENAME}... && \ sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ echo Extracting ${HELM_FILENAME}... && \ - tar zxvf ${HELM_FILENAME} && mv /linux-amd64/helm /usr/local/bin/ && \ - rm ${HELM_FILENAME} && rm -r /linux-amd64 + tar zxvf ${HELM_FILENAME} && mv /linux-${TARGETARCH}/helm /usr/local/bin/ && \ + rm ${HELM_FILENAME} && rm -r /linux-${TARGETARCH} # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ # for now but in a future version of alpine (in the testing version at the time of writing) # we should be able to install using apk add. -# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256 +# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256 # maybe a good idea to automate in the future? ENV KUBECTL_VERSION="v1.18.9" -ENV KUBECTL_SHA256="6a68756a2d3d04b4d0f52b00de6493ba2c1fcb28b32f3e4a0e99b3d9f6c4e8ed" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256" && \ + KUBECTL_SHA256=$(cat kubectl.sha256) && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl ENV KUSTOMIZE_VERSION="v3.8.8" -ENV KUSTOMIZE_SHA256="175938206f23956ec18dac3da0816ea5b5b485a8493a839da278faac82e3c303" RUN set -x && \ - curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz | grep ${KUSTOMIZE_SHA256} && \ - tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ - rm kustomize_${KUSTOMIZE_VERSION}_linux_amd64.tar.gz && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt && \ + KUSTOMIZE_SHA256=$(grep kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz checksums.txt | awk '{print $1}') && \ + curl --retry 5 --retry-connrefused -LO https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + sha256sum kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz | grep ${KUSTOMIZE_SHA256} && \ + tar zxf kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ + rm kustomize_${KUSTOMIZE_VERSION}_linux_${TARGETARCH}.tar.gz && \ mv kustomize /usr/local/bin/kustomize RUN pip install sops -RUN helm plugin install https://github.com/databus23/helm-diff --version v3.1.3 && \ +RUN helm plugin install https://github.com/databus23/helm-diff --version v3.2.0 && \ helm plugin install https://github.com/jkroepke/helm-secrets --version v3.5.0 && \ helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.10.0 && \ helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.10.0 -COPY --from=builder /workspace/helmfile/dist/helmfile_linux_amd64 /usr/local/bin/helmfile +COPY --from=builder /workspace/helmfile/dist/helmfile_linux_${TARGETARCH} /usr/local/bin/helmfile CMD ["/usr/local/bin/helmfile"] diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu index 4bfc5942e..96a282c53 100644 --- a/Dockerfile.ubuntu +++ b/Dockerfile.ubuntu @@ -1,14 +1,3 @@ -FROM golang:1.17.3-buster as builder - -RUN apt update -qq && \ - apt install --no-install-recommends -y make git && \ - rm -rf /var/lib/apt/lists/* -WORKDIR /workspace/helmfile -COPY . /workspace/helmfile -RUN make static-linux - -# ----------------------------------------------------------------------------- - FROM ubuntu:20.10 RUN apt update -qq && \ @@ -17,28 +6,31 @@ RUN apt update -qq && \ git bash curl jq pip wget && \ rm -rf /var/lib/apt/lists/* +ARG TARGETARCH ARG HELM_VERSION="v2.17.0" ARG HELM_LOCATION="https://kubernetes-helm.storage.googleapis.com" -ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-amd64.tar.gz" -ARG HELM_SHA256="f3bec3c7c55f6a9eb9e6586b8c503f370af92fe987fcbf741f37707606d70296" +ARG HELM_FILENAME="helm-${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" RUN set -x && \ + wget ${HELM_LOCATION}/${HELM_FILENAME}.sha256sum && \ + HELM_SHA256=$(cat ${HELM_FILENAME}.sha256sum) && \ wget ${HELM_LOCATION}/${HELM_FILENAME} && \ echo Verifying ${HELM_FILENAME}... && \ - sha256sum ${HELM_FILENAME} | grep -q "${HELM_SHA256}" && \ + sha256sum ${HELM_FILENAME} | grep "${HELM_SHA256}" && \ echo Extracting ${HELM_FILENAME}... && \ - tar zxvf ${HELM_FILENAME} && mv /linux-amd64/helm /usr/local/bin/ && \ - mv /linux-amd64/tiller /usr/local/bin/ && \ - rm ${HELM_FILENAME} && rm -r /linux-amd64 + tar zxvf ${HELM_FILENAME} && mv /linux-${TARGETARCH}/helm /usr/local/bin/ && \ + mv /linux-${TARGETARCH}/tiller /usr/local/bin/ && \ + rm ${HELM_FILENAME} && rm -r /linux-${TARGETARCH} # using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/ # for now but in a future version of alpine (in the testing version at the time of writing) # we should be able to install using apk add. -# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl.sha256 +# the sha256 sum can be found at https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256 # maybe a good idea to automate in the future? ENV KUBECTL_VERSION="v1.18.9" -ENV KUBECTL_SHA256="6a68756a2d3d04b4d0f52b00de6493ba2c1fcb28b32f3e4a0e99b3d9f6c4e8ed" RUN set -x & \ - curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl.sha256" && \ + KUBECTL_SHA256=$(cat kubectl.sha256) && \ + curl --retry 5 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl @@ -52,6 +44,6 @@ RUN helm plugin install https://github.com/databus23/helm-diff && \ helm plugin install https://github.com/aslafy-z/helm-git.git && \ helm plugin install https://github.com/rimusz/helm-tiller -COPY --from=builder /workspace/helmfile/dist/helmfile_linux_amd64 /usr/local/bin/helmfile +COPY dist/helmfile_linux_${TARGETARCH} /usr/local/bin/helmfile CMD ["/usr/local/bin/helmfile", "--help"] diff --git a/Makefile b/Makefile index 0f113acac..b43513cfd 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ integration/vagrant: .PHONY: integration/vagrant cross: - env CGO_ENABLED=0 gox -os 'windows darwin linux' -arch '386 amd64 arm64' -osarch '!darwin/386' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}" -ldflags '-X github.com/roboll/helmfile/pkg/app/version.Version=${TAG}' ${TARGETS} + env CGO_ENABLED=0 gox -os 'linux' -arch 'amd64 arm64' -osarch '!darwin/386' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}" -ldflags '-X github.com/roboll/helmfile/pkg/app/version.Version=${TAG}' ${TARGETS} .PHONY: cross static-linux: @@ -63,7 +63,10 @@ release: pristine cross .PHONY: release image: - docker build -t quay.io/${ORG}/helmfile:${TAG} . + docker buildx build \ + --platform=linux/amd64,linux/arm64 \ + -t quay.io/${ORG}/helmfile:${TAG} \ + . run: image docker run --rm -it -t quay.io/${ORG}/helmfile:${TAG} sh @@ -72,7 +75,11 @@ push: image docker push quay.io/${ORG}/helmfile:${TAG} image/debian: - docker build -f Dockerfile.debian -t quay.io/${ORG}/helmfile:${TAG}-stable-slim . + docker buildx build \ + --platform=linux/amd64,linux/arm64 \ + -f Dockerfile.debian \ + -t quay.io/${ORG}/helmfile:${TAG}-stable-slim \ + . push/debian: image/debian docker push quay.io/${ORG}/helmfile:${TAG}-stable-slim diff --git a/test/integration/run.sh b/test/integration/run.sh index f30c79623..7a791c269 100755 --- a/test/integration/run.sh +++ b/test/integration/run.sh @@ -26,7 +26,7 @@ export HELM_HOME="${HELM_DATA_HOME}" export HELM_PLUGINS="${HELM_DATA_HOME}/plugins" export HELM_CONFIG_HOME="${helm_dir}/config" HELM_SECRETS_VERSION=3.5.0 -HELM_DIFF_VERSION=3.1.3 +HELM_DIFF_VERSION=3.2.0 export GNUPGHOME="${PWD}/${dir}/.gnupg" export SOPS_PGP_FP="B2D6D7BBEC03B2E66571C8C00AD18E16CFDEF700"