From a940e566b18bd36702b7d42faf3aa007b2d68682 Mon Sep 17 00:00:00 2001 From: Osama Mabkhot <99215291+O2sa@users.noreply.github.com> Date: Wed, 26 Aug 2026 06:03:44 +0300 Subject: [PATCH 1/3] fix(ops): prevent docker compose from overriding .env variables with empty strings (#206) --- ops/deploy/deploy-leaderboard.sh | 17 ++++++++++++++--- ops/docker/leaderboard-compose.yml | 16 ---------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/ops/deploy/deploy-leaderboard.sh b/ops/deploy/deploy-leaderboard.sh index 1fcf9bb..19631d0 100644 --- a/ops/deploy/deploy-leaderboard.sh +++ b/ops/deploy/deploy-leaderboard.sh @@ -1,13 +1,16 @@ #!/usr/bin/env bash set -euo pipefail -# Determine script directory and path to compose file +# Determine script directory, project root, and compose file SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" COMPOSE_FILE="${SCRIPT_DIR}/../docker/leaderboard-compose.yml" +ENV_FILE="${PROJECT_ROOT}/.env" echo "==================================================" echo " DevImpact Leaderboard Worker Deployment" echo "==================================================" +echo "Project Root: ${PROJECT_ROOT}" echo "Compose File: ${COMPOSE_FILE}" if [ ! -f "${COMPOSE_FILE}" ]; then @@ -15,8 +18,16 @@ if [ ! -f "${COMPOSE_FILE}" ]; then exit 1 fi +ENV_ARGS=() +if [ -f "${ENV_FILE}" ]; then + echo "Env File: ${ENV_FILE} (found)" + ENV_ARGS+=(--env-file "${ENV_FILE}") +else + echo "Warning: .env file not found at ${ENV_FILE}. Proceeding with system environment..." >&2 +fi + echo "[1/3] Pulling latest GHCR image..." -docker compose -f "${COMPOSE_FILE}" pull +docker compose --project-directory "${PROJECT_ROOT}" "${ENV_ARGS[@]}" -f "${COMPOSE_FILE}" pull # Check if worker container is running and an active calculation is in progress CONTAINER_NAME="devimpact-leaderboard-cron" @@ -33,7 +44,7 @@ else fi echo "[3/3] Recreating leaderboard worker container with new image..." -docker compose -f "${COMPOSE_FILE}" up -d --remove-orphans +docker compose --project-directory "${PROJECT_ROOT}" "${ENV_ARGS[@]}" -f "${COMPOSE_FILE}" up -d --remove-orphans echo "==================================================" echo " Leaderboard Worker Deployed Successfully!" diff --git a/ops/docker/leaderboard-compose.yml b/ops/docker/leaderboard-compose.yml index 5d005bf..9977ff9 100644 --- a/ops/docker/leaderboard-compose.yml +++ b/ops/docker/leaderboard-compose.yml @@ -8,21 +8,5 @@ services: - path: ${ENV_FILE:-../../.env} required: false environment: - GITHUB_TOKEN: ${GITHUB_TOKEN} - DATABASE_URL: ${DATABASE_URL} - REDIS_URL: ${REDIS_URL} - REDIS_ENABLED: ${REDIS_ENABLED:-false} - REDIS_PASSWORD: ${REDIS_PASSWORD} - REDIS_CACHE_NAMESPACE: ${REDIS_CACHE_NAMESPACE:-devimpact:v1} - REDIS_CACHE_TTL_SECONDS: ${REDIS_CACHE_TTL_SECONDS:-604800} - REDIS_CONNECT_TIMEOUT_MS: ${REDIS_CONNECT_TIMEOUT_MS:-1500} LEADERBOARD_CRON_SCHEDULE: ${LEADERBOARD_CRON_SCHEDULE:-0 0 * * *} LEADERBOARD_SOURCE_URL_TEMPLATE: ${LEADERBOARD_SOURCE_URL_TEMPLATE:-https://raw.githubusercontent.com/ashkulz/committers.top/gh-pages/_data/locations/{country}.yml} - LEADERBOARD_SEED_LIMIT: ${LEADERBOARD_SEED_LIMIT:-256} - LEADERBOARD_REFRESH_LIMIT: ${LEADERBOARD_REFRESH_LIMIT:-500} - LEADERBOARD_USER_STALE_DAYS: ${LEADERBOARD_USER_STALE_DAYS:-30} - GITHUB_USER_STALE_DAYS: ${GITHUB_USER_STALE_DAYS:-14} - GITHUB_REPO_COUNT: ${GITHUB_REPO_COUNT:-30} - GITHUB_PR_COUNT: ${GITHUB_PR_COUNT:-80} - GITHUB_ISSUE_COUNT: ${GITHUB_ISSUE_COUNT:-20} - GITHUB_DISCUSSION_COUNT: ${GITHUB_DISCUSSION_COUNT:-10} From 47c4a93a78ea4be4e0a6aabf1a15cfa34bd291c2 Mon Sep 17 00:00:00 2001 From: Osama Mabkhot <99215291+O2sa@users.noreply.github.com> Date: Wed, 26 Aug 2026 06:17:10 +0300 Subject: [PATCH 2/3] ci(deploy): sync repository on VPS before executing deployment script (#207) --- .github/workflows/deploy-vps.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-vps.yml b/.github/workflows/deploy-vps.yml index 3b095dd..5492899 100644 --- a/.github/workflows/deploy-vps.yml +++ b/.github/workflows/deploy-vps.yml @@ -35,4 +35,6 @@ jobs: port: ${{ env.VPS_SSH_PORT }} script: | cd ~/projects/DevImpact || cd /app || exit 1 + git fetch origin main + git reset --hard origin/main bash ops/deploy/deploy-leaderboard.sh From d26e6b701cc55106342689b8edc9ae1e29333724 Mon Sep 17 00:00:00 2001 From: Osama Mabkhot <99215291+O2sa@users.noreply.github.com> Date: Wed, 26 Aug 2026 06:27:46 +0300 Subject: [PATCH 3/3] fix(ops): prevent container name conflict during leaderboard deployment (#208) --- ops/deploy/deploy-leaderboard.sh | 9 ++++++--- ops/docker/leaderboard-compose.yml | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ops/deploy/deploy-leaderboard.sh b/ops/deploy/deploy-leaderboard.sh index 19631d0..a30b828 100644 --- a/ops/deploy/deploy-leaderboard.sh +++ b/ops/deploy/deploy-leaderboard.sh @@ -29,16 +29,19 @@ fi echo "[1/3] Pulling latest GHCR image..." docker compose --project-directory "${PROJECT_ROOT}" "${ENV_ARGS[@]}" -f "${COMPOSE_FILE}" pull -# Check if worker container is running and an active calculation is in progress +# Check if worker container exists and an active calculation is in progress CONTAINER_NAME="devimpact-leaderboard-cron" -if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then echo "[2/3] Checking for active leaderboard calculation..." while docker exec "${CONTAINER_NAME}" pgrep -f "calculate-next-country" > /dev/null 2>&1 || \ - docker exec "${CONTAINER_NAME}" sh -c 'ps aux | grep -v grep | grep -q "calculate-next-country"'; do + docker exec "${CONTAINER_NAME}" sh -c 'ps aux | grep -v grep | grep -q "calculate-next-country"' > /dev/null 2>&1; do echo " >> A leaderboard calculation job is currently running. Waiting for it to finish..." sleep 10 done echo " >> No active calculation running (or active calculation completed)." + echo " >> Removing previous container to prevent name conflicts..." + docker stop "${CONTAINER_NAME}" > /dev/null 2>&1 || true + docker rm -f "${CONTAINER_NAME}" > /dev/null 2>&1 || true else echo "[2/3] Worker container is not running yet." fi diff --git a/ops/docker/leaderboard-compose.yml b/ops/docker/leaderboard-compose.yml index 9977ff9..4ccde6e 100644 --- a/ops/docker/leaderboard-compose.yml +++ b/ops/docker/leaderboard-compose.yml @@ -1,3 +1,5 @@ +name: devimpact-leaderboard + services: leaderboard-cron: image: ${LEADERBOARD_IMAGE:-ghcr.io/o2sa/devimpact-leaderboard:latest}