Add the rubygems_package_requests_forwarding cascading setting
Part of the approved RubyGems forwarding work (#601752). This is the first of a series of smaller MRs that supersede !242274 (closed), whose mechanism was approved by Mike. Merge order: !244621 (merged) (this) → !244623 (closed) → !244626 (closed).
What
Adds the cascading rubygems_package_requests_forwarding setting (and its lock_ counterpart) at instance → group → project, defaulting to off, mirroring the existing npm/PyPI/Maven package-request-forwarding settings. Exposed via the settings REST API and GraphQL. Dormant — nothing forwards yet.
This is the foundation slice of RubyGems request forwarding:
| Slice | MR |
|---|---|
| Setting (data + API) | this MR |
Forwarding to rubygems.org (+ /api/v1/dependencies 404) + admin UI |
!244623 (closed) — stacked on this |
| Group + package-list UI (frontend) | !244626 (closed) — stacked on !244623 (closed) |
Changes
- Migration adds
rubygems_package_requests_forwarding+lock_rubygems_package_requests_forwardingtonamespace_package_settings; the instance value lives inapplication_settings.package_registry(JSONB), defaultfalse Namespace::PackageSettingcascading_attr(instance → group → project, with thelock_enforcing downward);Namespace/Projectdelegates- Settings REST API param + entity + helper; GraphQL
namespacePackageSettingstype/mutation + update service - JSON schema, docs, and regenerated GraphQL reference + introspection + OpenAPI
- No forwarding behaviour — existing RubyGems request specs are untouched
Why default off
npm/PyPI/Maven default their forwarding setting to on, so upgrading silently starts forwarding not-found requests to the public registry. We default RubyGems off so this is a no-op for existing instances until an admin opts in.
Testing
bundle exec rspec \
spec/models/application_setting_spec.rb \
spec/models/namespace/package_setting_spec.rb \
spec/graphql/types/namespace/package_settings_type_spec.rb \
spec/graphql/mutations/namespace/package_settings/update_spec.rb \
spec/services/namespaces/package_settings/update_service_spec.rb \
ee/spec/requests/api/settings_spec.rbManual GDK testing
bundle exec rails db:migrate— adds the twonamespace_package_settingscolumns.rails console→Gitlab::CurrentSettings.rubygems_package_requests_forwardingreturnsfalse(default off).- REST:
curl -XPUT --header "PRIVATE-TOKEN: <admin token>" "http://gdk.test:3000/api/v4/application/settings?rubygems_package_requests_forwarding=true"returns the field. - GraphQL group override: run the
namespacePackageSettingsmutation withrubygemsPackageRequestsForwarding: true; thenProject.find(<id>).rubygems_package_requests_forwardingcascades group → instance. - DB check:
SELECT package_registry -> 'rubygems_package_requests_forwarding' FROM application_settings ORDER BY id DESC LIMIT 1;and the columns onnamespace_package_settings.
No forwarding happens yet — the setting is inert until the forwarding MR.
Related to #605488.
Database review
Adds two boolean columns to namespace_package_settings via add_column (rubygems_package_requests_forwarding nullable; lock_rubygems_package_requests_forwarding default false, NOT NULL). No data migration, no new indexes.