cucumber-create-meta 4.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c0d4c7da171c38558ed7c0809aa059da8161aeeab9fc0f2a788f757712fc953
4
- data.tar.gz: 997e930fe502d8a6f58ab7e8489b4b677b077a8f123d4748c40971ac14a235a5
3
+ metadata.gz: cbeec9c9555758136e2dab0114910c1ee47bab5cd1ddd0c53bab5d36db42b3aa
4
+ data.tar.gz: 6a740a16b9ab323fc360579ab13259603caa77ee9fc3fb8a0fe2bed07f02fb85
5
5
  SHA512:
6
- metadata.gz: 2a7eabe5cbfcae7db34f143aec073c0341f91e5e09266ad0b417e0419f10ef5daf9ddc1cedec8dabd12976d7f9b24adff217c5b6226511eac758e30aca880463
7
- data.tar.gz: 94c175d39941c886a7e8322a90f618747a5fffb148c06a3523034c0ff676a377efbd049f33fa7094270308690e9ec099c65c4aee180940262962ca5a92aa2b9c
6
+ metadata.gz: a90d7404c481a3a0da38cad6f44a740982955d43651fb1ffbecec4270aa3e652695879dc8a70e6a6fbd2e05cea5959618788e8de0efe34f5a6975cbd61996a6b
7
+ data.tar.gz: fafdb21be0d5d8c6b76eed939954b858a60bcec4bc4c84d9e3e54bad6658f36565b30b5a7f11df40aa3c2996d0921c1ed06f2b4d3617a81c43d7f72043de474f
@@ -1,24 +1,27 @@
1
1
  {
2
2
  "Azure Pipelines": {
3
- "url": "${BUILD_URI}",
3
+ "url": "${BUILD_BUILDURI}",
4
+ "buildNumber": "${BUILD_BUILDNUMBER}",
4
5
  "git": {
5
6
  "remote": "${BUILD_REPOSITORY_URI}",
6
7
  "revision": "${BUILD_SOURCEVERSION}",
7
- "branch": "${refbranch BUILD_SOURCEBRANCH}",
8
- "tag": "${reftag BUILD_SOURCEBRANCH}"
8
+ "branch": "${BUILD_SOURCEBRANCH/refs\/heads\/(.*)/\\1}",
9
+ "tag": "${BUILD_SOURCEBRANCH/refs\/tags\/(.*)/\\1}"
9
10
  }
10
11
  },
11
12
  "Bamboo": {
12
- "url": "${bamboo.buildResultsUrl}",
13
+ "url": "${bamboo_buildResultsUrl}",
14
+ "buildNumber": "${bamboo_buildNumber}",
13
15
  "git": {
14
- "remote": "${bamboo.planRepository.1.repositoryUrl}",
15
- "revision": "${bamboo.planRepository.1.revision}",
16
- "branch": "${bamboo.planRepository.1.branch}",
16
+ "remote": "${bamboo_planRepository_repositoryUrl}",
17
+ "revision": "${bamboo_planRepository_revision}",
18
+ "branch": "${bamboo_planRepository_branch}",
17
19
  "tag": null
18
20
  }
19
21
  },
20
22
  "Buddy": {
21
23
  "url": "${BUDDY_EXECUTION_URL}",
24
+ "buildNumber": "${BUDDY_EXECUTION_ID}",
22
25
  "git": {
23
26
  "remote": "${BUDDY_SCM_URL}",
24
27
  "revision": "${BUDDY_EXECUTION_REVISION}",
@@ -26,8 +29,19 @@
26
29
  "tag": "${BUDDY_EXECUTION_TAG}"
27
30
  }
28
31
  },
32
+ "Bitrise": {
33
+ "url": "${BITRISE_BUILD_URL}",
34
+ "buildNumber": "${BITRISE_BUILD_NUMBER}",
35
+ "git": {
36
+ "remote": "${GIT_REPOSITORY_URL}",
37
+ "revision": "${BITRISE_GIT_COMMIT}",
38
+ "branch": "${BITRISE_GIT_BRANCH}",
39
+ "tag": "${BITRISE_GIT_TAG}"
40
+ }
41
+ },
29
42
  "CircleCI": {
30
43
  "url": "${CIRCLE_BUILD_URL}",
44
+ "buildNumber": "${CIRCLE_BUILD_NUM}",
31
45
  "git": {
32
46
  "remote": "${CIRCLE_REPOSITORY_URL}",
33
47
  "revision": "${CIRCLE_SHA1}",
@@ -35,26 +49,39 @@
35
49
  "tag": "${CIRCLE_TAG}"
36
50
  }
37
51
  },
38
- "CodeShip": {
52
+ "CodeFresh": {
39
53
  "url": "${CF_BUILD_URL}",
54
+ "buildNumber": "${CF_BUILD_ID}",
40
55
  "git": {
41
- "remote": "${CF_COMMIT_URL}",
56
+ "remote": "${CF_COMMIT_URL/(.*)\\/commit.+$/\\1}.git",
42
57
  "revision": "${CF_REVISION}",
43
58
  "branch": "${CF_BRANCH}",
44
59
  "tag": null
45
60
  }
46
61
  },
62
+ "CodeShip": {
63
+ "url": "${CI_BUILD_URL}",
64
+ "buildNumber": "${CI_BUILD_NUMBER}",
65
+ "git": {
66
+ "remote": "${CI_PULL_REQUEST/(.*)\\/pull\\/\\d+/\\1.git}",
67
+ "revision": "${CI_COMMIT_ID}",
68
+ "branch": "${CI_BRANCH}",
69
+ "tag": null
70
+ }
71
+ },
47
72
  "GitHub Actions": {
48
73
  "url": "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}",
74
+ "buildNumber": "${GITHUB_RUN_ID}",
49
75
  "git": {
50
76
  "remote": "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git",
51
77
  "revision": "${GITHUB_SHA}",
52
- "branch": "${refbranch GITHUB_REF}",
53
- "tag": "${reftag GITHUB_REF}"
78
+ "branch": "${GITHUB_REF/refs\/heads\/(.*)/\\1}",
79
+ "tag": "${GITHUB_REF/refs\/tags\/(.*)/\\1}"
54
80
  }
55
81
  },
56
82
  "GitLab": {
57
83
  "url": "${CI_JOB_URL}",
84
+ "buildNumber": "${CI_JOB_ID}",
58
85
  "git": {
59
86
  "remote": "${CI_REPOSITORY_URL}",
60
87
  "revision": "${CI_COMMIT_SHA}",
@@ -63,16 +90,28 @@
63
90
  }
64
91
  },
65
92
  "GoCD": {
66
- "url": "${GO_SERVER_URL}/???",
93
+ "url": "${GO_SERVER_URL}/pipelines/${GO_PIPELINE_NAME}/${GO_PIPELINE_COUNTER}/${GO_STAGE_NAME}/${GO_STAGE_COUNTER}",
94
+ "buildNumber": "${GO_PIPELINE_NAME}/${GO_PIPELINE_COUNTER}/${GO_STAGE_NAME}/${GO_STAGE_COUNTER}",
67
95
  "git": {
68
- "remote": null,
96
+ "remote": "${GO_SCM_*_PR_URL/(.*)\\/pull\\/\\d+/\\1.git}",
69
97
  "revision": "${GO_REVISION}",
70
- "branch": null,
98
+ "branch": "${GO_SCM_*_PR_BRANCH/.*:(.*)/\\1}",
99
+ "tag": null
100
+ }
101
+ },
102
+ "Jenkins": {
103
+ "url": "${BUILD_URL}",
104
+ "buildNumber": "${BUILD_NUMBER}",
105
+ "git": {
106
+ "remote": "${GIT_URL}",
107
+ "revision": "${GIT_COMMIT}",
108
+ "branch": "${GIT_LOCAL_BRANCH}",
71
109
  "tag": null
72
110
  }
73
111
  },
74
112
  "Semaphore": {
75
- "url": "${SEMAPHORE_ORGANIZATION_URL}/${}",
113
+ "url": "${SEMAPHORE_ORGANIZATION_URL}/jobs/${SEMAPHORE_JOB_ID}",
114
+ "buildNumber": "${SEMAPHORE_JOB_ID}",
76
115
  "git": {
77
116
  "remote": "${SEMAPHORE_GIT_URL}",
78
117
  "revision": "${SEMAPHORE_GIT_SHA}",
@@ -80,17 +119,9 @@
80
119
  "tag": "${SEMAPHORE_GIT_TAG_NAME}"
81
120
  }
82
121
  },
83
- "TeamCity": {
84
- "url": "${teamcity.serverUrl}/app/rest/builds/id:${teamcity.build.id}",
85
- "git": {
86
- "remote": null,
87
- "revision": "${build.vcs.number}",
88
- "branch": "${teamcity.build.branch}",
89
- "tag": null
90
- }
91
- },
92
122
  "Travis CI": {
93
123
  "url": "${TRAVIS_BUILD_WEB_URL}",
124
+ "buildNumber": "${TRAVIS_JOB_NUMBER}",
94
125
  "git": {
95
126
  "remote": "https://github.com/${TRAVIS_REPO_SLUG}.git",
96
127
  "revision": "${TRAVIS_COMMIT}",
@@ -100,6 +131,7 @@
100
131
  },
101
132
  "Wercker": {
102
133
  "url": "${WERCKER_RUN_URL}",
134
+ "buildNumber": "${WERCKER_RUN_URL/.*\\/([^\\/]+)$/\\1}",
103
135
  "git": {
104
136
  "remote": "https://${WERCKER_GIT_DOMAIN}/${WERCKER_GIT_OWNER}/${WERCKER_GIT_REPOSITORY}.git",
105
137
  "revision": "${WERCKER_GIT_COMMIT}",
@@ -0,0 +1,41 @@
1
+ module Cucumber
2
+ module CreateMeta
3
+ module VariableExpression
4
+ def evaluate(expression, env)
5
+ return nil if expression.nil?
6
+ begin
7
+ expression.gsub(/\${(.*?)(?:(?<!\\)\/(.*)\/(.*))?}/) do
8
+ variable = $1
9
+ pattern = $2
10
+ replacement = $3
11
+
12
+ value = get_value(variable, env)
13
+ raise "Undefined variable #{variable}" if value.nil?
14
+ if pattern.nil?
15
+ value
16
+ else
17
+ regexp = Regexp.new(pattern.gsub('\/', '/'))
18
+ match = value.match(regexp)
19
+ raise "No match for variable #{variable}" if match.nil?
20
+ match[1..-1].each_with_index do |group, i|
21
+ replacement = replacement.gsub("\\#{i+1}", group)
22
+ end
23
+ replacement
24
+ end
25
+ end
26
+ rescue
27
+ nil
28
+ end
29
+ end
30
+
31
+ def get_value(variable, env)
32
+ if variable.index('*')
33
+ env.each do |name, value|
34
+ return value if Regexp.new(variable.gsub('*', '.*')) =~ name
35
+ end
36
+ end
37
+ env[variable]
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,31 +1,33 @@
1
1
  require 'uri'
2
- require 'cucumber/messages'
3
2
  require 'sys/uname'
4
3
  require 'json'
4
+ require 'cucumber/messages'
5
+ require 'cucumber/create_meta/variable_expression'
5
6
 
6
7
  module Cucumber
7
8
  module CreateMeta
9
+ extend Cucumber::CreateMeta::VariableExpression
8
10
  CI_DICT = JSON.parse(IO.read(File.join(File.dirname(__FILE__), "ciDict.json")))
9
11
 
10
12
  def create_meta(tool_name, tool_version, env = ENV)
11
13
  Cucumber::Messages::Meta.new(
12
- protocol_version: Cucumber::Messages::VERSION,
13
- implementation: Cucumber::Messages::Meta::Product.new(
14
- name: tool_name,
15
- version: tool_version
16
- ),
17
- runtime: Cucumber::Messages::Meta::Product.new(
18
- name: RUBY_ENGINE,
19
- version: RUBY_VERSION
20
- ),
21
- os: Cucumber::Messages::Meta::Product.new(
22
- name: RbConfig::CONFIG['target_os'],
23
- version: Sys::Uname.uname.version
24
- ),
25
- cpu: Cucumber::Messages::Meta::Product.new(
26
- name: RbConfig::CONFIG['target_cpu']
27
- ),
28
- ci: detect_ci(env)
14
+ protocol_version: Cucumber::Messages::VERSION,
15
+ implementation: Cucumber::Messages::Product.new(
16
+ name: tool_name,
17
+ version: tool_version
18
+ ),
19
+ runtime: Cucumber::Messages::Product.new(
20
+ name: RUBY_ENGINE,
21
+ version: RUBY_VERSION
22
+ ),
23
+ os: Cucumber::Messages::Product.new(
24
+ name: RbConfig::CONFIG['target_os'],
25
+ version: Sys::Uname.uname.version
26
+ ),
27
+ cpu: Cucumber::Messages::Product.new(
28
+ name: RbConfig::CONFIG['target_cpu']
29
+ ),
30
+ ci: detect_ci(env)
29
31
  )
30
32
  end
31
33
 
@@ -41,46 +43,19 @@ module Cucumber
41
43
  url = evaluate(ci_system['url'], env)
42
44
  return nil if url.nil?
43
45
 
44
- Cucumber::Messages::Meta::CI.new(
45
- url: url,
46
- name: ci_name,
47
- git: Cucumber::Messages::Meta::CI::Git.new(
48
- remote: remove_userinfo_from_url(evaluate(ci_system['git']['remote'], env)),
49
- revision: evaluate(ci_system['git']['revision'], env),
50
- branch: evaluate(ci_system['git']['branch'], env),
51
- tag: evaluate(ci_system['git']['tag'], env),
52
- )
46
+ Cucumber::Messages::Ci.new(
47
+ url: url,
48
+ name: ci_name,
49
+ build_number: evaluate(ci_system['buildNumber'], env),
50
+ git: Cucumber::Messages::Git.new(
51
+ remote: remove_userinfo_from_url(evaluate(ci_system['git']['remote'], env)),
52
+ revision: evaluate(ci_system['git']['revision'], env),
53
+ branch: evaluate(ci_system['git']['branch'], env),
54
+ tag: evaluate(ci_system['git']['tag'], env),
55
+ )
53
56
  )
54
57
  end
55
58
 
56
- def evaluate(template, env)
57
- return nil if template.nil?
58
- begin
59
- template.gsub(/\${((refbranch|reftag)\s+)?([^\s}]+)(\s+\|\s+([^}]+))?}/) do
60
- func = $2
61
- variable = $3
62
- default_value = $5 == "" ? nil : $5
63
- value = env[variable] || default_value
64
-
65
- if func == 'refbranch'
66
- value = group1(value, /^refs\/heads\/(.*)/)
67
- elsif func == 'reftag'
68
- value = group1(value, /^refs\/tags\/(.*)/)
69
- end
70
- raise "Undefined variable: #{variable}" if value.nil?
71
- value
72
- end
73
- rescue
74
- nil
75
- end
76
- end
77
-
78
- def group1(value, regexp)
79
- m = value.match(regexp)
80
- raise "No match" if m.nil?
81
- m[1]
82
- end
83
-
84
59
  def remove_userinfo_from_url(value)
85
60
  return nil if value.nil?
86
61
  begin
@@ -92,6 +67,6 @@ module Cucumber
92
67
  end
93
68
  end
94
69
 
95
- module_function :create_meta, :detect_ci, :create_ci, :group1, :evaluate, :remove_userinfo_from_url
70
+ module_function :create_meta, :detect_ci, :create_ci, :remove_userinfo_from_url
96
71
  end
97
72
  end
@@ -1,8 +1,8 @@
1
1
  require 'cucumber/create_meta'
2
2
 
3
- describe 'createMeta' do
3
+ describe 'create_meta' do
4
4
  it 'generates a Meta message with platform information' do
5
- meta = Cucumber::CreateMeta.create_meta('cucumba-ruby', 'X.Y.Z')
5
+ meta = Cucumber::CreateMeta.create_meta('cucumba-ruby', 'X.Y.Z', [])
6
6
 
7
7
  expect(meta.protocol_version).to match(/\d+\.\d+\.\d+/)
8
8
  expect(meta.implementation.name).to eq('cucumba-ruby')
@@ -12,5 +12,25 @@ describe 'createMeta' do
12
12
  expect(meta.os.name).to match(/.+/)
13
13
  expect(meta.os.version).to match(/.+/)
14
14
  expect(meta.cpu.name).to match(/.+/)
15
+ expect(meta.ci).to be_nil
16
+ end
17
+
18
+ it 'generates a Meta message with CI information' do
19
+ env = {
20
+ 'BUILD_URL' => 'url of the build',
21
+ 'BUILD_NUMBER' => '42',
22
+ 'GIT_URL' => 'url of git',
23
+ 'GIT_COMMIT' => 'git_sha1',
24
+ 'GIT_LOCAL_BRANCH' => 'main'
25
+ }
26
+
27
+ meta = Cucumber::CreateMeta.create_meta('cucumba-ruby', 'X.Y.Z', env)
28
+
29
+ expect(meta.ci).not_to be_nil
30
+ expect(meta.ci.url).to eq env['BUILD_URL']
31
+ expect(meta.ci.build_number).to eq env['BUILD_NUMBER']
32
+ expect(meta.ci.git.remote).to eq env['GIT_URL']
33
+ expect(meta.ci.git.revision).to eq env['GIT_COMMIT']
34
+ expect(meta.ci.git.branch).to eq env['GIT_LOCAL_BRANCH']
15
35
  end
16
36
  end
@@ -0,0 +1,38 @@
1
+ require 'cucumber/create_meta'
2
+
3
+ describe 'Cucumber::CreateMeta::VariableExpression.evaluate' do
4
+ include Cucumber::CreateMeta::VariableExpression
5
+
6
+ it 'returns nil when a variable is undefined' do
7
+ expression = "hello-${SOME_VAR}";
8
+ result = evaluate(expression, {});
9
+ expect(result).to eq(nil)
10
+ end
11
+
12
+ it 'gets a value without replacement' do
13
+ expression = "${SOME_VAR}";
14
+ result = evaluate(expression, {'SOME_VAR' => 'some_value'});
15
+ expect(result).to eq('some_value')
16
+ end
17
+
18
+ it 'captures a group' do
19
+ expression = "${SOME_REF/refs\/heads\/(.*)/\\1}";
20
+ result = evaluate(expression, {'SOME_REF' => 'refs/heads/main'});
21
+ expect(result).to eq('main')
22
+ end
23
+
24
+ it 'works with star wildcard in var' do
25
+ expression = "${GO_SCM_*_PR_BRANCH/.*:(.*)/\\1}";
26
+ result = evaluate(expression, {'GO_SCM_MY_MATERIAL_PR_BRANCH' => 'ashwankthkumar:feature-1'});
27
+ expect(result).to eq('feature-1')
28
+ end
29
+
30
+ it 'evaluates a complex expression' do
31
+ expression = "hello-${VAR1}-${VAR2/(.*) (.*)/\\2-\\1}-world";
32
+ result = evaluate(expression, {
33
+ 'VAR1' => 'amazing',
34
+ 'VAR2' => 'gorgeous beautiful'
35
+ })
36
+ expect(result).to eq('hello-amazing-beautiful-gorgeous-world')
37
+ end
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber-create-meta
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 6.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Prêtre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-29 00:00:00.000000000 Z
11
+ date: 2021-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber-messages
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '15.0'
19
+ version: '17.1'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 15.0.0
22
+ version: 17.1.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '15.0'
29
+ version: '17.1'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 15.0.0
32
+ version: 17.1.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: sys-uname
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: '13.0'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 13.0.3
62
+ version: 13.0.6
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -69,7 +69,7 @@ dependencies:
69
69
  version: '13.0'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 13.0.3
72
+ version: 13.0.6
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: rspec
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -99,18 +99,20 @@ files:
99
99
  - LICENSE
100
100
  - lib/cucumber/ciDict.json
101
101
  - lib/cucumber/create_meta.rb
102
+ - lib/cucumber/create_meta/variable_expression.rb
102
103
  - spec/capture_warnings.rb
103
104
  - spec/cucumber/create_meta_spec.rb
105
+ - spec/cucumber/evaluate_variable_expression_spec.rb
104
106
  - spec/cucumber/remove_userinfo_from_url_spec.rb
105
107
  homepage: https://github.com/cucumber/create-meta-ruby
106
108
  licenses:
107
109
  - MIT
108
110
  metadata:
109
111
  bug_tracker_uri: https://github.com/cucumber/cucumber/issues
110
- changelog_uri: https://github.com/cucumber/cucumber/blob/master/gherkin/CHANGELOG.md
112
+ changelog_uri: https://github.com/cucumber/common/blob/main/gherkin/CHANGELOG.md
111
113
  documentation_uri: https://cucumber.io/docs/gherkin/
112
114
  mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
113
- source_code_uri: https://github.com/cucumber/cucumber/blob/master/gherkin/ruby
115
+ source_code_uri: https://github.com/cucumber/common/blob/main/gherkin/ruby
114
116
  post_install_message:
115
117
  rdoc_options:
116
118
  - "--charset=UTF-8"
@@ -130,8 +132,9 @@ requirements: []
130
132
  rubygems_version: 3.1.2
131
133
  signing_key:
132
134
  specification_version: 4
133
- summary: cucumber-create-meta-4.0.0
135
+ summary: cucumber-create-meta-6.0.2
134
136
  test_files:
135
137
  - spec/capture_warnings.rb
136
- - spec/cucumber/create_meta_spec.rb
137
138
  - spec/cucumber/remove_userinfo_from_url_spec.rb
139
+ - spec/cucumber/evaluate_variable_expression_spec.rb
140
+ - spec/cucumber/create_meta_spec.rb