The document summarizes the key points about RubyGems 3 & 4 from Hiroshi SHIBATA's presentation at RubyKaigi 2018. It discusses RubyGems 2.7, including support for older Ruby versions. It then covers plans for RubyGems 3.0, such as removing deprecated code, and RubyGems 4.0, which may include non-backwards compatible changes.
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
I maintain the RubyGems, Bundler and the standard libraries of the Ruby language. So, I've been extract many of the standard libraries to default gems and GitHub at Ruby 3.0. But the some of libraries still remains in only Ruby repository. I will describe these situation.
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
I maintain the RubyGems, Bundler and the standard libraries of the Ruby language. So, I've been extract many of the standard libraries to default gems and GitHub at Ruby 3.0. But the some of libraries still remains in only Ruby repository. I will describe these situation.
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
Behavior-Driven Development and Acceptance Testing are heavily intertwined and in many aspects are one and the same. Both focus on starting at the outer layers of your application by concentrating on what matter to users; behavior. In this session/workshop we'll talk about how testing can be used both for specifying your application yet to be develop expected behavior and as accurate, running documentation that can be used to validate your stakeholder's acceptance criteria. We'll talk about the different types of testing and do a few hands-on exercises to flesh out a Rails application with RSpec and Capybara.
Gisting is an implementation of Google\'s MapReduce framework for processing and extracting useful information from very large data sets. At the time of this writing, the code is available for PREVIEW at http://github.com/mchung/gisting. I am currently working to release this framework for general usage.
This is the version of my Crate talk that was given at Scotland on Rails 2009.
This talk will cover the Crate project and how it may be used to package your web application. The end result is a statically built executable of the ruby interpreter and all dependent binary extensions. The application code, ruby stdlib the web framework itself, and all assets are packed into one or more SQLite databases.
Developing cross platform desktop application with RubyAnis Ahmad
A brief introduction and example of developing desktop application with Ruby programming language. JRuby and shoesrb is discussed as platform.
Prepared for and Presented on Ruby Conference Bangladesh 2003.
Long journey of Ruby Standard library at RubyKaigi 2024Hiroshi SHIBATA
Ruby has a lot of standard libraries from Ruby 1.8. I promote them democratically with GitHub today via default and bundled gems. So, I'm working to extract them for Ruby 3.4 continuously and future versions. It's long journey for me.
After that, some versions may suddenly happen LoadError at require when running bundle exec or bin/rails, for example matrix or net-smtp. We need to learn what's difference default/bundled gems with standard libraries.
In this presentation, I will introduce what's the difficult to extract bundled gems from default gems and the details of the functionality that Ruby's require and bundle exec with default/bundled gems. You can learn how handle your issue about standard libraries.
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
I will introduce what's the difficult to extract bundled gems from default gems and the details of the functionality that Ruby's require and bundle exec with default/bundled gems. You can learn how handle your issue about standard libraries.
Deep dive into Ruby's require - RubyConf Taiwan 2023Hiroshi SHIBATA
Since Ruby's bundled and default gems change every year with each release, some versions may suddenly happen LoadError at require when running bundle exec or bin/rails, for example matrix or net-smtp.
In this presentation, I will introduce the details of the functionality that extends Ruby's require to provide guidance to users on what they can do to load them. And I will also show how $LOAD_PATH is build behind Ruby and Rails by Bundler.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
8. • The maintenance policy of RubyGems(RG) is
different as Ruby’s maintenance policy.
• RG 2.5 and 2.6 are only security maintenance and
no longer release separate from Ruby.
• RG 2.7 has bug and security fixes.
Current status of RubyGems 2.7
9. Build matrix of RG
• Support Ruby 1.8 (!!1)
• Integration for
Bundler
• Environment Issue of
Travis CI
10. • Surprisedly, RG 2.7 still supports Ruby 1.8.
Ruby 1.8 in 2018
~/D/g/r/rubygems (2.7) > rg respond_to
test/rubygems/test_gem_request_set_gem_dependency_api.rb
630: tf.close! if tf.respond_to? :close!
test/rubygems/test_gem_source.rb
60: response.uri = URI('http://example') if response.respond_to? :uri
test/rubygems/test_gem_package.rb
755: tf.close! if tf.respond_to? :close!
test/rubygems/test_gem_util.rb
45: if File.respond_to?(:realpath)
test/rubygems/test_gem_installer.rb
58: str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
65:if Gem.respond_to?(:activate_bin_path)
893: skip unless "".respond_to?(:force_encoding)
test/rubygems/test_gem_specification.rb
2305: s.required_rubygems_version = Gem::Requirement.new("> 0".freeze) if s.respond_to? :required_ruby
2316: if s.respond_to? :specification_version then
…snip
11. • 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
12. • Gem::TestCase already activates Bundler module.
Bundler Integration(test_case.rb)
if Gem::USE_BUNDLER_FOR_GEMDEPS
require 'bundler'
end
require 'minitest/autorun'
require 'rubygems/deprecate'
require 'fileutils'
require 'pathname'
require 'pp'
require 'rubygems/package'
require 'shellwords'
require 'tmpdir'
require 'uri'
require 'zlib'
require 'benchmark' # stdlib
require 'rubygems/mock_gem_ui'
module Gem
##
# Allows setting the gem path searcher. This method is available when
# requiring 'rubygems/test_case'
14. • Why hard way to test RubyGems on Travis?
• RVM upgrade RG and Bundler automatically.
• The end-user maybe upgrade RG and Bundler.
• It caused `exe/bundle` issue.
RG on Travis is hard way
./bin/bundle:104:in `load': cannot load such file -- /home/travis/.rvm/rubies/
ruby-2.4.2/lib/ruby/gems/2.4.0/gems/bundler-1.16.1/exe/bundle (LoadError)
from ./bin/bundle:104:in `<main>'
• It was fixed by @BanzaiMan
15. • RubyGems also have HackerOne.
• 3 people handle vulnerability issues.
• But We have no workflow about security release.
• RubyGems 2.7.6 was accidentally released.
Security
16. • Merge latest stable version into Ruby Core
• Ruby 2.6.0 will bundle RubyGems 3.0(TBD)
• Ruby 2.7 or 3.0 will bundle RubyGems 4.0(TBD)
The policy of RubyGems versioning
17. • `tool/sync_default_gems.rb rubygems`
• We lost commit logs of rubygems/rubygems :(
• Because we uses different directory structure and
subversion.
Merge task for Ruby core
puts "Sync #{$repositories[gem.to_sym]}"
case gem
when "rubygems"
`rm -rf lib/rubygems* test/rubygems`
`cp -r ../../rubygems/rubygems/lib/rubygems* ./lib`
`cp -r ../../rubygems/rubygems/test/rubygems ./test`
18. It’s available under the ruby-lang.org now!!!
https://git.ruby-lang.org
• After git migration, We can use git submodule for
ruby/spec, mspec, stdlibs contained rubygems.
• We easily support core and upstreams.
Submodule for stdlib
20. • Removed deprecated methods.
• Removed to support for < Ruby 2.2.
• Added warnings of deprecated methods.
• To use modern release toolchain.
What’s new in RubyGems3?
21. • How to use deprecate in your code.
• You can show deprecated warning to end-users.
Introduction of Gem::Deprecate
require 'rubygems/deprecate'
module Gem
(snip)
def self.gunzip(data)
Gem::Util.gunzip data
end
class << self
extend Gem::Deprecate
deprecate :gunzip, "Gem::Util.gunzip", 2018, 12
end
(snip)
NOTE: Gem.gunzip is deprecated; use Gem::Util.gunzip instead. It will be removed on or after 2018-12-01.
Gem.gunzip called from /Users/hsbt/.rbenv/versions/2.6.0-dev/lib/ruby/gems/2.6.0/gems/rubygems-mirror-1.2.0/
lib/rubygems/mirror.rb:37.
22. • We should care compatibility for new version of
libraries.
• But rubygems is critical infrastructure in the Ruby
ecosystem.
• I use akr/gem-codesearch and akr/all-ruby for
investigating compatibility.
Deprecate methods of platform.
23. • rubygems/rubygems-mirror and akr/gem-
codesearch
• We can search all of ruby code on rubygems.org
with 80GB+ storage.
gem-codesearch
~/D/g/a/gem-codesearch (master) > ulimit -n 8192; and env RUBYGEMS_MIRROR_ONLY_LATEST=true rake mirror
unpack; and find latest-gem -size +5M -not -name "*.rb" -delete; and rake index
~/D/g/a/gem-codesearch (master) > gem i rubygems-mirror
function gemsearch
csearch $argv | sed 's/^/Users/hsbt/Documents/github.com/akr/gem-codesearch/latest-gem///g';
end
25. • all-ruby provides the environment for all release
versions of Ruby includes 0.59 to 2.6.0-preview1.
• It was Dockerized by shyouhei and hsbt.
• https://hub.docker.com/r/rubylang/all-ruby/
• We can try to code block on all of versions of Ruby
akr/all-ruby
alias all-ruby "docker run --rm -t rubylang/all-ruby /all-ruby/all-ruby"
27. • `-rubygems` is cool option for Ruby 1.8
• But after Ruby 1.9, We no longer need -rubygems.
Because Ruby 1.9 always require rubygems by
prelude.
• If you needs to disable its prelude, You can use `--
disable-rubygems`.
• `ruby --disable-rubygems -rubygems` ???
ubygems.rb is no longer available
28. • We can use Keywords argument, Refinement,
Other cool features in RubyGems now.
• Simple build matrix
Only support Ruby 2.2+
29. • RG have a lot of workarounds for old Ruby.
• RUBY_VERSION, respond_to?, defined?
Remove deprecated code
- source_uri = URI.parse(URI.const_defined?(:DEFAULT_PARSER) ?
- URI::DEFAULT_PARSER.escape(source_uri.to_s) :
- URI.escape(source_uri.to_s))
+ source_uri = URI.parse(URI::DEFAULT_PARSER.escape(source_uri.to_s))
if @init_pos == 0 then
- raise Gem::Package::NonSeekableIO unless @io.respond_to? :rewind
@io.rewind
else
- if [].respond_to? :flat_map
- def pinned_requirement name # :nodoc:
- requirement = Gem::Dependency.new name
- specification = @set.sets.flat_map { |set|
- set.find_all(requirement)
- }.compact.first
+ def pinned_requirement name # :nodoc:
+ requirement = Gem::Dependency.new name
30. Code ceverage
• Generate test
coverage with
simplecov
• I found the needless
code by coverage tool
like rdoc workaround
for old Ruby and
delete it.
31. • Removed hoe
• This is same as rake, rdoc, psych
• Added preparation task without Bundler
Upgrade toolchain
desc "Setup Rubygems dev environment"
task :setup => ["bundler:checkout"] do
gemspec = Gem::Specification.load(File.expand_path("../rubygems-update.gemspec", __FILE__))
gemspec.dependencies.each do |dep|
sh "gem install '#{dep.name}:#{dep.requirement.to_s}'"
end
end
32. • How works with `gem update —system`?
• lib/rubygems/commands/update_command.rb
rubygems-update.gemspec
def execute
if options[:system] then
update_rubygems
return
end
(snip)
def install_rubygems version # :nodoc:
args = update_rubygems_arguments
update_dir = File.join Gem.dir, 'gems', "rubygems-
update-#{version}"
Dir.chdir update_dir do
say "Installing RubyGems #{version}"
# Make sure old rubygems isn't loaded
old = ENV["RUBYOPT"]
ENV.delete("RUBYOPT") if old
installed = system Gem.ruby, 'setup.rb', *args
say "RubyGems system software updated" if
installed
ENV["RUBYOPT"] = old if old
end
end
def update_rubygems
check_update_arguments
version, requirement = rubygems_target_version
check_latest_rubygems version
update_gem 'rubygems-update', version
(snip)
install_rubygems version
end
33. • Usually, We should test gem with prerelease
version before production release.
• But, rubygems couldn’t do it.
pre-release rubygems-update.gem
diff --git lib/rubygems/specification.rb lib/rubygems/specification.rb
index 897ee85e97..29088372a6 100644
--- lib/rubygems/specification.rb
+++ lib/rubygems/specification.rb
@@ -2733,7 +2733,11 @@ class Gem::Specification < Gem::BasicSpecification
def version= version
@version = Gem::Version.create(version)
- self.required_rubygems_version = '> 1.3.1' if @version.prerelease?
+ # skip to set required_ruby_version when pre-released rubygems.
+ # It caused to raise CircularDependencyError
+ if @version.prerelease? && @name.strip != "rubygems"
+ self.required_rubygems_version = '> 1.3.1'
+ end
invalidate_memoized_attributes
return @version
34. • 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
35. • I try to upgrade Molinillo-0.6.x on RubyGems.
• https://github.com/rubygems/rubygems/pull/2026
• And fix issues about resolver of RubyGems.
• And integrate these files without vendorised.
RubyGems 3 or 4
~/D/g/r/rubygems (molinillo-0-6-3) > env GEMSRC_SKIP=true rake test
Gem::Indexer tests are being skipped. Install builder gem.
Run options: --seed 2600
# Running:
...............................................................................................
................................................E..............................................
E...............................E..................E....E......................F.........FF.F.F
FFF....F...F.....F.............................................................................
...............................................................................................
......................................................E........................................
................S.....................S........................................................
...............................................................................................
37. • It has non-compatible features.
• Make enable as default for conservative option:
https://github.com/rubygems/rubygems/pull/2233
• Behaviour changes with default gems installer: https://
github.com/rubygems/rubygems/pull/2166
• Executables in bin folder conflict with their gem
versions.: https://bugs.ruby-lang.org/issues/5060
• Make ruby gem install to user-install by default:
https://github.com/rubygems/rubygems/issues/1394
RubyGems 4
38. • 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
~ >
41. • `gem install --default` put gemspec into default
gem directory.
• But it is not put and build the library files like .rb
and native extensions.
• I hope to install completely library like csv-1.0.2
into the old Ruby versions.
Current behavior of default option
~ > gem i csv --default
Fetching: csv-1.0.2.gem (100%)
Successfully installed csv-1.0.2 as a default gem
1 gem installed
~ > ls ~/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/csv-1.0.2/
~ >
42. • Rubygems 4 will install the all gems to `~/.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
43. • Example by bundler
Known Issue of rbenv
~ > gem i bundler --conservative --user-install
Fetching: bundler-1.16.2.gem (100%)
WARNING: You don't have /Users/hsbt/.gem/ruby/2.3.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-1.16.2
1 gem installed
~ > which -a bundle
/Users/hsbt/.rbenv/shims/bundle
~ > bundle -v
rbenv: bundle: command not found
The `bundle' command exists in these Ruby versions:
2.0.0-p648
2.1.10
2.2.10
2.4.4
2.5.1
2.6.0-dev
jruby-9.1.17.0
rbx-3.100
truffleruby
~ > .gem/ruby/2.3.0/bin/bundle -v
Bundler version 1.16.2
44. • Ruby core put executable script directly under the
bin directory.
• We often faced conflict error when upgrading
rdoc.
• We completely lost original exe wrapper.
The location of execution wrapper
~ > gem update rdoc
Updating installed gems
Updating rdoc
Fetching: rdoc-6.0.4.gem (100%)
rdoc's executable "rdoc" conflicts with /Users/hsbt/.rbenv/versions/2.3.7/bin/rdoc
Overwrite the executable? [yN] y
rdoc's executable "ri" conflicts with /Users/hsbt/.rbenv/versions/2.3.7/bin/ri
Overwrite the executable? [yN] y
Successfully installed rdoc-6.0.4
Gems updated: rdoc
45. • RubyGems generate wrapper script for executable
script of gem
What’s happened?
#!/Users/hsbt/.rbenv/versions/2.3.7/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'rdoc' is installed as part of a
# this file is here to facilitate running it.
#
require 'rubygems'
version = ">= 0.a"
if ARGV.first
str = ARGV.first
str = str.dup.force_encoding("BINARY") if str.re
if str =~ /A_(.*)_z/ and Gem::Version.correct?
version = $1
ARGV.shift
end
end
load Gem.bin_path('rdoc', 'rdoc', version)
#!/Users/hsbt/.rbenv/versions/2.6.0-dev/bin/ruby
#
# RDoc: Documentation tool for source code
# (see lib/rdoc/rdoc.rb for more information
#
# Copyright (c) 2003 Dave Thomas
# Released under the same terms as Ruby
begin
gem 'rdoc'
rescue NameError => e # --disable-gems
raise unless e.name == :gem
rescue Gem::LoadError
end
require 'rdoc/rdoc'
begin
r = RDoc::RDoc.new
r.document ARGV
rescue Errno::ENOSPC
46. • I will create a same file for executable wrappers
of RubyGems.
• location(TBD): ruby/lib/exe?, ruby/exe?, ruby/???
• Installer: tool/rbinstall.rb on ruby/ruby repo did
not use `Gem::Installer#generate_bin`. I need to
use it on tool/rbinstall.rb.
Store original bin file under `lib`?
48. Executive Officer CPO(Chief Productivity Officer)
Director of Business Process Re-engineering Office
Director of Technical Division(New!!1)
at GMO Pepabo, Inc. @pepabo
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
56. We can keep commit logs
under the ruby org of
GitHub.
rubygems/rubygems and
flori/json are out of
controll by ruby core team
(including me).
Gemfication again in 2018
57. Our issues: Ruby and
upstream have the
different policies.
• ruby core only focused
trunk version.
• Upstream repository
support various
versions like Ruby 2.4,
2.5.
I wont contribute-able world
58. • Beckport upstream
• Make to work all versions of Ruby (used by Travis)
• Forward-port core
Update upstream from core
~/D/g/r/csv (master) > g rv
origin git@github.com:ruby/csv.git (fetch)
origin git@github.com:ruby/csv.git (push)
ruby-core git@github.com:ruby/ruby.git (fetch)
ruby-core git@github.com:ruby/ruby.git (push)
commit 5c1941a9be56a979c27d740370b781882d344f79
Author: hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Wed May 9 04:39:16 2018 +0000
Merge csv-1.0.2 from upstream.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
diff --git lib/csv.rb lib/csv.rb
59. • Forward-port core
• Support test suite on Ruby core
• Backport upstream (infinity loop)
Update core from upstream
commit 10a495a08a8e39699007a97db16fbad33209db99
Author: hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Wed May 9 11:44:30 2018 +0000
Use hard-coded file list instead of Dir.glob.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
(snip)
- spec.files = Dir.glob("lib/**/*.rb")
- spec.files += ["README.md", "LICENSE.txt", "news.md"]
+ spec.files = ["lib/csv.rb", "lib/csv/table.rb", "lib/csv/core_ext/string.rb", "lib/csv/core_ext
61. It’s available under the ruby-lang.org now!!!
https://git.ruby-lang.org
• It’s READONLY
• It’s built by cgit web interface,
• It’s integrated with redmine
• It’s still experimental status. I’m preparing to it
now.
git.ruby-lang.org
62.
63. Issue Tracker:
• Redmine on Heroku couldn’t use git repository.
Strategy
• How migrate git or github from svn (now
resolved!)
Toolchain:
• Packaging script depends on Subversion
repository and API.
What’s issues of migration of Git
64. 1. We migrate a toolchain like package script to git
from svn.
2. We will ship ruby package from git.ruby-
lang.org.
3. We will accept write commit on git.ruby-
lang.org.
4. We will accept to merge pull-request on GitHub
and sync them to git.ruby-lang.org (final goal)
Where do we go from here?