mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
It is not possible to produce type annotations that work with both versions 1.4 and 2.0. So keep to the principle of only supporting newest versions when it comes to mypy. This means that some types may have to be string quoted to not cause issues when running with SQLAlchemy 1.4.
304 lines
11 KiB
YAML
304 lines
11 KiB
YAML
name: CI Tests
|
|
|
|
on: [ push, pull_request ]
|
|
|
|
jobs:
|
|
create-archive:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
submodules: true
|
|
|
|
- uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
data/country_osm_grid.sql.gz
|
|
key: nominatim-country-data-1
|
|
|
|
- name: Package tarball
|
|
run: |
|
|
if [ ! -f data/country_osm_grid.sql.gz ]; then
|
|
wget --no-verbose -O data/country_osm_grid.sql.gz https://www.nominatim.org/data/country_grid.sql.gz
|
|
fi
|
|
cd ..
|
|
tar czf nominatim-src.tar.bz2 Nominatim
|
|
mv nominatim-src.tar.bz2 Nominatim
|
|
|
|
- name: 'Upload Artifact'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: full-source
|
|
path: nominatim-src.tar.bz2
|
|
retention-days: 1
|
|
|
|
tests:
|
|
needs: create-archive
|
|
strategy:
|
|
matrix:
|
|
flavour: [oldstuff, "ubuntu-20", "ubuntu-22"]
|
|
include:
|
|
- flavour: oldstuff
|
|
ubuntu: 20
|
|
postgresql: '9.6'
|
|
postgis: '2.5'
|
|
php: '7.3'
|
|
lua: '5.1'
|
|
- flavour: ubuntu-20
|
|
ubuntu: 20
|
|
postgresql: 13
|
|
postgis: 3
|
|
php: '7.4'
|
|
lua: '5.3'
|
|
- flavour: ubuntu-22
|
|
ubuntu: 22
|
|
postgresql: 15
|
|
postgis: 3
|
|
php: '8.1'
|
|
lua: '5.3'
|
|
|
|
runs-on: ubuntu-${{ matrix.ubuntu }}.04
|
|
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: full-source
|
|
|
|
- name: Unpack Nominatim
|
|
run: tar xf nominatim-src.tar.bz2
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
tools: phpunit, phpcs, composer
|
|
ini-values: opcache.jit=disable
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.7
|
|
if: matrix.flavour == 'oldstuff'
|
|
|
|
- uses: ./Nominatim/.github/actions/setup-postgresql
|
|
with:
|
|
postgresql-version: ${{ matrix.postgresql }}
|
|
postgis-version: ${{ matrix.postgis }}
|
|
|
|
- uses: ./Nominatim/.github/actions/build-nominatim
|
|
with:
|
|
flavour: ${{ matrix.flavour }}
|
|
lua: ${{ matrix.lua }}
|
|
|
|
- name: Install test prerequsites (behave from apt)
|
|
run: sudo apt-get install -y -qq python3-behave
|
|
if: matrix.flavour == 'ubuntu-20'
|
|
|
|
- name: Install test prerequsites (behave from pip)
|
|
run: pip3 install behave==1.2.6
|
|
if: (matrix.flavour == 'oldstuff') || (matrix.flavour == 'ubuntu-22')
|
|
|
|
- name: Install test prerequsites (from apt for Ununtu 2x)
|
|
run: sudo apt-get install -y -qq python3-pytest uvicorn
|
|
if: matrix.flavour != 'oldstuff'
|
|
|
|
- name: Install test prerequsites (from pip for Ubuntu 18)
|
|
run: pip3 install pytest uvicorn
|
|
if: matrix.flavour == 'oldstuff'
|
|
|
|
- name: Install Python webservers
|
|
run: pip3 install falcon sanic sanic-testing sanic-cors starlette
|
|
|
|
- name: Install latest pylint
|
|
run: pip3 install -U pylint asgi_lifespan
|
|
|
|
- name: PHP linting
|
|
run: phpcs --report-width=120 .
|
|
working-directory: Nominatim
|
|
|
|
- name: Python linting
|
|
run: python3 -m pylint nominatim
|
|
working-directory: Nominatim
|
|
|
|
- name: PHP unit tests
|
|
run: phpunit ./
|
|
working-directory: Nominatim/test/php
|
|
if: ${{ (matrix.ubuntu == 20) || (matrix.ubuntu == 22) }}
|
|
|
|
- name: Python unit tests
|
|
run: python3 -m pytest test/python
|
|
working-directory: Nominatim
|
|
|
|
- name: BDD tests
|
|
run: |
|
|
python3 -m behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build --format=progress3
|
|
working-directory: Nominatim/test/bdd
|
|
|
|
- name: Install mypy and typechecking info
|
|
run: pip3 install -U mypy osmium uvicorn types-PyYAML types-jinja2 types-psycopg2 types-psutil types-requests types-ujson typing-extensions
|
|
if: matrix.flavour != 'oldstuff'
|
|
|
|
- name: Python static typechecking
|
|
run: python3 -m mypy --strict nominatim
|
|
working-directory: Nominatim
|
|
if: matrix.flavour != 'oldstuff'
|
|
|
|
legacy-test:
|
|
needs: create-archive
|
|
runs-on: ubuntu-20.04
|
|
|
|
steps:
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: full-source
|
|
|
|
- name: Unpack Nominatim
|
|
run: tar xf nominatim-src.tar.bz2
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: '7.4'
|
|
|
|
- uses: ./Nominatim/.github/actions/setup-postgresql
|
|
with:
|
|
postgresql-version: 13
|
|
postgis-version: 3
|
|
|
|
- name: Install Postgresql server dev
|
|
run: sudo apt-get install postgresql-server-dev-13
|
|
|
|
- uses: ./Nominatim/.github/actions/build-nominatim
|
|
with:
|
|
cmake-args: -DBUILD_MODULE=on
|
|
|
|
- name: Install test prerequsites
|
|
run: sudo apt-get install -y -qq python3-behave
|
|
|
|
- name: BDD tests (legacy tokenizer)
|
|
run: |
|
|
python3 -m behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build -DTOKENIZER=legacy --format=progress3
|
|
working-directory: Nominatim/test/bdd
|
|
|
|
|
|
install:
|
|
runs-on: ubuntu-latest
|
|
needs: create-archive
|
|
|
|
strategy:
|
|
matrix:
|
|
name: [Ubuntu-20, Ubuntu-22]
|
|
include:
|
|
- name: Ubuntu-20
|
|
image: "ubuntu:20.04"
|
|
ubuntu: 20
|
|
install_mode: install-apache
|
|
- name: Ubuntu-22
|
|
image: "ubuntu:22.04"
|
|
ubuntu: 22
|
|
install_mode: install-apache
|
|
|
|
container:
|
|
image: ${{ matrix.image }}
|
|
env:
|
|
LANG: en_US.UTF-8
|
|
|
|
defaults:
|
|
run:
|
|
shell: sudo -Hu nominatim bash --noprofile --norc -eo pipefail {0}
|
|
|
|
steps:
|
|
- name: Prepare container (Ubuntu)
|
|
run: |
|
|
export APT_LISTCHANGES_FRONTEND=none
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update -qq
|
|
apt-get install -y git sudo wget
|
|
ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
|
|
shell: bash
|
|
|
|
- name: Setup import user
|
|
run: |
|
|
useradd -m nominatim
|
|
echo 'nominatim ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/nominiatim
|
|
echo "/home/nominatim/Nominatim/vagrant/Install-on-${OS}.sh no $INSTALL_MODE" > /home/nominatim/vagrant.sh
|
|
shell: bash
|
|
env:
|
|
OS: ${{ matrix.name }}
|
|
INSTALL_MODE: ${{ matrix.install_mode }}
|
|
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: full-source
|
|
path: /home/nominatim
|
|
|
|
- name: Install Nominatim
|
|
run: |
|
|
export USERNAME=nominatim
|
|
export USERHOME=/home/nominatim
|
|
export NOSYSTEMD=yes
|
|
export HAVE_SELINUX=no
|
|
tar xf nominatim-src.tar.bz2
|
|
. vagrant.sh
|
|
working-directory: /home/nominatim
|
|
|
|
- name: Prepare import environment
|
|
run: |
|
|
mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf
|
|
rm -rf Nominatim
|
|
mkdir data-env-reverse
|
|
working-directory: /home/nominatim
|
|
|
|
- name: Print version
|
|
run: nominatim --version
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Collect host OS information
|
|
run: nominatim admin --collect-os-info
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Import
|
|
run: nominatim import --osm-file ../test.pbf
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Import special phrases
|
|
run: nominatim special-phrases --import-from-wiki
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Check full import
|
|
run: nominatim admin --check-database
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Warm up database
|
|
run: nominatim admin --warm
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Prepare update (Ubuntu)
|
|
run: apt-get install -y python3-pip
|
|
shell: bash
|
|
|
|
- name: Run update
|
|
run: |
|
|
pip3 install --user osmium
|
|
nominatim replication --init
|
|
NOMINATIM_REPLICATION_MAX_DIFF=1 nominatim replication --once
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Clean up database
|
|
run: nominatim refresh --postcodes --word-tokens
|
|
working-directory: /home/nominatim/nominatim-project
|
|
|
|
- name: Run reverse-only import
|
|
run : |
|
|
echo 'NOMINATIM_DATABASE_DSN="pgsql:dbname=reverse"' >> .env
|
|
nominatim import --osm-file ../test.pbf --reverse-only --no-updates
|
|
working-directory: /home/nominatim/data-env-reverse
|
|
|
|
- name: Check reverse-only import
|
|
run: nominatim admin --check-database
|
|
working-directory: /home/nominatim/data-env-reverse
|
|
|
|
- name: Clean up database (reverse-only import)
|
|
run: nominatim refresh --postcodes --word-tokens
|
|
working-directory: /home/nominatim/nominatim-project
|