2 Commits
v1.0.0 ... main

Author SHA1 Message Date
47a8d0201e refactor: Optimize Docker build with a multi-stage process and switch docker-compose to use a pre-built image.
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 9s
2026-03-21 23:05:53 +01:00
30dd61ec5d ci: add Gitea Actions workflow to build and push Docker images on tag pushes.
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 19s
2026-03-21 21:08:14 +01:00
3 changed files with 24 additions and 14 deletions

View File

@@ -20,7 +20,7 @@ jobs:
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ var.REGISTRY_USER }}
username: ${{ vars.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Extract version from tag

View File

@@ -1,25 +1,35 @@
FROM python:3.12-slim AS base
# --- Build stage ---
FROM python:3.12-slim AS builder
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
# Copy dependency files first for better layer caching
# Enable bytecode compilation for faster startup
ENV UV_COMPILE_BYTECODE=1
# Use copy mode (no hardlinks in containers)
ENV UV_LINK_MODE=copy
# Install dependencies first (cached if pyproject.toml unchanged)
COPY pyproject.toml uv.lock* ./
RUN uv sync --no-dev --no-install-project --frozen
# Install dependencies
RUN uv sync --no-dev --no-install-project
# Copy source code
# Copy source and install project
COPY src/ ./src/
RUN uv sync --no-dev --frozen
# Install the project itself
RUN uv sync --no-dev
# --- Runtime stage ---
FROM python:3.12-slim
# Create data directory
RUN mkdir -p /app/data
WORKDIR /app
# Copy the entire venv and project from builder
COPY --from=builder /app /app
# Add venv to PATH so we don't need uv at runtime
ENV PATH="/app/.venv/bin:$PATH"
ENV DATA_DIR=/app/data
CMD ["uv", "run", "python", "-m", "src.main"]
RUN mkdir -p /app/data
CMD ["rss-bot"]

View File

@@ -1,6 +1,6 @@
services:
rss-bot:
build: .
image: git.out.jafre.li/jafreli/updater:latest
container_name: rss-discord-bot
restart: unless-stopped
env_file: