2626 type : string
2727 required : false
2828 description : dbt's version to test with
29- should-run-tests :
30- type : boolean
31- required : false
32- default : true
33- description : Whether to run E2E tests
34- clear-tests :
35- type : boolean
36- required : false
37- default : true
38- description : Whether to clean test environment
3929 generate-data :
4030 type : boolean
4131 required : false
4737 warehouse-type :
4838 type : string
4939 required : true
50- should-run-tests :
51- type : boolean
52- required : false
53- default : true
5440 elementary-ref :
5541 type : string
5642 required : false
6046 dbt-version :
6147 type : string
6248 required : false
63- clear-tests :
64- type : boolean
65- required : false
66- default : true
6749 generate-data :
6850 type : boolean
6951 required : false
7052 default : false
7153
7254env :
7355 BRANCH_NAME : ${{ github.head_ref || github.ref_name }}
74- DBT_PKG_INTEG_TESTS_DIR : ${{ github.workspace }}/dbt-data-reliability/integration_tests/deprecated_tests
75- ELMENTARY_INTERNAL_DBT_PKG_DIR : ${{ github.workspace }}/elementary/elementary/monitor/dbt_project
56+ ELEMENTARY_DBT_PACKAGE_PATH : ${{ github.workspace }}/dbt-data-reliability
57+ CLI_INTERNAL_DBT_PKG_DIR : ${{ github.workspace }}/elementary/elementary/monitor/dbt_project
58+ E2E_DBT_PROJECT_DIR : ${{ github.workspace }}/elementary/tests/e2e_dbt_project
7659
7760jobs :
7861 # PRs from forks require approval, specifically with the "pull_request_target" event as it contains repo secrets.
@@ -117,12 +100,12 @@ jobs:
117100
118101 - name : Start Postgres
119102 if : inputs.warehouse-type == 'postgres'
120- working-directory : ${{ env.DBT_PKG_INTEG_TESTS_DIR }}
103+ working-directory : ${{ env.E2E_DBT_PROJECT_DIR }}
121104 run : docker compose up -d postgres
122105
123106 # - name: Start Clickhouse
124107 # if: inputs.warehouse-type == 'clickhouse'
125- # working-directory: ${{ env.DBT_PKG_INTEG_TESTS_DIR }}
108+ # working-directory: ${{ env.E2E_DBT_PROJECT_DIR }}
126109 # run: docker compose up -d clickhouse
127110
128111 - name : Setup Python
@@ -138,8 +121,7 @@ jobs:
138121 run : >
139122 pip install
140123 "dbt-core${{ inputs.dbt-version && format('=={0}', inputs.dbt-version) }}"
141- # TODO: remove the <1.10.2 once we have a fix for https://github.com/elementary-data/elementary/issues/1931
142- "dbt-${{ (inputs.warehouse-type == 'databricks_catalog' && 'databricks<1.10.2,') || inputs.warehouse-type }}${{ inputs.dbt-version && format('~={0}', inputs.dbt-version) }}"
124+ "dbt-${{ (inputs.warehouse-type == 'databricks_catalog' && 'databricks') || inputs.warehouse-type }}${{ inputs.dbt-version && format('~={0}', inputs.dbt-version) }}"
143125
144126 - name : Install Elementary
145127 run : |
@@ -170,12 +152,46 @@ jobs:
170152 rm -rf "$DBT_PKGS_PATH/elementary"
171153 ln -vs "$GITHUB_WORKSPACE/dbt-data-reliability" "$DBT_PKGS_PATH/elementary"
172154
173- - name : Run dbt package integration tests
174- if : github.event_name != 'workflow_dispatch' || inputs.should-run-tests
175- working-directory : ${{ env.DBT_PKG_INTEG_TESTS_DIR }}
155+ - name : Run deps for E2E dbt project
156+ working-directory : ${{ env.E2E_DBT_PROJECT_DIR }}
157+ env :
158+ ELEMENTARY_DBT_PACKAGE_PATH : ${{ env.ELEMENTARY_DBT_PACKAGE_PATH }}
176159 run : |
177160 dbt deps
178- python run_e2e_tests.py -t "${{ inputs.warehouse-type }}" -g "${{ inputs.warehouse-type == 'postgres' || inputs.generate-data }}" --clear-tests "${{ inputs.clear-tests }}"
161+
162+ - name : Seed e2e dbt project
163+ working-directory : ${{ env.E2E_DBT_PROJECT_DIR }}
164+ if : inputs.warehouse-type == 'postgres' || inputs.generate-data
165+ run : |
166+ python generate_data.py
167+ dbt seed -f --target "${{ inputs.warehouse-type }}"
168+
169+ - name : Run e2e dbt project
170+ working-directory : ${{ env.E2E_DBT_PROJECT_DIR }}
171+ run : |
172+ dbt run --target "${{ inputs.warehouse-type }}" || true
173+
174+ # Validate run_results.json: only error_model should be non-success
175+ jq -e '
176+ [.results[] | select(.status != "success") | .unique_id]
177+ | length == 1 and .[0] == "model.elementary_integration_tests.error_model"
178+ ' target/run_results.json > /dev/null
179+ jq_exit=$?
180+
181+ if [ $jq_exit -eq 0 ]; then
182+ echo "✅ Validation passed: only error_model failed."
183+ else
184+ echo "❌ Validation failed. Unexpected failures:"
185+ jq '[.results[] | select(.status != "success") | .unique_id] | join(", ")' target/run_results.json
186+ fi
187+
188+ exit $jq_exit
189+
190+ - name : Test e2e dbt project
191+ working-directory : ${{ env.E2E_DBT_PROJECT_DIR }}
192+ continue-on-error : true
193+ run : |
194+ dbt test --target "${{ inputs.warehouse-type }}"
179195
180196 - name : Run help
181197 run : edr --help
@@ -187,12 +203,12 @@ jobs:
187203 edr monitor
188204 -t "${{ inputs.warehouse-type }}"
189205 --group-by table
190- --project-dir "${{ env.DBT_PKG_INTEG_TESTS_DIR }}"
206+ --project-dir "${{ env.E2E_DBT_PROJECT_DIR }}"
191207 --project-profile-target "${{ inputs.warehouse-type }}"
192208 --slack-webhook "$SLACK_WEBHOOK"
193209
194210 - name : Validate alerts statuses were updated
195- working-directory : ${{ env.ELMENTARY_INTERNAL_DBT_PKG_DIR }}
211+ working-directory : ${{ env.CLI_INTERNAL_DBT_PKG_DIR }}
196212 run : |
197213 dbt deps
198214 dbt run-operation validate_alert_statuses_are_updated -t "${{ inputs.warehouse-type }}"
@@ -201,7 +217,7 @@ jobs:
201217 run : >
202218 edr monitor report
203219 -t "${{ inputs.warehouse-type }}"
204- --project-dir "${{ env.DBT_PKG_INTEG_TESTS_DIR }}"
220+ --project-dir "${{ env.E2E_DBT_PROJECT_DIR }}"
205221 --project-profile-target "${{ inputs.warehouse-type }}"
206222
207223 - name : Set report artifact name
@@ -230,7 +246,7 @@ jobs:
230246 run : >
231247 edr monitor send-report
232248 -t "${{ inputs.warehouse-type }}"
233- --project-dir "${{ env.DBT_PKG_INTEG_TESTS_DIR }}"
249+ --project-dir "${{ env.E2E_DBT_PROJECT_DIR }}"
234250 --project-profile-target "${{ inputs.warehouse-type }}"
235251 --slack-file-name "report_${{ inputs.warehouse-type }}_${{ env.BRANCH_NAME }}.html"
236252 --slack-token "$SLACK_TOKEN"
@@ -259,5 +275,4 @@ jobs:
259275 path : elementary/edr_target/edr.log
260276
261277 - name : Run Python package e2e tests
262- if : github.event_name != 'workflow_dispatch' || inputs.should-run-tests
263278 run : pytest -vv tests/e2e --warehouse-type ${{ inputs.warehouse-type }}
0 commit comments