Skip to content

CAMEL-24761: camel-jbang - cache the Camel to Quarkus platform mapping - #27115

Open
Brijesh-Thakkar wants to merge 4 commits into
apache:mainfrom
Brijesh-Thakkar:CAMEL-24761-quarkus-platform-cache
Open

Brijesh-Thakkar wants to merge 4 commits into
apache:mainfrom
Brijesh-Thakkar:CAMEL-24761-quarkus-platform-cache

Conversation

@Brijesh-Thakkar

@Brijesh-Thakkar Brijesh-Thakkar commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Description

CAMEL-24761: camel-jbang - cache the Camel version to Quarkus platform mapping

With --runtime quarkus, QuarkusHelper.findQuarkusPlatformBom queries the Quarkus extension registry (/client/platforms/all) to find the Quarkus platform matching the requested Camel version and then reads the platform BOM POMs through Maven.

The registry response is already cached under ~/.camel/quarkus-extension-registries/, but the cache is only reused when it was written today (updatedToday). As a result, released Camel versions still trigger one registry request per day.

This change persists the resolved Camel-to-Quarkus platform mapping alongside the existing registry cache and reuses it for 7 days when the mapping is exact and final.

Update after review

The first version of this PR cached the mapping without expiry, following the assumption in the JIRA that the mapping for a released Camel version never changes. @davsclaus pointed out that this is wrong: findPlatformBom picks the newest release in each stream, so a respin on the same Camel version (e.g. Camel 4.14.5: platform 3.27.3.1 -> 3.27.4) would be missed until --fresh was used. This version fixes that:

  • Each mapping entry now has a resolvedAt timestamp and expires after 7 days (PLATFORM_MAPPING_TTL).
  • The mapping file is written through a temp file and ATOMIC_MOVE.
  • Documentation is updated.

What changes

The caching logic is contained in QuarkusHelper.findQuarkusPlatformBom. The public method signature is unchanged, so no caller changes are required for run, export, catalog, doc, dependency, validate, MCP, or Kubernetes callers. The internal overload that already takes registriesDir (used by tests) now also takes a java.time.Clock; the public method uses Clock.systemUTC().

A new cache file is stored at:

~/.camel/quarkus-extension-registries/<host>/client/platforms/platform-mapping.json

It contains one entry per requested Camel version:

{
  "4.14.5": {
    "groupId": "io.quarkus.platform",
    "version": "3.27.3.1",
    "resolvedAt": 1790000000000
  }
}

resolvedAt is epoch milliseconds. The existing Jsoner / JsonObject API is used for reading and writing.

On a cache hit, the same QuarkusPlatformBom as the original resolution is reconstructed using the requested Camel version and the registry URI supplied by the caller.

When the mapping is reused

A cached mapping is reused when:

  • the registry is not a file:// registry
  • the requested Camel version is not a -SNAPSHOT
  • --fresh is not set
  • the entry is valid and not expired (age is at most 7 days)

In this case the registry, Maven, and the BOM POMs are not accessed.

An entry is a cache miss if resolvedAt is missing, not a number, in the future, or older than the TTL, or if groupId or version is missing or blank. A miss falls through to the normal resolution, and a qualifying result overwrites the entry with a fresh timestamp. A platform respin on the same Camel version is therefore picked up within 7 days, or immediately with --fresh.

When a mapping is stored

A mapping is stored only when the resolved platform's Camel version exactly matches the requested released Camel version.

For example, if Camel 4.14.0 resolves to a platform containing Camel 4.14.5, the result is not cached. Similarly, if a Camel release does not have a Quarkus platform published yet, the fallback result is not remembered. This ensures that temporary or non-exact resolutions do not prevent a later, correct platform from being discovered.

Atomic write

storePlatformMapping writes to a temp file created in the same directory (Files.createTempFile) and moves it over the target with ATOMIC_MOVE, falling back to REPLACE_EXISTING if the file system does not support atomic moves. The temp file is deleted in a finally block. A reader therefore never sees a partly written file. Concurrent jbang processes are last-writer-wins, and a lost entry is only a cache miss.

--fresh and --download=false

  • --fresh with downloading removes the mapping file and queries the registry again.
  • --download=false uses a valid, non-expired mapping when available; otherwise it falls back to the existing registry cache behaviour.
  • --fresh --download=false continues to throw the existing "contradict each other" exception. This behaviour is unchanged.

Failure handling

A missing, unreadable, or corrupt mapping file is treated as a cache miss and falls back to the existing resolution logic. Only IOException and DeserializationException are handled when reading. Mapping write failures are ignored so they never affect the normal resolution flow.

Not changed

  • The Camel Quarkus version from the JIRA description is not stored, because QuarkusPlatformBom has no such field and nothing reads it.
  • MCP and Kubernetes callers that hard-code fresh=false are unchanged.
  • file:// registries are not cached.
  • The registry response cache still uses its existing "updated today" check with real time. Clock is used only for the mapping.

Tests

QuarkusHelperTest now has 21 tests (18 added by this PR), all offline, using WireMock and per-test temporary directories. They do not use the real ~/.camel directory or perform Maven downloads.

The tests cover:

  • storing a mapping, with resolvedAt, after the first successful resolution
  • reusing a mapping without accessing the registry or Maven
  • verifying that the cached BOM matches the original resolution
  • reusing mappings after the registry cache becomes old
  • an entry within the TTL is a hit (entryWithinTtlIsAHit)
  • an entry past the TTL is re-resolved and refreshed with a new timestamp (entryPastTtlIsRefreshed)
  • the respin case: 3.27.3.1 cached, 8 days later the registry returns 3.27.4, and the result is 3.27.4 (respinIsPickedUpAfterTtl)
  • an entry without resolvedAt or with a future resolvedAt is a miss
  • no temp files are left after a store or after a failed write
  • non-exact platform matches are not cached
  • SNAPSHOT versions are never cached or looked up
  • --fresh removing and rebuilding the mapping
  • --fresh --download=false continuing to throw
  • --download=false with and without an existing registry cache
  • multiple forms of corrupt mapping files, including a non-numeric resolvedAt
  • unreadable mapping paths
  • file:// registries are not cached

The tests use the quarkus-registry-client-platforms.json fixture because registry.quarkus.io/.../all.json contains releases whose matching BOM POMs are not available in the test resources.

Verification

Run with ./mvnw (Maven 3.9.16, as pinned by the repository).

  • ./mvnw formatter:format impsort:sort leaves the tree unchanged.
  • ./mvnw -Psourcecheck validate passes.
  • QuarkusHelperTest: 21 tests, 0 failures.
  • QuarkusPlatformMixinTest: passes.
  • Full camel-jbang-core suite: 1281 tests, 0 failures, 0 errors, 2 skipped.

One test (BindKnativeBrokerTest) failed once with Connection timed out and passed on rerun. The same intermittent failures occur on main and are unrelated to this change.

The exact command mvn clean install -DskipTests was not run. A -Dquickly reactor install was used during development instead.

Documentation

  • camel-jbang-devtools.adoc: describes the registry response cache (1 day), the resolved platform mapping cache (7 days, released versions with an exact match only), that SNAPSHOTs are never cached, and that --fresh clears both.
  • camel-4x-upgrade-guide-4_21.adoc: the caching note is updated to match. CLAUDE.md says the upgrade guide is for migration notes, so I am happy to drop this edit and keep only the devtools page if the maintainers prefer.

Claude Code on behalf of Brijesh-Thakkar


Checklist

Target

  • I checked that the commit is targeting the correct branch (Camel 4 uses the main branch)

Tracking

  • If this is a large change, bug fix, or code improvement, I checked there is a JIRA issue filed for the change (usually before you start working on it).

Apache Camel coding standards and style

  • I checked that each commit in the pull request has a meaningful subject line and body.

  • I have run mvn clean install -DskipTests locally from root folder and I have committed all auto-generated changes.

AI-assisted contributions

  • [x ] If this PR includes AI-generated code, commits have proper co-authorship attribution (e.g., Co-authored-by trailers) and the PR description identifies the AI tool used.

Copilot AI balanced review requested due to automatic review settings September 30, 2026 08:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Brijesh-Thakkar
Brijesh-Thakkar requested a lite review from Copilot September 30, 2026 08:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@apupier
apupier requested review from gansheer and ppalaga September 30, 2026 09:18

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the contribution. The code is tidy and well tested, but the premise does not hold.

  1. The cached mapping never updates.
    • The JIRA says that for a released Camel version the answer never changes. That is not the case: findPlatformBom picks the newest release in each stream.
    • Example: --camel-version 4.14.5 resolves platform 3.27.3.1 and caches it. Quarkus then ships 3.27.4, a security respin still on Camel 4.14.5. Before this PR, users picked it up within a day. With it, they stay on 3.27.3.1 until they pass --fresh.
    • This also contradicts camel-4x-upgrade-guide-4_21.adoc (the newest compatible platform, fetched at most once a day).
    • Please give entries a TTL (e.g. a week), or cache only when the stream is no longer current. At minimum, document the pinning and --fresh.
  2. Docs. The caching and --download behaviour described in the 4.21 upgrade guide is now incomplete, and there is no camel-jbang doc update.
  3. Minor. storePlatformMapping does a non-atomic read-modify-write with Files.writeString. With concurrent jbang processes, a partly written file is read as a miss and the other entries get dropped. Write to a temp file and ATOMIC_MOVE instead.

Claude Code on behalf of davsclaus

@oscerd oscerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nicely guarded caching change, and the code matches the described contract.

The staleness risks are all handled:

  • No SNAPSHOT caching — snapshot = camelVersion.endsWith("-SNAPSHOT") and the store is gated on !snapshot, so a moving target is never remembered.
  • Only a final, exact resolution is stored — the write condition resolved.isPresent() && camelVersion.equals(resolved.get().camelVersion()) means a fallback (e.g. 4.14.0 → a platform carrying 4.14.5) or a not-yet-published release is not cached, so a later correct platform can still be discovered. This is the key correctness point and it's right.
  • file:// registries are excluded, and --fresh removes/bypasses the mapping.
  • Robust fallback — a missing/unreadable/corrupt mapping, or an entry with a blank groupId/version, is treated as a cache miss (IOException | DeserializationException on read), and write failures are swallowed, so the cache can never break normal resolution.

On a hit the QuarkusPlatformBom is rebuilt from the cached groupId/version plus the requested version and the caller's registry URI; because only exact matches are cached, the requested version equals the resolved Camel version, so the reconstruction is equivalent to the original. The public findQuarkusPlatformBom signature is unchanged (the registriesDir parameter is added only on an internal overload for the test), so run/export/catalog/doc/dependency/validate/MCP/Kubernetes callers are unaffected, and MCP/Kubernetes keep fresh=false.

LGTM. This is a fork PR so CI has not run yet; I'll hold the formal approval until the workflow is authorized and the checks are green.

This review was generated with AI assistance and reviewed/issued by the human operator. Claude Code on behalf of oscerd

@Brijesh-Thakkar

Copy link
Copy Markdown
Contributor Author

Thanks @davsclaus findPlatformBom picks the newest
release in each stream, so a respin on the same Camel version (e.g. 4.14.5:
3.27.3.1 -> 3.27.4) would be missed, and the pinning contradicts the 4.21
upgrade guide. I'll rework this:

  • Mapping entries get a TTL (7 days, as a constant), stored as a resolvedAt
    timestamp. Expired or timestamp-less entries count as a miss and are
    re-resolved and refreshed.
  • storePlatformMapping writes to a temp file and uses ATOMIC_MOVE.
  • Update the 4.21 upgrade guide and the camel-jbang docs to describe the
    mapping cache, the TTL and --fresh.
  • Add tests for the respin case (cached entry expires, newer platform is picked up).

Will push an update shortly.

@Brijesh-Thakkar

Copy link
Copy Markdown
Contributor Author

@davsclaus @oscerd pushed an update addressing the review:

  • Mapping entries now carry a resolvedAt timestamp and expire after 7 days
    (constant PLATFORM_MAPPING_TTL). Expired, timestamp-less or future-dated
    entries are re-resolved and overwritten, so a respin like
    3.27.3.1 -> 3.27.4 is picked up within a week, or immediately with --fresh.
  • storePlatformMapping writes to a temp file in the same directory and uses
    ATOMIC_MOVE (falling back to REPLACE_EXISTING if unsupported). Concurrent
    processes are last-writer-wins and a lost entry is only a cache miss.
  • camel-jbang-devtools.adoc now describes the mapping cache, the TTL and --fresh.
  • New tests use an injected Clock, including the respin-after-TTL case.

Question on docs: CLAUDE.md says the upgrade guide is for migration notes, but
the 4.21 guide describes the caching behaviour, so I added a short note there
too. Happy to drop that edit and keep only the devtools page if you prefer.
Also happy to change the TTL value.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review after the follow-up commits addressing @davsclaus's three findings.

Finding 1 (TTL — cached mapping never updates): ✅ Addressed. Entries now carry a resolvedAt timestamp and expire after 7 days (PLATFORM_MAPPING_TTL). The readPlatformMapping guard rejects entries with age < 0 (future-dated) or age > TTL. The respinIsPickedUpAfterTtl test explicitly covers the scenario davsclaus described (platform 3.27.3.1 → 3.27.4 respin discovered after TTL expiry).

Finding 2 (Docs incomplete): ✅ Addressed. Both camel-4x-upgrade-guide-4_21.adoc and camel-jbang-devtools.adoc updated with the 7-day mapping cache description, SNAPSHOT exclusion, and --fresh behavior.

Finding 3 (Non-atomic write): ✅ Addressed. storePlatformMapping now uses Files.createTempFile in the same directory + Files.move(ATOMIC_MOVE) with AtomicMoveNotSupportedException fallback to REPLACE_EXISTING. Temp file cleanup in finally block. Concurrent last-writer-wins semantics documented in the Javadoc; a lost entry is only a cache miss.

No new issues. The Clock injection enables deterministic testing and the 15+ new tests cover all edge cases (TTL hit/miss, expired/future timestamps, corrupt mappings, unreadable paths, snapshot exclusion, respin after TTL, --fresh + --download=false interactions, and no temp file leaks).

CI has not run yet (fork PR); approval is contingent on CI passing.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the quick update, @Brijesh-Thakkar. The 7-day TTL with a resolvedAt stamp, the atomic temp-file write and the clock-driven tests (including the respin case) address the main concerns. One small doc fix remains: the new caching note was added to camel-4x-upgrade-guide-4_21.adoc, but this behaviour ships in 4.23 — please move it to the camel-jbang section of camel-4x-upgrade-guide-4_23.adoc, so 4.21 users are not told about a cache they do not have. The camel-jbang-devtools.adoc update looks good.

Claude Code on behalf of davsclaus

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • docs
  • dsl/camel-jbang/camel-jbang-core

🔬 Scalpel shadow comparison — Scalpel: 6 of 697 tested, 8 compile-only — current: 6 all tested

Maveniverse Scalpel detected 6 affected modules (current approach: 6).

Skip-tests mode would test 6 modules (2 direct + 6 downstream), skip tests for 8 (generated code, meta-modules)

Modules Scalpel would test (6)
  • camel-jbang-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-route-parser ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-jbang-core
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
Modules with tests skipped (8)
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-launcher
  • coverage

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • dsl/camel-jbang/camel-jbang-core: 2 test(s) disabled on GitHub Actions

💡 Manual integration tests recommended:

You modified dsl/camel-jbang/camel-jbang-core. The related integration tests in dsl/camel-jbang/camel-jbang-it are excluded from CI. Consider running them manually:

mvn verify -f dsl/camel-jbang/camel-jbang-it -Djbang-it-test
All tested modules (16 modules, 3m 53s total)

Total reactor time: 3m 53s

Module Duration Status
Camel :: JBang :: Plugin :: TUI 59.8s SUCCESS
Camel :: Launcher 51.7s SUCCESS
Camel :: JBang :: MCP 44.7s SUCCESS
Camel :: JBang :: Plugin :: Kubernetes 24.6s SUCCESS
Camel :: Docs 21.7s SUCCESS
Camel :: JBang :: Plugin :: Testing 11.4s SUCCESS
Camel :: JBang :: Plugin :: Validate 8.9s SUCCESS
Camel :: Coverage 1.9s SUCCESS
Camel :: JBang :: Plugin :: Edit 1.7s SUCCESS
Camel :: JBang :: Plugin :: Generate 1.6s SUCCESS
Camel :: JBang :: Plugin :: MCP 1.5s SUCCESS
Camel :: JBang :: Main 1.1s SUCCESS
Camel :: JBang :: Integration tests 1.0s SUCCESS
Camel :: JBang :: Plugin :: Route Parser 1.0s SUCCESS
Camel :: Launcher :: Container 0.8s SUCCESS
Camel :: JBang :: Core n/a

Top 20 slowest modules:

  • Camel :: JBang :: Plugin :: TUI (59.8s)
  • Camel :: Launcher (51.7s)
  • Camel :: JBang :: MCP (44.7s)
  • Camel :: JBang :: Plugin :: Kubernetes (24.6s)
  • Camel :: Docs (21.7s)
  • Camel :: JBang :: Plugin :: Testing (11.4s)
  • Camel :: JBang :: Plugin :: Validate (8.9s)
  • Camel :: Coverage (1.9s)
  • Camel :: JBang :: Plugin :: Edit (1.7s)
  • Camel :: JBang :: Plugin :: Generate (1.6s)
  • Camel :: JBang :: Plugin :: MCP (1.5s)
  • Camel :: JBang :: Main (1.1s)
  • Camel :: JBang :: Integration tests (1.0s)
  • Camel :: JBang :: Plugin :: Route Parser (1.0s)
  • Camel :: Launcher :: Container (0.8s)

⚙️ View full build and test results

@gansheer gansheer left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This generally looks good to me (most of the pertinent comment have already been added).
I suggest adding a test on registry override isolation. The idea is to ensure that alternating the registry URI , whether via --quarkus-ext-registry CLI flag or the camel.jbang.quarkusExtensionRegistryBaseUri property, doesn't serve stale results from a different registry's cache.
We have been having issues in the past with the overrides not working as expected so it is better to test before.

…ade note to 4.23

The Quarkus Extension Registry cache directory was keyed on the host only, so
two registries on the same host but different ports shared both the cached
registry response and the platform mapping, and switching registries with
--quarkus-ext-registry or camel.jbang.quarkusExtensionRegistryBaseUri could
serve the other registry's platform. Include the port in the directory name;
the default registry (no explicit port) keeps its directory.

Move the caching note from the 4.21 upgrade guide to the camel-jbang section
of the 4.23 guide, where the behaviour ships.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Brijesh-Thakkar

Copy link
Copy Markdown
Contributor Author

@davsclaus
Thanks. I've moved the note out of camel-4x-upgrade-guide-4_21.adoc, which is now identical to main, and into the camel-jbang section of camel-4x-upgrade-guide-4_23.adoc.

@Brijesh-Thakkar

Copy link
Copy Markdown
Contributor Author

@gansheer
Good call, and it found a real bug. The cache directory was keyed on the registry host only, so two registries on the same host with different ports shared the cached registry response and the platform mapping. The new tests reproduced it: switching to the second registry returned the first registry's platform. The directory is now host_port when the URI has an explicit port, and the default registry.quarkus.io directory is unchanged.
QuarkusPlatformMixinTest now has two tests with two WireMock registries on one host, serving different platforms for the same Camel version. They alternate through --quarkus-ext-registry and through camel.jbang.quarkusExtensionRegistryBaseUri. Each answer comes from its own registry, and each registry is asked only once.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review after 237123d addressing @davsclaus's doc location request and @gansheer's registry isolation request.

Finding 1 (doc note in 4_21 instead of 4_23): ✅ Addressed. The 3-line caching description removed from camel-4x-upgrade-guide-4_21.adoc and added to the camel-jbang section of camel-4x-upgrade-guide-4_23.adoc, now also covering the port-based directory isolation.

Finding 2 (registry override isolation — gansheer): ✅ Addressed. cacheFile() now keys the directory on host_port when the URI has an explicit port (uri.getPort() < 0 = default = host-only, backward compatible). Two new WireMock-based tests in QuarkusPlatformMixinTest (alternatingRegistryFlagDoesNotServeTheOtherRegistrysCache and alternatingRegistryPropertyDoesNotServeTheOtherRegistrysCache) confirm that switching registries on the same host with different ports returns each registry's own platform version and that each registry is queried exactly once.

Existing QuarkusHelperTest assertions updated from hardcoded "localhost" to registryDir() to account for the dynamic WireMock port — correct and thorough.

No new issues. All outstanding review items resolved.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review after merge of main into the feature branch (237123d → 56e76b6). The 110 new commits are all from main — the PR's own files (QuarkusHelper.java, QuarkusHelperTest.java, QuarkusPlatformMixinTest.java, docs) are byte-identical to the previous review. All three reviewer findings (TTL, atomic write, registry isolation) remain addressed. CI passed. No issues.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks, @Brijesh-Thakkar — the caching note is now in the camel-jbang section of the 4.23 upgrade guide and the 4.21 guide is untouched, so my earlier point is addressed. The per-port cache directory and the two WireMock tests for switching registries (flag and property) are a nice addition, and the default registry keeps its existing directory.

One small thing from the merge with main: the new paragraph is now directly followed by the camel validate source ... paragraph that landed on main at the same spot, with no blank line between them, so AsciiDoc renders the two unrelated notes as one paragraph. Please add an empty line after "...no longer share their cached responses." (suggestion inline). Otherwise LGTM.

Claude Code on behalf of davsclaus

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

fetched at most once a day. Only a platform that carries exactly the requested Camel version is cached; a
`-SNAPSHOT` Camel version is never cached. `--fresh` clears both caches. A registry with an explicit port in
`--quarkus-ext-registry` (or `camel.jbang.quarkusExtensionRegistryBaseUri`) now has its own cache directory, so
two registries on the same host no longer share their cached responses.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

After the merge with main this paragraph runs straight into the camel validate source ... paragraph below, so they render as one. Please add a blank line:

Suggested change
two registries on the same host no longer share their cached responses.
two registries on the same host no longer share their cached responses.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants