SlideShare a Scribd company logo
1 of 39
Download to read offline
The strategy of build for the programming language
Hiroshi SHIBATA / GMO Pepabo, Inc.


2021.09.03 Cloud Native Days CI/CD conference 2021
The details of CI/CD


environment for Ruby
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
Executive Of
fi
cer VP of Engineering


Technical Director


at GMO Pepabo, Inc. @pepabo
Agenda
•What is Ruby Core team?


•The test strategy of the Ruby language


•CI environment for the Ruby language development
1. What’s Ruby?
Ruby is designed to make


programmers happy.
Yukihiro Matz Matsumoto
Version number and release cycle
We plan to release every Christmas day.


• 2.1.0: 2013/12/25


• …


• 2.6.0: 2018/12/25


• 2.7.0: 2019/12/25


• 3.0.0: 2020/12/25


• 3.1.0: 2021/12/25(TBD)
What’s Ruby Core Team?
Akatsuki


• n0kada
$ cat ~svn/.ssh/authorized_keys | awk '{print $5}' | sort | uniq | wc -l


90
Total 88 people + 2 bots
Money Forward


• shyouhei
Full-time commiters
Cookpad


• ko1


• mametter
Speee


• mrkn
Shopify


• Tenderlove
Branch maintainers
master known as 3.1


@nurse: Release manager


3.0


@nagachika: Stable branch maintainer


2.7 and 2.6


@unak: Old stable branch maintainer
Direct push
Open pull-request
Ruby CI VM cluster
Appveyor: Windows tests
AIX, arm
Cron fetch
Actions: Linux, macOS
Package build
S3: package storage
S3: test results
Ruby CI: Viewer of results
Distribute package
Sync
How to get the Ruby language?
Binary distribution


• Windows: RubyInstaller2


• Linux: apt/yum/dnf, brightbox/software collection, snap


• macOS: System binaries/homebrew/MacPorts


Source distribution


• This is maintained by Ruby core team


• Package: cache.ruby-lang.org, Source code: git.ruby-lang.org or
github
Of
fi
cial Docker/Binary image
https://hub.docker.com/r/rubylang/ruby


• ruby image of docker have a some of problem


• Like alpine linux
https://build.snapcraft.io/user/ruby/snap.ruby


• You can use the latest version of Ruby like
3.0.2 without ruby version manager


• You can keep to clean your linux environment.
The test strategy of the Ruby language
Start to test Ruby language
$ git clone https://github.com/ruby/ruby


$ cd ruby


$ autoreconf


$ ./con
fi
gure —disable-install-doc


$ make -j


$ make check
You can invoke language tests with the following instructions:
make check
make check depends on the following definitions:


• main


• Build encodings and extensions.


• test


• Run btest, test-basic


• test-testframework


• Run tests for `testunit` and `minitest`


• test-almost


• Run tests under `test` excluding `testunit` and `minitest`


• test-rubyspec


• Run mspec with the ruby binary and the latest ruby/spec
`cat bootstraptest/test_class.rb`
assert_equal 'true', %q( class C; end


Object.const_de
fi
ned?(:C) )


assert_equal 'Class', %q( class C; end


C.class )


(snip)


assert_equal 'Class', %q( class A; end


class C < A; end


C.class )


(snip)


assert_equal 'M', %q( module M; end


M.name )


(snip)


assert_equal 'A::B', %q( class A; end


class A::B; end


A::B )
•It tests the
fi
rst touch of the ruby
interpreter.


•The VM or parser developers will
care about this.
test-basic
a, = nil; test_ok(a == nil)


a, = 1; test_ok(a == 1)


a, = []; test_ok(a == nil)


(snip)


def r; return *[]; end; a = r(); test_ok(a == [])


def r; return *[1]; end; a = r(); test_ok(a == [1])


def r; return *[nil]; end; a = r(); test_ok(a == [nil])


(snip)


f = lambda { |a, b=42, *c| [a,b,c] }


test_ok(f.call(1 ) == [1,42,[ ]] )


test_ok(f.call(1,43 ) == [1,43,[ ]] )


test_ok(f.call(1,43,44) == [1,43,[44]] )


(snip)
•It tests the basic feature of Ruby
language.


•This test is 1
fi
le test. This is not
used test-framework.


•After that, We test test framework.
cat `test/logger/test_logger.rb`
% cat test/logger/test_logger.rb


# coding: US-ASCII


require 'test/unit'


require 'logger'


require 'temp
fi
le'


class TestLogger < Test::Unit::TestCase


(snip)


def test_add


logger = Logger.new(nil)


logger.progname = "my_progname"


assert(logger.add(INFO))


log = log_add(logger, nil, "msg")


assert_equal("ANY", log.severity)


assert_equal("my_progname", log.progname)


(snip)
•They are for library tests.


•Maybe, most famous for the end
users like Ruby/Rails developer.


•It’s written by test-unit like
framework.
cat `test/-ext-/array/test_resize.rb`
% cat ext/-test-/array/resize/resize.c


#include "ruby/ruby.h"


static VALUE


ary_resize(VALUE ary, VALUE len)


{


rb_ary_resize(ary, NUM2LONG(len));


return ary;


}


void


Init_resize(void)


{


rb_de
fi
ne_method(rb_cArray, "__resize__", ary_resize, 1);


}
require 'test/unit'


require '-test-/array/resize'


class TestArray < Test::Unit::TestCase


class TestResize < Test::Unit::TestCase


def test_expand


feature = '[ruby-dev:42912]'


ary = [*1..10]


ary.__resize__(10)


assert_equal(10, ary.size, feature)


assert_equal([*1..10], ary, feature)


ary.__resize__(100)


assert_equal(100, ary.size, feature)


(snip)
cat spec/rubyspec/core/string/append_spec.rb
% cat spec/rubyspec/core/string/concat_spec.rb


require File.expand_path('../../../spec_helper', __FILE__)


require File.expand_path('../
fi
xtures/classes', __FILE__)


require File.expand_path('../shared/concat', __FILE__)


describe "String#<<" do


it_behaves_like :string_concat, :<<


it_behaves_like :string_concat_encoding, :<<


end
% cat spec/rubyspec/core/string/shared/concat.rb


describe :string_concat, shared: true do


it "concatenates the given argument to self and returns self" do


str = 'hello '


str.send(@method, 'world').should equal(str)


str.should == "hello world"


end


(snip)
Please check details: https://github.com/ruby/spec
CI environments


for


the Ruby language development
Our maintenance policy
•We support the platform with our motivation.


•We are volunteer.


•We develop toolchains for CI with our motivation.


•So, We are volunteer.


Because some of tool and work
fl
ow is abandoned in the past. I and @mame
and @k0kubun care them in a few years.
What’s target by CI of Ruby
•Not speed, We need wide range of platforms.


•Linux, macOS, Windows, others


•Compilers, System libraries


•Con
fi
guration options, executable options.


•etc.


•We mixed these parameters about CI and test them.
Direct push
Open pull-request
Ruby CI VM cluster
Appveyor: Windows tests
AIX, arm
Cron fetch
Actions: Linux, macOS
Package build
S3: package storage
S3: test results
Ruby CI: Viewer of results
Distribute package
What’s Ruby CI
Ruby CI is a CI results collector for alternative
platforms


• https://rubyci.org


• https://github.com/ruby/rubyci


• https://github.com/ruby/chkbuild


• https://github.com/ruby/ruby-infra-recipe


Ruby CI goal is entirely supports all of Ruby platform.
What’s chkbuild?
•Summarize the test results of ruby
test suite


•Check `make dist` with volatile
enviroment


•Check duplicate task with OS level
Ruby CI resources
Ruby CI goal is entirely supports all of Ruby platform. Ruby CI built by
a lot of cloud platforms (20-30 VMs)


• AWS


• on-premise servers(macOS)


We provision them with mitame and its recipe. And We have an
advantage for easily provides debug environment with ssh.
Sponsors of the Ruby language
• heroku:


Provide the free Enterprise account


• Fastly:


OSS plan of CDN for *.ruby-lang.org


• NaCl:


Network and Compute resources for website


• Ruby Association:


Grant of development for cloud resources


• Nihon Ruby no Kai:


Grant of development for hardware
How use GitHub Actions/Travis CI/Appveyer
•We detect test failure of each
commits with GitHub Actions, Travis CI
and AppVeyer.


•We test many of compilers, macOS
and Ubuntu distributions with
Actions.


•We also test s390 and arm with
Travis, windows with Appveyer.
How use slack for Ruby development
•We integrate the all of test
results to 1 slack channel.


•We marked color icons to each
commits.


•We use thread reply for failing
commits and test results.


•https://techlife.cookpad.com/
entry/2020/09/08/090000
How speed-up test suite


and


CI environment?
Delete code.
Standard


Libraries
Default


Gems
Bundled


Gems
Pure Ruby 3 46 14
C extensions 6 20 0
This matrix shows number of standard libraries and their
classi
fi
cations in Ruby 3.1(TBD).
Gemi
fi
cation of Ruby
With ruby/ruby repository
Our CI without testing
•Package builder by GitHub
Actions


•Finally we migrate the package
build to GitHub Actions from
manual work
fl
ow.


•https://github.com/ruby/actions
CI for vulnerability issue
•CI is not friendly with vulnerability issue


•Because we have a discussion channel
with hackerone.


•We need to review code without GitHub. So,
We couldn’t use CI like GH Actions.


•Sometimes, We handle multiple issues at
same time.


•It easily broke the CI status.
Conclusion
Conclusion
•I introduced Ruby Core team and their release work
fl
ow.


•The test strategy of the Ruby language is complex.


•CI environments for the Ruby language development are
also complex and have a bit of differences from Web
application.


Let’s join to #ci of ruby-jp slack and talk about them.

More Related Content

What's hot

20141210 rakuten techtalk
20141210 rakuten techtalk20141210 rakuten techtalk
20141210 rakuten techtalkHiroshi SHIBATA
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02Hiroshi SHIBATA
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesHiroshi SHIBATA
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mrubyHiroshi SHIBATA
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web DevelopmentKoichi ITO
 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for RubyHiroshi SHIBATA
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHiroshi SHIBATA
 
The Future of Bundled Bundler
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled BundlerHiroshi SHIBATA
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesHiroshi SHIBATA
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mrubyHiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Hiroshi SHIBATA
 
The Future of library dependency management of Ruby
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of RubyHiroshi SHIBATA
 
Gemification plan of Standard Library on Ruby
Gemification plan of Standard Library on RubyGemification plan of Standard Library on Ruby
Gemification plan of Standard Library on RubyHiroshi SHIBATA
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 
How to Begin Developing Ruby Core
How to Begin Developing Ruby CoreHow to Begin Developing Ruby Core
How to Begin Developing Ruby CoreHiroshi SHIBATA
 

What's hot (20)

20141210 rakuten techtalk
20141210 rakuten techtalk20141210 rakuten techtalk
20141210 rakuten techtalk
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 Minutes
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web Development
 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for Ruby
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
 
The Future of Bundled Bundler
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled Bundler
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard Libraries
 
How to test code with mruby
How to test code with mrubyHow to test code with mruby
How to test code with mruby
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 
The Future of library dependency management of Ruby
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of Ruby
 
Gemification plan of Standard Library on Ruby
Gemification plan of Standard Library on RubyGemification plan of Standard Library on Ruby
Gemification plan of Standard Library on Ruby
 
What's new in RubyGems3
What's new in RubyGems3What's new in RubyGems3
What's new in RubyGems3
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 
How to Begin Developing Ruby Core
How to Begin Developing Ruby CoreHow to Begin Developing Ruby Core
How to Begin Developing Ruby Core
 

Similar to The details of CI/CD environment for Ruby

The secret of programming language development and future
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and futureHiroshi SHIBATA
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby TeamArto Artnik
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009Harshal Hayatnagarkar
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLBarry Jones
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with serverEugene Yokota
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaKeith Bennett
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Charles Nutter
 
Writing a Gem with native extensions
Writing a Gem with native extensionsWriting a Gem with native extensions
Writing a Gem with native extensionsTristan Penman
 
Everything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPLEverything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPLMario-Leander Reimer
 
Everything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventureEverything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventureQAware GmbH
 
The story of language development
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラムkwatch
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoveragemlilley
 
Ruby confhighlights
Ruby confhighlightsRuby confhighlights
Ruby confhighlightsClaire Tran
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & CucumberUdaya Kiran
 

Similar to The details of CI/CD environment for Ruby (20)

The secret of programming language development and future
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and future
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
Rails Performance
Rails PerformanceRails Performance
Rails Performance
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
DSL Construction with Ruby - ThoughtWorks Masterclass Series 2009
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
Jruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-javaJruby synergy-of-ruby-and-java
Jruby synergy-of-ruby-and-java
 
Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016Ruby Performance - The Last Mile - RubyConf India 2016
Ruby Performance - The Last Mile - RubyConf India 2016
 
Writing a Gem with native extensions
Writing a Gem with native extensionsWriting a Gem with native extensions
Writing a Gem with native extensions
 
Everything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPLEverything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPL
 
Everything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventureEverything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventure
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
Ruby confhighlights
Ruby confhighlightsRuby confhighlights
Ruby confhighlights
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
 

More from Hiroshi SHIBATA

Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Hiroshi SHIBATA
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
 
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Hiroshi SHIBATA
 
Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Hiroshi SHIBATA
 
RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩Hiroshi SHIBATA
 
Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Hiroshi SHIBATA
 
Ruby Security the Hard Way
Ruby Security the Hard WayRuby Security the Hard Way
Ruby Security the Hard WayHiroshi SHIBATA
 
OSS Security the hard way
OSS Security the hard wayOSS Security the hard way
OSS Security the hard wayHiroshi SHIBATA
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyHiroshi SHIBATA
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with RubyHiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Hiroshi SHIBATA
 

More from Hiroshi SHIBATA (16)

Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
 
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発
 
Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?
 
RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩
 
Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3
 
Ruby Security the Hard Way
Ruby Security the Hard WayRuby Security the Hard Way
Ruby Security the Hard Way
 
OSS Security the hard way
OSS Security the hard wayOSS Security the hard way
OSS Security the hard way
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of Ruby
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 

Recently uploaded

Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data SciencePaolo Missier
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Paige Cruz
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuidePixlogix Infotech
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctBrainSell Technologies
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfdanishmna97
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityVictorSzoltysek
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024Lorenzo Miniero
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governanceWSO2
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxFIDO Alliance
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxFIDO Alliance
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...SOFTTECHHUB
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptxFIDO Alliance
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMKumar Satyam
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe中 央社
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsLeah Henrickson
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxFIDO Alliance
 

Recently uploaded (20)

Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
Observability Concepts EVERY Developer Should Know (DevOpsDays Seattle)
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cf
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptx
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...
The Ultimate Prompt Engineering Guide for Generative AI: Get the Most Out of ...
 
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider  Progress from Awareness to Implementation.pptxTales from a Passkey Provider  Progress from Awareness to Implementation.pptx
Tales from a Passkey Provider Progress from Awareness to Implementation.pptx
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
 

The details of CI/CD environment for Ruby

  • 1. The strategy of build for the programming language Hiroshi SHIBATA / GMO Pepabo, Inc. 2021.09.03 Cloud Native Days CI/CD conference 2021 The details of CI/CD environment for Ruby
  • 2. Hiroshi SHIBATA @hsbt https://www.hsbt.org Executive Of fi cer VP of Engineering Technical Director at GMO Pepabo, Inc. @pepabo
  • 3. Agenda •What is Ruby Core team? •The test strategy of the Ruby language •CI environment for the Ruby language development
  • 5. Ruby is designed to make programmers happy. Yukihiro Matz Matsumoto
  • 6. Version number and release cycle We plan to release every Christmas day. • 2.1.0: 2013/12/25 • … • 2.6.0: 2018/12/25 • 2.7.0: 2019/12/25 • 3.0.0: 2020/12/25 • 3.1.0: 2021/12/25(TBD)
  • 7. What’s Ruby Core Team? Akatsuki • n0kada $ cat ~svn/.ssh/authorized_keys | awk '{print $5}' | sort | uniq | wc -l 90 Total 88 people + 2 bots Money Forward • shyouhei Full-time commiters Cookpad • ko1 • mametter Speee • mrkn Shopify • Tenderlove
  • 8. Branch maintainers master known as 3.1 @nurse: Release manager 3.0 @nagachika: Stable branch maintainer 2.7 and 2.6 @unak: Old stable branch maintainer
  • 9.
  • 10.
  • 11. Direct push Open pull-request Ruby CI VM cluster Appveyor: Windows tests AIX, arm Cron fetch Actions: Linux, macOS Package build S3: package storage S3: test results Ruby CI: Viewer of results Distribute package Sync
  • 12. How to get the Ruby language? Binary distribution • Windows: RubyInstaller2 • Linux: apt/yum/dnf, brightbox/software collection, snap • macOS: System binaries/homebrew/MacPorts Source distribution • This is maintained by Ruby core team • Package: cache.ruby-lang.org, Source code: git.ruby-lang.org or github
  • 13. Of fi cial Docker/Binary image https://hub.docker.com/r/rubylang/ruby • ruby image of docker have a some of problem • Like alpine linux https://build.snapcraft.io/user/ruby/snap.ruby • You can use the latest version of Ruby like 3.0.2 without ruby version manager • You can keep to clean your linux environment.
  • 14. The test strategy of the Ruby language
  • 15. Start to test Ruby language $ git clone https://github.com/ruby/ruby $ cd ruby $ autoreconf $ ./con fi gure —disable-install-doc $ make -j $ make check You can invoke language tests with the following instructions:
  • 16. make check make check depends on the following definitions: • main • Build encodings and extensions. • test • Run btest, test-basic • test-testframework • Run tests for `testunit` and `minitest` • test-almost • Run tests under `test` excluding `testunit` and `minitest` • test-rubyspec • Run mspec with the ruby binary and the latest ruby/spec
  • 17. `cat bootstraptest/test_class.rb` assert_equal 'true', %q( class C; end Object.const_de fi ned?(:C) ) assert_equal 'Class', %q( class C; end C.class ) (snip) assert_equal 'Class', %q( class A; end class C < A; end C.class ) (snip) assert_equal 'M', %q( module M; end M.name ) (snip) assert_equal 'A::B', %q( class A; end class A::B; end A::B ) •It tests the fi rst touch of the ruby interpreter. •The VM or parser developers will care about this.
  • 18. test-basic a, = nil; test_ok(a == nil) a, = 1; test_ok(a == 1) a, = []; test_ok(a == nil) (snip) def r; return *[]; end; a = r(); test_ok(a == []) def r; return *[1]; end; a = r(); test_ok(a == [1]) def r; return *[nil]; end; a = r(); test_ok(a == [nil]) (snip) f = lambda { |a, b=42, *c| [a,b,c] } test_ok(f.call(1 ) == [1,42,[ ]] ) test_ok(f.call(1,43 ) == [1,43,[ ]] ) test_ok(f.call(1,43,44) == [1,43,[44]] ) (snip) •It tests the basic feature of Ruby language. •This test is 1 fi le test. This is not used test-framework. •After that, We test test framework.
  • 19. cat `test/logger/test_logger.rb` % cat test/logger/test_logger.rb # coding: US-ASCII require 'test/unit' require 'logger' require 'temp fi le' class TestLogger < Test::Unit::TestCase (snip) def test_add logger = Logger.new(nil) logger.progname = "my_progname" assert(logger.add(INFO)) log = log_add(logger, nil, "msg") assert_equal("ANY", log.severity) assert_equal("my_progname", log.progname) (snip) •They are for library tests. •Maybe, most famous for the end users like Ruby/Rails developer. •It’s written by test-unit like framework.
  • 20. cat `test/-ext-/array/test_resize.rb` % cat ext/-test-/array/resize/resize.c #include "ruby/ruby.h" static VALUE ary_resize(VALUE ary, VALUE len) { rb_ary_resize(ary, NUM2LONG(len)); return ary; } void Init_resize(void) { rb_de fi ne_method(rb_cArray, "__resize__", ary_resize, 1); } require 'test/unit' require '-test-/array/resize' class TestArray < Test::Unit::TestCase class TestResize < Test::Unit::TestCase def test_expand feature = '[ruby-dev:42912]' ary = [*1..10] ary.__resize__(10) assert_equal(10, ary.size, feature) assert_equal([*1..10], ary, feature) ary.__resize__(100) assert_equal(100, ary.size, feature) (snip)
  • 21. cat spec/rubyspec/core/string/append_spec.rb % cat spec/rubyspec/core/string/concat_spec.rb require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../ fi xtures/classes', __FILE__) require File.expand_path('../shared/concat', __FILE__) describe "String#<<" do it_behaves_like :string_concat, :<< it_behaves_like :string_concat_encoding, :<< end % cat spec/rubyspec/core/string/shared/concat.rb describe :string_concat, shared: true do it "concatenates the given argument to self and returns self" do str = 'hello ' str.send(@method, 'world').should equal(str) str.should == "hello world" end (snip) Please check details: https://github.com/ruby/spec
  • 22. CI environments for the Ruby language development
  • 23. Our maintenance policy •We support the platform with our motivation. •We are volunteer. •We develop toolchains for CI with our motivation. •So, We are volunteer. Because some of tool and work fl ow is abandoned in the past. I and @mame and @k0kubun care them in a few years.
  • 24. What’s target by CI of Ruby •Not speed, We need wide range of platforms. •Linux, macOS, Windows, others •Compilers, System libraries •Con fi guration options, executable options. •etc. •We mixed these parameters about CI and test them.
  • 25. Direct push Open pull-request Ruby CI VM cluster Appveyor: Windows tests AIX, arm Cron fetch Actions: Linux, macOS Package build S3: package storage S3: test results Ruby CI: Viewer of results Distribute package
  • 26. What’s Ruby CI Ruby CI is a CI results collector for alternative platforms • https://rubyci.org • https://github.com/ruby/rubyci • https://github.com/ruby/chkbuild • https://github.com/ruby/ruby-infra-recipe Ruby CI goal is entirely supports all of Ruby platform.
  • 27.
  • 28. What’s chkbuild? •Summarize the test results of ruby test suite •Check `make dist` with volatile enviroment •Check duplicate task with OS level
  • 29. Ruby CI resources Ruby CI goal is entirely supports all of Ruby platform. Ruby CI built by a lot of cloud platforms (20-30 VMs) • AWS • on-premise servers(macOS) We provision them with mitame and its recipe. And We have an advantage for easily provides debug environment with ssh.
  • 30. Sponsors of the Ruby language • heroku: Provide the free Enterprise account • Fastly: OSS plan of CDN for *.ruby-lang.org • NaCl: Network and Compute resources for website • Ruby Association: Grant of development for cloud resources • Nihon Ruby no Kai: Grant of development for hardware
  • 31. How use GitHub Actions/Travis CI/Appveyer •We detect test failure of each commits with GitHub Actions, Travis CI and AppVeyer. •We test many of compilers, macOS and Ubuntu distributions with Actions. •We also test s390 and arm with Travis, windows with Appveyer.
  • 32. How use slack for Ruby development •We integrate the all of test results to 1 slack channel. •We marked color icons to each commits. •We use thread reply for failing commits and test results. •https://techlife.cookpad.com/ entry/2020/09/08/090000
  • 33. How speed-up test suite and CI environment?
  • 35. Standard Libraries Default Gems Bundled Gems Pure Ruby 3 46 14 C extensions 6 20 0 This matrix shows number of standard libraries and their classi fi cations in Ruby 3.1(TBD). Gemi fi cation of Ruby With ruby/ruby repository
  • 36. Our CI without testing •Package builder by GitHub Actions •Finally we migrate the package build to GitHub Actions from manual work fl ow. •https://github.com/ruby/actions
  • 37. CI for vulnerability issue •CI is not friendly with vulnerability issue •Because we have a discussion channel with hackerone. •We need to review code without GitHub. So, We couldn’t use CI like GH Actions. •Sometimes, We handle multiple issues at same time. •It easily broke the CI status.
  • 39. Conclusion •I introduced Ruby Core team and their release work fl ow. •The test strategy of the Ruby language is complex. •CI environments for the Ruby language development are also complex and have a bit of differences from Web application. Let’s join to #ci of ruby-jp slack and talk about them.