Skip to content

fix: migrate extensions plugins from local dist to OCI after rhdh#5299 - #299

Merged
rm3l merged 4 commits into
redhat-developer:devfrom
zdrapela:fix/oci-plugin-wrappers
Aug 27, 2026
Merged

rm3l merged 4 commits into
redhat-developer:devfrom
zdrapela:fix/oci-plugin-wrappers

Conversation

@zdrapela

@zdrapela zdrapela commented Aug 27, 2026 •

Copy link
Copy Markdown
Member

Summary

rhdh#5299 removed the dynamic-plugins/dist/ directory from the RHDH image, breaking all rhdh-local CI jobs. This PR migrates the extensions plugins to OCI artifacts and fixes the supporting infrastructure.

Changes

1. Replace local dist extensions with OCI references (86eb4a4)

  • Replace ./dynamic-plugins/dist/ extensions entries with OCI packages from quay.io/rhdh/
  • Explicitly disable the obsolete default catalog index entries to prevent pluginConfig conflicts (the catalog index still ships ./dynamic-plugins/dist/ entries with enabled: true — see note below)
  • Use correct OCI !alias names matching the actual directory names inside the OCI images (without -dynamic suffix)
  • Update CI action and required-plugins.yaml baseline

2. Align volume mount paths between init and main containers (af34697)

  • Mount dynamic-plugins-root at /opt/app-root/src/dynamic-plugins-root in both init and main containers (init previously used /dynamic-plugins-root)
  • Update prepare-and-install-dynamic-plugins.sh to use the aligned path
  • Fix RHIDP-3939 workaround to clear directory contents instead of removing the mount point (which fails with "Device or resource busy" when the path is the mount)
  • Align includes path in dynamic-plugins.yaml and override example to match the new mount

3. Fix validation script entry ordering (0dc9a18)

  • Process plugin entries in YAML order so later OCI enabled: true entries correctly override earlier enabled: false dist-path overrides for the same normalized plugin name
  • Use jq for conditional logic (portable across yq versions)

Note on enabled: false overrides

The enabled: false entries for ./dynamic-plugins/dist/ paths are a necessary workaround. The next catalog index still ships these entries as enabled: true with pluginConfig values. Without the overrides, the installer fails with Config key 'extensions.installation.enabled' defined differently for 2 dynamic plugins. These overrides can be removed once RHDHBUGS-3710 is resolved.

Related

rhdh#5299 removed dynamic-plugins/dist/ from the RHDH image.
Replace the local-path extensions entries with OCI artifacts,
explicitly disable the obsolete default catalog entries to
prevent pluginConfig conflicts, and use correct OCI !alias
names matching the directory names inside the images.

Also update CI action and required-plugins baseline accordingly.
Mount dynamic-plugins-root at /opt/app-root/src/dynamic-plugins-root
in both init and main containers (previously the init container used
/dynamic-plugins-root). This prevents absolute symlinks created by
the CLI installer from breaking across containers.

Also updates the RHIDP-3939 workaround to clear directory contents
instead of removing the mount point, and aligns the includes path
in dynamic-plugins configs to match the new mount.
The plugin validation script grouped all enabled entries before
disabled entries, so disabled dist-path overrides always clobbered
enabled OCI entries for the same normalized plugin name. Process
entries in YAML order instead so later entries take precedence.
Uses jq for conditional logic since yq's if-then-else syntax
is not portable across all versions.
@zdrapela
zdrapela force-pushed the fix/oci-plugin-wrappers branch from 901d7f2 to 0dc9a18 Compare August 27, 2026 13:18
@zdrapela zdrapela changed the title fix: use OCI extensions plugins fix: migrate extensions plugins from local dist to OCI after rhdh#5299 Aug 27, 2026
@sonarqubecloud

Copy link
Copy Markdown

@rm3l
rm3l marked this pull request as ready for review August 27, 2026 14:09
@rhdh-qodo-merge

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Migrate Extensions plugins to OCI and align shared plugin paths

🐞 Bug fix 🧪 Tests ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Replaces removed local Extensions wrappers with pinned OCI artifacts.
• Aligns installer and runtime volume paths so generated plugin links remain valid.
• Preserves YAML override order during loaded-plugin validation.
Diagram

graph TD
  C["Catalog Index"] --> D["Plugin Config"] --> I["Plugin Installer"] --> V["Shared Volume"] --> R["RHDH Runtime"]
  O["OCI Registry"] --> I
  T["Plugin Validator"] --> R
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use corrected catalog references
  • ➕ Avoids pinning OCI versions in local configuration
  • ➕ Removes temporary disabled legacy entries
  • ➖ Blocked until RHDHBUGS-3710 corrects the catalog index
  • ➖ Does not restore currently broken local CI jobs
2. Restore wrappers in the RHDH image
  • ➕ Preserves previous local dist references
  • ➕ Avoids direct registry resolution during installation
  • ➖ Reverses the upstream image simplification
  • ➖ Couples plugin availability to image contents and release cadence

Recommendation: Use the PR's pinned OCI references and aligned shared mount now because they directly restore installation after local wrappers were removed. Retain ordered disable-then-enable overrides only as a temporary compatibility layer, and return to catalog references after RHDHBUGS-3710 is resolved.

Files changed (8) +50 / -40

Bug fix (4) +37 / -28
compose.yamlUnify the shared plugin volume path +1/-1

Unify the shared plugin volume path

• Moves the installer service's named volume mount to '/opt/app-root/src/dynamic-plugins-root', matching the main RHDH container.

compose.yaml

dynamic-plugins.yamlSource Extensions plugins from OCI +22/-3

Source Extensions plugins from OCI

• Disables stale catalog-provided dist entries before enabling pinned OCI artifacts for the Extensions frontend, backend, and catalog module. It also points writable Extensions configuration at the unified shared volume path.

configs/dynamic-plugins/dynamic-plugins.yaml

prepare-and-install-dynamic-plugins.shInstall plugins into the aligned shared root +5/-6

Install plugins into the aligned shared root

• Uses the runtime-compatible absolute root for Extensions configuration and plugin installation. The RHIDP-3939 workaround now clears mounted directory contents without attempting to remove the mount point.

prepare-and-install-dynamic-plugins.sh

validate-loaded-plugins.shResolve plugin states in YAML order +9/-18

Resolve plugin states in YAML order

• Processes enabled and disabled entries in source order so later OCI entries override earlier normalized dist entries. Conditional state extraction moves to 'jq' for compatibility across 'yq' versions.

tests/validate-loaded-plugins.sh

Tests (2) +5 / -4
action.yamlUse catalog references for CI-only plugins +4/-4

Use catalog references for CI-only plugins

• Updates the CI override selector for the OCI-backed Extensions backend. Bulk import plugins now use catalog references instead of removed local dist paths.

.github/actions/rhdh-local-compose-test/action.yaml

required-plugins.yamlRequire the Extensions catalog backend module +1/-0

Require the Extensions catalog backend module

• Adds the newly explicit Extensions catalog backend module to the baseline loaded-plugin assertions.

tests/required-plugins.yaml

Other (2) +8 / -8
compose-dynamic-plugins-root.yamlAlign development installer mount path +1/-1

Align development installer mount path

• Mounts the host dynamic plugin root at the same absolute path used by the RHDH runtime, preventing cross-container symlink breakage.

compose-dynamic-plugins-root.yaml

dynamic-plugins.override.example.yamlRefresh plugin source and mount examples +7/-7

Refresh plugin source and mount examples

• Updates example includes to the aligned shared path and replaces obsolete dist examples with catalog or OCI references. Extensions examples now identify the actual OCI aliases.

configs/dynamic-plugins/dynamic-plugins.override.example.yaml

@rhdh-qodo-merge

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can ask Qodo to dismiss a finding you disagree with, with your reason on record

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation Bug fix Tests labels Aug 27, 2026
@rm3l
rm3l merged commit e4c6953 into redhat-developer:dev Aug 27, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug fix documentation Improvements or additions to documentation Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants