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_forwarding to namespace_package_settings; the instance value lives in application_settings.package_registry (JSONB), default false
  • Namespace::PackageSetting cascading_attr (instance → group → project, with the lock_ enforcing downward); Namespace / Project delegates
  • Settings REST API param + entity + helper; GraphQL namespacePackageSettings type/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.rb

Manual GDK testing

  1. bundle exec rails db:migrate — adds the two namespace_package_settings columns.
  2. rails consoleGitlab::CurrentSettings.rubygems_package_requests_forwarding returns false (default off).
  3. REST: curl -XPUT --header "PRIVATE-TOKEN: <admin token>" "http://gdk.test:3000/api/v4/application/settings?rubygems_package_requests_forwarding=true" returns the field.
  4. GraphQL group override: run the namespacePackageSettings mutation with rubygemsPackageRequestsForwarding: true; then Project.find(<id>).rubygems_package_requests_forwarding cascades group → instance.
  5. DB check: SELECT package_registry -> 'rubygems_package_requests_forwarding' FROM application_settings ORDER BY id DESC LIMIT 1; and the columns on namespace_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.

Edited by Hannah Baker

Merge request reports

Loading
Loading