From 0978ff8f04e6c6db5d65a918dfe4e869dd4ad76e Mon Sep 17 00:00:00 2001 From: Matijs van Zuijlen Date: Fri, 29 Nov 2019 18:16:09 +0100 Subject: [PATCH 01/10] Depend on pure-ruby protobuf --- cucumber-messages/ruby/Gemfile | 3 --- cucumber-messages/ruby/cucumber-messages.gemspec | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cucumber-messages/ruby/Gemfile b/cucumber-messages/ruby/Gemfile index f019a4b208..e5ad85c8dd 100644 --- a/cucumber-messages/ruby/Gemfile +++ b/cucumber-messages/ruby/Gemfile @@ -1,7 +1,4 @@ # frozen_string_literal: true source 'https://rubygems.org' -# Use an older protobuf on JRuby -gem 'google-protobuf', '~> 3.2.0.2' if RUBY_PLATFORM == 'java' - gemspec diff --git a/cucumber-messages/ruby/cucumber-messages.gemspec b/cucumber-messages/ruby/cucumber-messages.gemspec index a3c53f67f7..7c71f43fb9 100644 --- a/cucumber-messages/ruby/cucumber-messages.gemspec +++ b/cucumber-messages/ruby/cucumber-messages.gemspec @@ -19,8 +19,7 @@ Gem::Specification.new do |s| 'source_code_uri' => 'https://github.com/cucumber/cucumber/blob/master/cucumber-messages/ruby', } - # Users of JRuby should use google-protobuf 3.2.0.2 (later versions don't work) - s.add_dependency('google-protobuf', ['>= 3.2', '<= 3.8']) + s.add_dependency 'protobuf', '~> 3.10' s.add_dependency 'json', '~> 2.2', '>= 2.2.0' s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1' s.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0' From 6e44c3ab0e2c56f190becb984536c8dc43541beb Mon Sep 17 00:00:00 2001 From: Matijs van Zuijlen Date: Fri, 29 Nov 2019 19:01:17 +0100 Subject: [PATCH 02/10] Make protoc generate file compatible with protobuf gem --- cucumber-messages/ruby/Makefile | 8 ++++---- cucumber-messages/ruby/Rakefile | 1 + cucumber-messages/ruby/lib/cucumber/.gitignore | 2 +- cucumber-messages/ruby/lib/cucumber/messages.rb | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cucumber-messages/ruby/Makefile b/cucumber-messages/ruby/Makefile index 16dbce2f94..67e8b8008c 100644 --- a/cucumber-messages/ruby/Makefile +++ b/cucumber-messages/ruby/Makefile @@ -1,9 +1,9 @@ include default.mk -.deps: lib/cucumber/messages_pb.rb +.deps: lib/cucumber/messages.pb.rb -lib/cucumber/messages_pb.rb: messages.proto - protoc -I. --ruby_out lib/cucumber $< +lib/cucumber/messages.pb.rb: messages.proto + bundle exec rake protobuf:compile[.,.,lib/cucumber] clean: - rm -f lib/cucumber/messages_pb.rb + rm -f lib/cucumber/messages.pb.rb diff --git a/cucumber-messages/ruby/Rakefile b/cucumber-messages/ruby/Rakefile index e14df3b2fd..cf1bbc2b66 100644 --- a/cucumber-messages/ruby/Rakefile +++ b/cucumber-messages/ruby/Rakefile @@ -1,6 +1,7 @@ # encoding: utf-8 require 'rubygems' require 'bundler' +load 'protobuf/tasks/compile.rake' Bundler::GemHelper.install_tasks $:.unshift File.expand_path("../lib", __FILE__) diff --git a/cucumber-messages/ruby/lib/cucumber/.gitignore b/cucumber-messages/ruby/lib/cucumber/.gitignore index d9b94b0736..4bf8cc2610 100644 --- a/cucumber-messages/ruby/lib/cucumber/.gitignore +++ b/cucumber-messages/ruby/lib/cucumber/.gitignore @@ -1,2 +1,2 @@ # protoc-generated file -messages_pb.rb +messages.pb.rb diff --git a/cucumber-messages/ruby/lib/cucumber/messages.rb b/cucumber-messages/ruby/lib/cucumber/messages.rb index 2a39f93bca..9d4df27d0b 100644 --- a/cucumber-messages/ruby/lib/cucumber/messages.rb +++ b/cucumber-messages/ruby/lib/cucumber/messages.rb @@ -1,4 +1,4 @@ -require 'cucumber/messages_pb' +require 'cucumber/messages.pb' require 'cucumber/messages/protobuf_io_enumerator' require 'cucumber/messages/ndjson_io_enumerator' require 'cucumber/messages/protobuf_delimited' From 21a48be9173ff2dee864c8416db7396519ab874b Mon Sep 17 00:00:00 2001 From: Matijs van Zuijlen Date: Fri, 29 Nov 2019 19:13:04 +0100 Subject: [PATCH 03/10] Force generation of Cucumber::Messages package --- cucumber-messages/ruby/messages.proto | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cucumber-messages/ruby/messages.proto b/cucumber-messages/ruby/messages.proto index 798438421b..b8f45b427c 100644 --- a/cucumber-messages/ruby/messages.proto +++ b/cucumber-messages/ruby/messages.proto @@ -1,7 +1,5 @@ syntax = "proto3"; -package io.cucumber.messages; -option ruby_package = "Cucumber.Messages"; -option go_package = "messages"; +package cucumber.messages; // When removing a field, replace it with reserved, rather than deleting the line. // When adding a field, add it to the end and increment the number by one. From f42ecf4b55f2526ce9ccf6b642f3b2383b86e5d2 Mon Sep 17 00:00:00 2001 From: Matijs van Zuijlen Date: Fri, 29 Nov 2019 19:29:15 +0100 Subject: [PATCH 04/10] Re-implement Ndjson serialization --- .../ruby/lib/cucumber/messages/ndjson_io_enumerator.rb | 5 +++-- .../ruby/lib/cucumber/messages/protobuf_ndjson.rb | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cucumber-messages/ruby/lib/cucumber/messages/ndjson_io_enumerator.rb b/cucumber-messages/ruby/lib/cucumber/messages/ndjson_io_enumerator.rb index 7aa201204b..3e04d61bb5 100644 --- a/cucumber-messages/ruby/lib/cucumber/messages/ndjson_io_enumerator.rb +++ b/cucumber-messages/ruby/lib/cucumber/messages/ndjson_io_enumerator.rb @@ -6,10 +6,11 @@ module NdjsonIoEnumerator def self.call(io) Enumerator.new do |yielder| io.each_line do |json| - yielder.yield(Cucumber::Messages::Envelope.decode_json(json)) + args = JSON.parse(json) + yielder.yield(Cucumber::Messages::Envelope.new(args)) end end end end end -end \ No newline at end of file +end diff --git a/cucumber-messages/ruby/lib/cucumber/messages/protobuf_ndjson.rb b/cucumber-messages/ruby/lib/cucumber/messages/protobuf_ndjson.rb index 0e443e870e..90d84da897 100644 --- a/cucumber-messages/ruby/lib/cucumber/messages/protobuf_ndjson.rb +++ b/cucumber-messages/ruby/lib/cucumber/messages/protobuf_ndjson.rb @@ -4,7 +4,7 @@ module Cucumber module Messages module WriteNdjson def write_ndjson_to(io) - json = self.class.encode_json(self) + json = self.to_json ob = JSON.parse(json) remove_empties(ob) io.puts(JSON.generate(ob)) @@ -27,4 +27,4 @@ def remove_empties(ob) end end end -end \ No newline at end of file +end From 8ae79026e704a709efeec4bfd86f08df83d6adb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 7 Jan 2020 12:30:32 +0000 Subject: [PATCH 05/10] Point Gemspec to forked protobug. Update comments. --- cucumber-messages/ruby/Gemfile | 3 ++- gherkin/ruby/Gemfile | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cucumber-messages/ruby/Gemfile b/cucumber-messages/ruby/Gemfile index b0813d146f..098155554d 100644 --- a/cucumber-messages/ruby/Gemfile +++ b/cucumber-messages/ruby/Gemfile @@ -3,5 +3,6 @@ source 'https://rubygems.org' gemspec -# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 is merged and released +# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and +# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' diff --git a/gherkin/ruby/Gemfile b/gherkin/ruby/Gemfile index 4ccc0e29e4..aeeb1b1d8d 100644 --- a/gherkin/ruby/Gemfile +++ b/gherkin/ruby/Gemfile @@ -3,8 +3,8 @@ source "https://rubygems.org" gem 'cucumber-messages', :path => File.dirname(__FILE__) + '/../../cucumber-messages/ruby' -# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 is merged and released -#gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' -gem 'protobuf', :path => File.dirname(__FILE__) + '/../../../../protobuf' +# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and +# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released +gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' gemspec From 729fa75d6a2fa6e49bb21e27f2990629ea51b72f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 7 Jan 2020 12:46:40 +0000 Subject: [PATCH 06/10] Add bigdecimal - transitive dependency for protobuf --- cucumber-messages/ruby/cucumber-messages.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/cucumber-messages/ruby/cucumber-messages.gemspec b/cucumber-messages/ruby/cucumber-messages.gemspec index e61853fc78..88707d6b22 100644 --- a/cucumber-messages/ruby/cucumber-messages.gemspec +++ b/cucumber-messages/ruby/cucumber-messages.gemspec @@ -21,6 +21,7 @@ Gem::Specification.new do |s| s.add_dependency 'protobuf', '~> 3.10' s.add_dependency 'json', '~> 2.3', '>= 2.3.0' + s.add_dependency 'bigdecimal', '~> 2.0', '>= 2.0.0' s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1' s.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0' From f264aa2896def972ec565ef44376014f56b308bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 7 Jan 2020 12:52:12 +0000 Subject: [PATCH 07/10] Persist whole workspace, not just the generated file --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 903f5a39d6..d9db6738f6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -397,7 +397,7 @@ jobs: - persist_to_workspace: root: ~/cucumber paths: - - cucumber-messages/ruby/lib/cucumber/messages_pb.rb + - cucumber-messages/ruby gherkin-ruby-23: executor: docker-circleci-ruby-23 From 187a0d65b38cc4d05c2ae5529983f6d7e8b44fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Tue, 7 Jan 2020 14:30:31 +0000 Subject: [PATCH 08/10] Use ruby stdlib bigdecimal --- .circleci/config.yml | 2 +- Dockerfile | 1 + cucumber-messages/ruby/cucumber-messages.gemspec | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d9db6738f6..a59ac5bdb5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,7 +14,7 @@ executors: docker: # Remember to update to the latest image tag. # Run `source scripts/functions.sh && docker_image Dockerfile` to print it. - - image: cucumber/cucumber-build:9ce5f6a542de12ceecdd84caaad47365 + - image: cucumber/cucumber-build:7e07f786ac72e3597a8e5bbe435b4c90 working_directory: ~/cucumber # Go docker-circleci-golang: diff --git a/Dockerfile b/Dockerfile index f3c04e29f0..6dfe931f86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,6 +32,7 @@ RUN apk add --no-cache \ py2-pip \ rsync \ ruby \ + ruby-bigdecimal \ ruby-dev \ sed \ su-exec \ diff --git a/cucumber-messages/ruby/cucumber-messages.gemspec b/cucumber-messages/ruby/cucumber-messages.gemspec index 88707d6b22..e61853fc78 100644 --- a/cucumber-messages/ruby/cucumber-messages.gemspec +++ b/cucumber-messages/ruby/cucumber-messages.gemspec @@ -21,7 +21,6 @@ Gem::Specification.new do |s| s.add_dependency 'protobuf', '~> 3.10' s.add_dependency 'json', '~> 2.3', '>= 2.3.0' - s.add_dependency 'bigdecimal', '~> 2.0', '>= 2.0.0' s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1' s.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0' From 442c8fa6e9f1c6d62e182de8f99d0846d4b5b17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Wed, 8 Jan 2020 07:47:06 +0000 Subject: [PATCH 09/10] Fix cucumber-demo-formatter --- cucumber-demo-formatter/ruby/Gemfile | 4 ++++ .../ruby/bin/cucumber-demo-formatter | 4 ++-- .../ruby/lib/cucumber_demo_formatter.rb | 21 +++++++++++-------- .../messages/ndjson_to_message_enumerator.rb | 4 ++-- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/cucumber-demo-formatter/ruby/Gemfile b/cucumber-demo-formatter/ruby/Gemfile index 6f66fdca50..aeeb1b1d8d 100644 --- a/cucumber-demo-formatter/ruby/Gemfile +++ b/cucumber-demo-formatter/ruby/Gemfile @@ -3,4 +3,8 @@ source "https://rubygems.org" gem 'cucumber-messages', :path => File.dirname(__FILE__) + '/../../cucumber-messages/ruby' +# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and +# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released +gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' + gemspec diff --git a/cucumber-demo-formatter/ruby/bin/cucumber-demo-formatter b/cucumber-demo-formatter/ruby/bin/cucumber-demo-formatter index ed5f334615..ae730fd217 100755 --- a/cucumber-demo-formatter/ruby/bin/cucumber-demo-formatter +++ b/cucumber-demo-formatter/ruby/bin/cucumber-demo-formatter @@ -8,7 +8,7 @@ require 'cucumber_demo_formatter' ARGV << '-h' if ARGV.empty? option_parser = OptionParser.new do |opts| - opts.on '-f', '--format=ndjson|protobuf', 'Output format' + opts.on '-f', '--format=ndjson|protobuf', 'Input format' opts.on_tail("-h", "--help", "Show this message") do puts opts @@ -29,4 +29,4 @@ else raise "Unsupported format: '#{format}'" end -formatter.process_messages(message_enumerator, STDOUT) \ No newline at end of file +formatter.process_messages(message_enumerator, STDOUT) diff --git a/cucumber-demo-formatter/ruby/lib/cucumber_demo_formatter.rb b/cucumber-demo-formatter/ruby/lib/cucumber_demo_formatter.rb index a6897d8296..3780bdd837 100644 --- a/cucumber-demo-formatter/ruby/lib/cucumber_demo_formatter.rb +++ b/cucumber-demo-formatter/ruby/lib/cucumber_demo_formatter.rb @@ -3,21 +3,24 @@ class CucumberDemoFormatter def process_messages(message_enumerator, output) emoji = { - UNKNOWN: '👽', - PASSED: '😃', - SKIPPED: '🥶', - PENDING: '⏰', - UNDEFINED: '🤷', - AMBIGUOUS: '🦄', - FAILED: '💣', + ::Cucumber::Messages::TestResult::Status::UNKNOWN => '👽', + ::Cucumber::Messages::TestResult::Status::PASSED => '😃', + ::Cucumber::Messages::TestResult::Status::SKIPPED => '🥶', + ::Cucumber::Messages::TestResult::Status::PENDING => '⏰', + ::Cucumber::Messages::TestResult::Status::UNDEFINED => '🤷', + ::Cucumber::Messages::TestResult::Status::AMBIGUOUS => '🦄', + ::Cucumber::Messages::TestResult::Status::FAILED => '💣', } message_enumerator.each do |message| if message.test_step_finished - output.write(emoji[message.test_step_finished.test_result.status]) + status = message.test_step_finished.test_result.status + em = emoji[status] + raise "No emoji found for status #{status}" if em.nil? + output.write(em) end if message.test_run_finished output.write("\n") end end end -end \ No newline at end of file +end diff --git a/cucumber-messages/ruby/lib/cucumber/messages/ndjson_to_message_enumerator.rb b/cucumber-messages/ruby/lib/cucumber/messages/ndjson_to_message_enumerator.rb index 92343faea8..88487ccc7d 100644 --- a/cucumber-messages/ruby/lib/cucumber/messages/ndjson_to_message_enumerator.rb +++ b/cucumber-messages/ruby/lib/cucumber/messages/ndjson_to_message_enumerator.rb @@ -6,8 +6,8 @@ class NdjsonToMessageEnumerator < Enumerator def initialize(io) super() do |yielder| io.each_line do |json| - args = JSON.parse(json) - yielder.yield(Cucumber::Messages::Envelope.new(args)) + m = Cucumber::Messages::Envelope.from_json(json) + yielder.yield(m) end end end From 150e0fd57d0cd69cffe344ac75ee058a435da73d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aslak=20Helles=C3=B8y?= Date: Wed, 8 Jan 2020 10:08:47 +0000 Subject: [PATCH 10/10] Use forked protobuf-cucumber --- cucumber-demo-formatter/ruby/Gemfile | 4 ---- cucumber-messages/ruby/Gemfile | 4 ---- cucumber-messages/ruby/cucumber-messages.gemspec | 4 +++- gherkin/ruby/Gemfile | 4 ---- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/cucumber-demo-formatter/ruby/Gemfile b/cucumber-demo-formatter/ruby/Gemfile index aeeb1b1d8d..6f66fdca50 100644 --- a/cucumber-demo-formatter/ruby/Gemfile +++ b/cucumber-demo-formatter/ruby/Gemfile @@ -3,8 +3,4 @@ source "https://rubygems.org" gem 'cucumber-messages', :path => File.dirname(__FILE__) + '/../../cucumber-messages/ruby' -# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and -# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released -gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' - gemspec diff --git a/cucumber-messages/ruby/Gemfile b/cucumber-messages/ruby/Gemfile index 098155554d..e5ad85c8dd 100644 --- a/cucumber-messages/ruby/Gemfile +++ b/cucumber-messages/ruby/Gemfile @@ -2,7 +2,3 @@ source 'https://rubygems.org' gemspec - -# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and -# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released -gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' diff --git a/cucumber-messages/ruby/cucumber-messages.gemspec b/cucumber-messages/ruby/cucumber-messages.gemspec index e61853fc78..9c135fe7f3 100644 --- a/cucumber-messages/ruby/cucumber-messages.gemspec +++ b/cucumber-messages/ruby/cucumber-messages.gemspec @@ -19,7 +19,9 @@ Gem::Specification.new do |s| 'source_code_uri' => 'https://github.com/cucumber/cucumber/blob/master/cucumber-messages/ruby', } - s.add_dependency 'protobuf', '~> 3.10' + # TODO: Switch back to 'protobuf' when this PR is merged and released: + # https://github.com/ruby-protobuf/protobuf/pull/411 + s.add_dependency 'protobuf-cucumber', '~> 3.10', '>= 3.10.4' s.add_dependency 'json', '~> 2.3', '>= 2.3.0' s.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1' diff --git a/gherkin/ruby/Gemfile b/gherkin/ruby/Gemfile index aeeb1b1d8d..6f66fdca50 100644 --- a/gherkin/ruby/Gemfile +++ b/gherkin/ruby/Gemfile @@ -3,8 +3,4 @@ source "https://rubygems.org" gem 'cucumber-messages', :path => File.dirname(__FILE__) + '/../../cucumber-messages/ruby' -# TODO: Remove when https://github.com/ruby-protobuf/protobuf/pull/410 and -# https://github.com/ruby-protobuf/protobuf/pull/411 are merged and released -gem 'protobuf', git: 'https://github.com/cucumber/protobuf.git', branch: '3-10-cucumber' - gemspec