-
-
Notifications
You must be signed in to change notification settings - Fork 94
/
Earthfile
140 lines (125 loc) · 4.13 KB
/
Earthfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
VERSION --pass-args --arg-scope-and-set 0.7
ARG core=github.com/formancehq/earthly:v0.6.0
IMPORT $core AS core
IMPORT ../.. AS stack
IMPORT .. AS components
FROM core+base-image
sources:
WORKDIR src
COPY (stack+sources/out --LOCATION=libs/go-libs) /src/components/ledger/libs
WORKDIR /src/components/ledger
COPY go.mod go.sum .
COPY --dir internal pkg cmd .
COPY main.go .
SAVE ARTIFACT /src
generate:
FROM core+builder-image
RUN apk update && apk add openjdk11
DO --pass-args core+GO_INSTALL --package=go.uber.org/mock/mockgen@latest
COPY (+sources/*) /src
WORKDIR /src/components/ledger
DO --pass-args core+GO_GENERATE
SAVE ARTIFACT internal AS LOCAL internal
SAVE ARTIFACT pkg AS LOCAL pkg
SAVE ARTIFACT cmd AS LOCAL cmd
compile:
FROM core+builder-image
COPY (+sources/*) /src
WORKDIR /src/components/ledger
ARG VERSION=latest
DO --pass-args core+GO_COMPILE --VERSION=$VERSION
SAVE ARTIFACT libs AS LOCAL ./libs
copy-libs:
LOCALLY
RUN rm -rf ./libs
RUN cp -R ./../../libs/go-libs ./libs
build-image:
FROM core+final-image
ENTRYPOINT ["/bin/ledger"]
CMD ["serve"]
COPY --pass-args (+compile/main) /bin/ledger
ARG REPOSITORY=ghcr.io
ARG tag=latest
DO --pass-args core+SAVE_IMAGE --COMPONENT=ledger --REPOSITORY=${REPOSITORY} --TAG=$tag
tests:
FROM core+builder-image
COPY (+sources/*) /src
WORKDIR /src/components/ledger
COPY --dir --pass-args (+generate/*) .
WITH DOCKER --pull=postgres:15-alpine
DO --pass-args core+GO_TESTS
END
deploy:
COPY (+sources/*) /src
LET tag=$(tar cf - /src | sha1sum | awk '{print $1}')
WAIT
BUILD --pass-args +build-image --tag=$tag
END
FROM --pass-args core+vcluster-deployer-image
RUN kubectl patch Versions default -p "{\"spec\":{\"ledger\": \"${tag}\"}}" --type=merge
lint:
FROM core+builder-image
COPY (+sources/*) /src
COPY --pass-args +tidy/go.* .
WORKDIR /src/components/ledger
DO --pass-args stack+GO_LINT
SAVE ARTIFACT cmd AS LOCAL cmd
SAVE ARTIFACT internal AS LOCAL internal
SAVE ARTIFACT pkg AS LOCAL pkg
SAVE ARTIFACT main.go AS LOCAL main.go
pre-commit:
BUILD --pass-args +tidy
BUILD --pass-args +lint
BUILD --pass-args +copy-libs
BUILD +openapi
bench:
FROM core+builder-image
DO --pass-args core+GO_INSTALL --package=golang.org/x/perf/cmd/benchstat@latest
COPY (+sources/*) /src
WORKDIR /src/components/ledger/internal/storage/ledgerstore
ARG numberOfTransactions=10000
ARG ledgers=10
ARG benchTime=1s
ARG count=1
ARG GOPROXY
ARG testTimeout=10m
ARG bench=.
ARG verbose=0
ARG GOMAXPROCS=2
ARG GOMEMLIMIT=1024MiB
LET additionalArgs=""
IF [ "$verbose" = "1" ]
SET additionalArgs=-v
END
WITH DOCKER --pull postgres:15-alpine
RUN --mount type=cache,id=gopkgcache,target=${GOPATH}/pkg/mod \
--mount type=cache,id=gobuild,target=/root/.cache/go-build \
go test -timeout $testTimeout -bench=$bench -run ^$ $additionalArgs \
-benchtime=$benchTime \
-count=$count \
-ledgers=$ledgers \
-transactions=$numberOfTransactions | tee -a /results.txt
END
RUN benchstat /results.txt
SAVE ARTIFACT /results.txt
benchstat:
FROM core+builder-image
DO --pass-args core+GO_INSTALL --package=golang.org/x/perf/cmd/benchstat@latest
ARG compareAgainstRevision=main
COPY --pass-args github.com/formancehq/stack/components/ledger:$compareAgainstRevision+bench/results.txt /tmp/main.txt
COPY --pass-args +bench/results.txt /tmp/branch.txt
RUN --no-cache benchstat /tmp/main.txt /tmp/branch.txt
openapi:
FROM node:20-alpine
RUN apk update && apk add yq
RUN npm install -g openapi-merge-cli
WORKDIR /src/components/ledger
COPY --dir openapi openapi
RUN openapi-merge-cli --config ./openapi/openapi-merge.json
RUN yq -oy ./openapi.json > openapi.yaml
SAVE ARTIFACT ./openapi.yaml AS LOCAL ./openapi.yaml
tidy:
FROM core+builder-image
COPY --pass-args (+sources/src) /src
WORKDIR /src/components/ledger
DO --pass-args stack+GO_TIDY