]> git.openstreetmap.org Git - nominatim.git/blob - .github/workflows/ci-tests.yml
drop official support for 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
133             - name: Python static typechecking
134               run: python3 -m mypy --strict nominatim
135               working-directory: Nominatim
136
137     legacy-test:
138         needs: create-archive
139         runs-on: ubuntu-20.04
140
141         steps:
142             - uses: actions/download-artifact@v3
143               with:
144                   name: full-source
145
146             - name: Unpack Nominatim
147               run: tar xf nominatim-src.tar.bz2
148
149             - name: Setup PHP
150               uses: shivammathur/setup-php@v2
151               with:
152                   php-version: 7.4
153
154             - uses: ./Nominatim/.github/actions/setup-postgresql
155               with:
156                   postgresql-version: 13
157                   postgis-version: 3
158
159             - name: Install Postgresql server dev
160               run: sudo apt-get install postgresql-server-dev-13
161
162             - uses: ./Nominatim/.github/actions/build-nominatim
163               with:
164                   ubuntu: 20
165                   cmake-args: -DBUILD_MODULE=on
166
167             - name: Install test prerequsites
168               run: sudo apt-get install -y -qq python3-behave
169
170             - name: BDD tests (legacy tokenizer)
171               run: |
172                   python3 -m behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build -DTOKENIZER=legacy --format=progress3
173               working-directory: Nominatim/test/bdd
174
175
176     install:
177         runs-on: ubuntu-latest
178         needs: create-archive
179
180         strategy:
181             matrix:
182                 name: [Ubuntu-20, Ubuntu-22]
183                 include:
184                     - name: Ubuntu-20
185                       image: "ubuntu:20.04"
186                       ubuntu: 20
187                       install_mode: install-apache
188                     - name: Ubuntu-22
189                       image: "ubuntu:22.04"
190                       ubuntu: 22
191                       install_mode: install-apache
192
193         container:
194             image: ${{ matrix.image }}
195             env:
196                 LANG: en_US.UTF-8
197
198         defaults:
199             run:
200                 shell: sudo -Hu nominatim bash --noprofile --norc -eo pipefail {0}
201
202         steps:
203             - name: Prepare container (Ubuntu)
204               run: |
205                   export APT_LISTCHANGES_FRONTEND=none
206                   export DEBIAN_FRONTEND=noninteractive
207                   apt-get update -qq
208                   apt-get install -y git sudo wget
209                   ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
210               shell: bash
211
212             - name: Setup import user
213               run: |
214                   useradd -m nominatim
215                   echo 'nominatim   ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/nominiatim
216                   echo "/home/nominatim/Nominatim/vagrant/Install-on-${OS}.sh no $INSTALL_MODE" > /home/nominatim/vagrant.sh
217               shell: bash
218               env:
219                 OS: ${{ matrix.name }}
220                 INSTALL_MODE: ${{ matrix.install_mode }}
221
222             - uses: actions/download-artifact@v3
223               with:
224                   name: full-source
225                   path: /home/nominatim
226
227             - name: Install Nominatim
228               run: |
229                 export USERNAME=nominatim
230                 export USERHOME=/home/nominatim
231                 export NOSYSTEMD=yes
232                 export HAVE_SELINUX=no
233                 tar xf nominatim-src.tar.bz2
234                 . vagrant.sh
235               working-directory: /home/nominatim
236
237             - name: Prepare import environment
238               run: |
239                   mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf
240                   rm -rf Nominatim
241                   mkdir data-env-reverse
242               working-directory: /home/nominatim
243
244             - name: Print version
245               run: nominatim --version
246               working-directory: /home/nominatim/nominatim-project
247
248             - name: Collect host OS information
249               run: nominatim admin --collect-os-info
250               working-directory: /home/nominatim/nominatim-project
251
252             - name: Import
253               run: nominatim import --osm-file ../test.pbf
254               working-directory: /home/nominatim/nominatim-project
255
256             - name: Import special phrases
257               run: nominatim special-phrases --import-from-wiki
258               working-directory: /home/nominatim/nominatim-project
259
260             - name: Check full import
261               run: nominatim admin --check-database
262               working-directory: /home/nominatim/nominatim-project
263
264             - name: Warm up database
265               run: nominatim admin --warm
266               working-directory: /home/nominatim/nominatim-project
267
268             - name: Prepare update (Ubuntu)
269               run: apt-get install -y python3-pip
270               shell: bash
271
272             - name: Run update
273               run: |
274                   pip3 install --user osmium
275                   nominatim replication --init
276                   NOMINATIM_REPLICATION_MAX_DIFF=1 nominatim replication --once
277               working-directory: /home/nominatim/nominatim-project
278
279             - name: Clean up database
280               run: nominatim refresh --postcodes --word-tokens
281               working-directory: /home/nominatim/nominatim-project
282
283             - name: Run reverse-only import
284               run : |
285                   echo 'NOMINATIM_DATABASE_DSN="pgsql:dbname=reverse"' >> .env
286                   nominatim import --osm-file ../test.pbf --reverse-only --no-updates
287               working-directory: /home/nominatim/data-env-reverse
288
289             - name: Check reverse-only import
290               run: nominatim admin --check-database
291               working-directory: /home/nominatim/data-env-reverse
292
293             - name: Clean up database (reverse-only import)
294               run: nominatim refresh --postcodes --word-tokens
295               working-directory: /home/nominatim/nominatim-project