|
- require 'cucumber/messages'
- require 'cucumber/ci_environment'
-
- module Cucumber
- class Runtime
- # Builder to instanciate a Cucumber::Messages::Meta message filled-in with
- # the runtime meta-data:
- # - protocol version: the version of the Cucumber::Messages protocol
- # - implementation: the name and version of the implementation (e.g. cucumber-ruby 8.0.0)
- # - runtime: the name and version of the runtime (e.g. ruby 3.0.1)
- # - os: the name and version of the operating system (e.g. linux 3.13.0-45-generic)
- # - cpu: the name of the CPU (e.g. x86_64)
- # - ci: informtion about the CI environment if any, including:
- # - name: the name of the CI environment (e.g. Jenkins)
- # - url: the URL of the CI environment (e.g. https://ci.example.com)
- # - build_number: the build number of the CI environment (e.g. 123)
- # - git: the git information of the CI environment if any
- # - remote: the remote of the git repository (e.g. git@github.com:cucumber/cucumber-ruby.git)
- # - revision: the revision of the git repository (e.g. abcdef)
- # - branch: the name of the git branch (e.g. main)
- # - tag: the name of the git tag (e.g. v1.0.0)
- class MetaMessageBuilder
- class << self
- # Builds a Cucumber::Messages::Meta filled-in with the runtime meta-data
- #
- # @param [env] environment data from which the CI information will be
- # retrieved (default ENV). Can be used to mock the environment for
- # testing purpose.
- #
- # @return [Cucumber::Messages::Meta] the meta message
- #
- # @see Cucumber::Runtime::MetaMessageBuilder
- #
- # @example
- # Cucumber::Runtime::MetaMessageBuilder.build_meta_message
- #
- def build_meta_message(env = ENV)
- Cucumber::Messages::Meta.new(
- protocol_version: protocol_version,
- implementation: implementation,
- runtime: runtime,
- os: os,
- cpu: cpu,
- ci: ci(env)
- )
- end
-
- private
-
- def protocol_version
- Cucumber::Messages::VERSION
- end
-
- def implementation
- Cucumber::Messages::Product.new(
- name: 'cucumber-ruby',
- version: Cucumber::VERSION
- )
- end
-
- def runtime
- Cucumber::Messages::Product.new(
- name: RUBY_ENGINE,
- version: RUBY_VERSION
- )
- end
-
- def os
- Cucumber::Messages::Product.new(
- name: RbConfig::CONFIG['target_os'],
- version: Sys::Uname.uname.version
- )
- end
-
- def cpu
- Cucumber::Messages::Product.new(
- name: RbConfig::CONFIG['target_cpu']
- )
- end
-
- def ci(env)
- ci_data = Cucumber::CiEnvironment.detect_ci_environment(env)
- return nil unless ci_data
-
- Cucumber::Messages::Ci.new(
- name: ci_data[:name],
- url: ci_data[:url],
- build_number: ci_data[:buildNumber],
- git: git_info(ci_data)
- )
- end
-
- def git_info(ci_data)
- return nil unless ci_data[:git]
-
- Cucumber::Messages::Git.new(
- remote: ci_data[:git][:remote],
- revision: ci_data[:git][:revision],
- branch: ci_data[:git][:branch],
- tag: ci_data[:git][:tag]
- )
- end
- end
- end
- end
- end
|