-
Notifications
You must be signed in to change notification settings - Fork 0
/
.gitlab-ci.yml
315 lines (271 loc) · 9.52 KB
/
.gitlab-ci.yml
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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
stages:
- static_code_analysis
- build
- tests
- deploy
- build_and_deploy_docker
workflow:
rules:
- if: '$CI_MERGE_REQUEST_IID'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH || $CI_COMMIT_TAG'
variables:
# git:
GIT_STRATEGY: clone
GIT_SUBMODULE_STRATEGY: recursive
# static code analysis:
PACKAGES_TO_CHECK: "clive/ tests/"
# tests:
PYTEST_NUMBER_OF_PROCESSES: 16
PYTEST_LOG_DURATIONS: 1
# colors:
TXT_GREEN: "\e[1;32m"
TXT_BLUE: "\e[1;34m"
TXT_CLEAR: "\e[0m"
# binaries:
HIVE_BUILD_ROOT_PATH: "hived-binaries"
BEEKEEPER_BINARY: "${HIVE_BUILD_ROOT_PATH}/mainnet/beekeeper"
# ci registry:
# uses registry.gitlab.syncad.com/hive/hive/ci-base-image:ubuntu22.04-10
CI_BASE_IMAGE_TAG: "@sha256:080b16fd53013aeb9b89b00a8dfc90fecf886173f46448b05f45cee376c43330"
CI_BASE_IMAGE: "registry.gitlab.syncad.com/hive/hive/ci-base-image${CI_BASE_IMAGE_TAG}"
# other:
AFTER_SCRIPT_IGNORE_ERRORS: 'false' # without this errors in after_script will be ignored and just "WARNING: after_script failed, but job will continue unaffected: exit code 1" will be shown
include:
- project: 'hive/hive'
ref: 177ac27f2e67348e981b3bab47a73cdfa921a381
file: '/scripts/ci-helpers/prepare_data_image_job.yml'
- project: 'hive/common-ci-configuration'
ref: d4e29410ea168096e1a822f77c7ce741d9cfb57a
file: '/templates/python_projects.gitlab-ci.yml'
image: ${CI_BASE_IMAGE}
default:
tags:
- public-runner-docker
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| STATIC CODE ANALYSIS |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pre_commit_checks:
stage: static_code_analysis
extends: .pre_commit_checks_template
verify_poetry_lock_sanity:
stage: static_code_analysis
extends: .verify_poetry_lock_sanity_template
lint_code_with_ruff:
stage: static_code_analysis
extends: .lint_code_with_ruff_template
formatting_with_ruff_check:
stage: static_code_analysis
extends: .project_develop_configuration_template
script:
- echo -e "${TXT_BLUE}Checking code formatting with Ruff...${TXT_CLEAR}" &&
ruff format --check --diff ${PACKAGES_TO_CHECK}
type_check_with_mypy:
stage: static_code_analysis
extends: .type_check_with_mypy_template
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| STATIC CODE ANALYSIS |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| BUILD |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.common_prepare_hived_image:
extends: .prepare_hived_image
stage: build
variables:
REGISTRY_USER: "$HIVED_CI_IMGBUILDER_USER"
REGISTRY_PASS: $HIVED_CI_IMGBUILDER_PASSWORD
SUBMODULE_DIR: "${CI_PROJECT_DIR}/hive/"
BINARY_CACHE_PATH: "${CI_PROJECT_DIR}/${HIVE_BUILD_ROOT_PATH}/${HIVE_NETWORK_TYPE}"
prepare_mainnet_hived_image:
extends: .common_prepare_hived_image
variables:
HIVE_NETWORK_TYPE: mainnet
prepare_testnet_hived_image:
extends: .common_prepare_hived_image
variables:
HIVE_NETWORK_TYPE: testnet
build_wheel:
extends: .build_wheel_template
stage: build
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| BUILD |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| TESTS |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.testing:
stage: tests
extends: .project_develop_configuration_template
needs:
- job: prepare_mainnet_hived_image
artifacts: true
- job: prepare_testnet_hived_image
artifacts: true
variables:
CLIVE_BEEKEEPER__PATH: $BEEKEEPER_BINARY
CLIVE_BEEKEEPER__COMMUNICATION_TOTAL_TIMEOUT_SECS: 60
CLIVE_BEEKEEPER__INITIALIZATION_TIMEOUT_SECS: 60
CLIVE_NODE__COMMUNICATION_TOTAL_TIMEOUT_SECS: 60
HIVED_PATH: "${CI_PROJECT_DIR}/${HIVE_BUILD_ROOT_PATH}/testnet/hived"
CLI_WALLET_PATH: "${CI_PROJECT_DIR}/${HIVE_BUILD_ROOT_PATH}/testnet/cli_wallet"
GET_DEV_KEY_PATH: "${CI_PROJECT_DIR}/${HIVE_BUILD_ROOT_PATH}/testnet/get_dev_key"
PATH_TO_REPORT: "$CI_PROJECT_DIR/report.xml"
artifacts:
reports:
junit: $PATH_TO_REPORT
paths:
- "**/generated*/"
when: always
expire_in: 7 days
after_script:
- bash "${CI_PROJECT_DIR}/scripts/check_for_dangling_beekeeper.bash"
testing_beekeeper:
extends: .testing
variables:
PYTEST_TIMEOUT_MINUTES: 10
script:
- echo -e "${TXT_BLUE}Launching beekeeper tests...${TXT_CLEAR}"
- export PYTEST_ARGS=(tests/functional/beekeeper)
- !reference [.run-pytest, script]
testing_clive:
extends: .testing
variables:
PYTEST_TIMEOUT_MINUTES: 10
script:
- echo -e "${TXT_BLUE}Launching clive concurrent tests...${TXT_CLEAR}"
- export PYTEST_ARGS=(
--ignore tests/functional/beekeeper --ignore tests/tui --ignore tests/functional/cli
-k "not test_autocompletion_time"
)
- !reference [.run-pytest, script]
testing_clive_import_times_during_autocompletion:
extends: .testing
variables:
PYTEST_NUMBER_OF_PROCESSES: 1
PYTEST_TIMEOUT_MINUTES: 3
script:
- echo -e "${TXT_BLUE}Launching clive test for autocompletion time...${TXT_CLEAR}"
- export PYTEST_ARGS=(-k test_autocompletion_time)
- !reference [.run-pytest, script]
testing_tui:
extends: .testing
variables:
PYTEST_TIMEOUT_MINUTES: 10
script:
- echo -e "${TXT_BLUE}Launching tui tests...${TXT_CLEAR}"
- export PYTEST_ARGS=(tests/tui)
- !reference [.run-pytest, script]
testing_cli:
extends: .testing
variables:
PYTEST_TIMEOUT_MINUTES: 10
script:
- echo -e "${TXT_BLUE}Launching cli commands tests...${TXT_CLEAR}"
- export PYTEST_ARGS=(tests/functional/cli)
- !reference [.run-pytest, script]
testing_password_private_key_logging:
stage: tests
needs:
- job: testing_beekeeper
artifacts: true
- job: testing_clive
artifacts: true
- job: testing_clive_import_times_during_autocompletion
artifacts: true
- job: testing_tui
artifacts: true
script:
- cd "${CI_PROJECT_DIR}/tests"
- bash "${CI_PROJECT_DIR}/scripts/check_is_private_key_nor_password_is_not_logged.bash"
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| TESTS |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| DEPLOY |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.deploy_wheel_needs : &deploy_wheel_needs
needs:
- job: testing_password_private_key_logging
- job: build_wheel
artifacts: true
deploy_wheel_to_gitlab:
extends: .deploy_wheel_to_gitlab_template
stage: deploy
<<: *deploy_wheel_needs
deploy_wheel_to_pypi:
extends: .deploy_wheel_to_pypi_template
stage: deploy
<<: *deploy_wheel_needs
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| DEPLOY |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| BUILD AND DEPLOY DOCKER |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.prepare_clive_image:
extends: .docker_image_builder_job
stage: build_and_deploy_docker
needs:
- job: pre_commit_checks
- job: prepare_mainnet_hived_image
artifacts: true
- job: deploy_wheel_to_gitlab
artifacts: true
when: manual
except:
- develop
- master
variables:
GIT_DEPTH: 0
BASE_IMAGE: "mwalbeck/python-poetry:1.7-3.10"
BUILD_INSTANCE_ARGS: ""
TAG_COMMIT: ${BUILD_SUFFIX}${CI_COMMIT_SHORT_SHA}
SCRIPTS_PATH: "$CI_PROJECT_DIR/scripts"
script:
- echo "WHEEL_BUILD_VERSION is ${WHEEL_BUILD_VERSION}"
- $SCRIPTS_PATH/ci-helpers/build_instance.sh
"${TAG_COMMIT}"
"${CI_PROJECT_DIR}"
"${CI_REGISTRY_IMAGE}"
--hived-source-image=${HIVED_IMAGE_NAME}
--base-image=${BASE_IMAGE}
--clive-version=${WHEEL_BUILD_VERSION}
${BUILD_INSTANCE_ARGS}
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- source docker_image_name.env
- docker push ${CLIVE_IMAGE_NAME}
- echo -e "${TXT_BLUE}Pushed image ${TXT_GREEN}${CLIVE_IMAGE_NAME}${TXT_CLEAR}"
- |
if [[ -n "$CI_COMMIT_TAG" ]]; then
GIT_IMAGE_TAG="${CLIVE_IMAGE_PATH}:${CLIVE_IMAGE_TAG_PREFIX}-${CI_COMMIT_TAG}"
echo -e "${TXT_BLUE}Tagging ${TXT_GREEN}${CLIVE_IMAGE_NAME} ${TXT_BLUE}with additional ${TXT_GREEN}${GIT_IMAGE_TAG}${TXT_CLEAR}"
docker tag "${CLIVE_IMAGE_NAME}" "${GIT_IMAGE_TAG}"
docker push "${GIT_IMAGE_TAG}"
fi
artifacts:
reports:
dotenv: docker_image_name.env
paths:
- ./docker_image_name.env
expire_in: 6 hours
.clive_testnet_needs: &clive_testnet_needs
needs:
- job: prepare_testnet_hived_image
artifacts: true
- job: deploy_wheel_to_gitlab
artifacts: true
build_and_push_clive_image:
extends: .prepare_clive_image
build_and_push_clive_testnet_image:
extends: .prepare_clive_image
<<: *clive_testnet_needs
variables:
BUILD_INSTANCE_ARGS: "--embedded-testnet"
.prepare_clive_stable_image:
extends: .prepare_clive_image
when: on_success
except: [ ]
only:
- develop
- master
variables:
BUILD_INSTANCE_ARGS: "--image-path-suffix=-${CI_COMMIT_REF_NAME}"
after_script:
- source docker_image_name.env # required: https://gitlab.syncad.com/hive/clive/-/jobs/622075
- export LATEST_IMAGE_TAG="${CLIVE_IMAGE_PATH}:${CLIVE_IMAGE_TAG_PREFIX}-latest"
- echo -e "${TXT_BLUE}Tagging ${TXT_GREEN}${CLIVE_IMAGE_NAME} ${TXT_BLUE}with additional ${TXT_GREEN}${LATEST_IMAGE_TAG}${TXT_CLEAR}"
- docker tag ${CLIVE_IMAGE_NAME} ${LATEST_IMAGE_TAG}
- docker push ${LATEST_IMAGE_TAG}
- echo -e "${TXT_BLUE}Pushed image ${TXT_GREEN}${LATEST_IMAGE_TAG}${TXT_CLEAR}"
build_and_push_clive_stable_image:
extends: .prepare_clive_stable_image
build_and_push_clive_stable_testnet_image:
extends: .prepare_clive_stable_image
<<: *clive_testnet_needs
variables:
BUILD_INSTANCE_ARGS: "--embedded-testnet --image-path-suffix=-${CI_COMMIT_REF_NAME}"
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| BUILD AND DEPLOY DOCKER |<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<