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