diff --git a/CHANGELOG.md b/CHANGELOG.md index 36d0294f..abde177d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.3] - 2026-09-25 + +### Fixed + +- The Docker container no longer crashes on startup. SQLAlchemy 2.1 broke startup, so it is now capped below 2.1. + +### Changed + +- The Docker image now installs the exact dependency versions from `uv.lock`, so new upstream releases can't break a build. + ## [0.5.2] - 2026-09-25 ### Fixed diff --git a/Dockerfile b/Dockerfile index 48c09ec1..db3d4989 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,11 +20,15 @@ WORKDIR /app RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential curl gosu tzdata \ && rm -rf /var/lib/apt/lists/* -COPY pyproject.toml README.md CHANGELOG.md ./ +COPY --from=ghcr.io/astral-sh/uv:0.12.19 /uv /usr/local/bin/uv +COPY pyproject.toml uv.lock README.md CHANGELOG.md ./ +# install the exact versions from uv.lock so new upstream releases can't break the image +RUN uv export --frozen --no-dev --no-emit-project -o /tmp/requirements.txt \ + && uv pip install --system --no-cache -r /tmp/requirements.txt \ + && rm /tmp/requirements.txt COPY backend ./backend COPY docker/entrypoint.sh /usr/local/bin/docker-entrypoint.sh -RUN python -m pip install --upgrade pip \ - && python -m pip install . +RUN uv pip install --system --no-cache --no-deps . RUN chmod +x /usr/local/bin/docker-entrypoint.sh \ && mkdir -p /app/data/database /app/data/logs /app/data/static/avatars EXPOSE 8000 diff --git a/backend/api/main.py b/backend/api/main.py index cc498416..fbf83b11 100644 --- a/backend/api/main.py +++ b/backend/api/main.py @@ -190,7 +190,7 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: fastapi_app = FastAPI( title="reclaimerr API", description="Media server cleanup and deletion management tool", - version="0.5.2", + version="0.5.3", lifespan=lifespan, ) diff --git a/backend/core/__version__.py b/backend/core/__version__.py index 9c1f394c..8aaeb84c 100644 --- a/backend/core/__version__.py +++ b/backend/core/__version__.py @@ -3,4 +3,4 @@ program_name = "Reclaimerr" program_url = "https://github.com/jessielw/reclaimerr" -__version__ = VersionInfo.parse("0.5.2") +__version__ = VersionInfo.parse("0.5.3") diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4c83cc75..31577a47 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "reclaimerr-web", - "version": "0.5.2", + "version": "0.5.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "reclaimerr-web", - "version": "0.5.2", + "version": "0.5.3", "dependencies": { "@tailwindcss/typography": "^0.5.19", "pathe": "^2.0.3", diff --git a/frontend/package.json b/frontend/package.json index 0b1526db..162d9ee7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "reclaimerr-web", - "version": "0.5.2", + "version": "0.5.3", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/src/lib/version.ts b/frontend/src/lib/version.ts index 5c8df723..1880c6c9 100644 --- a/frontend/src/lib/version.ts +++ b/frontend/src/lib/version.ts @@ -1 +1 @@ -export const VERSION = "0.5.2"; +export const VERSION = "0.5.3"; diff --git a/pyproject.toml b/pyproject.toml index c54a109d..82f5990b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "reclaimerr" -version = "0.5.2" +version = "0.5.3" description = "Backend of Reclaimerr" readme = "README.md" requires-python = ">=3.11,<3.14" @@ -23,7 +23,7 @@ dependencies = [ "python-dotenv>=1.2.3", "semver>=3.1.0", "slowapi>=0.1.10", - "sqlalchemy[asyncio]>=2.0.54", + "sqlalchemy[asyncio]>=2.0.54,<2.1", "tenacity>=9.1.4", ] diff --git a/uv.lock b/uv.lock index 23a18c4c..a26a60c9 100644 --- a/uv.lock +++ b/uv.lock @@ -1559,7 +1559,7 @@ wheels = [ [[package]] name = "reclaimerr" -version = "0.5.2" +version = "0.5.3" source = { editable = "." } dependencies = [ { name = "aiosqlite" }, @@ -1631,7 +1631,7 @@ requires-dist = [ { name = "python-iso639", specifier = ">=2026.7.23" }, { name = "semver", specifier = ">=3.1.0" }, { name = "slowapi", specifier = ">=0.1.10" }, - { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.54" }, + { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.54,<2.1" }, { name = "tenacity", specifier = ">=9.1.4" }, { name = "uvicorn", marker = "extra == 'desktop'", specifier = ">=0.53.0" }, { name = "zensical", marker = "extra == 'docs'", specifier = ">=0.0.63" },