BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//pretalx//programme.europython.eu//europython-2026//talk//BX77EE
BEGIN:VTIMEZONE
TZID:CET
BEGIN:STANDARD
DTSTART:20001029T040000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20000326T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:pretalx-europython-2026-BX77EE@programme.europython.eu
DTSTART;TZID=CET:20260717T125500
DTEND;TZID=CET:20260717T135500
DESCRIPTION:Maintaining CI/CD configurations across dozens of Python projec
 ts means copying the same `tox` invocations\, Python version matrices\, an
 d error-handling logic into every repository. This poster presents five ar
 chitectural patterns from the `reusable-tox.yml` project that eliminate th
 is duplication by applying familiar software engineering principles to Git
 Hub Actions workflows.\n\nEach pattern is illustrated with a before/after 
 YAML comparison and a Python code analogy\, making the design decisions im
 mediately recognizable to Python developers:\n\n* *Singular inputs* — ac
 cepting one Python version per workflow call instead of JSON arrays. Like 
 writing `def run(version: str)` instead of `def run(versions: list[str])` 
 — simpler to reason about\, test\, and compose via caller-side matrix st
 rategies.\n* *Caller-side matrix strategy* — separating "what to test" (
 the calling workflow's job) from "how to test" (the reusable workflow's jo
 b). The same Separation of Concerns you'd apply to Python modules.\n* *Thr
 ee-phase execution* — splitting `tox` runs into environment preparation 
 (`tox --notest`)\, main execution\, and debug rerun on failure. Like Unix 
 pipelines — each stage transforms data through a single responsibility\,
  improving cacheability and error diagnosis.\n* *Composite action hooks* 
 — providing extension points where projects inject custom setup logic wi
 thout modifying shared infrastructure\, discovered automatically via `hash
 Files()`. The Dependency Injection pattern applied to CI/CD.\n* *Explicit 
 over implicit* — refusing to auto-detect `tox` environments or infer con
 figuration. Predictable and debuggable beats magical and surprising.\n\nTh
 e poster includes a "Which pattern solves your problem?" decision flowchar
 t and a QR code linking to the open-source repository with ready-to-fork t
 emplates.\n\nBorn from maintaining dozens of Python projects including aio
 http\, CherryPy\, and pip-tools\, these patterns treat CI/CD with the same
  architectural rigor as application code.
DTSTAMP:20260524T130702Z
LOCATION:Poster Hall A
SUMMARY:reusable-tox.yml: Five Patterns to Eliminate CI/CD Boilerplate - Sv
 iatoslav Sydorenko (Святослав Сидоренко)
URL:https://programme.europython.eu/europython-2026/talk/BX77EE/
END:VEVENT
END:VCALENDAR
