File: .gitlab-ci.yml

package info (click to toggle)
python-ase 3.21.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 13,936 kB
  • sloc: python: 122,428; xml: 946; makefile: 111; javascript: 47
file content (204 lines) | stat: -rw-r--r-- 6,223 bytes parent folder | download
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
---  # ASE Gitlab CI configuration


variables:
  OMP_NUM_THREADS: "1"


stages:
  - test
  - paperwork
  - deploy


.database-configuration:
  variables:
    POSTGRES_DB: testase
    POSTGRES_USER: ase
    POSTGRES_PASSWORD: "ase"
    MYSQL_DATABASE: testase_mysql
    MYSQL_ROOT_PASSWORD: ase

  services:
    - postgres:latest
    - mysql:latest
    - mariadb:latest

# Check oldest supported Python with oldest supported libraries.
# Does not install any optional libraries except matplotlib.
#
# With older python, pytest-xdist jumbles the tests differently
# on different codes, then complains.  So we use -j 0.
oldlibs:
  image: registry.gitlab.com/ase/ase:ase-oldlibs
  extends: .database-configuration
  script:
    - pip install --no-deps .
    - ase test --pytest --color=yes -W "ignore:can't resolve package" -m 'not lint'

# For testing newest versions of libraries against standard images
# on dockerhub.
#
# psycopg2-binary is for testing the postgres backend for ase.db
# Currently we have trouble with pyhon3.8 where we need to compile some
# libraries that don't have binary wheels; we don't want to install gcc
# in this test job.
pipinstall:
  image: python:3.8
  extends: .database-configuration
  script:
    - python --version
    - pip install psycopg2-binary pymysql cryptography
    - pip install .[test]
    - ase test --pytest --color=yes
  when: manual

# This is the main test job using new versions of libraries.
# The intention is to enable as many features and libraries as possible.
#
# We execute it inside the project dir with --editable in order for
# the coverage script to correctly resolve the OMIT paths (a bit hacky).
# It would be better to install it for real, and for things to just work.
main:
  image: registry.gitlab.com/ase/ase:ase-main
  extends: .database-configuration
  # Inheriting variables from the database-configuration job
  # seems to be broken all of a sudden (gitlab-runner 13.0.1 and 13.3.1)
  # We need to redefine them here then, otherwise gitlab-runner will fail
  # those tests when run locally.  Meanwhile everything works on gitlab.com.
  # Strange!
  variables:
    POSTGRES_DB: testase
    POSTGRES_USER: ase
    POSTGRES_PASSWORD: "ase"
    MYSQL_DATABASE: testase_mysql
    MYSQL_ROOT_PASSWORD: ase
  services:
    - postgres:latest
    - mysql:latest
    - mariadb:latest
  script:
    - python --version
    - pip install --no-deps --editable .
    - ase info --calculators
    - cd $CI_PROJECT_DIR
    - ase test --calculators asap,eam,ff,lj,morse,tip3p,tip4p --coverage --pytest --color=yes --durations 20 -m 'not lint'
    - mv ase/test/coverage-html coverage-main
    - mv ase/test/.coverage coverage-main/coverage.dat
  artifacts:
    paths:
      - coverage-main/
    expire_in: 1 week


# Calculator integration tests which always run.
# Encompasses those tests marked as @pytest.mark.calculator_lite.
# Please make sure these tests are cheap.
calculators-lite:
  image: registry.gitlab.com/ase/ase:ase-full-monty
  script:
    - pip install --no-deps --editable .
    - ase test calculator --calculators=auto --coverage --pytest -m calculator_lite --color=yes --durations=20
    - mv ase/test/coverage-html coverage-calculators-lite
    - mv ase/test/.coverage coverage-calculators-lite/coverage.dat
  artifacts:
    paths:
      - coverage-calculators-lite/
    expire_in: 1 week


# Plan: Test as many calculators as possible as well as possible.
# Obviously this is kind of expensive so the job is manually activated.
# Also, the docker serves as a knowledgebase for how to set up those
# calculators with ASE.
#
# It would be great if someone could enable more calculators with this.
calculators:
  image: registry.gitlab.com/ase/ase:ase-full-monty
  script:
    - pip install --no-deps --editable .
    - ase info --calculators
    - ase test calculator --calculators abinit,asap,cp2k,dftb,espresso,gpaw,kim,lammpslib,lammpsrun,nwchem,octopus,siesta --coverage --pytest --color=yes --durations 20
    - mv ase/test/coverage-html coverage-calculators
    - mv ase/test/.coverage coverage-calculators/coverage.dat
  when: manual
  artifacts:
    paths:
      - coverage-calculators/
    expire_in: 1 week

doc:
  image: registry.gitlab.com/ase/ase:ase-main
  script:
    - pip install --no-deps .[docs]
    - ase info
    - which sphinx-build
    - cd $CI_PROJECT_DIR/doc
    - python -m ase.utils.sphinx run  # test scripts
    - sphinx-build -W . build

distribution-package:
  image: registry.gitlab.com/ase/ase:ase-main
  extends: .database-configuration
  script:
    - apt-get install -y gettext  # For compiling ase gui translations
    - mkdir dist
    - python setup.py sdist | tee dist/setup_sdist.log
    - python setup.py bdist_wheel | tee dist/setup_bdist_wheel.log
    - pip install dist/ase-*.tar.gz
    - ase test --pytest --color=yes
    - pip uninstall --yes ase
    - pip install dist/ase-*-py3-none-any.whl
    - ase test --pytest --color=yes
  artifacts:
    paths:
      - dist
    expire_in: 1 week
  when: manual


# Publish code coverage data on web.
#  * The deploy stage is specially recognized by gitlab
#  * The jobname pages is specially recognized by gitlab
#  * The public/ directory is specially recognized by gitlab
# https://about.gitlab.com/blog/2016/11/03/publish-code-coverage-report-with-gitlab-pages/
pages:
  stage: deploy
  dependencies:
    - coverage-combine
  script:
    - mv coverage-html public
  artifacts:
    paths:
      - public
    expire_in: 2 weeks
  only:
    - master

lint:
  image: registry.gitlab.com/ase/ase:ase-paperwork
  script:
    - cd $CI_PROJECT_DIR
    - mypy --color-output -p ase
    - python ase/test/lint.py
    - python -We:invalid -m compileall -f -q ase/


coverage-combine:
  image: registry.gitlab.com/ase/ase:ase-paperwork
  stage: paperwork
  dependencies:
    - main
    - calculators-lite
  script:
    - cd ase/test  # Next to .coveragerc and friends
    - coverage combine ../../coverage-main/coverage.dat ../../coverage-calculators-lite/coverage.dat
    - coverage report
    - coverage html
    - cd ../..
    - mv ase/test/coverage-html .
  coverage: '/TOTAL.+ ([0-9]+\.[0-9]+%)/'
  artifacts:
    paths:
      - coverage-html
    expire_in: 1 week