Skip to content

triggers

triggers #7

Workflow file for this run

name: GeoNode Test Suites
on: [push, workflow_dispatch]
jobs:
# -------------------------
# BUILD IMMAGINI
# -------------------------
build_images:
name: Build and cache Docker images
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Cache condivisa tra job dello stesso run
- name: Restore Docker build cache
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- name: Build the stack (Docker Compose v2)
run: |
docker compose --env-file .env_test -f docker-compose-test.yml build --progress plain
env:
DOCKER_BUILDKIT: 1
# -------------------------
# TEMPLATE PER TUTTI I TEST JOB
# -------------------------
geonode_test_suite_smoke:
name: Smoke Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- name: Start stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- name: Wait for services
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 (out of $m)"
if [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]; then break; fi
docker ps
n=$((n+1))
done
[[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]
- name: Run smoke tests
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_geonode
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 django bash -c \
"./tests/test.sh geonode.tests.smoke geonode.tests.test_rest_api geonode.tests.test_search geonode.tests.test_utils geonode.tests.test_headers"
- name: Upload coverage to Codecov
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"bash <(curl -s https://codecov.io/bash) -t 2c0e7780-1640-45f0-93a3-e103b057d8c8 -F smoke_tests"
- name: Show logs (on fail)
if: failure()
run: |
docker ps
docker logs django4geonode --tail 1000 || true
docker logs geoserver4geonode --tail 1000 || true
docker logs celery4geonode --tail 1000 || true
- name: Stop stack
if: always()
run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
# -------------------------
# MAIN TEST SUITE
# -------------------------
geonode_test_suite:
name: Main Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- name: Start stack
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- name: Wait for services
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 (out of $m)"
if [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]; then break; fi
docker ps
n=$((n+1))
done
[[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]
- name: Run main test suite
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./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"
- name: Upload coverage
run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"bash <(curl -s https://codecov.io/bash) -t 2c0e7780-1640-45f0-93a3-e103b057d8c8 -F main_tests"
- name: Stop stack
if: always()
run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
# -------------------------
# SECURITY TESTS
# -------------------------
geonode_test_security:
name: Security Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- run: |
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./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()
# -------------------------
# GIS BACKEND TESTS
# -------------------------
geonode_test_gis_backend:
name: GIS Backend Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- run: docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./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()
# -------------------------
# REST API TESTS
# -------------------------
geonode_test_rest_apis:
name: REST API Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- run: docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./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()
# -------------------------
# CSW TESTS
# -------------------------
geonode_test_csw:
name: CSW Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- run: docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./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()
# -------------------------
# UPLOAD TESTS
# -------------------------
geonode_upload:
name: Upload Tests
needs: build_images
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: geonode-cache-${{ github.run_id }}
- run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
- run: docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c \
"./tests/test.sh geonode.upload"
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
if: always()