pdksync 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5260a9b4d496039fb943d35a3505fd6491b67981
4
- data.tar.gz: ae071b8c16b894de1afe41b9a972132fdee4471f
2
+ SHA256:
3
+ metadata.gz: 1ddb56d6bd4366f686243b4d773083709f966726caf0d2fd580aba1e9373c890
4
+ data.tar.gz: 34063f7b4a545f18f89c58b260061ffb93575b7f15ad932cb8ddeb9ed50ea209
5
5
  SHA512:
6
- metadata.gz: 429b87f768527fedfb9c9d72712995c61364c159c35a67f6639c7be1db497a8feebb79a87c7b2b8ffc3a5b8d1cc9eb3e91ddffb9358a6836fbb703d32b7315fb
7
- data.tar.gz: c5c52a3fe2e4389cebcbc5ff314991cf47cbf003962d0b41451cb834039156ba1aae54520a843a22cf954c71c10748c1b966fccbbb843aad72d5bc5974ef508a
6
+ metadata.gz: 027c7bf9b6d2482631119390863bccc0295a4c8737ef3e741a793cf163f57a726be46a99fb116d43055deeab3f69420ee88065878e8d58df637d0536e57055a1
7
+ data.tar.gz: 25b0cec819fb71ee5030e3a357deacb8ce219bd81323bf33e861b3cd5b456bd9dacf2f6993e32e52fadcdcd298ea530d439eb1093aa9d21667a2a18b03abc66b
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ modules/
3
3
  *.gem
4
4
  Gemfile.lock
5
5
  .bundle/
6
+ modules_pdksync/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.travis.yml CHANGED
@@ -1,25 +1,27 @@
1
- ---
2
1
  sudo: false
3
2
  dist: trusty
4
3
  language: ruby
5
4
  cache: bundler
6
5
  before_install:
7
- - bundle -v
8
- - rm -f Gemfile.lock
9
- - gem update --system
10
- - gem --version
11
- - bundle -v
6
+ - bundle -v
7
+ - rm -f Gemfile.lock
8
+ - gem update --system
9
+ - gem --version
10
+ - bundle -v
12
11
  script:
13
- - 'bundle exec $CHECK'
12
+ - bundle exec $CHECK
14
13
  rvm:
15
- - 2.4.1
14
+ - 2.4.1
16
15
  matrix:
17
16
  fast_finish: true
18
17
  include:
19
- - env: CHECK='rubocop'
20
- - env: CHECK='rspec spec'
18
+ - env: CHECK='rubocop'
19
+ - env: CHECK='rspec spec'
21
20
  branches:
22
21
  only:
23
- - master
24
- - /^v\d/
25
- - release
22
+ - master
23
+ - "/^v\\d/"
24
+ - release
25
+ env:
26
+ global:
27
+ secure: Hk8cxtIHM6kyRBSmcWWUSXUV50E/yo3MGJf3mPphb3ORUfzqjB8FGZLSn1VCIP81y++U6pZAg8/AkvcDNME0at1wWh/ONiOwYKxAyyVfr0/5/i7a+dIj/9MX2kUT6MBKZXipbln/u5brdwBAHJccFHz7doq30Nd108KE5ucqf0ZbptJyDbpsrIturK9Hx+mde9sYd6MyNlzGJkQOhSL22Zd+ppBSf/GDpk2+yWN171oGwHDPWPE47q4nkIrWjnWy0kLCqxoM0zHIPxPES6lhudso4ofbumnRiHcr7DldReC8Rq1CUe/fhG7udGEdPN26JAREyUeD8MOwo2uQohQluHvjOMx9leF7Sbu+tk5E2bqVz5ofm0bksZUIBahUtGP+REvwVruFOH8RsvO3pQBndDKG11691UY55L9qZNaQ82cNOWbfG1nNuglH0GIpJgdhjvWuGw1he4c18u1fgQGM01xO7JEDIpYHrrjBboD3mL/iXMmvxwg35eIrlkfdgl9DTBWqKOoLi79WpkDajI+2B/ABXW4L/WKWlM041UjAs5/r3jgkbcZz1nZVbU4Wa5r/6RvIfrM/FXnaGuZcwx7VdPBmfyhV4rgM4siyJDdhqudTRsq1+Al9q3MhZcyKQLmad8ShEx+dfG9WRBoayE+piD/9xkfriqdMk5YEjH02grE=
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
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.2.0](https://github.com/puppetlabs/pdksync/tree/0.1.0) (2018-11-02)
6
+
7
+ [Full Changelog](https://github.com/puppetlabs/pdksync/compare/0.1.0...0.1.0)
8
+
9
+ ### Added
10
+
11
+ - \(feat\) add colourised output, fix pdk path [\#68](https://github.com/puppetlabs/pdksync/pull/68) ([tphoney](https://github.com/tphoney))
12
+ - \(CLOUD-2094\) adding container modules to the list [\#67](https://github.com/puppetlabs/pdksync/pull/67) ([sheenaajay](https://github.com/sheenaajay))
13
+ - \(feat\) adding git commit rake task [\#63](https://github.com/puppetlabs/pdksync/pull/63) ([tphoney](https://github.com/tphoney))
14
+ - \(FEAT\) add clone\_managed\_modules task [\#58](https://github.com/puppetlabs/pdksync/pull/58) ([tphoney](https://github.com/tphoney))
15
+
16
+ ### Fixed
17
+
18
+ - Use https instead of ssh for the clone [\#72](https://github.com/puppetlabs/pdksync/pull/72) ([HelenCampbell](https://github.com/HelenCampbell))
19
+
5
20
  ## [0.1.0](https://github.com/puppetlabs/pdksync/tree/0.1.0) (2018-05-23)
6
21
 
7
22
  [Full Changelog](https://github.com/puppetlabs/pdksync/compare/73bf282b297781bc26562bfb51b91b4f7b1632d1...0.1.0)
@@ -30,4 +45,4 @@ All notable changes to this project will be documented in this file. The format
30
45
 
31
46
 
32
47
 
33
- \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
48
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/Gemfile CHANGED
@@ -6,3 +6,5 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
6
  gemspec
7
7
 
8
8
  gem 'github_changelog_generator', git: 'https://github.com/skywinder/github-changelog-generator', ref: 'master'
9
+ gem 'travis'
10
+ gem 'colorize'
data/README.md CHANGED
@@ -140,7 +140,7 @@ This tool has been developed and tested on OSX and Linux. **It currently does no
140
140
  --------
141
141
 
142
142
  1. Fork the repo
143
- 2. Create your feature branch:
143
+ 2. Create your feature branch:
144
144
  ```
145
145
  git checkout -b my-new-feature
146
146
  ```
data/Rakefile CHANGED
@@ -1,17 +1,51 @@
1
1
  require_relative 'lib/pdksync'
2
2
  require 'github_changelog_generator/task'
3
3
 
4
-
5
- desc 'Run pdk update'
4
+ desc 'Run full pdksync process, clone repository, pdk update, create pr.'
6
5
  task :pdksync do
7
- PdkSync::run_pdksync
8
- puts "The script has run."
6
+ args = {:branch_name => "pdksync_{ref}",
7
+ :commit_message => "pdksync_{ref}",
8
+ :pr_title => "pdksync_{ref}"}
9
+ PdkSync::main(steps: [:use_pdk_ref, :clone, :pdk_update, :create_commit, :push_and_create_pr], args: args)
10
+ end
11
+
12
+ namespace :pdk do
13
+ desc 'Runs PDK convert against modules'
14
+ task :pdk_convert do
15
+ PdkSync::main(steps: [:pdk_convert])
16
+ end
17
+
18
+ desc 'Runs PDK validate against modules'
19
+ task :pdk_validate do
20
+ PdkSync::main(steps: [:pdk_validate])
21
+ end
22
+ end
23
+
24
+ namespace :git do
25
+ desc 'Clone managed modules'
26
+ task :clone_managed_modules do
27
+ PdkSync::main(steps: [:clone])
28
+ end
29
+
30
+ desc "Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'"
31
+ task :create_commit, [:branch_name, :commit_message] do |task, args|
32
+ PdkSync::main(steps: [:create_commit], args: args)
33
+ end
34
+
35
+ desc "Push commit, and create PR for modules eg rake 'git:push_and_create_pr[pr title goes here]'"
36
+ task :push_and_create_pr, [:pr_title] do |task, args|
37
+ PdkSync::main(steps: [:push_and_create_pr], args: args)
38
+ end
39
+
40
+ desc "Clean up origin branches, (branches must include pdksync in their name) eg rake 'git:clean[pdksync_origin_branch]'"
41
+ task :clean_branches, [:branch_name] do |task, args|
42
+ PdkSync::main(steps: [:clean_branches], args: args)
43
+ end
9
44
  end
10
45
 
11
- desc 'Run pdksync cleanup'
12
- task :pdksync_cleanup do
13
- PdkSync::clean_branches
14
- puts "The script has run."
46
+ desc "Run a command against modules eg rake 'run_a_command[complex command here -f -gx]'"
47
+ task :run_a_command, [:command] do |task, args|
48
+ PdkSync::main(steps: [:run_a_command], args: args[:command])
15
49
  end
16
50
 
17
51
  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
data/lib/pdksync.rb CHANGED
@@ -8,6 +8,7 @@ require 'octokit'
8
8
  require 'pdksync/constants'
9
9
  require 'json'
10
10
  require 'yaml'
11
+ require 'colorize'
11
12
 
12
13
  # @summary
13
14
  # This module set's out and controls the pdksync process
@@ -32,23 +33,107 @@ module PdkSync
32
33
  @create_pr_against = Constants::CREATE_PR_AGAINST
33
34
  @managed_modules = Constants::MANAGED_MODULES
34
35
 
35
- # @summary
36
- # When a new instance of this module is called, this method will be run in order to start the pdksync process.
37
- def self.run_pdksync
38
- puts 'Beginning pdksync run'
36
+ def self.main(steps: [:clone], args: nil)
39
37
  create_filespace
40
- @client = setup_client
41
- @module_names = return_modules
38
+ client = setup_client
39
+ module_names = return_modules
40
+ pr_list = []
42
41
  # The current directory is saved for cleanup purposes
43
- @main_path = Dir.pwd
42
+ main_path = Dir.pwd
44
43
 
45
- # Run an iterative loop for each @module_name
46
- @module_names.each do |module_name|
47
- puts '*************************************'
48
- puts "Syncing #{module_name}"
49
- sync(module_name, @client)
50
- # Cleanup used to ensure that the current directory is reset after each run.
51
- Dir.chdir(@main_path) unless Dir.pwd == @main_path
44
+ # validation run_a_command
45
+ if steps.include?(:run_a_command)
46
+ raise '"run_a_command" requires an argument to run.' if args.nil?
47
+ puts "Command '#{args}'"
48
+ end
49
+ # validation create_commit
50
+ if steps.include?(:create_commit)
51
+ raise 'Needs a branch_name and commit_message' if args.nil? || args[:commit_message].nil? || args[:branch_name].nil?
52
+ puts "Commit branch_name=#{args[:branch_name]} commit_message=#{args[:commit_message]}"
53
+ end
54
+ # validation push_and_create_pr
55
+ if steps.include?(:push_and_create_pr)
56
+ raise 'Needs a pr_title' if args.nil? || args[:pr_title].nil?
57
+ puts "PR title =#{args[:pr_title]}"
58
+ end
59
+ # validation clean_branches
60
+ if steps.include?(:clean_branches)
61
+ raise 'Needs a branch_name, and the branch name contains the string pdksync' if args.nil? || args[:branch_name].nil? || !args[:branch_name].include?('pdksync')
62
+ puts "Removing branch_name =#{args[:branch_name]}"
63
+ end
64
+
65
+ abort "No modules listed in #{@managed_modules}" if module_names.nil?
66
+ module_names.each do |module_name|
67
+ Dir.chdir(main_path) unless Dir.pwd == main_path
68
+ print "#{module_name}, "
69
+ repo_name = "#{@namespace}/#{module_name}"
70
+ output_path = "#{@pdksync_dir}/#{module_name}"
71
+ if steps.include?(:clone)
72
+ clean_env(output_path) if Dir.exist?(output_path)
73
+ print 'delete module directory, '
74
+ @git_repo = clone_directory(@namespace, module_name, output_path)
75
+ print 'cloned, '
76
+ puts "(WARNING) Unable to clone repo for #{module_name}".red if @git_repo.nil?
77
+ Dir.chdir(main_path) unless Dir.pwd == main_path
78
+ next if @git_repo.nil?
79
+ end
80
+ puts '(WARNING) @output_path does not exist, skipping module'.red unless File.directory?(output_path)
81
+ next unless File.directory?(output_path)
82
+ if steps.include?(:pdk_convert)
83
+ exit_status = run_command(output_path, "#{return_pdk_path} convert --force --template-url https://github.com/puppetlabs/pdk-templates")
84
+ print 'converted, '
85
+ next unless exit_status.zero?
86
+ end
87
+ if steps.include?(:pdk_validate)
88
+ Dir.chdir(main_path) unless Dir.pwd == main_path
89
+ exit_status = run_command(output_path, "#{return_pdk_path} validate -a")
90
+ print 'validated, '
91
+ next unless exit_status.zero?
92
+ end
93
+ if steps.include?(:run_a_command)
94
+ Dir.chdir(main_path) unless Dir.pwd == main_path
95
+ print 'run command, '
96
+ exit_status = run_command(output_path, args)
97
+ next unless exit_status.zero?
98
+ end
99
+ if steps.include?(:pdk_update)
100
+ Dir.chdir(main_path) unless Dir.pwd == main_path
101
+ next unless pdk_update(output_path).zero?
102
+ if steps.include?(:use_pdk_ref)
103
+ ref = return_template_ref
104
+ args = { branch_name: "pdksync_#{ref}",
105
+ commit_message: "pdksync_#{ref}",
106
+ pr_title: "pdksync_#{ref}" }
107
+ end
108
+ print 'pdk update, '
109
+ end
110
+ if steps.include?(:create_commit)
111
+ Dir.chdir(main_path) unless Dir.pwd == main_path
112
+ git_instance = Git.open(output_path)
113
+ create_commit(git_instance, args[:branch_name], args[:commit_message])
114
+ print 'commit created, '
115
+ end
116
+ if steps.include?(:push_and_create_pr)
117
+ Dir.chdir(main_path) unless Dir.pwd == main_path
118
+ git_instance = Git.open(output_path)
119
+ push_staged_files(git_instance, git_instance.current_branch, repo_name)
120
+ print 'push, '
121
+ pdk_version = return_pdk_version("#{output_path}/metadata.json")
122
+ pr = create_pr(client, repo_name, git_instance.current_branch, pdk_version, args[:pr_title])
123
+ pr_list.push(pr.html_url)
124
+ print 'created pr, '
125
+ end
126
+ if steps.include?(:clean_branches)
127
+ Dir.chdir(main_path) unless Dir.pwd == main_path
128
+ delete_branch(client, repo_name, args[:branch_name])
129
+ print 'branch deleted, '
130
+ end
131
+ puts 'done.'.green
132
+ end
133
+ return if pr_list.size.zero?
134
+ puts "\nPRs created:\n".blue
135
+ pr_list.each do |pr|
136
+ puts pr
52
137
  end
53
138
  end
54
139
 
@@ -65,9 +150,8 @@ module PdkSync
65
150
  def self.setup_client
66
151
  client = Octokit::Client.new(access_token: @access_token.to_s)
67
152
  client.user.login
68
- puts 'Client login has been successful.'
69
153
  client
70
- rescue ArgumentError
154
+ rescue ArgumentError, Octokit::Unauthorized
71
155
  raise "Access Token not set up correctly - Use export 'GITHUB_TOKEN=<put your token here>' to set it."
72
156
  end
73
157
 
@@ -80,29 +164,24 @@ module PdkSync
80
164
  end
81
165
 
82
166
  # @summary
83
- # This method when called will take in a module name and an octokit client and use them to run the pdksync process on the given module.
84
- # If @git_repo is not set the clone will have failed, in which case we avoid further action. If the pdk update fails it will move to the
85
- # next module.
86
- # @param [String] module_name
87
- # The name of the module to be put through the process
88
- # @param [Octokit::Client] client
89
- # The client used to access github.
90
- def self.sync(module_name, client)
91
- @repo_name = "#{@namespace}/#{module_name}"
92
- @output_path = "#{@pdksync_dir}/#{module_name}"
93
- clean_env(@output_path) if Dir.exist?(@output_path)
94
- @git_repo = clone_directory(@namespace, module_name, @output_path)
95
-
96
- return if @git_repo.nil?
97
- return unless pdk_update(@output_path) == 0 # rubocop:disable Style/NumericPredicate
167
+ # Try to use a fully installed pdk, otherwise fall back to the bundled pdk gem.
168
+ # @return String
169
+ # Path to the pdk executable
170
+ def self.return_pdk_path
171
+ full_path = '/opt/puppetlabs/pdk/bin/pdk'
172
+ path = if File.executable?(full_path)
173
+ full_path
174
+ else
175
+ puts "(WARNING) Using pdk on PATH not '#{full_path}'".red
176
+ 'pdk'
177
+ end
178
+ path
179
+ end
98
180
 
99
- @template_ref = return_template_ref
100
- checkout_branch(@git_repo, @template_ref)
101
- @pdk_version = return_pdk_version
102
- add_staged_files(@git_repo)
103
- commit_staged_files(@git_repo, @template_ref)
104
- push_staged_files(@git_repo, @template_ref, @repo_name)
105
- create_pr(client, @repo_name, @template_ref, @pdk_version)
181
+ def self.create_commit(git_repo, branch_name, commit_message)
182
+ checkout_branch(git_repo, branch_name)
183
+ add_staged_files(git_repo)
184
+ commit_staged_files(git_repo, branch_name, commit_message)
106
185
  end
107
186
 
108
187
  # @summary
@@ -110,7 +189,6 @@ module PdkSync
110
189
  # @param [String] output_path
111
190
  # The repository that is to be deleted.
112
191
  def self.clean_env(output_path)
113
- puts 'Cleaning your environment.'
114
192
  # If a local copy already exists it is removed
115
193
  FileUtils.rm_rf(output_path)
116
194
  end
@@ -126,27 +204,25 @@ module PdkSync
126
204
  # @return [Git::Base]
127
205
  # A git object representing the local repository.
128
206
  def self.clone_directory(namespace, module_name, output_path)
129
- puts "Cloning #{module_name} to #{output_path}."
130
207
  Git.clone("https://github.com/#{namespace}/#{module_name}.git", output_path.to_s) # is returned
131
- rescue Git::GitExecuteError
132
- puts "(FAILURE) Cloning #{module_name} has failed - check the module name and namespace are correct."
208
+ rescue Git::GitExecuteError => error
209
+ puts "(FAILURE) Cloning #{module_name} has failed. #{error}".red
133
210
  end
134
211
 
135
212
  # @summary
136
- # This method when called will run the 'pdk convert' command at the given location, with an error message being thrown if it is not successful.
213
+ # This method when called will run a command command at the given location, with an error message being thrown if it is not successful.
137
214
  # @param [String] output_path
138
215
  # The location that the command is to be run from.
216
+ # @param [String] command
217
+ # The command to be run.
139
218
  # @return [Integer]
140
- # The status code of the pdk converty run.
141
- def self.pdk_convert(output_path)
219
+ # The status code of the command run.
220
+ def self.run_command(output_path, command)
142
221
  Dir.chdir(output_path) unless Dir.pwd == output_path
143
- _stdout, stderr, status = Open3.capture3('pdk convert --force --template-url https://github.com/puppetlabs/pdk-templates')
144
- if status != 0
145
- puts "(FAILURE) Unable to run `pdk convert`: #{stderr}"
146
- else
147
- puts 'PDK convert has run.'
148
- end
149
- status
222
+ stdout, stderr, status = Open3.capture3(command)
223
+ puts "\n#{stdout}\n".yellow
224
+ puts "(FAILURE) Unable to run command '#{command}': #{stderr}".red unless status.exitstatus.zero?
225
+ status.exitstatus
150
226
  end
151
227
 
152
228
  # @summary
@@ -158,31 +234,9 @@ module PdkSync
158
234
  def self.pdk_update(output_path)
159
235
  # Runs the pdk update command
160
236
  Dir.chdir(output_path) unless Dir.pwd == output_path
161
- stdout, stderr, status = Open3.capture3('pdk update --force')
162
- if status != 0
163
- puts "(FAILURE) Unable to run `pdk update`: #{stderr}"
164
- else
165
- puts 'PDK update has run.'
166
- end
167
- return status unless status == 0 && stdout.include?('No changes required.') # rubocop:disable Style/NumericPredicate
168
- puts 'No commits since last run.'
169
- end
170
-
171
- # @summary
172
- # This method when called will run the 'pdk validate -a' command at the given location, with an error message being thrown if it is not successful.
173
- # @param [String] output_path
174
- # The location that the command is to be run from.
175
- # @return [Integer]
176
- # The status code of the pdk validate run.
177
- def self.validate_autofix
178
- # Runs the pdk validate command
179
- _stdout, stderr, status = Open3.capture3('pdk validate -a')
180
- if status != 0
181
- puts "(FAILURE) Something went wrong with the validate: #{stderr}"
182
- else
183
- puts 'Validate has run successfully.'
184
- end
185
- status
237
+ _stdout, stderr, status = Open3.capture3("#{return_pdk_path} update --force")
238
+ puts "(FAILURE) Unable to run `pdk update`: #{stderr}".red unless status.exitstatus.zero?
239
+ status.exitstatus
186
240
  end
187
241
 
188
242
  # @summary
@@ -201,11 +255,10 @@ module PdkSync
201
255
  # This method when called will checkout a new local branch of the given repository.
202
256
  # @param [Git::Base] git_repo
203
257
  # A git object representing the local repository to be branched.
204
- # @param [String] template_ref
205
- # The unique template_ref that is used as part of the branch name.
206
- def self.checkout_branch(git_repo, template_ref)
207
- puts "Creating the following branch: pdksync_#{template_ref}."
208
- git_repo.branch("pdksync_#{template_ref}".to_s).checkout
258
+ # @param [String] branch_suffix
259
+ # The string that is appended on the branch name. eg template_ref or a friendly name
260
+ def self.checkout_branch(git_repo, branch_suffix)
261
+ git_repo.branch("pdksync_#{branch_suffix}").checkout
209
262
  end
210
263
 
211
264
  # @summary
@@ -225,8 +278,12 @@ module PdkSync
225
278
  # @param [Git::Base] git_repo
226
279
  # A git object representing the local repository to be staged.
227
280
  def self.add_staged_files(git_repo)
228
- git_repo.add(all: true)
229
- puts 'All files have been staged.'
281
+ if git_repo.status.changed != {}
282
+ git_repo.add(all: true)
283
+ puts 'All files have been staged.'
284
+ else
285
+ puts 'Nothing to commit.'
286
+ end
230
287
  end
231
288
 
232
289
  # @summary
@@ -235,9 +292,15 @@ module PdkSync
235
292
  # A git object representing the local repository against which the commit is to be made.
236
293
  # @param [String] template_ref
237
294
  # The unique template_ref that is used as part of the commit name.
238
- def self.commit_staged_files(git_repo, template_ref)
239
- git_repo.commit("pdksync_#{template_ref}")
240
- puts "Creating the following commit: pdksync_#{template_ref}."
295
+ # @param [String] commit_message
296
+ # If sepecified it will be the message for the commit.
297
+ def self.commit_staged_files(git_repo, template_ref, commit_message = nil)
298
+ message = if commit_message.nil?
299
+ "pdksync_#{template_ref}"
300
+ else
301
+ commit_message
302
+ end
303
+ git_repo.commit(message)
241
304
  end
242
305
 
243
306
  # @summary
@@ -248,11 +311,10 @@ module PdkSync
248
311
  # The unique reference that that represents the template the update has ran against.
249
312
  # @param [String] repo_name
250
313
  # The name of the repository on which the commit is to be made.
251
- def self.push_staged_files(git_repo, template_ref, repo_name)
252
- git_repo.push(@push_file_destination, "pdksync_#{template_ref}")
253
- puts 'All staged files have been pushed to the repo, bon voyage!'
254
- rescue StandardError
255
- puts "(FAILURE) Pushing to #{@push_file_destination} for #{repo_name} has failed."
314
+ def self.push_staged_files(git_repo, current_branch, repo_name)
315
+ git_repo.push(@push_file_destination, current_branch)
316
+ rescue StandardError => error
317
+ puts "(FAILURE) Pushing to #{@push_file_destination} for #{repo_name} has failed. #{error}".red
256
318
  end
257
319
 
258
320
  # @summary
@@ -265,46 +327,23 @@ module PdkSync
265
327
  # The unique reference that that represents the template the update has ran against.
266
328
  # @param [String] pdk_version
267
329
  # The current version of the pdk on which the update is run.
268
- def self.create_pr(client, repo_name, template_ref, pdk_version)
330
+ def self.create_pr(client, repo_name, template_ref, pdk_version, pr_title = nil)
331
+ if pr_title.nil?
332
+ title = "pdksync - Update using #{pdk_version}"
333
+ message = "pdk version: `#{pdk_version}` \n pdk template ref: `#{template_ref}`"
334
+ head = "pdksync_#{template_ref}"
335
+ else
336
+ title = "pdksync - #{pr_title}"
337
+ message = "#{pr_title}\npdk version: `#{pdk_version}` \n"
338
+ head = template_ref
339
+ end
269
340
  pr = client.create_pull_request(repo_name, @create_pr_against,
270
- "pdksync_#{template_ref}".to_s,
271
- "pdksync - Update using #{pdk_version}",
272
- "pdk version: `#{pdk_version}` \n pdk template ref: `#{template_ref}`")
273
- puts 'The PR has been created.'
341
+ head,
342
+ title,
343
+ message)
274
344
  pr
275
- rescue StandardError
276
- puts "(FAILURE) PR creation for #{repo_name} has failed."
277
- end
278
-
279
- # @summary
280
- # This method when called will retrieve a list of module names and then proceed to iterate
281
- # through them, removing any branch that contains the word 'pdksync'.
282
- def self.clean_branches
283
- puts 'Beginning pdksync cleanup run'
284
- @client = setup_client
285
- @module_names = return_modules
286
-
287
- @module_names.each do |module_name|
288
- puts '*************************************'
289
- puts "Cleaning #{module_name}"
290
- @repo_name = "#{@namespace}/#{module_name}"
291
- retrieve_branches(@client, @repo_name).each do |branch|
292
- delete_branch(@client, @repo_name, branch.name) if branch.name.include? 'pdksync'
293
- end
294
- end
295
- end
296
-
297
- # @summary
298
- # This method when called will retrieve any and all branches from the given repository.
299
- # @param [Octokit::Client] client
300
- # The octokit client used to gain access to and manipulate the repository.
301
- # @param [String] repo_name
302
- # The name of the repository from which the branches are to be retrieved.
303
- # @return [Array]
304
- # An array containing all existing branches
305
- def self.retrieve_branches(client, repo_name)
306
- puts "Retrieving branches from #{repo_name}"
307
- client.branches(repo_name)
345
+ rescue StandardError => error
346
+ puts "(FAILURE) PR creation for #{repo_name} has failed. #{error}".red
308
347
  end
309
348
 
310
349
  # @summary
@@ -316,7 +355,8 @@ module PdkSync
316
355
  # @param [String] branch_name
317
356
  # The name of the branch that is to be deleted.
318
357
  def self.delete_branch(client, repo_name, branch_name)
319
- puts "Removing '#{branch_name}' from '#{repo_name}'"
320
358
  client.delete_branch(repo_name, branch_name)
359
+ rescue StandardError => error
360
+ puts "(FAILURE) Deleting #{branch_name} in #{repo_name} failed. #{error}".red
321
361
  end
322
362
  end
data/managed_modules.yml CHANGED
@@ -1,30 +1,55 @@
1
1
  ---
2
- - puppetlabs-accounts
3
- - puppetlabs-apache
4
- - puppetlabs-apt
5
- - puppetlabs-firewall
6
- - puppetlabs-haproxy
7
- - puppetlabs-ibm_installation_manager
8
- - puppetlabs-java
9
- - puppetlabs-mysql
10
- - puppetlabs-ntp
11
- - puppetlabs-postgresql
12
- # - puppetlabs-satellite_pe_tools
13
- - puppetlabs-tagmail
14
- - puppetlabs-tomcat
15
- - puppetlabs-translate
16
- # - puppetlabs-vcsrepo
17
- - puppetlabs-websphere_application_server
18
- - puppetlabs-bootstrap
19
- - puppetlabs-concat
20
- - puppetlabs-exec
21
- - puppetlabs-facter_task
22
- - puppetlabs-hocon
23
- - puppetlabs-inifile
24
- # - puppetlabs-java_ks
25
- - puppetlabs-motd
26
- - puppetlabs-package
27
- - puppetlabs-puppet_conf
28
- - puppetlabs-resource
29
- - puppetlabs-service
30
- - puppetlabs-stdlib
2
+ ## windows team
3
+ #- puppetlabs-acl
4
+ #- puppetlabs-chocolatey
5
+ #- puppetlabs-dsc
6
+ #- puppetlabs-dsc_lite
7
+ #- puppetlabs-iis
8
+ #- puppetlabs-powershell
9
+ #- puppetlabs-registry
10
+ #- puppetlabs-reboot
11
+ #- puppetlabs-scheduled_task
12
+ #- puppetlabs-sqlserver
13
+ #- puppetlabs-windows
14
+ #- puppetlabs-wsus_client
15
+ ## modules team
16
+ #- puppetlabs-accounts
17
+ #- puppetlabs-apache
18
+ #- puppetlabs-apt
19
+ #- puppetlabs-bootstrap
20
+ #- puppetlabs-concat
21
+ #- puppetlabs-exec
22
+ #- puppetlabs-facter_task
23
+ #- puppetlabs-firewall
24
+ #- puppetlabs-haproxy
25
+ #- puppetlabs-ibm_installation_manager
26
+ #- puppetlabs-inifile
27
+ #- puppetlabs-java
28
+ #- puppetlabs-java_ks
29
+ #- puppetlabs-motd
30
+ #- puppetlabs-mysql
31
+ #- puppetlabs-ntp
32
+ #- puppetlabs-package
33
+ #- puppetlabs-postgresql
34
+ #- puppetlabs-puppet_conf
35
+ #- puppetlabs-resource
36
+ #- puppetlabs-satellite_pe_tools
37
+ #- puppetlabs-service
38
+ #- puppetlabs-stdlib
39
+ #- puppetlabs-tagmail
40
+ #- puppetlabs-tomcat
41
+ #- puppetlabs-translate
42
+ #- puppetlabs-vcsrepo
43
+ #- puppetlabs-websphere_application_server
44
+ # networking team
45
+ #- cisco_ios
46
+ #- device_manager
47
+ #- puppetlabs-panos
48
+ #- puppetlabs-resource_api
49
+ ## testing only
50
+ # - puppetlabs-testing
51
+ # - puppetlabs-testing1
52
+ # - puppetlabs-testing2
53
+ ## cloud and containers team
54
+ # - puppetlabs-kubernetes
55
+ # - 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.1.0'
6
+ spec.version = '0.2.0'
7
7
  spec.authors = ['Puppet']
8
8
  spec.email = ['']
9
9
  spec.summary = 'Puppet Module PDK Synchronizer'
@@ -5,64 +5,50 @@ require 'octokit'
5
5
 
6
6
  describe PdkSync do
7
7
  before(:all) do
8
- @timestamp = Time.now.to_i
9
- @namespace = 'puppetlabs'
10
8
  @pdksync_dir = './modules_pdksync'
11
- @module_name = 'puppetlabs-testing'
12
- @output_path = "#{@pdksync_dir}/#{@module_name}"
13
- @access_token = ENV['GITHUB_TOKEN']
14
- @repo_name = "#{@namespace}/#{@module_name}"
9
+ module_name = 'puppetlabs-testing'
10
+ @module_names = ['puppetlabs-testing']
11
+ @output_path = "#{@pdksync_dir}/#{module_name}"
12
+ @folder = Dir.pwd
15
13
  end
16
14
 
17
- context 'env' do
18
- it 'has a filespace' do
15
+ before(:each) do
16
+ allow(PdkSync).to receive(:return_modules).and_return(@module_names)
17
+ Dir.chdir(@folder)
18
+ end
19
+
20
+ context 'main method' do
21
+ it 'runs clone sucessfully' do
19
22
  FileUtils.rm_rf(@pdksync_dir)
20
23
  PdkSync.create_filespace
24
+ PdkSync.main(steps: [:clone])
21
25
  expect(Dir.exist?(@pdksync_dir)).to be(true)
22
- end
23
-
24
- it 'has cloned the repo' do
25
- PdkSync.clone_directory(@namespace, @module_name, @output_path)
26
26
  expect(Dir.exist?(@output_path)).to be(true)
27
27
  end
28
- end
29
-
30
- context 'run' do
31
- before(:all) do
32
- @git_repo = Git.open(@output_path)
28
+ it 'runs pdk convert, and files have changed' do
29
+ PdkSync.main(steps: [:pdk_convert])
30
+ File.exist?("#{@output_path}/convert_report.txt")
33
31
  end
34
-
35
- it 'has created a branch' do
36
- PdkSync.checkout_branch(@git_repo, @timestamp)
37
- expect(@git_repo.current_branch).to include(@timestamp.to_s)
32
+ it 'raise when running a command with no argument' do
33
+ expect { PdkSync.main(steps: [:run_a_command]) }.to raise_error(RuntimeError, %r{"run_a_command" requires an argument to run.})
38
34
  end
39
-
40
- it 'has created a report' do
41
- FileUtils.rm_rf('update_report.txt')
42
- PdkSync.pdk_update(@output_path)
43
- expect(File.exist?('update_report.txt')).to be(true)
35
+ it 'runs a command "touch cat.meow"' do
36
+ PdkSync.main(steps: [:run_a_command], args: 'touch cat.meow')
37
+ expect File.exist?("#{@output_path}/cat.meow")
44
38
  end
45
-
46
- it 'has staged files' do
47
- PdkSync.add_staged_files(@git_repo)
48
- result = Open3.capture3('git status')
49
- expect(result).to include(%r{Changes to be committed})
39
+ it 'raise when create_commit with no arguments' do
40
+ expect { PdkSync.main(steps: [:create_commit]) }.to raise_error(RuntimeError, %r{Needs a branch_name and commit_message})
50
41
  end
51
-
52
- it 'has committed files' do
53
- pre_commit = @git_repo.log.last
54
- PdkSync.commit_staged_files(@git_repo, @timestamp)
55
- post_commit = @git_repo.log.last
56
- expect(pre_commit).not_to eq(post_commit)
42
+ it 'create_commit runs, and contains the "kittens in mittens"' do
43
+ PdkSync.main(steps: [:create_commit], args: { branch_name: 'temp_branch', commit_message: 'kittens in mittens' })
44
+ git_repo = Git.open(@output_path)
45
+ expect(git_repo.show).to include('kittens in mittens')
46
+ end
47
+ it 'raise when push_and_create_pr with no arguments' do
48
+ expect { PdkSync.main(steps: [:push_and_create_pr]) }.to raise_error(RuntimeError, %r{Needs a pr_title})
49
+ end
50
+ it 'raise when clean_branches with no arguments' do
51
+ expect { PdkSync.main(steps: [:clean_branches]) }.to raise_error(RuntimeError, %r{Needs a branch_name, and the branch name contains the string pdksync})
57
52
  end
58
53
  end
59
- # # Test fails if ran from travis due to lack of proper credentials
60
- # it 'The committed files should be pushed and the PR created', unless: @access_token == '' do
61
- # @client = PdkSync.setup_client
62
- # PdkSync.push_staged_files(@git_repo, @timestamp, @repo_name)
63
- # pr = PdkSync.create_pr(@client, @repo_name, @timestamp, @timstamp)
64
- # expect(pr.title).to eq("pdksync - pdksync_#{@timestamp}")
65
- # #Branch is now cleaned
66
- # PdkSync.delete_branch(@client, @repo_name, "pdksync_#{@timestamp}".to_s)
67
- # end
68
54
  end
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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-23 00:00:00.000000000 Z
11
+ date: 2018-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,6 +130,7 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
+ - ".rspec"
133
134
  - ".rubocop.yml"
134
135
  - ".rubocop_todo.yml"
135
136
  - ".travis.yml"
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  version: '0'
164
165
  requirements: []
165
166
  rubyforge_project:
166
- rubygems_version: 2.6.11
167
+ rubygems_version: 2.7.6
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: Puppet Module PDK Synchronizer