Repository navigation
Add Ubuntu 26.04 packages and release workflows for ProxySQL 3.0+ - #6518
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📜 Recent review details
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
There was a problem hiding this comment.
26 issues found across 17 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="INSTALL.md">
<violation number="1" location="INSTALL.md:158">
P3: The target list in the Docker build section still omits `ubuntu26`, although the new paragraph below documents it. Add `ubuntu26` to that list so the two sections agree.</violation>
<violation number="2" location="INSTALL.md:158">
P2: These tier commands assume a 3.0.x version base; `PROXYSQL40=1` from `v4.0.12`, for example, produces `5.0.12`. Specify a `v3.0.x` release tag so users do not build an unintended version.</violation>
<violation number="3" location="INSTALL.md:169">
P3: The debug package does not append `-dbg` to the base filename: it is `proxysql_<version>-dbg-ubuntu26_<architecture>.deb`, while Clang uses `...-ubuntu26-clang_...`. List the exact variant patterns to avoid misleading download searches.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-genai-clang.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-genai-clang.yml:124">
P2: The asset lookup is not paginated, so on a release with more than 30 assets an existing file can be missed. The re-upload then fails instead of replacing it. Add `--paginate` to this `gh api` call, as the release lookup in `init_release` does.</violation>
</file>
<file name=".github/workflows/CI-package-arm64-ubuntu26-genai.yml">
<violation number="1" location=".github/workflows/CI-package-arm64-ubuntu26-genai.yml:19">
P3: This comment is inaccurate: the workflow-level `concurrency` block still applies to `init_release`, so the job does have a concurrency group. Either correct the comment or move the group to the job level if the intent is to exempt init.</violation>
<violation number="2" location=".github/workflows/CI-package-arm64-ubuntu26-genai.yml:67">
P2: The release-create call discards stderr (`2>&1`) and ignores its exit status, so the real API error is never logged. Drop the stderr redirect and keep `|| true` so the `gh` error appears in the job log when creation fails.</violation>
<violation number="3" location=".github/workflows/CI-package-arm64-ubuntu26-genai.yml:128">
P3: The existing asset is deleted before the replacement upload starts, so a failed upload leaves the draft release without that package. Upload the new file first, or accept that a rerun is required to restore it.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-dbg.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-dbg.yml:124">
P2: The existing-asset lookup only reads the first page of release assets (30 by default), so replacing an asset that sits beyond that page fails the upload with a duplicate-name error. Add `--paginate` to the `gh api` call so every page is searched. The same lookup is copied into the sibling package workflows.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-v31-clang.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-v31-clang.yml:124">
P2: The asset lookup does not paginate, so an existing asset past the first 30 is missed. Re-running the upload then fails with 'already_exists' instead of replacing the asset. Add `--paginate` to the `gh api .../assets` call, as the release lookup in `init_release` already does.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-genai.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-genai.yml:56">
P2: The find-or-create loop can split workers across different drafts. A worker breaks on the first matching draft it sees, but a lower-id draft from a concurrent workflow may not be visible yet. Re-check after creation until the lowest id stays stable, or fail if more than one draft exists, so all workflows converge on one release.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-genai-dbg.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-genai-dbg.yml:42">
P3: `${{ github.ref_name }}` is expanded straight into the shell script, so a branch name containing `$(...)` would execute. Pass it through an `env:` variable and reference `"$BRANCH"` instead.</violation>
<violation number="2" location=".github/workflows/CI-package-amd64-ubuntu26-genai-dbg.yml:124">
P2: The existing-asset lookup only reads the first page of assets (30 by default), so re-runs fail once the shared release has more than 30 assets. Add `--paginate` so the delete-and-replace branch finds the asset.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-v31-dbg.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-v31-dbg.yml:52">
P2: The final create in attempt 6 is never verified, so the job can fail after successfully creating the draft. Run one more lookup after the loop, or make the loop search again after the last create, before reporting the error.</violation>
<violation number="2" location=".github/workflows/CI-package-amd64-ubuntu26-v31-dbg.yml:67">
P3: The `2>&1 || true` hides why release creation failed, so the only signal is the generic error after six attempts. Keep stderr visible so the log shows the API error.</violation>
<violation number="3" location=".github/workflows/CI-package-amd64-ubuntu26-v31-dbg.yml:124">
P2: The existing-asset lookup reads only the first page of the assets API (30 items by default). On a release that already has more assets, re-runs will miss the old file and the POST will fail on the duplicate name. Add `--paginate` to this call.</violation>
</file>
<file name=".github/workflows/CI-package-arm64-ubuntu26.yml">
<violation number="1" location=".github/workflows/CI-package-arm64-ubuntu26.yml:42">
P1: This inserts the selected ref name into the Bash script, so a crafted branch name such as `$(...)` executes in the step holding `GITHUB_TOKEN`. Pass `github.ref_name` through an environment variable and use the quoted variable here and in the v31/genai workflows.</violation>
<violation number="2" location=".github/workflows/CI-package-arm64-ubuntu26.yml:67">
P3: The create call sends stdout and stderr to `/dev/null` and ignores failures, so when all six attempts fail the log has no API error. Keep stderr visible and log the failed attempt.</violation>
</file>
<file name=".github/workflows/CI-package-arm64-ubuntu26-v31.yml">
<violation number="1" location=".github/workflows/CI-package-arm64-ubuntu26-v31.yml:124">
P2: The asset lookup does not paginate, so the replace-on-rerun path fails once the shared release has more than 30 assets. Add `--paginate` so existing assets on later pages are found and deleted before upload.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-clang.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-clang.yml:67">
P3: The create call sends its stderr to /dev/null, so a permission or validation failure leaves no trace in the log. Remove the redirect so gh's error is printed. The loop also never re-lists after its final create, which is a minor logic gap.</violation>
<violation number="2" location=".github/workflows/CI-package-amd64-ubuntu26-clang.yml:124">
P2: The existing-asset lookup reads only the first page of the release's assets (30 by default). Once the release holds more than 30 assets, a re-run cannot find the asset to replace, and the duplicate upload fails. Add `--paginate` to the lookup.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26-v31.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26-v31.yml:53">
P2: A failing `gh api` lookup exits the step under `set -e` before the retry loop runs. Guard the substitution, for example with `|| true` or an explicit status check, so the loop can retry.</violation>
<violation number="2" location=".github/workflows/CI-package-amd64-ubuntu26-v31.yml:63">
P2: The final iteration creates a draft but never looks it up, so the step can fail after a successful create. Re-list drafts after the loop, or skip the create on the last attempt.</violation>
<violation number="3" location=".github/workflows/CI-package-amd64-ubuntu26-v31.yml:124">
P2: The existing-asset lookup is not paginated, so it only sees the first 30 assets on the shared release. Re-running for the same SHA then fails with a 422 duplicate-name error for any asset past that page. Add `--paginate` to this call.</violation>
</file>
<file name=".github/workflows/CI-package-amd64-ubuntu26.yml">
<violation number="1" location=".github/workflows/CI-package-amd64-ubuntu26.yml:42">
P1: Dispatching on a branch like `x$(id)` executes the substitution in the init job, where `GITHUB_TOKEN` has write scope; read the ref from an environment variable instead.</violation>
<violation number="2" location=".github/workflows/CI-package-amd64-ubuntu26.yml:67">
P2: The create call sends its error output to `/dev/null`, so a failing draft creation leaves no trace in the job log. Keep stderr visible and log the failed attempt so the root cause can be diagnosed.</violation>
<violation number="3" location=".github/workflows/CI-package-amd64-ubuntu26.yml:124">
P2: This lookup reads only the first 30 release assets, so rerunning a job whose asset is on a later page misses it and the replacement upload fails on the duplicate name; add `--paginate`.</violation>
</file>
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
| run: | | ||
| set -euo pipefail | ||
| GIT_DESC=$(git describe --long --abbrev=7 --tags) | ||
| TAG_NAME="${{ github.ref_name }}-head" |
There was a problem hiding this comment.
P1: This inserts the selected ref name into the Bash script, so a crafted branch name such as $(...) executes in the step holding GITHUB_TOKEN. Pass github.ref_name through an environment variable and use the quoted variable here and in the v31/genai workflows.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-arm64-ubuntu26.yml, line 42:
<comment>This inserts the selected ref name into the Bash script, so a crafted branch name such as `$(...)` executes in the step holding `GITHUB_TOKEN`. Pass `github.ref_name` through an environment variable and use the quoted variable here and in the v31/genai workflows.</comment>
<file context>
@@ -0,0 +1,152 @@
+ run: |
+ set -euo pipefail
+ GIT_DESC=$(git describe --long --abbrev=7 --tags)
+ TAG_NAME="${{ github.ref_name }}-head"
+ RELEASE_NAME="${TAG_NAME} - ${GIT_DESC}"
+ REPO="${{ github.repository }}"
</file context>
| run: | | ||
| set -euo pipefail | ||
| GIT_DESC=$(git describe --long --abbrev=7 --tags) | ||
| TAG_NAME="${{ github.ref_name }}-head" |
There was a problem hiding this comment.
P1: Dispatching on a branch like x$(id) executes the substitution in the init job, where GITHUB_TOKEN has write scope; read the ref from an environment variable instead.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26.yml, line 42:
<comment>Dispatching on a branch like `x$(id)` executes the substitution in the init job, where `GITHUB_TOKEN` has write scope; read the ref from an environment variable instead.</comment>
<file context>
@@ -0,0 +1,152 @@
+ run: |
+ set -euo pipefail
+ GIT_DESC=$(git describe --long --abbrev=7 --tags)
+ TAG_NAME="${{ github.ref_name }}-head"
+ RELEASE_NAME="${TAG_NAME} - ${GIT_DESC}"
+ REPO="${{ github.repository }}"
</file context>
| EXISTING=$(gh api "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \ | ||
| --jq ".[] | select(.name==\"${FNAME}\") | .id" | head -1) |
There was a problem hiding this comment.
P2: The asset lookup is not paginated, so on a release with more than 30 assets an existing file can be missed. The re-upload then fails instead of replacing it. Add --paginate to this gh api call, as the release lookup in init_release does.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26-genai-clang.yml, line 124:
<comment>The asset lookup is not paginated, so on a release with more than 30 assets an existing file can be missed. The re-upload then fails instead of replacing it. Add `--paginate` to this `gh api` call, as the release lookup in `init_release` does.</comment>
<file context>
@@ -0,0 +1,152 @@
+ uploaded=0
+ for f in binaries/*[mb] binaries/*.id-hash; do
+ FNAME=$(basename "$f")
+ EXISTING=$(gh api "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \
+ --jq ".[] | select(.name==\"${FNAME}\") | .id" | head -1)
+ if [ -n "$EXISTING" ]; then
</file context>
| EXISTING=$(gh api "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \ | |
| --jq ".[] | select(.name==\"${FNAME}\") | .id" | head -1) | |
| EXISTING=$(gh api --paginate "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \ | |
| --jq ".[] | select(.name==\"${FNAME}\") | .id" | head -1) |
| -f tag_name="${TAG_NAME}" \ | ||
| -f name="${RELEASE_NAME}" \ | ||
| -f target_commitish="${SHA}" \ | ||
| -F draft=true -F prerelease=true >/dev/null 2>&1 || true |
There was a problem hiding this comment.
P2: The release-create call discards stderr (2>&1) and ignores its exit status, so the real API error is never logged. Drop the stderr redirect and keep || true so the gh error appears in the job log when creation fails.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-arm64-ubuntu26-genai.yml, line 67:
<comment>The release-create call discards stderr (`2>&1`) and ignores its exit status, so the real API error is never logged. Drop the stderr redirect and keep `|| true` so the `gh` error appears in the job log when creation fails.</comment>
<file context>
@@ -0,0 +1,152 @@
+ -f tag_name="${TAG_NAME}" \
+ -f name="${RELEASE_NAME}" \
+ -f target_commitish="${SHA}" \
+ -F draft=true -F prerelease=true >/dev/null 2>&1 || true
+ sleep $(( (RANDOM % 4) + 2 ))
+ done
</file context>
| uploaded=0 | ||
| for f in binaries/*[mb] binaries/*.id-hash; do | ||
| FNAME=$(basename "$f") | ||
| EXISTING=$(gh api "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \ |
There was a problem hiding this comment.
P2: The existing-asset lookup only reads the first page of release assets (30 by default), so replacing an asset that sits beyond that page fails the upload with a duplicate-name error. Add --paginate to the gh api call so every page is searched. The same lookup is copied into the sibling package workflows.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26-dbg.yml, line 124:
<comment>The existing-asset lookup only reads the first page of release assets (30 by default), so replacing an asset that sits beyond that page fails the upload with a duplicate-name error. Add `--paginate` to the `gh api` call so every page is searched. The same lookup is copied into the sibling package workflows.</comment>
<file context>
@@ -0,0 +1,152 @@
+ uploaded=0
+ for f in binaries/*[mb] binaries/*.id-hash; do
+ FNAME=$(basename "$f")
+ EXISTING=$(gh api "repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" \
+ --jq ".[] | select(.name==\"${FNAME}\") | .id" | head -1)
+ if [ -n "$EXISTING" ]; then
</file context>
| run: | | ||
| set -euo pipefail | ||
| GIT_DESC=$(git describe --long --abbrev=7 --tags) | ||
| TAG_NAME="${{ github.ref_name }}-head" |
There was a problem hiding this comment.
P3: ${{ github.ref_name }} is expanded straight into the shell script, so a branch name containing $(...) would execute. Pass it through an env: variable and reference "$BRANCH" instead.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26-genai-dbg.yml, line 42:
<comment>`${{ github.ref_name }}` is expanded straight into the shell script, so a branch name containing `$(...)` would execute. Pass it through an `env:` variable and reference `"$BRANCH"` instead.</comment>
<file context>
@@ -0,0 +1,152 @@
+ run: |
+ set -euo pipefail
+ GIT_DESC=$(git describe --long --abbrev=7 --tags)
+ TAG_NAME="${{ github.ref_name }}-head"
+ RELEASE_NAME="${TAG_NAME} - ${GIT_DESC}"
+ REPO="${{ github.repository }}"
</file context>
| -f tag_name="${TAG_NAME}" \ | ||
| -f name="${RELEASE_NAME}" \ | ||
| -f target_commitish="${SHA}" \ | ||
| -F draft=true -F prerelease=true >/dev/null 2>&1 || true |
There was a problem hiding this comment.
P3: The 2>&1 || true hides why release creation failed, so the only signal is the generic error after six attempts. Keep stderr visible so the log shows the API error.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26-v31-dbg.yml, line 67:
<comment>The `2>&1 || true` hides why release creation failed, so the only signal is the generic error after six attempts. Keep stderr visible so the log shows the API error.</comment>
<file context>
@@ -0,0 +1,152 @@
+ -f tag_name="${TAG_NAME}" \
+ -f name="${RELEASE_NAME}" \
+ -f target_commitish="${SHA}" \
+ -F draft=true -F prerelease=true >/dev/null 2>&1 || true
+ sleep $(( (RANDOM % 4) + 2 ))
+ done
</file context>
| -f tag_name="${TAG_NAME}" \ | ||
| -f name="${RELEASE_NAME}" \ | ||
| -f target_commitish="${SHA}" \ | ||
| -F draft=true -F prerelease=true >/dev/null 2>&1 || true |
There was a problem hiding this comment.
P3: The create call sends stdout and stderr to /dev/null and ignores failures, so when all six attempts fail the log has no API error. Keep stderr visible and log the failed attempt.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-arm64-ubuntu26.yml, line 67:
<comment>The create call sends stdout and stderr to `/dev/null` and ignores failures, so when all six attempts fail the log has no API error. Keep stderr visible and log the failed attempt.</comment>
<file context>
@@ -0,0 +1,152 @@
+ -f tag_name="${TAG_NAME}" \
+ -f name="${RELEASE_NAME}" \
+ -f target_commitish="${SHA}" \
+ -F draft=true -F prerelease=true >/dev/null 2>&1 || true
+ sleep $(( (RANDOM % 4) + 2 ))
+ done
</file context>
| -f tag_name="${TAG_NAME}" \ | ||
| -f name="${RELEASE_NAME}" \ | ||
| -f target_commitish="${SHA}" \ | ||
| -F draft=true -F prerelease=true >/dev/null 2>&1 || true |
There was a problem hiding this comment.
P3: The create call sends its stderr to /dev/null, so a permission or validation failure leaves no trace in the log. Remove the redirect so gh's error is printed. The loop also never re-lists after its final create, which is a minor logic gap.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .github/workflows/CI-package-amd64-ubuntu26-clang.yml, line 67:
<comment>The create call sends its stderr to /dev/null, so a permission or validation failure leaves no trace in the log. Remove the redirect so gh's error is printed. The loop also never re-lists after its final create, which is a minor logic gap.</comment>
<file context>
@@ -0,0 +1,152 @@
+ -f tag_name="${TAG_NAME}" \
+ -f name="${RELEASE_NAME}" \
+ -f target_commitish="${SHA}" \
+ -F draft=true -F prerelease=true >/dev/null 2>&1 || true
+ sleep $(( (RANDOM % 4) + 2 ))
+ done
</file context>
| are named `proxysql_<version>-ubuntu26_<architecture>.deb` (with `-clang` or | ||
| `-dbg` for the corresponding variants). |
There was a problem hiding this comment.
P3: The debug package does not append -dbg to the base filename: it is proxysql_<version>-dbg-ubuntu26_<architecture>.deb, while Clang uses ...-ubuntu26-clang_.... List the exact variant patterns to avoid misleading download searches.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At INSTALL.md, line 169:
<comment>The debug package does not append `-dbg` to the base filename: it is `proxysql_<version>-dbg-ubuntu26_<architecture>.deb`, while Clang uses `...-ubuntu26-clang_...`. List the exact variant patterns to avoid misleading download searches.</comment>
<file context>
@@ -151,6 +155,27 @@ Install the package as usual on the target system.
+
+The `ubuntu26-clang` and `ubuntu26-dbg` targets build Clang and debug packages
+on AMD64. ARM64 release packages use `ubuntu26` on an ARM64 host. Packages
+are named `proxysql_<version>-ubuntu26_<architecture>.deb` (with `-clang` or
+`-dbg` for the corresponding variants).
+
</file context>
| are named `proxysql_<version>-ubuntu26_<architecture>.deb` (with `-clang` or | |
| `-dbg` for the corresponding variants). | |
| are named `proxysql_<version>-ubuntu26_<architecture>.deb`; Clang and debug variants use | |
| `proxysql_<version>-ubuntu26-clang_<architecture>.deb` and `proxysql_<version>-dbg-ubuntu26_<architecture>.deb`, respectively. |
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## v3.0 #6518 +/- ##
==========================================
+ Coverage 65.77% 66.64% +0.86%
==========================================
Files 754 755 +1
Lines 217143 217934 +791
Branches 55085 55302 +217
==========================================
+ Hits 142824 145234 +2410
+ Misses 48454 46315 -2139
- Partials 25865 26385 +520
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|




Fixes #6517.
Add native Ubuntu 26.04 (resolute) packaging starting with ProxySQL 3.0.12, 3.1.12, and 4.0.12. Support is limited to ProxySQL 3.0 and later; no 2.x backport is included.
The change adds
ubuntu26,ubuntu26-clang, andubuntu26-dbgbuild targets and Compose services, includes Ubuntu 26 in the AMD64/ARM64 package aggregates, and verifies package installation using the cleanubuntu:26.04image. Installation documentation records the supported versions and tier flags.Package release workflows are included for all three product tiers:
Each workflow supports manual dispatch, finds or creates the branch's draft release, builds the selected package, performs the existing CI package-install verification, and uploads the package and executable checksum. They follow the existing Ubuntu 24 workflow pattern and retain the current runner versions. The automatic package-build workflow also discovers Ubuntu 26 through the updated Makefile aggregates.
Dependency: ProxySQL/docker-images#21 adds the corresponding GCC/Clang builders. Publish
proxysql/packaging:build-ubuntu26-v4.0.0andproxysql/packaging:build-clang-ubuntu26-v4.0.0for the required architectures before running the new release workflows.Validation:
proxysql_3.0.12-ubuntu26_amd64.deb, installed it on a clean Ubuntu 26.04 container, and passed the binary startup/ELF smoke test. Local validation used host networking for container downloads and a local Compose override to expose worktree Git metadata.git diff --checkpasses.ARM64 execution and full 3.1/4.0 package builds have not been run locally. Builder-image publication and repository package publication remain release operations.
Summary by cubic
Adds native Ubuntu 26.04 (resolute) package builds and release workflows for the ProxySQL 3.0, 3.1, and 4.0 lines, starting at 3.0.12, 3.1.12, and 4.0.12. Ubuntu 26.04 packages are only built for 3.0 and later; no 2.x backport is included.
Release workflows
INSTALL.md, the AMD64/ARM64 package aggregates,docker-compose.yml, and the package-install verification mapping.Dependency
proxysql/packaging:build-ubuntu26-v4.0.0andbuild-clang-ubuntu26-v4.0.0) fromProxySQL/docker-imagesPR ProxySQL needs GCC 4.7+ #21 to be published for AMD64 and ARM64 before these workflows are run.Written for commit 86f5358. Summary will update on new commits.
Summary by CodeRabbit
New Features
Documentation
Tests