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