Andrea Cosentino created CAMEL-24252:
----------------------------------------

             Summary: Container Version Upgrade workflow fails: metadata 
updater aborts PR loop
                 Key: CAMEL-24252
                 URL: https://issues.apache.org/jira/browse/CAMEL-24252
             Project: Camel
          Issue Type: Bug
          Components: ci
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino


The scheduled *Container Version Upgrade* workflow 
({{.github/workflows/check-container-versions.yml}}) has failed on every run 
since 2026-06-29 (4 consecutive weeks). As a result no container image upgrade 
PRs are being opened any more.

Failing runs: 28357095048 (2026-06-29), 28775799343 (2026-07-06), 29231474838 
(2026-07-13), 29723897415 (2026-07-20).

h3. Root cause

The _Create individual PRs for each container update_ step loops over the 
outdated images and calls, unguarded:

{code}
python3 .github/actions/check-container-upgrade/update-metadata-version.py \
  "$MODULE_NAME" "$OLD_VERSION" "$NEW_VERSION" "$METADATA_INFRA" 
"$METADATA_CATALOG"
{code}

{{update-metadata-version.py}} matches metadata entries by {{(artifactId, 
serviceVersion)}} and calls {{sys.exit(1)}} when nothing matched. The step runs 
under {{bash -e}}, so the first container whose version cannot be mapped to a 
{{metadata.json}} entry aborts the whole loop: every remaining container is 
skipped and the job goes red.

There are three legitimate cases where no metadata entry can ever match:

# *Platform-specific properties* - e.g. {{ollama.container.ppc64le}} (v0.17.6), 
{{milvus.container.ppc64le}}. {{CamelTestInfraGenerateMetadataMojo}} explicitly 
skips keys ending in {{.ppc64le}} / {{.s390x}} / {{.aarch64}} / {{.amd64}}, so 
those versions never appear in {{metadata.json}}. This caused the 2026-07-06 
and 2026-07-13 failures.
# *Shared "common" modules* - {{azure.container}} is defined in 
{{camel-test-infra-azure-common}}, but the entries carrying that 
{{serviceVersion}} are {{camel-test-infra-azure-storage-blob}} and 
{{camel-test-infra-azure-storage-queue}} (both alias {{azure}}). The module 
directory name derived by the workflow never matches an {{artifactId}}, so the 
update is a no-op and the script fails. This caused the 2026-07-20 failure.
# *Modules with no entry or a null serviceVersion* - 
{{camel-test-infra-mcp-everything}}, {{camel-test-infra-tensorflow-serving}} 
and {{camel-test-infra-triton}} have no {{@InfraService}} metadata entry at 
all, and {{camel-test-infra-observability}} has {{serviceVersion: null}} 
(multi-container module). These are latent triggers of the same abort.

h3. Steps to reproduce

# Wait for the Monday 06:00 UTC schedule, or trigger the workflow manually via 
{{workflow_dispatch}}.
# Ensure at least one outdated image is a platform-specific property or belongs 
to a shared {{*-common}} module (currently {{azure.container}} and 
{{ollama.container.ppc64le}} both qualify).
# Observe the _Create individual PRs for each container update_ step.

h3. Expected behaviour

Every outdated container image gets its own PR. When a bumped property has no 
corresponding {{serviceVersion}} in the generated {{metadata.json}} files 
(platform-specific key, multi-container module, or no registered service), the 
metadata update is simply a no-op and the workflow moves on to the next 
container.

h3. Actual behaviour

The step fails with:

{noformat}
No metadata target was updated in: 
test-infra/camel-test-infra-all/src/generated/resources/META-INF/metadata.json, 
catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/test-infra/metadata.json
No matching entries for camel-test-infra-azure-common/3.35.0 in ...
Process completed with exit code 1.
{noformat}

The loop aborts, the remaining containers are never processed, and the job is 
red. In the 2026-07-20 run the very first of 15 outdated containers triggered 
it, so zero PRs were created.

h3. Proposed fix

* Align {{update-metadata-version.py}} with 
{{CamelTestInfraGenerateMetadataMojo}}: resolve the target entries from the 
bumped *property key prefix* matched against the entry {{alias}} / 
{{aliasImplementation}} (which is how the Mojo derives {{serviceVersion}}), 
instead of the module directory name. This fixes the shared {{*-common}} module 
case.
* Skip platform-specific and version-metadata keys, exactly as the Mojo does.
* Exit 0 with an informational message when there is genuinely nothing to 
update; reserve a non-zero exit for real errors (missing/unreadable/invalid 
metadata file, bad arguments).
* Guard the invocation in the workflow so that a metadata update failure warns 
but does not abort the remaining containers.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to