Skip to content

chore: update base image to HAProxy 3.4 LTS and track LTS in Renovate - #117

Merged
kyteinsky merged 1 commit into
mainfrom
chore/haproxy-3.4-lts-renovate
Sep 2, 2026
Merged

chore: update base image to HAProxy 3.4 LTS and track LTS in Renovate#117
kyteinsky merged 1 commit into
mainfrom
chore/haproxy-3.4-lts-renovate

Conversation

@szaimen

@szaimen szaimen commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Moves the production and debugging images from HAProxy 3.2.22 → 3.4.4 on Alpine 3.24, and configures Renovate to keep the base image on LTS branches going forward.

3.4 is the current LTS branch, supported until 2031-Q2; 3.2 reaches EOL in 2030-Q2.

Why not 3.3

3.3.14 is published and newer than our previous pin, but 3.3 is a non-LTS branch that stops receiving fixes around 2027-Q1. Moving to it would have shortened our support horizon rather than extending it.

Branch Status Supported until
3.4 LTS 2031-Q2
3.3 stable (non-LTS) 2027-Q1
3.2 (previous) LTS 2030-Q2
3.1 unmaintained

SPOE verification

The pinned haproxy-python-spoa commit (f00f3f7) is unchanged — it is still upstream HEAD, so there was nothing to co-bump. That pin exists because HAProxy 3.2+ resets SPOP connections when a frame arrives split across TCP segments, so a two-minor jump is exactly the change that could break it.

Verified locally against 3.4.4:

  • Both images build clean; HAProxy self-reports long-term supported branch - will stop receiving fixes around Q2 2031.
  • Container starts and reports healthy; SPOA, FRP, and HAProxy all come up.
  • Traffic driven through the exapps frontend returns SPOE verdicts for request paths up to 6 KB and headers up to 7 KB — multi-segment frames, the case the single-write pin addresses.
  • No SPOP frame, mux, or reset errors in the logs. Agent process alive and healthcheck passing afterward.

Runtime deps resolve as expected: haproxyspoa, pydantic 2.13.4, aiohttp 3.13.5, and FRP 0.65.0 from Alpine.

Renovate

  • config:baseconfig:recommended (the old preset is deprecated).
  • Base image constrained to LTS branches only. HAProxy ships LTS on even minors, so the rule matches that shape rather than a fixed version ceiling — a <3.5 cap would have let a future non-LTS branch through on the next cycle. Regex tested against real published tags: allows 3.4/3.2/3.0/2.8 and 3.10.x, rejects 3.3/3.1.
  • Minor/major bumps are split into their own PR labelled needs-spoe-testing, since those are the ones that can change SPOP mux behaviour. Patch bumps stay routine.
  • GitHub Actions bumps grouped into a single PR.

Notes for review

  • renovate-config-validator was not run — it needs Node 18+ and the local environment has v16. The JSON parses and the fields match the documented schema, but CI or a reviewer with a newer Node should confirm.
  • Unrelated and left for a follow-up: ARG FRP_VERSION=0.61.1 in README.md is stale, since the image now ships FRP 0.65.0.

Move the production and debugging images from HAProxy 3.2.22 to 3.4.4
on Alpine 3.24. 3.4 is the current LTS branch, supported until 2031-Q2,
where 3.2 reaches EOL in 2030-Q2.

Deliberately skip 3.3: it is a non-LTS branch that stops receiving fixes
around 2027-Q1, so it would be a downgrade in support horizon.

The pinned haproxy-python-spoa commit is unchanged and remains upstream
HEAD. Verified against 3.4.4 by building both images and driving traffic
through the exapps frontend: the SPOE agent returns verdicts for request
paths up to 6 KB and headers up to 7 KB (multi-segment frames, which the
pinned single-write commit exists to handle) with no SPOP frame, mux, or
reset errors, and the container reports healthy.

Configure Renovate to keep the base image on LTS branches only. HAProxy
ships LTS on even minors, so match that shape rather than a fixed version
ceiling, which would have let a future non-LTS branch through. Minor and
major bumps are split into their own PR labelled needs-spoe-testing, since
those are the ones that can change SPOP mux behaviour.

Also replace the deprecated config:base preset with config:recommended and
group GitHub Actions bumps into a single PR.

Signed-off-by: Simon L. <szaimen@e.mail.de>
@szaimen szaimen added the enhancement New feature or request label Sep 2, 2026
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 66387c97-3479-43c5-a50e-88b98abdf3f8

📥 Commits

Reviewing files that changed from the base of the PR and between 185217e and 5e04305.

📒 Files selected for processing (3)
  • .github/renovate.json
  • Dockerfile
  • development/debugging/Dockerfile

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change upgrades the primary and debugging HAProxy images from 3.2.22 to 3.4.4 on Alpine 3.24. It updates the SPOA compatibility comment for HAProxy 3.4 LTS. Renovate now uses the recommended preset and defines rules for even-minor HAProxy LTS versions, HAProxy branch upgrades, and grouped GitHub Actions updates.

Merge Risk: ⚪ Minimal · up to 5e043

This PR updates the HAProxy base images to the 3.4 LTS branch and adjusts Renovate tracking without a supplied concrete correctness, security, availability, or deployment risk; no actionable merge-blocking risk remains after normal checks and review.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main changes: upgrading to HAProxy 3.4 LTS and configuring Renovate to track LTS versions.
Description check ✅ Passed The description directly explains the HAProxy image upgrade, Renovate configuration, SPOE verification, and related review notes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (3 skipped: 3 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kyteinsky
kyteinsky merged commit 91abb6e into main Sep 2, 2026
17 checks passed
@kyteinsky
kyteinsky deleted the chore/haproxy-3.4-lts-renovate branch September 2, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants