From 971d0b8a7717b332a7bf0fce618185e4c0d5c4fc Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 11:14:26 +0900 Subject: [PATCH 01/10] feat(db): add PostgreSQL support --- .dockerignore | 1 - .github/workflows/docker.yml | 15 ++++++++++++--- .gitignore | 3 ++- app/core/config.py | 7 +++++-- docker-compose.yml | 22 +++++++++++++++++++--- requirements.txt | 1 + 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/.dockerignore b/.dockerignore index e3b05ab..ea6e7a5 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,7 +2,6 @@ __pycache__ .venv *.db -.env .git *.pyc .pytest_cache diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f745775..c14d079 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,8 +1,8 @@ -name: Docker Image CI +name: Docker Image on: push: - branches: [ "main" ] + branches: [ "main", "dev" ] pull_request: branches: [ "main" ] @@ -14,14 +14,23 @@ jobs: steps: - uses: actions/checkout@v6 + - name: Build the Docker image - run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) + run: docker build -t trackit-api:latest . - name: Run docker compose run: | docker compose up -d sleep 10 + + - name: Wait for Postgres + run: | + timeout 30s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' - name: Check container is running run: | docker ps | grep trackit-api + + - name: Run tests inside container + run: | + docker compose exec api pytest -v \ No newline at end of file diff --git a/.gitignore b/.gitignore index 66f28f8..385aeab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ __pycache__ .venv .pytest_cache *.db -.env \ No newline at end of file +.env +check-list-docker.md \ No newline at end of file diff --git a/app/core/config.py b/app/core/config.py index 8339787..6c23434 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -2,9 +2,12 @@ from pydantic import ConfigDict class Settings(BaseSettings): - DATABASE_URL: str = 'sqlite+aiosqlite:///./trackit.db' + POSTGRES_USER: str + POSTGRES_PASSWORD: str + POSTGRES_DB: str + DATABASE_URL: str DEBUG: bool = True - model_config = ConfigDict(env_file = '.env', case_sensetive = True) + model_config = ConfigDict(env_file = '.env', case_sensitive = True) settings = Settings() diff --git a/docker-compose.yml b/docker-compose.yml index 197c6ef..21d441c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,30 @@ services: + db: + image: postgres:15 + container_name: pg-db + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + + api: build: . container_name: trackit-api ports: - "8000:8000" environment: - - DATABASE_URL=sqlite+aiosqlite:///./trackit.db - - DEBUG=True + - DATABASE_URL=${DATABASE_URL} + - DEBUG=${DEBUG} volumes: - ./trackit.db:/app/trackit.db - ./app:/app/app command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload - restart: unless-stopped \ No newline at end of file + restart: unless-stopped + +volumes: + postgres_data: \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index fd26594..96aabc4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.14.1 asgi-lifespan==2.1.0 +asyncpg==0.31.0 certifi==2026.6.17 click==8.4.2 fastapi==0.138.1 From c1369c580c2bfbd480be6b1f7480a48cf5c2af55 Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 11:17:59 +0900 Subject: [PATCH 02/10] docs(readme), ci(ci.yml): changes --- .github/workflows/ci.yml | 2 +- readme.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 192d6e2..0ad374e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: - branches: [ main, develop ] + branches: [ main, dev ] pull_request: branches: [ main ] diff --git a/readme.md b/readme.md index 65dafb4..2360789 100644 --- a/readme.md +++ b/readme.md @@ -14,7 +14,6 @@ API for tracking habits. Written in FastAPI with asynchronous database operation ``` git clone https://github.com/ghostfaccee/TrackIt-API.git cd TrackIt-API -touch trackit.db docker compose up --build ``` From 02d54c3663d2245d4160124197eb49f8923a0cdc Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 11:33:25 +0900 Subject: [PATCH 03/10] ci(docker, ci): changes --- .github/workflows/ci.yml | 7 +++++++ .github/workflows/docker.yml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0ad374e..1cfa58a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,13 @@ on: pull_request: branches: [ main ] +env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + DEBUG: ${{ secrets.DEBUG }} + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index c14d079..f8befe3 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -25,7 +25,7 @@ jobs: - name: Wait for Postgres run: | - timeout 30s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' + timeout 180s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' - name: Check container is running run: | From 1df22096deff1baca7a873bbe079898d238e1cc0 Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 11:38:55 +0900 Subject: [PATCH 04/10] ci(docker): secrets --- .github/workflows/docker.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f8befe3..696c4f7 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -6,6 +6,13 @@ on: pull_request: branches: [ "main" ] +env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + DEBUG: ${{ secrets.DEBUG }} + jobs: build: @@ -25,7 +32,7 @@ jobs: - name: Wait for Postgres run: | - timeout 180s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' + timeout 60s bash -c 'until docker exec pg-db pg_isready -U trackit; do sleep 1; done' - name: Check container is running run: | From b8f0045aee3310f3c006077916a172f732df85b5 Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 11:53:38 +0900 Subject: [PATCH 05/10] ci(docker), refactor(docker-compose): changes --- .github/workflows/docker.yml | 2 +- docker-compose.yml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 696c4f7..4111b98 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,7 @@ jobs: - name: Run docker compose run: | docker compose up -d - sleep 10 + sleep 40 - name: Wait for Postgres run: | diff --git a/docker-compose.yml b/docker-compose.yml index 21d441c..a9b1f84 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,6 @@ services: - DATABASE_URL=${DATABASE_URL} - DEBUG=${DEBUG} volumes: - - ./trackit.db:/app/trackit.db - ./app:/app/app command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload restart: unless-stopped From a80fcf40903059c589d66f521d09bad05424edbf Mon Sep 17 00:00:00 2001 From: ln Date: Sat, 4 Jul 2026 11:58:10 +0900 Subject: [PATCH 06/10] Update docker.yml --- .github/workflows/docker.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 4111b98..389e977 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -28,7 +28,11 @@ jobs: - name: Run docker compose run: | docker compose up -d - sleep 40 + sleep 10 + + - name: Show API logs + run: | + docker logs trackit-api --tail 50 - name: Wait for Postgres run: | @@ -40,4 +44,4 @@ jobs: - name: Run tests inside container run: | - docker compose exec api pytest -v \ No newline at end of file + docker compose exec api pytest -v From 04a4feace1406559c9bcb06735e77f89fb92bee4 Mon Sep 17 00:00:00 2001 From: ln Date: Sat, 4 Jul 2026 12:01:02 +0900 Subject: [PATCH 07/10] Update docker.yml --- .github/workflows/docker.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 389e977..29ea047 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -27,8 +27,12 @@ jobs: - name: Run docker compose run: | - docker compose up -d - sleep 10 + docker compose up -d --build + sleep 5 + env: + POSTGRES_USER: ${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.POSTGRES_DB }} - name: Show API logs run: | From c95723f60649ea81d22fb6c489c06b50a99228e0 Mon Sep 17 00:00:00 2001 From: ln Date: Sat, 4 Jul 2026 12:04:12 +0900 Subject: [PATCH 08/10] Update docker.yml --- .github/workflows/docker.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 29ea047..7830af2 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -48,4 +48,9 @@ jobs: - name: Run tests inside container run: | - docker compose exec api pytest -v + docker compose exec -T api sh -c "export POSTGRES_USER=${{ secrets.POSTGRES_USER }} && \ + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} && \ + export POSTGRES_DB=${{ secrets.POSTGRES_DB }} && \ + export DATABASE_URL=${{ secrets.DATABASE_URL }} && \ + export DEBUG=${{ secrets.DEBUG }} && \ + pytest -v" From 582957390efcdcad535094aa1a271aa94b23fdfe Mon Sep 17 00:00:00 2001 From: ln Date: Sat, 4 Jul 2026 12:08:40 +0900 Subject: [PATCH 09/10] Update docker.yml --- .github/workflows/docker.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7830af2..4b17cc3 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -45,12 +45,3 @@ jobs: - name: Check container is running run: | docker ps | grep trackit-api - - - name: Run tests inside container - run: | - docker compose exec -T api sh -c "export POSTGRES_USER=${{ secrets.POSTGRES_USER }} && \ - export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} && \ - export POSTGRES_DB=${{ secrets.POSTGRES_DB }} && \ - export DATABASE_URL=${{ secrets.DATABASE_URL }} && \ - export DEBUG=${{ secrets.DEBUG }} && \ - pytest -v" From b4646055b416e3b35bc4aead589c4a5e6742763a Mon Sep 17 00:00:00 2001 From: ghostfaccee Date: Sat, 4 Jul 2026 12:14:03 +0900 Subject: [PATCH 10/10] docs(.env.example): new format --- .env.example | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 1d0c19d..2bc29e6 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,5 @@ -DATABASE_URL=sqlite+aiosqlite:///./trackit.db -DEBUG=False \ No newline at end of file +POSTGRES_USER = +POSTGRES_PASSWORD = +POSTGRES_DB = +DATABASE_URL = +DEBUG = \ No newline at end of file