Add Npm VRegs models for registries and upstreams

What does this MR do and why?

The MR adds three models for npm virtual registry feature:

  • VirtualRegistries::Packages::Npm::Registry
  • VirtualRegistries::Packages::Npm::Upstream
  • VirtualRegistries::Packages::Npm::RegistryUpstream
erDiagram
    namespaces ||--o{ virtual_registries_packages_npm_registries : "has many"
    namespaces ||--o{ virtual_registries_packages_npm_upstreams : "has many"
    namespaces ||--o{ virtual_registries_packages_npm_registry_upstreams : "has many"
    
    virtual_registries_packages_npm_registries ||--o{ virtual_registries_packages_npm_registry_upstreams : "has many"
    virtual_registries_packages_npm_upstreams ||--o{ virtual_registries_packages_npm_registry_upstreams : "has many"
    
    virtual_registries_packages_npm_registries {
        bigint id PK
        bigint group_id FK
        timestamp created_at
        timestamp updated_at
        text name "max 255"
        text description "max 1024"
    }
    
    virtual_registries_packages_npm_upstreams {
        bigint id PK
        bigint group_id FK
        timestamp created_at
        timestamp updated_at
        smallint cache_validity_hours "default 24, >= 0"
        jsonb username "encrypted"
        jsonb password "encrypted"
        text url "max 255"
        text name "max 255"
        text description "max 1024"
    }
    
    virtual_registries_packages_npm_registry_upstreams {
        bigint id PK
        bigint group_id FK
        bigint registry_id FK
        bigint upstream_id FK
        timestamp created_at
        timestamp updated_at
        smallint position "default 1, range 1-5"
    }
    
    namespaces {
        bigint id PK
    }

References

Create models for Registries and Upstreams (#581343)

Screenshots or screen recordings

No.

Database migrations output

Migrations up

gitlab 581343:1d728451 % rails db:migrate:main                            
DEPRECATION WARNING: `config.active_record.warn_on_records_fetched_greater_than` is deprecated and will be removed in Rails 8.0. Please subscribe to `sql.active_record` notifications and access the row count field to detect large result set sizes. (called from <main> at /Users/dima/work/gdk/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 130720, pg_backend_pid: 74562
main: == 20251124125156 CreateVirtualRegistriesPackagesNpmRegistries: migrating =====
main: -- create_table(:virtual_registries_packages_npm_registries, {:if_not_exists=>true})
main: -- quote_column_name(:name)
main:    -> 0.0000s
main: -- quote_column_name(:description)
main:    -> 0.0000s
main:    -> 0.0318s
main: == 20251124125156 CreateVirtualRegistriesPackagesNpmRegistries: migrated (0.0500s) 

main: == 20251124125159 CreateVirtualRegistriesPackagesNpmUpstreams: migrating ======
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- create_table(:virtual_registries_packages_npm_upstreams, {:if_not_exists=>true})
main: -- quote_column_name(:url)
main:    -> 0.0000s
main: -- quote_column_name(:name)
main:    -> 0.0000s
main: -- quote_column_name(:description)
main:    -> 0.0000s
main:    -> 0.0081s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams\nADD CONSTRAINT check_b1a7ef9b09\nCHECK ( cache_validity_hours >= 0 )\nNOT VALID;\n")
main:    -> 0.0004s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams VALIDATE CONSTRAINT check_b1a7ef9b09;")
main:    -> 0.0004s
main: -- execute("RESET statement_timeout")
main:    -> 0.0002s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams\nADD CONSTRAINT check_c3551a86fc\nCHECK ( metadata_cache_validity_hours > 0 )\nNOT VALID;\n")
main:    -> 0.0003s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams VALIDATE CONSTRAINT check_c3551a86fc;")
main:    -> 0.0003s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams\nADD CONSTRAINT check_33b72b4447\nCHECK ( num_nonnulls(username, password) = 2 OR num_nulls(username, password) = 2 )\nNOT VALID;\n")
main:    -> 0.0008s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_upstreams VALIDATE CONSTRAINT check_33b72b4447;")
main:    -> 0.0004s
main: == 20251124125159 CreateVirtualRegistriesPackagesNpmUpstreams: migrated (0.1135s) 

main: == 20251124125163 CreateVirtualRegistriesPackagesNpmRegistryUpstreams: migrating 
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- create_table(:virtual_registries_packages_npm_registry_upstreams, {:if_not_exists=>true})
main:    -> 0.0119s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_registry_upstreams\nADD CONSTRAINT check_9b0da96732\nCHECK ( 1 <= position AND position <= 20 )\nNOT VALID;\n")
main:    -> 0.0005s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0002s
main: -- execute("ALTER TABLE virtual_registries_packages_npm_registry_upstreams VALIDATE CONSTRAINT check_9b0da96732;")
main:    -> 0.0004s
main: -- execute("RESET statement_timeout")
main:    -> 0.0002s
main: == 20251124125163 CreateVirtualRegistriesPackagesNpmRegistryUpstreams: migrated (0.0892s)

main: == 20251124125165 AddConstraintsToVirtualRegistriesPackagesNpmRegistryUpstreamsPosition: migrating 
main: -- execute("      ALTER TABLE virtual_registries_packages_npm_registry_upstreams\n      ADD CONSTRAINT constraint_vreg_pkgs_npm_reg_upst_on_unique_reg_pos\n      UNIQUE (registry_id, position) DEFERRABLE INITIALLY DEFERRED;\n")
main:    -> 0.0010s
main: == 20251124125165 AddConstraintsToVirtualRegistriesPackagesNpmRegistryUpstreamsPosition: migrated (0.0040s) 

main: == [advisory_lock_connection] object_id: 130720, pg_backend_pid: 74562

Migrations down

gitlab 581343:1d728451 % rails db:migrate:down:main VERSION=20251124125165
DEPRECATION WARNING: `config.active_record.warn_on_records_fetched_greater_than` is deprecated and will be removed in Rails 8.0. Please subscribe to `sql.active_record` notifications and access the row count field to detect large result set sizes. (called from <main> at /Users/dima/work/gdk/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74185
main: == 20251124125165 AddConstraintsToVirtualRegistriesPackagesNpmRegistryUpstreamsPosition: reverting 
main: -- execute("      ALTER TABLE virtual_registries_packages_npm_registry_upstreams\n      DROP CONSTRAINT IF EXISTS constraint_vreg_pkgs_npm_reg_upst_on_unique_reg_pos;\n")
main:    -> 0.0024s
main: == 20251124125165 AddConstraintsToVirtualRegistriesPackagesNpmRegistryUpstreamsPosition: reverted (0.0216s) 

main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74185
gitlab 581343:1d728451 % rails db:migrate:down:main VERSION=20251124125163
DEPRECATION WARNING: `config.active_record.warn_on_records_fetched_greater_than` is deprecated and will be removed in Rails 8.0. Please subscribe to `sql.active_record` notifications and access the row count field to detect large result set sizes. (called from <main> at /Users/dima/work/gdk/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74284
main: == 20251124125163 CreateVirtualRegistriesPackagesNpmRegistryUpstreams: reverting 
main: -- drop_table(:virtual_registries_packages_npm_registry_upstreams, {:if_exists=>true})
main:    -> 0.0047s
main: == 20251124125163 CreateVirtualRegistriesPackagesNpmRegistryUpstreams: reverted (0.0241s) 

main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74284
gitlab 581343:1d728451 % rails db:migrate:down:main VERSION=20251124125159
DEPRECATION WARNING: `config.active_record.warn_on_records_fetched_greater_than` is deprecated and will be removed in Rails 8.0. Please subscribe to `sql.active_record` notifications and access the row count field to detect large result set sizes. (called from <main> at /Users/dima/work/gdk/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74356
main: == 20251124125159 CreateVirtualRegistriesPackagesNpmUpstreams: reverting ======
main: -- drop_table(:virtual_registries_packages_npm_upstreams, {:if_exists=>true})
main:    -> 0.0042s
main: == 20251124125159 CreateVirtualRegistriesPackagesNpmUpstreams: reverted (0.0237s) 

main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74356
gitlab 581343:1d728451 % rails db:migrate:down:main VERSION=20251124125156
DEPRECATION WARNING: `config.active_record.warn_on_records_fetched_greater_than` is deprecated and will be removed in Rails 8.0. Please subscribe to `sql.active_record` notifications and access the row count field to detect large result set sizes. (called from <main> at /Users/dima/work/gdk/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74429
main: == 20251124125156 CreateVirtualRegistriesPackagesNpmRegistries: reverting =====
main: -- drop_table(:virtual_registries_packages_npm_registries, {:if_exists=>true})
main:    -> 0.0274s
main: == 20251124125156 CreateVirtualRegistriesPackagesNpmRegistries: reverted (0.0758s) 

main: == [advisory_lock_connection] object_id: 130400, pg_backend_pid: 74429

How to set up and validate locally

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #581343

Edited by Dzmitry (Dima) Meshcharakou

Merge request reports

Loading