diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 490ba29f..496c9587 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -16,11 +16,11 @@ jobs:
fail-fast: false
matrix:
python-version:
- - '3.7'
- '3.8'
- '3.9'
- '3.10'
- '3.11'
+ - '3.12'
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e87e0406..bf9c1b8b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@ The format mostly follows [Keep a Changelog](http://keepachangelog.com/en/1.0.0/
## UNRELEASED
+### Changed
+
+- Remove EOL'd Python 3.7 (new minimum requirement is Python 3.8), add Python 3.12 testing
+
### Fixed
- Fix documentation for watching Github tags and releases, again (#723)
diff --git a/Dockerfile b/Dockerfile
index a3ea7a98..6558ff64 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# https://hub.docker.com/_/python
-FROM python:3.11.0-alpine3.17
+FROM python:3.12.0-alpine3.18
# Optional python modules for additional functionality
# https://urlwatch.readthedocs.io/en/latest/dependencies.html#optional-packages
diff --git a/docs/source/dependencies.rst b/docs/source/dependencies.rst
index b19d9ce1..bf4a1727 100644
--- a/docs/source/dependencies.rst
+++ b/docs/source/dependencies.rst
@@ -10,7 +10,7 @@ additional packages -- however, those are not needed to run urlwatch.
Mandatory Packages
------------------
-- Python 3.7 or newer
+- Python 3.8 or newer
- `PyYAML `__
- `minidb `__
- `requests `__
diff --git a/setup.py b/setup.py
index 97e2c7a4..8868fdc5 100644
--- a/setup.py
+++ b/setup.py
@@ -11,8 +11,8 @@
m = dict(re.findall("\n__([a-z]+)__ = '([^']+)'", main_py))
docs = re.findall('"""(.*?)"""', main_py, re.DOTALL)
-if sys.version_info < (3, 7):
- sys.exit('urlwatch requires Python 3.7 or newer')
+if sys.version_info < (3, 8):
+ sys.exit('urlwatch requires Python 3.8 or newer')
m['name'] = 'urlwatch'
m['author'], m['author_email'] = re.match(r'(.*) <(.*)>', m['author']).groups()