1*cc02d7e2SAndroid Build Coastguard Worker# -*- ruby -*- 2*cc02d7e2SAndroid Build Coastguard Workerrequire 'rake/extensiontask' 3*cc02d7e2SAndroid Build Coastguard Workerrequire 'rspec/core/rake_task' 4*cc02d7e2SAndroid Build Coastguard Workerrequire 'rubocop/rake_task' 5*cc02d7e2SAndroid Build Coastguard Workerrequire 'bundler/gem_tasks' 6*cc02d7e2SAndroid Build Coastguard Workerrequire 'fileutils' 7*cc02d7e2SAndroid Build Coastguard Workerrequire 'tmpdir' 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard Workerrequire_relative 'build_config.rb' 10*cc02d7e2SAndroid Build Coastguard Worker 11*cc02d7e2SAndroid Build Coastguard Workerload 'tools/distrib/rake_compiler_docker_image.rb' 12*cc02d7e2SAndroid Build Coastguard Worker 13*cc02d7e2SAndroid Build Coastguard Worker# Add rubocop style checking tasks 14*cc02d7e2SAndroid Build Coastguard WorkerRuboCop::RakeTask.new(:rubocop) do |task| 15*cc02d7e2SAndroid Build Coastguard Worker task.options = ['-c', 'src/ruby/.rubocop.yml'] 16*cc02d7e2SAndroid Build Coastguard Worker # add end2end tests to formatter but don't add generated proto _pb.rb's 17*cc02d7e2SAndroid Build Coastguard Worker task.patterns = ['src/ruby/{lib,spec}/**/*.rb', 'src/ruby/end2end/*.rb'] 18*cc02d7e2SAndroid Build Coastguard Workerend 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Workerspec = Gem::Specification.load('grpc.gemspec') 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard WorkerGem::PackageTask.new(spec) do |pkg| 23*cc02d7e2SAndroid Build Coastguard Workerend 24*cc02d7e2SAndroid Build Coastguard Worker 25*cc02d7e2SAndroid Build Coastguard Worker# Add the extension compiler task 26*cc02d7e2SAndroid Build Coastguard WorkerRake::ExtensionTask.new('grpc_c', spec) do |ext| 27*cc02d7e2SAndroid Build Coastguard Worker ext.source_pattern = '**/*.{c,h}' 28*cc02d7e2SAndroid Build Coastguard Worker ext.ext_dir = File.join('src', 'ruby', 'ext', 'grpc') 29*cc02d7e2SAndroid Build Coastguard Worker ext.lib_dir = File.join('src', 'ruby', 'lib', 'grpc') 30*cc02d7e2SAndroid Build Coastguard Worker ext.cross_compile = true 31*cc02d7e2SAndroid Build Coastguard Worker ext.cross_platform = [ 32*cc02d7e2SAndroid Build Coastguard Worker 'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', 33*cc02d7e2SAndroid Build Coastguard Worker 'x86_64-linux', 'x86-linux', 'aarch64-linux', 34*cc02d7e2SAndroid Build Coastguard Worker 'x86_64-darwin', 'arm64-darwin', 35*cc02d7e2SAndroid Build Coastguard Worker ] 36*cc02d7e2SAndroid Build Coastguard Worker ext.cross_compiling do |spec| 37*cc02d7e2SAndroid Build Coastguard Worker spec.files = spec.files.select { 38*cc02d7e2SAndroid Build Coastguard Worker |file| file.start_with?( 39*cc02d7e2SAndroid Build Coastguard Worker "src/ruby/bin/", "src/ruby/ext/", "src/ruby/lib/", "src/ruby/pb/") 40*cc02d7e2SAndroid Build Coastguard Worker } 41*cc02d7e2SAndroid Build Coastguard Worker spec.files += %w( etc/roots.pem grpc_c.32-msvcrt.ruby grpc_c.64-msvcrt.ruby grpc_c.64-ucrt.ruby ) 42*cc02d7e2SAndroid Build Coastguard Worker end 43*cc02d7e2SAndroid Build Coastguard Workerend 44*cc02d7e2SAndroid Build Coastguard Worker 45*cc02d7e2SAndroid Build Coastguard WorkerCLEAN.add "src/ruby/lib/grpc/[0-9].[0-9]", "src/ruby/lib/grpc/grpc_c.{bundle,so}" 46*cc02d7e2SAndroid Build Coastguard Worker 47*cc02d7e2SAndroid Build Coastguard Worker# Define the test suites 48*cc02d7e2SAndroid Build Coastguard WorkerSPEC_SUITES = [ 49*cc02d7e2SAndroid Build Coastguard Worker { id: :wrapper, title: 'wrapper layer', files: %w(src/ruby/spec/*.rb) }, 50*cc02d7e2SAndroid Build Coastguard Worker { id: :idiomatic, title: 'idiomatic layer', dir: %w(src/ruby/spec/generic), 51*cc02d7e2SAndroid Build Coastguard Worker tags: ['~bidi', '~server'] }, 52*cc02d7e2SAndroid Build Coastguard Worker { id: :bidi, title: 'bidi tests', dir: %w(src/ruby/spec/generic), 53*cc02d7e2SAndroid Build Coastguard Worker tag: 'bidi' }, 54*cc02d7e2SAndroid Build Coastguard Worker { id: :server, title: 'rpc server thread tests', dir: %w(src/ruby/spec/generic), 55*cc02d7e2SAndroid Build Coastguard Worker tag: 'server' }, 56*cc02d7e2SAndroid Build Coastguard Worker { id: :pb, title: 'protobuf service tests', dir: %w(src/ruby/spec/pb) } 57*cc02d7e2SAndroid Build Coastguard Worker] 58*cc02d7e2SAndroid Build Coastguard Workernamespace :suite do 59*cc02d7e2SAndroid Build Coastguard Worker SPEC_SUITES.each do |suite| 60*cc02d7e2SAndroid Build Coastguard Worker desc "Run all specs in the #{suite[:title]} spec suite" 61*cc02d7e2SAndroid Build Coastguard Worker RSpec::Core::RakeTask.new(suite[:id]) do |t| 62*cc02d7e2SAndroid Build Coastguard Worker ENV['COVERAGE_NAME'] = suite[:id].to_s 63*cc02d7e2SAndroid Build Coastguard Worker spec_files = [] 64*cc02d7e2SAndroid Build Coastguard Worker suite[:files].each { |f| spec_files += Dir[f] } if suite[:files] 65*cc02d7e2SAndroid Build Coastguard Worker 66*cc02d7e2SAndroid Build Coastguard Worker if suite[:dir] 67*cc02d7e2SAndroid Build Coastguard Worker suite[:dir].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] } 68*cc02d7e2SAndroid Build Coastguard Worker end 69*cc02d7e2SAndroid Build Coastguard Worker helper = 'src/ruby/spec/spec_helper.rb' 70*cc02d7e2SAndroid Build Coastguard Worker spec_files << helper unless spec_files.include?(helper) 71*cc02d7e2SAndroid Build Coastguard Worker 72*cc02d7e2SAndroid Build Coastguard Worker t.pattern = spec_files 73*cc02d7e2SAndroid Build Coastguard Worker t.rspec_opts = "--tag #{suite[:tag]}" if suite[:tag] 74*cc02d7e2SAndroid Build Coastguard Worker if suite[:tags] 75*cc02d7e2SAndroid Build Coastguard Worker t.rspec_opts = suite[:tags].map { |x| "--tag #{x}" }.join(' ') 76*cc02d7e2SAndroid Build Coastguard Worker end 77*cc02d7e2SAndroid Build Coastguard Worker end 78*cc02d7e2SAndroid Build Coastguard Worker end 79*cc02d7e2SAndroid Build Coastguard Workerend 80*cc02d7e2SAndroid Build Coastguard Worker 81*cc02d7e2SAndroid Build Coastguard Workerdesc 'Build the Windows gRPC DLLs for Ruby. The argument contains the list of platforms for which to build dll. Empty placeholder files will be created for platforms that were not selected.' 82*cc02d7e2SAndroid Build Coastguard Workertask 'dlls', [:plat] do |t, args| 83*cc02d7e2SAndroid Build Coastguard Worker grpc_config = ENV['GRPC_CONFIG'] || 'opt' 84*cc02d7e2SAndroid Build Coastguard Worker verbose = ENV['V'] || '0' 85*cc02d7e2SAndroid Build Coastguard Worker # use env variable to set artifact build paralellism 86*cc02d7e2SAndroid Build Coastguard Worker nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] || `nproc`.strip 87*cc02d7e2SAndroid Build Coastguard Worker plat_list = args[:plat] 88*cc02d7e2SAndroid Build Coastguard Worker 89*cc02d7e2SAndroid Build Coastguard Worker build_configs = [ 90*cc02d7e2SAndroid Build Coastguard Worker { cross: 'x86_64-w64-mingw32', out: 'grpc_c.64-ucrt.ruby', platform: 'x64-mingw-ucrt' }, 91*cc02d7e2SAndroid Build Coastguard Worker { cross: 'x86_64-w64-mingw32', out: 'grpc_c.64-msvcrt.ruby', platform: 'x64-mingw32' }, 92*cc02d7e2SAndroid Build Coastguard Worker { cross: 'i686-w64-mingw32', out: 'grpc_c.32-msvcrt.ruby', platform: 'x86-mingw32' } 93*cc02d7e2SAndroid Build Coastguard Worker ] 94*cc02d7e2SAndroid Build Coastguard Worker selected_build_configs = [] 95*cc02d7e2SAndroid Build Coastguard Worker build_configs.each do |config| 96*cc02d7e2SAndroid Build Coastguard Worker if plat_list.include?(config[:platform]) 97*cc02d7e2SAndroid Build Coastguard Worker # build the DLL (as grpc_c.*.ruby) 98*cc02d7e2SAndroid Build Coastguard Worker selected_build_configs.append(config) 99*cc02d7e2SAndroid Build Coastguard Worker else 100*cc02d7e2SAndroid Build Coastguard Worker # create an empty grpc_c.*.ruby file as a placeholder 101*cc02d7e2SAndroid Build Coastguard Worker FileUtils.touch config[:out] 102*cc02d7e2SAndroid Build Coastguard Worker end 103*cc02d7e2SAndroid Build Coastguard Worker end 104*cc02d7e2SAndroid Build Coastguard Worker 105*cc02d7e2SAndroid Build Coastguard Worker env = 'CPPFLAGS="-D_WIN32_WINNT=0x600 -DNTDDI_VERSION=0x06000000 -DUNICODE -D_UNICODE -Wno-unused-variable -Wno-unused-result -DCARES_STATICLIB -Wno-error=conversion -Wno-sign-compare -Wno-parentheses -Wno-format -DWIN32_LEAN_AND_MEAN" ' 106*cc02d7e2SAndroid Build Coastguard Worker env += 'CFLAGS="-Wno-incompatible-pointer-types" ' 107*cc02d7e2SAndroid Build Coastguard Worker env += 'CXXFLAGS="-std=c++14 -fno-exceptions" ' 108*cc02d7e2SAndroid Build Coastguard Worker env += 'LDFLAGS=-static ' 109*cc02d7e2SAndroid Build Coastguard Worker env += 'SYSTEM=MINGW32 ' 110*cc02d7e2SAndroid Build Coastguard Worker env += 'EMBED_ZLIB=true ' 111*cc02d7e2SAndroid Build Coastguard Worker env += 'EMBED_OPENSSL=true ' 112*cc02d7e2SAndroid Build Coastguard Worker env += 'BUILDDIR=/tmp ' 113*cc02d7e2SAndroid Build Coastguard Worker env += "V=#{verbose} " 114*cc02d7e2SAndroid Build Coastguard Worker env += "GRPC_RUBY_BUILD_PROCS=#{nproc_override} " 115*cc02d7e2SAndroid Build Coastguard Worker 116*cc02d7e2SAndroid Build Coastguard Worker out = GrpcBuildConfig::CORE_WINDOWS_DLL 117*cc02d7e2SAndroid Build Coastguard Worker 118*cc02d7e2SAndroid Build Coastguard Worker # propagate env variables with ccache configuration to the rake-compiler-dock docker container 119*cc02d7e2SAndroid Build Coastguard Worker # and setup ccache symlinks as needed. 120*cc02d7e2SAndroid Build Coastguard Worker # TODO(jtattermusch): deduplicate creation of prepare_ccache_cmd 121*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd = "export GRPC_BUILD_ENABLE_CCACHE=\"#{ENV.fetch('GRPC_BUILD_ENABLE_CCACHE', '')}\" && " 122*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "export CCACHE_SECONDARY_STORAGE=\"#{ENV.fetch('CCACHE_SECONDARY_STORAGE', '')}\" && " 123*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "export PATH=\"$PATH:/usr/local/bin\" && " 124*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "source tools/internal_ci/helper_scripts/prepare_ccache_symlinks_rc " 125*cc02d7e2SAndroid Build Coastguard Worker 126*cc02d7e2SAndroid Build Coastguard Worker selected_build_configs.each do |opt| 127*cc02d7e2SAndroid Build Coastguard Worker env_comp = "CC=#{opt[:cross]}-gcc " 128*cc02d7e2SAndroid Build Coastguard Worker env_comp += "CXX=#{opt[:cross]}-g++ " 129*cc02d7e2SAndroid Build Coastguard Worker env_comp += "LD=#{opt[:cross]}-gcc " 130*cc02d7e2SAndroid Build Coastguard Worker env_comp += "LDXX=#{opt[:cross]}-g++ " 131*cc02d7e2SAndroid Build Coastguard Worker run_rake_compiler(opt[:platform], <<~EOT) 132*cc02d7e2SAndroid Build Coastguard Worker #{prepare_ccache_cmd} && \ 133*cc02d7e2SAndroid Build Coastguard Worker gem update --system --no-document && \ 134*cc02d7e2SAndroid Build Coastguard Worker #{env} #{env_comp} make -j#{nproc_override} #{out} && \ 135*cc02d7e2SAndroid Build Coastguard Worker #{opt[:cross]}-strip -x -S #{out} && \ 136*cc02d7e2SAndroid Build Coastguard Worker cp #{out} #{opt[:out]} 137*cc02d7e2SAndroid Build Coastguard Worker EOT 138*cc02d7e2SAndroid Build Coastguard Worker end 139*cc02d7e2SAndroid Build Coastguard Workerend 140*cc02d7e2SAndroid Build Coastguard Worker 141*cc02d7e2SAndroid Build Coastguard Workerdesc 'Build the native gem file under rake_compiler_dock. Optionally one can pass argument to build only native gem for a chosen platform.' 142*cc02d7e2SAndroid Build Coastguard Workertask 'gem:native', [:plat] do |t, args| 143*cc02d7e2SAndroid Build Coastguard Worker verbose = ENV['V'] || '0' 144*cc02d7e2SAndroid Build Coastguard Worker 145*cc02d7e2SAndroid Build Coastguard Worker grpc_config = ENV['GRPC_CONFIG'] || 'opt' 146*cc02d7e2SAndroid Build Coastguard Worker ruby_cc_versions = ['3.3.0', '3.2.0', '3.1.0', '3.0.0', '2.7.0'].join(':') 147*cc02d7e2SAndroid Build Coastguard Worker selected_plat = "#{args[:plat]}" 148*cc02d7e2SAndroid Build Coastguard Worker 149*cc02d7e2SAndroid Build Coastguard Worker # use env variable to set artifact build paralellism 150*cc02d7e2SAndroid Build Coastguard Worker nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] || `nproc`.strip 151*cc02d7e2SAndroid Build Coastguard Worker 152*cc02d7e2SAndroid Build Coastguard Worker # propagate env variables with ccache configuration to the rake-compiler-dock docker container 153*cc02d7e2SAndroid Build Coastguard Worker # and setup ccache symlinks as needed. 154*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd = "export GRPC_BUILD_ENABLE_CCACHE=\"#{ENV.fetch('GRPC_BUILD_ENABLE_CCACHE', '')}\" && " 155*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "export CCACHE_SECONDARY_STORAGE=\"#{ENV.fetch('CCACHE_SECONDARY_STORAGE', '')}\" && " 156*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "export PATH=\"$PATH:/usr/local/bin\" && " 157*cc02d7e2SAndroid Build Coastguard Worker prepare_ccache_cmd += "source tools/internal_ci/helper_scripts/prepare_ccache_symlinks_rc " 158*cc02d7e2SAndroid Build Coastguard Worker 159*cc02d7e2SAndroid Build Coastguard Worker supported_windows_platforms = ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt'] 160*cc02d7e2SAndroid Build Coastguard Worker supported_unix_platforms = ['x86_64-linux', 'x86-linux', 'aarch64-linux', 'x86_64-darwin', 'arm64-darwin'] 161*cc02d7e2SAndroid Build Coastguard Worker supported_platforms = supported_windows_platforms + supported_unix_platforms 162*cc02d7e2SAndroid Build Coastguard Worker 163*cc02d7e2SAndroid Build Coastguard Worker if selected_plat.empty? 164*cc02d7e2SAndroid Build Coastguard Worker # build everything 165*cc02d7e2SAndroid Build Coastguard Worker windows_platforms = supported_windows_platforms 166*cc02d7e2SAndroid Build Coastguard Worker unix_platforms = supported_unix_platforms 167*cc02d7e2SAndroid Build Coastguard Worker else 168*cc02d7e2SAndroid Build Coastguard Worker # build only selected platform 169*cc02d7e2SAndroid Build Coastguard Worker if supported_windows_platforms.include?(selected_plat) 170*cc02d7e2SAndroid Build Coastguard Worker windows_platforms = [selected_plat] 171*cc02d7e2SAndroid Build Coastguard Worker unix_platforms = [] 172*cc02d7e2SAndroid Build Coastguard Worker elsif supported_unix_platforms.include?(selected_plat) 173*cc02d7e2SAndroid Build Coastguard Worker windows_platforms = [] 174*cc02d7e2SAndroid Build Coastguard Worker unix_platforms = [selected_plat] 175*cc02d7e2SAndroid Build Coastguard Worker else 176*cc02d7e2SAndroid Build Coastguard Worker fail "Unsupported platform '#{selected_plat}' passed as an argument." 177*cc02d7e2SAndroid Build Coastguard Worker end 178*cc02d7e2SAndroid Build Coastguard Worker end 179*cc02d7e2SAndroid Build Coastguard Worker 180*cc02d7e2SAndroid Build Coastguard Worker # Create the windows dlls or create the empty placeholders 181*cc02d7e2SAndroid Build Coastguard Worker Rake::Task['dlls'].execute(plat: windows_platforms) 182*cc02d7e2SAndroid Build Coastguard Worker 183*cc02d7e2SAndroid Build Coastguard Worker windows_platforms.each do |plat| 184*cc02d7e2SAndroid Build Coastguard Worker run_rake_compiler(plat, <<~EOT) 185*cc02d7e2SAndroid Build Coastguard Worker #{prepare_ccache_cmd} && \ 186*cc02d7e2SAndroid Build Coastguard Worker gem update --system --no-document && \ 187*cc02d7e2SAndroid Build Coastguard Worker bundle && \ 188*cc02d7e2SAndroid Build Coastguard Worker bundle exec rake clean && \ 189*cc02d7e2SAndroid Build Coastguard Worker bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \ 190*cc02d7e2SAndroid Build Coastguard Worker RUBY_CC_VERSION=#{ruby_cc_versions} \ 191*cc02d7e2SAndroid Build Coastguard Worker V=#{verbose} \ 192*cc02d7e2SAndroid Build Coastguard Worker GRPC_CONFIG=#{grpc_config} \ 193*cc02d7e2SAndroid Build Coastguard Worker GRPC_RUBY_BUILD_PROCS=#{nproc_override} 194*cc02d7e2SAndroid Build Coastguard Worker EOT 195*cc02d7e2SAndroid Build Coastguard Worker end 196*cc02d7e2SAndroid Build Coastguard Worker 197*cc02d7e2SAndroid Build Coastguard Worker # Truncate grpc_c.*.ruby files because they're for Windows only and we don't want 198*cc02d7e2SAndroid Build Coastguard Worker # them to take up space in the gems that don't target windows. 199*cc02d7e2SAndroid Build Coastguard Worker File.truncate('grpc_c.32-msvcrt.ruby', 0) 200*cc02d7e2SAndroid Build Coastguard Worker File.truncate('grpc_c.64-msvcrt.ruby', 0) 201*cc02d7e2SAndroid Build Coastguard Worker File.truncate('grpc_c.64-ucrt.ruby', 0) 202*cc02d7e2SAndroid Build Coastguard Worker 203*cc02d7e2SAndroid Build Coastguard Worker `mkdir -p src/ruby/nativedebug/symbols` 204*cc02d7e2SAndroid Build Coastguard Worker # TODO(apolcyn): make debug symbols work on apple platforms. 205*cc02d7e2SAndroid Build Coastguard Worker # Currently we hit "objcopy: grpc_c.bundle: file format not recognized" 206*cc02d7e2SAndroid Build Coastguard Worker # TODO(apolcyn): make debug symbols work on aarch64 linux. 207*cc02d7e2SAndroid Build Coastguard Worker # Currently we hit "objcopy: Unable to recognise the format of the input file `grpc_c.so'" 208*cc02d7e2SAndroid Build Coastguard Worker unix_platforms_without_debug_symbols = ['x86_64-darwin', 'arm64-darwin', 'aarch64-linux'] 209*cc02d7e2SAndroid Build Coastguard Worker 210*cc02d7e2SAndroid Build Coastguard Worker unix_platforms.each do |plat| 211*cc02d7e2SAndroid Build Coastguard Worker if unix_platforms_without_debug_symbols.include?(plat) 212*cc02d7e2SAndroid Build Coastguard Worker debug_symbols_dir = '' 213*cc02d7e2SAndroid Build Coastguard Worker else 214*cc02d7e2SAndroid Build Coastguard Worker debug_symbols_dir = File.join(Dir.pwd, 'src/ruby/nativedebug/symbols') 215*cc02d7e2SAndroid Build Coastguard Worker end 216*cc02d7e2SAndroid Build Coastguard Worker run_rake_compiler(plat, <<~EOT) 217*cc02d7e2SAndroid Build Coastguard Worker #{prepare_ccache_cmd} && \ 218*cc02d7e2SAndroid Build Coastguard Worker gem update --system --no-document && \ 219*cc02d7e2SAndroid Build Coastguard Worker bundle && \ 220*cc02d7e2SAndroid Build Coastguard Worker bundle exec rake clean && \ 221*cc02d7e2SAndroid Build Coastguard Worker export GRPC_RUBY_DEBUG_SYMBOLS_OUTPUT_DIR=#{debug_symbols_dir} && \ 222*cc02d7e2SAndroid Build Coastguard Worker bundle exec rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem pkg/#{spec.full_name}.gem \ 223*cc02d7e2SAndroid Build Coastguard Worker RUBY_CC_VERSION=#{ruby_cc_versions} \ 224*cc02d7e2SAndroid Build Coastguard Worker V=#{verbose} \ 225*cc02d7e2SAndroid Build Coastguard Worker GRPC_CONFIG=#{grpc_config} \ 226*cc02d7e2SAndroid Build Coastguard Worker GRPC_RUBY_BUILD_PROCS=#{nproc_override} 227*cc02d7e2SAndroid Build Coastguard Worker EOT 228*cc02d7e2SAndroid Build Coastguard Worker end 229*cc02d7e2SAndroid Build Coastguard Worker # Generate debug symbol packages to complement the native libraries we just built 230*cc02d7e2SAndroid Build Coastguard Worker unix_platforms.each do |plat| 231*cc02d7e2SAndroid Build Coastguard Worker unless unix_platforms_without_debug_symbols.include?(plat) 232*cc02d7e2SAndroid Build Coastguard Worker `bash src/ruby/nativedebug/build_package.sh #{plat}` 233*cc02d7e2SAndroid Build Coastguard Worker `cp src/ruby/nativedebug/pkg/*.gem pkg/` 234*cc02d7e2SAndroid Build Coastguard Worker end 235*cc02d7e2SAndroid Build Coastguard Worker end 236*cc02d7e2SAndroid Build Coastguard Workerend 237*cc02d7e2SAndroid Build Coastguard Worker 238*cc02d7e2SAndroid Build Coastguard Worker# Define dependencies between the suites. 239*cc02d7e2SAndroid Build Coastguard Workertask 'suite:wrapper' => [:compile, :rubocop] 240*cc02d7e2SAndroid Build Coastguard Workertask 'suite:idiomatic' => 'suite:wrapper' 241*cc02d7e2SAndroid Build Coastguard Workertask 'suite:bidi' => 'suite:wrapper' 242*cc02d7e2SAndroid Build Coastguard Workertask 'suite:server' => 'suite:wrapper' 243*cc02d7e2SAndroid Build Coastguard Workertask 'suite:pb' => 'suite:server' 244*cc02d7e2SAndroid Build Coastguard Worker 245*cc02d7e2SAndroid Build Coastguard Workerdesc 'Compiles the gRPC extension then runs all the tests' 246*cc02d7e2SAndroid Build Coastguard Workertask all: ['suite:idiomatic', 'suite:bidi', 'suite:pb', 'suite:server'] 247*cc02d7e2SAndroid Build Coastguard Workertask default: :all 248