aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.drone.yml55
-rw-r--r--Dockerfile12
-rw-r--r--data/.gitkeep0
-rw-r--r--data/database/.gitignore2
-rw-r--r--data/database/.gitkeep0
-rw-r--r--docker-compose.yml17
-rw-r--r--kennel/main.py2
-rw-r--r--pyproject.toml2
-rw-r--r--tests/test_main.py14
9 files changed, 88 insertions, 16 deletions
diff --git a/.drone.yml b/.drone.yml
new file mode 100644
index 0000000..d05cb97
--- /dev/null
+++ b/.drone.yml
@@ -0,0 +1,55 @@
+---
+kind: pipeline
+type: docker
+name: build
+
+steps:
+ - name: run tests
+ image: python:3.12
+ commands:
+ - pip install poetry
+ - poetry install --with main,dev
+ - poetry run pytest
+
+trigger:
+ event:
+ - pull_request
+
+---
+kind: pipeline
+type: docker
+name: deploy
+
+steps:
+ - name: run tests
+ image: python:3.12
+ commands:
+ - pip install poetry
+ - poetry install --with main,dev
+ - poetry run pytest
+ - name: docker
+ image: plugins/docker
+ settings:
+ username:
+ from_secret: gitea_packpub_username
+ password:
+ from_secret: gitea_packpub_password
+ registry: git.hatecomputers.club
+ repo: git.hatecomputers.club/hatecomputers/kennel
+ - name: ssh
+ image: appleboy/drone-ssh
+ settings:
+ host: hatecomputers.club
+ username: root
+ key:
+ from_secret: cd_ssh_key
+ port: 22
+ command_timeout: 2m
+ script:
+ - systemctl restart docker-compose@kennel
+
+trigger:
+ branch:
+ - main
+ event:
+ - push
diff --git a/Dockerfile b/Dockerfile
index d9d599d..0101625 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,8 +5,10 @@ COPY ./pyproject.toml ./poetry.lock* /tmp/
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
FROM python:3.12
-WORKDIR /code
-COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt
-RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
-COPY kennel /code/src
-CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "80"]
+WORKDIR /app
+COPY --from=requirements-stage /tmp/requirements.txt /app/requirements.txt
+RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
+COPY kennel /app/kennel
+COPY static /app/static
+COPY templates /app/templates
+CMD ["uvicorn", "kennel.main:app", "--host", "0.0.0.0", "--port", "8000"]
diff --git a/data/.gitkeep b/data/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/data/.gitkeep
diff --git a/data/database/.gitignore b/data/database/.gitignore
new file mode 100644
index 0000000..2621632
--- /dev/null
+++ b/data/database/.gitignore
@@ -0,0 +1,2 @@
+*.sqlite
+*.db
diff --git a/data/database/.gitkeep b/data/database/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/data/database/.gitkeep
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..f20fa83
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3"
+
+services:
+ kennel:
+ restart: always
+ build: .
+ healthcheck:
+ test: ["CMD", "wget", "--spider", "http://localhost:8000/healthcheck"]
+ interval: 5s
+ timeout: 10s
+ retries: 5
+ env_file: .env
+ volumes:
+ - ./data:/app/data
+ ports:
+ - "127.0.0.1:60613:8000"
+
diff --git a/kennel/main.py b/kennel/main.py
index 3cca2c0..4ec9fca 100644
--- a/kennel/main.py
+++ b/kennel/main.py
@@ -40,7 +40,7 @@ templates = Jinja2Templates(directory="templates")
@app.get("/healthcheck")
async def healthcheck():
- return Response()
+ return Response("hello")
@app.get("/")
diff --git a/pyproject.toml b/pyproject.toml
index 84eb4e3..369a432 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,7 @@ select = [
]
# Note: Ruff supports a top-level `src` option in lieu of isort's `src_paths` setting.
-src = ["fastapi_poetry_starter", "tests"]
+src = ["kennel", "tests"]
ignore = []
diff --git a/tests/test_main.py b/tests/test_main.py
index cbab286..1c25f7f 100644
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -10,13 +10,9 @@ client = TestClient(app)
def test_healthcheck():
response = client.get("/healthcheck")
assert response.status_code == HTTPStatus.OK
- assert response.text == ""
+ assert response.text == "hello"
-
-def test_read_main():
- # Example of testing logging using a context manager
- with capture_logs() as cap_logs:
- response = client.get("/")
- assert {"event": "In root path", "log_level": "info"} in cap_logs
- assert response.status_code == HTTPStatus.OK
- assert response.json() == {"msg": "Hello World"}
+def test_main():
+ response = client.get("/")
+ assert response.status_code == HTTPStatus.OK
+ assert response.text.startswith("<!DOCTYPE html>")