Skip to content

Run everything

Run everything #20

Workflow file for this run

name: GeoNode Test Suites
on: [push, workflow_dispatch]
jobs:
# -------------------------------------------------
# BUILD DOCKER IMAGES AND SHARE AS ARTIFACTS
# -------------------------------------------------
build_images:
name: Build and export Docker images
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Build all services (Docker Compose v2)
run: |
docker compose --env-file .env_test -f docker-compose-test.yml build --progress plain
- name: Save built Docker images
run: |
mkdir -p docker_images
docker save -o docker_images/django.tar geonode/geonode:latest-ubuntu-24.04
- name: Upload Docker images as artifact
uses: actions/upload-artifact@v4
with:
name: docker-images
path: docker_images
retention-days: 1 # automatically expires after 1 day
# -------------------------------------------------
# SMOKE TESTS (BLOCKING)
# -------------------------------------------------
geonode_test_suite_smoke:
name: Smoke Tests
needs: build_images
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
# - name: Wait for services to become healthy
# run: |
# n=1
# m=10
# until [ $n -gt $m ]
# do
# sleep 60
# DJANGO_STATUS=$(docker inspect --format='{{.State.Health.Status}}' django4geonode)
# GEOSERVER_STATUS=$(docker inspect --format='{{.State.Health.Status}}' geoserver4geonode)
# echo "⏳ Waited $n min (of $m)"
# if [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]; then
# break
# fi
# docker ps
# n=$((n+1))
# done
# [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]
# working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- name: Run smoke tests
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"./tests/test.sh geonode.tests.smoke geonode.tests.test_rest_api geonode.tests.test_search geonode.tests.test_utils geonode.tests.test_headers"
working-directory: ${{ github.workspace }}
- name: Stop stack (always)
if: always()
run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
working-directory: ${{ github.workspace }}
# -------------------------------------------------
# OTHER TEST SUITES (DEPEND ON SMOKE)
# -------------------------------------------------
geonode_test_suite:
name: Main Tests
needs: [build_images, geonode_test_suite_smoke]
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh $(python -c \"import sys;from geonode import settings;sys.stdout.write(' '.join([a+'.tests' for a in settings.GEONODE_APPS if 'security' not in a and 'geoserver' not in a and 'upload' not in a]))\") geonode.thumbs.tests geonode.people.tests geonode.people.socialaccount.providers.geonode_openid_connect.tests"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
geonode_test_security:
name: Security Tests
needs: [build_images, geonode_test_suite_smoke]
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh $(python -c \"import sys;from geonode import settings;sys.stdout.write(' '.join([a+'.tests' for a in settings.GEONODE_APPS if 'security' in a]))\")"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
geonode_test_gis_backend:
name: GIS Backend Tests
needs: [build_images, geonode_test_suite_smoke]
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh $(python -c \"import sys;from geonode import settings;sys.stdout.write(' '.join([a+'.tests' for a in settings.GEONODE_APPS if 'geoserver' in a]))\")"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
geonode_test_rest_apis:
name: REST API Tests
needs: [build_images, geonode_test_suite_smoke]
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh geonode.api.tests geonode.base.api.tests geonode.layers.api.tests geonode.maps.api.tests geonode.documents.api.tests geonode.geoapps.api.tests"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
geonode_test_csw:
name: CSW Tests
needs: [build_images, geonode_test_suite_smoke]
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh geonode.tests.csw geonode.catalogue.backends.tests"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
geonode_upload:
name: Upload Tests
needs: [build_images, geonode_test_suite_smoke]

Check failure on line 297 in .github/workflows/geonode-tests.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/geonode-tests.yml

Invalid workflow file

You have an error in your yaml syntax on line 297
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download built Docker images
uses: actions/download-artifact@v4
with:
name: docker-images
path: docker_images
- name: Load Docker images
run: |
docker load -i docker_images/django.tar
- name: Start the stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
working-directory: ${{ github.workspace }}
- name: Setup test databases
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();'
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec db psql -U postgres -d test_geonode_data -c 'CREATE EXTENSION IF NOT EXISTS postgis;'
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
"cd /usr/src/geonode && bash tests/test.sh geonode.upload"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()
# -------------------------------------------------
# CLEANUP JOB: REMOVE ALL ARTIFACTS AT THE END
# -------------------------------------------------
cleanup_artifacts:
name: Cleanup Artifacts
needs:
- geonode_test_suite_smoke
- geonode_test_suite
- geonode_test_security
- geonode_test_gis_backend
- geonode_test_rest_apis
- geonode_test_csw
- geonode_upload
runs-on: ubuntu-24.04
if: always()
steps:
- name: Delete all uploaded artifacts
uses: geekyeggo/delete-artifact@v5
with:
failOnError: false