diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 93128d4..7c2a3d1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ // README at: https://github.com/devcontainers/templates/tree/main/src/python { "name": "Python 3", - "image": "mcr.microsoft.com/devcontainers/python:3.11", + "image": "mcr.microsoft.com/devcontainers/python:3.12", "features": { "ghcr.io/devcontainers/features/node:1": {} }, diff --git a/README.md b/README.md index 16a21cc..3117944 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Small improvements, bugfixes and documentation improvements are always welcome. The application is built using the Django web framework. You can get started by checking out the excellent [Django docs](https://docs.djangoproject.com/en/4.1/). The `bookmarks` folder contains the actual bookmark application, `siteroot` is the Django root application. Other than that the code should be self-explanatory / standard Django stuff 🙂. ### Prerequisites -- Python 3.10 +- Python 3.12 - Node.js ### Setup @@ -105,7 +105,7 @@ The frontend is now available under http://localhost:8000 Run all tests with pytest: ``` -pytest +make test ``` ### Formatting diff --git a/bookmarks/tests/test_bookmark_details_modal.py b/bookmarks/tests/test_bookmark_details_modal.py index 291d149..f924ae8 100644 --- a/bookmarks/tests/test_bookmark_details_modal.py +++ b/bookmarks/tests/test_bookmark_details_modal.py @@ -522,8 +522,7 @@ class BookmarkDetailsModalTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin soup = self.get_index_details_modal(bookmark) edit_link = soup.find("a", string="Edit") self.assertIsNotNone(edit_link) - details_url = reverse("bookmarks:index") + f"?details={bookmark.id}" - expected_url = "/bookmarks/1/edit?return_url=/bookmarks%3Fdetails%3D1" + expected_url = f"/bookmarks/{bookmark.id}/edit?return_url=/bookmarks%3Fdetails%3D{bookmark.id}" self.assertEqual(expected_url, edit_link["href"]) def test_delete_button(self): diff --git a/docker/alpine.Dockerfile b/docker/alpine.Dockerfile index eeb214b..3e2166b 100644 --- a/docker/alpine.Dockerfile +++ b/docker/alpine.Dockerfile @@ -10,8 +10,7 @@ COPY bookmarks/styles ./bookmarks/styles RUN npm run build -# Use 3.11 for now, as django4-background-tasks doesn't work with 3.12 yet -FROM python:3.11.8-alpine3.19 AS python-base +FROM python:3.12.6-alpine3.20 AS python-base # Add required packages # alpine-sdk linux-headers pkgconfig: build Python packages from source # libpq-dev: build Postgres client from source @@ -66,7 +65,7 @@ RUN wget https://www.sqlite.org/${SQLITE_RELEASE_YEAR}/sqlite-amalgamation-${SQL gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-uc icu-io` -o libicu.so -FROM python:3.11.8-alpine3.19 AS linkding +FROM python:3.12.6-alpine3.20 AS linkding LABEL org.opencontainers.image.source="https://github.com/sissbruecker/linkding" # install runtime dependencies RUN apk update && apk add bash curl icu libpq mailcap libssl3 diff --git a/docker/default.Dockerfile b/docker/default.Dockerfile index 409febc..113d616 100644 --- a/docker/default.Dockerfile +++ b/docker/default.Dockerfile @@ -10,8 +10,7 @@ COPY bookmarks/styles ./bookmarks/styles RUN npm run build -# Use 3.11 for now, as django4-background-tasks doesn't work with 3.12 yet -FROM python:3.11.8-slim-bookworm AS python-base +FROM python:3.12.6-slim-bookworm AS python-base # Add required packages # build-essential pkg-config: build Python packages from source # libpq-dev: build Postgres client from source @@ -68,7 +67,7 @@ RUN wget https://www.sqlite.org/${SQLITE_RELEASE_YEAR}/sqlite-amalgamation-${SQL gcc -fPIC -shared icu.c `pkg-config --libs --cflags icu-uc icu-io` -o libicu.so -FROM python:3.11.8-slim-bookworm as linkding +FROM python:3.12.6-slim-bookworm as linkding LABEL org.opencontainers.image.source="https://github.com/sissbruecker/linkding" RUN apt-get update && apt-get -y install mime-support libpq-dev libicu-dev libssl3 curl WORKDIR /etc/linkding diff --git a/requirements.dev.txt b/requirements.dev.txt index 0a3c137..2e61706 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -1,20 +1,20 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile requirements.dev.in # -asgiref==3.7.2 +asgiref==3.8.1 # via django -black==24.3.0 +black==24.8.0 # via -r requirements.dev.in click==8.1.7 # via black -coverage==7.4.1 +coverage==7.6.1 # via -r requirements.dev.in -django==5.0.8 +django==5.1.1 # via django-debug-toolbar -django-debug-toolbar==4.2.0 +django-debug-toolbar==4.4.6 # via -r requirements.dev.in execnet==2.1.1 # via pytest-xdist @@ -24,32 +24,32 @@ iniconfig==2.0.0 # via pytest mypy-extensions==1.0.0 # via black -packaging==23.2 +packaging==24.1 # via # black # pytest pathspec==0.12.1 # via black -platformdirs==4.1.0 +platformdirs==4.3.6 # via black -playwright==1.41.1 +playwright==1.47.0 # via -r requirements.dev.in -pluggy==1.4.0 +pluggy==1.5.0 # via pytest -pyee==11.0.1 +pyee==12.0.0 # via playwright -pytest==8.0.0 +pytest==8.3.3 # via # -r requirements.dev.in # pytest-django # pytest-xdist -pytest-django==4.7.0 +pytest-django==4.9.0 # via -r requirements.dev.in pytest-xdist==3.6.1 # via -r requirements.dev.in -sqlparse==0.5.0 +sqlparse==0.5.1 # via # django # django-debug-toolbar -typing-extensions==4.9.0 +typing-extensions==4.12.2 # via pyee diff --git a/requirements.txt b/requirements.txt index 8c358b1..5bd253d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile requirements.in # -asgiref==3.7.2 +asgiref==3.8.1 # via django beautifulsoup4==4.12.3 # via -r requirements.in @@ -12,22 +12,22 @@ bleach==6.1.0 # via -r requirements.in bleach-allowlist==1.0.3 # via -r requirements.in -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.16.0 +cffi==1.17.1 # via cryptography charset-normalizer==3.3.2 # via requests click==8.1.7 # via waybackpy -confusable-homoglyphs==3.2.0 +confusable-homoglyphs==3.3.1 # via django-registration -cryptography==42.0.5 +cryptography==43.0.1 # via # josepy # mozilla-django-oidc # pyopenssl -django==5.0.8 +django==5.1.1 # via # -r requirements.in # django-registration @@ -39,23 +39,23 @@ django-widget-tweaks==1.5.0 # via -r requirements.in djangorestframework==3.15.2 # via -r requirements.in -huey==2.5.0 +huey==2.5.1 # via -r requirements.in -idna==3.7 +idna==3.10 # via requests josepy==1.14.0 # via mozilla-django-oidc -markdown==3.5.2 +markdown==3.7 # via -r requirements.in mozilla-django-oidc==4.0.1 # via -r requirements.in psycopg2-binary==2.9.9 # via -r requirements.in -pycparser==2.21 +pycparser==2.22 # via cffi -pyopenssl==24.1.0 +pyopenssl==24.2.1 # via josepy -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 # via -r requirements.in requests==2.32.3 # via @@ -66,17 +66,17 @@ six==1.16.0 # via # bleach # python-dateutil -soupsieve==2.5 +soupsieve==2.6 # via beautifulsoup4 -sqlparse==0.5.0 +sqlparse==0.5.1 # via django supervisor==4.2.5 # via -r requirements.in -urllib3==2.2.2 +urllib3==2.2.3 # via # requests # waybackpy -uwsgi==2.0.23 +uwsgi==2.0.26 # via -r requirements.in waybackpy==3.0.6 # via -r requirements.in diff --git a/scripts/setup-oicd.sh b/scripts/setup-oicd.sh index cb3b2fd..c91b1bd 100644 --- a/scripts/setup-oicd.sh +++ b/scripts/setup-oicd.sh @@ -4,4 +4,5 @@ export OIDC_USE_PKCE=True export OIDC_OP_AUTHORIZATION_ENDPOINT=http://localhost:8080/oauth/v2/authorize export OIDC_OP_TOKEN_ENDPOINT=http://localhost:8080/oauth/v2/token export OIDC_OP_USER_ENDPOINT=http://localhost:8080/oidc/v1/userinfo -export OIDC_RP_CLIENT_ID=258574559115018243@linkding +export OIDC_OP_JWKS_ENDPOINT=http://localhost:8080/oauth/v2/keys +export OIDC_RP_CLIENT_ID=