From e708f7b18b33a577ca36f2ae940a7edb85a3ee50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 13:52:17 +0100 Subject: [PATCH 01/13] feat(deployment): add cron support --- 7project/backend/app/app.py | 18 ++++--------- .../charts/myapp-chart/templates/cron.yaml | 25 +++++++++++++++++++ 7project/charts/myapp-chart/values-prod.yaml | 3 +++ 7project/charts/myapp-chart/values.yaml | 7 ++++++ 4 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 7project/charts/myapp-chart/templates/cron.yaml diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 6bb0e5d..124ab69 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -1,3 +1,4 @@ +import json import logging import os import sys @@ -65,7 +66,6 @@ fastApi.include_router(auth_router) fastApi.include_router(categories_router) fastApi.include_router(transactions_router) - for h in list(logging.root.handlers): logging.root.removeHandler(h) @@ -78,7 +78,6 @@ _log_handler.setFormatter(_formatter) logging.root.setLevel(logging.INFO) logging.root.addHandler(_log_handler) - for _name in ("uvicorn", "uvicorn.error", "uvicorn.access"): _logger = logging.getLogger(_name) _logger.handlers = [_log_handler] @@ -161,16 +160,9 @@ async def authenticated_route(user: User = Depends(current_active_verified_user) return {"message": f"Hello {user.email}!"} -@fastApi.get("/debug/scrape/csas/all", tags=["debug"]) -async def debug_scrape_csas_all(): - logging.info("[Debug] Queueing CSAS scrape for all users via HTTP endpoint (Celery)") +@fastApi.get("/_cron", include_in_schema=False) +async def handle_cron(request: Request): + logging.info("[Cron] Triggering scheduled tasks via HTTP endpoint") + logging.info(json.dumps(request.headers)) task = load_all_transactions.delay() return {"status": "queued", "action": "csas_scrape_all", "task_id": getattr(task, 'id', None)} - - -@fastApi.post("/debug/scrape/csas/{user_id}", tags=["debug"]) -async def debug_scrape_csas_user(user_id: str, user: User = Depends(current_active_verified_user)): - logging.info("[Debug] Queueing CSAS scrape for single user via HTTP endpoint (Celery) | user_id=%s", user_id) - task = load_transactions.delay(user_id) - return {"status": "queued", "action": "csas_scrape_single", "user_id": user_id, - "task_id": getattr(task, 'id', None)} diff --git a/7project/charts/myapp-chart/templates/cron.yaml b/7project/charts/myapp-chart/templates/cron.yaml new file mode 100644 index 0000000..5c57284 --- /dev/null +++ b/7project/charts/myapp-chart/templates/cron.yaml @@ -0,0 +1,25 @@ +{{ - if .Values.cron.enabled }} +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob +spec: + schedule: {{ .Values.cron.schedule | quote }} + concurrencyPolicy: {{ .Values.cron.concurrencyPolicy | quote }} + jobTemplate: + spec: + template: + spec: + containers: + - name: cronjob + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + args: + - -sS + - -o + - /dev/null + - -w + - "%{http_code}" + - "{{ printf "%s://%s.%s.svc.cluster.local" .Values.cron.scheme .Values.app.name .Release.Namespace | quote }}{{ .Values.cron.endpoint }}" + restartPolicy: OnFailure +{{ - end }} \ No newline at end of file diff --git a/7project/charts/myapp-chart/values-prod.yaml b/7project/charts/myapp-chart/values-prod.yaml index b7100de..d0cd82c 100644 --- a/7project/charts/myapp-chart/values-prod.yaml +++ b/7project/charts/myapp-chart/values-prod.yaml @@ -5,3 +5,6 @@ app: worker: replicas: 3 + +cron: + enabled: true diff --git a/7project/charts/myapp-chart/values.yaml b/7project/charts/myapp-chart/values.yaml index d20fa70..b3bdb8c 100644 --- a/7project/charts/myapp-chart/values.yaml +++ b/7project/charts/myapp-chart/values.yaml @@ -35,6 +35,13 @@ worker: # Queue name for Celery worker and for CRD Queue mailQueueName: "mail_queue" +cron: + enabled: false + schedule: "*/5 * * * *" # every 5 minutes + scheme: "http" + endpoint: "/_cron" + concurrencyPolicy: "Forbid" + service: port: 80 From 21305f18e21dd0e47f2bc04900589efadb55ee29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 13:54:45 +0100 Subject: [PATCH 02/13] feat(deployment): add cron support --- 7project/charts/myapp-chart/templates/cron.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/7project/charts/myapp-chart/templates/cron.yaml b/7project/charts/myapp-chart/templates/cron.yaml index 5c57284..6f5033f 100644 --- a/7project/charts/myapp-chart/templates/cron.yaml +++ b/7project/charts/myapp-chart/templates/cron.yaml @@ -1,4 +1,4 @@ -{{ - if .Values.cron.enabled }} +{{- if .Values.cron.enabled }} apiVersion: batch/v1 kind: CronJob metadata: @@ -22,4 +22,4 @@ spec: - "%{http_code}" - "{{ printf "%s://%s.%s.svc.cluster.local" .Values.cron.scheme .Values.app.name .Release.Namespace | quote }}{{ .Values.cron.endpoint }}" restartPolicy: OnFailure -{{ - end }} \ No newline at end of file +{{- end }} \ No newline at end of file From 24d86abfc48682308b8d7d2ea03342d155f928ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 13:58:36 +0100 Subject: [PATCH 03/13] feat(deployment): add cron support --- 7project/charts/myapp-chart/templates/cron.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7project/charts/myapp-chart/templates/cron.yaml b/7project/charts/myapp-chart/templates/cron.yaml index 6f5033f..67b0870 100644 --- a/7project/charts/myapp-chart/templates/cron.yaml +++ b/7project/charts/myapp-chart/templates/cron.yaml @@ -20,6 +20,6 @@ spec: - /dev/null - -w - "%{http_code}" - - "{{ printf "%s://%s.%s.svc.cluster.local" .Values.cron.scheme .Values.app.name .Release.Namespace | quote }}{{ .Values.cron.endpoint }}" + - {{ printf "%s://%s.%s.svc.cluster.local%s" .Values.cron.scheme .Values.app.name .Release.Namespace .Values.cron.endpoint | quote }} restartPolicy: OnFailure {{- end }} \ No newline at end of file From c62e0adcf3923a5dc92082487a5d8572c52f7254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 14:03:31 +0100 Subject: [PATCH 04/13] feat(deployment): add cron support --- 7project/backend/app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 124ab69..235d4e1 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -163,6 +163,6 @@ async def authenticated_route(user: User = Depends(current_active_verified_user) @fastApi.get("/_cron", include_in_schema=False) async def handle_cron(request: Request): logging.info("[Cron] Triggering scheduled tasks via HTTP endpoint") - logging.info(json.dumps(request.headers)) + logging.info(json.dumps(request.headers._list)) task = load_all_transactions.delay() return {"status": "queued", "action": "csas_scrape_all", "task_id": getattr(task, 'id', None)} From 1e4f3421762fc815898f49164aa0cb8b3cf22950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 14:07:33 +0100 Subject: [PATCH 05/13] feat(deployment): add cron support --- 7project/backend/app/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 235d4e1..b80aeb4 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -163,6 +163,6 @@ async def authenticated_route(user: User = Depends(current_active_verified_user) @fastApi.get("/_cron", include_in_schema=False) async def handle_cron(request: Request): logging.info("[Cron] Triggering scheduled tasks via HTTP endpoint") - logging.info(json.dumps(request.headers._list)) + logging.info(json.dumps(request.headers.__str__())) task = load_all_transactions.delay() return {"status": "queued", "action": "csas_scrape_all", "task_id": getattr(task, 'id', None)} From 537d050080d21c531da2874b6a5b84de3ada81a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 14:16:08 +0100 Subject: [PATCH 06/13] feat(deployment): add 404 for public access --- 7project/backend/app/app.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index b80aeb4..682e7a0 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -5,7 +5,7 @@ import sys from datetime import datetime from pythonjsonlogger import jsonlogger -from fastapi import Depends, FastAPI +from fastapi import Depends, FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from prometheus_fastapi_instrumentator import Instrumentator, metrics from starlette.requests import Request @@ -162,7 +162,10 @@ async def authenticated_route(user: User = Depends(current_active_verified_user) @fastApi.get("/_cron", include_in_schema=False) async def handle_cron(request: Request): + # endpoint accessed by Clodflare => return 404 + if request.headers.get("cf-connecting-ip"): + raise HTTPException(status_code=404) + logging.info("[Cron] Triggering scheduled tasks via HTTP endpoint") - logging.info(json.dumps(request.headers.__str__())) task = load_all_transactions.delay() return {"status": "queued", "action": "csas_scrape_all", "task_id": getattr(task, 'id', None)} From b3b5717e9e70cecc5eff46bb1a809cbb6e7a5f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 14:59:28 +0100 Subject: [PATCH 07/13] feat(infrastructure): add email sender --- .github/workflows/deploy-prod.yaml | 16 ++++++- 7project/backend/app/workers/celery_tasks.py | 44 ++++++++++++++++++- .../charts/myapp-chart/templates/prod.yaml | 7 +++ .../templates/worker-deployment.yaml | 35 +++++++++++++++ 7project/charts/myapp-chart/values.yaml | 10 +++++ 5 files changed, 109 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-prod.yaml b/.github/workflows/deploy-prod.yaml index 8004cac..be38115 100644 --- a/.github/workflows/deploy-prod.yaml +++ b/.github/workflows/deploy-prod.yaml @@ -92,6 +92,13 @@ jobs: CSAS_CLIENT_ID: ${{ secrets.CSAS_CLIENT_ID }} CSAS_CLIENT_SECRET: ${{ secrets.CSAS_CLIENT_SECRET }} SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SMTP_HOST: ${{ secrets.SMTP_HOST }} + SMTP_PORT: ${{ secrets.SMTP_PORT }} + SMTP_USERNAME: ${{ secrets.SMTP_USERNAME }} + SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }} + SMTP_USE_TLS: ${{ secrets.SMTP_USE_TLS }} + SMTP_USE_SSL: ${{ secrets.SMTP_USE_SSL }} + SMTP_FROM: ${{ secrets.SMTP_FROM }} run: | helm upgrade --install myapp ./7project/charts/myapp-chart \ -n prod --create-namespace \ @@ -111,4 +118,11 @@ jobs: --set-string oauth.csas.clientId="$CSAS_CLIENT_ID" \ --set-string oauth.csas.clientSecret="$CSAS_CLIENT_SECRET" \ --set-string sentry_dsn="$SENTRY_DSN" \ - --set-string database.encryptionSecret="${{ secrets.PROD_DB_ENCRYPTION_KEY }}" \ No newline at end of file + --set-string database.encryptionSecret="${{ secrets.PROD_DB_ENCRYPTION_KEY }}" \ + --set-string smtp.host="$SMTP_HOST" \ + --set-string smtp.port="$SMTP_PORT" \ + --set-string smtp.username="$SMTP_USERNAME" \ + --set-string smtp.password="$SMTP_PASSWORD" \ + --set-string smtp.tls="$SMTP_USE_TLS" \ + --set-string smtp.ssl="$SMTP_USE_SSL" \ + --set-string smtp.from="$SMTP_FROM" \ No newline at end of file diff --git a/7project/backend/app/workers/celery_tasks.py b/7project/backend/app/workers/celery_tasks.py index 2c875d6..399f161 100644 --- a/7project/backend/app/workers/celery_tasks.py +++ b/7project/backend/app/workers/celery_tasks.py @@ -1,5 +1,8 @@ import logging import asyncio +import os +import smtplib +from email.message import EmailMessage from celery import shared_task @@ -84,8 +87,45 @@ def send_email(to: str, subject: str, body: str) -> None: logger.error("Email task missing fields. to=%r subject=%r body_len=%r", to, subject, len(body) if body else 0) return - # Placeholder for real email sending logic - logger.info("[Celery] Email sent | to=%s | subject=%s | body_len=%d", to, subject, len(body)) + host = os.getenv("SMTP_HOST") + if not host: + logger.error("SMTP_HOST is not configured; cannot send email") + return + + # Configuration + port = int(os.getenv("SMTP_PORT", "25")) + username = os.getenv("SMTP_USERNAME") + password = os.getenv("SMTP_PASSWORD") + use_tls = os.getenv("SMTP_USE_TLS", "0").lower() in {"1", "true", "yes"} + use_ssl = os.getenv("SMTP_USE_SSL", "0").lower() in {"1", "true", "yes"} + timeout = int(os.getenv("SMTP_TIMEOUT", "10")) + mail_from = os.getenv("SMTP_FROM") or username or "noreply@localhost" + + # Build message + msg = EmailMessage() + msg["To"] = to + msg["From"] = mail_from + msg["Subject"] = subject + msg.set_content(body) + + try: + if use_ssl: + with smtplib.SMTP_SSL(host=host, port=port, timeout=timeout) as smtp: + if username and password: + smtp.login(username, password) + smtp.send_message(msg) + else: + with smtplib.SMTP(host=host, port=port, timeout=timeout) as smtp: + # STARTTLS if requested + if use_tls: + smtp.starttls() + if username and password: + smtp.login(username, password) + smtp.send_message(msg) + logger.info("[Celery] Email sent | to=%s | subject=%s | body_len=%d", to, subject, len(body)) + except Exception: + logger.exception("Failed to send email via SMTP to=%s subject=%s host=%s port=%s tls=%s ssl=%s", to, subject, + host, port, use_tls, use_ssl) @shared_task(name="workers.load_transactions") diff --git a/7project/charts/myapp-chart/templates/prod.yaml b/7project/charts/myapp-chart/templates/prod.yaml index abb294a..2d03d9f 100644 --- a/7project/charts/myapp-chart/templates/prod.yaml +++ b/7project/charts/myapp-chart/templates/prod.yaml @@ -19,3 +19,10 @@ stringData: RABBITMQ_USERNAME: {{ .Values.rabbitmq.username | quote }} SENTRY_DSN: {{ .Values.sentry_dsn | quote }} DB_ENCRYPTION_KEY: {{ required "Set .Values.database.encryptionSecret" .Values.database.encryptionSecret | quote }} + SMTP_HOST: {{ .Values.smtp.host | default "" | quote }} + SMTP_PORT: {{ .Values.smtp.port | default 456 | quote }} + SMTP_USERNAME: {{ .Values.smtp.username | default "" | quote }} + SMTP_PASSWORD: {{ .Values.smtp.password | default "" | quote }} + SMTP_USE_TLS: {{ .Values.smtp.tls | default false | quote }} + SMTP_USE_SSL: {{ .Values.smtp.ssl | default false | quote }} + SMTP_FROM: {{ .Values.smtp.from | default "" | quote }} diff --git a/7project/charts/myapp-chart/templates/worker-deployment.yaml b/7project/charts/myapp-chart/templates/worker-deployment.yaml index fbd5182..b6979c2 100644 --- a/7project/charts/myapp-chart/templates/worker-deployment.yaml +++ b/7project/charts/myapp-chart/templates/worker-deployment.yaml @@ -85,3 +85,38 @@ spec: secretKeyRef: name: prod key: DB_ENCRYPTION_KEY + - name: SMTP_HOST + valueFrom: + secretKeyRef: + name: prod + key: SMTP_HOST + - name: SMTP_PORT + valueFrom: + secretKeyRef: + name: prod + key: SMTP_PORT + - name: SMTP_USERNAME + valueFrom: + secretKeyRef: + name: prod + key: SMTP_USERNAME + - name: SMTP_PASSWORD + valueFrom: + secretKeyRef: + name: prod + key: SMTP_PASSWORD + - name: SMTP_USE_TLS + valueFrom: + secretKeyRef: + name: prod + key: SMTP_USE_TLS + - name: SMTP_USE_SSL + valueFrom: + secretKeyRef: + name: prod + key: SMTP_USE_SSL + - name: SMTP_FROM + valueFrom: + secretKeyRef: + name: prod + key: SMTP_FROM diff --git a/7project/charts/myapp-chart/values.yaml b/7project/charts/myapp-chart/values.yaml index b3bdb8c..5079d16 100644 --- a/7project/charts/myapp-chart/values.yaml +++ b/7project/charts/myapp-chart/values.yaml @@ -42,6 +42,16 @@ cron: endpoint: "/_cron" concurrencyPolicy: "Forbid" +smtp: + host: + port: 456 + username: "" + password: "" + tls: false + ssl: false + from: "" + + service: port: 80 From 9986cce8f9ab301f7948e0b85701a3d6c65a0fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:03:36 +0100 Subject: [PATCH 08/13] Update 7project/charts/myapp-chart/values.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- 7project/charts/myapp-chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7project/charts/myapp-chart/values.yaml b/7project/charts/myapp-chart/values.yaml index 5079d16..cbffb51 100644 --- a/7project/charts/myapp-chart/values.yaml +++ b/7project/charts/myapp-chart/values.yaml @@ -44,7 +44,7 @@ cron: smtp: host: - port: 456 + port: 587 username: "" password: "" tls: false From 4cf0d2a9813fb642b3c2ee6c1e831ac13eea2144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:03:43 +0100 Subject: [PATCH 09/13] Update 7project/charts/myapp-chart/templates/prod.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- 7project/charts/myapp-chart/templates/prod.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7project/charts/myapp-chart/templates/prod.yaml b/7project/charts/myapp-chart/templates/prod.yaml index 2d03d9f..01f76ef 100644 --- a/7project/charts/myapp-chart/templates/prod.yaml +++ b/7project/charts/myapp-chart/templates/prod.yaml @@ -20,7 +20,7 @@ stringData: SENTRY_DSN: {{ .Values.sentry_dsn | quote }} DB_ENCRYPTION_KEY: {{ required "Set .Values.database.encryptionSecret" .Values.database.encryptionSecret | quote }} SMTP_HOST: {{ .Values.smtp.host | default "" | quote }} - SMTP_PORT: {{ .Values.smtp.port | default 456 | quote }} + SMTP_PORT: {{ .Values.smtp.port | default 587 | quote }} SMTP_USERNAME: {{ .Values.smtp.username | default "" | quote }} SMTP_PASSWORD: {{ .Values.smtp.password | default "" | quote }} SMTP_USE_TLS: {{ .Values.smtp.tls | default false | quote }} From 188cdf57274b4cd1cf59ad85ba1cbb7bf1a1368a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:03:53 +0100 Subject: [PATCH 10/13] Update .github/workflows/deploy-prod.yaml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/deploy-prod.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-prod.yaml b/.github/workflows/deploy-prod.yaml index be38115..3591be9 100644 --- a/.github/workflows/deploy-prod.yaml +++ b/.github/workflows/deploy-prod.yaml @@ -120,7 +120,7 @@ jobs: --set-string sentry_dsn="$SENTRY_DSN" \ --set-string database.encryptionSecret="${{ secrets.PROD_DB_ENCRYPTION_KEY }}" \ --set-string smtp.host="$SMTP_HOST" \ - --set-string smtp.port="$SMTP_PORT" \ + --set smtp.port="$SMTP_PORT" \ --set-string smtp.username="$SMTP_USERNAME" \ --set-string smtp.password="$SMTP_PASSWORD" \ --set-string smtp.tls="$SMTP_USE_TLS" \ From 3d31ff46318233e97c245beade0706aa057fea5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:29:47 +0100 Subject: [PATCH 11/13] fix(tests): do not include prometheus in test env --- 7project/backend/app/app.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 682e7a0..730787f 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -51,16 +51,15 @@ fastApi.add_middleware( allow_headers=["*"], ) -prometheus = Instrumentator().instrument(fastApi) - -# Register custom metrics -prometheus.add(number_of_users()).add(number_of_transactions()) - -prometheus.expose( - fastApi, - endpoint="/metrics", - include_in_schema=True, -) +if not os.getenv("PYTEST_RUN_CONFIG"): + prometheus = Instrumentator().instrument(fastApi) + # Register custom metrics + prometheus.add(number_of_users()).add(number_of_transactions()) + prometheus.expose( + fastApi, + endpoint="/metrics", + include_in_schema=True, + ) fastApi.include_router(auth_router) fastApi.include_router(categories_router) From c0bc44622fd3bf1bf67f21eb968fbf5d4f44929f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:34:11 +0100 Subject: [PATCH 12/13] fix(tests): set pytest env --- .github/workflows/run-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index ddd0337..b4923e7 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -57,5 +57,7 @@ jobs: working-directory: ./7project/backend - name: Run tests with pytest + env: + PYTEST_RUN_CONFIG: "True" run: pytest working-directory: ./7project/backend \ No newline at end of file From c53e314b2ab87977d081436175187007a2042516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Trkan?= Date: Tue, 11 Nov 2025 15:36:12 +0100 Subject: [PATCH 13/13] fix(tests): set pytest env --- 7project/backend/app/app.py | 1 + 1 file changed, 1 insertion(+) diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 730787f..b5e856a 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -51,6 +51,7 @@ fastApi.add_middleware( allow_headers=["*"], ) + if not os.getenv("PYTEST_RUN_CONFIG"): prometheus = Instrumentator().instrument(fastApi) # Register custom metrics