From d586d3f804cc71b040e9297ca40983cd8a32ab11 Mon Sep 17 00:00:00 2001 From: "Carlos Murilo de O. C. F." Date: Fri, 1 May 2026 21:57:42 -0300 Subject: [PATCH 1/4] refactor: load database, cache and celery settings from environment --- cache.py | 18 ++++++++++++++++-- celery_app.py | 28 ++++++++++++++++++++++------ database.py | 29 ++++++++++++++++++++++++----- 3 files changed, 62 insertions(+), 13 deletions(-) diff --git a/cache.py b/cache.py index 139a554..b81a1ce 100644 --- a/cache.py +++ b/cache.py @@ -6,9 +6,23 @@ import os # ------------------------------------------------- -REDIS_HOST = os.getenv("REDIS_HOST", "redis") +REDIS_HOST = os.getenv("REDIS_HOST") +REDIS_PORT = os.getenv("REDIS_PORT") + +required_envs = { + "REDIS_HOST": REDIS_HOST, + "REDIS_PORT": REDIS_PORT, +} + +missings_env = [name for name, value in required_envs.items() if value is None] + +if missings_env: + raise RuntimeError( + f"Missing required environments variables: {', '.join(missings_env)}" + ) + # ------------------------------------------------- -r = redis.Redis(host=REDIS_HOST, port=6379, decode_responses=True) +r = redis.Redis(host=REDIS_HOST, port=int(REDIS_PORT), decode_responses=True) # decode_responses means -> Redis returns strings instead of bytes, which is easier to work with. # -------------------------------------------------- diff --git a/celery_app.py b/celery_app.py index 1f0b724..6fe120c 100644 --- a/celery_app.py +++ b/celery_app.py @@ -1,21 +1,37 @@ from celery import Celery -from cache import REDIS_HOST +import os + # ------------------------------------------------- +REDIS_HOST = os.getenv("REDIS_HOST") +REDIS_PORT = os.getenv("REDIS_PORT") + +required_envs = { + "REDIS_HOST": REDIS_HOST, + "REDIS_PORT": REDIS_PORT, +} + +missing_envs = [name for name, value in required_envs.items() if value is None] +if missing_envs: + raise RuntimeError( + f"Missing required environment variables: {', '.join(missing_envs)}" + ) +# ------------------------------------------------- +REDIS_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/0" +# ------------------------------------------------- celery_app = Celery( "deploy_tracker", - broker=f"redis://{REDIS_HOST}:6379/0", - backend=f"redis://{REDIS_HOST}:6379/0", + broker=REDIS_URL, + backend=REDIS_URL, ) +# ------------------------------------------------- celery_app.conf.beat_schedule = { "health_check_30s": { "task": "tasks.health_checker", "schedule": 30.0, # seconds - "args": ( - 1, - ), # TODO: Dynamically check all registered applications instead of hardcoded id + "args": (1,), }, } diff --git a/database.py b/database.py index 0f94518..7611e67 100644 --- a/database.py +++ b/database.py @@ -6,14 +6,33 @@ # ------------------------------------------------------ -# DB_HOST defaults to "db" for Docker Compose, override with env variable for other environments. -DB_HOST = os.getenv("DB_HOST", "db") +POSTGRES_USER = os.getenv("POSTGRES_USER") +POSTGRES_PASSWORD = os.getenv("POSTGRES_PASSWORD") +POSTGRES_DB = os.getenv("POSTGRES_DB") +DB_HOST = os.getenv("DB_HOST") +DB_PORT = os.getenv("DB_PORT") + +required_envs = { + "POSTGRES_USER": POSTGRES_USER, + "POSTGRES_PASSWORD": POSTGRES_PASSWORD, + "POSTGRES_DB": POSTGRES_DB, + "DB_HOST": DB_HOST, + "DB_PORT": DB_PORT, +} + +missing_envs = [name for name, value in required_envs.items() if value is None] + +if missing_envs: + raise RuntimeError( + f"Missing required environment variables: {', '.join(missing_envs)}" + ) + # ------------------------------------------------------ -engine = create_engine( - f"postgresql+psycopg2://deploy_tracker:password@{DB_HOST}/deploy_tracker" -) +DATABASE_URL = f"postgresql+psycopg2://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{DB_HOST}:{DB_PORT}/{POSTGRES_DB}" + +engine = create_engine(DATABASE_URL) # ------------------------------------------------------ From 79db0df9d523eb7164aca5e9aea6261e641aa6e1 Mon Sep 17 00:00:00 2001 From: "Carlos Murilo de O. C. F." Date: Fri, 1 May 2026 22:46:39 -0300 Subject: [PATCH 2/4] refactor: refactor ci.yml with env variables --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 42da1c3..6fb54b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,9 +24,9 @@ jobs: image: postgres:17 # Docker image for PostgreSQL env: # Environment variables to configure the database - POSTGRES_USER: deploy_tracker - POSTGRES_PASSWORD: password - POSTGRES_DB: deploy_tracker + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_PASSWORD ports: - 5432:5432 # Container port of db options: >- From ba219b37d90807e9382acc36b26936a6bbbd1fc9 Mon Sep 17 00:00:00 2001 From: "Carlos Murilo de O. C. F." Date: Fri, 1 May 2026 22:47:51 -0300 Subject: [PATCH 3/4] refactor: refactor ci.yml with env variables --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fb54b5..a624b2a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: # Environment variables to configure the database POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: ${POSTGRES_PASSWORD + POSTGRES_DB: ${POSTGRES_PASSWORD} ports: - 5432:5432 # Container port of db options: >- From d59a5673ebfbcf30c944f6376e4b0ce496d74fb4 Mon Sep 17 00:00:00 2001 From: "Carlos Murilo de O. C. F." Date: Fri, 1 May 2026 22:54:23 -0300 Subject: [PATCH 4/4] refactor: refactor ci.yml with env variables --- .github/workflows/ci.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a624b2a..7d37be3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,9 +24,9 @@ jobs: image: postgres:17 # Docker image for PostgreSQL env: # Environment variables to configure the database - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: ${POSTGRES_PASSWORD} + POSTGRES_USER: deploy_tracker + POSTGRES_PASSWORD: murilinroblox + POSTGRES_DB: deploy_tracker ports: - 5432:5432 # Container port of db options: >- @@ -52,8 +52,13 @@ jobs: - name: Run tests env: + POSTGRES_USER: deploy_tracker + POSTGRES_PASSWORD: murilinroblox + POSTGRES_DB: deploy_tracker DB_HOST: localhost + DB_PORT: 5432 REDIS_HOST: localhost + REDIS_PORT: 6379 run: pytest - name: Build Docker Image