name: 'Build Nominatim'
inputs:
- flavour:
- description: 'Version of Ubuntu to install on'
+ dependencies:
+ description: 'Where to install dependencies from (pip/apt)'
required: false
- default: 'ubuntu-20'
- cmake-args:
- description: 'Additional options to hand to cmake'
- required: false
- default: ''
- lua:
- description: 'Version of Lua to use'
- required: false
- default: '5.3'
+ default: 'pip'
runs:
using: "composite"
sudo rm -rf /opt/hostedtoolcache/go /opt/hostedtoolcache/CodeQL /usr/lib/jvm /usr/local/share/chromium /usr/local/lib/android
df -h
shell: bash
- - name: Install${{ matrix.flavour }} prerequisites
+ - name: Install general prerequisites
+ run: |
+ sudo apt-get install -y -qq libspatialite-dev libsqlite3-mod-spatialite libicu-dev virtualenv python3-dev osm2pgsql
+ shell: bash
+
+ - name: Install prerequisites from apt
run: |
- sudo apt-get install -y -qq libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libproj-dev libicu-dev liblua${LUA_VERSION}-dev lua${LUA_VERSION} lua-dkjson nlohmann-json3-dev libspatialite-dev libsqlite3-mod-spatialite
- if [ "$FLAVOUR" == "oldstuff" ]; then
- pip3 install MarkupSafe==2.0.1 python-dotenv jinja2==2.8 psutil==5.4.2 pyicu==2.9 osmium PyYAML==5.1 sqlalchemy==1.4.31 psycopg==3.1.7 datrie asyncpg aiosqlite
- else
- sudo apt-get install -y -qq python3-icu python3-datrie python3-pyosmium python3-jinja2 python3-psutil python3-dotenv python3-yaml
- pip3 install sqlalchemy psycopg aiosqlite
- fi
+ sudo apt-get install -y -qq python3-icu python3-datrie python3-jinja2 python3-psutil python3-dotenv python3-yaml python3-sqlalchemy python3-psycopg python3-asyncpg
shell: bash
- env:
- FLAVOUR: ${{ inputs.flavour }}
- CMAKE_ARGS: ${{ inputs.cmake-args }}
- LUA_VERSION: ${{ inputs.lua }}
+ if: inputs.dependencies == 'apt'
- - name: Configure
- run: mkdir build && cd build && cmake $CMAKE_ARGS ../Nominatim
+ - name: Setup virtual environment (for pip)
+ run: |
+ virtualenv venv
+ ./venv/bin/pip install -U pip
shell: bash
- env:
- CMAKE_ARGS: ${{ inputs.cmake-args }}
+ if: inputs.dependencies == 'pip'
- - name: Build
+ - name: Setup virtual environment (for apt)
run: |
- make -j2 all
- sudo make install
+ virtualenv venv --system-site-packages
+ shell: bash
+ if: inputs.dependencies == 'apt'
+
+ - name: Build nominatim
+ run: ./venv/bin/pip install Nominatim/packaging/nominatim-{api,db}
shell: bash
- working-directory: build
- flavour: ubuntu-20
ubuntu: 20
postgresql: 12
- postgis: 3
lua: '5.1'
+ dependencies: pip
- flavour: ubuntu-24
ubuntu: 24
postgresql: 17
- postgis: 3
lua: '5.3'
+ dependencies: apt
runs-on: ubuntu-${{ matrix.ubuntu }}.04
- 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 }}
+ dependencies: ${{ matrix.dependencies }}
- - name: Install test prerequisites
- run: pip3 install behave==1.2.6
+ - name: Compile osm2pgsql
+ run: |
+ sudo apt-get install -y -qq libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libproj-dev libicu-dev liblua${LUA_VERSION}-dev lua-dkjson nlohmann-json3-dev
+ mkdir osm2pgsql-build
+ cd osm2pgsql-build
+ git clone https://github.com/osm2pgsql-dev/osm2pgsql
+ mkdir build
+ cd build
+ cmake ../osm2pgsql
+ make
+ sudo make install
+ cd ../..
+ rm -rf osm2pgsql-build
+ if: matrix.ubuntu == '20'
+ env:
+ LUA_VERSION: ${{ matrix.lua }}
- name: Install test prerequisites
- run: sudo apt-get install -y -qq python3-pytest python3-pytest-asyncio uvicorn
+ run: ./venv/bin/pip install behave==1.2.6
- - name: Install newer pytest-asyncio
- run: pip3 install -U pytest-asyncio
- if: matrix.flavour == 'ubuntu-20'
+ - name: Install test prerequisites (apt)
+ run: sudo apt-get install -y -qq python3-pytest python3-pytest-asyncio uvicorn python3-falcon python3-aiosqlite python3-pyosmium
+ if: matrix.dependencies == 'apt'
- - name: Install Python webservers
- run: pip3 install falcon starlette asgi_lifespan
+ - name: Install test prerequisites (pip)
+ run: ./venv/bin/pip install pytest-asyncio falcon starlette asgi_lifespan aiosqlite osmium uvicorn
+ if: matrix.dependencies == 'pip'
- name: Install latest flake8
- run: pip3 install -U flake8
+ run: ./venv/bin/pip install -U flake8
- name: Python linting
- run: python3 -m flake8 src
+ run: ../venv/bin/python -m flake8 src
working-directory: Nominatim
+ - name: Install mypy and typechecking info
+ run: ./venv/bin/pip install -U mypy types-PyYAML types-jinja2 types-psutil types-requests types-ujson types-Pygments typing-extensions
+ if: matrix.dependencies == 'pip'
+
+ - name: Python static typechecking
+ run: ../venv/bin/python -m mypy --strict --python-version 3.8 src
+ working-directory: Nominatim
+ if: matrix.dependencies == 'pip'
+
- name: Python unit tests
- run: python3 -m pytest test/python
+ run: ../venv/bin/python -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
+ ../../../venv/bin/python -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
-
- - name: Python static typechecking
- run: python3 -m mypy --strict --python-version 3.8 src
- working-directory: Nominatim
-
install:
runs-on: ubuntu-latest
needs: create-archive
- 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
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)
+ - name: Install osmium
run: |
/home/nominatim/nominatim-venv/bin/pip install osmium
- if: matrix.ubuntu == 24
- name: Run update
run: |
working-directory: /home/nominatim/nominatim-project
install-no-superuser:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-24.04
needs: create-archive
steps:
- 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: |
- name: Prepare Database
run: |
- nominatim import --prepare-database
+ ./venv/bin/nominatim import --prepare-database
- name: Create import user
run: |
- 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
+ NOMINATIM_DATABASE_DSN="pgsql:host=127.0.0.1;dbname=nominatim;user=osm-import;password=osm-import" ./venv/bin/nominatim import --continue import-from-file --osm-file test.pbf
- name: Check full import
- run: nominatim admin --check-database
+ run: ./venv/bin/nominatim admin --check-database
migrate:
runs-on: ubuntu-24.04
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: 17
- postgis-version: 3
- name: Install Python dependencies
run: |