Skip to content

Dist gen generation - #541

Open
tjuhaszrh wants to merge 1 commit into
sclorg:masterfrom
tjuhaszrh:dist-git2
Open

Dist gen generation#541
tjuhaszrh wants to merge 1 commit into
sclorg:masterfrom
tjuhaszrh:dist-git2

Conversation

@tjuhaszrh

@tjuhaszrh tjuhaszrh commented May 18, 2026

Copy link
Copy Markdown
Contributor

Cleaning up the draft PR.

Summary by CodeRabbit

  • New Features

    • Added support for generating Node.js 20, 22, and 24 container images across multiple Linux distributions, including minimal and micro variants.
    • Added improved application build, startup, debugging, signal handling, permissions, and dependency caching support.
    • Added configurable image manifests and build/test matrices.
  • Documentation

    • Expanded usage documentation for container workflows, OpenShift, S2I, development mode, hot deployment, and debugging.
    • Documented additional published image addresses.
  • Bug Fixes

    • Updated Node.js 22 and 24 image metadata to use the correct buildpack stacks.

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@github-actions

github-actions Bot commented May 18, 2026

Copy link
Copy Markdown

Testing Farm results

namecomposearchstatusstarted (UTC)timelogs
Fedora - 24Fedora-latestx86_64✅ passed19.05.2026 12:13:4210min 14stest pipeline
CentOS Stream 10 - 24-minimalCentOS-Stream-10x86_64✅ passed19.05.2026 12:02:4410min 18stest pipeline
CentOS Stream 10 - 22-minimalCentOS-Stream-10x86_64✅ passed19.05.2026 11:15:5811min 44stest pipeline
CentOS Stream 9 - 24CentOS-Stream-9x86_64✅ passed19.05.2026 11:16:4613min 52stest pipeline
CentOS Stream 10 - 22CentOS-Stream-10x86_64✅ passed19.05.2026 11:37:3813min 40stest pipeline
RHEL10 - FIPS Enabled - 24-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 10:52:3118min 52stest pipeline
RHEL10 - FIPS Enabled - 22-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:15:1220min 10stest pipeline
RHEL8 - 22RHEL-8.10.0-Nightlyx86_64✅ passed19.05.2026 12:11:0316min 57stest pipeline
RHEL8 - 22-minimalRHEL-8.10.0-Nightlyx86_64✅ passed19.05.2026 11:57:5618min 13stest pipeline
RHEL10 - 24-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:23:5921min 18stest pipeline
RHEL10 - Unsubscribed host - 24RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:59:0421min 54stest pipeline
Fedora - 24-minimalFedora-latestx86_64✅ passed04.06.2026 10:14:437min 44stest pipeline
RHEL10 - FIPS Enabled - 24RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:05:4527min 2stest pipeline
RHEL9 - 24RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:51:5125min 59stest pipeline
RHEL9 - Unsubscribed host - 22RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:45:2021min 28stest pipeline
RHEL9 - FIPS Enabled - 24-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 10:51:4523min 44stest pipeline
RHEL10 - FIPS Enabled - 22RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:10:0023min 17stest pipeline
RHEL9 - FIPS Enabled - 22-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:01:3931min 33stest pipeline
RHEL9 - FIPS Enabled - 24RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:06:5834min 52stest pipeline
RHEL10 - 22RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 12:15:0628min 5stest pipeline
RHEL9 - Unsubscribed host - 22-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:59:1722min 15stest pipeline
RHEL10 - Unsubscribed host - 22-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:53:1218min 42stest pipeline
CentOS Stream 9 - 24-minimalCentOS-Stream-9x86_64✅ passed19.05.2026 12:14:2910min 46stest pipeline
RHEL10 - 24RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:31:2020min 21stest pipeline
RHEL10 - 22-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:34:2218min 25stest pipeline
RHEL9 - FIPS Enabled - 22RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 10:55:4830min 40stest pipeline
RHEL9 - 22-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 12:04:5123min 4stest pipeline
RHEL10 - Unsubscribed host - 22RHEL-10.2-Nightlyx86_64✅ passed19.05.2026 12:06:1020min 53stest pipeline
RHEL9 - Unsubscribed host - 24RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:51:0121min 37stest pipeline
RHEL9 - 22RHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:50:4226min 55stest pipeline
RHEL9 - Unsubscribed host - 24-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:42:4122min 31stest pipeline
RHEL9 - 24-minimalRHEL-9.8.0-Nightlyx86_64✅ passed19.05.2026 11:28:3722min 19stest pipeline
CentOS Stream 10 - 24CentOS-Stream-10x86_64✅ passed19.05.2026 11:15:4513min 25stest pipeline
RHEL10 - Unsubscribed host - 24-minimalRHEL-10.2-Nightlyx86_64✅ passed19.05.2026 11:54:4219min 1stest pipeline

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

Tests seem to mostly pass, the failures look like infra issues.
I have also separated the changes into more commits for better structuring.

@tjuhaszrh
tjuhaszrh force-pushed the dist-git2 branch 4 times, most recently from a5b6c0f to 6852710 Compare May 19, 2026 10:38
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@tjuhaszrh tjuhaszrh changed the title [Draft] Dist gen generation Dist gen generation May 19, 2026
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

@phracek Could you do a review please?

@phracek phracek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Just a few comments. C8S is not supported at all.

Comment thread specs/multispec.yml Outdated
Comment thread specs/multispec.yml Outdated
Comment thread manifest-minimal.yml Outdated
Comment thread manifest.yml Outdated
@phracek

phracek commented Jun 4, 2026

Copy link
Copy Markdown
Member

@tjuhaszrh Please update .github/workflows/container-tests.yml and .github/workflows/container-upstream-tests.yml so it checks distgen. See here: https://github.com/sclorg/postgresql-container/blob/master/.github/workflows/container-tests.yml#L7. This has to be done as separate pull request. @pkhartsk Am I right, or it could be part of this pull request?

@tjuhaszrh tjuhaszrh self-assigned this Jun 4, 2026
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

I don't think the README check targets changes from this PR.
I don't even understand why it was runned, I probably accidentally started it manually.

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

Just a few comments. C8S is not supported at all.

Removed all mentions of c8s and regenerated files, so c8s dockerfiles should be gone.

@tjuhaszrh
tjuhaszrh requested a review from phracek June 4, 2026 10:30
@phracek

phracek commented Jun 4, 2026

Copy link
Copy Markdown
Member

@tjuhaszrh Please by make version-table regenerated the version table and add README.md to the pull request as well.

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@phracek phracek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM.

@phracek

phracek commented Jun 8, 2026

Copy link
Copy Markdown
Member

[test]

@phracek

phracek commented Jun 9, 2026

Copy link
Copy Markdown
Member

[test-pytest]

@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@phracek phracek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@phracek phracek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

See my comments. Let's make the src/Dockerfile more readable. Let's remove a lot of duplicty.

But thanks for your good work.

Comment thread src/Dockerfile Outdated
Comment thread src/Dockerfile Outdated
{% if spec.prod in ["c9s", "rhel10", "c10s"] %}
# Package libatomic_ops was removed
{% endif %}{% if spec.prod in ["rhel10", "c10s"] and spec.version == "22" %}
RUN INSTALL_PKGS="make gcc gcc-c++ git openssl-devel nodejs nodejs-nodemon nodejs-npm nss_wrapper-libs which" && \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

what about to add none npm package to mamultispec.yml file and add only nodejs version or unversioned packages here.

Comment thread src/Dockerfile Outdated
Comment thread src/Dockerfile Outdated
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds templated Node.js image generation across distributions and versions, new S2I lifecycle scripts, runtime helpers, manifests, documentation, minimal-image changes, and generated Node.js 22 and 24 artifact updates.

Changes

Source image and generation infrastructure

Layer / File(s) Summary
Version and distribution build matrix
specs/multispec.yml, specs/multispec-npm-config.yml
Defines distro settings, Node.js 20, 22, and 24 variants, minimal variants, package rules, image names, and build matrices.
Image generation manifests
manifest.yml, manifest-minimal.yml
Adds rules for Dockerfiles, READMEs, executable S2I files, runtime configuration files, and test symlinks.
Parameterized Dockerfiles and runtime support
src/Dockerfile, src/Dockerfile.minimal, src/Dockerfile.minimal.fedora, src/root/...
Templatizes image builds and package installation. Adds permission, NSS, npm module, and SCL support files.
S2I build and startup lifecycle
src/s2i/bin/*
Adds dependency assembly, startup selection, signal forwarding, artifact saving, and usage scripts.
Image documentation
src/README.md, src/README.minimal.md
Documents image usage, S2I workflows, Dockerfile builds, environment variables, development mode, hot deploy, debugging, and init-wrapper.

Versioned artifact corrections

Layer / File(s) Summary
Node.js 22 and 24 stack metadata
22/Dockerfile.rhel*, 24/Dockerfile.rhel*
Updates CNB stack identifiers and Buildpacks stack labels for Node.js 22 and 24.
Generated artifact normalization
22*/s2i/bin/run, 22/test, 24*/s2i/bin/run, 24/test, README.md
Normalizes whitespace and symlink targets. Adds registry addresses for Node.js 22 and 24 variants.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant S2I
  participant assemble
  participant run
  participant init-wrapper
  participant NodeProcess
  S2I->>assemble: provide application source
  assemble->>assemble: configure npm and install dependencies
  assemble->>assemble: build and prune production dependencies
  S2I->>run: start container
  run->>run: resolve startup mode
  run->>init-wrapper: launch wrapped command
  init-wrapper->>NodeProcess: start and forward signals
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title identifies distgen generation, which matches the pull request's main changes to manifests, templates, and generated image files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/README.md (1)

5-5: ⚡ Quick win

Fix spelling and grammar errors in both README templates.

Multiple spelling errors and hyphenation issues reduce clarity and professional appearance. Consistent errors across both files:

  • src/README.md#L206, src/README.minimal.md#L278: "souce" → "source"
  • src/README.md#L264, src/README.minimal.md#L336: "avalable" → "available"
  • src/README.md#L149, src/README.minimal.md#L222: "environemnt variale" → "environment variable"
  • src/README.md#L301, src/README.minimal.md#L372: "another versions" → "other versions"
  • src/README.md#L5,L7, src/README.minimal.md#L7: "Fedora based" → "Fedora-based"
  • src/README.md#L166, src/README.minimal.md#L238: "key value pairs" → "key-value pairs"
🔧 Proposed fixes for spelling and grammar in src/README.md
-Users can choose between RHEL, CentOS and Fedora based images.
+Users can choose between RHEL, CentOS and Fedora-based images.

-and the Fedora images are available in [Quay.io](https://quay.io/organization/fedora).
+and the Fedora-based images are available in [Quay.io](https://quay.io/organization/fedora).

-In case of `NODE_CMD` environemnt variale is specified, then `init-wrapper` script will use the value of `NODE_CMD` to start your application.
+In case of `NODE_CMD` environment variable is specified, then `init-wrapper` script will use the value of `NODE_CMD` to start your application.

-One way to define a set of environment variables is to include them as key value pairs in your repo's `.s2i/environment` file.
+One way to define a set of environment variables is to include them as key-value pairs in your repo's `.s2i/environment` file.

-As part of development mode, this image supports hot deploy. If development mode is enabled, any souce code that is changed in the running container will be immediately reflected in the running nodejs application.
+As part of development mode, this image supports hot deploy. If development mode is enabled, any source code that is changed in the running container will be immediately reflected in the running nodejs application.

-A detailed explanation on how the init-wrapper script works is avalable in
+A detailed explanation on how the init-wrapper script works is available in

-In that repository you also can find another versions of Node.js environment Dockerfiles.
+In that repository you also can find other versions of Node.js environment Dockerfiles.
🔧 Proposed fixes for spelling and grammar in src/README.minimal.md
-Users can choose between RHEL, CentOS and Fedora based images.
+Users can choose between RHEL, CentOS and Fedora-based images.

-In case of `NODE_CMD` environemnt variale is specified, then `init-wrapper` script will use the value of `NODE_CMD` to start your application.
+In case of `NODE_CMD` environment variable is specified, then `init-wrapper` script will use the value of `NODE_CMD` to start your application.

-One way to define a set of environment variables is to include them as key value pairs in your repo's `.s2i/environment` file.
+One way to define a set of environment variables is to include them as key-value pairs in your repo's `.s2i/environment` file.

-As part of development mode, this image supports hot deploy. If development mode is enabled, any souce code that is changed in the running container will be immediately reflected in the running nodejs application.
+As part of development mode, this image supports hot deploy. If development mode is enabled, any source code that is changed in the running container will be immediately reflected in the running nodejs application.

-A detailed explanation on how the init-wrapper script works is avalable in
+A detailed explanation on how the init-wrapper script works is available in

-In that repository you also can find another versions of Node.js environment Dockerfiles.
+In that repository you also can find other versions of Node.js environment Dockerfiles.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/README.md` at line 5, Fix all spelling and grammar errors across
src/README.md and src/README.minimal.md. In src/README.md at lines 5-7, change
"Fedora based" to "Fedora-based". Additionally, in src/README.md, correct
"souce" to "source" at line 206, "avalable" to "available" at line 264,
"environemnt variale" to "environment variable" at line 149, "another versions"
to "other versions" at line 301, and "key value pairs" to "key-value pairs" at
line 166. In src/README.minimal.md, apply the same corrections at the
corresponding locations: line 7 for "Fedora-based", line 278 for "source", line
336 for "available", line 222 for "environment variable", line 372 for "other
versions", and line 238 for "key-value pairs".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Dockerfile`:
- Around line 71-73: The conditional guard on line 71 checks for
`config.post_install` but the RUN directive on line 73 renders
`spec.post_install`, causing a namespace mismatch. Since the post_install field
is defined in the spec namespace in specs/multispec.yml, the condition will
always evaluate to false and skip the post-install hook. Change the conditional
on line 71 from `{% if config.post_install %}` to `{% if spec.post_install %}`
to match the namespace being used in the RUN statement.

In `@src/s2i/bin/run`:
- Around line 31-37: The startup command detection has two issues: First, on
line 36, the condition `[ -n $package_json_main ]` uses an unquoted variable,
which when empty expands to `[ -n ]` and evaluates to true incorrectly—add
quotes around the variable to properly check if it is non-empty. Second, lines
31-32 execute sed commands on package.json without verifying the file exists
first, which will cause the script to exit under set -e if the file is
missing—add a file existence check before the sed commands that read the
package.json file to ensure the script handles missing package.json gracefully.

---

Nitpick comments:
In `@src/README.md`:
- Line 5: Fix all spelling and grammar errors across src/README.md and
src/README.minimal.md. In src/README.md at lines 5-7, change "Fedora based" to
"Fedora-based". Additionally, in src/README.md, correct "souce" to "source" at
line 206, "avalable" to "available" at line 264, "environemnt variale" to
"environment variable" at line 149, "another versions" to "other versions" at
line 301, and "key value pairs" to "key-value pairs" at line 166. In
src/README.minimal.md, apply the same corrections at the corresponding
locations: line 7 for "Fedora-based", line 278 for "source", line 336 for
"available", line 222 for "environment variable", line 372 for "other versions",
and line 238 for "key-value pairs".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 48becdda-8e9b-440a-9d42-410371d84779

📥 Commits

Reviewing files that changed from the base of the PR and between 07647bd and dc26e09.

📒 Files selected for processing (45)
  • 22-minimal/.exclude-c8s
  • 22-minimal/.exclude-c9s
  • 22-minimal/.exclude-fedora
  • 22-minimal/Dockerfile.c8s
  • 22-minimal/s2i/bin/init-wrapper
  • 22-minimal/s2i/bin/run
  • 22/.exclude-c8s
  • 22/.exclude-c9s
  • 22/.exclude-fedora
  • 22/Dockerfile.c8s
  • 22/Dockerfile.rhel8
  • 22/Dockerfile.rhel9
  • 22/s2i/bin/init-wrapper
  • 22/s2i/bin/run
  • 22/test
  • 24-minimal/.exclude-c8s
  • 24-minimal/.exclude-rhel8
  • 24-minimal/Dockerfile.c8s
  • 24-minimal/s2i/bin/init-wrapper
  • 24-minimal/s2i/bin/run
  • 24/.exclude-c8s
  • 24/.exclude-rhel8
  • 24/Dockerfile.c8s
  • 24/Dockerfile.rhel8
  • 24/Dockerfile.rhel9
  • 24/s2i/bin/init-wrapper
  • 24/s2i/bin/run
  • 24/test
  • README.md
  • manifest-minimal.yml
  • manifest.yml
  • specs/multispec.yml
  • src/Dockerfile
  • src/README.md
  • src/README.minimal.md
  • src/root/opt/app-root/etc/generate_container_user
  • src/root/opt/app-root/etc/npm_global_module_list
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • src/s2i/bin/assemble
  • src/s2i/bin/init-wrapper
  • src/s2i/bin/run
  • src/s2i/bin/run-minimal
  • src/s2i/bin/save-artifacts
  • src/s2i/bin/usage
💤 Files with no reviewable changes (4)
  • 24-minimal/Dockerfile.c8s
  • 24/Dockerfile.c8s
  • 22-minimal/Dockerfile.c8s
  • 22/Dockerfile.c8s

Comment thread src/Dockerfile Outdated
Comment thread src/s2i/bin/run Outdated

@phracek phracek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Last round. Now it looks really awesome.

Comment thread src/Dockerfile Outdated
Comment thread src/Dockerfile Outdated
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 6

🧹 Nitpick comments (2)
src/README.md (1)

29-34: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Fix Markdown lint violations in the source templates.

The same generated-formatting issues appear in both files.

  • src/README.md#L29-L34: add fence languages and normalize heading formatting throughout the template.
  • src/README.minimal.md#L36-L61: apply the same changes, then regenerate artifacts.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/README.md` around lines 29 - 34, Fix Markdown linting in both source
templates: update src/README.md lines 29-34 and src/README.minimal.md lines
36-61 by adding appropriate languages to fenced code blocks and normalizing
heading formatting throughout each template, then regenerate the derived
artifacts.

Source: Linters/SAST tools

src/Dockerfile (1)

72-72: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Simplify script path targeting.

Since $STI_SCRIPTS_PATH correctly resolves to /usr/libexec/s2i in the utilized S2I core bases, you can simplify the template by referencing the environment variable unconditionally.

♻️ Proposed refactor
-RUN chmod +x {% if spec.version == "20" %}$STI_SCRIPTS_PATH/init-wrapper{% else %}/usr/libexec/s2i/init-wrapper{% endif %}
+RUN chmod +x $STI_SCRIPTS_PATH/init-wrapper
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Dockerfile` at line 72, Update the init-wrapper chmod command to use
$STI_SCRIPTS_PATH/init-wrapper unconditionally, removing the spec.version
conditional while preserving the existing executable-permission step.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@specs/multispec-npm-config.yml`:
- Around line 64-65: Update the full_image_name configuration for rhel10 to
append the :latest tag, matching the tag format used by the other image
configurations while leaving img_name unchanged.

In `@src/Dockerfile`:
- Around line 56-58: Update the conditional removal commands in the Node.js
symlink setup to use force removal, replacing each relevant rm invocation for
node, npm, and npx with rm -f so builds continue when the unversioned binaries
are absent.
- Around line 65-68: Move the spec.post_install hook into the preceding RUN
command before the package-manager clean all operation, preserving valid command
chaining and avoiding a standalone RUN block ending with && \. Remove the
separate RUN {{ spec.post_install }} block while keeping the existing
conditional behavior for configurations without post_install.

In `@src/README.md`:
- Around line 289-296: Update the custom-command examples in src/README.md lines
289-296 and src/README.minimal.md lines 361-368 to use INIT_WRAPPER=true in both
container build and container start commands, preserving the documented
init-wrapper usage.
- Around line 191-194: Correct both Podman development-mode examples by adding
the missing --env option before DEBUG_PORT=5454 in src/README.md lines 191-194
and src/README.minimal.md lines 263-266, ensuring both commands set DEBUG_PORT
correctly.
- Around line 227-250: Fix the package.json examples in src/README.md lines
227-250 and src/README.minimal.md lines 299-322 by removing the inline
annotations and trailing commas, or change both fenced blocks to jsonc
consistently so the examples are valid as documented.

---

Nitpick comments:
In `@src/Dockerfile`:
- Line 72: Update the init-wrapper chmod command to use
$STI_SCRIPTS_PATH/init-wrapper unconditionally, removing the spec.version
conditional while preserving the existing executable-permission step.

In `@src/README.md`:
- Around line 29-34: Fix Markdown linting in both source templates: update
src/README.md lines 29-34 and src/README.minimal.md lines 36-61 by adding
appropriate languages to fenced code blocks and normalizing heading formatting
throughout each template, then regenerate the derived artifacts.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 326e8a59-ae2a-4781-97e8-e72da2fe3747

📥 Commits

Reviewing files that changed from the base of the PR and between dc26e09 and 447bf9f.

📒 Files selected for processing (45)
  • 22-minimal/.exclude-c8s
  • 22-minimal/.exclude-c9s
  • 22-minimal/.exclude-fedora
  • 22-minimal/Dockerfile.c8s
  • 22-minimal/s2i/bin/init-wrapper
  • 22-minimal/s2i/bin/run
  • 22/.exclude-c8s
  • 22/.exclude-c9s
  • 22/.exclude-fedora
  • 22/Dockerfile.rhel8
  • 22/Dockerfile.rhel9
  • 22/s2i/bin/init-wrapper
  • 22/s2i/bin/run
  • 22/test
  • 24-minimal/.exclude-c8s
  • 24-minimal/.exclude-rhel8
  • 24-minimal/Dockerfile.c8s
  • 24-minimal/s2i/bin/init-wrapper
  • 24-minimal/s2i/bin/run
  • 24/.exclude-c8s
  • 24/.exclude-rhel8
  • 24/Dockerfile.c8s
  • 24/Dockerfile.rhel8
  • 24/Dockerfile.rhel9
  • 24/s2i/bin/init-wrapper
  • 24/s2i/bin/run
  • 24/test
  • README.md
  • manifest-minimal.yml
  • manifest.yml
  • specs/multispec-npm-config.yml
  • specs/multispec.yml
  • src/Dockerfile
  • src/README.md
  • src/README.minimal.md
  • src/root/opt/app-root/etc/generate_container_user
  • src/root/opt/app-root/etc/npm_global_module_list
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • src/s2i/bin/assemble
  • src/s2i/bin/init-wrapper
  • src/s2i/bin/run
  • src/s2i/bin/run-minimal
  • src/s2i/bin/save-artifacts
  • src/s2i/bin/usage
💤 Files with no reviewable changes (3)
  • 24-minimal/Dockerfile.c8s
  • 24/Dockerfile.c8s
  • 22-minimal/Dockerfile.c8s
🚧 Files skipped from review as they are similar to previous changes (24)
  • 24/test
  • 24-minimal/s2i/bin/run
  • 22/s2i/bin/run
  • src/s2i/bin/init-wrapper
  • 22/Dockerfile.rhel9
  • src/s2i/bin/save-artifacts
  • 22/Dockerfile.rhel8
  • 22/test
  • 24/Dockerfile.rhel9
  • manifest.yml
  • 24/Dockerfile.rhel8
  • 22-minimal/s2i/bin/run
  • src/root/opt/app-root/etc/npm_global_module_list
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • src/s2i/bin/usage
  • src/s2i/bin/run
  • README.md
  • manifest-minimal.yml
  • src/s2i/bin/assemble
  • 24/s2i/bin/run
  • src/s2i/bin/run-minimal
  • specs/multispec.yml
  • src/root/opt/app-root/etc/generate_container_user

Comment thread specs/multispec-npm-config.yml Outdated
Comment thread src/Dockerfile Outdated
Comment thread src/Dockerfile Outdated
Comment thread src/README.md
Comment thread src/README.md
Comment thread src/README.md
@tjuhaszrh
tjuhaszrh force-pushed the dist-git2 branch 2 times, most recently from 987fc0a to 02fb0d2 Compare July 15, 2026 13:27
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Dockerfile`:
- Line 1: Update the Dockerfile base-image template to remove the spec.prod ==
"c8s" condition, retaining only the tag-presence check when deciding whether to
append :latest. Regenerate any derived artifacts after updating the template.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6c47cc05-1e91-46e6-90ad-2ca69b7e3dfc

📥 Commits

Reviewing files that changed from the base of the PR and between 987fc0a and ea3edbc.

📒 Files selected for processing (45)
  • 22-minimal/.exclude-c8s
  • 22-minimal/.exclude-c9s
  • 22-minimal/.exclude-fedora
  • 22-minimal/Dockerfile.c8s
  • 22-minimal/s2i/bin/init-wrapper
  • 22-minimal/s2i/bin/run
  • 22/.exclude-c8s
  • 22/.exclude-c9s
  • 22/.exclude-fedora
  • 22/Dockerfile.rhel8
  • 22/Dockerfile.rhel9
  • 22/s2i/bin/init-wrapper
  • 22/s2i/bin/run
  • 22/test
  • 24-minimal/.exclude-c8s
  • 24-minimal/.exclude-rhel8
  • 24-minimal/s2i/bin/init-wrapper
  • 24-minimal/s2i/bin/run
  • 24/.exclude-c8s
  • 24/.exclude-rhel8
  • 24/Dockerfile.c8s
  • 24/Dockerfile.rhel8
  • 24/Dockerfile.rhel9
  • 24/s2i/bin/init-wrapper
  • 24/s2i/bin/run
  • 24/test
  • README.md
  • manifest-minimal.yml
  • manifest.yml
  • specs/multispec-npm-config.yml
  • specs/multispec.yml
  • src/Dockerfile
  • src/Dockerfile.minimal
  • src/README.md
  • src/README.minimal.md
  • src/root/opt/app-root/etc/generate_container_user
  • src/root/opt/app-root/etc/npm_global_module_list
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • src/s2i/bin/assemble
  • src/s2i/bin/init-wrapper
  • src/s2i/bin/run
  • src/s2i/bin/run-minimal
  • src/s2i/bin/save-artifacts
  • src/s2i/bin/usage
💤 Files with no reviewable changes (2)
  • 24/Dockerfile.c8s
  • 22-minimal/Dockerfile.c8s
🚧 Files skipped from review as they are similar to previous changes (25)
  • 24/s2i/bin/run
  • src/root/opt/app-root/etc/npm_global_module_list
  • 24/Dockerfile.rhel9
  • 22-minimal/s2i/bin/run
  • 22/test
  • src/s2i/bin/usage
  • src/root/opt/app-root/etc/scl_enable
  • 24-minimal/s2i/bin/run
  • 22/Dockerfile.rhel9
  • src/root/opt/app-root/etc/generate_container_user
  • manifest-minimal.yml
  • 22/Dockerfile.rhel8
  • src/s2i/bin/init-wrapper
  • 24/Dockerfile.rhel8
  • manifest.yml
  • src/root/usr/bin/fix-permissions
  • 22/s2i/bin/run
  • specs/multispec-npm-config.yml
  • 24/test
  • src/s2i/bin/run
  • src/s2i/bin/save-artifacts
  • src/s2i/bin/run-minimal
  • README.md
  • src/s2i/bin/assemble
  • specs/multispec.yml

Comment thread src/Dockerfile Outdated
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@tjuhaszrh
tjuhaszrh force-pushed the dist-git2 branch 2 times, most recently from 77d727e to f104306 Compare August 3, 2026 15:00
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/Dockerfile.minimal`:
- Around line 53-57: Move the entire package-manager module disable/enable
command, including its package-manager prefix and -y flag, inside the spec.prod
!= "fedora" conditional in the Dockerfile template. Ensure Fedora renders no
standalone package-manager command before the install command, while non-Fedora
distributions retain both module operations.

In `@src/Dockerfile.minimal.fedora`:
- Line 44: Update the com.redhat.component value in Dockerfile.minimal.fedora so
the rendered name contains only one -container suffix, matching the
22-minimal/Dockerfile.fedora convention; adjust the minimal-specific component
value or remove the existing suffix before adding the minimal suffix, then
regenerate the artifacts.
- Around line 51-54: In the Dockerfile template’s package-install RUN block,
create the unversioned /usr/bin/node, /usr/bin/npm, and /usr/bin/npx links from
their versioned binaries before the node -v validation. Preserve the existing
package installation and version-check flow.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6a99a9d5-55e3-49b2-9c37-58db74d8b607

📥 Commits

Reviewing files that changed from the base of the PR and between ea3edbc and 77d727e.

📒 Files selected for processing (45)
  • 22-minimal/.exclude-c8s
  • 22-minimal/.exclude-c9s
  • 22-minimal/.exclude-fedora
  • 22-minimal/s2i/bin/init-wrapper
  • 22-minimal/s2i/bin/run
  • 22/.exclude-c8s
  • 22/.exclude-c9s
  • 22/.exclude-fedora
  • 22/Dockerfile.rhel8
  • 22/Dockerfile.rhel9
  • 22/s2i/bin/init-wrapper
  • 22/s2i/bin/run
  • 22/test
  • 24-minimal/.exclude-c8s
  • 24-minimal/.exclude-rhel8
  • 24-minimal/s2i/bin/init-wrapper
  • 24-minimal/s2i/bin/run
  • 24/.exclude-c8s
  • 24/.exclude-rhel8
  • 24/Dockerfile.c8s
  • 24/Dockerfile.rhel8
  • 24/Dockerfile.rhel9
  • 24/s2i/bin/init-wrapper
  • 24/s2i/bin/run
  • 24/test
  • README.md
  • manifest-minimal.yml
  • manifest.yml
  • specs/multispec-npm-config.yml
  • specs/multispec.yml
  • src/Dockerfile
  • src/Dockerfile.minimal
  • src/Dockerfile.minimal.fedora
  • src/README.md
  • src/README.minimal.md
  • src/root/opt/app-root/etc/generate_container_user
  • src/root/opt/app-root/etc/npm_global_module_list
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • src/s2i/bin/assemble
  • src/s2i/bin/init-wrapper
  • src/s2i/bin/run
  • src/s2i/bin/run-minimal
  • src/s2i/bin/save-artifacts
  • src/s2i/bin/usage
💤 Files with no reviewable changes (1)
  • 24/Dockerfile.c8s
🚧 Files skipped from review as they are similar to previous changes (25)
  • src/s2i/bin/usage
  • 24/test
  • 24-minimal/s2i/bin/run
  • 24/s2i/bin/run
  • src/s2i/bin/save-artifacts
  • src/root/opt/app-root/etc/npm_global_module_list
  • 22/s2i/bin/run
  • 24/Dockerfile.rhel9
  • src/root/opt/app-root/etc/scl_enable
  • src/root/usr/bin/fix-permissions
  • manifest-minimal.yml
  • README.md
  • src/s2i/bin/init-wrapper
  • 22/test
  • 22/Dockerfile.rhel9
  • 22-minimal/s2i/bin/run
  • 24/Dockerfile.rhel8
  • 22/Dockerfile.rhel8
  • src/root/opt/app-root/etc/generate_container_user
  • src/s2i/bin/run-minimal
  • specs/multispec-npm-config.yml
  • src/s2i/bin/run
  • manifest.yml
  • specs/multispec.yml
  • src/s2i/bin/assemble

Comment thread src/Dockerfile.minimal
Comment thread src/Dockerfile.minimal.fedora Outdated
Comment thread src/Dockerfile.minimal.fedora
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

Replace manually-maintained Dockerfiles with distgen-generated ones using
Jinja2 templates and multispec YAML configuration. This enables consistent
Dockerfile generation across all distro/version combinations.

Changes:
- Add src/Dockerfile, src/Dockerfile.minimal, src/Dockerfile.minimal.fedora
  as Jinja2 templates for distgen rendering
- Add src/README.md, src/README.minimal.md templates with typo fixes and
  corrected documentation (environment variable, key-value pairs, etc.)
- Add src/s2i/bin/* scripts (assemble, run, run-minimal, save-artifacts,
  usage, init-wrapper) with package.json existence check and quoted variables
- Add manifest.yml and manifest-minimal.yml defining generation rules
- Add specs/multispec.yml with per-distro (fedora, rhel8/9/10, c9s, c10s)
  and per-version (20, 22, 24, plus minimal variants) configuration
- Add specs/multispec-npm-config.yml for npm configuration variants
- Regenerate all Dockerfiles for versions 22, 22-minimal, 24, 24-minimal
  across all supported distros
- Regenerate README.md files from templates
- Update root README.md version table

Key template features:
- Conditional package naming for versioned distros (Fedora, RHEL10, C10S
  use nodejs$VERSION/nodejs$VERSION-npm; others use nodejs/npm)
- Conditional build dependencies (gcc-toolset-13 for RHEL8, libatomic_ops
  for Fedora)
- Versioned binary symlinks (rm -f + ln -s) for distros with
  needs_versioned_links (Fedora, RHEL10, C10S)
- Module enable/disable for distros using dnf modules (RHEL8/9, C9S)
- microdnf support for minimal images
- Fedora 44 base images for all Fedora builds
- Correct minimal package lists including nodejs-nodemon, nodejs-full-i18n,
  findutils, tar, which
- trim_blocks-safe template structure to avoid newline stripping issues

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@tjuhaszrh

Copy link
Copy Markdown
Contributor Author

[test]

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.

2 participants