From 91cee497a211d81182c671d619dae89e3d01c9ad Mon Sep 17 00:00:00 2001 From: thespad Date: Sun, 18 Jan 2026 10:52:46 +0000 Subject: [PATCH 1/3] Rebase to 3.23, pin playwright --- Dockerfile | 12 ++++++------ Dockerfile.aarch64 | 12 ++++++------ README.md | 1 + readme-vars.yml | 1 + 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index cc11920..e93c0d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine:3.22 +FROM ghcr.io/linuxserver/baseimage-alpine:3.23 ARG BUILD_DATE ARG VERSION @@ -48,16 +48,16 @@ RUN \ pip \ setuptools \ wheel && \ - pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ -r /app/changedetection/requirements.txt && \ - PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r /app/changedetection/requirements.txt && \ + # PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ + # | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + PLAYWRIGHT_PY_RELEASE="release-1.56" && \ git clone --depth 1 --branch "${PLAYWRIGHT_PY_RELEASE}" https://github.com/microsoft/playwright-python /tmp/playwright-python && \ cd /tmp/playwright-python && \ pip install -U --no-cache-dir . && \ rm -f /lsiopy/lib/python3.12/site-packages/playwright/driver/node && \ ln -s /usr/bin/node /lsiopy/lib/python3.12/site-packages/playwright/driver/node && \ - # Force UTF-8 encoding for browser steps to prevent exception - sed -i "s|xpath_element_js = importlib.resources.files(\"changedetectionio.content_fetchers.res\").joinpath('xpath_element_scraper.js').read_text()|xpath_element_js = importlib.resources.files(\"changedetectionio.content_fetchers.res\").joinpath('xpath_element_scraper.js').read_text(encoding='utf-8')|" /app/changedetection/changedetectionio/blueprint/browser_steps/browser_steps.py && \ + pybabel compile -d /app/changedetection/changedetectionio/translations && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ apk del --purge \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index aeae884..590d4b1 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.22 +FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.23 ARG BUILD_DATE ARG VERSION @@ -48,17 +48,17 @@ RUN \ pip \ setuptools \ wheel && \ - pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.22/ -r /app/changedetection/requirements.txt && \ + pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r /app/changedetection/requirements.txt && \ echo "**** install playwright ****" && \ - PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + # PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ + # | awk '/tag_name/{print $4;exit}' FS='[""]'); \ + PLAYWRIGHT_PY_RELEASE="release-1.56" && \ git clone --depth 1 --branch "${PLAYWRIGHT_PY_RELEASE}" https://github.com/microsoft/playwright-python /tmp/playwright-python && \ cd /tmp/playwright-python && \ pip install -U --no-cache-dir . && \ rm -f /lsiopy/lib/python3.12/site-packages/playwright/driver/node && \ ln -s /usr/bin/node /lsiopy/lib/python3.12/site-packages/playwright/driver/node && \ - # Force UTF-8 encoding for browser steps to prevent exception - sed -i "s|xpath_element_js = importlib.resources.files(\"changedetectionio.content_fetchers.res\").joinpath('xpath_element_scraper.js').read_text()|xpath_element_js = importlib.resources.files(\"changedetectionio.content_fetchers.res\").joinpath('xpath_element_scraper.js').read_text(encoding='utf-8')|" /app/changedetection/changedetectionio/blueprint/browser_steps/browser_steps.py && \ + pybabel compile -d /app/changedetection/changedetectionio/translations && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ apk del --purge \ diff --git a/README.md b/README.md index de422f5..0c45033 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions +* **18.01.26:** - Rebase to Alpine 3.23. Pin Playright to v1.56.1 * **05.07.25:** - Rebase to Alpine 3.22. * **19.12.24:** - Rebase to Alpine 3.21. * **31.05.24:** - Rebase to Alpine 3.20. diff --git a/readme-vars.yml b/readme-vars.yml index 723d5a0..2c0a109 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -95,6 +95,7 @@ init_diagram: | "changedetection.io:latest" <- Base Images # changelog changelogs: + - {date: "18.01.26:", desc: "Rebase to Alpine 3.23. Pin Playright to v1.56.1"} - {date: "05.07.25:", desc: "Rebase to Alpine 3.22."} - {date: "19.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "31.05.24:", desc: "Rebase to Alpine 3.20."} From 3bb28f8c4697921628cd9b4901964bdd297aaf2a Mon Sep 17 00:00:00 2001 From: thespad Date: Sun, 18 Jan 2026 10:53:28 +0000 Subject: [PATCH 2/3] Changelog typo --- readme-vars.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme-vars.yml b/readme-vars.yml index 2c0a109..2562c72 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -95,7 +95,7 @@ init_diagram: | "changedetection.io:latest" <- Base Images # changelog changelogs: - - {date: "18.01.26:", desc: "Rebase to Alpine 3.23. Pin Playright to v1.56.1"} + - {date: "18.01.26:", desc: "Rebase to Alpine 3.23. Pin Playright to v1.56"} - {date: "05.07.25:", desc: "Rebase to Alpine 3.22."} - {date: "19.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "31.05.24:", desc: "Rebase to Alpine 3.20."} From b184e341c427be177639f65ec4c1694565e8a3c8 Mon Sep 17 00:00:00 2001 From: thespad Date: Mon, 16 Feb 2026 21:57:15 +0000 Subject: [PATCH 3/3] Unpin playwright, remove wheel --- Dockerfile | 11 +++++------ Dockerfile.aarch64 | 11 +++++------ Jenkinsfile | 2 +- README.md | 4 ++-- readme-vars.yml | 2 +- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index e93c0d9..695b865 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,8 @@ ARG CHANGEDETECTION_RELEASE LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="thespad" -ENV PYTHONUNBUFFERED=1 +ENV PYTHONUNBUFFERED=1 \ + CRYPTOGRAPHY_DONT_BUILD_RUST=1 RUN \ apk add --update --no-cache --virtual=build-dependencies \ @@ -46,12 +47,10 @@ RUN \ python3 -m venv /lsiopy && \ pip install -U --no-cache-dir \ pip \ - setuptools \ - wheel && \ + setuptools && \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r /app/changedetection/requirements.txt && \ - # PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ - # | awk '/tag_name/{print $4;exit}' FS='[""]'); \ - PLAYWRIGHT_PY_RELEASE="release-1.56" && \ + PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ git clone --depth 1 --branch "${PLAYWRIGHT_PY_RELEASE}" https://github.com/microsoft/playwright-python /tmp/playwright-python && \ cd /tmp/playwright-python && \ pip install -U --no-cache-dir . && \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 590d4b1..9eb54ba 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -8,7 +8,8 @@ ARG CHANGEDETECTION_RELEASE LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="thespad" -ENV PYTHONUNBUFFERED=1 +ENV PYTHONUNBUFFERED=1 \ + CRYPTOGRAPHY_DONT_BUILD_RUST=1 RUN \ apk add --update --no-cache --virtual=build-dependencies \ @@ -46,13 +47,11 @@ RUN \ python3 -m venv /lsiopy && \ pip install -U --no-cache-dir \ pip \ - setuptools \ - wheel && \ + setuptools && \ pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.23/ -r /app/changedetection/requirements.txt && \ echo "**** install playwright ****" && \ - # PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ - # | awk '/tag_name/{print $4;exit}' FS='[""]'); \ - PLAYWRIGHT_PY_RELEASE="release-1.56" && \ + PLAYWRIGHT_PY_RELEASE=$(curl -sX GET "https://api.github.com/repos/microsoft/playwright-python/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ git clone --depth 1 --branch "${PLAYWRIGHT_PY_RELEASE}" https://github.com/microsoft/playwright-python /tmp/playwright-python && \ cd /tmp/playwright-python && \ pip install -U --no-cache-dir . && \ diff --git a/Jenkinsfile b/Jenkinsfile index a804316..540d35a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -293,7 +293,7 @@ pipeline { -v ${WORKSPACE}:/mnt \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \ - ghcr.io/linuxserver/baseimage-alpine:3 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ + ghcr.io/linuxserver/baseimage-alpine:3.23 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\ apk add --no-cache python3 && \ python3 -m venv /lsiopy && \ pip install --no-cache-dir -U pip && \ diff --git a/README.md b/README.md index 0c45033..d2051e5 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ This image can be run with a non-root user. For details please [read the docs](h To help you get started creating a container from this image you can either use docker-compose or the docker cli. >[!NOTE] ->Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided. +>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided. ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) @@ -292,7 +292,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 ## Versions -* **18.01.26:** - Rebase to Alpine 3.23. Pin Playright to v1.56.1 +* **18.01.26:** - Rebase to Alpine 3.23. * **05.07.25:** - Rebase to Alpine 3.22. * **19.12.24:** - Rebase to Alpine 3.21. * **31.05.24:** - Rebase to Alpine 3.20. diff --git a/readme-vars.yml b/readme-vars.yml index 2562c72..e595386 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -95,7 +95,7 @@ init_diagram: | "changedetection.io:latest" <- Base Images # changelog changelogs: - - {date: "18.01.26:", desc: "Rebase to Alpine 3.23. Pin Playright to v1.56"} + - {date: "18.02.26:", desc: "Rebase to Alpine 3.23."} - {date: "05.07.25:", desc: "Rebase to Alpine 3.22."} - {date: "19.12.24:", desc: "Rebase to Alpine 3.21."} - {date: "31.05.24:", desc: "Rebase to Alpine 3.20."}