-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
213 lines (194 loc) · 4.41 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
---
variables:
PYTHON_VERSION: "3.12"
stages:
- test
- build
- publish
- clean up
lint:
image: python:$PYTHON_VERSION
script:
- pip install -r requirements-dev.lock
- ruff check src/
- ruff format --check src/
- isort --check --diff src/
stage: test
allow_failure: true
only:
refs:
- main
- merge_requests
changes:
- pyproject.toml
- src/**/*.py
.run_tox_tests: &run_tox_tests
image: python:$PYTHON
stage: test
script:
- pip install tox
- tox -e system-unit
tests:
<<: *run_tox_tests
parallel:
matrix:
- PYTHON: ["3.11", "3.12", "3.10"]
only:
refs:
- main
- merge_request
changes:
- pyproject.toml
- src/**/*.py
.run_tox_staticcheck: &run_tox_staticcheck
image: python:$PYTHON_VERSION
stage: test
script:
- pip install tox
- tox -e system-staticcheck
run static checks:
<<: *run_tox_staticcheck
only:
refs:
- main
- merge_request
changes:
- pyproject.toml
- src/**/*.py
.run_tox_doctest: &run_tox_doctest
image: python:$PYTHON_VERSION
stage: test
script:
- pip install tox
- tox -e system-doctest
run doctests:
<<: *run_tox_doctest
only:
refs:
- main
- merge_request
changes:
- pyproject.toml
- src/**/*.py
- docs/**/*.rst
run coverage tests:
image: python:$PYTHON_VERSION
stage: test
script:
- pip install tox
- tox -e system-coverage
allow_failure: true
only:
refs:
- main
- merge_request
changes:
- pyproject.toml
- src/**/*.py
build distribution:
image: python:$PYTHON_VERSION
stage: build
script:
- apt-get update; apt-get install -y --no-install-recommends git make
- pip install hatch
- hatch build
artifacts:
paths:
- dist/
only:
refs:
- main
- merge_request
publish_pypi:
image: python:$PYTHON_VERSION
stage: publish
script:
- pip install twine
- twine upload -u "$PYPI_USERNAME" -p "$PYPI_PASSWORD" dist/*
only:
refs:
- tags
variables:
- $CI_COMMIT_TAG =~ /^\d+(\.\d+)*(|a\d+|b\d+|rc\d+)?(\.post\d+)?$/
dependencies:
- build distribution
environment:
name: pypi
url: https://pypi.python.org/pypi/$CI_PROJECT_NAME
.build_doc: &build-documentation
image: python:$PYTHON_VERSION
script:
- apt-get update; apt-get install -y --no-install-recommends git make
- pip install -r requirements-dev.lock
- make -C docs html
- mkdir -p public
- cp -r docs/build/html/* public/
build documentation:
<<: *build-documentation
stage: build
interruptible: true
needs:
- run doctests
artifacts:
paths:
- docs/build/html
expire_in: 1 day
only: &when-build-documentation-only
refs:
- main
- merge_requests
changes:
- tox.ini
- docs/source/conf.py
- docs/**/*.rst
- src/**/*.py
variables:
- $CI_SERVER_HOST == "gitlab.merchise.org"
pages:
<<: *build-documentation
stage: build
needs: []
artifacts:
paths:
- public
expire_in: 1 day
only:
refs:
- main
variables:
- $CI_SERVER_HOST == "gitlab.com"
publish in our rtd:
interruptible: true
variables:
GIT_STRATEGY: none
stage: publish
needs:
- build documentation
image: alpine
script:
- |
apk add openssh rsync
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
cp $RSA_KEY_FILE $HOME/.ssh/id_rsa
chmod 600 $HOME/.ssh/id_rsa
cp $SSH_CONFIG_FILE $HOME/.ssh/config
ssh docs.lahavane.com mkdir -p /data/$CI_PROJECT_NAME/.$CI_COMMIT_SHA
rsync -auvp -e ssh docs/build/html/ docs.lahavane.com:/data/$CI_PROJECT_NAME/.$CI_COMMIT_SHA/
ssh docs.lahavane.com "cd /data/$CI_PROJECT_NAME; rm -r $CI_COMMIT_REF_NAME; ln -s .$CI_COMMIT_SHA $CI_COMMIT_REF_NAME"
ssh docs.lahavane.com "cd /data/$CI_PROJECT_NAME; ls -al | grep -oE '\.([0-9]|[a-z])*$' | sort | uniq -c | grep '1 ' | grep -oE '\.([0-9]|[a-z])*$' | xargs rm -rf"
environment:
name: docs.lahavane.com
url: http://docs.lahavane.com/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME
only:
<<: *when-build-documentation-only
clean-up RTD:
stage: clean up
rules:
- if: '$CI_COMMIT_REF_NAME == "main"'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_SERVER_HOST == "gitlab.merchise.org"'
when: on_success
- when: never
trigger:
include: ci/cleanup.yml