Skip to content

Add explicit Delphi 13.2 Florence URL and guessing for future versions - #12

Merged
jimmckeeth merged 11 commits into
mainfrom
feat/future-version-support
Sep 22, 2026
Merged

jimmckeeth merged 11 commits into
mainfrom
feat/future-version-support

Conversation

@jimmckeeth

@jimmckeeth jimmckeeth commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Added Delphi 13.2 Florence, whose PAServer just went live at https://altd.embarcadero.com/releases/studio/37.0/132/LinuxPAServer37.0.tar.gz, and promote it to the default (37.0), following the repo's existing convention of moving the bare compiler alias to the newest point release.
  • Add 13.1 as its own explicit entry (previously the default).
  • Update README and help text to match.

URL guessing (try_guess_paserver_url)

Guessing logic (added in d8686a9) already predicts the correct flat {compiler}/{digits}/LinuxPAServer{compiler}.tar.gz with the assumption of future 13.x, 14.x, and 15.x versions.

CI Update

  • probes all hard coded PAServer URLs
  • Test installs the latest hard coded version on both Ubuntu and Red Hat
  • If URL guessing finds a newer version then it tests that too.

jimmckeeth and others added 3 commits June 23, 2026 21:33
When a numeric version is requested that isn't in the explicit case list,
probe candidate URLs based on Embarcadero's observed path patterns:

- Tokyo/Rio (19.0/20.0): PAServer/Release{N}/ for updates
- Sydney (21.0):         {N}/PAServer/ for updates
- Alexandria (22.0):     {digits}1/ then {digits}/ for updates
- Athens/Florence+:      {digits}/ then {digits}/{digits}1/

Probes are done with a HEAD request (curl -sI); the first 200 response
wins. Prints a warning so the user knows the URL was guessed rather than
verified. Falls through to the existing error path if no candidate hits.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delphi 13.2 has been released with PAServer at
https://altd.embarcadero.com/releases/studio/37.0/132/LinuxPAServer37.0.tar.gz
which matches the flat {digits}/ pattern the URL-guessing logic already
predicts for Athens/Florence-era releases. Add it as an explicit case
(following the existing convention of moving the bare compiler alias to
the newest point release) so it no longer relies on guessing, and shift
13.1 to its own explicit entry.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q3a4oiwydRpUbFEJaxbCQU
@jimmckeeth jimmckeeth changed the title Add explicit Delphi 13.2 Florence URL and update from main Add explicit Delphi 13.2 Florence URL and guessing for future versions Sep 22, 2026
@jimmckeeth
jimmckeeth requested a lite review from Copilot September 22, 2026 02:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

CI does not validate the new 13.2 URL and default configuration.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity

Open (1)
What changed in this PR

Updates the Delphi installer to make 13.2 Florence the default while preserving 13.1 support.

Changes:

  • Adds explicit 13.2 mapping and PAServer URL.
  • Updates version guessing and documentation.
  • Updates README and launch instructions.
File Summary
scripts/​SetupLinux4Delphi.sh Adds version mapping and URL-guessing logic; 13.2 CI coverage is still needed.
README.md Documents Delphi 13.2 as the default.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/SetupLinux4Delphi.sh
Copilot's review on PR #12 flagged that CI never validated the new
13.2 default because commit_test.yml hardcoded 13.1. Instead of
hand-maintaining that list, add a discover_versions job that greps
the script's own PRODUCT="..." entries, sorts them, and takes the
newest 5; ubuntu_test and rhel_test now run as a matrix over that
list. Adding a new explicit version to SetupLinux4Delphi.sh picks it
up in CI automatically.
Before Florence's release, the compiler-number-to-product mapping had
tracked 1:1 (19->20->21->22->23 for 10.2 through 12.x) until it jumped
+14 to 37.0 for 13.x. Since 14.0 is the plausible next release and
having to patch this table the moment it ships defeats the purpose of
guessing ahead of time, extend the mapping with 14.0->38.0 and
15.0->39.0, assuming the pre-jump +1-per-major pattern resumes.

This is explicitly labeled as unverified: probing still gates whether
the guess is actually used, and an extra warning fires whenever the
release codename is unknown, prompting a DocWiki double-check.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Unresolved critical and moderate findings affect ShellCheck validation, version handling, and downloader availability.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 2 High severity

Open (2)
Resolved since last review (1)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Use an available downloader before probing

scripts/​SetupLinux4Delphi.sh:303

This probe hard-codes curl before the package-manager branch installs dependencies, while the RHEL path guarantees wget but not curl. On a minimal supported host with only wget, the guess path cannot probe any candidate and returns Unknown version before installation; select the available downloader (or install curl before probing) instead.

Comment thread scripts/SetupLinux4Delphi.sh
Comment thread scripts/SetupLinux4Delphi.sh Outdated
jimmckeeth and others added 4 commits September 21, 2026 21:52
Running full docker installs for the 5 newest versions on both OSes
was overkill for what's really being validated. Replace it with:

- probe_urls: a cheap HEAD check against every hardcoded PASERVER_URL,
  independent of the install jobs, so a stale link is caught without
  needing a full install to notice.
- plan: installs/starts only the single newest hardcoded version, and
  additionally probes try_guess_paserver_url for the next minor/major
  version; if guessing finds a real not-yet-listed URL, that version
  is added to the test matrix too and flagged via a workflow warning
  so it gets added explicitly.

This drops the full-install job count from 5x2=10 down to typically
1-2 per OS, while still catching both dead links across the whole
table and a newly-released version the script hasn't been told about
yet.
Addresses two Copilot findings on PR #12:

- has_patch was set but never read (ShellCheck SC2034, fails the
  severity:error job). Now it gates a real check instead.
- For eras 11-15 (Alexandria/Athens/Florence/guessed future), a
  3-component input like "13.2.1" was silently probed as "13.2",
  since patch was discarded when building product/digits. These eras
  only ever ship as major.minor, unlike 10.x's Release1/2/3, so a
  3-component input for them is rejected outright instead of quietly
  resolving to a different version than what was typed.
Third Copilot finding on PR #12 (pre-existing, not introduced by this
branch): try_guess_paserver_url runs before the package-manager step
installs anything, so hardcoding curl meant a host with only wget (or
neither, yet) would hit "curl: command not found" under set -e and
abort the whole script instead of falling through to "Unknown
version". Mirror download_file's wget-then-curl fallback here too.
…ment

The URL-extraction regex matched any PASERVER_URL="..." assignment in
the script, including the literal `PASERVER_URL="$url"` line inside
try_guess_paserver_url()'s success path. That fed the literal string
"$url" to curl as a 21st "hardcoded URL", which always failed and
printed a useless "Broken PASERVER_URL (): $url" with no way to tell
it wasn't a real link.

Restrict the regex to actual http(s) literals, and also write failed
URLs to the job summary so a real failure is easy to spot instead of
only showing up as an inline ::error:: annotation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Three moderate issues remain in URL guessing and CI helper coverage.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 2 Medium severity

Open (2)
Resolved since last review (2)

Comment thread .github/workflows/commit_test.yml
Comment thread scripts/SetupLinux4Delphi.sh Outdated
jimmckeeth and others added 2 commits September 21, 2026 22:28
wget's -q flag suppressed --server-response output entirely, so the
guess probe never saw an HTTP status line and always fell through
(the curl branch was unreachable on hosts with wget, since it's
checked first). Drop -q; the existing awk filter already ignores the
non-HTTP-header noise this exposes.

test-local.ps1 still defaulted to 13.1 and claimed to match the CI
default, but CI now always targets whatever is newest (currently
13.2).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The default PARAM alias, the help text's [DEFAULT] marker, and
test-local.ps1's default -Version were three separate hardcoded
literals that all had to be bumped together whenever a new version
was promoted to default — exactly the kind of drift that got missed
going from 13.1 to 13.2.

Add KNOWN_VERSIONS (a plain array of the product versions already
covered by case branches) and compute LATEST_VERSION from it via
`sort -V | tail -1`. PARAM's default and the help text's [DEFAULT]
marker (via a new version_tag helper) both derive from that instead
of independent literals.

test-local.ps1 can't read a bash array directly, so it mirrors what
commit_test.yml's `plan` job already does: grep the script's own
PRODUCT="..." lines via WSL and sort -V for the newest one, falling
back to a literal only if WSL can't do the detection.

Document the extra KNOWN_VERSIONS/version_tag step in AGENTS.md's
version-mapping playbook so it isn't missed next time either.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Future-version guessing can fail on supported minimal hosts before a downloader is installed.

Review effort: Lite
Findings: None

Resolved since last review (2)

@jimmckeeth
jimmckeeth merged commit 136cfd0 into main Sep 22, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants