@@ -28,12 +28,14 @@ jobs:
28
28
- uses : actions/checkout@v4
29
29
- name : Get changed files
30
30
id : changed_files
31
- uses : tj-actions/changed-files@v41
31
+ uses : tj-actions/changed-files@v46
32
32
with :
33
33
files : |
34
34
*.py
35
35
mathesar/**
36
36
db/**
37
+ - name : echo
38
+ run : echo "${{ steps.changed_files.outputs.any_changed }}"
37
39
38
40
python_lint_required :
39
41
name : Check for file changes requiring python linter
44
46
- uses : actions/checkout@v4
45
47
- name : Get changed files
46
48
id : changed_files
47
- uses : tj-actions/changed-files@v41
49
+ uses : tj-actions/changed-files@v46
48
50
with :
49
51
files : ' **.py'
52
+ - name : echo
53
+ run : echo "${{ steps.changed_files.outputs.any_changed }}"
50
54
51
55
sql_tests_required :
52
56
name : Check for file changes requiring SQL tests
@@ -55,13 +59,13 @@ jobs:
55
59
tests_should_run : ${{ steps.changed_files.outputs.any_changed }}
56
60
steps :
57
61
- uses : actions/checkout@v4
58
- - name : echo
59
- run : echo "${{needs.all_tests_required.outputs.tests_should_run}}"
60
62
- name : Get changed files
61
63
id : changed_files
62
- uses : tj-actions/changed-files@v41
64
+ uses : tj-actions/changed-files@v46
63
65
with :
64
66
files : ' **.sql'
67
+ - name : echo
68
+ run : echo "${{ steps.changed_files.outputs.any_changed }}"
65
69
66
70
front_end_checks_required :
67
71
name : Check for file changes requiring front end checks
72
76
- uses : actions/checkout@v4
73
77
- name : Get changed files
74
78
id : changed_files
75
- uses : tj-actions/changed-files@v41
79
+ uses : tj-actions/changed-files@v46
76
80
with :
77
81
files : ' mathesar_ui/**'
82
+ - name : echo
83
+ run : echo "${{ steps.changed_files.outputs.any_changed }}"
78
84
79
85
all_be_tests_required :
80
86
name : Check for file changes requiring all backend tests
@@ -85,12 +91,14 @@ jobs:
85
91
- uses : actions/checkout@v4
86
92
- name : Get changed files
87
93
id : changed_files
88
- uses : tj-actions/changed-files@v41
94
+ uses : tj-actions/changed-files@v46
89
95
with :
90
96
files : |
91
97
**.yml
92
98
**.sh
93
99
Dockerfile*
100
+ - name : echo
101
+ run : echo "${{ steps.changed_files.outputs.any_changed }}"
94
102
95
103
# ###############################################################################
96
104
# # BACK END TEST/LINT RUNNERS ##
@@ -110,7 +118,7 @@ jobs:
110
118
runs-on : ubuntu-latest
111
119
needs : [python_tests_required, all_be_tests_required]
112
120
if : needs.python_tests_required.outputs.tests_should_run == 'true' ||
113
- needs.all_be_tests_required.outputs.tests_should_run
121
+ needs.all_be_tests_required.outputs.tests_should_run == 'true'
114
122
strategy :
115
123
matrix :
116
124
py-version : [3.9-bookworm, 3.10-bookworm, 3.11-bookworm, 3.12-bookworm, 3.13-bookworm]
@@ -136,7 +144,7 @@ jobs:
136
144
runs-on : ubuntu-latest
137
145
needs : [sql_tests_required, all_be_tests_required]
138
146
if : needs.sql_tests_required.outputs.tests_should_run == 'true' ||
139
- needs.all_be_tests_required.outputs.tests_should_run
147
+ needs.all_be_tests_required.outputs.tests_should_run == 'true'
140
148
strategy :
141
149
matrix :
142
150
pg-version : [13, 14, 15, 16, 17]
@@ -160,7 +168,7 @@ jobs:
160
168
runs-on : ubuntu-latest
161
169
needs : [python_tests_required, all_be_tests_required]
162
170
if : needs.python_tests_required.outputs.tests_should_run == 'true' ||
163
- needs.all_be_tests_required.outputs.tests_should_run
171
+ needs.all_be_tests_required.outputs.tests_should_run == 'true'
164
172
strategy :
165
173
matrix :
166
174
py-version : [3.9-bookworm, 3.10-bookworm, 3.11-bookworm, 3.12-bookworm, 3.13-bookworm]
@@ -186,7 +194,7 @@ jobs:
186
194
runs-on : ubuntu-latest
187
195
needs : [python_lint_required, all_be_tests_required]
188
196
if : needs.python_lint_required.outputs.lint_should_run == 'true' ||
189
- needs.all_be_tests_required.outputs.tests_should_run
197
+ needs.all_be_tests_required.outputs.tests_should_run == 'true'
190
198
steps :
191
199
- uses : actions/checkout@v4
192
200
- uses : actions/setup-python@v4
@@ -360,19 +368,124 @@ jobs:
360
368
- run : npm ci --no-audit --prefer-offline
361
369
- run : npm test
362
370
371
+ # ###############################################################################
372
+ # # BUILD TESTER ##
373
+ # # ##
374
+ # # This job tests if we can successfully build mathesar in both development ##
375
+ # # and production modes we don't use these build for any other tests as they ##
376
+ # # involve building the frontend which slows down backend tests significantly ##
377
+ # # and threfore, we test to make sure that we can still build mathesar in ##
378
+ # # these modes separately. ##
379
+ # # ##
380
+ # ###############################################################################
381
+
382
+ build_tests :
383
+ name : Build mathesar
384
+ runs-on : ubuntu-latest
385
+ strategy :
386
+ matrix :
387
+ target : [production, development]
388
+ steps :
389
+ - uses : actions/checkout@v4
390
+ - name : Copy env file
391
+ run : cp .env.example .env
392
+ # The code is checked out under uid 1001 - reset this to 1000 for the
393
+ # container to run tests successfully
394
+ - name : Fix permissions
395
+ run : sudo chown -R 1000:1000 .
396
+ - name : Build the stack
397
+ run : docker compose -f docker-compose.dev.yml up --build -d test-service
398
+ env :
399
+ TARGET : ${{ matrix.target }}
400
+
363
401
# ###############################################################################
364
402
# # REQUIRED TEST/LINT COLLECTORS ##
365
- # # Jobs in this section collect outputs from matrix-strategy testing jobs, ##
366
- # # since these are otherwise impossible to capture for branch protection ##
367
- # # purposes. At the moment, they only need to have each required check as a ##
368
- # # dependency. Required checks should skip themselves if no relevant files ##
369
- # # have changed. ##
403
+ # # Jobs in this section collect outputs from testing jobs, since these are ##
404
+ # # otherwise impossible to capture for branch protection purposes. ##
405
+ # # At the moment, they only need to have each required check as a dependency. ##
406
+ # # Required checks should skip themselves if no relevant files have changed. ##
370
407
# # ##
371
408
# ###############################################################################
372
409
373
- matrix_tests :
410
+ checkpoint :
411
+ if : ${{ always() }}
374
412
runs-on : ubuntu-latest
375
- needs : [python_tests, sql_tests]
413
+ needs :
414
+ # Checkers
415
+ - python_tests_required
416
+ - python_lint_required
417
+ - sql_tests_required
418
+ - front_end_checks_required
419
+ - all_be_tests_required
420
+ # Backend tests
421
+ - python_tests
422
+ - sql_tests
423
+ - api_tests
424
+ - python_lint
425
+ # Frontend tests
426
+ - front_end_format
427
+ - front_end_lint
428
+ - front_end_typecheck
429
+ - front_end_audit
430
+ - front_end_tests
431
+ # Build test
432
+ - build_tests
376
433
steps :
434
+ - name : Check Dependency Results
435
+ run : |
436
+ # Check "all_be_tests_required" conditions
437
+ if [[ "${{ needs.all_be_tests_required.outputs.tests_should_run }}" == "true" ]]; then
438
+ if [[ "${{ needs.python_tests.result }}" != "success"
439
+ || "${{ needs.sql_tests.result }}" != "success"
440
+ || "${{ needs.api_tests.result }}" != "success"
441
+ || "${{ needs.python_lint.result }}" != "success"
442
+ ]]; then
443
+ echo "One or more backend tests failed."
444
+ exit 1
445
+ fi
446
+ # Check "python_tests_required" conditions
447
+ elif [[ "${{ needs.python_tests_required.outputs.tests_should_run }}" == "true" ]]; then
448
+ if [[ "${{ needs.python_tests.result }}" != "success"
449
+ || "${{ needs.api_tests.result }}" != "success"
450
+ ]]; then
451
+ echo "One or more python tests failed."
452
+ exit 1
453
+ fi
454
+ fi
455
+
456
+ # Check "python_lint_required" conditions
457
+ if [[ "${{ needs.python_lint_required.outputs.lint_should_run }}" == "true" ]]; then
458
+ if [[ "${{ needs.python_lint.result }}" != "success" ]]; then
459
+ echo "python linter failed."
460
+ exit 1
461
+ fi
462
+ fi
463
+
464
+ # Check "sql_tests_required" conditions
465
+ if [[ "${{ needs.sql_tests_required.outputs.tests_should_run }}" == "true" ]]; then
466
+ if [[ "${{ needs.sql_tests.result }}" != "success" ]]; then
467
+ echo "SQL tests failed."
468
+ exit 1
469
+ fi
470
+ fi
471
+
472
+ # Check "front_end_checks_required" conditions
473
+ if [[ "${{ needs.front_end_checks_required.outputs.checks_should_run }}" == "true" ]]; then
474
+ if [[ "${{ needs.front_end_format.result }}" != "success"
475
+ || "${{ needs.front_end_lint.result }}" != "success"
476
+ || "${{ needs.front_end_typecheck.result }}" != "success"
477
+ || "${{ needs.front_end_audit.result }}" != "success"
478
+ || "${{ needs.front_end_tests.result }}" != "success"
479
+ ]]; then
480
+ echo "One or more frontend tests failed."
481
+ exit 1
482
+ fi
483
+ fi
484
+
485
+ # Check if build succeeds
486
+ if [[ "${{ needs.build_tests.result }}" != "success" ]]; then
487
+ echo "Build failed."
488
+ exit 1
489
+ fi
377
490
- name : Report success
378
491
run : echo "All tests succeeded or skipped!"
0 commit comments