Skip to content

Commit eb00518

Browse files
committed
single job
1 parent 7121a30 commit eb00518

File tree

2 files changed

+372
-268
lines changed

2 files changed

+372
-268
lines changed
Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
1+
name: GeoNode Test Suites
2+
3+
on: [push, workflow_dispatch]
4+
5+
jobs:
6+
# -------------------------------------------------
7+
# BUILD DOCKER IMAGES AND SHARE AS ARTIFACTS
8+
# -------------------------------------------------
9+
build_images:
10+
name: Build and export Docker images
11+
runs-on: ubuntu-24.04
12+
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
17+
- name: Build all services (Docker Compose v2)
18+
run: |
19+
docker compose --env-file .env_test -f docker-compose-test.yml build --progress plain
20+
21+
- name: Save built Docker images
22+
run: |
23+
mkdir -p docker_images
24+
docker save -o docker_images/django.tar geonode/geonode:latest-ubuntu-24.04
25+
26+
- name: Upload Docker images as artifact
27+
uses: actions/upload-artifact@v4
28+
with:
29+
name: docker-images
30+
path: docker_images
31+
retention-days: 1 # automatically expires after 1 day
32+
33+
34+
# -------------------------------------------------
35+
# SMOKE TESTS (BLOCKING)
36+
# -------------------------------------------------
37+
geonode_test_suite_smoke:
38+
name: Smoke Tests
39+
needs: build_images
40+
runs-on: ubuntu-24.04
41+
42+
steps:
43+
- name: Checkout repository
44+
uses: actions/checkout@v4
45+
46+
- name: Download built Docker images
47+
uses: actions/download-artifact@v4
48+
with:
49+
name: docker-images
50+
path: docker_images
51+
52+
- name: Load Docker images
53+
run: |
54+
docker load -i docker_images/django.tar
55+
56+
- name: Start the stack
57+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
58+
working-directory: ${{ github.workspace }}
59+
60+
# - name: Wait for services to become healthy
61+
# run: |
62+
# n=1
63+
# m=10
64+
# until [ $n -gt $m ]
65+
# do
66+
# sleep 60
67+
# DJANGO_STATUS=$(docker inspect --format='{{.State.Health.Status}}' django4geonode)
68+
# GEOSERVER_STATUS=$(docker inspect --format='{{.State.Health.Status}}' geoserver4geonode)
69+
# echo "⏳ Waited $n min (of $m)"
70+
# if [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]; then
71+
# break
72+
# fi
73+
# docker ps
74+
# n=$((n+1))
75+
# done
76+
# [[ $DJANGO_STATUS == healthy && $GEOSERVER_STATUS == healthy ]]
77+
# working-directory: ${{ github.workspace }}
78+
79+
- name: Setup test databases
80+
run: |
81+
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();'
82+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
83+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
84+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
85+
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;'
86+
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;'
87+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
88+
89+
- name: Run smoke tests
90+
run: |
91+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
92+
"./tests/test.sh geonode.tests.smoke geonode.tests.test_rest_api geonode.tests.test_search geonode.tests.test_utils geonode.tests.test_headers"
93+
working-directory: ${{ github.workspace }}
94+
95+
- name: Stop stack (always)
96+
if: always()
97+
run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
98+
working-directory: ${{ github.workspace }}
99+
100+
101+
# -------------------------------------------------
102+
# OTHER TEST SUITES (DEPEND ON SMOKE)
103+
# -------------------------------------------------
104+
geonode_test_suite:
105+
name: Main Tests
106+
needs: [build_images, geonode_test_suite_smoke]
107+
runs-on: ubuntu-24.04
108+
109+
steps:
110+
- name: Checkout repository
111+
uses: actions/checkout@v4
112+
113+
- name: Download built Docker images
114+
uses: actions/download-artifact@v4
115+
with:
116+
name: docker-images
117+
path: docker_images
118+
119+
- name: Load Docker images
120+
run: |
121+
docker load -i docker_images/django.tar
122+
123+
- name: Start the stack
124+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
125+
working-directory: ${{ github.workspace }}
126+
127+
- name: Setup test databases
128+
run: |
129+
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();'
130+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
131+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
132+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
133+
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;'
134+
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;'
135+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
136+
- run: |
137+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
138+
"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"
139+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
140+
if: always()
141+
142+
143+
geonode_test_security:
144+
name: Security Tests
145+
needs: [build_images, geonode_test_suite_smoke]
146+
runs-on: ubuntu-24.04
147+
steps:
148+
- name: Checkout repository
149+
uses: actions/checkout@v4
150+
151+
- name: Download built Docker images
152+
uses: actions/download-artifact@v4
153+
with:
154+
name: docker-images
155+
path: docker_images
156+
157+
- name: Load Docker images
158+
run: |
159+
docker load -i docker_images/django.tar
160+
161+
- name: Start the stack
162+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
163+
working-directory: ${{ github.workspace }}
164+
165+
- name: Setup test databases
166+
run: |
167+
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();'
168+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
169+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
170+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
171+
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;'
172+
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;'
173+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
174+
- run: |
175+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
176+
"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]))\")"
177+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
178+
if: always()
179+
180+
181+
geonode_test_gis_backend:
182+
name: GIS Backend Tests
183+
needs: [build_images, geonode_test_suite_smoke]
184+
runs-on: ubuntu-24.04
185+
steps:
186+
- name: Checkout repository
187+
uses: actions/checkout@v4
188+
189+
- name: Download built Docker images
190+
uses: actions/download-artifact@v4
191+
with:
192+
name: docker-images
193+
path: docker_images
194+
195+
- name: Load Docker images
196+
run: |
197+
docker load -i docker_images/django.tar
198+
199+
- name: Start the stack
200+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
201+
working-directory: ${{ github.workspace }}
202+
203+
- name: Setup test databases
204+
run: |
205+
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();'
206+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
207+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
208+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
209+
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;'
210+
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;'
211+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
212+
- run: |
213+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
214+
"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]))\")"
215+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
216+
if: always()
217+
218+
219+
geonode_test_rest_apis:
220+
name: REST API Tests
221+
needs: [build_images, geonode_test_suite_smoke]
222+
runs-on: ubuntu-24.04
223+
steps:
224+
- name: Checkout repository
225+
uses: actions/checkout@v4
226+
227+
- name: Download built Docker images
228+
uses: actions/download-artifact@v4
229+
with:
230+
name: docker-images
231+
path: docker_images
232+
233+
- name: Load Docker images
234+
run: |
235+
docker load -i docker_images/django.tar
236+
237+
- name: Start the stack
238+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
239+
working-directory: ${{ github.workspace }}
240+
241+
- name: Setup test databases
242+
run: |
243+
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();'
244+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
245+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
246+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
247+
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;'
248+
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;'
249+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
250+
- run: |
251+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
252+
"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"
253+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
254+
if: always()
255+
256+
257+
geonode_test_csw:
258+
name: CSW Tests
259+
needs: [build_images, geonode_test_suite_smoke]
260+
runs-on: ubuntu-24.04
261+
steps:
262+
- name: Checkout repository
263+
uses: actions/checkout@v4
264+
265+
- name: Download built Docker images
266+
uses: actions/download-artifact@v4
267+
with:
268+
name: docker-images
269+
path: docker_images
270+
271+
- name: Load Docker images
272+
run: |
273+
docker load -i docker_images/django.tar
274+
275+
- name: Start the stack
276+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
277+
working-directory: ${{ github.workspace }}
278+
279+
- name: Setup test databases
280+
run: |
281+
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();'
282+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
283+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
284+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
285+
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;'
286+
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;'
287+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
288+
- run: |
289+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
290+
"cd /usr/src/geonode && bash tests/test.sh geonode.tests.csw geonode.catalogue.backends.tests"
291+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
292+
if: always()
293+
294+
295+
geonode_upload:
296+
name: Upload Tests
297+
needs: [build_images, geonode_test_suite_smoke]
298+
runs-on: ubuntu-24.04
299+
steps:
300+
- name: Checkout repository
301+
uses: actions/checkout@v4
302+
303+
- name: Download built Docker images
304+
uses: actions/download-artifact@v4
305+
with:
306+
name: docker-images
307+
path: docker_images
308+
309+
- name: Load Docker images
310+
run: |
311+
docker load -i docker_images/django.tar
312+
313+
- name: Start the stack
314+
run: docker compose --env-file .env_test -f docker-compose-test.yml up -d
315+
working-directory: ${{ github.workspace }}
316+
317+
- name: Setup test databases
318+
run: |
319+
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();'
320+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_postgres
321+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode
322+
docker compose --env-file .env_test -f docker-compose-test.yml exec db createdb -U postgres -T postgres test_geonode_data
323+
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;'
324+
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;'
325+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -c "${{ inputs.test_suite }}"
326+
- run: |
327+
docker compose --env-file .env_test -f docker-compose-test.yml exec django bash -lc \
328+
"cd /usr/src/geonode && bash tests/test.sh geonode.upload"
329+
- run: docker compose --env-file .env_test -f docker-compose-test.yml down -v
330+
if: always()
331+
332+
333+
# -------------------------------------------------
334+
# CLEANUP JOB: REMOVE ALL ARTIFACTS AT THE END
335+
# -------------------------------------------------
336+
cleanup_artifacts:
337+
name: Cleanup Artifacts
338+
needs:
339+
- geonode_test_suite_smoke
340+
- geonode_test_suite
341+
- geonode_test_security
342+
- geonode_test_gis_backend
343+
- geonode_test_rest_apis
344+
- geonode_test_csw
345+
- geonode_upload
346+
runs-on: ubuntu-24.04
347+
if: always()
348+
steps:
349+
- name: Delete all uploaded artifacts
350+
uses: geekyeggo/delete-artifact@v5
351+
with:
352+
failOnError: false

0 commit comments

Comments
 (0)