From 7172e7b7a9832a91516a562d323e6e2840b0f34d Mon Sep 17 00:00:00 2001 From: Vezpi Date: Wed, 16 Sep 2026 09:20:27 +0000 Subject: [PATCH] feat: leverage healthcheck for container status --- .gitea/workflows/deployment.yml | 96 +++++++++++++++++++++++++++++++-- .gitea/workflows/test.yml | 52 ++++++++++++++++-- 2 files changed, 141 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/deployment.yml b/.gitea/workflows/deployment.yml index 50c4886..a35a827 100644 --- a/.gitea/workflows/deployment.yml +++ b/.gitea/workflows/deployment.yml @@ -106,9 +106,53 @@ jobs: - name: Launch Blog Deployment run: | cd /blog - docker compose down ${CONTAINER_NAME} + + echo "- Stopping existing ${CONTAINER_NAME}..." + docker compose down ${CONTAINER_NAME} + + echo "- Starting ${CONTAINER_NAME}..." docker compose up -d ${CONTAINER_NAME} - sleep 30 + + echo "- Waiting for ${CONTAINER_NAME} to become healthy..." + + timeout=300 + elapsed=0 + + while true; do + status=$(docker inspect \ + --format='{{.State.Health.Status}}' \ + ${CONTAINER_NAME}) + + echo "Health status: ${status}" + + case "$status" in + healthy) + echo "✅ ${CONTAINER_NAME} is healthy" + break + ;; + + unhealthy) + echo "❌ ${CONTAINER_NAME} is unhealthy" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + ;; + + *) + ;; + esac + + if [ "$elapsed" -ge "$timeout" ]; then + echo "❌ Timed out waiting for ${CONTAINER_NAME}" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + fi + + sleep 2 + elapsed=$((elapsed + 2)) + done + echo "- Displaying container logs" docker compose logs ${CONTAINER_NAME} @@ -161,9 +205,53 @@ jobs: - name: Launch Blog Deployment run: | cd /blog - docker compose down ${CONTAINER_NAME} + + echo "- Stopping existing ${CONTAINER_NAME}..." + docker compose down ${CONTAINER_NAME} + + echo "- Starting ${CONTAINER_NAME}..." docker compose up -d ${CONTAINER_NAME} - sleep 30 + + echo "- Waiting for ${CONTAINER_NAME} to become healthy..." + + timeout=300 + elapsed=0 + + while true; do + status=$(docker inspect \ + --format='{{.State.Health.Status}}' \ + ${CONTAINER_NAME}) + + echo "Health status: ${status}" + + case "$status" in + healthy) + echo "✅ ${CONTAINER_NAME} is healthy" + break + ;; + + unhealthy) + echo "❌ ${CONTAINER_NAME} is unhealthy" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + ;; + + *) + ;; + esac + + if [ "$elapsed" -ge "$timeout" ]; then + echo "❌ Timed out waiting for ${CONTAINER_NAME}" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + fi + + sleep 2 + elapsed=$((elapsed + 2)) + done + echo "- Displaying container logs" docker compose logs ${CONTAINER_NAME} diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index 0a28085..37ddafe 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -107,12 +107,58 @@ jobs: - name: Launch Blog Test Deployment run: | cd /blog - docker compose down ${CONTAINER_NAME} - BLOG_TEST_BRANCH=${{ gitea.ref_name }} docker compose up -d ${CONTAINER_NAME} - sleep 30 + + echo "- Stopping existing ${CONTAINER_NAME}..." + docker compose down ${CONTAINER_NAME} + + echo "- Starting ${CONTAINER_NAME}..." + BLOG_TEST_BRANCH=${{ gitea.ref_name }} \ + docker compose up -d ${CONTAINER_NAME} + + echo "- Waiting for ${CONTAINER_NAME} to become healthy..." + + timeout=300 + elapsed=0 + + while true; do + status=$(docker inspect \ + --format='{{.State.Health.Status}}' \ + ${CONTAINER_NAME}) + + echo "Health status: ${status}" + + case "$status" in + healthy) + echo "✅ ${CONTAINER_NAME} is healthy" + break + ;; + + unhealthy) + echo "❌ ${CONTAINER_NAME} is unhealthy" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + ;; + + *) + ;; + esac + + if [ "$elapsed" -ge "$timeout" ]; then + echo "❌ Timed out waiting for ${CONTAINER_NAME}" + echo "- Displaying container logs" + docker compose logs ${CONTAINER_NAME} + exit 1 + fi + + sleep 2 + elapsed=$((elapsed + 2)) + done + echo "- Displaying container logs" docker compose logs ${CONTAINER_NAME} + Test: needs: Deploy-Test runs-on: ubuntu