cookbook-release 1.4.0 → 1.4.6

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: 57e2bcc2990d45377c96a8b34b77103cff548f5ca7eaed951e946f0d9303cfa3
4
- data.tar.gz: 89ddf7b79d5999cfd47d2ad6350d80801e3b6de8b2d048a8ee78516c8945585b
3
+ metadata.gz: f7437fec8e18c6f3d3010cabcc1560d2f50a21fa9f3d3721fea2e11fbfa41245
4
+ data.tar.gz: 528a77af3764cabb0ea07cb41b1d21c52e2ff57a306ce4924d129ee657da5522
5
5
  SHA512:
6
- metadata.gz: 059852351bb66fd6369180260c30e59764252cd78847c40190eaca36e97375dea5fbb97e332a7518f8d57c24e7d31f41ec410a7a6d7b79ee01741dc0080f9cf2
7
- data.tar.gz: c9060e027e88bce6a27fdf280fb3684360e64e94ddd4d6b7292f5e2b3e34cc40b1952242944f5d069db9493cb1888d5343bd8520d91208069db5935451cd341e
6
+ metadata.gz: 14d6f53eab37b49ee1b5336e23f1f05fe4145b4f8b28610645d5418a9e8b18617081060fb5c96bc79ccc2136a2a890c1f0068403e065e9136ea1ea6a0d10ca92
7
+ data.tar.gz: 5a5b26e7d8035f611a5a79dc03523d81ff8d9b87f97728ebcb9de3d3e9846d8b5b639c4c90b368355da887f42be209b3c934e1fccc9ebe2fcef1921def5d57f0
@@ -1,14 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.4.0
4
- before_install:
5
- - rvm @global do gem uninstall bundler -a -x
6
- - rvm @global do gem install bundler -v 1.15.4
3
+ - 2.4.0
7
4
  deploy:
8
5
  provider: rubygems
9
6
  api_key:
10
- secure: nrEzm2dqWjyaa5ewApSonF+2D+y3PYwt9xaQC04d1NtbhQYyzX6wti3oatpMJI2gkcuuLjKrNHH/aLbKOGv7+Jj5BUJGOLixxhRdJyLWde/6cKCYVgIYPxeUtSJrRgyHAS2o8TDPjhWCT5oRwSkmhd+5D2JKjVqAycetbIzKWWvqScO09z0bF66bbKSfO1s44JwKjnUUW7W9tzrPvMPouBBoFtQ+dQVgxYLajgmjprVvIwzlHxgq/zP8YwL8i7vyRJFiQXyveSxZfBagN2qrUM72HWBPLLW4AeAdLDHYWon88GDU0p+cy2mVeSe67fBPVDopAEGij7MNJCBWV1/SRRKQcEb2U823+1GSB13OvaOGTn9rYsJP5zLKu77ATbHPi22nMfWOAzdEJJ+uFu9XW4nwUO/j79zPC1mEsRZDJlDrmTc4XZQJRKkCUjSl/J53vbdy4JQfos8B2V15tzx1baswQVPZuNiwuP4dOupI34FohJSVXQrsOoWVWVEX5Tfod6s3kpivW6lzwM68I2qXFa/4H8RPU2m0eVpfQslOO8TaGnbodudbQ1LSi/d5W6XWrMVqWGH910JG3jlJgHn5J7yQlI4VqnOpCjGsx/5xincuJZ7hBhcu5q5zcAGem7TrYSNkrx6neBYKmpZBHOWalIGw8wI9uViEsGQ6fayFee8=
7
+ secure: ylfB0GIaZxPfZ6/dSJIPujfSt3vxqVFg16lqTBq/2AAZ0qwKTZi9qeM/QZDLMX28vCXmTsYxHGepmyvv0PvJaKvy7E6YBzIKz1Y1vsEZFeAFrgIQq9cDvc4wIX2eFjI7N1ChyaRgi+YYK4BSVfKjYqGBfXk5Wyh7uqNEuWE7FzABV+RxXoHcNi+AhYkCX3NF80qNukXRtiB7XTQj6CP4Wd+Dm25iOUwx8/zNMce8Z8V3j2ysvR4Vtm/soDsr/+Z+27wIdP0VqwElV1FxtR9km8MIJhmzSsnzcvgqJpRmMvO6HLZFzwqnLBzCoPYJqm3K+uQSSfll5LbaNtixlBzIusgtGgm1UjQy1YDGkPexJd5K5CuC/LW78Y7Zrl3CeT34RDlICoztEjhJxFry3EvFxPT03lVQx5z5Fc55/u0hy3mBCiHbxHxAPJLMOtehfv35bzOS7Jv3+otBm/8jn9dXO2pJJdwxL9W2wrzljWkly4yemwceMvtMYf+xnf1zdTnMYoqkYGGl0KutbFL69w78w7BwTFQIhcJOO+g27C6V8vHtqU0U5JOgE/QNg3yWhzhQjgCpzQhmuO+Bcs3Jq2T/OcqTfwM6gufNe+Gq2TdEfeH5Y0WcRtTKJBVVQ4XWFtgONE1C1hNBFLyh7GNZDQQVYBT3c/MXeV5Q++rVJYOdSrw=
11
8
  gem: cookbook-release
12
9
  on:
13
10
  tags: true
14
11
  repo: criteo/cookbook-release
12
+ skip_cleanup: 'true'
data/README.md CHANGED
@@ -77,4 +77,4 @@ require 'cookbook-release'
77
77
  CookbookRelease::Rake::RepoTask.new
78
78
  ```
79
79
 
80
- will allow to create tasks to generate html changelog between HEAD and master branch. It aims to make some changes more visible such as [Risky] tag (or any tag used for major changes).
80
+ will allow to create tasks to generate html changelog between HEAD and master branch. It aims to make some changes more visible such as [Risky] tag (or any tag used for major changes). You may add a `sub_dir` parameter to restrict the scope of the changes to a sub-directory of the git root.
@@ -6,7 +6,7 @@ require 'English'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'cookbook-release'
9
- spec.version = '1.4.0'
9
+ spec.version = '1.4.6'
10
10
  spec.authors = ['Grégoire Seux']
11
11
  spec.email = 'g.seux@criteo.com'
12
12
  spec.summary = 'Provide primitives (and rake tasks) to release a cookbook'
@@ -22,8 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency 'semantic'
23
23
  spec.add_dependency 'highline'
24
24
  spec.add_dependency 'mixlib-shellout'
25
- spec.add_dependency 'chef'
25
+ spec.add_dependency 'chef', '>= 12.18.31'
26
26
  spec.add_dependency 'git-ng' # see https://github.com/schacon/ruby-git/issues/307
27
+ spec.add_dependency 'unicode-emoji'
27
28
 
28
29
 
29
30
  spec.add_development_dependency 'rspec'
@@ -13,20 +13,21 @@ module CookbookRelease
13
13
  class RepoTask < ::Rake::TaskLib
14
14
  def initialize(opts = {}, &html_block)
15
15
  desc 'Display raw changelog between branches'
16
- task 'changelog:raw' do
17
- git = GitUtilities.new
16
+ task 'changelog:raw', [:sub_dir] do |_, args|
17
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
18
18
  puts Changelog.new(git, opts).raw
19
19
  end
20
20
 
21
21
  desc 'Display raw changelog between branches with risky commits on top'
22
- task 'changelog:raw_priority' do
23
- git = GitUtilities.new
22
+ task 'changelog:raw_priority', [:sub_dir] do |_, args|
23
+ git = GitUtilities.new(args)
24
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
24
25
  puts Changelog.new(git, opts).raw_priority
25
26
  end
26
27
 
27
28
  desc 'Display html changelog between branches'
28
- task 'changelog:html' do
29
- git = GitUtilities.new
29
+ task 'changelog:html', [:sub_dir] do |_, args|
30
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
30
31
  html = Changelog.new(git, opts).html
31
32
  if block_given?
32
33
  html = html_block.call(html)
@@ -35,8 +36,8 @@ module CookbookRelease
35
36
  end
36
37
 
37
38
  desc 'Display html changelog between branches with risky commits on top'
38
- task 'changelog:html_priority' do
39
- git = GitUtilities.new
39
+ task 'changelog:html_priority', [:sub_dir] do |_, args|
40
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
40
41
  html = Changelog.new(git, opts).html_priority
41
42
  if block_given?
42
43
  html = html_block.call(html)
@@ -45,16 +46,22 @@ module CookbookRelease
45
46
  end
46
47
 
47
48
  desc 'Display markdown changelog between branches'
48
- task 'changelog:markdown' do
49
- git = GitUtilities.new
49
+ task 'changelog:markdown', [:sub_dir] do |_, args|
50
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
50
51
  puts Changelog.new(git, opts).markdown
51
52
  end
52
53
 
53
54
  desc 'Display markdown changelog between branches with risky commits on top'
54
- task 'changelog:markdown_priority' do
55
- git = GitUtilities.new
55
+ task 'changelog:markdown_priority', [:sub_dir] do |_, args|
56
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
56
57
  puts Changelog.new(git, opts).markdown_priority
57
58
  end
59
+
60
+ desc 'Display markdown changelog between branches with risky commits on top and non-node-only changes separated'
61
+ task 'changelog:markdown_priority_nodes', [:sub_dir] do |_, args|
62
+ git = GitUtilities.new('sub_dir': args['sub_dir'])
63
+ puts Changelog.new(git, opts).markdown_priority_nodes
64
+ end
58
65
  end
59
66
  end
60
67
 
@@ -4,11 +4,14 @@ module CookbookRelease
4
4
  DEFAULT_OPTS = {
5
5
  expand_major: true,
6
6
  expand_risky: true,
7
+ separate_nodes: true,
7
8
  short_sha: true
8
9
  }
9
10
 
10
11
  RISKY = 'RISKY/BREAKING (details below):'
11
12
  NO_RISKY = 'NO RISKY/BREAKING COMMITS. READ FULL CHANGELOG.'
13
+ NON_NODES_ONLY = 'Non-risky/major, Non-node-only commits'
14
+ NODES_ONLY = 'Commits impacting only nodes'
12
15
  FULL = 'Full changelog:'
13
16
  DETAILS = 'Details of risky commits:'
14
17
 
@@ -42,6 +45,7 @@ module CookbookRelease
42
45
  result << changelog.map do |c|
43
46
  full_body ||= @opts[:expand_major] && c.major?
44
47
  full_body ||= @opts[:expand_risky] && c.risky?
48
+ full_body ||= @opts[:separate_nodes] && c.nodes_only?
45
49
  full_body ||= @opts[:expand_commit] && (c[:subject] =~ @opts[:expand_commit] || c[:body] =~ @opts[:expand_commit])
46
50
  c.to_s_html(full_body)
47
51
  end.map { |c| " <p>#{c}</p>" }
@@ -81,6 +85,8 @@ module CookbookRelease
81
85
  changelog.map do |c|
82
86
  full_body ||= @opts[:expand_major] && c.major?
83
87
  full_body ||= @opts[:expand_risky] && c.risky?
88
+ full_body ||= @opts[:separate_nodes] && c.nodes_only?
89
+ full_body ||= @opts[:expand_commit] && (c[:subject] =~ @opts[:expand_commit] || c[:body] =~ @opts[:expand_commit])
84
90
  full_body ||= @opts[:expand_commit] && (c[:subject] =~ @opts[:expand_commit] || c[:body] =~ @opts[:expand_commit])
85
91
  c.to_s_markdown(full_body)
86
92
  end.join("\n")
@@ -103,8 +109,55 @@ module CookbookRelease
103
109
  result
104
110
  end
105
111
 
112
+ def markdown_priority_nodes
113
+ result = []
114
+ result << append_risky(changelog)
115
+ result << append_by_impact(changelog)
116
+ result << append_risky_details(changelog)
117
+ result
118
+ end
119
+
106
120
  private
107
121
 
122
+ # @param changelog [Array<Commit>]
123
+ # @return [String] a string describing the changelog
124
+ def append_by_impact(changelog)
125
+ not_nodes_only_commits = changelog.reject { |c| c.nodes_only? || c.risky? || c.major? }
126
+ nodes_only_commits = changelog.select(&:nodes_only?)
127
+ output = []
128
+ if not_nodes_only_commits.any?
129
+ txt = not_nodes_only_commits.map { |c| c.to_s_markdown(false) }.join("\n")
130
+ output << "*#{NON_NODES_ONLY}*\n#{txt}\n"
131
+ end
132
+ if nodes_only_commits.any?
133
+ txt = nodes_only_commits.map { |c| c.to_s_markdown(false) }.join("\n")
134
+ output << "*#{NODES_ONLY}*\n#{txt}\n"
135
+ end
136
+ output.join
137
+ end
138
+
139
+ # @param changelog [Array<Commit>]
140
+ # @return [String] a string describing the changelog
141
+ def append_risky_details(changelog)
142
+ risky_commits = changelog.select { |c| c.risky? || c.major? }
143
+ if risky_commits.any?
144
+ "\n#{DETAILS}\n" + risky_commits.map { |c| c.to_s_markdown(true) }.join("\n")
145
+ else
146
+ ''
147
+ end
148
+ end
149
+
150
+ # @param changelog [Array<Commit>]
151
+ # @return [String] a string describing the changelog
152
+ def append_risky(changelog)
153
+ risky_commits = changelog.select { |c| c.risky? || c.major? }
154
+ if risky_commits.any?
155
+ "*#{RISKY}*\n" << risky_commits.map { |c| c.to_s_markdown(false) }.join("\n") << "\n"
156
+ else
157
+ "*#{NO_RISKY}*\n\n"
158
+ end
159
+ end
160
+
108
161
  def changelog
109
162
  ref = ENV['RELEASE_BRANCH'] || 'origin/master'
110
163
  @git.compute_changelog(ref, @opts[:short_sha])
@@ -1,3 +1,6 @@
1
+ require 'forwardable'
2
+ require 'unicode/emoji'
3
+
1
4
  module CookbookRelease
2
5
  class Commit
3
6
  extend Forwardable
@@ -34,6 +37,10 @@ module CookbookRelease
34
37
  !!(self[:subject] =~ /\[risky\]/i)
35
38
  end
36
39
 
40
+ def nodes_only?
41
+ self[:nodes_only]
42
+ end
43
+
37
44
  def color
38
45
  case true
39
46
  when major?
@@ -75,11 +82,20 @@ module CookbookRelease
75
82
  else
76
83
  result << "_#{self[:author]} <#{self[:email]}>_"
77
84
  end
78
- result << " `#{self[:subject]}`"
85
+ result << ' '
86
+ result << backtick_string(self[:subject])
79
87
  result << "\n```\n#{strip_change_id(self[:body])}```" if full && self[:body]
80
88
  result
81
89
  end
82
90
 
91
+ def backtick_string(input)
92
+ s = input.gsub(/( )?(#{Unicode::Emoji::REGEX})( )?/, '` \2 `')
93
+ .gsub(/( )?``( )?/, '')
94
+ s += '`' unless s =~ /`$/
95
+ s = '`' + s unless s =~ /^`/
96
+ s
97
+ end
98
+
83
99
  private
84
100
 
85
101
  def strip_change_id(body)
@@ -12,6 +12,7 @@ module CookbookRelease
12
12
  def initialize(options={})
13
13
  @tag_prefix = options[:tag_prefix] || ''
14
14
  cwd = options[:cwd] || Dir.pwd
15
+ @sub_dir = options[:sub_dir] # if nil takes the cwd
15
16
  @shellout_opts = {
16
17
  cwd: cwd
17
18
  }
@@ -63,7 +64,7 @@ module CookbookRelease
63
64
  end
64
65
 
65
66
  def compute_changelog(since, short_sha = true)
66
- @g.log(500).between(since, 'HEAD').map do |commit|
67
+ @g.log(500).object(@sub_dir).between(since, 'HEAD').map do |commit|
67
68
  message = commit.message.lines.map(&:chomp).compact.delete_if(&:empty?)
68
69
  Commit.new(
69
70
  author: commit.author.name,
@@ -71,7 +72,10 @@ module CookbookRelease
71
72
  subject: message.delete_at(0),
72
73
  hash: short_sha ? commit.sha[0,7] : commit.sha,
73
74
  body: message.empty? ? nil : message.join("\n"),
74
- is_merge_commit: commit.parents.length > 1
75
+ is_merge_commit: commit.parents.length > 1,
76
+ nodes_only: @g.diff(commit.sha, "#{commit.sha}~1").name_status.reject do |path, change_type|
77
+ path.include?('nodes/') && ['A', 'D'].include?(change_type) # basic node additions or deletions only
78
+ end.count.zero?
75
79
  )
76
80
  end.reject { |commit| commit[:is_merge_commit] }
77
81
  end
@@ -55,5 +55,40 @@ describe CookbookRelease::Changelog do
55
55
  expect(changelog.markdown).to start_with('*654321* @j.doe `[Risky] hello`')
56
56
  end
57
57
  end
58
+ context 'Separates risky and non-risky+non-nodes' do
59
+ let(:commits) do
60
+ [
61
+ CookbookRelease::Commit.new(
62
+ hash: '654321',
63
+ subject: 'hello',
64
+ author: 'John Doe',
65
+ email: 'j.doe@nobody.com',
66
+ body: 'New Men Just Want to Watch the World Burn',
67
+ nodes_only: false),
68
+ CookbookRelease::Commit.new(
69
+ hash: '654321',
70
+ subject: '[Risky] hello',
71
+ author: 'John Doe',
72
+ email: 'j.doe@nobody.com',
73
+ body: 'Some Men Just Want to Watch the World Turn',
74
+ nodes_only: true),
75
+ CookbookRelease::Commit.new(
76
+ hash: '654321',
77
+ subject: 'hello only nodes',
78
+ author: 'John Doe',
79
+ email: 'j.doe@nobody.com',
80
+ body: 'Old Men Just Want to Watch the World Learn',
81
+ nodes_only: true)
82
+ ]
83
+ end
84
+
85
+ it 'expands the body with non-risky+non-nodes' do
86
+ expect(git).to receive(:compute_changelog).and_return(commits).at_least(:once)
87
+ changelog = CookbookRelease::Changelog.new(git, expand_risky: true, nodes_only: true)
88
+ expect(changelog.markdown_priority_nodes.join('')).to include(
89
+ "\n*Non-risky/major, Non-node-only commits*\n*654321* _John Doe <j.doe@nobody.com>_ `hello`\n*Commits impacting only nodes"
90
+ )
91
+ end
92
+ end
58
93
  end
59
94
  end
@@ -23,4 +23,16 @@ describe CookbookRelease::Commit do
23
23
  expect(minor_change) .not_to be_patch
24
24
  end
25
25
  end
26
+
27
+ describe '.to_s_markdown' do
28
+ it 'surrounds subject with backticks' do
29
+ commit = CookbookRelease::Commit.new(subject: 'This is a fix', hash: 'abcdef', author: 'Linus', email: 'linus@linux.org')
30
+ expect(commit.to_s_markdown(false)).to match(/`#{commit[:subject]}`/)
31
+ end
32
+
33
+ it 'properly handle emojis' do
34
+ commit = CookbookRelease::Commit.new(subject: 'This is a fix 🔧 and I love 🪐🚀', hash: 'abcdef', author: 'Linus', email: 'linus@linux.org')
35
+ expect(commit.to_s_markdown(false)).to match(/`This is a fix` 🔧 `and I love` 🪐🚀/)
36
+ end
37
+ end
26
38
  end
@@ -123,16 +123,35 @@ git tag 12.34.56
123
123
  cmd.run_command
124
124
  cmd.error!
125
125
  end
126
-
127
126
  changelog = git.compute_changelog('1.0.0')
128
127
  expect(changelog.size).to eq(3)
129
128
  expect(changelog.map {|c| c[:subject]}).to contain_exactly('A commit', 'Another commit', 'A third one')
130
129
  end
131
130
 
132
- it 'parse correctly commits' do
131
+ it 'shows only sub_dir commits' do
133
132
  cmds = <<-EOH
134
133
  git commit --allow-empty -m "subject" -m "body" -m "line2"
135
134
  git commit --allow-empty -m "without body"
135
+ mkdir -p subbie
136
+ echo "hello" > subbie/there
137
+ git add subbie/there
138
+ git commit -m "hello there"
139
+ EOH
140
+ sub_git = CookbookRelease::GitUtilities.new(sub_dir: 'subbie')
141
+ cmds.split("\n").each do |cmd|
142
+ cmd = Mixlib::ShellOut.new(cmd)
143
+ cmd.run_command
144
+ cmd.error!
145
+ end
146
+
147
+ changelog = sub_git.compute_changelog('1.0.0')
148
+ expect(changelog.size).to eq(1)
149
+ end
150
+
151
+ it 'parse correctly commits' do
152
+ cmds = <<-EOH
153
+ git commit --allow-empty --no-verify -m "subject" -m "body" -m "line2"
154
+ git commit --allow-empty --no-verify -m "without body"
136
155
  EOH
137
156
  cmds.split("\n").each do |cmd|
138
157
  cmd = Mixlib::ShellOut.new(cmd)
@@ -164,5 +183,32 @@ git tag 12.34.56
164
183
  changelog = git.compute_changelog('HEAD~1', false)
165
184
  expect(changelog[0][:hash].size).to eq(40)
166
185
  end
186
+
187
+ it 'detects node-only commits' do
188
+ cmds = <<-EOH
189
+ mkdir -p nodes/preprod
190
+ echo "hello first" > nodes/preprod/tata.rb
191
+ git add nodes/preprod/tata.rb
192
+ git commit -m "hello there"
193
+ echo "hello second" > nodes/preprod/tata.rb
194
+ git add nodes/preprod/tata.rb
195
+ git commit -m "hello there modify"
196
+ mkdir -p toto
197
+ echo "hello" > toto/titi.rb
198
+ git add toto/titi.rb
199
+ git commit -m "subject" -m "body" -m "line2"
200
+ EOH
201
+ cmds.split("\n").each do |cmd|
202
+ cmd = Mixlib::ShellOut.new(cmd)
203
+ cmd.run_command
204
+ cmd.error!
205
+ end
206
+
207
+ git = CookbookRelease::GitUtilities.new
208
+ changelog = git.compute_changelog('HEAD~3')
209
+ expect(changelog[0][:nodes_only]).to be false # Add a non-"nodes" file
210
+ expect(changelog[1][:nodes_only]).to be false # Modify a "nodes" file
211
+ expect(changelog[2][:nodes_only]).to be true # Add a "nodes" file
212
+ end
167
213
  end
168
214
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cookbook-release
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grégoire Seux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-02 00:00:00.000000000 Z
11
+ date: 2020-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semantic
@@ -54,6 +54,20 @@ dependencies:
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: chef
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 12.18.31
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 12.18.31
69
+ - !ruby/object:Gem::Dependency
70
+ name: git-ng
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -67,7 +81,7 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: git-ng
84
+ name: unicode-emoji
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -180,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
194
  - !ruby/object:Gem::Version
181
195
  version: '0'
182
196
  requirements: []
183
- rubyforge_project:
184
- rubygems_version: 2.7.0
197
+ rubygems_version: 3.0.8
185
198
  signing_key:
186
199
  specification_version: 4
187
200
  summary: Provide primitives (and rake tasks) to release a cookbook