Run everything #20
This file contains hidden or 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: 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] | ||
| 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 | ||