SlideShare a Scribd company logo
The Package Manager of the Ruby Language
Hiroshi SHIBATA / GMO Pepabo, Inc.
2019.3.22 Railsdm 2019
What’s new
In RubyGems3
self.introduce
Executive Officer VP of Engineering
Technical Director
at GMO Pepabo, Inc. @pepabo
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
self.introduce
=> {
name: “SHIBATA Hiroshi”,
nickname: “hsbt”,
organizations: [“ruby”, “rubygems”, “bundler”, “asakusarb”,
“railsgirls”, “pepabo”, …],
commit_bits: [“ruby”, “rake”, “rubygems”, “bundler”, “rdoc”,
“psych”, “json”, “ruby-build”, “railsgirls”, “railsgirls-jp”, …],
sites: [“hsbt.org”, “ruby-lang.org”, “rubyci.org”, “railsgirls.com”,
“railsgirls.jp”],
}
What's new in RubyGems3
What's new in RubyGems3
What's new in RubyGems3
•The RubyGems team
•RubyGems
•RubyGems 3
•RubyGems 4
•Bundler
•RubyGems Bundler Integration
Agenda
The RubyGem team
1.
Who are RubyGems Team member?
alumni
alumni
alumni
SRE
Dev
Dev
Dev
Dev
What's new in RubyGems3
Specific roles
Release Manager
@hsbt: Master branch as 3.1, 3.0 and 2.7
Security Handler
@hsbt: HackerOne and Private Repository
Fulltime Commiter
@deivid-rodriguez: Supported by RubyTogether
RubyGems
3.
•The package manager of Ruby libraries.
•`gem install “rails:~>5.2”`
•You can install specified version of Ruby
libraries that called `Gem`. RubyGems
handles global environment on your box.
•You could specify `gem ‘rails’, ‘~> 5.2’`
syntax without its dependency in your code.
What’s rubygems?
•The RubyGems accepts SemVer like
versioning Policy.
•Merge latest stable version into Ruby Core
•Ruby 2.6.0 bundled RubyGems 3.0
•Ruby 2.7.0 will bundle RubyGems 3.1 or
4.0(TBD)
•Ruby 3.0 will bundle RubyGems ???
The policy of RubyGems versioning
•RubyGems also have HackerOne.
•3 people handle vulnerability issues and
will release RubyGems by SemVer Policy
like “2.7.7” from “2.7.6”
•On the other hand, The Ruby core team will
back port only vulnerability fixes by
independent version like “2.6.5.1”, not
“2.7.7”
Security release of RubyGems
How develop RubyGems?
• The canonical repository is https://
github.com/rubygems/rubygems.
• https://github.com/rubygems/
rubygems.org is rubygems.org. It’s not
client software.
• We use Pull-Request and
merge bot named
`@bundlerbot`
RubyGems 3
5.
•I released RubyGems 3 at 19 Dec 2018
•https://blog.rubygems.org/
2018/12/19/3.0.0-released.html
•It says 5 major updates.
• S3 source. Pull request #1690 by Aditya Prakash.
• Download gems with threads. Pull request #1898 by André Arko.
• Update to SPDX license list 3.0. Pull request #2152 by Mike
Linksvayer.
• [GSoC] Multi-factor feature for RubyGems. Pull request #2369 by
Qiu Chaofan.
• Use bundler 1.17.2. Pull request #2521 by SHIBATA Hiroshi.
RubyGems 3 has been released
•We use the changelog generator
from commit logs.
•https://github.com/rubygems/
rubygems/blob/master/util/
update_changelog.rb
•It picked by @bundlerbot
messages.
•Because the changelog is not
structured text.
Where come from the changelog?
changelog.introduce
•https://github.com/rubygems/rubygems/
pull/1898
•It introduced `concurrent_downloads`
option at `.gemrc`. The default value is 8.
•It makes 8 times faster with `gem install`.
Download gems with threads
•https://github.com/rubygems/
rubygems/pull/2369
•It introduced the multi-factor
authentication for gem management
by CLI like `gem push`
•https://guides.rubygems.org/setting-
up-multifactor-authentication/
Multi-factor feature for RubyGems
•https://github.com/rubygems/rubygems/
pull/2142
•Related with https://nvd.nist.gov/vuln/
detail/CVE-2017-17405
•Given the pipe operator `|`, the attacker can
execute a malicious code.
Use File.open instead of open
•https://github.com/rubygems/rubygems/
pull/2207
Added coverage ability used by simplecov
~/D/g/r/rubygems (master) > rake test
Run options: --seed 2662
# Running:
...................................................................................................................
......
(snip)
...........................................................................S.......................................
.........................................
Finished in 72.010573s, 29.0513 runs/s, 90.0423 assertions/s.
2092 runs, 6484 assertions, 0 failures, 0 errors, 1 skips
You have skipped tests. Run with --verbose for details.
Coverage report generated for Unit Tests to /Users/hsbt/Documents/github.com/rubygems/rubygems/coverage. 8219 /
9194 LOC (89.4%) covered.
•https://github.com/rubygems/rubygems/
pull/2278
•It makes gem spec reproducible.
•https://reproducible-builds.org/specs/
source-date-epoch/
•I’m not familiar with it…
Support SOURCE_DATE_EPOCH
•https://github.com/rubygems/rubygems/
pull/2308
•https://github.com/rubygems/rubygems/
pull/2023 introduces `gem info` command.
It avoid to use `gem i`.
Add alias command ‘i’ for ‘install’
% gem i bundler
ERROR: While executing gem ... (Gem::CommandLineError)
Ambiguous command i matches [info, install]
•https://github.com/rubygems/rubygems/
pull/2466
•Now, RubyGems supports above options for
`gem uninstall`
Uninstall with versions 
% gem i bundler:1.17.3
% gem uninstall bundler:1.17.3
•Removed deprecated methods.
•Removed to support for < Ruby 2.2.
•Removed Syck support.
•Added warnings of deprecated methods.
•Removed deprecated options.
•[CAUTION] `--ri` and `--rdoc` options
Cleanup Code-base
Added Rubocop
AllCops:
DisabledByDefault: true
Exclude:
- 'bundler/**/*'
- 'lib/rubygems/resolver/molinillo/**/*'
- 'pkg/**/*'
TargetRubyVersion: 2.3
Layout/AccessModifierIndentation:
Enabled: true
Layout/BlockAlignment:
Enabled: true
Layout/CaseIndentation:
Enabled: true
Layout/ClosingParenthesisIndentation:
Enabled: true
Layout/CommentIndentation:
Enabled: true
Layout/ElseAlignment:
Enabled: true
MultilineIfThen:
Enabled: true
•BundlerVersionFinder was introduced at
RubyGems 2.7
•It ability is the version detection by
RubyGems with Gemfile.lock strictly. Ex.
1.17.3 matches only 1.17.3
•We update it condition. Now, 1.17.3
matches 1.x.y, 2.0.3 also matches 2.x.y.
Update Bundler Version Finder
RubyGems 4
4.
•It has non-compatible features.
• Make enable as default for conservative option:
https://github.com/rubygems/rubygems/pull/2233
• Make ruby gem install to user-install by default:
https://github.com/rubygems/rubygems/issues/1394
• Executables in bin folder conflict with their gem
versions: https://bugs.ruby-lang.org/issues/5060
• Behaviour changes with default gems installer:
https://github.com/rubygems/rubygems/pull/2166
What’s new in RubyGems4?
•We got the installation time when already
installed gems.
•To use conservative is ignore re-install
action.
Make conservative option as default
~ > gem i rails
clone http://rubyonrails.org -> /Users/hsbt/Documents/rubyonrails.org
git ls-remote http://rubyonrails.org
hg identify http://rubyonrails.org
svn info http://rubyonrails.org
error Could not find version control system: http://rubyonrails.org
exists /Users/hsbt/Documents/github.com/rails/rails
Successfully installed rails-5.2.0
1 gem installed
~ > gem i rails —conservative
~ >
•Rubygems 4 will install the all gems to
under the `~/.gem`
•Pros: Ruby in linux distribution has many of
FAQ for gem installation for using `sudo`.
This change resolve this issues.
•Cons: Ruby version manager like rbenv is
not support it. And This is big incompatible
feature.
Make `--user-install` as default
Bundler
5.
•The vendoring tool of Ruby.
•RubyGems couldn’t care dependency of
Ruby libraries and isolate version managing
with ruby process.
•Bundler can do them with `Gemfile`
What’s bundler?
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gemspec
# We need a newish Rake since Active Job sets its test tasks' descriptions.
gem "rake", ">= 11.1"
What's new in RubyGems3
•We released 1.17.x and 2.0.x at last year.
•We disabled the incompatible features like
renaming `gems.rb` from `Gemfile`
•They no longer support under the Ruby 2.2.
What’s new in Bundler 2?
RubyGems
Bundler
Integration
6.
•We are working to integrate RubyGems and
Bundler.
•I’m working it because Bundler 2 was
released.
•RubyGems 3&4 drop to support under the
Ruby 2.2. Because Bundler 1.x still
supports Ruby 1.8 and 1.9.
RubyGems/Bundler integration
•Bundler was located rubygems repository
as git submodule
Bundler Integration(rubygems.rb)
if USE_BUNDLER_FOR_GEMDEPS
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
require 'rubygems/user_interaction'
Gem::DefaultUserInteraction.use_ui(ui) do
require "bundler"
@gemdeps = Bundler.setup
Bundler.ui = nil
@gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
end
else
rs = Gem::RequestSet.new
@gemdeps = rs.load_gemdeps path
rs.resolve_current.map do |s|
s.full_spec.tap(&:activate)
end
end
•RubyGems 2.x, 3.x uses Molinillo-0.5.7
•Bundler 1.16.x also uses Molinillo-0.6.4
•These are different versions and behavior of
dependency resolver.
Dependency Resolver incompatible
~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
dependency_graph errors.rb modules resolver.rb
~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo
compatibility.rb dependency_graph errors.rb modules resolver.rb
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
•RubyGems and Bundler stored the
duplicated certificates in your box.
Duplicates the certificates
~/D/g/r/rubygems (master) > fd . lib/rubygems/ssl_certs/
lib/rubygems/ssl_certs/index.rubygems.org
lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem
lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net
lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem
lib/rubygems/ssl_certs/rubygems.org
lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
~/D/g/r/rubygems (master) > fd . bundler/lib/bundler/ssl_certs/
bundler/lib/bundler/ssl_certs/index.rubygems.org
bundler/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem
bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net
bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem
bundler/lib/bundler/ssl_certs/rubygems.org
bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
•We will move the canonical repository of bundler
to rubygems org or rubygems/rubygems(TBD).
•I have a plan to integrate code-base and
command-line interface. Ex. `gem install`
fallback to `bundle install` with no arguments.
(TBD)
•After RubyKaigi 2019, the rubygems/bundler
team member will discuss about this merger
consideration in Fukuoka.
RubyGems/Bundler integration
❤

More Related Content

PDF
The Future of library dependency manageement of Ruby
Hiroshi SHIBATA
 
PDF
The Future of library dependency management of Ruby
Hiroshi SHIBATA
 
PDF
OSS Security the hard way
Hiroshi SHIBATA
 
PDF
The Future of Bundled Bundler
Hiroshi SHIBATA
 
PDF
The Future of Dependency Management for Ruby
Hiroshi SHIBATA
 
PDF
Roadmap for RubyGems 4 and Bundler 3
Hiroshi SHIBATA
 
PDF
Gems on Ruby
Hiroshi SHIBATA
 
PDF
How to distribute Ruby to the world
Hiroshi SHIBATA
 
The Future of library dependency manageement of Ruby
Hiroshi SHIBATA
 
The Future of library dependency management of Ruby
Hiroshi SHIBATA
 
OSS Security the hard way
Hiroshi SHIBATA
 
The Future of Bundled Bundler
Hiroshi SHIBATA
 
The Future of Dependency Management for Ruby
Hiroshi SHIBATA
 
Roadmap for RubyGems 4 and Bundler 3
Hiroshi SHIBATA
 
Gems on Ruby
Hiroshi SHIBATA
 
How to distribute Ruby to the world
Hiroshi SHIBATA
 

What's hot (20)

PDF
Dependency Resolution with Standard Libraries
Hiroshi SHIBATA
 
PDF
Ruby Security the Hard Way
Hiroshi SHIBATA
 
PDF
RubyGems 3 & 4
Hiroshi SHIBATA
 
PDF
Gemification for Ruby 2.5/3.0
Hiroshi SHIBATA
 
PDF
How to distribute Ruby to the world
Hiroshi SHIBATA
 
PDF
Gems on Ruby
Hiroshi SHIBATA
 
PDF
RubyGems 3 & 4
Hiroshi SHIBATA
 
PDF
How to develop the Standard Libraries of Ruby?
Hiroshi SHIBATA
 
PDF
Middleware as Code with mruby
Hiroshi SHIBATA
 
PDF
20140425 ruby conftaiwan2014
Hiroshi SHIBATA
 
PDF
20140419 oedo rubykaigi04
Hiroshi SHIBATA
 
PDF
20140918 ruby kaigi2014
Hiroshi SHIBATA
 
PDF
The details of CI/CD environment for Ruby
Hiroshi SHIBATA
 
PDF
20140925 rails pacific
Hiroshi SHIBATA
 
PDF
How to Begin to Develop Ruby Core
Hiroshi SHIBATA
 
PDF
Gemification for Ruby 2.5/3.0
Hiroshi SHIBATA
 
KEY
tDiary annual report 2009 - Sapporo Ruby Kaigi02
Hiroshi SHIBATA
 
PDF
20141210 rakuten techtalk
Hiroshi SHIBATA
 
PDF
How DSL works on Ruby
Hiroshi SHIBATA
 
PDF
How to develop Jenkins plugin using to ruby and Jenkins.rb
Hiroshi SHIBATA
 
Dependency Resolution with Standard Libraries
Hiroshi SHIBATA
 
Ruby Security the Hard Way
Hiroshi SHIBATA
 
RubyGems 3 & 4
Hiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Hiroshi SHIBATA
 
How to distribute Ruby to the world
Hiroshi SHIBATA
 
Gems on Ruby
Hiroshi SHIBATA
 
RubyGems 3 & 4
Hiroshi SHIBATA
 
How to develop the Standard Libraries of Ruby?
Hiroshi SHIBATA
 
Middleware as Code with mruby
Hiroshi SHIBATA
 
20140425 ruby conftaiwan2014
Hiroshi SHIBATA
 
20140419 oedo rubykaigi04
Hiroshi SHIBATA
 
20140918 ruby kaigi2014
Hiroshi SHIBATA
 
The details of CI/CD environment for Ruby
Hiroshi SHIBATA
 
20140925 rails pacific
Hiroshi SHIBATA
 
How to Begin to Develop Ruby Core
Hiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Hiroshi SHIBATA
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
Hiroshi SHIBATA
 
20141210 rakuten techtalk
Hiroshi SHIBATA
 
How DSL works on Ruby
Hiroshi SHIBATA
 
How to develop Jenkins plugin using to ruby and Jenkins.rb
Hiroshi SHIBATA
 
Ad

Similar to What's new in RubyGems3 (20)

PDF
The story of language development
Hiroshi SHIBATA
 
PDF
The secret of programming language development and future
Hiroshi SHIBATA
 
PDF
Middleware as Code with mruby
Hiroshi SHIBATA
 
PDF
JRuby, Ruby, Rails and You on the Cloud
Hiro Asari
 
PDF
My rails way
wildjcrt
 
PDF
Rspec and Capybara Intro Tutorial at RailsConf 2013
Brian Sam-Bodden
 
PPTX
Toolbox of a Ruby Team
Arto Artnik
 
PDF
Go at Skroutz
AgisAnastasopoulos
 
PDF
Rails入門與新人實戰經驗分享
wildjcrt
 
PDF
Gemification plan of Standard Library on Ruby
Hiroshi SHIBATA
 
PDF
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Michael Kimathi
 
PPTX
GIT, RVM, FIRST HEROKU APP
Pavel Tyk
 
PDF
What would your own version of Ruby look like?
Hung Wu Lo
 
PDF
Inside GitHub with Chris Wanstrath
SV Ruby on Rails Meetup
 
PDF
Rapid RIA development with Netzke
netzke
 
PDF
Breaking Bad Habits with GitLab CI
Ivan Nemytchenko
 
PDF
Automated Releases to RubyGems.org using Travis-CI.org
Francis Luong
 
PPTX
How To Install GitLab As Your Private GitHub Clone
VEXXHOST Private Cloud
 
PPTX
Women Who Code - RSpec JSON API Workshop
Eddie Lau
 
PPTX
11 Ruby Gems
Deepak Hagadur Bheemaraju
 
The story of language development
Hiroshi SHIBATA
 
The secret of programming language development and future
Hiroshi SHIBATA
 
Middleware as Code with mruby
Hiroshi SHIBATA
 
JRuby, Ruby, Rails and You on the Cloud
Hiro Asari
 
My rails way
wildjcrt
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Brian Sam-Bodden
 
Toolbox of a Ruby Team
Arto Artnik
 
Go at Skroutz
AgisAnastasopoulos
 
Rails入門與新人實戰經驗分享
wildjcrt
 
Gemification plan of Standard Library on Ruby
Hiroshi SHIBATA
 
Opal,The Journey from Javascript to Ruby at Ruby Conf Kenya 2017 by Bozhidar ...
Michael Kimathi
 
GIT, RVM, FIRST HEROKU APP
Pavel Tyk
 
What would your own version of Ruby look like?
Hung Wu Lo
 
Inside GitHub with Chris Wanstrath
SV Ruby on Rails Meetup
 
Rapid RIA development with Netzke
netzke
 
Breaking Bad Habits with GitLab CI
Ivan Nemytchenko
 
Automated Releases to RubyGems.org using Travis-CI.org
Francis Luong
 
How To Install GitLab As Your Private GitHub Clone
VEXXHOST Private Cloud
 
Women Who Code - RSpec JSON API Workshop
Eddie Lau
 
Ad

More from Hiroshi SHIBATA (11)

PDF
Introduction of Cybersecurity with Ruby at RedDotRubyConf 2024
Hiroshi SHIBATA
 
PDF
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
PDF
Long journey of Ruby Standard library at RubyKaigi 2024
Hiroshi SHIBATA
 
PDF
Long journey of Ruby standard library at RubyConf AU 2024
Hiroshi SHIBATA
 
PDF
Deep dive into Ruby's require - RubyConf Taiwan 2023
Hiroshi SHIBATA
 
PDF
How resolve Gem dependencies in your code?
Hiroshi SHIBATA
 
PDF
How resolve Gem dependencies in your code?
Hiroshi SHIBATA
 
PDF
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Hiroshi SHIBATA
 
PDF
Why ANDPAD commit Ruby and RubyKaigi?
Hiroshi SHIBATA
 
PDF
RailsGirls から始める エンジニアリングはじめの一歩
Hiroshi SHIBATA
 
PDF
Productive Organization with Ruby
Hiroshi SHIBATA
 
Introduction of Cybersecurity with Ruby at RedDotRubyConf 2024
Hiroshi SHIBATA
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Long journey of Ruby Standard library at RubyKaigi 2024
Hiroshi SHIBATA
 
Long journey of Ruby standard library at RubyConf AU 2024
Hiroshi SHIBATA
 
Deep dive into Ruby's require - RubyConf Taiwan 2023
Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
Hiroshi SHIBATA
 
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Hiroshi SHIBATA
 
Why ANDPAD commit Ruby and RubyKaigi?
Hiroshi SHIBATA
 
RailsGirls から始める エンジニアリングはじめの一歩
Hiroshi SHIBATA
 
Productive Organization with Ruby
Hiroshi SHIBATA
 

Recently uploaded (20)

PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
Architecture of the Future (09152021)
EdwardMeyman
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PDF
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PPTX
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
PDF
Beyond Automation: The Role of IoT Sensor Integration in Next-Gen Industries
Rejig Digital
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Architecture of the Future (09152021)
EdwardMeyman
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
BLW VOCATIONAL TRAINING SUMMER INTERNSHIP REPORT
codernjn73
 
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
ChatGPT's Deck on The Enduring Legacy of Fax Machines
Greg Swan
 
Beyond Automation: The Role of IoT Sensor Integration in Next-Gen Industries
Rejig Digital
 

What's new in RubyGems3

  • 1. The Package Manager of the Ruby Language Hiroshi SHIBATA / GMO Pepabo, Inc. 2019.3.22 Railsdm 2019 What’s new In RubyGems3
  • 3. Executive Officer VP of Engineering Technical Director at GMO Pepabo, Inc. @pepabo Hiroshi SHIBATA @hsbt https://www.hsbt.org
  • 4. self.introduce => { name: “SHIBATA Hiroshi”, nickname: “hsbt”, organizations: [“ruby”, “rubygems”, “bundler”, “asakusarb”, “railsgirls”, “pepabo”, …], commit_bits: [“ruby”, “rake”, “rubygems”, “bundler”, “rdoc”, “psych”, “json”, “ruby-build”, “railsgirls”, “railsgirls-jp”, …], sites: [“hsbt.org”, “ruby-lang.org”, “rubyci.org”, “railsgirls.com”, “railsgirls.jp”], }
  • 8. •The RubyGems team •RubyGems •RubyGems 3 •RubyGems 4 •Bundler •RubyGems Bundler Integration Agenda
  • 10. Who are RubyGems Team member? alumni alumni alumni SRE Dev Dev Dev Dev
  • 12. Specific roles Release Manager @hsbt: Master branch as 3.1, 3.0 and 2.7 Security Handler @hsbt: HackerOne and Private Repository Fulltime Commiter @deivid-rodriguez: Supported by RubyTogether
  • 14. •The package manager of Ruby libraries. •`gem install “rails:~>5.2”` •You can install specified version of Ruby libraries that called `Gem`. RubyGems handles global environment on your box. •You could specify `gem ‘rails’, ‘~> 5.2’` syntax without its dependency in your code. What’s rubygems?
  • 15. •The RubyGems accepts SemVer like versioning Policy. •Merge latest stable version into Ruby Core •Ruby 2.6.0 bundled RubyGems 3.0 •Ruby 2.7.0 will bundle RubyGems 3.1 or 4.0(TBD) •Ruby 3.0 will bundle RubyGems ??? The policy of RubyGems versioning
  • 16. •RubyGems also have HackerOne. •3 people handle vulnerability issues and will release RubyGems by SemVer Policy like “2.7.7” from “2.7.6” •On the other hand, The Ruby core team will back port only vulnerability fixes by independent version like “2.6.5.1”, not “2.7.7” Security release of RubyGems
  • 17. How develop RubyGems? • The canonical repository is https:// github.com/rubygems/rubygems. • https://github.com/rubygems/ rubygems.org is rubygems.org. It’s not client software. • We use Pull-Request and merge bot named `@bundlerbot`
  • 19. •I released RubyGems 3 at 19 Dec 2018 •https://blog.rubygems.org/ 2018/12/19/3.0.0-released.html •It says 5 major updates. • S3 source. Pull request #1690 by Aditya Prakash. • Download gems with threads. Pull request #1898 by André Arko. • Update to SPDX license list 3.0. Pull request #2152 by Mike Linksvayer. • [GSoC] Multi-factor feature for RubyGems. Pull request #2369 by Qiu Chaofan. • Use bundler 1.17.2. Pull request #2521 by SHIBATA Hiroshi. RubyGems 3 has been released
  • 20. •We use the changelog generator from commit logs. •https://github.com/rubygems/ rubygems/blob/master/util/ update_changelog.rb •It picked by @bundlerbot messages. •Because the changelog is not structured text. Where come from the changelog?
  • 22. •https://github.com/rubygems/rubygems/ pull/1898 •It introduced `concurrent_downloads` option at `.gemrc`. The default value is 8. •It makes 8 times faster with `gem install`. Download gems with threads
  • 23. •https://github.com/rubygems/ rubygems/pull/2369 •It introduced the multi-factor authentication for gem management by CLI like `gem push` •https://guides.rubygems.org/setting- up-multifactor-authentication/ Multi-factor feature for RubyGems
  • 25. •https://github.com/rubygems/rubygems/ pull/2207 Added coverage ability used by simplecov ~/D/g/r/rubygems (master) > rake test Run options: --seed 2662 # Running: ................................................................................................................... ...... (snip) ...........................................................................S....................................... ......................................... Finished in 72.010573s, 29.0513 runs/s, 90.0423 assertions/s. 2092 runs, 6484 assertions, 0 failures, 0 errors, 1 skips You have skipped tests. Run with --verbose for details. Coverage report generated for Unit Tests to /Users/hsbt/Documents/github.com/rubygems/rubygems/coverage. 8219 / 9194 LOC (89.4%) covered.
  • 26. •https://github.com/rubygems/rubygems/ pull/2278 •It makes gem spec reproducible. •https://reproducible-builds.org/specs/ source-date-epoch/ •I’m not familiar with it… Support SOURCE_DATE_EPOCH
  • 27. •https://github.com/rubygems/rubygems/ pull/2308 •https://github.com/rubygems/rubygems/ pull/2023 introduces `gem info` command. It avoid to use `gem i`. Add alias command ‘i’ for ‘install’ % gem i bundler ERROR: While executing gem ... (Gem::CommandLineError) Ambiguous command i matches [info, install]
  • 28. •https://github.com/rubygems/rubygems/ pull/2466 •Now, RubyGems supports above options for `gem uninstall` Uninstall with versions  % gem i bundler:1.17.3 % gem uninstall bundler:1.17.3
  • 29. •Removed deprecated methods. •Removed to support for < Ruby 2.2. •Removed Syck support. •Added warnings of deprecated methods. •Removed deprecated options. •[CAUTION] `--ri` and `--rdoc` options Cleanup Code-base
  • 30. Added Rubocop AllCops: DisabledByDefault: true Exclude: - 'bundler/**/*' - 'lib/rubygems/resolver/molinillo/**/*' - 'pkg/**/*' TargetRubyVersion: 2.3 Layout/AccessModifierIndentation: Enabled: true Layout/BlockAlignment: Enabled: true Layout/CaseIndentation: Enabled: true Layout/ClosingParenthesisIndentation: Enabled: true Layout/CommentIndentation: Enabled: true Layout/ElseAlignment: Enabled: true MultilineIfThen: Enabled: true
  • 31. •BundlerVersionFinder was introduced at RubyGems 2.7 •It ability is the version detection by RubyGems with Gemfile.lock strictly. Ex. 1.17.3 matches only 1.17.3 •We update it condition. Now, 1.17.3 matches 1.x.y, 2.0.3 also matches 2.x.y. Update Bundler Version Finder
  • 33. •It has non-compatible features. • Make enable as default for conservative option: https://github.com/rubygems/rubygems/pull/2233 • Make ruby gem install to user-install by default: https://github.com/rubygems/rubygems/issues/1394 • Executables in bin folder conflict with their gem versions: https://bugs.ruby-lang.org/issues/5060 • Behaviour changes with default gems installer: https://github.com/rubygems/rubygems/pull/2166 What’s new in RubyGems4?
  • 34. •We got the installation time when already installed gems. •To use conservative is ignore re-install action. Make conservative option as default ~ > gem i rails clone http://rubyonrails.org -> /Users/hsbt/Documents/rubyonrails.org git ls-remote http://rubyonrails.org hg identify http://rubyonrails.org svn info http://rubyonrails.org error Could not find version control system: http://rubyonrails.org exists /Users/hsbt/Documents/github.com/rails/rails Successfully installed rails-5.2.0 1 gem installed ~ > gem i rails —conservative ~ >
  • 35. •Rubygems 4 will install the all gems to under the `~/.gem` •Pros: Ruby in linux distribution has many of FAQ for gem installation for using `sudo`. This change resolve this issues. •Cons: Ruby version manager like rbenv is not support it. And This is big incompatible feature. Make `--user-install` as default
  • 37. •The vendoring tool of Ruby. •RubyGems couldn’t care dependency of Ruby libraries and isolate version managing with ruby process. •Bundler can do them with `Gemfile` What’s bundler? # frozen_string_literal: true source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gemspec # We need a newish Rake since Active Job sets its test tasks' descriptions. gem "rake", ">= 11.1"
  • 39. •We released 1.17.x and 2.0.x at last year. •We disabled the incompatible features like renaming `gems.rb` from `Gemfile` •They no longer support under the Ruby 2.2. What’s new in Bundler 2?
  • 41. •We are working to integrate RubyGems and Bundler. •I’m working it because Bundler 2 was released. •RubyGems 3&4 drop to support under the Ruby 2.2. Because Bundler 1.x still supports Ruby 1.8 and 1.9. RubyGems/Bundler integration
  • 42. •Bundler was located rubygems repository as git submodule Bundler Integration(rubygems.rb) if USE_BUNDLER_FOR_GEMDEPS ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path) require 'rubygems/user_interaction' Gem::DefaultUserInteraction.use_ui(ui) do require "bundler" @gemdeps = Bundler.setup Bundler.ui = nil @gemdeps.requested_specs.map(&:to_spec).sort_by(&:name) end else rs = Gem::RequestSet.new @gemdeps = rs.load_gemdeps path rs.resolve_current.map do |s| s.full_spec.tap(&:activate) end end
  • 43. •RubyGems 2.x, 3.x uses Molinillo-0.5.7 •Bundler 1.16.x also uses Molinillo-0.6.4 •These are different versions and behavior of dependency resolver. Dependency Resolver incompatible ~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb dependency_graph errors.rb modules resolver.rb ~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo compatibility.rb dependency_graph errors.rb modules resolver.rb delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
  • 44. •RubyGems and Bundler stored the duplicated certificates in your box. Duplicates the certificates ~/D/g/r/rubygems (master) > fd . lib/rubygems/ssl_certs/ lib/rubygems/ssl_certs/index.rubygems.org lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem lib/rubygems/ssl_certs/rubygems.org lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem ~/D/g/r/rubygems (master) > fd . bundler/lib/bundler/ssl_certs/ bundler/lib/bundler/ssl_certs/index.rubygems.org bundler/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem bundler/lib/bundler/ssl_certs/rubygems.org bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
  • 45. •We will move the canonical repository of bundler to rubygems org or rubygems/rubygems(TBD). •I have a plan to integrate code-base and command-line interface. Ex. `gem install` fallback to `bundle install` with no arguments. (TBD) •After RubyKaigi 2019, the rubygems/bundler team member will discuss about this merger consideration in Fukuoka. RubyGems/Bundler integration
  • 46.