This is not a one-line base-image bump. Ubuntu 26.04 (Resolute) ships Python 3.14 and does not publish python3.12 in the archive. Both Dockerfiles apt-get install python3.12. abc_be also hardcodes /opt/venv/lib/python3.12/site-packages/ in the django-cryptography patch.
requires-python is >=3.12 in both projects, so 3.14 is allowed. abc_worker's uv.lock already has a python_full_version >= '3.14' resolution marker.
Work
1. GIS/abc_be
FROM ubuntu:26.04
Install python3.14, python3.14-venv, python3.14-dev (plus the existing curl, build-essential, libpq-dev)
Point the django-cryptography sed at the 3.14 site-packages path
Confirm uv sync --frozen still resolves on 3.14 (relock if the lock has no 3.14 marker)
2. GIS/abc_worker (covers abc_voice)
Same base and Python package change
Keep tesseract-ocr and uv sync --frozen --no-dev --extra av
abc_voice has no separate Dockerfile
3. Verify
Rebuild beta on one host (./scripts/deploy.sh adama --app abc_be --env beta, then abc_worker and abc_voice). Inside the container, /etc/os-release should be Ubuntu 26.04 and python should be 3.14. Smoke the three beta URLs before rolling the other app hosts.
Out of scope
Django apps (company_site, dta_service, scha, chat_backend, monica_site, url_shortening_service, college_craft) use python:3.12-slim and run Debian 13, not Ubuntu
WordPress (wordpress:6-apache) is Debian 13
web-static nginx and LiveKit are Alpine
Alloy (grafana/alloy:v1.7.1) reports Ubuntu 24.04.1 inside the upstream image. Base OS is not ours to change
Acceptance criteria
abc_be and abc_worker Dockerfiles use ubuntu:26.04 and install Python 3.14 from the Ubuntu archive
abc_be django-cryptography patch targets the 3.14 site-packages path
Beta abc_be, abc_worker, and abc_voice containers on one host report Ubuntu 26.04 and start cleanly
No deploy change required in this repo beyond rebuilding from the updated app repos
## Summary
App hosts already run Ubuntu 26.04 LTS. The only deployed containers that are Ubuntu are still **24.04**:
| Container | Image source | Running OS (adama) |
|-----------|--------------|--------------------|
| `abc_be` beta | [GIS/abc_be](https://git.aimloperations.com/GIS/abc_be) `Dockerfile` `FROM ubuntu:24.04` | Ubuntu 24.04.5 LTS |
| `abc_worker` beta | [GIS/abc_worker](https://git.aimloperations.com/GIS/abc_worker) `Dockerfile` `FROM ubuntu:24.04` | Ubuntu 24.04.5 LTS |
| `abc_voice` beta | same `abc_worker` image (`docker-compose.voice.yml`) | Ubuntu 24.04.5 LTS |
This is not a one-line base-image bump. Ubuntu 26.04 (Resolute) ships **Python 3.14** and does not publish `python3.12` in the archive. Both Dockerfiles `apt-get install python3.12`. `abc_be` also hardcodes `/opt/venv/lib/python3.12/site-packages/` in the django-cryptography patch.
`requires-python` is `>=3.12` in both projects, so 3.14 is allowed. `abc_worker`'s `uv.lock` already has a `python_full_version >= '3.14'` resolution marker.
---
## Work
### 1. GIS/abc_be
- `FROM ubuntu:26.04`
- Install `python3.14`, `python3.14-venv`, `python3.14-dev` (plus the existing `curl`, `build-essential`, `libpq-dev`)
- Point the django-cryptography `sed` at the 3.14 site-packages path
- Confirm `uv sync --frozen` still resolves on 3.14 (relock if the lock has no 3.14 marker)
### 2. GIS/abc_worker (covers abc_voice)
- Same base and Python package change
- Keep `tesseract-ocr` and `uv sync --frozen --no-dev --extra av`
- `abc_voice` has no separate Dockerfile
### 3. Verify
Rebuild beta on one host (`./scripts/deploy.sh adama --app abc_be --env beta`, then `abc_worker` and `abc_voice`). Inside the container, `/etc/os-release` should be Ubuntu 26.04 and `python` should be 3.14. Smoke the three beta URLs before rolling the other app hosts.
---
## Out of scope
- Django apps (`company_site`, `dta_service`, `scha`, `chat_backend`, `monica_site`, `url_shortening_service`, `college_craft`) use `python:3.12-slim` and run **Debian 13**, not Ubuntu
- WordPress (`wordpress:6-apache`) is Debian 13
- `web-static` nginx and LiveKit are Alpine
- Alloy (`grafana/alloy:v1.7.1`) reports Ubuntu 24.04.1 inside the upstream image. Base OS is not ours to change
---
## Acceptance criteria
- [ ] `abc_be` and `abc_worker` Dockerfiles use `ubuntu:26.04` and install Python 3.14 from the Ubuntu archive
- [ ] `abc_be` django-cryptography patch targets the 3.14 site-packages path
- [ ] Beta `abc_be`, `abc_worker`, and `abc_voice` containers on one host report Ubuntu 26.04 and start cleanly
- [ ] No deploy change required in this repo beyond rebuilding from the updated app repos
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
App hosts already run Ubuntu 26.04 LTS. The only deployed containers that are Ubuntu are still 24.04:
abc_bebetaDockerfileFROM ubuntu:24.04abc_workerbetaDockerfileFROM ubuntu:24.04abc_voicebetaabc_workerimage (docker-compose.voice.yml)This is not a one-line base-image bump. Ubuntu 26.04 (Resolute) ships Python 3.14 and does not publish
python3.12in the archive. Both Dockerfilesapt-get install python3.12.abc_bealso hardcodes/opt/venv/lib/python3.12/site-packages/in the django-cryptography patch.requires-pythonis>=3.12in both projects, so 3.14 is allowed.abc_worker'suv.lockalready has apython_full_version >= '3.14'resolution marker.Work
1. GIS/abc_be
FROM ubuntu:26.04python3.14,python3.14-venv,python3.14-dev(plus the existingcurl,build-essential,libpq-dev)sedat the 3.14 site-packages pathuv sync --frozenstill resolves on 3.14 (relock if the lock has no 3.14 marker)2. GIS/abc_worker (covers abc_voice)
tesseract-ocranduv sync --frozen --no-dev --extra avabc_voicehas no separate Dockerfile3. Verify
Rebuild beta on one host (
./scripts/deploy.sh adama --app abc_be --env beta, thenabc_workerandabc_voice). Inside the container,/etc/os-releaseshould be Ubuntu 26.04 andpythonshould be 3.14. Smoke the three beta URLs before rolling the other app hosts.Out of scope
company_site,dta_service,scha,chat_backend,monica_site,url_shortening_service,college_craft) usepython:3.12-slimand run Debian 13, not Ubuntuwordpress:6-apache) is Debian 13web-staticnginx and LiveKit are Alpinegrafana/alloy:v1.7.1) reports Ubuntu 24.04.1 inside the upstream image. Base OS is not ours to changeAcceptance criteria
abc_beandabc_workerDockerfiles useubuntu:26.04and install Python 3.14 from the Ubuntu archiveabc_bedjango-cryptography patch targets the 3.14 site-packages pathabc_be,abc_worker, andabc_voicecontainers on one host report Ubuntu 26.04 and start cleanly