diff --git a/.gitea/workflows/build-local.yaml b/.gitea/workflows/build-local.yaml index 423313d..10ece77 100644 --- a/.gitea/workflows/build-local.yaml +++ b/.gitea/workflows/build-local.yaml @@ -35,7 +35,9 @@ jobs: - name: Build and Push Docker Image run: | - docker build -t ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} . + docker build \ + --build-arg COMMIT_ID=$(echo "${{ github.sha }}" | cut -c1-7) \ + -t ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} . docker push ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} - name: Clone ops-deployment repo diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 9b5c4c8..2878838 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -35,7 +35,9 @@ jobs: - name: Build and Push Docker Image run: | - docker build -t ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} . + docker build \ + --build-arg COMMIT_ID=$(echo "${{ github.sha }}" | cut -c1-7) \ + -t ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} . docker push ghcr.io/gansejunge/${{ env.IMAGE_NAME }}:${{ steps.get_tag.outputs.next }} - name: Clone ops-deployment repo diff --git a/Dockerfile b/Dockerfile index c005c50..234bb0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,8 @@ FROM nvcr.io/nvidia/distroless/python:3.12-v4.1.6 COPY --from=builder /install /usr/local COPY --from=builder /app /app WORKDIR /app + +ARG COMMIT_ID=unknown +ENV COMMIT_ID=$COMMIT_ID + ENTRYPOINT ["python", "main.py"] diff --git a/requirements.txt b/requirements.txt index c4a86a7..87758d1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,22 +5,21 @@ annotated-doc==0.0.5 annotated-types==0.8.0 anyio==4.15.1 click==8.5.0 -fastapi==0.143.0 +fastapi==0.146.0 h11==0.16.0 idna==3.20 -lib-secret-manager==0.2.0 -lib-uvicorn-config==0.2.0 +lib-secret-manager==0.3.1 multidict==7.1.0 opentelemetry-api==1.45.1 pamqp==4.0.1 prometheus_client==0.26.0 propcache==0.5.4 -pydantic==2.14.0 -pydantic_core==2.50.0 +pydantic==2.14.1 +pydantic_core==2.50.1 python-json-logger==4.2.0 -simple-logger-handler==0.1.0 -starlette==1.7.0 +simple-logger-handler==0.2.1 +starlette==1.9.0 typing-inspection==0.4.4 typing_extensions==4.16.0 uvicorn==0.54.0 -yarl==1.25.1 +yarl==1.25.1 \ No newline at end of file diff --git a/src/main.py b/src/main.py index d4dea37..d8d02c0 100644 --- a/src/main.py +++ b/src/main.py @@ -1,4 +1,5 @@ import asyncio +import os import signal from contextlib import asynccontextmanager @@ -13,7 +14,6 @@ from metrics_server import REQUEST_COUNTER from rabbitmq_handler import RabbitMQConsumer from secret_manager import cleanup_secret_files from simple_logger_handler import LOG_LEVEL, setup_logger -from uvicorn_logger_config import LOGGING_CONFIG logger = setup_logger(__name__) MAX_MESSAGES = 100 @@ -120,8 +120,10 @@ class QuietServer(uvicorn.Server): pass async def start_servers(): - config_main = uvicorn.Config(api, host="0.0.0.0", port=8101, log_level=LOG_LEVEL.lower(), log_config=LOGGING_CONFIG) - config_metrics = uvicorn.Config("metrics_server:metrics_api", host="0.0.0.0", port=9000, log_level=LOG_LEVEL.lower(), log_config=LOGGING_CONFIG) + logger.info("[Server] Starting main API (port 8101) and metrics server (port 9000)...") + logger.info(f"[Server] Build commit id={os.getenv("COMMIT_ID","unknown")}") + config_main = uvicorn.Config(api, host="0.0.0.0", port=8101, log_level=LOG_LEVEL.lower(), log_config=None) + config_metrics = uvicorn.Config("metrics_server:metrics_api", host="0.0.0.0", port=9000, log_level=LOG_LEVEL.lower(), log_config=None) servers = [QuietServer(config_main), QuietServer(config_metrics)] def stop(): diff --git a/src/rabbitmq_handler.py b/src/rabbitmq_handler.py index 60d3a9d..959a199 100644 --- a/src/rabbitmq_handler.py +++ b/src/rabbitmq_handler.py @@ -7,7 +7,7 @@ from urllib.parse import quote import aio_pika from aio_pika.exceptions import AMQPException -from secret_manager import return_credentials +from secret_manager import get_secret from simple_logger_handler import setup_logger logger = setup_logger(__name__) @@ -40,8 +40,8 @@ class RabbitMQConsumer: return lock async def connect(self): - username = return_credentials("/etc/secrets/rmq_username") - password = return_credentials("/etc/secrets/rmq_password") + username = get_secret(os.getenv("RMQ_USERNAME",""),"/etc/secrets/rmq_username") + password = get_secret(os.getenv("RMQ_PASSWORD",""),"/etc/secrets/rmq_password") url = ( f"amqp://{quote(username, safe='')}:{quote(password, safe='')}" f"@{self.rmq_host}/{quote(self.rmq_vhost, safe='')}"