pdksync 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +16 -2
- data/README.md +90 -9
- data/Rakefile +20 -2
- data/lib/pdksync.rb +54 -37
- data/lib/pdksync/constants.rb +72 -8
- data/lib/pdksync/githubclient.rb +75 -0
- data/lib/pdksync/gitlabclient.rb +91 -0
- data/lib/pdksync/gitplatformclient.rb +109 -0
- data/lib/pdksync/pullrequest.rb +35 -0
- data/pdksync.gemspec +3 -2
- data/spec/lib/pdksync_spec.rb +1 -0
- metadata +25 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ab2ac9994044ffbddbbe2a6a18933d764477c2cdff17578abc2b203272c0bca0
|
4
|
+
data.tar.gz: da3644827bdad46868369dd0297ebae4dedfd15225ccf41def3aecdb5c0bfd73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d35e566ef6c5f29fdff5536721343d9c21aeedca3c3465afc4813183cc6b3ff6919687e43c63167649a6024fb711f420fbd9d604f402880eb99d32d0c1483f1
|
7
|
+
data.tar.gz: e5a4b656cc8a940d106a652b6a3818e3fc7106020b3581d192eb2d5706183a069edf59e1d6196c4aaf06c495f876bfe6c2591079abbb3e9b585196a863bf91ba
|
data/CHANGELOG.md
CHANGED
@@ -2,9 +2,23 @@
|
|
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.4.0](https://github.com/puppetlabs/pdksync/tree/0.4.0) (2019-02-04)
|
6
6
|
|
7
|
-
[Full Changelog](https://github.com/puppetlabs/pdksync/compare/
|
7
|
+
[Full Changelog](https://github.com/puppetlabs/pdksync/compare/v0.3.0...0.4.0)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- \(MODULES-8419\) Refactor to add support for GitLab [\#85](https://github.com/puppetlabs/pdksync/pull/85) ([antaflos](https://github.com/antaflos))
|
12
|
+
- \(MODULES-7233\) - Add configurable file option [\#81](https://github.com/puppetlabs/pdksync/pull/81) ([eimlav](https://github.com/eimlav))
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
- \(MODULES-8283\) - Fix PR title overwritten in pdksync runs [\#84](https://github.com/puppetlabs/pdksync/pull/84) ([eimlav](https://github.com/eimlav))
|
17
|
+
- \(MODULES-8382\) - Fix API rate limit false positive [\#83](https://github.com/puppetlabs/pdksync/pull/83) ([eimlav](https://github.com/eimlav))
|
18
|
+
|
19
|
+
## [v0.3.0](https://github.com/puppetlabs/pdksync/tree/v0.3.0) (2018-11-15)
|
20
|
+
|
21
|
+
[Full Changelog](https://github.com/puppetlabs/pdksync/compare/0.2.0...v0.3.0)
|
8
22
|
|
9
23
|
### Added
|
10
24
|
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Table of Contents
|
|
6
6
|
1. [Overview](#overview)
|
7
7
|
2. [Usage](#usage)
|
8
8
|
3. [How it works](#how-it-works)
|
9
|
-
4. [
|
9
|
+
4. [Configuration](#configuration)
|
10
10
|
5. [Workflow](#workflow)
|
11
11
|
6. [Migrating from modulesync to pdksync](#migrating-from-modulesync-to-pdksync)
|
12
12
|
7. [Contributing](#contributing)
|
@@ -14,17 +14,26 @@ Table of Contents
|
|
14
14
|
### Overview
|
15
15
|
--------
|
16
16
|
|
17
|
-
Pdksync is an efficient way to run a `pdk update` command against the various repositories that
|
17
|
+
Pdksync is an efficient way to run a `pdk update` command against the various Puppet module repositories that you manage — keeping them up-to-date with the changes made to PDK. It is a solution for converted modules that no longer run with modulesync.
|
18
|
+
|
19
|
+
Pdksync by default expects that your Puppet module repositories live on GitHub and will behave accordingly. It also supports GitLab as an alternative Git hosting platform.
|
18
20
|
|
19
21
|
### Usage
|
20
22
|
----------
|
21
23
|
|
22
|
-
> Note: This tool creates a 'live' pull request against the master branch of the module it is running against — defined in `managed_modules.yml`. Before running this tool, ensure this file
|
24
|
+
> Note: This tool creates a 'live' pull (merge) request against the master branch of the module it is running against — defined in `managed_modules.yml`. Before running this tool, ensure this file reflects the modules you wish it to run against. Additionally make sure that the Pdksync configuration file `$HOME/.pdksync.yml` sets the correct namespace, Git platform and Git base URI for your modules. See section [Configuration](#configuration) for details.
|
23
25
|
|
24
26
|
1. To use pdksync, clone the GitHub repo or install it as a gem. Set up the environment by exporting a GitHub token:
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
|
28
|
+
```
|
29
|
+
export GITHUB_TOKEN=<access_token>
|
30
|
+
```
|
31
|
+
|
32
|
+
If you use GitLab instead of GitHub export your GitLab access token:
|
33
|
+
|
34
|
+
```
|
35
|
+
export GITLAB_TOKEN=<access_token>
|
36
|
+
```
|
28
37
|
2. Before the script will run, you need to install the gems:
|
29
38
|
```
|
30
39
|
bundle install --path .bundle/gems/
|
@@ -41,9 +50,10 @@ Pdksync is a gem that works to clone, update, and push module repositories. It i
|
|
41
50
|
|
42
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.
|
43
52
|
|
44
|
-
By default, pdksync will supply a label to a PR (default is 'maintenance'). This can be changed by
|
53
|
+
By default, pdksync will supply a label to a PR (default is 'maintenance'). This can be changed by creating `$HOME/.pdksync.yml` 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, simply change `pdksync_label` to an empty string i.e. `''`. Similarly, when supplying a label using the `git:push_and_create_pr` rake task, the label must exist on each of the managed modules to run successfully.
|
45
54
|
|
46
55
|
The following rake tasks are available with pdksync:
|
56
|
+
- `show_config` Display the current configuration of pdksync
|
47
57
|
- `git:clone_managed_modules` Clone managed modules.
|
48
58
|
- `git:create_commit[:branch_name, :commit_message]` Stage commits for modules, branchname and commit message eg rake 'git:create_commit[flippity, commit messagez]'.
|
49
59
|
- `git:push_and_create_pr[:pr_title, :label]` Push commit, and create PR for modules. Label is optional eg rake 'git:push_and_create_pr[pr title goes here, optional label right here]'.
|
@@ -55,10 +65,80 @@ The following rake tasks are available with pdksync:
|
|
55
65
|
- `rake 'pdksync[MODULES-8231]'` PR title outputs as `pdksync - MODULES-8231 - pdksync_heads/master-0-gabccfb1`
|
56
66
|
- `run_a_command[:command]` Run a command against modules eg rake 'run_a_command[complex command here -f -gx]'
|
57
67
|
|
68
|
+
### Configuration
|
69
|
+
|
70
|
+
By default pdksync will use hardcoded values for configuring itself. However, if you wish to override these values, simply create `$HOME/.pdksync.yml` and use the following format:
|
71
|
+
```
|
72
|
+
---
|
73
|
+
namespace: 'puppetlabs'
|
74
|
+
pdksync_dir: 'modules_pdksync'
|
75
|
+
push_file_destination: 'origin'
|
76
|
+
create_pr_against: 'master'
|
77
|
+
managed_modules: 'managed_modules.yml'
|
78
|
+
pdksync_label: 'maintenance'
|
79
|
+
git_platform: :github
|
80
|
+
git_base_uri: 'https://github.com'
|
81
|
+
# Only used when git_platform is set to :gitlab
|
82
|
+
gitlab_api_endpoint: 'https://gitlab.com/api/v4'
|
83
|
+
```
|
84
|
+
|
85
|
+
You may override any property. Those that are not specified in your config file will use their corresponding default value from `lib/pdksync/constants.rb`.
|
86
|
+
|
87
|
+
#### Git platform support
|
88
|
+
|
89
|
+
By default pdksync assumes you are hosting your Puppet modules on GitHub, and GitHub is the only platform officially supported by Puppetlabs in pdksync.
|
90
|
+
|
91
|
+
Pdksync also supports the GitLab platform, but without official support by Puppetlabs.
|
92
|
+
|
93
|
+
##### GitHub
|
94
|
+
|
95
|
+
To use GitHub you only need to export your GitHub access token as the
|
96
|
+
environment variable `GITHUB_TOKEN` and configure the namespace in which your
|
97
|
+
modules are hosted in `$HOME/.pdksync.yml` as described above.
|
98
|
+
|
99
|
+
##### GitLab
|
100
|
+
|
101
|
+
To use GitLab at `https://gitlab.com` you need to set `git_platform: :gitlab`
|
102
|
+
and configure the namespace of your modules in `$HOME/.pdksync.yml`. You also
|
103
|
+
need to export your GitLab access token as the environment variable
|
104
|
+
`GITLAB_TOKEN`.
|
105
|
+
|
106
|
+
Your `$HOME/.pdksync.yml` then looks like this:
|
107
|
+
|
108
|
+
```
|
109
|
+
# ~/pdksync.yml
|
110
|
+
---
|
111
|
+
namespace: 'acme'
|
112
|
+
git_platform: :gitlab
|
113
|
+
```
|
114
|
+
|
115
|
+
Export your GitLab access token:
|
116
|
+
|
117
|
+
```
|
118
|
+
$ export GITLAB_TOKEN=<your GitLab access token here>
|
119
|
+
```
|
120
|
+
|
121
|
+
If you are running your own GitLab instance on premise or use a GitLab instance
|
122
|
+
other than the official one at `https://gitlab.com` you also need to configure
|
123
|
+
`git_base_uri` and `gitlab_api_endpoint` in `$HOME/.pdksync.yml` so that
|
124
|
+
pdksync knows from where to clone your modules and where to access to GitLab
|
125
|
+
API to create the live merge requests:
|
126
|
+
|
127
|
+
```
|
128
|
+
# ~/pdksync.yml
|
129
|
+
---
|
130
|
+
namespace: 'puppetmodules'
|
131
|
+
git_platform: :gitlab
|
132
|
+
git_base_uri: 'https://gitlab.example.com'
|
133
|
+
# alternatively use SSH:
|
134
|
+
#git_base_uri: 'ssh://git@gitlab.example.com:2222'
|
135
|
+
gitlab_api_endpoint: 'https://gitlab.example.com/api/v4'
|
136
|
+
```
|
137
|
+
|
58
138
|
### Workflow
|
59
139
|
--------
|
60
140
|
|
61
|
-
It currently runs without additional arguments. To alter how it runs, make alterations to either
|
141
|
+
It currently runs without additional arguments. To alter how it runs, make alterations to either `HOME/.pdksync.yml` or `managed_modules.yml`.
|
62
142
|
|
63
143
|
### Managed modules
|
64
144
|
----------
|
@@ -71,7 +151,8 @@ This module runs through a pre-set array of modules, with this array set within
|
|
71
151
|
- puppetlabs-stdlib
|
72
152
|
- puppetlabs-mysql
|
73
153
|
```
|
74
|
-
|
154
|
+
|
155
|
+
To add a module, add it to the list. To remove a module, remove it from the list. If you wish to specify a custom managed modules file, use the `managed_modules` property in your configuration file to specify the path to the file.
|
75
156
|
|
76
157
|
### Migrating from modulesync to pdksync
|
77
158
|
--------
|
data/Rakefile
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
require_relative 'lib/pdksync'
|
2
|
+
require 'colorize'
|
2
3
|
require 'github_changelog_generator/task'
|
3
4
|
|
5
|
+
desc 'Display the current configuration of pdksync'
|
6
|
+
task :show_config do
|
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
|
+
|
4
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.'
|
5
23
|
task :pdksync, [:additional_title] do |task, args|
|
6
24
|
args = {:branch_name => "pdksync_{ref}",
|
@@ -10,7 +28,7 @@ task :pdksync, [:additional_title] do |task, args|
|
|
10
28
|
PdkSync::main(steps: [:use_pdk_ref, :clone, :pdk_update, :create_commit, :push_and_create_pr], args: args)
|
11
29
|
end
|
12
30
|
|
13
|
-
namespace :pdk do
|
31
|
+
namespace :pdk do
|
14
32
|
desc 'Runs PDK convert against modules'
|
15
33
|
task :pdk_convert do
|
16
34
|
PdkSync::main(steps: [:pdk_convert])
|
@@ -53,7 +71,7 @@ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
|
53
71
|
config.user = 'puppetlabs'
|
54
72
|
config.project = 'pdksync'
|
55
73
|
# config.since_tag = '1.1.1'
|
56
|
-
config.future_release = '0.
|
74
|
+
config.future_release = '0.4.0'
|
57
75
|
config.exclude_labels = ['maintenance']
|
58
76
|
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)."
|
59
77
|
config.add_pr_wo_labels = true
|
data/lib/pdksync.rb
CHANGED
@@ -4,8 +4,8 @@ require 'open3'
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'rake'
|
6
6
|
require 'pdk'
|
7
|
-
require 'octokit'
|
8
7
|
require 'pdksync/constants'
|
8
|
+
require 'pdksync/gitplatformclient'
|
9
9
|
require 'json'
|
10
10
|
require 'yaml'
|
11
11
|
require 'colorize'
|
@@ -13,8 +13,6 @@ require 'bundler'
|
|
13
13
|
|
14
14
|
# @summary
|
15
15
|
# This module set's out and controls the pdksync process
|
16
|
-
# @param [String] @access_token
|
17
|
-
# The token used to access github, must be exported locally.
|
18
16
|
# @param [String] @namspace
|
19
17
|
# The namespace of the repositories we are updating.
|
20
18
|
# @param [String] @pdksync_dir
|
@@ -25,22 +23,37 @@ require 'bundler'
|
|
25
23
|
# The branch the the pull requests are to be made against.
|
26
24
|
# @param [String] @managed_modules
|
27
25
|
# The file that the array of managed modules is to be retrieved from.
|
26
|
+
# @param [Symbol] @git_platform
|
27
|
+
# The Git hosting platform to use for pull requests
|
28
|
+
# @param [String] @git_base_uri
|
29
|
+
# The base URI for Git repository access, for example 'https://github.com' or
|
30
|
+
# 'ssh://git@repo.example.com:2222'
|
31
|
+
# @param [Hash] @git_platform_access_settings
|
32
|
+
# Hash of access settings required to access the configured Git hosting
|
33
|
+
# platform API. Must always contain the key :access_token set to the exported
|
34
|
+
# GITHUB_TOKEN or GITLAB_TOKEN. In case of Gitlab it also must contain the
|
35
|
+
# key :gitlab_api_endpoint with an appropriate value.
|
28
36
|
module PdkSync
|
29
37
|
include Constants
|
30
|
-
@access_token = Constants::ACCESS_TOKEN
|
31
38
|
@namespace = Constants::NAMESPACE
|
32
39
|
@pdksync_dir = Constants::PDKSYNC_DIR
|
33
40
|
@push_file_destination = Constants::PUSH_FILE_DESTINATION
|
34
41
|
@create_pr_against = Constants::CREATE_PR_AGAINST
|
35
42
|
@managed_modules = Constants::MANAGED_MODULES
|
36
43
|
@default_pdksync_label = Constants::PDKSYNC_LABEL
|
44
|
+
@git_platform = Constants::GIT_PLATFORM
|
45
|
+
@git_base_uri = Constants::GIT_BASE_URI
|
46
|
+
@git_platform_access_settings = {
|
47
|
+
access_token: Constants::ACCESS_TOKEN,
|
48
|
+
gitlab_api_endpoint: Constants::GITLAB_API_ENDPOINT
|
49
|
+
}
|
37
50
|
|
38
51
|
def self.main(steps: [:clone], args: nil)
|
39
52
|
create_filespace
|
40
53
|
client = setup_client
|
41
54
|
module_names = return_modules
|
42
55
|
raise "No modules found in '#{@managed_modules}'" if module_names.nil?
|
43
|
-
validate_modules_exist(module_names)
|
56
|
+
validate_modules_exist(client, module_names)
|
44
57
|
pr_list = []
|
45
58
|
|
46
59
|
# The current directory is saved for cleanup purposes
|
@@ -59,7 +72,7 @@ module PdkSync
|
|
59
72
|
# validation push_and_create_pr
|
60
73
|
if steps.include?(:push_and_create_pr)
|
61
74
|
raise 'Needs a pr_title' if args.nil? || args[:pr_title].nil?
|
62
|
-
puts "PR title =#{args[:pr_title]}"
|
75
|
+
puts "PR title =#{args[:additional_title]} #{args[:pr_title]}"
|
63
76
|
end
|
64
77
|
# validation clean_branches
|
65
78
|
if steps.include?(:clean_branches)
|
@@ -69,6 +82,7 @@ module PdkSync
|
|
69
82
|
|
70
83
|
abort "No modules listed in #{@managed_modules}" if module_names.nil?
|
71
84
|
module_names.each do |module_name|
|
85
|
+
module_args = args.clone
|
72
86
|
Dir.chdir(main_path) unless Dir.pwd == main_path
|
73
87
|
print "#{module_name}, "
|
74
88
|
repo_name = "#{@namespace}/#{module_name}"
|
@@ -98,7 +112,7 @@ module PdkSync
|
|
98
112
|
if steps.include?(:run_a_command)
|
99
113
|
Dir.chdir(main_path) unless Dir.pwd == main_path
|
100
114
|
print 'run command, '
|
101
|
-
exit_status = run_command(output_path,
|
115
|
+
exit_status = run_command(output_path, module_args)
|
102
116
|
next unless exit_status.zero?
|
103
117
|
end
|
104
118
|
if steps.include?(:pdk_update)
|
@@ -106,18 +120,18 @@ module PdkSync
|
|
106
120
|
next unless pdk_update(output_path).zero?
|
107
121
|
if steps.include?(:use_pdk_ref)
|
108
122
|
ref = return_template_ref
|
109
|
-
pr_title =
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
123
|
+
pr_title = module_args[:additional_title] ? "#{module_args[:additional_title]} - pdksync_#{ref}" : "pdksync_#{ref}"
|
124
|
+
module_args = module_args.merge(branch_name: "pdksync_#{ref}",
|
125
|
+
commit_message: pr_title,
|
126
|
+
pr_title: pr_title,
|
127
|
+
pdksync_label: @default_pdksync_label)
|
114
128
|
end
|
115
129
|
print 'pdk update, '
|
116
130
|
end
|
117
131
|
if steps.include?(:create_commit)
|
118
132
|
Dir.chdir(main_path) unless Dir.pwd == main_path
|
119
133
|
git_instance = Git.open(output_path)
|
120
|
-
create_commit(git_instance,
|
134
|
+
create_commit(git_instance, module_args[:branch_name], module_args[:commit_message])
|
121
135
|
print 'commit created, '
|
122
136
|
end
|
123
137
|
if steps.include?(:push_and_create_pr)
|
@@ -128,7 +142,7 @@ module PdkSync
|
|
128
142
|
pdk_version = return_pdk_version("#{output_path}/metadata.json")
|
129
143
|
|
130
144
|
# If a label is supplied, verify that it is available in the repo
|
131
|
-
label =
|
145
|
+
label = module_args[:pdksync_label] ? module_args[:pdksync_label] : module_args[:label]
|
132
146
|
label_valid = (label.is_a?(String) && !label.to_str.empty?) ? check_for_label(client, repo_name, label) : nil
|
133
147
|
|
134
148
|
# Exit current iteration if an error occured retrieving a label
|
@@ -137,7 +151,7 @@ module PdkSync
|
|
137
151
|
end
|
138
152
|
|
139
153
|
# Create the PR and add link to pr list
|
140
|
-
pr = create_pr(client, repo_name, git_instance.current_branch, pdk_version,
|
154
|
+
pr = create_pr(client, repo_name, git_instance.current_branch, pdk_version, module_args[:pr_title])
|
141
155
|
if pr.nil?
|
142
156
|
break
|
143
157
|
end
|
@@ -153,7 +167,7 @@ module PdkSync
|
|
153
167
|
end
|
154
168
|
if steps.include?(:clean_branches)
|
155
169
|
Dir.chdir(main_path) unless Dir.pwd == main_path
|
156
|
-
delete_branch(client, repo_name,
|
170
|
+
delete_branch(client, repo_name, module_args[:branch_name])
|
157
171
|
print 'branch deleted, '
|
158
172
|
end
|
159
173
|
puts 'done.'.green
|
@@ -173,14 +187,12 @@ module PdkSync
|
|
173
187
|
|
174
188
|
# @summary
|
175
189
|
# This method when called will create and return an octokit client with access to the upstream git repositories.
|
176
|
-
# @return [
|
177
|
-
# The
|
190
|
+
# @return [PdkSync::GitPlatformClient] client
|
191
|
+
# The Git platform client that has been created.
|
178
192
|
def self.setup_client
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
rescue ArgumentError, Octokit::Unauthorized
|
183
|
-
raise "Access Token not set up correctly - Use export 'GITHUB_TOKEN=<put your token here>' to set it."
|
193
|
+
PdkSync::GitPlatformClient.new(@git_platform, @git_platform_access_settings)
|
194
|
+
rescue StandardError => error
|
195
|
+
raise "Git platform access not set up correctly: #{error}"
|
184
196
|
end
|
185
197
|
|
186
198
|
# @summary
|
@@ -193,14 +205,19 @@ module PdkSync
|
|
193
205
|
end
|
194
206
|
|
195
207
|
# @summary
|
196
|
-
# This method when called will parse an array of module names and verify
|
208
|
+
# This method when called will parse an array of module names and verify
|
209
|
+
# whether they are valid repo or project names on the configured Git
|
210
|
+
# hosting platform.
|
211
|
+
# @param [PdkSync::GitPlatformClient] client
|
212
|
+
# The Git platform client used to get a repository.
|
197
213
|
# @param [Array] module_names
|
198
|
-
# String array of the names of
|
199
|
-
def self.validate_modules_exist(module_names)
|
214
|
+
# String array of the names of Git platform repos
|
215
|
+
def self.validate_modules_exist(client, module_names)
|
200
216
|
invalid_names = []
|
217
|
+
raise "Error reading in modules. Check syntax of '#{@managed_modules}'." unless !module_names.nil? && module_names.is_a?(Array)
|
201
218
|
module_names.each do |module_name|
|
202
219
|
# If module name is invalid, push it to invalid names array
|
203
|
-
unless
|
220
|
+
unless client.repository?("#{@namespace}/#{module_name}")
|
204
221
|
invalid_names.push(module_name)
|
205
222
|
next
|
206
223
|
end
|
@@ -250,7 +267,7 @@ module PdkSync
|
|
250
267
|
# @return [Git::Base]
|
251
268
|
# A git object representing the local repository.
|
252
269
|
def self.clone_directory(namespace, module_name, output_path)
|
253
|
-
Git.clone("
|
270
|
+
Git.clone("#{@git_base_uri}/#{namespace}/#{module_name}.git", output_path.to_s) # is returned
|
254
271
|
rescue Git::GitExecuteError => error
|
255
272
|
puts "(FAILURE) Cloning #{module_name} has failed. #{error}".red
|
256
273
|
end
|
@@ -352,7 +369,7 @@ module PdkSync
|
|
352
369
|
# @param [String] template_ref
|
353
370
|
# The unique template_ref that is used as part of the commit name.
|
354
371
|
# @param [String] commit_message
|
355
|
-
# If
|
372
|
+
# If specified it will be the message for the commit.
|
356
373
|
def self.commit_staged_files(git_repo, template_ref, commit_message = nil)
|
357
374
|
message = if commit_message.nil?
|
358
375
|
"pdksync_#{template_ref}"
|
@@ -378,8 +395,8 @@ module PdkSync
|
|
378
395
|
|
379
396
|
# @summary
|
380
397
|
# This method when called will create a pr on the given repository that will create a pr to merge the given commit into the master with the pdk version as an identifier.
|
381
|
-
# @param [
|
382
|
-
# The
|
398
|
+
# @param [PdkSync::GitPlatformClient] client
|
399
|
+
# The Git platform client used to gain access to and manipulate the repository.
|
383
400
|
# @param [String] repo_name
|
384
401
|
# The name of the repository on which the commit is to be made.
|
385
402
|
# @param [String] template_ref
|
@@ -407,8 +424,8 @@ module PdkSync
|
|
407
424
|
|
408
425
|
# @summary
|
409
426
|
# This method when called will check on the given repository for the existence of the supplied label
|
410
|
-
# @param [
|
411
|
-
# The
|
427
|
+
# @param [PdkSync::GitPlatformClient] client
|
428
|
+
# The Git platform client used to gain access to and manipulate the repository.
|
412
429
|
# @param [String] repo_name
|
413
430
|
# The name of the repository on which the commit is to be made.
|
414
431
|
# @param [String] label
|
@@ -437,8 +454,8 @@ module PdkSync
|
|
437
454
|
|
438
455
|
# @summary
|
439
456
|
# This method when called will add a given label to a given repository
|
440
|
-
# @param [
|
441
|
-
# The
|
457
|
+
# @param [PdkSync::GitPlatformClient] client
|
458
|
+
# The Git Platform client used to gain access to and manipulate the repository.
|
442
459
|
# @param [String] repo_name
|
443
460
|
# The name of the repository on which the commit is to be made.
|
444
461
|
# @param [Integer] issue_number
|
@@ -454,8 +471,8 @@ module PdkSync
|
|
454
471
|
|
455
472
|
# @summary
|
456
473
|
# This method when called will delete any preexisting branch on the given repository that matches the given name.
|
457
|
-
# @param [
|
458
|
-
# The
|
474
|
+
# @param [PdkSync::GitPlatformClient] client
|
475
|
+
# The Git platform client used to gain access to and manipulate the repository.
|
459
476
|
# @param [String] repo_name
|
460
477
|
# The name of the repository from which the branch is to be deleted.
|
461
478
|
# @param [String] branch_name
|
data/lib/pdksync/constants.rb
CHANGED
@@ -1,14 +1,78 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
# @summary
|
2
4
|
# A module used to contain a set of variables that are expected to remain constant across all iterations of the main pdksync module.
|
5
|
+
# @note
|
6
|
+
# Configuration is loaded from `$HOME/.pdksync.yml`. If $HOME is not set, the config_path will use the current directory.
|
7
|
+
# Set PDKSYNC_LABEL to '' to disable adding a label during pdksync runs.
|
3
8
|
module PdkSync # rubocop:disable Style/ClassAndModuleChildren
|
9
|
+
# Constants contains the configuration for pdksync to use
|
4
10
|
module Constants
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
default_config = {
|
12
|
+
namespace: 'puppetlabs',
|
13
|
+
pdksync_dir: 'modules_pdksync',
|
14
|
+
push_file_destination: 'origin',
|
15
|
+
create_pr_against: 'master',
|
16
|
+
managed_modules: 'managed_modules.yml',
|
17
|
+
pdksync_label: 'maintenance',
|
18
|
+
git_platform: :github,
|
19
|
+
git_base_uri: 'https://github.com',
|
20
|
+
gitlab_api_endpoint: 'https://gitlab.com/api/v4'
|
21
|
+
}
|
22
|
+
|
23
|
+
supported_git_platforms = [:github, :gitlab]
|
24
|
+
|
25
|
+
config = {}
|
26
|
+
|
27
|
+
config_path = "#{ENV['HOME']}/.pdksync.yml"
|
28
|
+
|
29
|
+
# pdksync config file must exist, not be empty and not be an empty YAML file
|
30
|
+
if File.exist?(config_path) && YAML.load_file(config_path) && !YAML.load_file(config_path).nil?
|
31
|
+
custom_config = YAML.load_file(config_path)
|
32
|
+
config[:namespace] = custom_config['namespace'] ||= default_config[:namespace]
|
33
|
+
config[:pdksync_dir] = custom_config['pdksync_dir'] ||= default_config[:pdksync_dir]
|
34
|
+
config[:push_file_destination] = custom_config['push_file_destination'] ||= default_config[:push_file_destination]
|
35
|
+
config[:create_pr_against] = custom_config['create_pr_against'] ||= default_config[:create_pr_against]
|
36
|
+
config[:managed_modules] = custom_config['managed_modules'] ||= default_config[:managed_modules]
|
37
|
+
config[:pdksync_label] = custom_config['pdksync_label'] ||= default_config[:pdksync_label]
|
38
|
+
config[:git_platform] = custom_config['git_platform'] ||= default_config[:git_platform]
|
39
|
+
config[:git_base_uri] = custom_config['git_base_uri'] ||= case config[:git_platform]
|
40
|
+
when :gitlab
|
41
|
+
'https://gitlab.com'
|
42
|
+
else
|
43
|
+
default_config[:git_base_uri]
|
44
|
+
end
|
45
|
+
config[:gitlab_api_endpoint] = custom_config['gitlab_api_endpoint'] ||= default_config[:gitlab_api_endpoint]
|
46
|
+
else
|
47
|
+
config = default_config
|
48
|
+
end
|
49
|
+
|
50
|
+
NAMESPACE = config[:namespace].freeze
|
51
|
+
PDKSYNC_DIR = config[:pdksync_dir].freeze
|
52
|
+
PUSH_FILE_DESTINATION = config[:push_file_destination].freeze
|
53
|
+
CREATE_PR_AGAINST = config[:create_pr_against].freeze
|
54
|
+
MANAGED_MODULES = config[:managed_modules].freeze
|
55
|
+
PDKSYNC_LABEL = config[:pdksync_label].freeze
|
56
|
+
GIT_PLATFORM = config[:git_platform].downcase.to_sym.freeze
|
57
|
+
GIT_BASE_URI = config[:git_base_uri].freeze
|
58
|
+
GITLAB_API_ENDPOINT = config[:gitlab_api_endpoint].freeze
|
59
|
+
ACCESS_TOKEN = case GIT_PLATFORM
|
60
|
+
when :github
|
61
|
+
ENV['GITHUB_TOKEN'].freeze
|
62
|
+
when :gitlab
|
63
|
+
ENV['GITLAB_TOKEN'].freeze
|
64
|
+
end
|
65
|
+
|
66
|
+
# Sanity checks
|
67
|
+
|
68
|
+
unless supported_git_platforms.include?(GIT_PLATFORM)
|
69
|
+
raise "Unsupported Git hosting platform '#{GIT_PLATFORM}'."\
|
70
|
+
" Supported platforms are: #{supported_git_platforms.join(', ')}"
|
71
|
+
end
|
72
|
+
|
73
|
+
if ACCESS_TOKEN.nil?
|
74
|
+
raise "Git platform access token for #{GIT_PLATFORM.capitalize} not set"\
|
75
|
+
" - use 'export #{GIT_PLATFORM.upcase}_TOKEN=\"<your token>\"' to set"
|
76
|
+
end
|
13
77
|
end
|
14
78
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'octokit'
|
2
|
+
|
3
|
+
# @summary
|
4
|
+
# This class wraps Octokit::Client and provides the method implementations
|
5
|
+
# required by pdksync main to access the Github API for creating pull
|
6
|
+
# requests, adding labels, and so forth.
|
7
|
+
class PdkSync::GithubClient
|
8
|
+
# @summary
|
9
|
+
# Creates a new Octokit::Client and logs in the user based on the
|
10
|
+
# supplied access token
|
11
|
+
# @param access_token
|
12
|
+
# The Github access token, required to access the Github API
|
13
|
+
def initialize(access_token)
|
14
|
+
@client = Octokit::Client.new(access_token: access_token.to_s)
|
15
|
+
@client.user.login
|
16
|
+
end
|
17
|
+
|
18
|
+
# @summary Checks if the supplied repository exists on the Git hosting platform
|
19
|
+
# @param [String] repository
|
20
|
+
# The full repository name, i.e. "namespace/repo_name"
|
21
|
+
# @return [Boolean] true if the repository exists, false otherwise
|
22
|
+
def repository?(repository)
|
23
|
+
@client.repository?(repository)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @summary Creates a new pull request against the Git hosting platform
|
27
|
+
# @param [String] repo_name
|
28
|
+
# The full repository name, i.e. "namespace/repo_name" in which to create
|
29
|
+
# the pull request
|
30
|
+
# @param [String] create_pr_against
|
31
|
+
# The target branch against which to create the pull request
|
32
|
+
# @param [String] head
|
33
|
+
# The source branch from which to create the pull request
|
34
|
+
# @param [String] title
|
35
|
+
# The title/name of the pull request to create
|
36
|
+
# @param [String] message
|
37
|
+
# The pull request message/body
|
38
|
+
# @return An Octokit pull request object for the newly created pull request
|
39
|
+
def create_pull_request(repo_name, create_pr_against, head, title, message)
|
40
|
+
@client.create_pull_request(repo_name, create_pr_against, head, title, message)
|
41
|
+
end
|
42
|
+
|
43
|
+
# @summary Gets the labels available in the repository
|
44
|
+
# @param [String] repo_name
|
45
|
+
# The full repository name, i.e. "namespace/repo_name", from which to get
|
46
|
+
# the available labels
|
47
|
+
# @return [Array] List of available labels in the repository
|
48
|
+
def labels(repo_name)
|
49
|
+
@client.labels(repo_name)
|
50
|
+
end
|
51
|
+
|
52
|
+
# @summary Updates an existing issue/pull request in the repository
|
53
|
+
# @param [String] repo_name
|
54
|
+
# The full repository name, i.e. "namespace/repo_name" in which to update
|
55
|
+
# the issue
|
56
|
+
# @param [Integer] issue_number
|
57
|
+
# The id number of the issue/pull request to update
|
58
|
+
# @param [Hash] options
|
59
|
+
# A hash of options definint the changes to the issue
|
60
|
+
# @return An Octokit issue object of the updated issue
|
61
|
+
def update_issue(repo_name, issue_number, options)
|
62
|
+
@client.update_issue(repo_name, issue_number, options)
|
63
|
+
end
|
64
|
+
|
65
|
+
# @summary Deletes a branch in the repository
|
66
|
+
# @param [String] repo_name
|
67
|
+
# The full repository name, i.e. "namespace/repo_name" in which to delete
|
68
|
+
# the branch
|
69
|
+
# @param [String] branch_name
|
70
|
+
# The name of the branch to delete
|
71
|
+
# @return [Boolean] true on success, false on failure
|
72
|
+
def delete_branch(repo_name, branch_name)
|
73
|
+
@client.delete_branch(repo_name, branch_name)
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'gitlab'
|
2
|
+
|
3
|
+
# @summary
|
4
|
+
# This class wraps Gitlab::Client and provides the method implementations
|
5
|
+
# required by pdksync main to access the Gitlab API for creating merge
|
6
|
+
# requests, adding labels, and so forth.
|
7
|
+
class PdkSync::GitlabClient
|
8
|
+
# @summary
|
9
|
+
# Creates a new Gitlab::Client and logs in the user based on the
|
10
|
+
# supplied access token and the Gitlab API endpoint URL
|
11
|
+
# @param [String] access_token
|
12
|
+
# The Gitlab private access token, required to access the Gitlab API
|
13
|
+
# @param [String] gitlab_api_endpoint
|
14
|
+
# URL to the Gitlab API endpoint against which to work
|
15
|
+
def initialize(access_token, gitlab_api_endpoint)
|
16
|
+
@client = Gitlab.client(endpoint: gitlab_api_endpoint, private_token: access_token)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @summary Checks if the supplied project exists on the Git hosting platform
|
20
|
+
# @param [String] project
|
21
|
+
# The full repository name, i.e. "namespace/project"
|
22
|
+
# @return [Boolean] true if the project exists, false otherwise
|
23
|
+
def repository?(project)
|
24
|
+
@client.project(project)
|
25
|
+
|
26
|
+
true
|
27
|
+
rescue Gitlab::Error::NotFound
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
# @summary
|
32
|
+
# Creates a new merge request (i.e. pull request) against the Gitlab
|
33
|
+
# platform
|
34
|
+
# @param [String] project
|
35
|
+
# The full project name, i.e. "namespace/project" in which to create
|
36
|
+
# the merge request
|
37
|
+
# @param [String] target_branch
|
38
|
+
# The target branch against which to create the merge request
|
39
|
+
# @param [String] source_branch
|
40
|
+
# The source branch from which to create the merge request
|
41
|
+
# @param [String] title
|
42
|
+
# The title/name of the merge request to create
|
43
|
+
# @param [String] message
|
44
|
+
# The pull request message/body
|
45
|
+
# @return
|
46
|
+
# A Gitlab merge request object for the newly created merge request
|
47
|
+
def create_pull_request(project, target_branch, source_branch, title, message)
|
48
|
+
mr_options = {
|
49
|
+
source_branch: source_branch,
|
50
|
+
target_branch: target_branch,
|
51
|
+
description: message
|
52
|
+
}
|
53
|
+
@client.create_merge_request(project, title, mr_options)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @summary Gets the labels available in the project
|
57
|
+
# @param [String] project
|
58
|
+
# The full project name, i.e. "namespace/project", from which to get
|
59
|
+
# the available labels
|
60
|
+
# @return [Array] List of available labels in the project
|
61
|
+
def labels(project)
|
62
|
+
@client.labels(project)
|
63
|
+
end
|
64
|
+
|
65
|
+
# @summary Updates an existing merge request in the repository
|
66
|
+
# @note This method is specifically used to set labels for a merge request
|
67
|
+
# @param [String] project
|
68
|
+
# The full project name, i.e. "namespace/project" in which to update
|
69
|
+
# the issue
|
70
|
+
# @param [Integer] id
|
71
|
+
# The id number of the merge request to update
|
72
|
+
# @param [Hash] options
|
73
|
+
# A hash of options defining the changes to the merge request
|
74
|
+
# @return A Gitlab merge request object of the updated merge request
|
75
|
+
def update_issue(project, id, options)
|
76
|
+
# Gitlab requires labels to be supplied as a comma-separated string
|
77
|
+
labels = options[:labels].join(',')
|
78
|
+
@client.update_merge_request(project, id, labels: labels)
|
79
|
+
end
|
80
|
+
|
81
|
+
# @summary Deletes a branch in the project
|
82
|
+
# @param [String] project
|
83
|
+
# The full project name, i.e. "namespace/project" in which to delete
|
84
|
+
# the branch
|
85
|
+
# @param [String] branch_name
|
86
|
+
# The name of the branch to delete
|
87
|
+
# @return [Boolean] true on success, false on failure
|
88
|
+
def delete_branch(project, branch_name)
|
89
|
+
@client.delete_branch(project, branch_name)
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'pdksync/pullrequest'
|
2
|
+
|
3
|
+
# @summary
|
4
|
+
# The GitPlatformClient class creates a PdkSync::GithubClient or
|
5
|
+
# PdkSync::GitlabClient and provides methods wrapping the client's
|
6
|
+
# corresponding methods
|
7
|
+
class PdkSync::GitPlatformClient
|
8
|
+
# @summary
|
9
|
+
# Creates a PdkSync::GithubClient or PdkSync::GitlabClient based on the
|
10
|
+
# value of git_platform.
|
11
|
+
# @param [Symbol] git_platform
|
12
|
+
# The symbol designating the Git hosting platform to use and thus which
|
13
|
+
# client to create
|
14
|
+
# @param [Hash] git_platform_access_settings
|
15
|
+
# Hash of Git platform access settings, such as access_token or
|
16
|
+
# gitlab_api_endpoint. access_token is always required,
|
17
|
+
# gitlab_api_endpoint only for Gitlab.
|
18
|
+
def initialize(git_platform, git_platform_access_settings)
|
19
|
+
@git_platform = git_platform
|
20
|
+
|
21
|
+
# TODO: raise exceptions when git_platform_access_settings hash is not
|
22
|
+
# set up correctly? Or let PdkSync::GithubClient or PdkSync::GitlabClient
|
23
|
+
# raise errors later and let them propagate upwards?
|
24
|
+
access_token = git_platform_access_settings[:access_token]
|
25
|
+
@client = case git_platform
|
26
|
+
when :github
|
27
|
+
require 'pdksync/githubclient'
|
28
|
+
|
29
|
+
PdkSync::GithubClient.new(access_token)
|
30
|
+
when :gitlab
|
31
|
+
require 'pdksync/gitlabclient'
|
32
|
+
|
33
|
+
gitlab_api_endpoint = git_platform_access_settings[:gitlab_api_endpoint]
|
34
|
+
PdkSync::GitlabClient.new(access_token, gitlab_api_endpoint)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# @summary Checks if the supplied project exists on the Git hosting platform
|
39
|
+
# @param [String] project
|
40
|
+
# The full repository name, i.e. "namespace/project"
|
41
|
+
# @return [Boolean] true if the project exists, false otherwise
|
42
|
+
def repository?(project)
|
43
|
+
@client.repository?(project)
|
44
|
+
end
|
45
|
+
|
46
|
+
# @summary
|
47
|
+
# Creates a new pull/merge request against the Git hosting platform and
|
48
|
+
# wraps the Github or Gitlab result in a PdkSync::PullRequest object for
|
49
|
+
# consumption by pdksync main
|
50
|
+
# @param [String] project
|
51
|
+
# The full project name, i.e. "namespace/project" in which to create
|
52
|
+
# the pull/merge request
|
53
|
+
# @param [String] target_branch
|
54
|
+
# The target branch against which to create the pull/merge request
|
55
|
+
# @param [String] source_branch
|
56
|
+
# The source branch from which to create the pull/merge request
|
57
|
+
# @param [String] title
|
58
|
+
# The title/name of the pull/merge request to create
|
59
|
+
# @param [String] message
|
60
|
+
# The pull/merge request message/body
|
61
|
+
# @return [PdkSync::PullRequest]
|
62
|
+
# A pdksync pull request object for the newly created pull/merge request
|
63
|
+
# for consumption by pdksync main
|
64
|
+
def create_pull_request(project, target_branch, source_branch, title, message)
|
65
|
+
client_pr = @client.create_pull_request(project, target_branch, source_branch, title, message)
|
66
|
+
pr = case @git_platform
|
67
|
+
when :github
|
68
|
+
PdkSync::PullRequest.github(client_pr)
|
69
|
+
when :gitlab
|
70
|
+
PdkSync::PullRequest.gitlab(client_pr)
|
71
|
+
end
|
72
|
+
pr
|
73
|
+
end
|
74
|
+
|
75
|
+
# @summary Gets the labels available in the project
|
76
|
+
# @param [String] project
|
77
|
+
# The full project name, i.e. "namespace/project", from which to get
|
78
|
+
# the available labels
|
79
|
+
# @return [Array] List of available labels in the project
|
80
|
+
def labels(project)
|
81
|
+
@client.labels(project)
|
82
|
+
end
|
83
|
+
|
84
|
+
# @summary Updates an existing pull/merge request in the repository
|
85
|
+
# @note
|
86
|
+
# This method is specifically used to set labels for a pull/merge request
|
87
|
+
# @param [String] project
|
88
|
+
# The full project name, i.e. "namespace/project" in which to update
|
89
|
+
# the issue
|
90
|
+
# @param [Integer] id
|
91
|
+
# The id number of the pull/merge request to update
|
92
|
+
# @param [Hash] options
|
93
|
+
# A hash of options defining the changes to the pull/merge request
|
94
|
+
# @return A pull/merge request object of the updated pull/merge request
|
95
|
+
def update_issue(project, id, options)
|
96
|
+
@client.update_issue(project, id, options)
|
97
|
+
end
|
98
|
+
|
99
|
+
# @summary Deletes a branch in the project
|
100
|
+
# @param [String] project
|
101
|
+
# The full project name, i.e. "namespace/project" in which to delete
|
102
|
+
# the branch
|
103
|
+
# @param [String] branch_name
|
104
|
+
# The name of the branch to delete
|
105
|
+
# @return [Boolean] true on success, false on failure
|
106
|
+
def delete_branch(project, branch_name)
|
107
|
+
@client.delete_branch(project, branch_name)
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# @summary A simple wrapper class around Github pull request and Gitlab merge
|
2
|
+
# request objects used to abstract the differences and provide a common
|
3
|
+
# interface to PR URL and number/id.
|
4
|
+
class PdkSync::PullRequest
|
5
|
+
class << self
|
6
|
+
def github(pr_object)
|
7
|
+
new(pr_object)
|
8
|
+
end
|
9
|
+
|
10
|
+
def gitlab(pr_object)
|
11
|
+
new(pr_object, :gitlab)
|
12
|
+
end
|
13
|
+
|
14
|
+
private :new
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :html_url, :number
|
18
|
+
|
19
|
+
# Create a new PR wrapper object setting html_url and number
|
20
|
+
# @param pr_object
|
21
|
+
# The pull request object to wrap as created by Octokit::Client or
|
22
|
+
# Gitlab::Client
|
23
|
+
# @param [Symbol] git_platform
|
24
|
+
# The Git hosting platform against which the pull request is made
|
25
|
+
def initialize(pr_object, git_platform = :github)
|
26
|
+
case git_platform
|
27
|
+
when :github
|
28
|
+
@html_url = pr_object.html_url
|
29
|
+
@number = pr_object.number
|
30
|
+
when :gitlab
|
31
|
+
@html_url = pr_object.web_url
|
32
|
+
@number = pr_object.iid
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
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.4.0'
|
7
7
|
spec.authors = ['Puppet']
|
8
8
|
spec.email = ['']
|
9
9
|
spec.summary = 'Puppet Module PDK Synchronizer'
|
@@ -17,11 +17,12 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_development_dependency 'bundler'
|
20
|
+
spec.add_development_dependency 'bundler', '~> 1.15'
|
21
21
|
spec.add_development_dependency 'rake'
|
22
22
|
spec.add_development_dependency 'rspec'
|
23
23
|
spec.add_development_dependency 'rubocop', '~> 0.50.0'
|
24
24
|
spec.add_development_dependency 'octokit'
|
25
|
+
spec.add_development_dependency 'gitlab'
|
25
26
|
spec.add_development_dependency 'pry'
|
26
27
|
|
27
28
|
spec.add_runtime_dependency 'git', '~>1.3'
|
data/spec/lib/pdksync_spec.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdksync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.15'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.15'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: gitlab
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: pry
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,6 +155,10 @@ files:
|
|
141
155
|
- Rakefile
|
142
156
|
- lib/pdksync.rb
|
143
157
|
- lib/pdksync/constants.rb
|
158
|
+
- lib/pdksync/githubclient.rb
|
159
|
+
- lib/pdksync/gitlabclient.rb
|
160
|
+
- lib/pdksync/gitplatformclient.rb
|
161
|
+
- lib/pdksync/pullrequest.rb
|
144
162
|
- managed_modules.yml
|
145
163
|
- pdksync.gemspec
|
146
164
|
- spec/lib/pdksync_spec.rb
|
@@ -164,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
182
|
version: '0'
|
165
183
|
requirements: []
|
166
184
|
rubyforge_project:
|
167
|
-
rubygems_version: 2.
|
185
|
+
rubygems_version: 2.7.7
|
168
186
|
signing_key:
|
169
187
|
specification_version: 4
|
170
188
|
summary: Puppet Module PDK Synchronizer
|