diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a592a03 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,37 @@ +name: Deploy to Clever Cloud + +on: + workflow_run: + workflows: ["pytest"] + types: + - completed + branches: + - main + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Clever Tools CLI + run: | + CC_VERSION=latest + curl -s -O https://clever-tools.clever-cloud.com/releases/${CC_VERSION}/clever-tools-${CC_VERSION}_linux.tar.gz + tar -xvf clever-tools-${CC_VERSION}_linux.tar.gz + PATH=${PATH}:$(pwd)/clever-tools-${CC_VERSION}_linux + + - name: Login to Clever Cloud + run: ./clever-tools-latest_linux/clever login --token ${{ secrets.CLEVER_TOKEN }} --secret ${{ secrets.CLEVER_SECRET }} + + - name: Deploy API to Clever Cloud + run: | + ./clever-tools-latest_linux/clever link ${{ secrets.CLEVER_APP_ID }} + ./clever-tools-latest_linux/clever deploy -f diff --git a/app/core/config.py b/app/core/config.py index be7359d..c0d0138 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -1,7 +1,11 @@ -import os from typing import List -class Settings: +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class Settings(BaseSettings): + model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') + # API Configuration app_name: str = "Ecologits API" app_version: str = "1.0.0" @@ -16,10 +20,6 @@ class Settings: api_v1_prefix: str = "/v1" docs_url: str = "/docs" redoc_url: str = "/redoc" - - # Environment-based overrides - def __init__(self): - self.app_name = os.getenv("APP_NAME", self.app_name) - self.app_version = os.getenv("APP_VERSION", self.app_version) + settings = Settings() diff --git a/pyproject.toml b/pyproject.toml index 47c39f0..df74e53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,6 +6,7 @@ requires-python = ">=3.10,<4" dependencies = [ "fastapi[standard]>=0.128.4,<1.0.0", "ecologits>=0.9.2,<1.0.0", + "pydantic-settings>=2.12.0", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index 22c532a..6f58f04 100644 --- a/uv.lock +++ b/uv.lock @@ -95,6 +95,7 @@ source = { virtual = "." } dependencies = [ { name = "ecologits" }, { name = "fastapi", extra = ["standard"] }, + { name = "pydantic-settings" }, ] [package.dev-dependencies] @@ -107,6 +108,7 @@ dev = [ requires-dist = [ { name = "ecologits", specifier = ">=0.9.2,<1.0.0" }, { name = "fastapi", extras = ["standard"], specifier = ">=0.128.4,<1.0.0" }, + { name = "pydantic-settings", specifier = ">=2.12.0" }, ] [package.metadata.requires-dev]