Skip to content

translation: New Crowdin updates (#937) #1116

translation: New Crowdin updates (#937)

translation: New Crowdin updates (#937) #1116

name: Integration tests on Robot Framework
on:
pull_request:
branches-ignore:
- main
- master
- l10n_main
- l10n_master
- l10n_new-theme
push:
branches-ignore:
- main
- master
- l10n_main
- l10n_master
- l10n_new-theme
workflow_call:
env:
PGUSER: geokrety
PGPASSWORD: geokrety
PGDATABASE: geokrety
PGHOST: localhost
PGPORT: 5433
DOCKER_COMPOSE: docker compose -p gk -f docker-compose.local.yml --progress quiet
APT_INSTALL: sudo apt-get -qq install -qq -o=Dpkg::Use-Pty=0 -y
jobs:
# debug:
# runs-on: ubuntu-latest
# steps:
# - name: Debug
# uses: raven-actions/debug@v1
robot-framework:
if: "${{ (github.event_name == 'push' || github.event.pull_request.merged == true) && !contains(github.event.head_commit.message, 'skip tests-qa') }}"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set output
id: vars
run: |
echo "short_ref=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
git status
- name: Configure Sentry
run: |
echo "SENTRY_DSN=${{ secrets.SENTRY_DSN }}" > .env
echo "SENTRY_ENV=dev.githubaction" >> .env
- name: Install tools
run: |
sudo apt-get update
${APT_INSTALL} postgresql-client postgis httping
- name: Cache PUBLIC data
uses: actions/cache@v4
with:
path: ./website/db/dumps/11_public-data.sql
key: public-data-cache
restore-keys: |
public-data-cache
- name: Cache SRTM data
uses: actions/cache@v4
with:
path: ./website/db/srtm/*.zip
key: srtm-cache
restore-keys: |
srtm-cache
- name: Pull/Start postgres
id: db-start
run: |
./website/db/get_huge_dump_files.sh
# Create srtm dir now, so it gets right permissions
mkdir ./website/db/srtm || ls -la ./website/db/srtm
echo "Getting postgres docker image…"
${DOCKER_COMPOSE} pull -q postgres
echo "Starting postgres…"
${DOCKER_COMPOSE} up -d --no-build postgres
echo "Wait postgres to become available…"
timeout 60s bash -c "while ! pg_isready; do sleep 1; done" || { docker ps -a; ${DOCKER_COMPOSE} logs postgres; false; }
- name: Get postgres logs on failure
if: "${{ failure() && steps.db-start.outcome == 'failure' }}"
run: ${DOCKER_COMPOSE} logs postgres
- name: Prevent DNS issue with new GH Runner on Ubuntu 22.04
run: |
for i in $(seq 60); do
httping -sGc1 -o 200,302 https://srtm.geokrety.org/Eurasia/N52E021.hgt.zip && { echo OK; break; } || { sleep 1; }
done || exit 1
- name: Import SRTM data
run: |
./website/db/tests-srtm-import.sh
- name: Test SRTM data
run: |
psql -c "SELECT count(*) FROM public.srtm"
psql -c "SELECT iso_a2 FROM public.countries WHERE public.ST_Intersects(geom::public.geometry, '0101000020E6100000F6285C8FC2F51C405C8FC2F528DC4540'::public.geometry);"
psql -c "SELECT public.ST_Value(rast, '0101000020E6100000F6285C8FC2F51C405C8FC2F528DC4540'::public.geometry) As elevation FROM public.srtm WHERE public.ST_Intersects(rast, '0101000020E6100000F6285C8FC2F51C405C8FC2F528DC4540'::public.geometry) LIMIT 2;"
- name: Check for existing website-base image for current branch
if: "${{ !startsWith(github.ref, 'refs/tags/v') }}"
id: existing-image
run: |
if docker pull geokrety/website-base:${{ github.ref_name }}; then
echo "exists=true" >> $GITHUB_OUTPUT
else
echo "exists=false" >> $GITHUB_OUTPUT
fi
- name: Override base image tag from branch name
if: "${{ !startsWith(github.ref, 'refs/tags/v') && steps.existing-image.outputs.exists == 'true' }}"
run: |
sed -i "s/^ARG BASE_TAG=.*$/ARG BASE_TAG=${{ github.ref_name }}/" Dockerfile
- name: Build images website
run: |
${DOCKER_COMPOSE} build website --build-arg GIT_COMMIT=${{ steps.vars.outputs.short_ref }}
- name: Start the whole stack
run: |
${DOCKER_COMPOSE} --env-file .env up -d --no-build
- name: Check the stack has started
id: start-stack
run: |
${DOCKER_COMPOSE} ps -a
sleep 5
${DOCKER_COMPOSE} logs website; ${DOCKER_COMPOSE} logs nginx;
for i in $(seq 60); do
httping -sGc1 -o 200,302 http://localhost:3001/health && { echo OK; break; } || { ${DOCKER_COMPOSE} ps; sleep 1; }
done || exit 1
${DOCKER_COMPOSE} exec -T website make test-health
- name: Get nginx logs on failure
if: "${{ failure() && steps.start-stack.outcome == 'failure' }}"
run: ${DOCKER_COMPOSE} logs nginx
- name: Get php logs on failure
if: "${{ failure() && steps.start-stack.outcome == 'failure' }}"
run: ${DOCKER_COMPOSE} logs website
- name: Run database tests
id: db-unit-tests
run: |
# Tests need the website to be up, as it needs db migrations
env | grep PG
${APT_INSTALL} libtap-parser-sourcehandler-pgtap-perl
PGOPTIONS=--search_path=public,pgtap,geokrety pg_prove -ot website/db/tests/test*.sql
- name: Get postgres logs on failure
if: "${{ failure() && steps.db-unit-tests.outcome == 'failure' }}"
run: ${DOCKER_COMPOSE} logs postgres
- name: Install Firefox
run: |
if command -v firefox; then
echo "Already available. Skip install…"
exit 0
fi
sudo tee -a "/etc/apt/preferences.d/mozilla-firefox" > /dev/null << EOF
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
EOF
sudo add-apt-repository -y ppa:mozillateam/ppa
sudo apt update
- name: Ensure available fonts on system for Robot Framework/Firefox
run: |
${APT_INSTALL} firefox ttf-bitstream-vera fonts-urw-base35
- name: Install geckodriver
run: |
(cd tests-qa && make download_geckodriver)
- name: Install Robot Framework
run: |
pip3 install -r tests-qa/requirements.txt
- name: Run Robot Framework tests
env:
GEOKRETY_URL: http://localhost:3001/
GIT_BRANCH: ${{ steps.vars.outputs.short_ref }}
run: |
make test-qa-headless
# - name: Get geckodriver.log
# if: failure()
# run: |
# cat tests-qa/geckodriver.log
#
# - name: Get geckodriver.log
# if: failure()
# run: |
# cat tests-qa/docs/debugfile.log
#
# - name: Get pictures-downloader logs
# if: failure()
# run: |
# ${DOCKER_COMPOSE} logs pictures-downloader
# echo "---------- /tmp/headers ------------"
# cat /tmp/headers || true
# echo "---------- /tmp/body ------------"
# cat /tmp/body || true
#
# - name: Get pictures-uploader logs
# if: failure()
# run: ${DOCKER_COMPOSE} logs pictures-uploader
#
# - name: Get svg-to-png logs
# if: failure()
# run: ${DOCKER_COMPOSE} logs svg-to-png
#
# - name: Get minio logs
# if: failure()
# run: ${DOCKER_COMPOSE} logs minio
- name: Deploy
env:
super_secret: ${{ secrets.QA_TEST_DEPLOY_KEY }}
if: "${{ always() && env.QA_TEST_DEPLOY_KEY != '' }}"
continue-on-error: true
uses: peaceiris/actions-gh-pages@v3
with:
# force_orphan: true ## see https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-keeping-existing-files-keep_files
keep_files: true
deploy_key: ${{ secrets.QA_TEST_DEPLOY_KEY }}
external_repository: geokrety/geokrety-website-qa
publish_branch: gh-pages
publish_dir: ./tests-qa/docs/${{ steps.vars.outputs.short_ref }}
destination_dir: ${{ steps.vars.outputs.short_ref }}
user_name: geokrety-bot
user_email: geokrety-bot@geokrety.org
commit_message: "docs: Update QA tests results"
- name: Show report URL
env:
super_secret: ${{ secrets.QA_TEST_DEPLOY_KEY }}
if: "${{ always() && env.QA_TEST_DEPLOY_KEY != '' }}"
continue-on-error: true
run: |
echo https://geokrety.github.io/geokrety-website-qa/${{ steps.vars.outputs.short_ref }}/report.html
echo https://geokrety.github.io/geokrety-website-qa/${{ steps.vars.outputs.short_ref }}/visualReport.html
echo '### Robot Framework reports' >> $GITHUB_STEP_SUMMARY
echo '* [report](https://geokrety.github.io/geokrety-website-qa/${{ steps.vars.outputs.short_ref }}/report.html)' >> $GITHUB_STEP_SUMMARY
echo '* [visualReport](https://geokrety.github.io/geokrety-website-qa/${{ steps.vars.outputs.short_ref }}/visualReport.html)' >> $GITHUB_STEP_SUMMARY
- name: Stop the docker stack
if: always()
continue-on-error: true
run: |
${DOCKER_COMPOSE} down