-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEarthfile
More file actions
185 lines (150 loc) · 5.56 KB
/
Earthfile
File metadata and controls
185 lines (150 loc) · 5.56 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
VERSION 0.8
ARG --global --required HARBOR_DOCKER_REGISTRY
ARG --global --required RAW_REGISTRY_RELEASES
ARG --global --required RAW_REGISTRY_SNAPSHOTS
build:
FROM eclipse-temurin:25.0.2_10-jdk-alpine
DO github.com/genestack/earthly-libs:6e90f15c1b437e0bfdf6f95786cac47fb5c0c7e9+GRADLE_PREPARE
CACHE /root/.gradle/caches
CACHE /root/.gradle/wrapper
COPY --dir openapi gradle gradlew buildSrc build.gradle.kts settings.gradle.kts .
ARG --required OPENAPI_VERSION
ARG --required PROCESSORS_CONTROLLER_VERSION
RUN \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
./gradlew \
generateAll \
--no-daemon
SAVE IMAGE --cache-hint
SAVE ARTIFACT generated
SAVE ARTIFACT openapi/v1
python-api-client:
FROM python:3.14.2-alpine
DO github.com/genestack/earthly-libs:6e90f15c1b437e0bfdf6f95786cac47fb5c0c7e9+PYTHON_PREPARE
CACHE /root/.cache
COPY requirements.txt .
RUN \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
pypi-login.sh && \
python3 \
-m pip install \
-r requirements.txt && \
pypi-clean.sh
COPY +build/generated generated
WORKDIR generated/python
# Test and build python client
RUN \
python3 -m tox run-parallel && \
python3 setup.py sdist
ARG --required OPENAPI_VERSION
IF echo ${OPENAPI_VERSION} | grep -Exq "^([0-9]+(.)?){3}$"
ARG PYPI_REPOSITORY_INTERNAL="nexus-pypi-releases"
ARG PYPI_REPOSITORY_PUBLIC="pypi"
ELSE
ARG PYPI_REPOSITORY_INTERNAL="nexus-pypi-snapshots"
ARG PYPI_REPOSITORY_PUBLIC="testpypi"
END
RUN --push \
--secret PYPI_TOKEN \
--secret PYPI_TOKEN_TEST \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
pypi-login.sh && \
twine upload dist/* -r ${PYPI_REPOSITORY_INTERNAL} && \
twine upload dist/* -r ${PYPI_REPOSITORY_PUBLIC} && \
pypi-clean.sh
r-api-client:
FROM r-base:4.5.2
WORKDIR /app
CACHE /root/.cache
COPY requirements.R .
# Gcc and other stuff for R source packages building
RUN \
apt update && \
apt install -y libssl-dev libcurl4-gnutls-dev curl libbrotli-dev=1.2.0-2 && \
Rscript requirements.R
COPY +build/generated generated
WORKDIR generated/r
# Test and build R client
RUN \
R CMD build . && \
R CMD check *.tar.gz --no-manual
ARG --required R_REGISTRY_RELEASES
ARG --required R_REGISTRY_SNAPSHOTS
ARG --required OPENAPI_VERSION
IF echo ${OPENAPI_VERSION} | grep -Exq "^([0-9]+(.)?){3}$"
ARG R_REGISTRY=${R_REGISTRY_RELEASES}
ELSE
ARG R_REGISTRY=${R_REGISTRY_SNAPSHOTS}
END
# Push R client
RUN --push \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
export archive=$(find . | grep tar.gz | sed 's|./||') && \
curl --user "${NEXUS_USER}:${NEXUS_PASSWORD}" \
--upload-file "${archive}" "${R_REGISTRY}/src/contrib/${archive}"
docs:
FROM alpine/curl:8.17.0
WORKDIR /app
COPY +build/generated generated
# Documentation for python client
WORKDIR /app/generated/python
ARG --required RAW_REGISTRY_SNAPSHOTS
ARG --required OPENAPI_VERSION
RUN \
--push \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
export DOC_ARCHIVE=odm-api-python-${OPENAPI_VERSION}.tar.gz && \
tar cf ${DOC_ARCHIVE} README.md docs/* && \
curl -v --fail --user ${NEXUS_USER}:${NEXUS_PASSWORD} \
-H 'Content-Type: application/gzip' \
--upload-file ${DOC_ARCHIVE} \
${RAW_REGISTRY_SNAPSHOTS}/docs/odm-api-python/${DOC_ARCHIVE}
# Documentation for r client
WORKDIR /app/generated/r
RUN \
--push \
--secret NEXUS_USER \
--secret NEXUS_PASSWORD \
export DOC_ARCHIVE=odm-api-r-${OPENAPI_VERSION}.tar.gz && \
tar cf ${DOC_ARCHIVE} README.md docs/* && \
curl -v --fail --user ${NEXUS_USER}:${NEXUS_PASSWORD} \
-H 'Content-Type: application/gzip' \
--upload-file ${DOC_ARCHIVE} \
${RAW_REGISTRY_SNAPSHOTS}/docs/odm-api-r/${DOC_ARCHIVE}
swagger:
FROM swaggerapi/swagger-ui:v5.31.0
COPY +build/v1 /usr/share/nginx/html/yaml/
COPY openapi/swagger/fs /
RUN rm -f /usr/share/nginx/html/yaml/odmApi.yaml
RUN apk add bash --no-cache && \
rewrite_entrypoint.sh && \
apk del bash && \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories && \
apk update && apk upgrade sqlite-libs
# Remove merged api spec
# IDK why it's required
RUN ln -s /usr/share/nginx/html/yaml /usr/share/nginx/html/helper/yaml
ENTRYPOINT ["/genestack-docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
ARG --required OPENAPI_VERSION
SAVE IMAGE --push ${HARBOR_DOCKER_REGISTRY}/swagger:${OPENAPI_VERSION}
SAVE IMAGE --push ${HARBOR_DOCKER_REGISTRY}/swagger:latest
stoplight:
FROM nginxinc/nginx-unprivileged:1.29.5-alpine
COPY +build/v1/schemas /usr/share/nginx/html/schemas/
COPY +build/v1/odmApi.yaml /usr/share/nginx/html/
COPY openapi/stoplight/fs /
ARG --required OPENAPI_VERSION
SAVE IMAGE --push ${HARBOR_DOCKER_REGISTRY}/stoplight:${OPENAPI_VERSION}
SAVE IMAGE --push ${HARBOR_DOCKER_REGISTRY}/stoplight:latest
main:
BUILD +swagger
BUILD +stoplight
BUILD +docs
BUILD +r-api-client
BUILD +python-api-client