From 1d2aea095167cb095e7cc18b6e60d346c80a0046 Mon Sep 17 00:00:00 2001 From: Dan Helfman Date: Fri, 24 Apr 2026 11:54:37 -0700 Subject: [PATCH] Add a development script for upgrading pinned dependencies. --- NEWS | 1 + binary_requirements.in | 19 +++++++++++++ binary_requirements.txt | 40 ++++++++++++++------------- scripts/upgrade-dependencies | 16 +++++++++++ test_requirements.in | 28 +++++++++++++++++++ test_requirements.txt | 52 +++++++++++++++++++----------------- 6 files changed, 112 insertions(+), 44 deletions(-) create mode 100644 binary_requirements.in create mode 100755 scripts/upgrade-dependencies create mode 100644 test_requirements.in diff --git a/NEWS b/NEWS index 73b6af0d..873596ee 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ comments on tickets. * For the MariaDB and MySQL database hooks, escape quotes in passwords when the "password_transport" option is "pipe". + * Add a development script for upgrading pinned dependencies. 2.1.5 * #1229: Document the permissions needed for the PostgreSQL database hook: diff --git a/binary_requirements.in b/binary_requirements.in new file mode 100644 index 00000000..985a50f8 --- /dev/null +++ b/binary_requirements.in @@ -0,0 +1,19 @@ +. +apprise +attrs +certifi +charset-normalizer +click +idna +jsonschema +jsonschema-specifications +markdown +oauthlib +packaging +pyyaml +referencing +requests +requests-oauthlib +rpds-py +ruamel-yaml +urllib3 diff --git a/binary_requirements.txt b/binary_requirements.txt index e164c95e..861b92dc 100644 --- a/binary_requirements.txt +++ b/binary_requirements.txt @@ -1,19 +1,21 @@ -. -apprise==1.9.9 -attrs==26.1.0 -certifi==2026.2.25 -charset-normalizer==3.4.6 -click==8.3.1 -idna==3.11 -jsonschema==4.26.0 -jsonschema-specifications==2025.9.1 -markdown==3.10.2 -oauthlib==3.3.1 -packaging==26.0 -pyyaml==6.0.3 -referencing==0.37.0 -requests==2.33.1 -requests-oauthlib==2.0.0 -rpds-py==0.30.0 -ruamel-yaml==0.19.1 -urllib3==2.6.3 +# This file was autogenerated by uv via the following command: +# uv pip compile --annotation-style line binary_requirements.in -o binary_requirements.txt +apprise==1.9.9 # via -r binary_requirements.in +attrs==26.1.0 # via jsonschema, referencing, -r binary_requirements.in +. # via -r binary_requirements.in +certifi==2026.4.22 # via apprise, requests, -r binary_requirements.in +charset-normalizer==3.4.7 # via requests, -r binary_requirements.in +click==8.3.3 # via apprise, -r binary_requirements.in +idna==3.13 # via requests, -r binary_requirements.in +jsonschema==4.26.0 # via borgmatic, -r binary_requirements.in +jsonschema-specifications==2025.9.1 # via jsonschema, -r binary_requirements.in +markdown==3.10.2 # via apprise, -r binary_requirements.in +oauthlib==3.3.1 # via requests-oauthlib, -r binary_requirements.in +packaging==26.1 # via borgmatic, -r binary_requirements.in +pyyaml==6.0.3 # via apprise, -r binary_requirements.in +referencing==0.37.0 # via jsonschema, jsonschema-specifications, -r binary_requirements.in +requests==2.33.1 # via apprise, borgmatic, requests-oauthlib, -r binary_requirements.in +requests-oauthlib==2.0.0 # via apprise, -r binary_requirements.in +rpds-py==0.30.0 # via jsonschema, referencing, -r binary_requirements.in +ruamel-yaml==0.19.1 # via borgmatic, -r binary_requirements.in +urllib3==2.6.3 # via requests, -r binary_requirements.in diff --git a/scripts/upgrade-dependencies b/scripts/upgrade-dependencies new file mode 100755 index 00000000..67b7360d --- /dev/null +++ b/scripts/upgrade-dependencies @@ -0,0 +1,16 @@ +#!/bin/bash + +set -eou pipefail + +uv pip compile --quiet --upgrade --annotation-style line test_requirements.in -o test_requirements.txt +uv pip compile --quiet --upgrade --annotation-style line binary_requirements.in -o binary_requirements.txt + +# Carry forward certain packages with version ranges instead of absolute pins. This is because these +# packages are a pain to compile, and pre-built wheels available on pypi may not be available for +# pinned versions on particular platforms. +while IFS= read -r package_line; do + package_name=$(echo "$package_line" | cut -d ">" -f 1) + sed -i "s/^$package_name==.*/$package_line/" test_requirements.txt +done <<< $(grep ">" test_requirements.in) + +sed -i "s/was autogenerated/was (mostly) autogenerated/" test_requirements.txt diff --git a/test_requirements.in b/test_requirements.in new file mode 100644 index 00000000..922cfd98 --- /dev/null +++ b/test_requirements.in @@ -0,0 +1,28 @@ +apprise +attrs +certifi +charset-normalizer +click>=8.1.8 +codespell +coverage +flexmock +idna +iniconfig +jsonschema +jsonschema-specifications +markdown +oauthlib +packaging +pluggy +pygments +pytest +pytest-cov +pytest-timeout +pyyaml>5.0.0 +referencing +requests +requests-oauthlib +rpds-py +ruamel-yaml>0.15.0 +typing-extensions +urllib3 diff --git a/test_requirements.txt b/test_requirements.txt index 9cfb2238..a3c47b9c 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -1,28 +1,30 @@ -apprise==1.9.9 -attrs==26.1.0 -certifi==2026.2.25 -charset-normalizer==3.4.6 +# This file was (mostly) autogenerated by uv via the following command: +# uv pip compile --annotation-style line test_requirements.in -o test_requirements.txt +apprise==1.9.9 # via -r test_requirements.in +attrs==26.1.0 # via jsonschema, referencing, -r test_requirements.in +certifi==2026.4.22 # via apprise, requests, -r test_requirements.in +charset-normalizer==3.4.7 # via requests, -r test_requirements.in click>=8.1.8 -codespell==2.4.2 -coverage==7.13.5 -flexmock==0.13.0 -idna==3.11 -iniconfig==2.3.0 -jsonschema==4.26.0 -jsonschema-specifications==2025.9.1 -markdown==3.10.2 -oauthlib==3.3.1 -packaging==26.0 -pluggy==1.6.0 -pygments==2.20.0 -pytest==9.0.2 -pytest-cov==7.1.0 -pytest-timeout==2.4.0 +codespell==2.4.2 # via -r test_requirements.in +coverage==7.13.5 # via pytest-cov, -r test_requirements.in +flexmock==0.13.0 # via -r test_requirements.in +idna==3.13 # via requests, -r test_requirements.in +iniconfig==2.3.0 # via pytest, -r test_requirements.in +jsonschema==4.26.0 # via -r test_requirements.in +jsonschema-specifications==2025.9.1 # via jsonschema, -r test_requirements.in +markdown==3.10.2 # via apprise, -r test_requirements.in +oauthlib==3.3.1 # via requests-oauthlib, -r test_requirements.in +packaging==26.1 # via pytest, -r test_requirements.in +pluggy==1.6.0 # via pytest, pytest-cov, -r test_requirements.in +pygments==2.20.0 # via pytest, -r test_requirements.in +pytest==9.0.3 # via pytest-cov, pytest-timeout, -r test_requirements.in +pytest-cov==7.1.0 # via -r test_requirements.in +pytest-timeout==2.4.0 # via -r test_requirements.in pyyaml>5.0.0 -referencing==0.37.0 -requests==2.33.1 -requests-oauthlib==2.0.0 -rpds-py==0.30.0 +referencing==0.37.0 # via jsonschema, jsonschema-specifications, -r test_requirements.in +requests==2.33.1 # via apprise, requests-oauthlib, -r test_requirements.in +requests-oauthlib==2.0.0 # via apprise, -r test_requirements.in +rpds-py==0.30.0 # via jsonschema, referencing, -r test_requirements.in ruamel-yaml>0.15.0 -typing-extensions==4.15.0 -urllib3==2.6.3 +typing-extensions==4.15.0 # via -r test_requirements.in +urllib3==2.6.3 # via requests, -r test_requirements.in