Misc #16895

Updated by ko1 (Koichi Sasada) about 1 year ago

# Summary 

 If you maintain a Ruby application or library, please In short 
 Please consider testing with the Ruby `master` branch, including the *debug* (`cppflags=-DRUBY_DEBUG=1`) build. They should be in addition to testing all supported stable releases of Ruby. 

 To try the master branch, we provide Docker images and Github Acttion master-debug (master with debug options) builds on your CI for convinience. Ruby applications and libraries. 

 # Details 

 The rapid pace of We are developing Ruby every day and such development sometimes usually introduces many bugs, such as incorrect behaviour or wrong code and unexpected incompatibilities. Despite our best efforts and testing, without your feedback, Of course, we cannot catch every issue. 

 Understanding how our changes impact downstream code use tests but the tests used to be not enough (PR is important feedback for the Ruby core developers. welcome). We want to know how your applications work on master. 

 For example there are reports ([Bug #16669] for example) which expose issues using master branch. 

 Also you can try master-debug build, which enables all assertions with a macro `RUBY_DEBUG=1`. 
 On master-debug build, all assertions are enabled and internal interpreter state are checked aggressivly. 
 It makes an interpreter slow (x2 for example) but you can find MRI bugs earlier. 
 If you encounter have an error when testing with the `master` branch (e.g. `[BUG] on master-debug (`[BUG] ...` in output log), you can see), please report it ( ask us with your repro-code. It will be a very helpful. helpful report. 

 ## Testing With `master` 

 Testing using the `master` branch (sometimes referred to as `ruby-head`) will make your Ruby scripts next version ready. Also it helps us catch incompatibilities as we change and evolve Ruby's public interface. 

 ## Testing With Debug Build 

 Testing with the To try master branch debug build enables many assertions within the Ruby interpreter. 

 These assertions can detect incorrect usages of the C extensions API, and also bugs in the master-debug build, you need to prepare interpreter when running your program. 

 These assertions have an impact the performance of the interpreter. 

 To build a debug build by yourself, refer the last section in this article. 

 # Continuous Integration With `master` 

 Building Ruby for your own testing environment can binaries and it should be difficult, so tough. 
 So we are providing provide two convenient ways to use the master branch in your existing testing pipeline: 

 - Docker Images 
 - ways: docker images and Github Action action. 

 ## Docker Images images 

 The [rubylang There is a rubylang docker repository]( repository and it provides images for various Ruby ruby versions, including nightly builds of master with master-nightly build and without debug assertions" master--debug version. 

 > Nightly built master: `rubylang/ruby:master-nightly-bionic` master (e.g. rubylang/ruby:master-nightly-bionic) 
 - > Nightly debug built master: `rubylang/ruby:master-debug-nightly-bionic` master (e.g. rubylang/ruby:master-debug-nightly-bionic) 

 Here is an example `Dockerfile`: 

 FROM rubylang/ruby:master-nightly-bionic 

 Then to build: 

 $ docker build . 
 Sending build context to Docker daemon    2.048kB 
 Step 1/1 : FROM rubylang/ruby:master-nightly-bionic 
 master-nightly-bionic: Pulling from rubylang/ruby 
 Status: Downloaded newer image for rubylang/ruby:master-nightly-bionic 
  ---> 059d367a8fbd 
 Successfully built 059d367a8fbd 

 ## GitHub Action Github action 

 The [GitHub Action to setup Ruby]( provides both `ruby-head` and `ruby-debug` builds. 

 Here There is an example workflow a github action to test on all download Ruby stable releases, including `ruby-head` and `ruby-debug`: 

 ```yaml binaries <>. 
 name: Development 
 on: [push] 
       fail-fast: false 
         os: [ubuntu] 
         ruby: [2.5, 2.6, 2.7, head, debug] 

     runs-on: ${{ matrix.os }}-latest 
     continue-on-error: ${{ matrix.ruby == 'head' || matrix.ruby == 'debug' }} 
     - uses: actions/checkout@v2 
     - uses: ruby/setup-ruby@v1 
         ruby-version: ${{ matrix.ruby }} 

     - run: bundle install 
     - run: bundle exec rake 

 See the [documentation]( for more details on how to use this action. 

 # Building debug build 

 To create a Debug Build of Ruby, use: 
 $ git clone 
 $ cd ruby 
 $ autoconf 
 $ cppflags=-DRUBY_DEBUG=1 ./configure --prefix=$HOME/.rubies/ruby-debug 
 $ make install 

 If you are using `chruby`, you can switch to the above build: 

 $ chruby ruby-debug 

 You can find more details to build Ruby use `ruby-head` and `ruby-debug` as master in the [README]( and master-debug interpreters. 

 # Acknowledgement 

 We thank Thank you for providing such useful features, mainly @mrkn for the Docker image, @eregon for the GitHub Action, and @ioquatix for reviewing this announcement. @Eregon .