diff --git a/.github/workflows/analyst-ci.yml b/.github/workflows/analyst-ci.yml index 540c5cf..ffe5c1a 100644 --- a/.github/workflows/analyst-ci.yml +++ b/.github/workflows/analyst-ci.yml @@ -36,7 +36,8 @@ jobs: run: cp .env.example .env - name: Start the lakehouse (MinIO + REST catalog + Trino) - run: docker compose up -d --build minio minio-init iceberg-rest trino + run: | + for i in 1 2 3; do if docker compose up -d --build minio minio-init iceberg-rest trino; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Iceberg REST catalog run: | @@ -77,7 +78,8 @@ jobs: run: cp .env.example .env - name: Start lakehouse + Superset (and Spark to seed) - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build superset spark + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build superset spark; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Iceberg REST catalog run: | diff --git a/.github/workflows/atlas-ci.yml b/.github/workflows/atlas-ci.yml index 1133054..e0d3e2e 100644 --- a/.github/workflows/atlas-ci.yml +++ b/.github/workflows/atlas-ci.yml @@ -39,7 +39,8 @@ jobs: # Atlas (embedded HBase + Solr) is memory-hungry — boot it alone. - name: Start Atlas - run: docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d atlas + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d atlas; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for Atlas REST (up to ~15 min) run: | @@ -61,7 +62,8 @@ jobs: # block the PR. It's validated locally (OpenLineage capture + the bridge). - name: Start Spark (+ iceberg-rest + minio) continue-on-error: true - run: docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d spark + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d spark; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Automatic lineage — capture from Spark (OpenLineage) into Atlas continue-on-error: true diff --git a/.github/workflows/console-control-ci.yml b/.github/workflows/console-control-ci.yml index 43aeae8..9397cfb 100644 --- a/.github/workflows/console-control-ci.yml +++ b/.github/workflows/console-control-ci.yml @@ -37,7 +37,8 @@ jobs: run: cp .env.example .env - name: Build and start lakehouse + governance + console - run: docker compose up -d --build console-api spark trino + run: | + for i in 1 2 3; do if docker compose up -d --build console-api spark trino; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for Trino run: | diff --git a/.github/workflows/flow-ci.yml b/.github/workflows/flow-ci.yml index f65b9f2..68ca654 100644 --- a/.github/workflows/flow-ci.yml +++ b/.github/workflows/flow-ci.yml @@ -23,7 +23,8 @@ jobs: - name: Create .env from example run: cp .env.example .env - name: Start NiFi - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d nifi + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d nifi; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Build + run an automated flow via the REST API run: NIFI_URL=http://localhost:8095 bash ../platform/flow/nifi-flow.sh - name: Dump logs on failure diff --git a/.github/workflows/governance-ci.yml b/.github/workflows/governance-ci.yml index 64fd11b..11b2853 100644 --- a/.github/workflows/governance-ci.yml +++ b/.github/workflows/governance-ci.yml @@ -34,7 +34,8 @@ jobs: run: cp .env.example .env - name: Build and start lakehouse + governance - run: docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d --build + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.governance.yml up -d --build; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Iceberg REST catalog run: | diff --git a/.github/workflows/jupyterhub-ci.yml b/.github/workflows/jupyterhub-ci.yml index 7025022..a5a3667 100644 --- a/.github/workflows/jupyterhub-ci.yml +++ b/.github/workflows/jupyterhub-ci.yml @@ -29,7 +29,8 @@ jobs: - uses: actions/checkout@v4 - name: Build and start JupyterHub - run: docker compose -f docker-compose.jupyterhub.yml up -d --build + run: | + for i in 1 2 3; do if docker compose -f docker-compose.jupyterhub.yml up -d --build; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Smoke — hub up + spawn a notebook server run: bash ../platform/ml/jupyterhub/smoke.sh diff --git a/.github/workflows/opdb-ci.yml b/.github/workflows/opdb-ci.yml index 8266b96..f07bf82 100644 --- a/.github/workflows/opdb-ci.yml +++ b/.github/workflows/opdb-ci.yml @@ -29,7 +29,8 @@ jobs: - uses: actions/checkout@v4 - name: Start the Operational DB (HBase + Phoenix) - run: docker compose -f docker-compose.opdb.yml up -d + run: | + for i in 1 2 3; do if docker compose -f docker-compose.opdb.yml up -d; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Phoenix smoke — create table, upsert, select run: bash ../platform/opdb/smoke.sh diff --git a/.github/workflows/quickstart-ci.yml b/.github/workflows/quickstart-ci.yml index 4250802..c9c47d6 100644 --- a/.github/workflows/quickstart-ci.yml +++ b/.github/workflows/quickstart-ci.yml @@ -34,7 +34,8 @@ jobs: run: docker compose config - name: Start the stack - run: docker compose up -d + run: | + for i in 1 2 3; do if docker compose up -d; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Iceberg REST catalog run: | diff --git a/.github/workflows/services-ci.yml b/.github/workflows/services-ci.yml index e9ea1c4..0b5d7c7 100644 --- a/.github/workflows/services-ci.yml +++ b/.github/workflows/services-ci.yml @@ -38,7 +38,8 @@ jobs: run: cp .env.example .env - name: Start lakehouse + Superset (and Spark to seed) - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build superset spark + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build superset spark; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Iceberg REST catalog run: | @@ -88,7 +89,8 @@ jobs: run: cp .env.example .env - name: Start the lakehouse (Trino) + Airflow - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build trino airflow + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build trino airflow; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for Trino run: | @@ -144,7 +146,8 @@ jobs: run: cp .env.example .env - name: Start MLflow (and MinIO via its bucket init) - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build mlflow + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d --build mlflow; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for MLflow run: | @@ -183,7 +186,8 @@ jobs: run: cp .env.example .env - name: Start Kafka and NiFi - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d kafka nifi + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d kafka nifi; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Kafka broker run: | diff --git a/.github/workflows/spark-app-ci.yml b/.github/workflows/spark-app-ci.yml index b780d1a..7b16cef 100644 --- a/.github/workflows/spark-app-ci.yml +++ b/.github/workflows/spark-app-ci.yml @@ -33,7 +33,7 @@ jobs: working-directory: quickstart run: | cp .env.example .env - docker compose up -d spark trino + for i in 1 2 3; do if docker compose up -d spark trino; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for Trino working-directory: quickstart diff --git a/.github/workflows/streaming-ci.yml b/.github/workflows/streaming-ci.yml index 09a478c..53ff8ba 100644 --- a/.github/workflows/streaming-ci.yml +++ b/.github/workflows/streaming-ci.yml @@ -31,7 +31,8 @@ jobs: run: cp .env.example .env - name: Start Kafka + Spark + the lakehouse (Trino) - run: docker compose -f docker-compose.yml -f docker-compose.services.yml up -d kafka spark trino + run: | + for i in 1 2 3; do if docker compose -f docker-compose.yml -f docker-compose.services.yml up -d kafka spark trino; then break; fi; if [ "$i" = 3 ]; then echo "compose up still failing after $i attempts"; exit 1; fi; echo "compose up failed (attempt $i; likely a Docker Hub pull flake); retrying in 15s ..."; sleep 15; done - name: Wait for the Kafka broker run: |