]> git.openstreetmap.org Git - nominatim.git/blob - .github/workflows/ci-tests.yml
no type checking on old Ubuntu 18
[nominatim.git] / .github / workflows / ci-tests.yml
1 name: CI Tests
2
3 on: [ push, pull_request ]
4
5 jobs:
6     create-archive:
7         runs-on: ubuntu-latest
8
9         steps:
10             - uses: actions/checkout@v3
11               with:
12                 submodules: true
13
14             - uses: actions/cache@v3
15               with:
16                   path: |
17                      data/country_osm_grid.sql.gz
18                   key: nominatim-country-data-1
19
20             - name: Package tarball
21               run: |
22                   if [ ! -f data/country_osm_grid.sql.gz ]; then
23                       wget --no-verbose -O data/country_osm_grid.sql.gz https://www.nominatim.org/data/country_grid.sql.gz
24                   fi
25                   cd ..
26                   tar czf nominatim-src.tar.bz2 Nominatim
27                   mv nominatim-src.tar.bz2 Nominatim
28
29             - name: 'Upload Artifact'
30               uses: actions/upload-artifact@v3
31               with:
32                   name: full-source
33                   path: nominatim-src.tar.bz2
34                   retention-days: 1
35
36     tests:
37         needs: create-archive
38         strategy:
39             matrix:
40                 ubuntu: [18, 20, 22]
41                 include:
42                     - ubuntu: 18
43                       postgresql: 9.6
44                       postgis: 2.5
45                       php: 7.2
46                     - ubuntu: 20
47                       postgresql: 13
48                       postgis: 3
49                       php: 7.4
50                     - ubuntu: 22
51                       postgresql: 15
52                       postgis: 3
53                       php: 8.1
54
55         runs-on: ubuntu-${{ matrix.ubuntu }}.04
56
57         steps:
58             - uses: actions/download-artifact@v3
59               with:
60                   name: full-source
61
62             - name: Unpack Nominatim
63               run: tar xf nominatim-src.tar.bz2
64
65             - name: Setup PHP
66               uses: shivammathur/setup-php@v2
67               with:
68                   php-version: ${{ matrix.php }}
69                   tools: phpunit, phpcs, composer
70                   ini-values: opcache.jit=disable
71
72             - uses: actions/setup-python@v4
73               with:
74                 python-version: 3.7
75               if: matrix.ubuntu == 18
76
77             - uses: ./Nominatim/.github/actions/setup-postgresql
78               with:
79                   postgresql-version: ${{ matrix.postgresql }}
80                   postgis-version: ${{ matrix.postgis }}
81
82             - uses: ./Nominatim/.github/actions/build-nominatim
83               with:
84                   ubuntu: ${{ matrix.ubuntu }}
85
86             - name: Install test prerequsites (behave from apt)
87               run: sudo apt-get install -y -qq python3-behave
88               if: matrix.ubuntu == 20
89
90             - name: Install test prerequsites (behave from pip)
91               run: pip3 install behave==1.2.6
92               if: ${{ (matrix.ubuntu == 18) || (matrix.ubuntu == 22) }}
93
94             - name: Install test prerequsites (from apt for Ununtu 2x)
95               run: sudo apt-get install -y -qq python3-pytest uvicorn
96               if: matrix.ubuntu >= 20
97
98             - name: Install test prerequsites (from pip for Ubuntu 18)
99               run: pip3 install pytest uvicorn
100               if: matrix.ubuntu == 18
101
102             - name: Install Python webservers
103               run: pip3 install falcon sanic sanic-testing starlette
104
105             - name: Install latest pylint/mypy
106               run: pip3 install -U pylint mypy types-PyYAML types-jinja2 types-psycopg2 types-psutil types-requests typing-extensions asgi_lifespan sqlalchemy2-stubs
107
108             - name: PHP linting
109               run: phpcs --report-width=120 .
110               working-directory: Nominatim
111
112             - name: Python linting
113               run: python3 -m pylint nominatim
114               working-directory: Nominatim
115
116             - name: PHP unit tests
117               run: phpunit ./
118               working-directory: Nominatim/test/php
119               if: ${{ (matrix.ubuntu == 20) || (matrix.ubuntu == 22) }}
120
121             - name: Python unit tests
122               run: python3 -m pytest test/python
123               working-directory: Nominatim
124
125             - name: BDD tests
126               run: |
127                   python3 -m behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build --format=progress3
128               working-directory: Nominatim/test/bdd
129
130             - name: Install newer Python packages (for typechecking info)
131               run: pip3 install -U osmium uvicorn
132               if: matrix.ubuntu >= 20
133
134             - name: Python static typechecking
135               run: python3 -m mypy --strict nominatim
136               working-directory: Nominatim
137               if: matrix.ubuntu >= 20
138
139     legacy-test:
140         needs: create-archive
141         runs-on: ubuntu-20.04
142
143         steps:
144             - uses: actions/download-artifact@v3
145               with:
146                   name: full-source
147
148             - name: Unpack Nominatim
149               run: tar xf nominatim-src.tar.bz2
150
151             - name: Setup PHP
152               uses: shivammathur/setup-php@v2
153               with:
154                   php-version: 7.4
155
156             - uses: ./Nominatim/.github/actions/setup-postgresql
157               with:
158                   postgresql-version: 13
159                   postgis-version: 3
160
161             - name: Install Postgresql server dev
162               run: sudo apt-get install postgresql-server-dev-13
163
164             - uses: ./Nominatim/.github/actions/build-nominatim
165               with:
166                   ubuntu: 20
167                   cmake-args: -DBUILD_MODULE=on
168
169             - name: Install test prerequsites
170               run: sudo apt-get install -y -qq python3-behave
171
172             - name: BDD tests (legacy tokenizer)
173               run: |
174                   python3 -m behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build -DTOKENIZER=legacy --format=progress3
175               working-directory: Nominatim/test/bdd
176
177
178     install:
179         runs-on: ubuntu-latest
180         needs: create-archive
181
182         strategy:
183             matrix:
184                 name: [Ubuntu-20, Ubuntu-22]
185                 include:
186                     - name: Ubuntu-20
187                       image: "ubuntu:20.04"
188                       ubuntu: 20
189                       install_mode: install-apache
190                     - name: Ubuntu-22
191                       image: "ubuntu:22.04"
192                       ubuntu: 22
193                       install_mode: install-apache
194
195         container:
196             image: ${{ matrix.image }}
197             env:
198                 LANG: en_US.UTF-8
199
200         defaults:
201             run:
202                 shell: sudo -Hu nominatim bash --noprofile --norc -eo pipefail {0}
203
204         steps:
205             - name: Prepare container (Ubuntu)
206               run: |
207                   export APT_LISTCHANGES_FRONTEND=none
208                   export DEBIAN_FRONTEND=noninteractive
209                   apt-get update -qq
210                   apt-get install -y git sudo wget
211                   ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
212               shell: bash
213
214             - name: Setup import user
215               run: |
216                   useradd -m nominatim
217                   echo 'nominatim   ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/nominiatim
218                   echo "/home/nominatim/Nominatim/vagrant/Install-on-${OS}.sh no $INSTALL_MODE" > /home/nominatim/vagrant.sh
219               shell: bash
220               env:
221                 OS: ${{ matrix.name }}
222                 INSTALL_MODE: ${{ matrix.install_mode }}
223
224             - uses: actions/download-artifact@v3
225               with:
226                   name: full-source
227                   path: /home/nominatim
228
229             - name: Install Nominatim
230               run: |
231                 export USERNAME=nominatim
232                 export USERHOME=/home/nominatim
233                 export NOSYSTEMD=yes
234                 export HAVE_SELINUX=no
235                 tar xf nominatim-src.tar.bz2
236                 . vagrant.sh
237               working-directory: /home/nominatim
238
239             - name: Prepare import environment
240               run: |
241                   mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf
242                   rm -rf Nominatim
243                   mkdir data-env-reverse
244               working-directory: /home/nominatim
245
246             - name: Print version
247               run: nominatim --version
248               working-directory: /home/nominatim/nominatim-project
249
250             - name: Collect host OS information
251               run: nominatim admin --collect-os-info
252               working-directory: /home/nominatim/nominatim-project
253
254             - name: Import
255               run: nominatim import --osm-file ../test.pbf
256               working-directory: /home/nominatim/nominatim-project
257
258             - name: Import special phrases
259               run: nominatim special-phrases --import-from-wiki
260               working-directory: /home/nominatim/nominatim-project
261
262             - name: Check full import
263               run: nominatim admin --check-database
264               working-directory: /home/nominatim/nominatim-project
265
266             - name: Warm up database
267               run: nominatim admin --warm
268               working-directory: /home/nominatim/nominatim-project
269
270             - name: Prepare update (Ubuntu)
271               run: apt-get install -y python3-pip
272               shell: bash
273
274             - name: Run update
275               run: |
276                   pip3 install --user osmium
277                   nominatim replication --init
278                   NOMINATIM_REPLICATION_MAX_DIFF=1 nominatim replication --once
279               working-directory: /home/nominatim/nominatim-project
280
281             - name: Clean up database
282               run: nominatim refresh --postcodes --word-tokens
283               working-directory: /home/nominatim/nominatim-project
284
285             - name: Run reverse-only import
286               run : |
287                   echo 'NOMINATIM_DATABASE_DSN="pgsql:dbname=reverse"' >> .env
288                   nominatim import --osm-file ../test.pbf --reverse-only --no-updates
289               working-directory: /home/nominatim/data-env-reverse
290
291             - name: Check reverse-only import
292               run: nominatim admin --check-database
293               working-directory: /home/nominatim/data-env-reverse
294
295             - name: Clean up database (reverse-only import)
296               run: nominatim refresh --postcodes --word-tokens
297               working-directory: /home/nominatim/nominatim-project