Browse Source

Build extensions for Ruby 2.7 (#7027)

* Build extensions for Ruby 2.7

* Try installing bundler 2.x

* Try bumping rake-compiler-dock

* Use standard RCD images

* Avoid 'rake cross native' with rake-compiler-dock

* Use Ruby 2.5 for building Ruby <= 2.6

* Use rake-compiler 1.1.0

* Specify target

* Don't update Ruby test image for now
Masaki Hara 5 years ago
parent
commit
64f6c59ccb

+ 0 - 3
kokoro/linux/dockerfile/release/ruby_rake_compiler/Dockerfile

@@ -1,3 +0,0 @@
-FROM grpctesting/rake-compiler-dock_53c22085d091183c528303791e7771359f699bcf
-
-RUN /bin/bash -l -c "gem update --system '2.7.9' && gem install bundler"

+ 0 - 6
kokoro/release/ruby/linux/prepare_build.sh

@@ -7,12 +7,6 @@ echo 'DOCKER_OPTS="${DOCKER_OPTS} --graph=/tmpfs/docker"' | sudo tee --append /e
 echo 'DOCKER_OPTS="${DOCKER_OPTS} --registry-mirror=https://mirror.gcr.io"' | sudo tee --append /etc/default/docker
 echo 'DOCKER_OPTS="${DOCKER_OPTS} --registry-mirror=https://mirror.gcr.io"' | sudo tee --append /etc/default/docker
 sudo service docker restart
 sudo service docker restart
 
 
-# Download Docker images from DockerHub
-DOCKERHUB_ORGANIZATION=protobuftesting
-DOCKERFILE_DIR=kokoro/linux/dockerfile/release/ruby_rake_compiler
-DOCKERFILE_PREFIX=$(basename $DOCKERFILE_DIR)
-export RAKE_COMPILER_DOCK_IMAGE=${DOCKERHUB_ORGANIZATION}/${DOCKERFILE_PREFIX}_$(sha1sum $DOCKERFILE_DIR/Dockerfile | cut -f1 -d\ )
-
 # All artifacts come here
 # All artifacts come here
 mkdir artifacts
 mkdir artifacts
 export ARTIFACT_DIR=$(pwd)/artifacts
 export ARTIFACT_DIR=$(pwd)/artifacts

+ 1 - 0
kokoro/release/ruby/linux/ruby/ruby_build.sh

@@ -11,6 +11,7 @@ fi
 
 
 umask 0022
 umask 0022
 pushd ruby
 pushd ruby
+gem install bundler -v 2.1.4
 bundle install && bundle exec rake gem:native
 bundle install && bundle exec rake gem:native
 ls pkg
 ls pkg
 mv pkg/* $ARTIFACT_DIR
 mv pkg/* $ARTIFACT_DIR

+ 24 - 5
kokoro/release/ruby/macos/ruby/ruby_build_environment.sh

@@ -6,7 +6,11 @@ set +ex  # rvm script is very verbose and exits with errorcode
 source $HOME/.rvm/scripts/rvm
 source $HOME/.rvm/scripts/rvm
 set -e  # rvm commands are very verbose
 set -e  # rvm commands are very verbose
 time rvm install 2.5.0
 time rvm install 2.5.0
-rvm use 2.5.0 --default
+rvm use 2.5.0
+gem install rake-compiler --no-document
+gem install bundler --no-document
+time rvm install 2.7.0
+rvm use 2.7.0 --default
 gem install rake-compiler --no-document
 gem install rake-compiler --no-document
 gem install bundler --no-document
 gem install bundler --no-document
 rvm osx-ssl-certs status all
 rvm osx-ssl-certs status all
@@ -17,13 +21,13 @@ rm -rf ~/.rake-compiler
 
 
 CROSS_RUBY=$(mktemp tmpfile.XXXXXXXX)
 CROSS_RUBY=$(mktemp tmpfile.XXXXXXXX)
 
 
-curl https://raw.githubusercontent.com/rake-compiler/rake-compiler/v1.0.3/tasks/bin/cross-ruby.rake > "$CROSS_RUBY"
+curl https://raw.githubusercontent.com/rake-compiler/rake-compiler/v1.1.0/tasks/bin/cross-ruby.rake > "$CROSS_RUBY"
 
 
 # See https://github.com/grpc/grpc/issues/12161 for verconf.h patch details
 # See https://github.com/grpc/grpc/issues/12161 for verconf.h patch details
 patch "$CROSS_RUBY" << EOF
 patch "$CROSS_RUBY" << EOF
 --- cross-ruby.rake	2018-04-10 11:32:16.000000000 -0700
 --- cross-ruby.rake	2018-04-10 11:32:16.000000000 -0700
 +++ patched	2018-04-10 11:40:25.000000000 -0700
 +++ patched	2018-04-10 11:40:25.000000000 -0700
-@@ -133,8 +133,10 @@
+@@ -141,8 +141,10 @@
      "--host=#{MINGW_HOST}",
      "--host=#{MINGW_HOST}",
      "--target=#{MINGW_TARGET}",
      "--target=#{MINGW_TARGET}",
      "--build=#{RUBY_BUILD}",
      "--build=#{RUBY_BUILD}",
@@ -35,9 +39,9 @@ patch "$CROSS_RUBY" << EOF
      '--with-ext='
      '--with-ext='
    ]
    ]
 
 
-@@ -151,6 +153,7 @@
+@@ -159,6 +161,7 @@
  # make
  # make
- file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/ruby.exe" => ["#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile"] do |t|
+ file "#{build_dir}/ruby.exe" => ["#{build_dir}/Makefile"] do |t|
    chdir File.dirname(t.prerequisites.first) do
    chdir File.dirname(t.prerequisites.first) do
 +    sh "test -s verconf.h || rm -f verconf.h"  # if verconf.h has size 0, make sure it gets re-built by make
 +    sh "test -s verconf.h || rm -f verconf.h"  # if verconf.h has size 0, make sure it gets re-built by make
      sh MAKE
      sh MAKE
@@ -47,10 +51,25 @@ EOF
 
 
 MAKE="make -j8"
 MAKE="make -j8"
 
 
+set +x # rvm commands are very verbose
+rvm use 2.7.0
+set -x
+ruby --version | grep 'ruby 2.7.0'
+for v in 2.7.0 ; do
+  ccache -c
+  rake -f "$CROSS_RUBY" cross-ruby VERSION="$v" HOST=x86_64-darwin11 MAKE="$MAKE"
+done
+set +x
+rvm use 2.5.0
+set -x
+ruby --version | grep 'ruby 2.5.0'
 for v in 2.6.0 2.5.1 2.4.0 2.3.0 ; do
 for v in 2.6.0 2.5.1 2.4.0 2.3.0 ; do
   ccache -c
   ccache -c
   rake -f "$CROSS_RUBY" cross-ruby VERSION="$v" HOST=x86_64-darwin11 MAKE="$MAKE"
   rake -f "$CROSS_RUBY" cross-ruby VERSION="$v" HOST=x86_64-darwin11 MAKE="$MAKE"
 done
 done
+set +x
+rvm use 2.7.0
+set -x
 
 
 sed 's/x86_64-darwin-11/universal-darwin/' ~/.rake-compiler/config.yml > "$CROSS_RUBY"
 sed 's/x86_64-darwin-11/universal-darwin/' ~/.rake-compiler/config.yml > "$CROSS_RUBY"
 mv "$CROSS_RUBY" ~/.rake-compiler/config.yml
 mv "$CROSS_RUBY" ~/.rake-compiler/config.yml

+ 7 - 2
ruby/Rakefile

@@ -70,13 +70,18 @@ else
 
 
   task 'gem:windows' do
   task 'gem:windows' do
     require 'rake_compiler_dock'
     require 'rake_compiler_dock'
-    RakeCompilerDock.sh "bundle && IN_DOCKER=true rake cross native gem RUBY_CC_VERSION=2.6.0:2.5.0:2.4.0:2.3.0"
+    ['x86-mingw32', 'x64-mingw32', 'x86_64-linux', 'x86-linux'].each do |plat|
+      RakeCompilerDock.sh <<-"EOT", platform: plat
+        bundle && \
+        IN_DOCKER=true rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem RUBY_CC_VERSION=2.7.0:2.6.0:2.5.0:2.4.0:2.3.0
+      EOT
+    end
   end
   end
 
 
   if RUBY_PLATFORM =~ /darwin/
   if RUBY_PLATFORM =~ /darwin/
     task 'gem:native' do
     task 'gem:native' do
       system "rake genproto"
       system "rake genproto"
-      system "rake cross native gem RUBY_CC_VERSION=2.6.0:2.5.1:2.4.0:2.3.0"
+      system "rake cross native gem RUBY_CC_VERSION=2.7.0:2.6.0:2.5.1:2.4.0:2.3.0"
     end
     end
   else
   else
     task 'gem:native' => [:genproto, 'gem:windows']
     task 'gem:native' => [:genproto, 'gem:windows']

+ 2 - 2
ruby/google-protobuf.gemspec

@@ -17,13 +17,13 @@ Gem::Specification.new do |s|
   else
   else
     s.files     += Dir.glob('ext/**/*')
     s.files     += Dir.glob('ext/**/*')
     s.extensions= ["ext/google/protobuf_c/extconf.rb"]
     s.extensions= ["ext/google/protobuf_c/extconf.rb"]
-    s.add_development_dependency "rake-compiler-dock", "~> 0.6.0"
+    s.add_development_dependency "rake-compiler-dock", ">= 1.0.1", "< 2.0"
   end
   end
   s.test_files  = ["tests/basic.rb",
   s.test_files  = ["tests/basic.rb",
                   "tests/stress.rb",
                   "tests/stress.rb",
                   "tests/generated_code_test.rb"]
                   "tests/generated_code_test.rb"]
   s.required_ruby_version = '>= 2.3'
   s.required_ruby_version = '>= 2.3'
-  s.add_development_dependency "rake-compiler", "~> 0.9.5"
+  s.add_development_dependency "rake-compiler", "~> 1.1.0"
   s.add_development_dependency "test-unit", '~> 3.0', '>= 3.0.9'
   s.add_development_dependency "test-unit", '~> 3.0', '>= 3.0.9'
   s.add_development_dependency "rubygems-tasks", "~> 0.2.4"
   s.add_development_dependency "rubygems-tasks", "~> 0.2.4"
 end
 end