Skip to content

Add Rails 8 / Ruby 4 / Bundler 4 SSI weblog app#7249

Draft
lloeki wants to merge 2 commits into
mainfrom
lloeki/ruby4-bundler4
Draft

Add Rails 8 / Ruby 4 / Bundler 4 SSI weblog app#7249
lloeki wants to merge 2 commits into
mainfrom
lloeki/ruby4-bundler4

Conversation

@lloeki

@lloeki lloeki commented Jul 2, 2026

Copy link
Copy Markdown
Member

Motivation

Unlock Ruby 4.0 / RubyGems 4.0 / Bundler 4.0 support for Ruby SSI (lib-injection).
This adds a Ruby 4 SSI target so injection is exercised against Ruby 4, RubyGems 4,
and Bundler 4, complementing the injector guard change in datadog-injector-rb#65.

Changes

  • Add the RB40 runtime (4.0.14) to utils/docker_ssi/docker_ssi_runtimes.json.
  • Add lib-injection/build/docker/ruby/lib_injection_rails80_app: the Rails 7.0
    lib-injection app upgraded to Rails 8.0 (load_defaults 8.0, Ruby 4.0.1) with a
    Bundler 4 lockfile. nokogiri is pinned to the ruby platform so it builds against
    the local glibc.
  • Add rails8-app SSI Dockerfiles (plain, deployment, vendored).
  • Register rails8-app* in docker_ssi.json weblog lists and weblog specs
    (allowed_runtime_versions: ["RB40"]), and extend the ruby-app* specs with RB40.
  • Drop the never-committed rails70 WIP (a duplicate of the Rails 7.0 app) and its
    rails7-app Dockerfile.

Locally verified the app boots: Rails 8.0.5 on Ruby 4.0.1 (images-rb 4.0-gnu-gcc).

Depends on the Ruby 4 / Bundler 4 images-rb rollout and datadog-injector-rb#65.

Workflow

  1. ⚠️ Create your PR as draft ⚠️
  2. Work on you PR until the CI passes
  3. Mark it as ready for review
    • Test logic is modified? -> Get a review from RFC owner.
    • Framework is modified, or non obvious usage of it -> get a review from R&P team

🚀 Once your PR is reviewed and the CI green, you can merge it!

🛟 #apm-shared-testing 🛟

Reviewer checklist

  • Anything but tests/ or manifests/ is modified ? I have the approval from R&P team
  • A docker base image is modified?
    • the relevant build-XXX-image label is present
  • A scenario is added, removed or renamed?

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

CODEOWNERS have been resolved as:

lib-injection/build/docker/ruby/lib_injection_rails80_app/.gitattributes  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/.gitignore    @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/.ruby-version  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/Gemfile       @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/Gemfile.lock  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/README.md     @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/Rakefile      @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/assets/config/manifest.js  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/assets/images/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/assets/stylesheets/application.css  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/controllers/application_controller.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/controllers/concerns/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/controllers/datadog_controller.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/helpers/application_helper.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/models/application_record.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/models/concerns/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/app/views/layouts/application.html.erb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/bin/bundle    @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/bin/rails     @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/bin/rake      @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/bin/setup     @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config.ru     @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/application.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/boot.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/database.yml  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/environment.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/environments/development.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/environments/production.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/environments/test.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/initializers/assets.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/initializers/content_security_policy.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/initializers/filter_parameter_logging.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/initializers/inflections.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/initializers/permissions_policy.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/locales/en.yml  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/puma.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/config/routes.rb  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/db/seeds.rb   @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/lib/assets/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/lib/tasks/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/404.html  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/422.html  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/500.html  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/apple-touch-icon-precomposed.png  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/apple-touch-icon.png  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/favicon.ico  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/public/robots.txt  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/controllers/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/fixtures/files/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/helpers/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/integration/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/models/.keep  @DataDog/system-tests-core
lib-injection/build/docker/ruby/lib_injection_rails80_app/test/test_helper.rb  @DataDog/system-tests-core
utils/build/ssi/ruby/rails8-app-deployment-mode.Dockerfile              @DataDog/system-tests-core
utils/build/ssi/ruby/rails8-app-vendored-mode.Dockerfile                @DataDog/system-tests-core
utils/build/ssi/ruby/rails8-app.Dockerfile                              @DataDog/system-tests-core
utils/build/ssi/base/ruby_install_runtimes.sh                           @DataDog/system-tests-core
utils/docker_ssi/docker_ssi_definitions.py                              @DataDog/system-tests-core
utils/docker_ssi/docker_ssi_runtimes.json                               @DataDog/system-tests-core
utils/scripts/ci_orchestrators/docker_ssi.json                          @DataDog/system-tests-core

@datadog-prod-us1-5

datadog-prod-us1-5 Bot commented Jul 2, 2026

Copy link
Copy Markdown

Pipelines  Tests

Fix all issues with BitsAI

⚠️ Warnings

🚦 17 Pipeline jobs failed

DataDog/system-tests | jetty-app.arm64.DOC: [public.ecr.aws/docker/library/almalinux:9.4, linux/arm64, 17.0.15-zulu]   View in Datadog   GitLab

DataDog/system-tests | rails8-app-vendored-mode.arm64.DOA9: [public.ecr.aws/lts/ubuntu:22.04, linux/arm64, 4.0.5]   View in Datadog   GitLab

DataDog/system-tests | rails8-app.arm64.DO5A: [public.ecr.aws/lts/ubuntu:22.04, linux/arm64, 4.0.5]   View in Datadog   GitLab

View all 17 failed jobs.

ℹ️ Info

No other issues found (see more)

🧪 All tests passed
❄️ No new flaky tests detected

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: e591e67 | Docs | Datadog PR Page | Give us feedback!

@lloeki lloeki force-pushed the lloeki/ruby4-bundler4 branch from 62cba37 to acf9ee2 Compare July 2, 2026 15:05
Introduce a Ruby 4.0 SSI target so lib-injection is exercised against
Ruby 4, RubyGems 4, and Bundler 4.

 - Add the RB40 runtime (Ruby 4.0.1) to docker_ssi_runtimes.json.
 - Give Ruby 4.0 RubyGems/Bundler 4.0.14 in the SSI base image
   (ruby_install_runtimes.sh), replacing the 2.7.2 default, so the
   Bundler 4 path is actually exercised.
 - Add lib_injection_rails80_app: a copy of the Rails 7.0 lib-injection
   app upgraded to Rails 8.0 (load_defaults 8.0, Ruby 4.0.1) with a
   Bundler 4.0.14 lockfile. nokogiri is pinned to the ruby platform so
   it builds against the local glibc.
 - Add rails8-app SSI Dockerfiles (plain, deployment, vendored) that
   build from the new app.
 - Register rails8-app* in docker_ssi.json weblog lists and weblog
   specs (allowed_runtime_versions RB40). The ruby-app* weblogs stay on
   RB27-RB34: they build the Rails 7.0 app, which is not Ruby 4 ready.
@lloeki lloeki force-pushed the lloeki/ruby4-bundler4 branch from acf9ee2 to 88f0583 Compare July 2, 2026 15:50
The RB40 runtime used Ruby 4.0.1, which ruby-build (used by the SSI base
image via rbenv) does not provide — only 4.0.5 — so base image builds
failed. The docker_ssi scenario also rejected 4.0.1 because
RubyRuntimeInstallableVersions had no RB40 entry.

 - docker_ssi_runtimes.json: RB40 -> 4.0.5.
 - docker_ssi_definitions.py: add the RB40 installable version (4.0.5).
 - lib_injection_rails80_app/.ruby-version: 4.0.5 for consistency (the
   SSI Dockerfiles strip it, but keep it aligned with the runtime).
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.

1 participant