Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove cmake building and bundled osm2pgsql #3592

Merged
merged 6 commits into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 23 additions & 31 deletions .github/actions/build-nominatim/action.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
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"
Expand All @@ -23,30 +15,30 @@ runs:
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
6 changes: 1 addition & 5 deletions .github/actions/setup-postgresql/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ inputs:
postgresql-version:
description: 'Version of PostgreSQL to install'
required: true
postgis-version:
description: 'Version of Postgis to install'
required: true

runs:
using: "composite"
Expand All @@ -24,11 +21,10 @@ runs:

- name: Install PostgreSQL
run: |
sudo apt-get install -y -qq --no-install-suggests --no-install-recommends postgresql-client-${PGVER} postgresql-${PGVER}-postgis-${POSTGISVER} postgresql-${PGVER}-postgis-${POSTGISVER}-scripts postgresql-contrib-${PGVER} postgresql-${PGVER}
sudo apt-get install -y -qq --no-install-suggests --no-install-recommends postgresql-client-${PGVER} postgresql-${PGVER}-postgis-3 postgresql-${PGVER}-postgis-3-scripts postgresql-contrib-${PGVER} postgresql-${PGVER}
shell: bash
env:
PGVER: ${{ inputs.postgresql-version }}
POSTGISVER: ${{ inputs.postgis-version }}

- name: Adapt postgresql configuration
run: |
Expand Down
96 changes: 44 additions & 52 deletions .github/workflows/ci-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ jobs:
- 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

Expand All @@ -60,58 +60,67 @@ jobs:
- 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
Expand Down Expand Up @@ -186,12 +195,10 @@ jobs:
- 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
Expand Down Expand Up @@ -221,19 +228,9 @@ jobs:
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: |
Expand All @@ -260,7 +257,7 @@ jobs:
working-directory: /home/nominatim/nominatim-project

install-no-superuser:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
needs: create-archive

steps:
Expand All @@ -274,12 +271,8 @@ jobs:
- 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: |
Expand All @@ -288,7 +281,7 @@ jobs:

- name: Prepare Database
run: |
nominatim import --prepare-database
./venv/bin/nominatim import --prepare-database

- name: Create import user
run: |
Expand All @@ -298,10 +291,10 @@ jobs:

- 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
Expand All @@ -318,7 +311,6 @@ jobs:
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: 17
postgis-version: 3

- name: Install Python dependencies
run: |
Expand Down
4 changes: 0 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +0,0 @@
[submodule "osm2pgsql"]
path = osm2pgsql
url = https://github.com/openstreetmap/osm2pgsql.git
ignore = dirty
Loading