Audit and fix gitlab-rails dependencies for Ruby 3.3/3.4 compatibility
We audited https://gitlab.com/gitlab-org/gitlab/-/issues/404750+ gems for Ruby 3.1/3.2 support and require a similar audit process for Ruby 3.3 and 3.4.
Our current tentative timeline targets are:
* Initial audit complete by 2025-07-31
* Any follow up actions for 3.3 completed by 2025-08-31
## What to do
EMs I would appreciate you help in finding Engineers who can help identify and audit Gems related to your teams for Ruby 3.3/3.4 compatibility. Thank you!
### Instructions
Some guidelines for how to use the [gem audit sheet](https://docs.google.com/spreadsheets/d/1GtaHio-lWXC_8wO8ENKKQ-u22eQiqWF77RpvduzWQPE/edit?gid=23097923#gid=23097923) below.
Note that the sheet uses color formatting to easily spot problems. Some columns require you to put in `Y` or `N` for this to work.
#### Process
* Focus on gems first that you have expertise in. If your group owns the area in which this gem is used, fill in `Category/owner` and any other blank rows (version used, use case, etc).
* Assign yourself to any gem you're looking at using the last column. You can `@`-autocomplete your GApps user.
* Link the gem name in the 1st column to the code or project repository for easy reference.
* **When your review is complete, mark the** `Review complete` column with `Y` so it turns from red to green. Done here means you are done performing the review; it does not mean the issues you may have found are fixed.
* **If you found problems, set the** `Action required` column to `Y` if you think we must act on these issues, or `N` otherwise. You can also set it to `?` to indicate you are unsure about it. Use the `Comments/actions` column to suggest follow-ups. Prefer to link to GitLab issues here instead of writing walls of text. Use your best judgment to suggest solutions, keeping in mind that this is all done on a best-effort basis. We should focus on high-severity problems. It could be OK to just document edge-case issues for now.
* You can use [ruby-audit](https://gitlab.com/splattael/ruby-audit) to help pull the correct gem source code for your testing. Also consider contributing to the project to further automate ruby audits.
* For the EMs, please check the box next to your name in the [Manager sign off](https://gitlab.com/groups/gitlab-org/-/epics/8845#manager-sign-off) section once your team has done 1) auditing the gems your team owns and 2) creating follow-up issues when seeing Ruby 3.3/3.4 compatibility issue with those gems.
* **IMPORTANT:** Should you resolve any issues you found, e.g. by updating a gem to a newer version or submitting code fixes, **please update the entire row to reflect the new state and toggle** `Action required` to `N` since otherwise it is unclear whether follow-up work is complete or ongoing.
#### Considerations
* **We will roll out 3.3 first, but are looking to document both 3.3 and 3.4 issues**
* Think about use cases that may not be well-covered with automated tests we already run. An example could be edge cases that only trigger with specific data being used.
* Pay special attention to gems that use C-extensions. These talk to internal MRI APIs that may change across major Ruby releases.
* Browse the gem's issue tracker for any signs of Ruby 3.3/3.4 incompatibilities.
* Check whether the gem is running CI builds against Ruby 3.3/3.4 already.
# GitLab Categories, Engineering Managers, and Stages (With Assigned Gems)
<table>
<tr>
<th>Category</th>
<th>Engineering Manager</th>
<th>Stage</th>
<th>Gem Count</th>
<th>Gems</th>
<th>Manager Sign off</th>
</tr>
<tr>
<td>
[AI Abstraction Layer](https://gitlab.com/gitlab-org/gitlab/-/issues/537649)
</td>
<td>Martin Wortschack</td>
<td>AI-powered</td>
<td>2</td>
<td>circuitbox, ruby-openai</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[API](https://gitlab.com/gitlab-org/gitlab/-/issues/521839)
</td>
<td>Martin Wortschack</td>
<td>Foundations</td>
<td>6</td>
<td>apollo_upload_server, grape, grape-entity, grape-path-helpers, grape_logging, graphql</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Application Instrumentation](https://gitlab.com/gitlab-org/gitlab/-/issues/521691)
</td>
<td>Ashwin Bilgi</td>
<td>Monitor</td>
<td>1</td>
<td>gitlab-sdk</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Backup/Restore</td>
<td>John Jarvis</td>
<td>Data Access</td>
<td>1</td>
<td>gitlab-backup-cli</td>
<td></td>
</tr>
<tr>
<td>Cloud Connector</td>
<td>Paul John Phillips</td>
<td>Production Engineering</td>
<td>1</td>
<td>gitlab-cloud-connector</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Continuous Integration](https://gitlab.com/gitlab-org/gitlab/-/issues/537675)
</td>
<td>Caroline Simpson</td>
<td>Verify</td>
<td>1</td>
<td>fugit</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Database](https://gitlab.com/gitlab-org/gitlab/-/issues/537676)
</td>
<td>Alex Ives</td>
<td>Data Access</td>
<td>4</td>
<td>click_house-client, marginalia, pg, pg_query</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Deployment Management</td>
<td>Nicolò Maria Mezzopera</td>
<td>Deploy</td>
<td>1</td>
<td>gitlab-kas-grpc</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Gitaly](https://gitlab.com/gitlab-org/gitlab/-/issues/541397)
</td>
<td>John Cai</td>
<td>Data Access</td>
<td>2</td>
<td>gitaly, rugged</td>
<td></td>
</tr>
<tr>
<td>Global Search</td>
<td>Changzheng Liu</td>
<td>Foundations</td>
<td>9</td>
<td>aws-sdk-cloudformation, aws-sdk-core, aws-sdk-s3, elasticsearch-api, elasticsearch-model, elasticsearch-rails, faraday-typhoeus, faraday_middleware-aws-sigv4, typhoeus</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Importers](https://gitlab.com/gitlab-org/gitlab/-/issues/521839)
</td>
<td>Martin Wortschack</td>
<td>Foundations</td>
<td>4</td>
<td>faraday-multipart, graphlient, octokit, ruby-fogbugz</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Insider Threat](https://gitlab.com/gitlab-org/gitlab/-/issues/541398)
</td>
<td>Jay Swain</td>
<td>Software Supply Chain Security</td>
<td>5</td>
<td>akismet, invisible_captcha, recaptcha, spamcheck, telesignenterprise</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Internationalization</td>
<td>Martin Wortschack</td>
<td>Foundations</td>
<td>2</td>
<td>gettext_i18n_rails, rails-i18n</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Markdown](https://gitlab.com/gitlab-org/gitlab/-/issues/541399)
</td>
<td>Vladimir Shushlin</td>
<td>Plan</td>
<td>16</td>
<td>RedCloth, asciidoctor, asciidoctor-include-ext, asciidoctor-kroki, asciidoctor-plantuml, commonmarker, creole, deckar01-task_list, gitlab-glfm-markdown, gitlab-markup, html-pipeline, kramdown, org-ruby, tanuki_emoji, unicode-emoji, wikicloth</td>
<td>
:white_check_mark:
https://github.com/asciidoctor/asciidoctor/issues/4690
</td>
</tr>
<tr>
<td>Mobile DevOps</td>
<td>Not specified</td>
<td>Mobile</td>
<td>2</td>
<td>CFPropertyList, app_store_connect</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Notifications</td>
<td>Sam Beckham</td>
<td>Foundations</td>
<td>1</td>
<td>premailer-rails</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Observability](https://gitlab.com/gitlab-org/gitlab/-/issues/521654)
</td>
<td>Nicholas Klick</td>
<td>Monitor</td>
<td>26</td>
<td>opentelemetry-exporter-otlp, opentelemetry-instrumentation-action_pack, opentelemetry-instrumentation-action_view, opentelemetry-instrumentation-active_job, opentelemetry-instrumentation-active_record, opentelemetry-instrumentation-active_support, opentelemetry-instrumentation-aws_sdk, opentelemetry-instrumentation-concurrent_ruby, opentelemetry-instrumentation-ethon, opentelemetry-instrumentation-excon, opentelemetry-instrumentation-faraday, opentelemetry-instrumentation-grape, opentelemetry-instrumentation-graphql, opentelemetry-instrumentation-http, opentelemetry-instrumentation-http_client, opentelemetry-instrumentation-net_http, opentelemetry-instrumentation-pg, opentelemetry-instrumentation-rack, opentelemetry-instrumentation-rails, opentelemetry-instrumentation-rake, opentelemetry-instrumentation-redis, opentelemetry-instrumentation-sidekiq, opentelemetry-sdk, sentry-rails, sentry-ruby, sentry-sidekiq</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Package Registry](https://gitlab.com/gitlab-org/gitlab/-/issues/541437)
</td>
<td>Crystal Poole</td>
<td>Package</td>
<td>1</td>
<td>arr-pm</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Pages](https://gitlab.com/gitlab-org/gitlab/-/issues/541450)
</td>
<td>Alexandru Croitor</td>
<td>Plan</td>
<td>3</td>
<td>acme-client, rubyzip, validates_hostname</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Product Analytics</td>
<td>Nicholas Klick</td>
<td>Monitor</td>
<td>2</td>
<td>ohai, snowplow-tracker</td>
<td></td>
</tr>
<tr>
<td>
[Redis](https://gitlab.com/gitlab-org/gitlab/-/issues/541452)
</td>
<td>John Jarvis</td>
<td>Data Access</td>
<td>3</td>
<td>redis, redis-actionpack, redis-clustering</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>Scalability</td>
<td>Liam McAndrew</td>
<td>Production Engineering</td>
<td>2</td>
<td>sidekiq, sidekiq-cron</td>
<td></td>
</tr>
<tr>
<td>
[Secret Detection](https://gitlab.com/gitlab-org/gitlab/-/issues/541454)
</td>
<td>Amar Patel</td>
<td>Application Security Testing</td>
<td>1</td>
<td>gitlab-secret_detection</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Software Composition Analysis](https://gitlab.com/gitlab-org/gitlab/-/issues/541455)
</td>
<td>Nick Ilieskou</td>
<td>Application Security Testing</td>
<td>2</td>
<td>cvss-suite, semver_dialects</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Source Code Management](https://gitlab.com/gitlab-org/gitlab/-/issues/535988)
</td>
<td>André Luís</td>
<td>Create</td>
<td>1</td>
<td>gpgme</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[System Access](https://gitlab.com/gitlab-org/gitlab/-/issues/525599)
</td>
<td>Adil Farrukh</td>
<td>Software Supply Chain Security</td>
<td>32</td>
<td>bcrypt, devise, devise-two-factor, doorkeeper, doorkeeper-device_authorization_grant, doorkeeper-openid_connect, duo_api, gitlab_omniauth-ldap, gssapi, i18n_data, jwt, net-ldap, oauth2, omniauth, omniauth-alicloud, omniauth-atlassian-oauth2, omniauth-auth0, omniauth-azure-activedirectory-v2, omniauth-github, omniauth-gitlab, omniauth-google-oauth2, omniauth-oauth2-generic, omniauth-salesforce, omniauth-saml, omniauth-shibboleth-redux, omniauth_crowd, omniauth_openid_connect, openid_connect, rack-oauth2, rqrcode, ruby-saml, timfel-krb5-auth</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Team Planning](https://gitlab.com/gitlab-org/gitlab/-/issues/541456)
</td>
<td>Donald Cook</td>
<td>Plan</td>
<td>3</td>
<td>diff_match_patch, icalendar, truncato</td>
<td>
:white_check_mark: (@acroitor)
</td>
</tr>
<tr>
<td>Vulnerability Management</td>
<td>Neil McCorrison</td>
<td>Security Risk Management</td>
<td>1</td>
<td>gitlab-security_report_schemas</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
[Workspaces](https://gitlab.com/gitlab-org/gitlab/-/issues/541457)
</td>
<td>Adebayo Adesanya</td>
<td>Create</td>
<td>1</td>
<td>devfile</td>
<td>
:white_check_mark:
</td>
</tr>
<tr>
<td>
**Total**
</td>
<td></td>
<td></td>
<td>
**136**
</td>
<td></td>
<td></td>
</tr>
</table>
Note: There are also 146 gems categorized as "shared" which are not attributed to a specific feature category. Total across all gems (including shared): 282
epic