Merge pull request #3525 from lonvia/project-dir-less-library #1495
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI Tests | |
on: [ push, pull_request ] | |
jobs: | |
create-archive: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions/cache@v4 | |
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@v4 | |
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' | |
lua: '5.1' | |
- flavour: ubuntu-20 | |
ubuntu: 20 | |
postgresql: 13 | |
postgis: 3 | |
lua: '5.3' | |
- flavour: ubuntu-22 | |
ubuntu: 22 | |
postgresql: 15 | |
postgis: 3 | |
lua: '5.3' | |
runs-on: ubuntu-${{ matrix.ubuntu }}.04 | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: full-source | |
- name: Unpack Nominatim | |
run: tar xf nominatim-src.tar.bz2 | |
- uses: actions/setup-python@v5 | |
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 prerequisites (behave from apt) | |
run: sudo apt-get install -y -qq python3-behave | |
if: matrix.flavour == 'ubuntu-20' | |
- name: Install test prerequisites (behave from pip) | |
run: pip3 install behave==1.2.6 | |
if: (matrix.flavour == 'oldstuff') || (matrix.flavour == 'ubuntu-22') | |
- name: Install test prerequisites (from apt for Ununtu 2x) | |
run: sudo apt-get install -y -qq python3-pytest python3-pytest-asyncio uvicorn | |
if: matrix.flavour != 'oldstuff' | |
- name: Install newer pytest-asyncio | |
run: pip3 install -U pytest-asyncio | |
if: matrix.flavour == 'ubuntu-20' | |
- name: Install test prerequisites (from pip for Ubuntu 18) | |
run: pip3 install pytest pytest-asyncio uvicorn | |
if: matrix.flavour == 'oldstuff' | |
- name: Install Python webservers | |
run: pip3 install falcon starlette asgi_lifespan | |
- name: Install latest pylint | |
run: pip3 install -U pylint | |
if: matrix.flavour == 'ubuntu-22' | |
- name: Python linting | |
run: python3 -m pylint src | |
working-directory: Nominatim | |
if: matrix.flavour == 'ubuntu-22' | |
- name: Python unit tests | |
run: python3 -m pytest test/python | |
working-directory: Nominatim | |
- name: BDD tests | |
run: | | |
export PATH=$GITHUB_WORKSPACE/build/osm2pgsql:$PATH | |
python3 -m behave -DREMOVE_TEMPLATE=1 --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 types-Pygments typing-extensions | |
if: matrix.flavour != 'oldstuff' | |
- name: Python static typechecking | |
run: python3 -m mypy --strict src | |
working-directory: Nominatim | |
if: matrix.flavour != 'oldstuff' | |
legacy-test: | |
needs: create-archive | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
postgresql: ["13", "16"] | |
steps: | |
- uses: actions/download-artifact@v4 | |
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: ${{ matrix.postgresql }} | |
postgis-version: 3 | |
- name: Install Postgresql server dev | |
run: sudo apt-get install postgresql-server-dev-$PGVER | |
env: | |
PGVER: ${{ matrix.postgresql }} | |
- uses: ./Nominatim/.github/actions/build-nominatim | |
with: | |
cmake-args: -DBUILD_MODULE=on | |
- name: Install test prerequisites | |
run: sudo apt-get install -y -qq python3-behave | |
- name: BDD tests (legacy tokenizer) | |
run: | | |
export PATH=$GITHUB_WORKSPACE/build/osm2pgsql:$PATH | |
python3 -m behave -DREMOVE_TEMPLATE=1 -DSERVER_MODULE_PATH=$GITHUB_WORKSPACE/build/module -DAPI_ENGINE=php -DTOKENIZER=legacy --format=progress3 | |
working-directory: Nominatim/test/bdd | |
php-test: | |
needs: create-archive | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: full-source | |
- name: Unpack Nominatim | |
run: tar xf nominatim-src.tar.bz2 | |
- uses: ./Nominatim/.github/actions/setup-postgresql | |
with: | |
postgresql-version: 15 | |
postgis-version: 3 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.1 | |
tools: phpunit:9, phpcs, composer | |
ini-values: opcache.jit=disable | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: PHP linting | |
run: phpcs --report-width=120 . | |
working-directory: Nominatim | |
- name: PHP unit tests | |
run: phpunit ./ | |
working-directory: Nominatim/test/php | |
- uses: ./Nominatim/.github/actions/build-nominatim | |
with: | |
flavour: 'ubuntu-22' | |
- name: Install test prerequisites | |
run: sudo apt-get install -y -qq python3-behave | |
- name: BDD tests (php) | |
run: | | |
export PATH=$GITHUB_WORKSPACE/build/osm2pgsql:$PATH | |
python3 -m behave -DREMOVE_TEMPLATE=1 -DAPI_ENGINE=php --format=progress3 | |
working-directory: Nominatim/test/bdd | |
install: | |
runs-on: ubuntu-latest | |
needs: create-archive | |
strategy: | |
matrix: | |
name: [Ubuntu-22, Ubuntu-24] | |
include: | |
- name: Ubuntu-22 | |
image: "ubuntu:22.04" | |
ubuntu: 22 | |
install_mode: install-apache | |
- name: Ubuntu-24 | |
image: "ubuntu:24.04" | |
ubuntu: 24 | |
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@v4 | |
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 | |
mv Nominatim/settings/flex-base.lua flex-base.lua | |
mv Nominatim/settings/import-extratags.lua import-extratags.lua | |
mv Nominatim/settings/taginfo.lua taginfo.lua | |
rm -rf Nominatim | |
mkdir data-env-reverse | |
working-directory: /home/nominatim | |
- name: Add nominatim to path | |
run: | | |
sudo ln -s /home/nominatim/nominatim-venv/bin/nominatim /usr/local/bin/nominatim | |
if: matrix.ubuntu == 24 | |
- name: Need lua binary | |
run: | | |
sudo apt-get install -y lua5.4 lua-dkjson | |
if: matrix.ubuntu == 24 | |
- name: Print version | |
run: nominatim --version | |
working-directory: /home/nominatim/nominatim-project | |
- name: Print taginfo | |
run: lua taginfo.lua | |
working-directory: /home/nominatim | |
- 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: Install osmium (Ubuntu 22) | |
run: | | |
pip3 install --user osmium | |
if: matrix.ubuntu == 22 | |
- name: Install osmium (Ubuntu 24) | |
run: | | |
/home/nominatim/nominatim-venv/bin/pip install osmium | |
if: matrix.ubuntu == 24 | |
- name: Run update | |
run: | | |
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 | |
install-no-superuser: | |
runs-on: ubuntu-latest | |
needs: create-archive | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: full-source | |
- name: Unpack Nominatim | |
run: tar xf nominatim-src.tar.bz2 | |
- uses: ./Nominatim/.github/actions/setup-postgresql | |
with: | |
postgresql-version: 16 | |
postgis-version: 3 | |
- uses: ./Nominatim/.github/actions/build-nominatim | |
with: | |
flavour: ubuntu-22 | |
lua: 5.3 | |
- name: Prepare import environment | |
run: | | |
mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf | |
rm -rf Nominatim | |
- name: Prepare Database | |
run: | | |
nominatim import --prepare-database | |
- name: Create import user | |
run: | | |
sudo -u postgres createuser osm-import | |
psql -d nominatim -c "ALTER USER \"osm-import\" WITH PASSWORD 'osm-import'" | |
psql -d nominatim -c 'GRANT CREATE ON SCHEMA public TO "osm-import"' | |
- name: Run import | |
run: | | |
NOMINATIM_DATABASE_DSN="pgsql:host=127.0.0.1;dbname=nominatim;user=osm-import;password=osm-import" nominatim import --continue import-from-file --osm-file test.pbf | |
- name: Check full import | |
run: nominatim admin --check-database | |
codespell: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: codespell-project/actions-codespell@v2 | |
with: | |
only_warn: 1 |