github.com/freiheit-com/kuberpult@v1.24.2-0.20240328135542-315d5630abe6/Earthfile (about) 1 VERSION 0.7 2 FROM busybox 3 ARG --global UID=1000 4 ARG --global target=docker 5 6 deps: 7 ARG USERARCH 8 IF [ "$USERARCH" = "arm64" ] 9 FROM golang:1.21-bookworm 10 RUN apt update && apt install --auto-remove ca-certificates tzdata libgit2-dev libsqlite3-dev -y 11 ELSE 12 FROM golang:1.21-alpine3.18 13 RUN apk add --no-cache ca-certificates tzdata bash libgit2-dev sqlite-dev alpine-sdk 14 END 15 16 COPY buf_sha256.txt . 17 ARG BUF_VERSION=v1.26.1 18 ARG BUF_BIN_PATH=/usr/local/bin 19 RUN OS=Linux ARCH=$(uname -m) && \ 20 wget "https://github.com/bufbuild/buf/releases/download/${BUF_VERSION}/buf-${OS}-${ARCH}" \ 21 -O "${BUF_BIN_PATH}/buf" && \ 22 chmod +x "${BUF_BIN_PATH}/buf" 23 RUN OS=Linux ARCH=$(uname -m) && \ 24 SHA=$(cat buf_sha256.txt | grep "buf-${OS}-${ARCH}$" | cut -d ' ' -f1) && \ 25 echo "${SHA} ${BUF_BIN_PATH}/buf" | sha256sum -c 26 27 ARG GO_CI_LINT_VERSION="v1.51.2" 28 RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@$GO_CI_LINT_VERSION 29 30 RUN wget https://github.com/GaijinEntertainment/go-exhaustruct/archive/refs/tags/v3.2.0.tar.gz -O exhaustruct.tar.gz 31 RUN echo 511d0ba05092386a59dca74b6cbeb99f510b814261cc04b68213a9ae31cf8bf6 exhaustruct.tar.gz | sha256sum -c 32 RUN tar xzf exhaustruct.tar.gz 33 WORKDIR go-exhaustruct-3.2.0 34 RUN go build ./cmd/exhaustruct 35 RUN mv exhaustruct /usr/local/bin/exhaustruct 36 37 WORKDIR /kp 38 COPY go.mod go.sum ./ 39 RUN go mod download 40 41 SAVE ARTIFACT go.mod 42 SAVE ARTIFACT go.sum 43 SAVE ARTIFACT $BUF_BIN_PATH/buf 44 45 cd-service: 46 BUILD ./services/cd-service+$target --UID=$UID --service=cd-service 47 48 rollout-service: 49 BUILD ./services/rollout-service+$target --UID=$UID --service=rollout-service 50 51 frontend-service: 52 BUILD ./services/frontend-service+$target --UID=$UID --service=frontend-service 53 54 ui: 55 BUILD ./services/frontend-service+$target-ui 56 57 all-services: 58 BUILD ./pkg+deps 59 BUILD ./services/cd-service+docker --service=cd-service --UID=$UID 60 BUILD ./services/frontend-service+docker --service=frontend-service 61 BUILD ./services/frontend-service+docker-ui 62 63 cache: 64 BUILD ./services/cd-service+release --service=cd-service --UID=$UID 65 BUILD ./services/rollout-service+release --service=rollout-service --UID=$UID 66 BUILD ./services/frontend-service+release --service=frontend-service 67 BUILD ./services/frontend-service+release-ui 68 69 commitlint: 70 FROM node:18-bookworm 71 WORKDIR /commitlint/ 72 RUN npm install --save-dev @commitlint/cli@18.4.3 73 WORKDIR /commitlint/ 74 COPY .commitlintrc .commitlintrc 75 COPY commitlint.msg commitlint.msg 76 RUN cat ./commitlint.msg | npx commitlint --config .commitlintrc 77 78 test-all: 79 BUILD ./services/cd-service+unit-test --service=cd-service 80 BUILD ./services/rollout-service+unit-test --service=rollout-service 81 BUILD ./services/frontend-service+unit-test --service=frontend-service 82 BUILD ./services/frontend-service+unit-test-ui 83 84 integration-test-deps: 85 FROM alpine/k8s:1.25.15 86 RUN wget -O "/usr/bin/argocd" https://github.com/argoproj/argo-cd/releases/download/v2.7.5/argocd-linux-amd64 && \ 87 echo "a7680140ddb9011c3d282eaff5f5a856be18e8653ff9f0c7047a318f640753be /usr/bin/argocd" | sha256sum -c - && \ 88 chmod +x "/usr/bin/argocd" 89 SAVE ARTIFACT /usr/bin/kubectl 90 SAVE ARTIFACT /usr/bin/helm 91 SAVE ARTIFACT /usr/bin/argocd 92 93 integration-test: 94 # We pick ubuntu here because it seems to have the least amount of issues. 95 # With alpine:3.18, we get occasional issues with gpg that says there's a process running already, even though there shouldn't be. 96 # Ubuntu:22.04 seems to solve this issue. 97 FROM ubuntu:22.04 98 RUN apt update && apt install -y curl gpg gpg-agent gettext bash git golang netcat-openbsd 99 ARG GO_TEST_ARGS 100 # K3S environment variables 101 ENV KUBECONFIG=/kp/kubeconfig.yaml 102 ENV K3S_TOKEN="Random" 103 # Kuberpult/ArgoCd environment variables 104 ENV ARGO_NAMESPACE=default 105 # Git environment variables 106 ENV GIT_NAMESPACE=git 107 ENV SSH_HOST_PORT=2222 108 ENV GIT_SSH_COMMAND='ssh -o UserKnownHostsFile=emptyfile -o StrictHostKeyChecking=no -i /kp/client' 109 ENV GIT_AUTHOR_NAME='Initial Kuberpult Commiter' 110 ENV GIT_COMMITTER_NAME='Initial Kuberpult Commiter' 111 ENV GIT_AUTHOR_EMAIL='team.sre.permanent+kuberpult-initial-commiter@freiheit.com' 112 ENV GIT_COMMITTER_EMAIL='team.sre.permanent+kuberpult-initial-commiter@freiheit.com' 113 WORKDIR /kp 114 115 COPY +integration-test-deps/* /usr/bin/ 116 COPY tests/integration-tests/cluster-setup/docker-compose-k3s.yml . 117 118 RUN --no-cache echo GPG gen starting... 119 RUN --no-cache gpg --keyring trustedkeys-kuberpult.gpg --no-default-keyring --batch --passphrase '' --quick-gen-key kuberpult-kind@example.com 120 RUN --no-cache echo GPG export starting... 121 RUN --no-cache gpg --keyring trustedkeys-kuberpult.gpg --armor --export kuberpult-kind@example.com > /kp/kuberpult-keyring.gpg 122 # Note that multiple commands here are writing to "." which is slightly dangerous, because 123 # if there are files with the same name, old ones will be overridden. 124 COPY charts/kuberpult . 125 COPY infrastructure/scripts/create-testdata/testdata_template/environments environments 126 127 COPY infrastructure/scripts/create-testdata/create-release.sh . 128 COPY tests/integration-tests integration-tests 129 COPY go.mod go.sum . 130 COPY pkg/ptr pkg/ptr 131 132 ARG --required kuberpult_version 133 ENV VERSION=$kuberpult_version 134 RUN envsubst < Chart.yaml.tpl > Chart.yaml 135 136 WITH DOCKER --compose docker-compose-k3s.yml 137 RUN --no-cache \ 138 echo Waiting for K3s cluster to be ready; \ 139 sleep 10 && kubectl wait --for=condition=Ready nodes --all --timeout=300s && sleep 3; \ 140 ./integration-tests/cluster-setup/setup-cluster-ssh.sh; sleep 3; \ 141 ./integration-tests/cluster-setup/argocd-kuberpult.sh && \ 142 cd integration-tests && go test $GO_TEST_ARGS ./... && \ 143 echo ============ SUCCESS ============ 144 END