fix matrix version #18
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 | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
build: | |
name: Build docker image | |
strategy: | |
matrix: | |
nominatim: | |
- version: "4.3" | |
- version: "4.4" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and export image | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.nominatim.version }} | |
tags: nominatim:latest | |
outputs: type=docker,dest=/tmp/nominatim.tar | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: nominatim-${{ matrix.nominatim.version }} | |
path: /tmp/nominatim.tar | |
# - name: Set container date tag | |
# run: | | |
# echo "DATE_TAG=$(date +%Y-%m-%dT%H-%M)" >> $GITHUB_ENV | |
# - name: Build and push production docker image to Dockerhub | |
# if: ${{ github.ref == 'refs/heads/master' && github.repository_owner == 'mediagis' }} | |
# run: |- | |
# docker buildx build --platform linux/amd64,linux/arm64 --push \ | |
# -t mediagis/nominatim:${{ matrix.nominatim.version }} \ | |
# -t mediagis/nominatim:${{ matrix.nominatim.version }}-${DATE_TAG} . | |
# working-directory: ${{ matrix.nominatim.version }} | |
test: | |
name: Test docker image | |
needs: build | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
nominatim: | |
- version: "4.3" | |
- version: "4.4" | |
test_scenario: | |
- name: Import with PBF_URL and update | |
commands: |- | |
# get the data from four days ago to make sure there really are updates to apply | |
four_days_ago=`date --date="4 days ago" +%y%m%d` | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-${four_days_ago}.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-p 8001:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8001/search.php?q=avenue%20pasteur" | |
docker exec -i nominatim sudo -u nominatim nominatim replication --project-dir /nominatim --once | |
./assert-non-empty-json "http://localhost:8001/search.php?q=avenue%20pasteur" | |
- name: Import with volume mount | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-v nominatim-data:/var/lib/postgresql/14/main \ | |
-p 8002:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8002/search.php?q=avenue%20pasteur" | |
- name: Import with bind-mount, container restart & update | |
commands: |- | |
# get the data from four days ago to make sure there really are updates to apply | |
four_days_ago=`date --date="4 days ago" +%y%m%d` | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-${four_days_ago}.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-v /tmp/nominatim-data:/var/lib/postgresql/14/main \ | |
-p 8003:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8003/search.php?q=avenue%20pasteur" | |
# Stop container | |
docker stop nominatim | |
# import to bind mount is done previously | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-${four_days_ago}.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-v /tmp/nominatim-data:/var/lib/postgresql/14/main \ | |
-p 8004:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 25 | |
./assert-non-empty-json "http://localhost:8004/search.php?q=avenue%20pasteur" | |
docker exec -i nominatim sudo -u nominatim nominatim replication --project-dir /nominatim --once | |
./assert-non-empty-json "http://localhost:8004/search.php?q=avenue%20pasteur" | |
- name: UPDATE_MODE=once with volume | |
commands: |- | |
# get the data from four days ago to make sure there really are updates to apply | |
four_days_ago=`date --date="4 days ago" +%y%m%d` | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-${four_days_ago}.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-e UPDATE_MODE=once \ | |
-v nominatim-update-volume:/var/lib/postgresql/14/main \ | |
-p 8004:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8004/search.php?q=avenue%20pasteur" | |
echo -n "check replication log for Update completed. Count:" | |
docker exec -i nominatim grep -c 'Update completed.' /var/log/replication.log | |
- name: UPDATE_MODE=continuous with bind-mount | |
commands: |- | |
# get the data from few days ago to make sure there really are updates to apply | |
days_ago=`date --date="4 days ago" +%y%m%d` | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-${days_ago}.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-e UPDATE_MODE=continuous \ | |
-v /tmp/nominatim-update-bindmount:/var/lib/postgresql/14/main \ | |
-p 8004:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8004/search.php?q=avenue%20pasteur" | |
echo -n "check replication log for Update completed. Count:" | |
docker exec -i nominatim grep -c 'Update completed.' /var/log/replication.log | |
- name: Import full style | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-e IMPORT_STYLE=full \ | |
-p 8005:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8005/search.php?q=hotel%20de%20paris" | |
- name: Import admin style | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-e IMPORT_STYLE=admin \ | |
-p 8006:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-empty-json "http://localhost:8006/search.php?q=hotel%20de%20paris" | |
- name: Import with PBF_PATH | |
commands: |- | |
wget --cut-dirs=1 -nH -xP /tmp/data http://download.geofabrik.de/europe/monaco-latest.osm.pbf | |
docker run -i --rm \ | |
-e PBF_PATH=/nominatim/data/monaco-latest.osm.pbf \ | |
-e REPLICATION_URL=http://download.geofabrik.de/europe/monaco-updates/ \ | |
-v nominatim7-data:/var/lib/postgresql/14/main \ | |
-v /tmp/data:/nominatim/data \ | |
-p 8007:8080 \ | |
--name nominatim \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8007/search.php?q=avenue%20pasteur" | |
- name: REPLICATION_URL is blank | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-p 8008:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8008/search.php?q=avenue%20pasteur" | |
- name: FREEZE | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-e FREEZE="true" \ | |
-p 8009:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-non-empty-json "http://localhost:8009/search.php?q=avenue%20pasteur" | |
- name: GB postcode import | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=https://download.geofabrik.de/europe/great-britain/england/rutland-latest.osm.pbf \ | |
-e IMPORT_GB_POSTCODES="true" \ | |
-p 8010:8080 \ | |
nominatim & | |
sleep 600 | |
./assert-non-empty-json "http://localhost:8010/search.php?postalcode=LE15+8TX" | |
./assert-non-empty-json "http://localhost:8010/search.php?postalcode=PE9+3SY" | |
./assert-non-empty-json "http://localhost:8010/search.php?postalcode=PE9+4ES" | |
- name: REVERSE_ONLY | |
commands: |- | |
docker run -i --rm \ | |
-e PBF_URL=http://download.geofabrik.de/europe/monaco-latest.osm.pbf \ | |
-e REVERSE_ONLY="true" \ | |
-p 8011:8080 \ | |
nominatim & | |
sleep 120 | |
./assert-reverse-only "http://localhost:8011/search.php?q=avenue%20pasteur" | |
./assert-non-empty-json "http://localhost:8011/reverse.php?lat=43.734&lon=7.42&format=jsonv2" | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: nominatim-${{ matrix.nominatim.version }} | |
path: /tmp | |
- name: Load image | |
run: | | |
docker load --input /tmp/nominatim.tar | |
docker image ls -a | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# Excute the test scenario | |
- name: ${{ matrix.test_scenario.name }} | |
working-directory: .github/workflows | |
run: ${{ matrix.test_scenario.commands }} | |
publish: | |
name: Publish docker image | |
needs: test | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
nominatim: | |
- version: "4.3" | |
- version: "4.4" | |
steps: | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to DockerHub | |
if: ${{ github.ref == 'refs/heads/master' && github.repository_owner == 'mediagis' }} | |
uses: docker/login-action@v2.1.0 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set container date tag | |
run: | | |
echo "DATE_TAG=$(date +%Y-%m-%dT%H-%M)" >> $GITHUB_ENV | |
- name: Build and push production docker image to Dockerhub | |
if: ${{ github.ref == 'refs/heads/master' && github.repository_owner == 'mediagis' }} | |
run: |- | |
docker buildx build --platform linux/amd64,linux/arm64 --push \ | |
-t mediagis/nominatim:${{ matrix.nominatim.version }} \ | |
-t mediagis/nominatim:${{ matrix.nominatim.version }}-${DATE_TAG} . | |
working-directory: ${{ matrix.nominatim.version }} |