mirror of
https://github.com/csd4ni3l/debt-by-ai.git
synced 2025-11-05 05:57:57 +01:00
Add docker support and automatic docker build
This commit is contained in:
6
.dockerignore
Normal file
6
.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.env
|
||||
.env.example
|
||||
.venv
|
||||
__pycache__
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
26
.github/workflows/docker.yml
vendored
Normal file
26
.github/workflows/docker.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ vars.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
|
||||
15
Dockerfile
Normal file
15
Dockerfile
Normal file
@@ -0,0 +1,15 @@
|
||||
FROM debian:12-slim AS build
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-suggests --no-install-recommends --yes python3-venv gcc libpython3-dev && \
|
||||
python3 -m venv /venv && \
|
||||
/venv/bin/pip install --upgrade pip setuptools wheel
|
||||
|
||||
FROM build AS build-venv
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN /venv/bin/pip install --disable-pip-version-check -r /requirements.txt
|
||||
|
||||
FROM gcr.io/distroless/python3-debian12
|
||||
COPY --from=build-venv /venv /venv
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
ENTRYPOINT ["/venv/bin/python3", "app.py"]
|
||||
@@ -1,3 +1,10 @@
|
||||
Inspired by the Death By AI game available on Discord. (This project has no affiliation with Discord inc. Or any subsidiaries.)
|
||||
|
||||
A game where you have to convince AI to get into debt, or have to convince AI to put you out of debt.
|
||||
A game where you have to convince AI to get into debt, or have to convince AI to put you out of debt.
|
||||
|
||||
How to run:
|
||||
1. Download the repository code.
|
||||
2. Run with either:
|
||||
- Install the modules into a venv or use `uv sync` to automatically do it for you, and then run `app.py`.
|
||||
- Run `docker compose up -d` in this directory
|
||||
- Build the docker image, then run with `docker run`
|
||||
9
app.py
9
app.py
@@ -6,13 +6,14 @@ from constants import *
|
||||
|
||||
import os, requests, time, re, sqlite3, flask_login, bcrypt, secrets
|
||||
|
||||
load_dotenv(".env")
|
||||
if os.path.exists(".env"):
|
||||
load_dotenv(".env")
|
||||
|
||||
if not os.environ["USE_HACKCLUB_AI"]:
|
||||
if not os.environ.get("USE_HACKCLUB_AI", True):
|
||||
gemini_client = Client()
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = os.environ["FLASK_SECRET_KEY"]
|
||||
app.secret_key = os.environ.get("FLASK_SECRET_KEY", secrets.token_hex(32))
|
||||
|
||||
login_manager = flask_login.LoginManager()
|
||||
login_manager.init_app(app)
|
||||
@@ -237,7 +238,7 @@ def register():
|
||||
return redirect(url_for("login"))
|
||||
|
||||
def ai_prompt(prompt):
|
||||
if os.environ["USE_HACKCLUB_AI"]:
|
||||
if os.environ.get("USE_HACKCLUB_AI", True):
|
||||
response = requests.post(
|
||||
"https://ai.hackclub.com/chat/completions",
|
||||
headers={"Content-Type": "application/json"},
|
||||
|
||||
17
docker-compose.yml
Normal file
17
docker-compose.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
debt-by-ai:
|
||||
build: .
|
||||
container_name: debt-by-ai
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
HOST: "0.0.0.0"
|
||||
PORT: "8080"
|
||||
DEBUG_MODE: "false"
|
||||
USE_HACKCLUB_AI: "false"
|
||||
GEMINI_API_KEY: "changeme"
|
||||
FLASK_SECRET_KEY: "changeme"
|
||||
DB_FILE: "/app/data.db"
|
||||
volumes:
|
||||
- ./data.db:/app/data.db
|
||||
restart: unless-stopped
|
||||
92
requirements.txt
Normal file
92
requirements.txt
Normal file
@@ -0,0 +1,92 @@
|
||||
# This file was autogenerated by uv via the following command:
|
||||
# uv pip compile pyproject.toml -o requirements.txt
|
||||
annotated-types==0.7.0
|
||||
# via pydantic
|
||||
anyio==4.11.0
|
||||
# via
|
||||
# google-genai
|
||||
# httpx
|
||||
bcrypt==5.0.0
|
||||
# via debt-by-ai (pyproject.toml)
|
||||
blinker==1.9.0
|
||||
# via flask
|
||||
cachetools==6.2.0
|
||||
# via google-auth
|
||||
certifi==2025.8.3
|
||||
# via
|
||||
# httpcore
|
||||
# httpx
|
||||
# requests
|
||||
charset-normalizer==3.4.3
|
||||
# via requests
|
||||
click==8.3.0
|
||||
# via flask
|
||||
flask==3.1.2
|
||||
# via
|
||||
# debt-by-ai (pyproject.toml)
|
||||
# flask-login
|
||||
flask-login==0.6.3
|
||||
# via debt-by-ai (pyproject.toml)
|
||||
google-auth==2.41.1
|
||||
# via google-genai
|
||||
google-genai==1.41.0
|
||||
# via debt-by-ai (pyproject.toml)
|
||||
h11==0.16.0
|
||||
# via httpcore
|
||||
httpcore==1.0.9
|
||||
# via httpx
|
||||
httpx==0.28.1
|
||||
# via google-genai
|
||||
idna==3.10
|
||||
# via
|
||||
# anyio
|
||||
# httpx
|
||||
# requests
|
||||
itsdangerous==2.2.0
|
||||
# via flask
|
||||
jinja2==3.1.6
|
||||
# via flask
|
||||
markupsafe==3.0.3
|
||||
# via
|
||||
# flask
|
||||
# jinja2
|
||||
# werkzeug
|
||||
pyasn1==0.6.1
|
||||
# via
|
||||
# pyasn1-modules
|
||||
# rsa
|
||||
pyasn1-modules==0.4.2
|
||||
# via google-auth
|
||||
pydantic==2.11.9
|
||||
# via google-genai
|
||||
pydantic-core==2.33.2
|
||||
# via pydantic
|
||||
python-dotenv==1.1.1
|
||||
# via debt-by-ai (pyproject.toml)
|
||||
requests==2.32.5
|
||||
# via
|
||||
# debt-by-ai (pyproject.toml)
|
||||
# google-genai
|
||||
rsa==4.9.1
|
||||
# via google-auth
|
||||
sniffio==1.3.1
|
||||
# via anyio
|
||||
tenacity==9.1.2
|
||||
# via google-genai
|
||||
typing-extensions==4.15.0
|
||||
# via
|
||||
# anyio
|
||||
# google-genai
|
||||
# pydantic
|
||||
# pydantic-core
|
||||
# typing-inspection
|
||||
typing-inspection==0.4.2
|
||||
# via pydantic
|
||||
urllib3==2.5.0
|
||||
# via requests
|
||||
websockets==15.0.1
|
||||
# via google-genai
|
||||
werkzeug==3.1.3
|
||||
# via
|
||||
# flask
|
||||
# flask-login
|
||||
Reference in New Issue
Block a user