4747 - name : Sync dependencies
4848 run : uv sync --dev
4949
50+ - name : Generate .env and secrets
51+ run : ./scripts/manage.sh create-env --non-interactive --force
52+
53+ - name : Preflight stack bring-up
54+ run : |
55+ set -euo pipefail
56+ cleanup() { ./scripts/manage.sh down >/dev/null 2>&1 || true; }
57+ trap cleanup EXIT
58+ ./scripts/manage.sh build-image
59+ ./scripts/manage.sh up
60+
5061 - name : Run core_data smoke workflow
5162 run : uv run python -m pytest -k full_workflow
5263
5667 docker ps -a
5768 docker compose logs || true
5869
70+ - name : Collect diagnostics bundle
71+ if : failure()
72+ run : ./scripts/collect_diagnostics.sh --output diagnostics-smoke-${{ matrix.profile_name }}
73+
74+ - name : Upload diagnostics bundle
75+ if : failure()
76+ uses : actions/upload-artifact@v4
77+ with :
78+ name : diagnostics-smoke-${{ matrix.profile_name }}
79+ path : diagnostics-smoke-${{ matrix.profile_name }}
80+
5981 - name : Upload generated backups
6082 if : always()
6183 uses : actions/upload-artifact@v4
@@ -102,6 +124,17 @@ jobs:
102124 - name : Sync dependencies
103125 run : uv sync --dev
104126
127+ - name : Generate .env and secrets
128+ run : ./scripts/manage.sh create-env --non-interactive --force
129+
130+ - name : Preflight stack bring-up
131+ run : |
132+ set -euo pipefail
133+ cleanup() { ./scripts/manage.sh down >/dev/null 2>&1 || true; }
134+ trap cleanup EXIT
135+ ./scripts/manage.sh build-image
136+ ./scripts/manage.sh up
137+
105138 - name : Run marker tests
106139 run : uv run python -m pytest -m ${{ matrix.marker }}
107140
@@ -111,6 +144,16 @@ jobs:
111144 docker ps -a
112145 docker compose logs || true
113146
147+ - name : Collect diagnostics bundle
148+ if : failure()
149+ run : ./scripts/collect_diagnostics.sh --output diagnostics-marker-${{ matrix.marker }}
150+
151+ - name : Upload diagnostics bundle
152+ if : failure()
153+ uses : actions/upload-artifact@v4
154+ with :
155+ name : diagnostics-marker-${{ matrix.marker }}
156+ path : diagnostics-marker-${{ matrix.marker }}
114157 docker-build :
115158 name : Validate Docker Build
116159 runs-on : ubuntu-latest
@@ -128,10 +171,52 @@ jobs:
128171 file : ./postgres/Dockerfile
129172 platforms : linux/amd64
130173 push : false
174+ load : true
131175 tags : core-data-postgres:test
132176 cache-from : type=gha
133177 cache-to : type=gha,mode=max
134178
179+ - name : Smoke-test Docker image
180+ env :
181+ PGPASSWORD : thinice-test
182+ run : |
183+ set -euo pipefail
184+ cleanup() { docker rm -f postgres-smoke >/dev/null 2>&1 || true; }
185+ trap cleanup EXIT
186+ docker run -d --name postgres-smoke \
187+ -e POSTGRES_USER=thinice-test \
188+ -e POSTGRES_PASSWORD=thinice-test \
189+ -e POSTGRES_DB=thinice-test \
190+ -e CORE_DATA_SKIP_CONFIG_RENDER=1 \
191+ core-data-postgres:test
192+ tries=0
193+ max_tries=150
194+ until docker exec postgres-smoke pg_isready -h localhost -U thinice-test >/dev/null 2>&1; do
195+ tries=$((tries + 1))
196+ if ((tries >= max_tries)); then
197+ echo "[smoke] postgres-smoke never became ready; printing logs."
198+ docker logs postgres-smoke || true
199+ exit 1
200+ fi
201+ sleep 2
202+ done
203+ docker exec postgres-smoke psql -U thinice-test -d thinice-test -c "SELECT 1" >/dev/null
204+
205+ - name : Stop Docker smoke container
206+ if : always()
207+ run : docker rm -f postgres-smoke >/dev/null 2>&1 || true
208+
209+ - name : Collect diagnostics bundle
210+ if : failure()
211+ run : ./scripts/collect_diagnostics.sh --output diagnostics-docker-build
212+
213+ - name : Upload diagnostics bundle
214+ if : failure()
215+ uses : actions/upload-artifact@v4
216+ with :
217+ name : diagnostics-docker-build
218+ path : diagnostics-docker-build
219+
135220 - name : Validate Dockerfile with hadolint
136221137222 with :
0 commit comments