github.com/freiheit-com/kuberpult@v1.24.2-0.20240328135542-315d5630abe6/infrastructure/earthly/go/Earthfile (about) 1 VERSION --use-function-keyword 0.7 2 3 DEPS: 4 FUNCTION 5 ARG --required service 6 ARG --required src_files 7 BUILD ../../../pkg+deps 8 COPY ../../../pkg+artifacts/pkg pkg 9 COPY cmd services/$service/cmd 10 FOR src IN $src_files 11 COPY $src services/$service/$src 12 END 13 14 COMPILE: 15 FUNCTION 16 ARG USERARCH 17 ARG main_path="cmd/server" 18 ARG cgo_enabled=0 19 20 RUN cd $main_path && \ 21 CGO_ENABLED=$cgo_enabled \ 22 GOARCH=$USERARCH \ 23 GOOS=linux \ 24 go build -o bin/main . 25 26 IF [ "$cgo_enabled" = "1" ] 27 RUN bash -c "ldd $main_path/bin/main | tr -s [:blank:] '\n' | grep ^/ | xargs -I % install -D % $main_path/%" 28 SAVE ARTIFACT $main_path/lib/ 29 IF [ "$USERARCH" != "arm64" ] 30 SAVE ARTIFACT $main_path/usr/ 31 END 32 END 33 34 SAVE ARTIFACT $main_path/bin/main 35 36 UNIT_TEST: 37 FUNCTION 38 ARG GO_TEST_ARGS 39 COPY pkg pkg 40 RUN go test $GO_TEST_ARGS ./... 41 42 LINT: 43 FUNCTION 44 ARG FILES_TO_FORMAT=$(gofmt -l ./) 45 ARG skip_lint_errors="false" 46 IF [ ! -z "$FILES_TO_FORMAT" ] 47 RUN echo "Formatting required for:\n$FILES_TO_FORMAT\nRun \"go fmt ./...\" to fix the errors" && exit 1 48 END 49 RUN golangci-lint run --timeout=15m -j4 --tests=false --skip-files=".*\.pb\.go$" ./... || $skip_lint_errors 50 51 RUN exhaustruct -test=false $(go list ./... | grep -v "github.com/freiheit-com/kuberpult/pkg/api") 52 53 DOCKER: 54 FUNCTION 55 ARG UID=1000 56 ARG USERARCH 57 ARG entry_point="/main" 58 ARG workdir=/kp 59 ARG cgo_enabled=0 60 ARG --required image_tag 61 ARG --required service 62 ENV TZ=Europe/Berlin 63 64 RUN adduser --disabled-password --home "/kp" --uid $UID kp 65 RUN chown -R kp:kp /kp 66 67 COPY ../../../services/$service+artifacts/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt 68 COPY ../../../services/$service+artifacts/zoneinfo /usr/share/zoneinfo 69 COPY ../../../services/$service+compile/main /main 70 IF [ "$cgo_enabled" = "1" ] 71 COPY ../../../services/$service+compile/lib/* /lib 72 IF [ "$USERARCH" != "arm64" ] 73 COPY ../../../services/$service+compile/usr/* /lib 74 END 75 END 76 77 USER kp 78 WORKDIR $workdir 79 80 ARG use_datadog=false 81 IF [ "$use_datadog" == "true" ] 82 ARG dd_service=$service 83 ARG dd_env="cloudrun" 84 85 ENV DD_SERVICE=$dd_service 86 ENV DD_ENV=$dd_env 87 ENV DD_VERSION=$image_tag 88 89 COPY +datadog-wrapper/datadog-init /app/datadog-init 90 ENTRYPOINT ["/app/datadog-init"] 91 END 92 93 CMD "$entry_point" 94 SAVE IMAGE $image_tag 95 96 RELEASE: 97 FUNCTION 98 ARG --required image_tag 99 SAVE IMAGE --push $image_tag 100 101 datadog-wrapper: 102 FROM datadog/serverless-init:1-alpine 103 SAVE ARTIFACT /datadog-init