Commit Graph

2669 Commits

Author SHA1 Message Date
dependabot[bot]
ea4920eddc build(deps): bump pyjwt from 2.12.1 to 2.13.0
Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.12.1 to 2.13.0.
- [Release notes](https://github.com/jpadilla/pyjwt/releases)
- [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0)

---
updated-dependencies:
- dependency-name: pyjwt
  dependency-version: 2.13.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-16 04:44:02 +00:00
Aleksandr Zainulgabidinov
32f47fed61 add time-to-beat stats to game details page (#1384)
* feat(igdb, app_tags, media_details): add time-to-beat stats to game details page

* test(Metadata, AppTagsTest): add tests for time-to-beat feature

* feat(seconds_to_duration): add rounding to nearest 5 minutes for durations under 30 minutes

* test(test_seconds_to_duration): update tests for new sub-30-minute rounding logic

* feat(igdb): united game() and get_time_to_beat() in one function via multiquery

* feat(settings.CACHES): bump cache version
2026-05-29 19:52:04 +02:00
FuzzyGrim
2f577bd82a bump version to 0.25.3 2026-05-25 23:23:51 +02:00
FuzzyGrim
dc7271e22c add user agent to openlibrary requests v0.25.3 2026-05-25 22:44:33 +02:00
dependabot[bot]
f78dc2704a build(deps): bump idna from 3.11 to 3.15 (#1452)
Bumps [idna](https://github.com/kjd/idna) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases)
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md)
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15)

---
updated-dependencies:
- dependency-name: idna
  dependency-version: '3.15'
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 22:34:04 +02:00
dependabot[bot]
cd1cd613ff build(deps): bump urllib3 from 2.6.3 to 2.7.0 (#1437)
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.3 to 2.7.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.6.3...2.7.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.7.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 22:32:53 +02:00
dependabot[bot]
4ee294a04c build(deps): update django-allauth[socialaccount] requirement (#1441)
Updates the requirements on [django-allauth[socialaccount]](https://github.com/sponsors/pennersr) to permit the latest version.
- [Commits](https://github.com/sponsors/pennersr/commits)

---
updated-dependencies:
- dependency-name: django-allauth[socialaccount]
  dependency-version: 65.16.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 22:32:35 +02:00
dependabot[bot]
868d6dde7a build(deps): update django-health-check[celery,redis] requirement (#1442)
Updates the requirements on [django-health-check[celery,redis]](https://github.com/codingjoe/django-health-check) to permit the latest version.
- [Release notes](https://github.com/codingjoe/django-health-check/releases)
- [Commits](https://github.com/codingjoe/django-health-check/compare/4.2.2...4.4.1)

---
updated-dependencies:
- dependency-name: django-health-check[celery,redis]
  dependency-version: 4.4.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 22:32:18 +02:00
dependabot[bot]
ee03636709 build(deps): update psycopg[binary,pool] requirement (#1443)
Updates the requirements on [psycopg[binary,pool]](https://github.com/psycopg/psycopg) to permit the latest version.
- [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst)
- [Commits](https://github.com/psycopg/psycopg/compare/3.3.3...3.3.4)

---
updated-dependencies:
- dependency-name: psycopg[binary,pool]
  dependency-version: 3.3.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-25 22:31:36 +02:00
FuzzyGrim
f6b2eb37f3 add pending answer stale workflow 2026-05-24 16:04:43 +02:00
FuzzyGrim
4614504e57 blur unseen episode titles 2026-05-24 15:04:33 +02:00
FuzzyGrim
c23f0e6c73 document yamtrack csv tv row ordering #1419 2026-05-24 14:08:32 +02:00
FuzzyGrim
f8763f5318 add tvdb series tmdb fallback for webhooks #767 2026-05-24 12:54:40 +02:00
FuzzyGrim
c7872dda85 add imdb fallback for tv webhooks #767 2026-05-24 12:19:58 +02:00
FuzzyGrim
2348f0c13b split webhook media processing by type 2026-05-24 11:13:30 +02:00
FuzzyGrim
156c6f6fa1 support abbreviated openlibrary publish dates #1334 2026-05-23 23:01:01 +02:00
FuzzyGrim
1c449bf535 handle provider network errors without responses 2026-05-23 22:59:10 +02:00
FuzzyGrim
69454ff6e2 fix anilist anime airing schedule #1369 2026-05-23 21:56:55 +02:00
FuzzyGrim
00a2467dbd validate hardcover api setting #1352 2026-05-23 17:03:16 +02:00
FuzzyGrim
3290c5e48a clarify jellyfin webhook event settings 2026-05-23 16:35:19 +02:00
FuzzyGrim
e51eedfa79 increase pr stale day 2026-05-23 16:03:50 +02:00
FuzzyGrim
0ec6aefa8c add stale issue close messaging 2026-05-23 15:59:32 +02:00
FuzzyGrim
881cc198f0 add stale issue and pr automation 2026-05-23 15:53:57 +02:00
FuzzyGrim
41b080b8bd clarify redis url for docker network collisions 2026-05-23 15:13:10 +02:00
FuzzyGrim
d6cbd46c3f organize integration settings tabs 2026-05-23 15:12:26 +02:00
FuzzyGrim
bd0b4f5b3b require episode item references 2026-05-23 14:01:52 +02:00
FuzzyGrim
088404efbe sync jellyfin mark played events 2026-05-23 13:48:47 +02:00
FuzzyGrim
be956ce994 fix some tests 2026-05-17 20:18:45 +02:00
FuzzyGrim
0300519742 fix season progress test coverage 2026-05-17 20:02:56 +02:00
Harshil Goel
40d21a2c6b Fix progress status of ongoing season (#1317)
* Fix progress status of ongoing season

* Fixed comment
2026-05-17 20:02:35 +02:00
FuzzyGrim
c32a39cc1c use same alpine version for builder as runtime image 2026-05-17 16:18:34 +02:00
FuzzyGrim
298042aef8 run pre-commit hooks with uv 2026-05-17 16:11:04 +02:00
FuzzyGrim
0774d48356 update lockfile project version 2026-05-17 16:05:01 +02:00
FuzzyGrim
36a3d0d8e1 update project python metadata 2026-05-17 16:02:03 +02:00
David Davis
ecd86524e4 Fix build-docs workflow: use concrete Python version (#1444)
The setup-uv action passes python-version through as UV_PYTHON, and uv
does not accept the '3.x' wildcard that actions/setup-python supports.
This caused 'uv sync' to fail with:

    error: No interpreter found for executable name `3.x` in managed
    installations or search path

Pin to '3.12' to match requires-python and the version used in
app-tests.yml.

Co-authored-by: David Davis <86290+daviddavis@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-05-17 15:18:38 +02:00
David Davis
e6765fa636 Migrate to uv (#1434)
* init uv project

* fix workflow for uv

* updated docs

* update dependabot to use uv

* lock python version

* fix python version

* update uv deps

* Address PR review feedback

- Match dependency versions to dev branch (Django 5.2.13, allauth 65.15.1,
  health-check 4.2.2 with [celery,redis] extras, ruff 0.15.10, fakeredis[lua])
- Remove unused django-decorator-include
- Restore single-line ruff ignore array (unrelated whitespace)
- Drop description/readme; mark as non-package via [tool.uv]
- Install supervisor via apk in Dockerfile
- Fix CI: use 'uv run playwright install'; drop unused --all-extras
- README: set `dynamic = ["version"]` to avoid declaring version

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Fix container startup after switch to uv base image

- Dockerfile: prepend /.venv/bin to PATH so python/gunicorn/celery
  resolve directly (entrypoint.sh and supervisord.conf invoke them by
  name).
- entrypoint.sh: drop hardcoded /usr/local/bin/ prefix for supervisord;
  apk installs it to /usr/bin/supervisord, so let PATH resolve it.
- uv.lock: regenerated after pyproject.toml switched to dynamic version.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Add mkdocs and supervisor as uv deps; lint pyproject.toml

- Add a 'docs' dependency group with mkdocs and its plugins; switch
  build-docs.yml to use uv and remove docs/requirements.txt.
- Add supervisor to project deps so it ships in /.venv/bin instead of
  via apk in the Docker image.
- Add validate-pyproject and pyproject-fmt as dev deps and pre-commit
  hooks; reformat pyproject.toml accordingly.
- Drop unused dynamic version metadata (app version comes from the
  VERSION env var, not package metadata).

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Move uv virtualenv into /yamtrack workdir

Set WORKDIR before copying pyproject.toml and uv.lock so the
uv-managed virtualenv is created at /yamtrack/.venv. Update PATH
accordingly and ignore .venv in .dockerignore.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Pin Python version to 3.12

Add .python-version so uv (and pyenv) consistently select the
same interpreter when creating the virtualenv.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Enable uv bytecode compilation in Docker image

Set UV_COMPILE_BYTECODE=1 so uv precompiles .pyc files during
'uv sync'. This trades a small build-time cost for faster
container/worker startup since Python doesn't have to compile
modules on first import.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Use multi-stage Docker build to slim the runtime image

Build the virtualenv with uv in a builder stage based on
ghcr.io/astral-sh/uv:python3.12-alpine, then copy /yamtrack/.venv
into a clean python:3.12-alpine final stage. The final image no
longer carries the uv binary or its build cache, and collectstatic
runs via 'python manage.py' since the venv is on PATH.

Set UV_LINK_MODE=copy in the builder so packages are copied (not
symlinked from a cache that the final stage will not see).

Reduces image size by roughly 150 MB in local testing.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Drop validate-pyproject and pyproject-fmt; revert pyproject formatting

Remove the validate-pyproject and pyproject-fmt pre-commit hooks
and dev dependencies, and revert the cosmetic pyproject.toml
formatting that pyproject-fmt had applied (e.g. nested
[tool.ruff.lint.*] tables and tight list spacing) to match the
dev branch style.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Pin Alpine version and preserve bytecode in Docker build

- Pin both builder and final stages to alpine3.21 for reproducibility
  and binary compatibility between the virtualenv and runtime image.
- Stop deleting __pycache__ after uv sync so the bytecode compiled via
  UV_COMPILE_BYTECODE=1 is actually shipped, giving faster startup and
  avoiding runtime compilation on read-only filesystems.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Add django-tailwind-cli for Tailwind integration

Replaces the standalone tailwindcss CLI workflow with django-tailwind-cli,
which downloads and manages the standalone Tailwind binary itself. The
output path (static/css/main.css) is preserved so base.html and the
production build are unchanged.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Split dev dependency group into lint and test

The dev group now includes both via include-group, preserving the existing
'uv sync' behavior while allowing lint-only or test-only installs.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Revert "Add django-tailwind-cli for Tailwind integration"

This reverts commit 3796e53e347b81784e69fa0328c4e3d35be90d55.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* Add back pinning version to `0.0.0`

Using `dynamic`, uv tries to build an egg every time dependencies are
added/removed.

* Switch docs group from mkdocs to zensical

Upstream migrated documentation tooling from mkdocs to zensical. Replace
the mkdocs-* plugins in the docs dependency group with zensical and the
squidfunk fork of mike that zensical expects.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

---------

Co-authored-by: Eddi <75438446+minerop5000@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: David Davis <86290+daviddavis@users.noreply.github.com>
2026-05-17 14:58:53 +02:00
FuzzyGrim
72a2a18637 migrate docs to zensical 2026-05-17 14:04:54 +02:00
FuzzyGrim
0f4330e2c5 update development documentation setup 2026-05-17 10:43:06 +02:00
FuzzyGrim
871815a7df limit hardcover search query without splitting words 2026-05-17 10:31:54 +02:00
David Davis
1b40244019 Add configurable week start day preference (#1364)
- Add WeekStartDayChoices model and week_start_day field to User
- Add week start day dropdown to preferences page with new week SVG icon
- Update statistics activity grid to respect week start day setting
- Update events calendar to respect week start day setting
- Dynamically render weekday labels in both statistics and calendar views

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-05-17 09:40:13 +02:00
David Davis
894337fe10 Refresh Item.image on details page when missing (#1432)
* refresh Item.image on details page when missing

The home page reads Item.image from the database, which is only written
when the Item is first created. The details page fetches metadata live
from the provider, so the two can drift out of sync — most visibly when
a TV season has no thumbnail at creation time and never updates after.

Add a helper that opportunistically refreshes Item.image whenever a
details view has freshly-fetched metadata and the stored image is empty
or IMG_NONE. Apply it to the primary item in media_details and
season_details, and to tracked items surfaced through related sections
(e.g. the seasons listed on a TV details page).

Fixes #1365.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

* address PR review: bulk_update + select_related

- enrich_items_with_user_data now collects items needing an image
  refresh and issues a single Item.objects.bulk_update at the end
  instead of one save per item. Lookup building was extracted to
  _build_user_media_lookup to keep complexity in check.
- filter_media_prefetch now select_relateds 'item' so accessing
  current_instance.item in the details views doesn't trigger an
  extra query.

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Davis <86290+daviddavis@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2026-05-17 00:20:54 +02:00
marph91
a055a8a52e Add an auto-login option (#1363)
* add an auto-login option

* apply review suggestions

* add tests for auto-login middleware

* only auto-login with active users

* document the new env variable `YAMTRACK_AUTO_LOGIN_USERNAME`

* fix auto login middleware tests

---------

Co-authored-by: FuzzyGrim <stromed_chariotman@aleeas.com>
2026-05-16 23:58:26 +02:00
FuzzyGrim
bec01e943d fix safari media form date clearing #1403 2026-05-16 11:56:48 +02:00
FuzzyGrim
3d952d92ab fix goodreads import provider error warnings #1362 2026-05-15 18:31:56 +02:00
FuzzyGrim
669a06996e fix hardcover search query length cap 2026-05-15 18:30:40 +02:00
FuzzyGrim
5e48f0d37d pin pygments for docs code blocks 2026-05-15 15:26:59 +02:00
FuzzyGrim
2fdd707720 document local test command 2026-05-15 15:14:08 +02:00
FuzzyGrim
105eda65ce pass git committers token to docs build 2026-05-15 14:45:11 +02:00
FuzzyGrim
32ec33d3d6 update default hardcover api 2026-05-15 13:09:14 +02:00
FuzzyGrim
b67eb6fec0 add local development docs page 2026-05-15 12:40:11 +02:00