Skip to content

CI: restore Python 3.14 matrix leg once josepy/certbot stack is upgraded #103

@fabriziosalmi

Description

@fabriziosalmi

Context

CI previously ran the test matrix against both Python 3.12 (production via Dockerfile) and Python 3.14. The 3.14 leg was removed in commit c10f87f's follow-up because the pinned runtime stack is not 3.14-compatible:

  • certbot==2.10.0 pulls acme==3.3.0 which requires josepy<2, so we are stuck on josepy==1.13.0.
  • josepy==1.13.0 raises at class definition time under Python 3.14's PEP 649 deferred annotation evaluation:
    ValueError: Field `alg` in JSONObject `Header` has no type annotation.
    
  • Dockerfile ships on Python 3.12 so production is unaffected.

Running a CI leg against a stack we don't support would either (a) silently skip the tests that actually hit the import, or (b) fail forever. Neither is useful.

Why this is not just a CI cleanup

The underlying stack upgrade is the same one gating Path A of the 'Zero-Domain Certificates' analysis (IP certificates / Let's Encrypt shortlived profile), which requires certbot>=5.3. That upgrade cascades into:

  • certbot==2.10.05.x
  • acme + josepy → matching 5.x-compatible versions
  • ~23 certbot-dns-* plugins pinned to ==2.10.0 matching certbot — each one needs a version that works against certbot 5.x, or a replacement
  • Full DNS provider matrix re-test

So this issue and Path A share the same upgrade surface.

Definition of done

  • .github/workflows/ci.yml matrix includes a Python 3.14 leg again.
  • The 3.14 leg is green end-to-end against the (upgraded) requirements pins.
  • tests/test_edgedns_credentials_format.py::test_certbot_credentials_parser_reads_all_four_keys runs (not skipped) on both 3.12 and 3.14.
  • Dockerfile may or may not switch to 3.14 at the same time — decision taken in this issue.

Link

  • Removal commit / reasoning: see follow-up commit after c10f87f
  • Path A spike analysis: private notes (summary: certbot 5.3+ required for IP certs, same upgrade blocker)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions