Merge pull request #2384 from lonvia/actions-add-icu-tokenizer

CI: run tests on Ubuntu 18
This commit is contained in:
Sarah Hoffmann 2021-07-07 14:39:53 +02:00 committed by GitHub
commit a5970d7548
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 59 additions and 24 deletions

View File

@ -14,9 +14,9 @@ runs:
run: | 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 sudo apt-get install -y -qq libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libproj-dev libicu-dev
if [ "x$UBUNTUVER" == "x18" ]; then if [ "x$UBUNTUVER" == "x18" ]; then
pip3 install python-dotenv psycopg2==2.7.7 jinja2==2.8 psutil==5.4.2 pyicu osmium pip3 install python-dotenv psycopg2==2.7.7 jinja2==2.8 psutil==5.4.2 pyicu osmium PyYAML==5.1 datrie
else else
sudo apt-get install -y -qq python3-icu python3-datrie python3-pyosmium python3-jinja2 python3-psutil python3-psycopg2 python3-dotenv sudo apt-get install -y -qq python3-icu python3-datrie python3-pyosmium python3-jinja2 python3-psutil python3-psycopg2 python3-dotenv python3-yaml
fi fi
shell: bash shell: bash
env: env:

View File

@ -4,16 +4,22 @@ on: [ push, pull_request ]
jobs: jobs:
tests: tests:
runs-on: ubuntu-20.04
strategy: strategy:
matrix: matrix:
postgresql: [9.5, 13] ubuntu: [18, 20]
include: include:
- postgresql: 9.5 - ubuntu: 18
postgresql: 9.5
postgis: 2.5 postgis: 2.5
- postgresql: 13 pytest: pytest
php: 7.2
- ubuntu: 20
postgresql: 13
postgis: 3 postgis: 3
pytest: py.test-3
php: 7.4
runs-on: ubuntu-${{ matrix.ubuntu }}.04
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -24,9 +30,15 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '7.4' php-version: ${{ matrix.php }}
coverage: xdebug
tools: phpunit, phpcs, composer tools: phpunit, phpcs, composer
- uses: actions/setup-python@v2
with:
python-version: 3.6
if: matrix.ubuntu == 18
- name: Get Date - name: Get Date
id: get-date id: get-date
run: | run: |
@ -43,33 +55,53 @@ jobs:
with: with:
postgresql-version: ${{ matrix.postgresql }} postgresql-version: ${{ matrix.postgresql }}
postgis-version: ${{ matrix.postgis }} postgis-version: ${{ matrix.postgis }}
- uses: ./Nominatim/.github/actions/build-nominatim - uses: ./Nominatim/.github/actions/build-nominatim
with:
ubuntu: ${{ matrix.ubuntu }}
- name: Install test prerequsites - name: Install test prerequsites
run: sudo apt-get install -y -qq php-codesniffer pylint python3-pytest python3-behave python3-pytest-cov php-codecoverage php-xdebug run: sudo apt-get install -y -qq pylint python3-pytest python3-behave python3-pytest-cov php-codecoverage
if: matrix.ubuntu == 20
- name: Install test prerequsites
run: |
pip3 install pylint==2.6.0 pytest pytest-cov behave==1.2.6
if: matrix.ubuntu == 18
- name: PHP linting - name: PHP linting
run: phpcs --report-width=120 . run: phpcs --report-width=120 .
working-directory: Nominatim working-directory: Nominatim
- name: Python linting - name: Python linting
run: pylint --extension-pkg-whitelist=osmium nominatim run: pylint nominatim
working-directory: Nominatim working-directory: Nominatim
- name: PHP unit tests - name: PHP unit tests
run: phpunit --coverage-clover ../../coverage-php.xml ./ run: phpunit --coverage-clover ../../coverage-php.xml ./
working-directory: Nominatim/test/php working-directory: Nominatim/test/php
if: matrix.ubuntu == 20
- name: Python unit tests - name: Python unit tests
run: py.test-3 --cov=nominatim --cov-report=xml test/python run: $PYTEST --cov=nominatim --cov-report=xml test/python
working-directory: Nominatim working-directory: Nominatim
env:
PYTEST: ${{ matrix.pytest }}
- name: BDD tests - name: BDD tests
run: | run: |
mkdir cov
behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build --format=progress3 -DPHPCOV=./cov behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build --format=progress3 -DPHPCOV=./cov
composer require phpunit/phpcov:7.0.2 composer require phpunit/phpcov:7.0.2
vendor/bin/phpcov merge --clover ../../coverage-bdd.xml ./cov vendor/bin/phpcov merge --clover ../../coverage-bdd.xml ./cov
working-directory: Nominatim/test/bdd working-directory: Nominatim/test/bdd
if: matrix.ubuntu == 20
- name: BDD tests
run: |
behave -DREMOVE_TEMPLATE=1 -DBUILDDIR=$GITHUB_WORKSPACE/build --format=progress3
working-directory: Nominatim/test/bdd
if: matrix.ubuntu == 18
- name: BDD tests (legacy_icu tokenizer) - name: BDD tests (legacy_icu tokenizer)
run: | run: |
@ -85,6 +117,7 @@ jobs:
fail_ci_if_error: false fail_ci_if_error: false
path_to_write_report: ./coverage/codecov_report.txt path_to_write_report: ./coverage/codecov_report.txt
verbose: true verbose: true
if: matrix.ubuntu == 20
import: import:
strategy: strategy:

View File

@ -45,6 +45,7 @@ For running Nominatim:
* [psutil](https://github.com/giampaolo/psutil) * [psutil](https://github.com/giampaolo/psutil)
* [Jinja2](https://palletsprojects.com/p/jinja/) * [Jinja2](https://palletsprojects.com/p/jinja/)
* [PyICU](https://pypi.org/project/PyICU/) * [PyICU](https://pypi.org/project/PyICU/)
* [PyYaml](https://pyyaml.org/) (5.1+)
* [datrie](https://github.com/pytries/datrie) * [datrie](https://github.com/pytries/datrie)
* [PHP](https://php.net) (7.0 or later) * [PHP](https://php.net) (7.0 or later)
* PHP-pgsql * PHP-pgsql

View File

@ -29,7 +29,7 @@ The Nominatim test suite consists of behavioural tests (using behave) and
unit tests (using PHPUnit for PHP code and pytest for Python code). unit tests (using PHPUnit for PHP code and pytest for Python code).
It has the following additional requirements: It has the following additional requirements:
* [behave test framework](https://behave.readthedocs.io) >= 1.2.5 * [behave test framework](https://behave.readthedocs.io) >= 1.2.6
* [phpunit](https://phpunit.de) >= 7.3 * [phpunit](https://phpunit.de) >= 7.3
* [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) * [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer)
* [Pylint](https://pylint.org/) (2.6.0 is used for the CI) * [Pylint](https://pylint.org/) (2.6.0 is used for the CI)

View File

@ -68,9 +68,9 @@ class Configuration:
""" """
try: try:
return int(self.__getattr__(name)) return int(self.__getattr__(name))
except ValueError: except ValueError as exp:
LOG.fatal("Invalid setting NOMINATIM_%s. Needs to be a number.", name) LOG.fatal("Invalid setting NOMINATIM_%s. Needs to be a number.", name)
raise UsageError("Configuration error.") raise UsageError("Configuration error.") from exp
def get_libpq_dsn(self): def get_libpq_dsn(self):

View File

@ -7,12 +7,11 @@ import json
_ICU_VARIANT_PORPERTY_FIELDS = ['lang'] _ICU_VARIANT_PORPERTY_FIELDS = ['lang']
class ICUVariantProperties(namedtuple('_ICUVariantProperties', _ICU_VARIANT_PORPERTY_FIELDS, class ICUVariantProperties(namedtuple('_ICUVariantProperties', _ICU_VARIANT_PORPERTY_FIELDS)):
defaults=(None, )*len(_ICU_VARIANT_PORPERTY_FIELDS))):
""" Data container for saving properties that describe when a variant """ Data container for saving properties that describe when a variant
should be applied. should be applied.
Porperty instances are hashable. Property instances are hashable.
""" """
@classmethod @classmethod
def from_rules(cls, _): def from_rules(cls, _):
@ -52,7 +51,7 @@ def unpickle_variant_set(variant_string):
""" """
data = json.loads(variant_string) data = json.loads(variant_string)
properties = {int(k): ICUVariantProperties(**v) for k, v in data['properties'].items()} properties = {int(k): ICUVariantProperties.from_rules(v)
print(properties) for k, v in data['properties'].items()}
return set((ICUVariant(src, repl, properties[pid]) for src, repl, pid in data['variants'])) return set((ICUVariant(src, repl, properties[pid]) for src, repl, pid in data['variants']))

View File

@ -70,7 +70,9 @@ def run_api_script(endpoint, project_dir, extra_env=None, phpcgi_bin=None,
else: else:
cmd = [str(phpcgi_bin)] cmd = [str(phpcgi_bin)]
proc = subprocess.run(cmd, cwd=str(project_dir), env=env, capture_output=True, proc = subprocess.run(cmd, cwd=str(project_dir), env=env,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=False) check=False)
if proc.returncode != 0 or proc.stderr: if proc.returncode != 0 or proc.stderr:

View File

@ -42,7 +42,7 @@
python3-pip python3-setuptools python3-devel \ python3-pip python3-setuptools python3-devel \
expat-devel zlib-devel libicu-dev expat-devel zlib-devel libicu-dev
pip3 install --user psycopg2 python-dotenv psutil Jinja2 PyICU datrie pip3 install --user psycopg2 python-dotenv psutil Jinja2 PyICU datrie pyyaml
# #

View File

@ -35,7 +35,7 @@
python3-pip python3-setuptools python3-devel \ python3-pip python3-setuptools python3-devel \
expat-devel zlib-devel libicu-dev expat-devel zlib-devel libicu-dev
pip3 install --user psycopg2 python-dotenv psutil Jinja2 PyICU datrie pip3 install --user psycopg2 python-dotenv psutil Jinja2 PyICU datrie pyyaml
# #

View File

@ -32,10 +32,10 @@ export DEBIAN_FRONTEND=noninteractive #DOCS:
php php-pgsql php-intl libicu-dev python3-pip \ php php-pgsql php-intl libicu-dev python3-pip \
python3-psycopg2 python3-psutil python3-jinja2 python3-icu git python3-psycopg2 python3-psutil python3-jinja2 python3-icu git
# The python-dotenv adn datrie package that comes with Ubuntu 18.04 is too old, so # Some of the Python packages that come with Ubuntu 18.04 are too old, so
# install the latest version from pip: # install the latest version from pip:
pip3 install python-dotenv datrie pip3 install python-dotenv datrie pyyaml
# #
# System Configuration # System Configuration