supermarket_sync 0.1.0 → 0.2.0
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 +4 -4
- data/.github/workflows/ruby.yml +36 -0
- data/.gitlab-ci.yml +6 -6
- data/.ruby-version +1 -1
- data/CHANGELOG.md +16 -2
- data/README.md +25 -21
- data/lib/supermarket_sync/cli.rb +2 -1
- data/lib/supermarket_sync/config.rb +6 -3
- data/lib/supermarket_sync/notifier.rb +1 -1
- data/lib/supermarket_sync/sync.rb +12 -12
- data/lib/supermarket_sync/util.rb +1 -1
- data/lib/supermarket_sync/version.rb +1 -1
- data/supermarket_sync.gemspec +5 -4
- metadata +47 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e49526e10c933bd481d24189a6ea0d08a11cfe358fbeb4167911417d6b18e6d3
|
|
4
|
+
data.tar.gz: f144b0219e2d50c18bdfceb8633d3d84029d8e93bfac8ae94f8743ccc5cff03a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb5c4cef8a6e3c413029d6d1b90c9e589bc7ebf06b29c584387ba020e49d8689f5b203bf9bbe90bba565ced34b72c46aafb0fcbb29a66ec480be9ae215d7ef67
|
|
7
|
+
data.tar.gz: bb790be524aa65b246e8bd4747cdfbdd27ce55b34c5fa5b0a3d9e90571ed8f094f20d75eae9d9238fc59e2ed0626386ce77ba1286ac63438e956d31a15688370
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
on: [push]
|
|
3
|
+
jobs:
|
|
4
|
+
test:
|
|
5
|
+
name: Build
|
|
6
|
+
runs-on: ubuntu-latest
|
|
7
|
+
container: ruby:3.0
|
|
8
|
+
steps:
|
|
9
|
+
- name: Check out code
|
|
10
|
+
uses: actions/checkout@v2
|
|
11
|
+
with:
|
|
12
|
+
fetch-depth: 0
|
|
13
|
+
|
|
14
|
+
- name: Git Info
|
|
15
|
+
id: git
|
|
16
|
+
run: |
|
|
17
|
+
echo ::set-output name=SOURCE_NAME::${GITHUB_REF#refs/*/}
|
|
18
|
+
echo ::set-output name=SOURCE_BRANCH::${GITHUB_REF#refs/heads/}
|
|
19
|
+
echo ::set-output name=SOURCE_TAG::${GITHUB_REF#refs/tags/}
|
|
20
|
+
|
|
21
|
+
- name: Test
|
|
22
|
+
env:
|
|
23
|
+
ABC: '123'
|
|
24
|
+
run: |
|
|
25
|
+
gem install rubocop --no-document
|
|
26
|
+
rubocop
|
|
27
|
+
|
|
28
|
+
- name: Release
|
|
29
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
30
|
+
env:
|
|
31
|
+
ABC: '123'
|
|
32
|
+
run: |
|
|
33
|
+
gem install dpl --no-document
|
|
34
|
+
find . -type f -exec chmod o--w "{}" \;
|
|
35
|
+
|
|
36
|
+
- run: dpl --provider=rubygems --api-key=$RUBYGEMS_API_KEY --gem=supermarket_sync
|
data/.gitlab-ci.yml
CHANGED
|
@@ -4,8 +4,8 @@ before_script:
|
|
|
4
4
|
- gem install bundler --no-document
|
|
5
5
|
- bundle install --jobs $(nproc) --path vendor/bundle
|
|
6
6
|
|
|
7
|
-
test:Ruby
|
|
8
|
-
image: ruby:
|
|
7
|
+
test:Ruby 3.0:
|
|
8
|
+
image: ruby:3.0
|
|
9
9
|
cache:
|
|
10
10
|
paths:
|
|
11
11
|
- .bundle
|
|
@@ -13,12 +13,12 @@ test:Ruby 2.5:
|
|
|
13
13
|
script:
|
|
14
14
|
- bundle exec rubocop
|
|
15
15
|
tags:
|
|
16
|
-
-
|
|
16
|
+
- docker
|
|
17
17
|
except:
|
|
18
18
|
- tags
|
|
19
19
|
|
|
20
|
-
release:Ruby
|
|
21
|
-
image: ruby:
|
|
20
|
+
release:Ruby 3.0:
|
|
21
|
+
image: ruby:3.0
|
|
22
22
|
cache:
|
|
23
23
|
paths:
|
|
24
24
|
- .bundle
|
|
@@ -33,6 +33,6 @@ release:Ruby 2.5:
|
|
|
33
33
|
paths:
|
|
34
34
|
- ./*.gem
|
|
35
35
|
tags:
|
|
36
|
-
-
|
|
36
|
+
- docker
|
|
37
37
|
only:
|
|
38
38
|
- tags
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby-
|
|
1
|
+
ruby-3.0.2
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@ SupermarketSync Changelog
|
|
|
2
2
|
=========================
|
|
3
3
|
This file is used to list changes made in each version of the `supermarket_sync` gem.
|
|
4
4
|
|
|
5
|
-
v0.1.
|
|
5
|
+
v0.1.3 (2019-8-2)
|
|
6
6
|
-------------------
|
|
7
|
-
-
|
|
7
|
+
- Ignore cookbook category due to deprecation
|
|
8
|
+
|
|
9
|
+
v0.1.2 (2018-11-12)
|
|
10
|
+
-------------------
|
|
11
|
+
- Expose more configuration via environment variables
|
|
12
|
+
|
|
13
|
+
v0.1.1 (2018-11-12)
|
|
14
|
+
-------------------
|
|
15
|
+
- Fix for non-existing cookbooks
|
|
16
|
+
- Rename function to avoid potential namespace collision
|
|
17
|
+
- Add a read-only mode for testing purposes
|
|
18
|
+
|
|
19
|
+
v0.1.0 (2018-11-09)
|
|
20
|
+
-------------------
|
|
21
|
+
- Initial Release
|
data/README.md
CHANGED
|
@@ -2,25 +2,9 @@
|
|
|
2
2
|
* Ruby Gem to programmatically synchronize Chef Supermarkets
|
|
3
3
|
|
|
4
4
|
## Background
|
|
5
|
-
This gem was built from a need to synchronize a private, internal Chef Supermarket from the Public Chef Supermarket.
|
|
5
|
+
This gem was built from a need to synchronize approved cookbooks to a private, internal Chef Supermarket from the Public Chef Supermarket.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
Add this line to your application's Gemfile:
|
|
12
|
-
|
|
13
|
-
```ruby
|
|
14
|
-
gem 'supermarket_sync'
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
And then execute:
|
|
18
|
-
|
|
19
|
-
$ bundle
|
|
20
|
-
|
|
21
|
-
Or install it yourself as:
|
|
22
|
-
|
|
23
|
-
$ gem install supermarket_sync
|
|
7
|
+
It was also desired to send notifications upon changes and deprecations.
|
|
24
8
|
|
|
25
9
|
## Usage
|
|
26
10
|
|
|
@@ -30,15 +14,21 @@ Usage: supermarket_sync (options)
|
|
|
30
14
|
--cookbooks-json CONFIG List of cookbooks to synchronize
|
|
31
15
|
```
|
|
32
16
|
|
|
33
|
-
|
|
17
|
+
* Supermarkets can be configured individually via the configuration file.
|
|
34
18
|
|
|
35
|
-
|
|
19
|
+
* If left unspecified, global Supermarket parameters can be passed in via environment variables.
|
|
36
20
|
|
|
37
21
|
```
|
|
22
|
+
# Set Supermarket Globals
|
|
38
23
|
export SM_USER='supermarket_user'
|
|
39
24
|
export SM_KEY='/path/to/my/key.pem'
|
|
25
|
+
|
|
26
|
+
# Sync the Supermarkets
|
|
27
|
+
supermarket_sync -c config.json --cookbooks-json cookbooks.json
|
|
40
28
|
```
|
|
41
29
|
|
|
30
|
+
* Slack notifications are optional and can be configured via notification hash in `config.json`.
|
|
31
|
+
|
|
42
32
|
#### Configuration Samples
|
|
43
33
|
|
|
44
34
|
`config.json`
|
|
@@ -77,7 +67,21 @@ export SM_KEY='/path/to/my/key.pem'
|
|
|
77
67
|
}
|
|
78
68
|
```
|
|
79
69
|
|
|
80
|
-
|
|
70
|
+
## Installation
|
|
71
|
+
|
|
72
|
+
Add this line to your application's Gemfile:
|
|
73
|
+
|
|
74
|
+
```ruby
|
|
75
|
+
gem 'supermarket_sync'
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
And then execute:
|
|
79
|
+
|
|
80
|
+
$ bundle
|
|
81
|
+
|
|
82
|
+
Or install it yourself as:
|
|
83
|
+
|
|
84
|
+
$ gem install supermarket_sync
|
|
81
85
|
|
|
82
86
|
|
|
83
87
|
## Development
|
data/lib/supermarket_sync/cli.rb
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
# The MIT License (MIT)
|
|
7
7
|
#
|
|
8
|
-
# Copyright::
|
|
8
|
+
# Copyright:: 2021, Brian Dwyer - Broadridge Financial Solutions
|
|
9
9
|
#
|
|
10
10
|
|
|
11
11
|
require 'mixlib/cli'
|
|
@@ -60,6 +60,7 @@ module SupermarketSync
|
|
|
60
60
|
cfg.notification = config[:notification]
|
|
61
61
|
cfg.supermarkets = config[:supermarkets]
|
|
62
62
|
cfg.source = config[:source]
|
|
63
|
+
cfg.read_only = config[:read_only]
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
# => Start the Sync
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
# The MIT License (MIT)
|
|
7
7
|
#
|
|
8
|
-
# Copyright::
|
|
8
|
+
# Copyright:: 2021, Brian Dwyer - Broadridge Financial Solutions
|
|
9
9
|
#
|
|
10
10
|
|
|
11
11
|
require 'supermarket_sync/helpers/configuration'
|
|
@@ -25,10 +25,10 @@ module SupermarketSync
|
|
|
25
25
|
define_setting :author, 'Brian Dwyer - Broadridge Financial Services'
|
|
26
26
|
|
|
27
27
|
# => Config File
|
|
28
|
-
define_setting :config_file, File.join(root, 'config', 'config.json')
|
|
28
|
+
define_setting :config_file, ENV['SM_SYNC_CONFIG'] || File.join(root, 'config', 'config.json')
|
|
29
29
|
|
|
30
30
|
# => Cookbooks File
|
|
31
|
-
define_setting :cookbooks_file, File.join(root, 'config', 'cookbooks.json')
|
|
31
|
+
define_setting :cookbooks_file, ENV['SM_SYNC_COOKBOOKS'] || File.join(root, 'config', 'cookbooks.json')
|
|
32
32
|
|
|
33
33
|
# => Supermarket Configuration
|
|
34
34
|
define_setting :supermarkets, {}
|
|
@@ -44,6 +44,9 @@ module SupermarketSync
|
|
|
44
44
|
user: ENV['SM_USER'],
|
|
45
45
|
key: ENV['SM_KEY']
|
|
46
46
|
|
|
47
|
+
# => Read-Only Mode
|
|
48
|
+
define_setting :read_only, ENV['SM_SYNC_READONLY']
|
|
49
|
+
|
|
47
50
|
#
|
|
48
51
|
# Facilitate Dynamic Addition of Configuration Values
|
|
49
52
|
#
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
#
|
|
6
6
|
# The MIT License (MIT)
|
|
7
7
|
#
|
|
8
|
-
# Copyright::
|
|
8
|
+
# Copyright:: 2021, Brian Dwyer - Broadridge Financial Solutions
|
|
9
9
|
#
|
|
10
10
|
|
|
11
11
|
require 'chef/http/json_input'
|
|
12
12
|
require 'chef/http/json_output'
|
|
13
13
|
require 'chef/http/remote_request_id'
|
|
14
14
|
require 'chef/http/simple_json'
|
|
15
|
-
require 'chef/cookbook_site_streaming_uploader'
|
|
15
|
+
require 'chef/knife/core/cookbook_site_streaming_uploader'
|
|
16
16
|
require 'mixlib/cli'
|
|
17
17
|
require 'supermarket_sync/notifier'
|
|
18
18
|
|
|
@@ -38,7 +38,7 @@ module SupermarketSync
|
|
|
38
38
|
puts "Checking #{cookbook}"
|
|
39
39
|
# => Grab Source Metadata
|
|
40
40
|
source_meta = begin
|
|
41
|
-
|
|
41
|
+
src.get("/api/v1/cookbooks/#{cookbook}")
|
|
42
42
|
rescue Net::HTTPServerException => e
|
|
43
43
|
raise e unless e.response.code == '404'
|
|
44
44
|
puts 'Cookbook not available on Source Supermarket'
|
|
@@ -53,7 +53,7 @@ module SupermarketSync
|
|
|
53
53
|
rescue Net::HTTPServerException => e
|
|
54
54
|
raise e unless e.response.code == '404'
|
|
55
55
|
# => Cookbook not found -- Initial Upload
|
|
56
|
-
{
|
|
56
|
+
{ 'latest_version' => '0.0.0' }
|
|
57
57
|
end
|
|
58
58
|
# => Determine Current Version
|
|
59
59
|
current = ::Gem::Version.new(::File.basename(dest_meta['latest_version']))
|
|
@@ -64,10 +64,10 @@ module SupermarketSync
|
|
|
64
64
|
puts "Destination: #{current}"
|
|
65
65
|
|
|
66
66
|
# => Retrieve the Cookbook
|
|
67
|
-
tgz =
|
|
67
|
+
tgz = src.streaming_request("/api/v1/cookbooks/#{cookbook}/versions/#{latest}/download")
|
|
68
68
|
|
|
69
69
|
# => Upload the Cookbook
|
|
70
|
-
upload(
|
|
70
|
+
upload('other', tgz) unless Config.read_only
|
|
71
71
|
|
|
72
72
|
# => Remove the Tempfile
|
|
73
73
|
begin
|
|
@@ -112,18 +112,18 @@ module SupermarketSync
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
dest
|
|
115
|
+
src context[:source] || Config.source
|
|
116
|
+
dest context[:url]
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
#
|
|
120
120
|
# => API Clients
|
|
121
121
|
#
|
|
122
|
-
|
|
123
|
-
url ||= @
|
|
122
|
+
def src(url = nil)
|
|
123
|
+
url ||= @src&.url
|
|
124
124
|
raise ArgumentError, 'No URL supplied!' unless url
|
|
125
|
-
return @
|
|
126
|
-
@
|
|
125
|
+
return @src if @src&.url == url
|
|
126
|
+
@src = Chef::HTTP::SimpleJSON.new(url)
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
private def dest(url = nil)
|
data/supermarket_sync.gemspec
CHANGED
|
@@ -28,12 +28,13 @@ Gem::Specification.new do |spec|
|
|
|
28
28
|
spec.require_paths = ['lib']
|
|
29
29
|
|
|
30
30
|
# => Dependencies
|
|
31
|
-
spec.add_runtime_dependency '
|
|
32
|
-
spec.add_runtime_dependency '
|
|
31
|
+
spec.add_runtime_dependency 'knife', '>= 17.1', '< 18.0'
|
|
32
|
+
spec.add_runtime_dependency 'mixlib-cli', '>= 2.1.1', '< 3.0'
|
|
33
|
+
spec.add_runtime_dependency 'slack-notifier', '~> 2.4.0'
|
|
33
34
|
|
|
34
35
|
# => Development Dependencies
|
|
35
|
-
spec.add_development_dependency 'bundler', '~>
|
|
36
|
-
spec.add_development_dependency 'rake', '
|
|
36
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
37
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
|
37
38
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
38
39
|
spec.add_development_dependency 'rubocop', '= 0.55'
|
|
39
40
|
end
|
metadata
CHANGED
|
@@ -1,71 +1,97 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: supermarket_sync
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Dwyer
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-09-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: knife
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '17.1'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '18.0'
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
|
-
- - "
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '17.1'
|
|
30
|
+
- - "<"
|
|
25
31
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
32
|
+
version: '18.0'
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: mixlib-cli
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 2.1.1
|
|
40
|
+
- - "<"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '3.0'
|
|
43
|
+
type: :runtime
|
|
44
|
+
prerelease: false
|
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 2.1.1
|
|
50
|
+
- - "<"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '3.0'
|
|
27
53
|
- !ruby/object:Gem::Dependency
|
|
28
54
|
name: slack-notifier
|
|
29
55
|
requirement: !ruby/object:Gem::Requirement
|
|
30
56
|
requirements:
|
|
31
57
|
- - "~>"
|
|
32
58
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 2.
|
|
59
|
+
version: 2.4.0
|
|
34
60
|
type: :runtime
|
|
35
61
|
prerelease: false
|
|
36
62
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
63
|
requirements:
|
|
38
64
|
- - "~>"
|
|
39
65
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 2.
|
|
66
|
+
version: 2.4.0
|
|
41
67
|
- !ruby/object:Gem::Dependency
|
|
42
68
|
name: bundler
|
|
43
69
|
requirement: !ruby/object:Gem::Requirement
|
|
44
70
|
requirements:
|
|
45
71
|
- - "~>"
|
|
46
72
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
73
|
+
version: '2.0'
|
|
48
74
|
type: :development
|
|
49
75
|
prerelease: false
|
|
50
76
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
77
|
requirements:
|
|
52
78
|
- - "~>"
|
|
53
79
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
80
|
+
version: '2.0'
|
|
55
81
|
- !ruby/object:Gem::Dependency
|
|
56
82
|
name: rake
|
|
57
83
|
requirement: !ruby/object:Gem::Requirement
|
|
58
84
|
requirements:
|
|
59
|
-
- - "
|
|
85
|
+
- - ">="
|
|
60
86
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
87
|
+
version: 12.3.3
|
|
62
88
|
type: :development
|
|
63
89
|
prerelease: false
|
|
64
90
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
91
|
requirements:
|
|
66
|
-
- - "
|
|
92
|
+
- - ">="
|
|
67
93
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
94
|
+
version: 12.3.3
|
|
69
95
|
- !ruby/object:Gem::Dependency
|
|
70
96
|
name: rspec
|
|
71
97
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -94,7 +120,7 @@ dependencies:
|
|
|
94
120
|
- - '='
|
|
95
121
|
- !ruby/object:Gem::Version
|
|
96
122
|
version: '0.55'
|
|
97
|
-
description:
|
|
123
|
+
description:
|
|
98
124
|
email:
|
|
99
125
|
- chef@broadridge.com
|
|
100
126
|
executables:
|
|
@@ -102,6 +128,7 @@ executables:
|
|
|
102
128
|
extensions: []
|
|
103
129
|
extra_rdoc_files: []
|
|
104
130
|
files:
|
|
131
|
+
- ".github/workflows/ruby.yml"
|
|
105
132
|
- ".gitignore"
|
|
106
133
|
- ".gitlab-ci.yml"
|
|
107
134
|
- ".rubocop.yml"
|
|
@@ -131,7 +158,7 @@ licenses:
|
|
|
131
158
|
- MIT
|
|
132
159
|
metadata:
|
|
133
160
|
allowed_push_host: https://rubygems.org
|
|
134
|
-
post_install_message:
|
|
161
|
+
post_install_message:
|
|
135
162
|
rdoc_options: []
|
|
136
163
|
require_paths:
|
|
137
164
|
- lib
|
|
@@ -146,9 +173,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
146
173
|
- !ruby/object:Gem::Version
|
|
147
174
|
version: '0'
|
|
148
175
|
requirements: []
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
signing_key:
|
|
176
|
+
rubygems_version: 3.2.22
|
|
177
|
+
signing_key:
|
|
152
178
|
specification_version: 4
|
|
153
179
|
summary: Utility to synchronize Chef Supermarkets
|
|
154
180
|
test_files: []
|