Flag duplicate versions of the same gem
We should avoid shipping multiple versions of the same gem if possible. Omnibus currently pulls gems from Gitaly, GitLab CE/EE, etc., and it's possible that certain gems need to be updated across the board (e.g. https://gitlab.com/gitlab-org/gitaly/issues/1296).
For example, in GitLab 13.11.0 (ee), I see in /opt/gitlab/embedded/lib/ruby/gems/2.7.0/gems
some potentially unnecessary versions:
- acme-client: 2.0.6,2.0.7: https://rubygems.org/gems/acme-client
- bcrypt_pbkdf: 1.0.0,1.1.0: https://rubygems.org/gems/bcrypt_pbkdf
- chef-config: 15.14.0,15.17.4,16.10.17: https://rubygems.org/gems/chef-config
- chef-utils: 15.14.0,15.17.4,16.10.17: https://rubygems.org/gems/chef-utils
- connection_pool: 2.2.2,2.2.5: https://rubygems.org/gems/connection_pool
- erubi: 1.10.0,1.9.0: https://rubygems.org/gems/erubi
- faraday: 1.0.1,1.4.1: https://rubygems.org/gems/faraday
- ffi: 1.13.1,1.15.0: https://rubygems.org/gems/ffi
- ffi-yajl: 2.3.4,2.4.0: https://rubygems.org/gems/ffi-yajl
- gitlab-mail_room: 0.0.11,0.0.9: https://rubygems.org/gems/gitlab-mail_room
- gssapi: 1.2.0,1.3.1: https://rubygems.org/gems/gssapi
- hashie: 3.6.0,4.1.0: https://rubygems.org/gems/hashie
- jwt: 2.1.0,2.2.3: https://rubygems.org/gems/jwt
- libyajl2: 1.2.0,2.1.0: https://rubygems.org/gems/libyajl2
- mime-types-data: 3.2020.0512,3.2020.1104: https://rubygems.org/gems/mime-types-data
- mini_mime: 1.0.2,1.1.0: https://rubygems.org/gems/mini_mime
- minitest: 5.11.3,5.13.0,5.14.2: https://rubygems.org/gems/minitest
- multi_json: 1.14.1,1.15.0: https://rubygems.org/gems/multi_json
- net-ssh: 6.0.0,6.1.0: https://rubygems.org/gems/net-ssh
- nio4r: 2.5.4,2.5.7: https://rubygems.org/gems/nio4r
- nokogumbo: 1.5.0,2.0.2: https://rubygems.org/gems/nokogumbo
- oauth2: 1.4.4,1.4.7: https://rubygems.org/gems/oauth2
- ohai: 15.12.0,16.10.6: https://rubygems.org/gems/ohai
- racc: 1.4.16,1.5.2: https://rubygems.org/gems/racc
- rack-protection: 2.0.5,2.0.8.1: https://rubygems.org/gems/rack-protection
- rake: 13.0.1,13.0.3: https://rubygems.org/gems/rake
- rdoc: 6.1.2,6.2.0,6.2.1: https://rubygems.org/gems/rdoc
- redis: 4.1.3,4.1.4,4.2.5: https://rubygems.org/gems/redis
- redis-namespace: 1.6.0,1.7.0: https://rubygems.org/gems/redis-namespace
- ruby2_keywords: 0.0.2,0.0.4: https://rubygems.org/gems/ruby2_keywords
- rubyntlm: 0.6.2,0.6.3: https://rubygems.org/gems/rubyntlm
- rubyzip: 2.0.0,2.3.0: https://rubygems.org/gems/rubyzip
- sanitize: 4.6.6,5.2.1: https://rubygems.org/gems/sanitize
- thrift: 0.14.0,0.14.1: https://rubygems.org/gems/thrift
- train-core: 3.4.9,3.6.2: https://rubygems.org/gems/train-core
- unicode-display_width: 1.7.0,2.0.0: https://rubygems.org/gems/unicode-display_width
- uuidtools: 2.1.5,2.2.0: https://rubygems.org/gems/uuidtools
script: (cd /opt/gitlab/embedded/lib/ruby/gems/*/gems; for g in $(ls | sed 's/-[^-]*$//' | uniq -c | grep -v '^ *1' | sed 's/^.* //'); do grep ^${g}-[0-9] <(ls) | paste -s -d ',,' | sed -z "s/$g-//g; s/^/- $g: /; s/\n//"; echo ": https://rubygems.org/gems/$g"; done)
Difference in GitLab 11.1.0 by @stanhu
For example, in GitLab 11.1.0, I see in /opt/gitlab/embedded/lib/ruby/gems/2.4.0/gems
some potentially unnecessary versions:
- sidekiq-4.2.10, sidekiq-5.1.3 (this one surprised me the most!)
- bundler-1.16.1, bundler-1.16.2
- faraday-0.12.2, faraday-0.15.2
- tzinfo-1.2.2, tzinfo-1.2.5
- tilt-2.0.6, tilt-2.0.8
- rspec-3.6.0, rspec-3.7.0
- rspec-core-3.6.0, rspec-core-3.7.1
- rspec-expectations-3.6.0, rspec-expectations-3.7.0
- ruby-progressbar-1.8.3, ruby-progressbar-1.9.0