Ruby 3.4
Ruby 3.4.0 was released on 2024-12-25: https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/ This epic tracks the work required to move GitLab from Ruby 3.3 to Ruby 3.4, from getting the topic branch green through to releasing to Self-Managed. ## Goals - All `gitlab-org/gitlab` pipelines pass on Ruby 3.4. - Ruby 3.4 is the default for local development (GDK/Caproni) and for MR pipelines. - No performance regression against Ruby 3.3, validated with GPT. - Ruby 3.4 is rolled out to GitLab.com and shipped to Self-Managed. ## Notable language changes See the [Ruby 3.4 changelog](https://rubyreferences.github.io/rubychanges/3.4.html) for the full list. - `it` as the anonymous block argument - `**nil` unpacking - String literals will be frozen in Ruby 3.5 (warnings surface here first) - `Range#step` iterates any class implementing `+` - Backtrace improvements - Ractor improvements - Significant implementation updates (Prism parser, modular GC) ## Plan <table> <tr> <th> \# </th> <th>Item</th> <th>Owning team/DRIs</th> <th>Issue/MR</th> <th>Target date</th> <th>Status</th> </tr> <tr> <td>1</td> <td>Get the Ruby 3.4-branch pipeline green and set ruby next to Ruby 3.4</td> <td>Stan</td> <td> gitlab-org/gitlab!244463 </td> <td></td> <td>Rolled back for now until 2 is implemented</td> </tr> <tr> <td>2</td> <td> Allow pipelines to run Ruby 3.4 — add `pipeline:run-as-ruby3.4` / `pipeline:run-as-ruby3.3` labels and restore scheduled `master` builds </td> <td>Development Health/Pipeline Maintainers</td> <td> gitlab-org/gitlab#619382 </td> <td></td> <td>Not started</td> </tr> <tr> <td>3</td> <td>Default the devkits (GDK/Caproni) to Ruby 3.4</td> <td>Development Tooling</td> <td> gitlab-org/gitlab-development-kit#3342<br> gitlab-org/gitlab-development-kit#3343 (patch application bug, non-blocking) </td> <td></td> <td>Not started</td> </tr> <tr> <td>4</td> <td>Audit gems and update/fix issues arising from it</td> <td>TBD — some gems have shared/unclear ownership</td> <td> https://gitlab.com/groups/gitlab-org/-/work_items/18009+ </td> <td>2026-10-31</td> <td>Not started</td> </tr> <tr> <td>5</td> <td>Run GPT to validate performance</td> <td> Performance Enablement @AndyWH </td> <td> gitlab-org/gitlab#622304 </td> <td></td> <td>Not started</td> </tr> <tr> <td>6</td> <td>Build MRs with Ruby 3.4 by default</td> <td>Development Health/Pipeline Maintainers</td> <td></td> <td></td> <td>Not started</td> </tr> <tr> <td>7</td> <td>Distribution updates</td> <td>Delivery Enablement</td> <td></td> <td></td> <td>Not started</td> </tr> <tr> <td>8</td> <td>Roll out to GitLab.com</td> <td>Delivery Enablement</td> <td></td> <td></td> <td>Not started</td> </tr> <tr> <td>9</td> <td>Update CI to use Ruby 3.4</td> <td>Development Health/Pipeline Maintainers</td> <td></td> <td></td> <td>Not started</td> </tr> <tr> <td>10</td> <td>Update the release post and release to Self-Managed</td> <td>Delivery Enablement</td> <td></td> <td></td> <td>Not started</td> </tr> <tr> <td>11</td> <td>Clean up Ruby 3.3 pipeline configuration</td> <td>Development Health/Pipeline Maintainers</td> <td></td> <td></td> <td>Not started</td> </tr> </table>
epic