pdksync 0.5.0 → 0.8.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.
@@ -10,7 +10,9 @@ class PdkSync::GithubClient
10
10
  # supplied access token
11
11
  # @param access_token
12
12
  # The Github access token, required to access the Github API
13
- def initialize(access_token)
13
+ def initialize(access_token, api_endpoint = nil)
14
+ # USE ENV['OCTOKIT_API_ENDPOINT'] or pass in the api_endpoint
15
+ Octokit.configure { |c| c.api_endpoint = api_endpoint } unless api_endpoint.nil?
14
16
  @client = Octokit::Client.new(access_token: access_token.to_s)
15
17
  @client.user.login
16
18
  end
@@ -26,11 +26,11 @@ class PdkSync::GitPlatformClient
26
26
  when :github
27
27
  require 'pdksync/githubclient'
28
28
 
29
- PdkSync::GithubClient.new(access_token)
29
+ PdkSync::GithubClient.new(access_token, git_platform_access_settings[:api_endpoint])
30
30
  when :gitlab
31
31
  require 'pdksync/gitlabclient'
32
32
 
33
- gitlab_api_endpoint = git_platform_access_settings[:gitlab_api_endpoint]
33
+ gitlab_api_endpoint = git_platform_access_settings[:gitlab_api_endpoint] || git_platform_access_settings[:api_endpoint]
34
34
  PdkSync::GitlabClient.new(access_token, gitlab_api_endpoint)
35
35
  end
36
36
  end
@@ -0,0 +1,50 @@
1
+ require 'jenkins_api_client'
2
+
3
+ # @summary
4
+ # This class wraps Gitlab::JenkinsCLient and provides the method implementations
5
+ # required by pdksync main to access the Jenkins API for creating jobs in jenkins
6
+ class PdkSync::JenkinsClient
7
+ # @summary
8
+ # Creates a new Jenkins::Client and logs in the user based on the
9
+ # supplied user credentials and the Jenkins API endpoint URL
10
+ # @param [String] jenkins_platform_access_settings
11
+ # The Jenkins credentials, required to access the Jenkins API
12
+
13
+ def initialize(jenkins_server_url, jenkins_platform_access_settings)
14
+ jenkins_username = jenkins_platform_access_settings[:jenkins_username]
15
+ jenkins_password = jenkins_platform_access_settings[:jenkins_password]
16
+ @client = JenkinsApi::Client.new('server_url' => jenkins_server_url,
17
+ 'username' => jenkins_username,
18
+ 'password' => jenkins_password)
19
+ end
20
+
21
+ # @summary
22
+ # Creates a new adhoc job against the jenkins
23
+ # platform
24
+ # @param [String] github_repo
25
+ # Repo or Module for which the adhoc job to be created
26
+ # @param [String] github_branch
27
+ # The target branch against which to create the adhoc job
28
+ # @return
29
+ # Build Id returned by the job
30
+ def create_adhoc_job(github_repo, github_branch, github_user, job_name)
31
+ # params to start the build
32
+ job_params = { 'GITHUB_USER' => github_user,
33
+ 'GITHUB_REPO' => github_repo,
34
+ 'GITHUB_REF' => github_branch }
35
+ # job name
36
+ # Wait for up to 30 seconds, attempt to cancel queued build
37
+ opts = { 'build_start_timeout' => 30,
38
+ 'cancel_on_build_start_timeout' => true,
39
+ 'completion_proc' => lambda { |build_number, cancelled| # rubocop:disable Style/Lambda
40
+ if build_number
41
+ PdkSync::Logger.info "Wait over: build #{build_number} started"
42
+ else
43
+ PdkSync::Logger.info "Wait over: build not started, build #{cancelled ? '' : 'NOT '} cancelled"
44
+ end
45
+ } }
46
+
47
+ build_id = @client.job.build(job_name, job_params || {}, opts)
48
+ build_id
49
+ end
50
+ end
@@ -0,0 +1,120 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ class String
6
+ def colorize(color_code)
7
+ "\e[#{color_code}m#{self}\e[0m"
8
+ end
9
+
10
+ def bold
11
+ "\e[1m#{self}\e[22m"
12
+ end
13
+
14
+ def red
15
+ colorize(31)
16
+ end
17
+
18
+ def green
19
+ colorize(32)
20
+ end
21
+
22
+ def fatal
23
+ red
24
+ end
25
+
26
+ def yellow
27
+ colorize(33)
28
+ end
29
+
30
+ def light_blue
31
+ colorize(36)
32
+ end
33
+ end
34
+
35
+ module PdkSync
36
+ class Logger
37
+ def self.warn(message)
38
+ logger.warn(message)
39
+ end
40
+
41
+ def self.info(message)
42
+ logger.info(message)
43
+ end
44
+
45
+ def self.debug(message)
46
+ logger.debug(message)
47
+ end
48
+
49
+ def self.fatal(message)
50
+ logger.fatal(message)
51
+ end
52
+
53
+ def self.error(message)
54
+ logger.error(message)
55
+ end
56
+
57
+ def self.log_file
58
+ if ENV['PDKSYNC_LOG_FILENAME'] && File.exist?(ENV['PDKSYNC_LOG_FILENAME'])
59
+ ENV['PDKSYNC_LOG_FILENAME']
60
+ else
61
+ STDOUT
62
+ end
63
+ end
64
+
65
+ def self.logger(file = PdkSync::Logger.log_file)
66
+ @logger ||= begin
67
+ log = ::Logger.new(file)
68
+ log.level = log_level
69
+ log.progname = 'PdkSync'
70
+ log.formatter = proc do |severity, datetime, progname, msg|
71
+ if PdkSync::Logger.log_file == STDOUT
72
+ "#{severity} - #{progname}: #{msg}\n".send(color(severity))
73
+ else
74
+ "#{datetime} #{severity} - #{progname}: #{msg}\n".send(color(severity))
75
+ end
76
+ end
77
+ log
78
+ end
79
+ end
80
+
81
+ def logger
82
+ @logger ||= PdkSync::Logger.logger
83
+ end
84
+
85
+ def self.color(severity)
86
+ case severity
87
+ when ::Logger::Severity::WARN, 'WARN'
88
+ :yellow
89
+ when ::Logger::Severity::INFO, 'INFO'
90
+ :green
91
+ when ::Logger::Severity::FATAL, 'FATAL'
92
+ :fatal
93
+ when ::Logger::Severity::ERROR, 'ERROR'
94
+ :fatal
95
+ when ::Logger::Severity::DEBUG, 'DEBUG'
96
+ :light_blue
97
+ else
98
+ :green
99
+ end
100
+ end
101
+
102
+ def self.log_level
103
+ level = ENV['LOG_LEVEL'].downcase if ENV['LOG_LEVEL']
104
+ case level
105
+ when 'warn'
106
+ ::Logger::Severity::WARN
107
+ when 'fatal'
108
+ ::Logger::Severity::FATAL
109
+ when 'debug'
110
+ ::Logger::Severity::DEBUG
111
+ when 'info'
112
+ ::Logger::Severity::INFO
113
+ when 'error'
114
+ ::Logger::Severity::ERROR
115
+ else
116
+ ::Logger::Severity::INFO
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,5 +1,5 @@
1
1
  require 'pdksync'
2
- require 'colorize'
2
+ require 'logger'
3
3
 
4
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
5
  task :pdksync, [:additional_title] do |_task, args|
@@ -10,6 +10,23 @@ task :pdksync, [:additional_title] do |_task, args|
10
10
  PdkSync.main(steps: [:use_pdk_ref, :clone, :pdk_update, :create_commit, :push, :create_pr], args: args)
11
11
  end
12
12
 
13
+ desc 'Run full gem_testing process, clone repository, gemfile update, create pr. Additional title information can be added to the title, which will be appended before the reference section.'
14
+ task :gem_testing, [:additional_title, :gem_to_test, :gem_line, :gem_sha_finder, :gem_sha_replacer, :gem_version_finder, :gem_version_replacer, :gem_branch_finder, :gem_branch_replacer] do |_task, args| # rubocop:disable Metrics/LineLength
15
+ args = { branch_name: 'pdksync_gem_testing{ref}',
16
+ commit_message: 'pdksync_gem_testing{ref}',
17
+ pr_title: 'pdksync_gem_testing{ref}',
18
+ additional_title: args[:additional_title],
19
+ gem_to_test: args[:gem_to_test],
20
+ gem_line: args[:gem_line],
21
+ gem_sha_finder: args[:gem_sha_finder],
22
+ gem_sha_replacer: args[:gem_sha_replacer],
23
+ gem_version_finder: args[:gem_version_finder],
24
+ gem_version_replacer: args[:gem_version_replacer],
25
+ gem_branch_finder: args[:gem_branch_finder],
26
+ gem_branch_replacer: args[:gem_branch_replacer] }
27
+ PdkSync.main(steps: [:use_gem_ref, :clone, :gem_file_update, :create_commit, :push, :create_pr], args: args)
28
+ end
29
+
13
30
  namespace :pdksync do
14
31
  desc 'Runs PDK convert against modules'
15
32
  task :pdk_convert do
@@ -21,27 +38,89 @@ namespace :pdksync do
21
38
  PdkSync.main(steps: [:pdk_validate])
22
39
  end
23
40
 
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])
41
+ desc "Run a command against modules eg rake 'run_a_command[complex command here -f -gx, 'background']'"
42
+ task :run_a_command, [:command, :option] do |_task, args|
43
+ PdkSync.main(steps: [:run_a_command], args: args)
44
+ end
45
+
46
+ desc "Gem File Update'gem_file_update[gem_to_test, gem_line, gem_sha_finder, gem_sha_replacer, gem_version_finder, gem_version_replacer, gem_branch_finder, gem_branch_replacer]'"
47
+ task :gem_file_update, [:gem_to_test, :gem_line, :gem_sha_finder, :gem_sha_replacer, :gem_version_finder, :gem_version_replacer, :gem_branch_finder, :gem_branch_replacer] do |_task, args|
48
+ PdkSync.main(steps: [:gem_file_update], args: args)
49
+ end
50
+
51
+ desc "Run test against modules eg rake 'run_tests_locally[litmus, 'provision_type']'"
52
+ task :run_tests_locally, [:provision_type, :puppet_collection] do |_task, args|
53
+ PdkSync.main(steps: [:run_tests_locally], args: args)
54
+ end
55
+
56
+ desc "Fetch run results against modules eg rake 'fetch_test_results_locally[litmus]'"
57
+ task :fetch_test_results_locally do
58
+ PdkSync.main(steps: [:fetch_test_results_locally])
59
+ end
60
+
61
+ desc "Run test in jenkins for traditional modules eg rake 'run_tests_jenkins['jenkins_server_url', 'branchname']'"
62
+ task :run_tests_jenkins, [:jenkins_server_url, :github_branch, :test_framework, :github_user] do |_task, args|
63
+ PdkSync.main(steps: [:run_tests_jenkins], args: args)
64
+ end
65
+
66
+ desc 'Multi Gem Testing, multi_gem_testing[gem_name, version_file, build_gem, gem_path, gemfury_username]'
67
+ task :multi_gem_testing, [:gem_name, :version_file, :build_gem, :gem_path, :gemfury_username] do |_task, args|
68
+ PdkSync.main(steps: [:multi_gem_testing], args: args)
69
+ end
70
+
71
+ desc 'Multi Gem File Update, multigem_file_update[gem_name, gemfury_username]'
72
+ task :multigem_file_update, [:gem_name, :gemfury_username] do |_task, args|
73
+ PdkSync.main(steps: [:multigem_file_update], args: args)
27
74
  end
28
75
 
29
76
  desc 'Display the current configuration of pdksync'
30
77
  task :show_config do
31
- include PdkSync::Constants
78
+ config = PdkSync::Configuration.new
32
79
  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
80
+ puts "\nPDKSync Configuration:".bold.yellow
81
+ config.to_h.each do |key, value|
82
+ puts "- #{key}: " + value.to_s.light_blue
38
83
  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
84
+ end
85
+
86
+ desc "Fetch run results against traditional modules eg rake 'fetch_traditional_test_results'"
87
+ task :test_results_jenkins, [:jenkins_server_url] do |_task, args|
88
+ PdkSync.main(steps: [:test_results_jenkins], args: args)
89
+ end
90
+
91
+ desc 'Add a provision list key to provision.yaml'
92
+ task :add_provision_list, [:key, :provisioner, :images] do |_task, args|
93
+ PdkSync.main(steps: [:add_provision_list], args: args)
94
+ end
95
+
96
+ desc 'Generates release checks in provision.yaml based on module compatible platforms and puppet version'
97
+ task :generate_vmpooler_release_checks, [:puppet_version] do |_task, args|
98
+ PdkSync.main(steps: [:generate_vmpooler_release_checks], args: args)
99
+ end
100
+
101
+ desc 'Update the metadata.json OS supported list to that defined in conf/supported_os_list.yaml'
102
+ task :update_os_support do |_task, args|
103
+ PdkSync.main(steps: [:update_os_support], args: args)
104
+ end
105
+
106
+ desc 'Remove a platform version from the metadata.json'
107
+ task :remove_platform_from_metadata, [:os, :version] do |_task, args|
108
+ PdkSync.main(steps: [:remove_platform_from_metadata], args: args)
109
+ end
110
+
111
+ desc 'Add a platform version to the metadata.json'
112
+ task :add_platform_to_metadata, [:os, :version] do |_task, args|
113
+ PdkSync.main(steps: [:add_platform_to_metadata], args: args)
114
+ end
115
+
116
+ desc 'Add or update a requirement in the metadata.json'
117
+ task :update_requirements, [:name, :key, :value] do |_task, args|
118
+ PdkSync.main(steps: [:update_requirements], args: args)
119
+ end
120
+
121
+ desc 'Normalise the OS and OS versions in the metadata.json'
122
+ task :normalize_metadata_supported_platforms do |_task, args|
123
+ PdkSync.main(steps: [:normalize_metadata_supported_platforms], args: args)
45
124
  end
46
125
  end
47
126
 
@@ -51,6 +130,11 @@ namespace :git do
51
130
  PdkSync.main(steps: [:clone])
52
131
  end
53
132
 
133
+ desc 'Clone managed gem'
134
+ task :clone_gem, [:gem_name] do |_task, args|
135
+ PdkSync.main(steps: [:clone_gem], args: args)
136
+ end
137
+
54
138
  desc "Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'"
55
139
  task :create_commit, [:branch_name, :commit_message] do |_task, args|
56
140
  PdkSync.main(steps: [:create_commit], args: args)