2 Commits

Author SHA1 Message Date
807204869f fix: Improve database connection retry logic with detailed error messages
All checks were successful
Run Tests / Lint (push) Successful in 35s
Run Tests / Unit Tests (push) Successful in 47s
2025-10-28 15:04:52 +01:00
ddb23b1da0 fix: Update deployment script to use fallback branch for image tagging 2025-10-28 15:03:21 +01:00
2 changed files with 38 additions and 10 deletions

View File

@@ -139,11 +139,16 @@ runs:
f"port={os.environ['DATABASE_PORT']}"
)
for attempt in range(30):
max_attempts = 30
for attempt in range(max_attempts):
try:
with psycopg2.connect(dsn):
break
except psycopg2.OperationalError:
except psycopg2.OperationalError as exc:
print(
f"Attempt {attempt + 1}/{max_attempts} failed to connect to Postgres: {exc}",
flush=True,
)
time.sleep(2)
else:
raise SystemExit("Postgres service did not become available")

View File

@@ -20,6 +20,7 @@ jobs:
github.event.repository.default_branch == 'refs/heads/main'
)
)
)
) }}
runs-on: ubuntu-latest
env:
@@ -42,14 +43,36 @@ jobs:
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
IMAGE_SHA="${{ env.WORKFLOW_RUN_HEAD_SHA }}"
FALLBACK_BRANCH="${{ env.WORKFLOW_RUN_HEAD_BRANCH }}"
IMAGE_TAG="${IMAGE_SHA}"
IMAGE_PATH="${{ env.REGISTRY_URL }}/${{ env.REGISTRY_ORG }}/${{ env.REGISTRY_IMAGE_NAME }}"
if [ -z "$IMAGE_SHA" ]; then
echo "Missing workflow run head SHA; aborting deployment." >&2
if [ -z "$FALLBACK_BRANCH" ]; then
FALLBACK_BRANCH="${{ env.WORKFLOW_RUN_REPO_DEFAULT_BRANCH }}"
fi
if [ -z "$FALLBACK_BRANCH" ]; then
FALLBACK_BRANCH="${{ env.REPOSITORY_DEFAULT_BRANCH }}"
fi
if [ -z "$IMAGE_TAG" ] && [ -n "$FALLBACK_BRANCH" ]; then
case "$FALLBACK_BRANCH" in
refs/heads/*)
FALLBACK_BRANCH="${FALLBACK_BRANCH#refs/heads/}"
;;
esac
if [ "$FALLBACK_BRANCH" = "${DEFAULT_BRANCH:-main}" ]; then
IMAGE_TAG="latest"
fi
fi
if [ -z "$IMAGE_TAG" ]; then
echo "Missing workflow run head SHA and no default-branch fallback available; aborting deployment." >&2
exit 1
fi
docker pull "$IMAGE_PATH:$IMAGE_SHA"
docker pull "$IMAGE_PATH:$IMAGE_TAG"
docker stop calminer || true
docker rm calminer || true
docker run -d --name calminer -p 8000:8000 \
@@ -60,7 +83,7 @@ jobs:
-e DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }} \
-e DATABASE_NAME=${{ secrets.DATABASE_NAME }} \
-e DATABASE_SCHEMA=${{ secrets.DATABASE_SCHEMA }} \
"$IMAGE_PATH:$IMAGE_SHA"
"$IMAGE_PATH:$IMAGE_TAG"
for attempt in {1..10}; do
if curl -fsS http://localhost:8000/health >/dev/null; then