pdksync 0.4.0 → 0.5.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/CHANGELOG.md +13 -0
- data/Gemfile +0 -1
- data/README.md +69 -26
- data/Rakefile +5 -66
- data/lib/pdksync.rb +63 -30
- data/lib/pdksync/constants.rb +1 -1
- data/lib/pdksync/rake_tasks.rb +73 -0
- data/managed_modules.yml +7 -6
- data/pdksync.gemspec +5 -4
- data/spec/lib/pdksync_spec.rb +4 -4
- metadata +40 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db56fccacb1a8fd65ffe4179aaad15fecbcd041b199748f08984dbce2a8d5064
|
4
|
+
data.tar.gz: 25586423e467cf87fa7986237dd954d1be333bbe343eed24f50653627e90385e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc7e96689dcba3b6c19c5b3f04be7ce8a89f5ec08de728336d20e688d34dd0676a9e26b3a877e373c7b5f89cec352921e58c13e8b017a91b34cdb4f38129a79e
|
7
|
+
data.tar.gz: b2866e5751b9528062b907b2d1292c17037aa437d4f2e1bab3d2a63c21a6d459a6f35bb8a1517ad98a8c2022ab09a3434f7c13518130cdec1a4363469af13215
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org).
|
4
4
|
|
5
|
+
## [0.5.0](https://github.com/puppetlabs/pdksync/tree/0.5.0) (2019-08-21)
|
6
|
+
|
7
|
+
[Full Changelog](https://github.com/puppetlabs/pdksync/compare/0.4.0...0.5.0)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- pdksync externalisation fixes [\#95](https://github.com/puppetlabs/pdksync/pull/95) ([DavidS](https://github.com/DavidS))
|
12
|
+
- \(MODULES-8730\) Display warning on outdated pdk version [\#92](https://github.com/puppetlabs/pdksync/pull/92) ([eimlav](https://github.com/eimlav))
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- \(MODULES-9011\) deal with modules that do not need updating [\#101](https://github.com/puppetlabs/pdksync/pull/101) ([DavidS](https://github.com/DavidS))
|
17
|
+
|
5
18
|
## [0.4.0](https://github.com/puppetlabs/pdksync/tree/0.4.0) (2019-02-04)
|
6
19
|
|
7
20
|
[Full Changelog](https://github.com/puppetlabs/pdksync/compare/v0.3.0...0.4.0)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -25,50 +25,93 @@ Pdksync by default expects that your Puppet module repositories live on GitHub a
|
|
25
25
|
|
26
26
|
1. To use pdksync, clone the GitHub repo or install it as a gem. Set up the environment by exporting a GitHub token:
|
27
27
|
|
28
|
-
```
|
28
|
+
```shell
|
29
29
|
export GITHUB_TOKEN=<access_token>
|
30
30
|
```
|
31
31
|
|
32
32
|
If you use GitLab instead of GitHub export your GitLab access token:
|
33
33
|
|
34
|
-
```
|
34
|
+
```shell
|
35
35
|
export GITLAB_TOKEN=<access_token>
|
36
36
|
```
|
37
37
|
2. Before the script will run, you need to install the gems:
|
38
|
-
```
|
38
|
+
```shell
|
39
39
|
bundle install --path .bundle/gems/
|
40
40
|
```
|
41
41
|
3. Once this is complete, call the built-in rake task to run the module:
|
42
|
-
```
|
42
|
+
```shell
|
43
43
|
bundle exec rake pdksync
|
44
44
|
```
|
45
45
|
|
46
46
|
### How it works
|
47
47
|
------------
|
48
48
|
|
49
|
-
Pdksync is a gem that works to clone, update, and push module repositories.
|
49
|
+
Pdksync is a gem that works to clone, update, and push module repositories. Create a new git repository to store your working config. You need the following files in there:
|
50
|
+
|
51
|
+
Rakefile:
|
52
|
+
```ruby
|
53
|
+
require 'pdksync/rake_tasks'
|
54
|
+
```
|
55
|
+
|
56
|
+
Gemfile:
|
57
|
+
```ruby
|
58
|
+
# frozen_string_literal: true
|
59
|
+
|
60
|
+
source "https://rubygems.org"
|
61
|
+
|
62
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
63
|
+
|
64
|
+
gem 'pdksync', github: 'puppetlabs/pdksync', ref: 'pdksync-externalisation-fixes'
|
65
|
+
gem 'rake'
|
66
|
+
```
|
67
|
+
|
68
|
+
managed_modules.yml:
|
69
|
+
```yaml
|
70
|
+
---
|
71
|
+
- repo1
|
72
|
+
- repo2
|
73
|
+
- repo3
|
74
|
+
- repo4
|
75
|
+
```
|
76
|
+
|
77
|
+
pdksync.yml:
|
78
|
+
```yaml
|
79
|
+
---
|
80
|
+
namespace: 'YOUR GITHUB NAME'
|
81
|
+
git_base_uri: 'git@github.com:'
|
82
|
+
```
|
50
83
|
|
51
|
-
The gem takes in a file, `managed_modules.yml`, stored within the gem that lists all the repositories that need to be updated. It then clones them, one after another, so that a local copy exists. The update command is ran against this local copy, with the subsequent changes being added into a commit on a unique branch. It is then pushed back to the remote master — where the local copy was originally cloned. The commit is merged to the master via a pull request, causing the gem to begin to clone the next repository.
|
52
84
|
|
53
|
-
|
85
|
+
Run the following commands to check that everything is working as expected:
|
86
|
+
|
87
|
+
```shell
|
88
|
+
bundle install --path .bundle/gems/
|
89
|
+
bundle exec rake -T
|
90
|
+
bundle exec rake git:clone_managed_modules
|
91
|
+
```
|
92
|
+
|
93
|
+
The rake tasks take in a file, `managed_modules.yml`, stored within the local directory that lists all the repositories that need to be updated. It then clones them, one after another, so that a local copy exists. The `pdk update` command is ran against this local copy, with the subsequent changes being added into a commit on a unique branch. It is then pushed back to the remote master — where the local copy was originally cloned. A pull request against master is opened, and pdksync begins to clone the next repository.
|
94
|
+
|
95
|
+
By default, pdksync will supply a label to a PR (default is 'maintenance'). This can be changed by creating `pdksync.yml` in the local directory and setting the `pdksync_label` key. You must ensure that the label selected exists on the modules that you are applying pdksync to. Should you wish to disable this feature, set `pdksync_label` to an empty string i.e. `''`. Similarly, when supplying a label using the `git:create_pr` rake task, the label must exist on each of the managed modules to run successfully.
|
54
96
|
|
55
97
|
The following rake tasks are available with pdksync:
|
56
|
-
- `show_config` Display the current configuration of pdksync
|
98
|
+
- `pdksync:show_config` Display the current configuration of pdksync
|
57
99
|
- `git:clone_managed_modules` Clone managed modules.
|
58
100
|
- `git:create_commit[:branch_name, :commit_message]` Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'.
|
59
|
-
- `git:
|
101
|
+
- `git:push` Push staged commits eg rake 'git:push'.
|
102
|
+
- `git:create_pr[:pr_title, :label]` Create PR for modules. Label is optional eg rake 'git:create_pr[pr title goes here, optional label right here]'.
|
60
103
|
- `git:clean[:branch_name]` Clean up origin branches, (branches must include pdksync in their name) eg rake 'git:clean[pdksync_origin_branch]'.
|
61
|
-
- `
|
62
|
-
- `
|
104
|
+
- `pdksync:pdk_convert` Runs PDK convert against modules.
|
105
|
+
- `pdksync:pdk_validate` Runs PDK validate against modules.
|
63
106
|
- `pdksync[:additional_title]` Run full pdksync process, clone repository, pdk update, create pr. Additional information can be added to the title, which will be appended before the reference section.
|
64
107
|
- `rake pdksync` PR title outputs as `pdksync - pdksync_heads/master-0-gabccfb1`
|
65
108
|
- `rake 'pdksync[MODULES-8231]'` PR title outputs as `pdksync - MODULES-8231 - pdksync_heads/master-0-gabccfb1`
|
66
|
-
- `run_a_command[:command]` Run a command against modules eg rake 'run_a_command[complex command here -f -gx]'
|
109
|
+
- `pdksync:run_a_command[:command]` Run a command against modules eg rake 'pdksync:run_a_command[complex command here -f -gx]'
|
67
110
|
|
68
111
|
### Configuration
|
69
112
|
|
70
|
-
By default pdksync will use hardcoded values for configuring itself. However, if you wish to override these values,
|
71
|
-
```
|
113
|
+
By default pdksync will use hardcoded values for configuring itself. However, if you wish to override these values, create a `pdksync.yml` in your working directory and use the following format:
|
114
|
+
```yaml
|
72
115
|
---
|
73
116
|
namespace: 'puppetlabs'
|
74
117
|
pdksync_dir: 'modules_pdksync'
|
@@ -105,7 +148,7 @@ need to export your GitLab access token as the environment variable
|
|
105
148
|
|
106
149
|
Your `$HOME/.pdksync.yml` then looks like this:
|
107
150
|
|
108
|
-
```
|
151
|
+
```yaml
|
109
152
|
# ~/pdksync.yml
|
110
153
|
---
|
111
154
|
namespace: 'acme'
|
@@ -114,8 +157,8 @@ git_platform: :gitlab
|
|
114
157
|
|
115
158
|
Export your GitLab access token:
|
116
159
|
|
117
|
-
```
|
118
|
-
|
160
|
+
```shell
|
161
|
+
export GITLAB_TOKEN=<your GitLab access token here>
|
119
162
|
```
|
120
163
|
|
121
164
|
If you are running your own GitLab instance on premise or use a GitLab instance
|
@@ -124,7 +167,7 @@ other than the official one at `https://gitlab.com` you also need to configure
|
|
124
167
|
pdksync knows from where to clone your modules and where to access to GitLab
|
125
168
|
API to create the live merge requests:
|
126
169
|
|
127
|
-
```
|
170
|
+
```yaml
|
128
171
|
# ~/pdksync.yml
|
129
172
|
---
|
130
173
|
namespace: 'puppetmodules'
|
@@ -145,7 +188,7 @@ It currently runs without additional arguments. To alter how it runs, make alter
|
|
145
188
|
|
146
189
|
This module runs through a pre-set array of modules, with this array set within the `managed_modules.yml` file. This file makes use of a simple `yaml` style format to set out the different module names, for example:
|
147
190
|
|
148
|
-
```
|
191
|
+
```yaml
|
149
192
|
---
|
150
193
|
- puppetlabs-motd
|
151
194
|
- puppetlabs-stdlib
|
@@ -185,7 +228,7 @@ When you're confident everything is in good shape, you can start converting your
|
|
185
228
|
Useful commands via the .sync.yml:
|
186
229
|
|
187
230
|
- Add additional gem dependencies:
|
188
|
-
```
|
231
|
+
```yaml
|
189
232
|
Gemfile:
|
190
233
|
required:
|
191
234
|
':system_tests':
|
@@ -193,18 +236,18 @@ Gemfile:
|
|
193
236
|
platforms: ruby
|
194
237
|
```
|
195
238
|
- Make changes to your travis configuration:
|
196
|
-
```
|
239
|
+
```yaml
|
197
240
|
.travis.yml:
|
198
241
|
branches:
|
199
242
|
- release
|
200
243
|
```
|
201
244
|
- Delete files that you don't want to exist in the repo:
|
202
|
-
```
|
245
|
+
```yaml
|
203
246
|
.gitlab-ci.yml:
|
204
247
|
delete: true
|
205
248
|
```
|
206
249
|
- Unmanage files that you don't want to be managed:
|
207
|
-
```
|
250
|
+
```yaml
|
208
251
|
.gitlab-ci.yml:
|
209
252
|
unmanaged: true
|
210
253
|
```
|
@@ -236,15 +279,15 @@ This tool has been developed and tested on OSX and Linux. **It currently does no
|
|
236
279
|
|
237
280
|
1. Fork the repo
|
238
281
|
2. Create your feature branch:
|
239
|
-
```
|
282
|
+
```shell
|
240
283
|
git checkout -b my-new-feature
|
241
284
|
```
|
242
285
|
3. Commit your changes:
|
243
|
-
```
|
286
|
+
```shell
|
244
287
|
git commit -am 'Add some feature'
|
245
288
|
```
|
246
289
|
4. Push to the branch:
|
247
|
-
```
|
290
|
+
```shell
|
248
291
|
git push origin my-new-feature
|
249
292
|
```
|
250
293
|
5. Create a new pull request
|
data/Rakefile
CHANGED
@@ -1,77 +1,16 @@
|
|
1
|
-
|
2
|
-
require 'colorize'
|
1
|
+
require 'pdksync/rake_tasks'
|
3
2
|
require 'github_changelog_generator/task'
|
3
|
+
require 'rubocop/rake_task'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
include PdkSync::Constants
|
8
|
-
puts 'PDKSync Configuration'.bold.yellow
|
9
|
-
puts '- Git hosting platform: '.bold + "#{PdkSync::Constants::GIT_PLATFORM}".cyan
|
10
|
-
puts '- Git base URI: '.bold + "#{PdkSync::Constants::GIT_BASE_URI}".cyan
|
11
|
-
if PdkSync::Constants::GIT_PLATFORM == :gitlab
|
12
|
-
puts '- Gitlab API endpoint: '.bold + "#{PdkSync::Constants::GITLAB_API_ENDPOINT}".cyan
|
13
|
-
end
|
14
|
-
puts '- Namespace: '.bold + "#{PdkSync::Constants::NAMESPACE}".cyan
|
15
|
-
puts '- PDKSync Dir: '.bold + "#{PdkSync::Constants::PDKSYNC_DIR}".cyan
|
16
|
-
puts '- Push File Destination: '.bold + "#{PdkSync::Constants::PUSH_FILE_DESTINATION}".cyan
|
17
|
-
puts '- Create PR Against: '.bold + "#{PdkSync::Constants::CREATE_PR_AGAINST}".cyan
|
18
|
-
puts '- Managed Modules: '.bold + "#{PdkSync::Constants::MANAGED_MODULES}".cyan
|
19
|
-
puts '- Default PDKSync Label: '.bold + "#{PdkSync::Constants::PDKSYNC_LABEL}".cyan
|
20
|
-
end
|
21
|
-
|
22
|
-
desc 'Run full pdksync process, clone repository, pdk update, create pr. Additional title information can be added to the title, which will be appended before the reference section.'
|
23
|
-
task :pdksync, [:additional_title] do |task, args|
|
24
|
-
args = {:branch_name => "pdksync_{ref}",
|
25
|
-
:commit_message => "pdksync_{ref}",
|
26
|
-
:pr_title => "pdksync_{ref}",
|
27
|
-
:additional_title => args[:additional_title]}
|
28
|
-
PdkSync::main(steps: [:use_pdk_ref, :clone, :pdk_update, :create_commit, :push_and_create_pr], args: args)
|
29
|
-
end
|
30
|
-
|
31
|
-
namespace :pdk do
|
32
|
-
desc 'Runs PDK convert against modules'
|
33
|
-
task :pdk_convert do
|
34
|
-
PdkSync::main(steps: [:pdk_convert])
|
35
|
-
end
|
36
|
-
|
37
|
-
desc 'Runs PDK validate against modules'
|
38
|
-
task :pdk_validate do
|
39
|
-
PdkSync::main(steps: [:pdk_validate])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
namespace :git do
|
44
|
-
desc 'Clone managed modules'
|
45
|
-
task :clone_managed_modules do
|
46
|
-
PdkSync::main(steps: [:clone])
|
47
|
-
end
|
48
|
-
|
49
|
-
desc "Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'"
|
50
|
-
task :create_commit, [:branch_name, :commit_message] do |task, args|
|
51
|
-
PdkSync::main(steps: [:create_commit], args: args)
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "Push commit, and create PR for modules eg rake 'git:push_and_create_pr[pr title goes here, optional label right here]'"
|
55
|
-
task :push_and_create_pr, [:pr_title, :label] do |task, args|
|
56
|
-
PdkSync::main(steps: [:push_and_create_pr], args: args)
|
57
|
-
end
|
58
|
-
|
59
|
-
desc "Clean up origin branches, (branches must include pdksync in their name) eg rake 'git:clean[pdksync_origin_branch]'"
|
60
|
-
task :clean_branches, [:branch_name] do |task, args|
|
61
|
-
PdkSync::main(steps: [:clean_branches], args: args)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
desc "Run a command against modules eg rake 'run_a_command[complex command here -f -gx]'"
|
66
|
-
task :run_a_command, [:command] do |task, args|
|
67
|
-
PdkSync::main(steps: [:run_a_command], args: args[:command])
|
5
|
+
RuboCop::RakeTask.new(:rubocop) do |t|
|
6
|
+
t.options = ['--display-cop-names']
|
68
7
|
end
|
69
8
|
|
70
9
|
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
71
10
|
config.user = 'puppetlabs'
|
72
11
|
config.project = 'pdksync'
|
73
12
|
# config.since_tag = '1.1.1'
|
74
|
-
config.future_release = '0.
|
13
|
+
config.future_release = '0.5.0'
|
75
14
|
config.exclude_labels = ['maintenance']
|
76
15
|
config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)."
|
77
16
|
config.add_pr_wo_labels = true
|
data/lib/pdksync.rb
CHANGED
@@ -10,6 +10,7 @@ require 'json'
|
|
10
10
|
require 'yaml'
|
11
11
|
require 'colorize'
|
12
12
|
require 'bundler'
|
13
|
+
require 'octokit'
|
13
14
|
|
14
15
|
# @summary
|
15
16
|
# This module set's out and controls the pdksync process
|
@@ -49,6 +50,7 @@ module PdkSync
|
|
49
50
|
}
|
50
51
|
|
51
52
|
def self.main(steps: [:clone], args: nil)
|
53
|
+
check_pdk_version
|
52
54
|
create_filespace
|
53
55
|
client = setup_client
|
54
56
|
module_names = return_modules
|
@@ -69,8 +71,8 @@ module PdkSync
|
|
69
71
|
raise 'Needs a branch_name and commit_message' if args.nil? || args[:commit_message].nil? || args[:branch_name].nil?
|
70
72
|
puts "Commit branch_name=#{args[:branch_name]} commit_message=#{args[:commit_message]}"
|
71
73
|
end
|
72
|
-
# validation
|
73
|
-
if steps.include?(:
|
74
|
+
# validation create_pr
|
75
|
+
if steps.include?(:create_pr)
|
74
76
|
raise 'Needs a pr_title' if args.nil? || args[:pr_title].nil?
|
75
77
|
puts "PR title =#{args[:additional_title]} #{args[:pr_title]}"
|
76
78
|
end
|
@@ -134,35 +136,47 @@ module PdkSync
|
|
134
136
|
create_commit(git_instance, module_args[:branch_name], module_args[:commit_message])
|
135
137
|
print 'commit created, '
|
136
138
|
end
|
137
|
-
if steps.include?(:
|
139
|
+
if steps.include?(:push)
|
138
140
|
Dir.chdir(main_path) unless Dir.pwd == main_path
|
139
141
|
git_instance = Git.open(output_path)
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
label = module_args[:pdksync_label] ? module_args[:pdksync_label] : module_args[:label]
|
146
|
-
label_valid = (label.is_a?(String) && !label.to_str.empty?) ? check_for_label(client, repo_name, label) : nil
|
147
|
-
|
148
|
-
# Exit current iteration if an error occured retrieving a label
|
149
|
-
if label_valid == false
|
150
|
-
raise 'Ensure label is valid'
|
142
|
+
if git_instance.diff(git_instance.current_branch, "#{@push_file_destination}/#{@create_pr_against}").size != 0 # Git::Diff doesn't have empty? # rubocop:disable Style/ZeroLengthPredicate
|
143
|
+
push_staged_files(git_instance, git_instance.current_branch, repo_name)
|
144
|
+
print 'push, '
|
145
|
+
else
|
146
|
+
print 'skipped push, '
|
151
147
|
end
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
148
|
+
end
|
149
|
+
if steps.include?(:create_pr)
|
150
|
+
Dir.chdir(main_path) unless Dir.pwd == main_path
|
151
|
+
git_instance = Git.open(output_path)
|
152
|
+
if git_instance.diff(git_instance.current_branch, "#{@push_file_destination}/#{@create_pr_against}").size != 0 # Git::Diff doesn't have empty? # rubocop:disable Style/ZeroLengthPredicate
|
153
|
+
pdk_version = return_pdk_version("#{output_path}/metadata.json")
|
154
|
+
|
155
|
+
# If a label is supplied, verify that it is available in the repo
|
156
|
+
label = module_args[:pdksync_label] ? module_args[:pdksync_label] : module_args[:label]
|
157
|
+
label_valid = (label.is_a?(String) && !label.to_str.empty?) ? check_for_label(client, repo_name, label) : nil
|
158
|
+
|
159
|
+
# Exit current iteration if an error occured retrieving a label
|
160
|
+
if label_valid == false
|
161
|
+
raise 'Ensure label is valid'
|
162
|
+
end
|
163
|
+
|
164
|
+
# Create the PR and add link to pr list
|
165
|
+
pr = create_pr(client, repo_name, git_instance.current_branch, pdk_version, module_args[:pr_title])
|
166
|
+
if pr.nil?
|
167
|
+
break
|
168
|
+
end
|
169
|
+
|
170
|
+
pr_list.push(pr.html_url)
|
171
|
+
print 'created pr, '
|
172
|
+
|
173
|
+
# If a valid label is supplied, add this to the PR
|
174
|
+
if label_valid == true
|
175
|
+
add_label(client, repo_name, pr.number, label)
|
176
|
+
print "added label '#{label}' "
|
177
|
+
end
|
178
|
+
else
|
179
|
+
print 'skipped pr, '
|
166
180
|
end
|
167
181
|
end
|
168
182
|
if steps.include?(:clean_branches)
|
@@ -179,6 +193,22 @@ module PdkSync
|
|
179
193
|
end
|
180
194
|
end
|
181
195
|
|
196
|
+
# @summary
|
197
|
+
# Check the local pdk version against the most recent tagged release on GitHub
|
198
|
+
def self.check_pdk_version
|
199
|
+
stdout, _stderr, status = Open3.capture3("#{return_pdk_path} --version")
|
200
|
+
raise "(FAILURE) Unable to find pdk at '#{return_pdk_path}'.".red unless status.exitstatus
|
201
|
+
|
202
|
+
local_version = stdout.strip
|
203
|
+
remote_version = Octokit.tags('puppetlabs/pdk').first[:name][1..-1]
|
204
|
+
|
205
|
+
unless Gem::Version.new(remote_version) <= Gem::Version.new(local_version)
|
206
|
+
puts "(WARNING) The current version of pdk is #{remote_version} however you are using #{local_version}".red
|
207
|
+
end
|
208
|
+
rescue StandardError => error
|
209
|
+
puts "(WARNING) Unable to check latest pdk version. #{error}".red
|
210
|
+
end
|
211
|
+
|
182
212
|
# @summary
|
183
213
|
# This method when called will create a directory identified by the set global variable '@pdksync_dir', on the condition that it does not already exist.
|
184
214
|
def self.create_filespace
|
@@ -243,8 +273,9 @@ module PdkSync
|
|
243
273
|
|
244
274
|
def self.create_commit(git_repo, branch_name, commit_message)
|
245
275
|
checkout_branch(git_repo, branch_name)
|
246
|
-
add_staged_files(git_repo)
|
247
|
-
|
276
|
+
if add_staged_files(git_repo) # ignore rubocop for clarity on side effect ordering # rubocop:disable Style/GuardClause
|
277
|
+
commit_staged_files(git_repo, branch_name, commit_message)
|
278
|
+
end
|
248
279
|
end
|
249
280
|
|
250
281
|
# @summary
|
@@ -357,8 +388,10 @@ module PdkSync
|
|
357
388
|
if git_repo.status.changed != {}
|
358
389
|
git_repo.add(all: true)
|
359
390
|
puts 'All files have been staged.'
|
391
|
+
true
|
360
392
|
else
|
361
393
|
puts 'Nothing to commit.'
|
394
|
+
false
|
362
395
|
end
|
363
396
|
end
|
364
397
|
|
data/lib/pdksync/constants.rb
CHANGED
@@ -24,7 +24,7 @@ module PdkSync # rubocop:disable Style/ClassAndModuleChildren
|
|
24
24
|
|
25
25
|
config = {}
|
26
26
|
|
27
|
-
config_path = "#{ENV['HOME']}/.pdksync.yml"
|
27
|
+
config_path = File.exist?('pdksync.yml') ? 'pdksync.yml' : "#{ENV['HOME']}/.pdksync.yml"
|
28
28
|
|
29
29
|
# pdksync config file must exist, not be empty and not be an empty YAML file
|
30
30
|
if File.exist?(config_path) && YAML.load_file(config_path) && !YAML.load_file(config_path).nil?
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'pdksync'
|
2
|
+
require 'colorize'
|
3
|
+
|
4
|
+
desc 'Run full pdksync process, clone repository, pdk update, create pr. Additional title information can be added to the title, which will be appended before the reference section.'
|
5
|
+
task :pdksync, [:additional_title] do |_task, args|
|
6
|
+
args = { branch_name: 'pdksync_{ref}',
|
7
|
+
commit_message: 'pdksync_{ref}',
|
8
|
+
pr_title: 'pdksync_{ref}',
|
9
|
+
additional_title: args[:additional_title] }
|
10
|
+
PdkSync.main(steps: [:use_pdk_ref, :clone, :pdk_update, :create_commit, :push, :create_pr], args: args)
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :pdksync do
|
14
|
+
desc 'Runs PDK convert against modules'
|
15
|
+
task :pdk_convert do
|
16
|
+
PdkSync.main(steps: [:pdk_convert])
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'Runs PDK validate against modules'
|
20
|
+
task :pdk_validate do
|
21
|
+
PdkSync.main(steps: [:pdk_validate])
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Run a command against modules eg rake 'run_a_command[complex command here -f -gx]'"
|
25
|
+
task :run_a_command, [:command] do |_task, args|
|
26
|
+
PdkSync.main(steps: [:run_a_command], args: args[:command])
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Display the current configuration of pdksync'
|
30
|
+
task :show_config do
|
31
|
+
include PdkSync::Constants
|
32
|
+
puts 'Please note that you can override any of the configuration by using an additional file at `$HOME/.pdksync.yml`.'.bold.red
|
33
|
+
puts 'PDKSync Configuration'.bold.yellow
|
34
|
+
puts '- Git hosting platform: '.bold + PdkSync::Constants::GIT_PLATFORM.to_s.cyan
|
35
|
+
puts '- Git base URI: '.bold + PdkSync::Constants::GIT_BASE_URI.to_s.cyan
|
36
|
+
if PdkSync::Constants::GIT_PLATFORM == :gitlab
|
37
|
+
puts '- Gitlab API endpoint: '.bold + PdkSync::Constants::GITLAB_API_ENDPOINT.to_s.cyan
|
38
|
+
end
|
39
|
+
puts '- Namespace: '.bold + PdkSync::Constants::NAMESPACE.to_s.cyan
|
40
|
+
puts '- PDKSync Dir: '.bold + PdkSync::Constants::PDKSYNC_DIR.to_s.cyan
|
41
|
+
puts '- Push File Destination: '.bold + PdkSync::Constants::PUSH_FILE_DESTINATION.to_s.cyan
|
42
|
+
puts '- Create PR Against: '.bold + PdkSync::Constants::CREATE_PR_AGAINST.to_s.cyan
|
43
|
+
puts '- Managed Modules: '.bold + PdkSync::Constants::MANAGED_MODULES.to_s.cyan
|
44
|
+
puts '- Default PDKSync Label: '.bold + PdkSync::Constants::PDKSYNC_LABEL.to_s.cyan
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
namespace :git do
|
49
|
+
desc 'Clone managed modules'
|
50
|
+
task :clone_managed_modules do
|
51
|
+
PdkSync.main(steps: [:clone])
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'"
|
55
|
+
task :create_commit, [:branch_name, :commit_message] do |_task, args|
|
56
|
+
PdkSync.main(steps: [:create_commit], args: args)
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "Push commits for the module eg rake 'git:push'"
|
60
|
+
task :push do |_task|
|
61
|
+
PdkSync.main(steps: [:push], args: nil)
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "Create PR for modules eg rake 'git:create_pr[pr title goes here, optional label right here]'"
|
65
|
+
task :create_pr, [:pr_title, :label] do |_task, args|
|
66
|
+
PdkSync.main(steps: [:create_pr], args: args)
|
67
|
+
end
|
68
|
+
|
69
|
+
desc "Clean up origin branches, (branches must include pdksync in their name) eg rake 'git:clean[pdksync_origin_branch]'"
|
70
|
+
task :clean_branches, [:branch_name] do |_task, args|
|
71
|
+
PdkSync.main(steps: [:clean_branches], args: args)
|
72
|
+
end
|
73
|
+
end
|
data/managed_modules.yml
CHANGED
@@ -41,15 +41,16 @@
|
|
41
41
|
#- puppetlabs-translate
|
42
42
|
#- puppetlabs-vcsrepo
|
43
43
|
#- puppetlabs-websphere_application_server
|
44
|
-
|
44
|
+
## networking team
|
45
45
|
#- cisco_ios
|
46
46
|
#- device_manager
|
47
47
|
#- puppetlabs-panos
|
48
48
|
#- puppetlabs-resource_api
|
49
49
|
## testing only
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
#- puppetlabs-testing
|
51
|
+
#- puppetlabs-testing1
|
52
|
+
#- puppetlabs-testing2
|
53
53
|
## cloud and containers team
|
54
|
-
|
55
|
-
|
54
|
+
#- puppetlabs-kubernetes
|
55
|
+
#- puppetlabs-helm
|
56
|
+
#- puppetlabs-rook
|
data/pdksync.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'pdksync'
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.5.0'
|
7
7
|
spec.authors = ['Puppet']
|
8
8
|
spec.email = ['']
|
9
9
|
spec.summary = 'Puppet Module PDK Synchronizer'
|
@@ -18,13 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
21
|
-
spec.add_development_dependency 'rake'
|
22
21
|
spec.add_development_dependency 'rspec'
|
23
22
|
spec.add_development_dependency 'rubocop', '~> 0.50.0'
|
24
|
-
spec.add_development_dependency 'octokit'
|
25
|
-
spec.add_development_dependency 'gitlab'
|
26
23
|
spec.add_development_dependency 'pry'
|
27
24
|
|
28
25
|
spec.add_runtime_dependency 'git', '~>1.3'
|
29
26
|
spec.add_runtime_dependency 'pdk', '>= 1.4.1'
|
27
|
+
spec.add_runtime_dependency 'rake'
|
28
|
+
spec.add_runtime_dependency 'gitlab'
|
29
|
+
spec.add_runtime_dependency 'octokit'
|
30
|
+
spec.add_runtime_dependency 'colorize'
|
30
31
|
end
|
data/spec/lib/pdksync_spec.rb
CHANGED
@@ -45,11 +45,11 @@ describe PdkSync do
|
|
45
45
|
git_repo = Git.open(@output_path)
|
46
46
|
expect(git_repo.show).to include('kittens in mittens')
|
47
47
|
end
|
48
|
-
it 'raise when
|
49
|
-
expect { PdkSync.main(steps: [:
|
48
|
+
it 'raise when create_pr with no arguments' do
|
49
|
+
expect { PdkSync.main(steps: [:create_pr]) }.to raise_error(RuntimeError, %r{Needs a pr_title})
|
50
50
|
end
|
51
|
-
it 'raise when
|
52
|
-
expect { PdkSync.main(steps: [:
|
51
|
+
it 'raise when create_pr with invalid label' do
|
52
|
+
expect { PdkSync.main(steps: [:create_pr], args: { pr_title: 'My amazing PR', label: 'doot doot' }) }.to raise_error(RuntimeError, %r{Ensure label is valid})
|
53
53
|
end
|
54
54
|
it 'raise when clean_branches with no arguments' do
|
55
55
|
expect { PdkSync.main(steps: [:clean_branches]) }.to raise_error(RuntimeError, %r{Needs a branch_name, and the branch name contains the string pdksync})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdksync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.15'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,21 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.50.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.50.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,41 +67,41 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: git
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
75
|
+
version: '1.3'
|
76
|
+
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: '1.3'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: pdk
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
type: :
|
89
|
+
version: 1.4.1
|
90
|
+
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 1.4.1
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
|
-
type: :
|
104
|
+
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
@@ -95,13 +109,13 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: gitlab
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
|
-
type: :
|
118
|
+
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
@@ -109,33 +123,33 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: octokit
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- - "
|
129
|
+
- - ">="
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
131
|
+
version: '0'
|
118
132
|
type: :runtime
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- - "
|
136
|
+
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: colorize
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
145
|
+
version: '0'
|
132
146
|
type: :runtime
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
152
|
+
version: '0'
|
139
153
|
description: Utility to synchronize common files across puppet modules using PDK Update.
|
140
154
|
email:
|
141
155
|
- ''
|
@@ -159,6 +173,7 @@ files:
|
|
159
173
|
- lib/pdksync/gitlabclient.rb
|
160
174
|
- lib/pdksync/gitplatformclient.rb
|
161
175
|
- lib/pdksync/pullrequest.rb
|
176
|
+
- lib/pdksync/rake_tasks.rb
|
162
177
|
- managed_modules.yml
|
163
178
|
- pdksync.gemspec
|
164
179
|
- spec/lib/pdksync_spec.rb
|
@@ -181,8 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
196
|
- !ruby/object:Gem::Version
|
182
197
|
version: '0'
|
183
198
|
requirements: []
|
184
|
-
|
185
|
-
rubygems_version: 2.7.7
|
199
|
+
rubygems_version: 3.0.4
|
186
200
|
signing_key:
|
187
201
|
specification_version: 4
|
188
202
|
summary: Puppet Module PDK Synchronizer
|