pdk 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 +4 -4
- data/CHANGELOG.md +50 -0
- data/README.md +3 -9
- data/exe/pdk +1 -1
- data/lib/pdk.rb +5 -4
- data/lib/pdk/cli.rb +62 -59
- data/lib/pdk/cli/errors.rb +1 -1
- data/lib/pdk/cli/exec.rb +154 -29
- data/lib/pdk/cli/input.rb +2 -2
- data/lib/pdk/cli/new.rb +12 -27
- data/lib/pdk/cli/new/class.rb +28 -41
- data/lib/pdk/cli/new/module.rb +30 -41
- data/lib/pdk/cli/test.rb +9 -20
- data/lib/pdk/cli/test/unit.rb +38 -0
- data/lib/pdk/cli/util/option_normalizer.rb +45 -19
- data/lib/pdk/cli/util/option_validator.rb +24 -20
- data/lib/pdk/cli/validate.rb +65 -65
- data/lib/pdk/generate.rb +5 -0
- data/lib/pdk/generators/module.rb +37 -33
- data/lib/pdk/generators/puppet_class.rb +1 -1
- data/lib/pdk/generators/puppet_object.rb +19 -20
- data/lib/pdk/logger.rb +1 -1
- data/lib/pdk/module/metadata.rb +35 -18
- data/lib/pdk/module/templatedir.rb +40 -33
- data/lib/pdk/report.rb +76 -19
- data/lib/pdk/report/event.rb +276 -0
- data/lib/pdk/template_file.rb +8 -6
- data/lib/pdk/tests/unit.rb +8 -3
- data/lib/pdk/util.rb +65 -0
- data/lib/pdk/util/bundler.rb +167 -0
- data/lib/pdk/util/version.rb +34 -0
- data/lib/pdk/validate.rb +3 -4
- data/lib/pdk/validators/base_validator.rb +60 -4
- data/lib/pdk/validators/metadata.rb +29 -0
- data/lib/pdk/validators/puppet/puppet_lint.rb +47 -0
- data/lib/pdk/validators/puppet/puppet_parser.rb +34 -0
- data/lib/pdk/validators/puppet_validator.rb +30 -0
- data/lib/pdk/validators/ruby/rubocop.rb +59 -0
- data/lib/pdk/validators/ruby_validator.rb +29 -0
- data/lib/pdk/version.rb +1 -1
- data/lib/puppet/util/windows.rb +14 -0
- data/lib/puppet/util/windows/api_types.rb +278 -0
- data/lib/puppet/util/windows/file.rb +488 -0
- data/lib/puppet/util/windows/string.rb +16 -0
- data/locales/de/pdk.po +263 -78
- data/locales/pdk.pot +224 -65
- metadata +60 -8
- data/lib/pdk/cli/tests/unit.rb +0 -52
- data/lib/pdk/validators/puppet_lint.rb +0 -17
- data/lib/pdk/validators/puppet_parser.rb +0 -17
- data/lib/pdk/validators/ruby_lint.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f22acd513e00856fbadcd4c5090b2787df655426
|
4
|
+
data.tar.gz: 6636287e1acef4c9ba87f52b4b853c922e4ce92b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ce7e0faffaac9a2484c23dc1e88f9b240e0d768d63c8c793439f9a560a95cfa31a8745b510d4c84b83e410639bae7eb004f9d91732fd7740b4650581f71969a
|
7
|
+
data.tar.gz: d7a9e5bae06899f4972add88c8bc49053b257ce7aa10fb38537ea5101ea0e9ceae56e62e212bff6e07e372c558b6f38e9a9dc8ae290a6048d8fb7f72a64ddd0d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
|
6
|
+
## [v0.2.0](https://github.com/puppetlabs/pdk/tree/v0.2.0) (2017-06-21)
|
7
|
+
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v0.1.0...v0.2.0)
|
8
|
+
|
9
|
+
**Implemented enhancements:**
|
10
|
+
|
11
|
+
- \(SDK-137\) Adds Puppet Parser syntax validation [\#94](https://github.com/puppetlabs/pdk/pull/94) ([bmjen](https://github.com/bmjen))
|
12
|
+
- \(SDK-274\) Adds --version option [\#90](https://github.com/puppetlabs/pdk/pull/90) ([bmjen](https://github.com/bmjen))
|
13
|
+
- \(SDK-244\) Add rubocop validation subcommand [\#75](https://github.com/puppetlabs/pdk/pull/75) ([rodjek](https://github.com/rodjek))
|
14
|
+
- \(maint\) Add hints for gem installation [\#74](https://github.com/puppetlabs/pdk/pull/74) ([DavidS](https://github.com/DavidS))
|
15
|
+
- \(SDK-240\) Adds puppet-lint validation subcommand [\#71](https://github.com/puppetlabs/pdk/pull/71) ([bmjen](https://github.com/bmjen))
|
16
|
+
- \(SDK-261\) Manage basic bundler operations for module dev [\#62](https://github.com/puppetlabs/pdk/pull/62) ([scotje](https://github.com/scotje))
|
17
|
+
- \(SDK-232\) Add operatingsystem\_support defaults [\#58](https://github.com/puppetlabs/pdk/pull/58) ([DavidS](https://github.com/DavidS))
|
18
|
+
|
19
|
+
**Fixed bugs:**
|
20
|
+
|
21
|
+
- pdk expects missing git binaries [\#61](https://github.com/puppetlabs/pdk/issues/61)
|
22
|
+
- \(maint\) avoid interfering with local ruby configs [\#86](https://github.com/puppetlabs/pdk/pull/86) ([DavidS](https://github.com/DavidS))
|
23
|
+
- \(SDK-262\) Populate default metadata to match interview defaults [\#63](https://github.com/puppetlabs/pdk/pull/63) ([rodjek](https://github.com/rodjek))
|
24
|
+
- \(maint\) nokogiri: avoid versions without ruby 2.1 support [\#60](https://github.com/puppetlabs/pdk/pull/60) ([DavidS](https://github.com/DavidS))
|
25
|
+
|
26
|
+
## [v0.1.0](https://github.com/puppetlabs/pdk/tree/v0.1.0) (2017-06-05)
|
27
|
+
[Full Changelog](https://github.com/puppetlabs/pdk/compare/2be9329bed4715c888f273814b99f2cf37ee9341...v0.1.0)
|
28
|
+
|
29
|
+
**Implemented enhancements:**
|
30
|
+
|
31
|
+
- \(maint\) update Contributing section [\#56](https://github.com/puppetlabs/pdk/pull/56) ([DavidS](https://github.com/DavidS))
|
32
|
+
- \(SDK-197\) Add 'new class' generator command [\#48](https://github.com/puppetlabs/pdk/pull/48) ([rodjek](https://github.com/rodjek))
|
33
|
+
- \(SDK-201\) Add 'new module' generator command [\#41](https://github.com/puppetlabs/pdk/pull/41) ([rodjek](https://github.com/rodjek))
|
34
|
+
- \(maint\) make debug output optional [\#40](https://github.com/puppetlabs/pdk/pull/40) ([rodjek](https://github.com/rodjek))
|
35
|
+
- \(maint\) Print help for 'new' command if no type provided [\#35](https://github.com/puppetlabs/pdk/pull/35) ([rodjek](https://github.com/rodjek))
|
36
|
+
- \(SDK-214\) Add gettext and externalize strings [\#32](https://github.com/puppetlabs/pdk/pull/32) ([scotje](https://github.com/scotje))
|
37
|
+
- \(SDK-178\) interactive license and module name query [\#30](https://github.com/puppetlabs/pdk/pull/30) ([DavidS](https://github.com/DavidS))
|
38
|
+
- \(SDK-200\) Add user interview for `new module` info gathering [\#26](https://github.com/puppetlabs/pdk/pull/26) ([whopper](https://github.com/whopper))
|
39
|
+
- \(maint\) Replace --report-\* options with --format. [\#24](https://github.com/puppetlabs/pdk/pull/24) ([whopper](https://github.com/whopper))
|
40
|
+
- \(SDK-191\) Allow validators and targets as arguments rather than options [\#22](https://github.com/puppetlabs/pdk/pull/22) ([whopper](https://github.com/whopper))
|
41
|
+
- \(SDK-185\) Include the command in usage help output [\#19](https://github.com/puppetlabs/pdk/pull/19) ([james-stocks](https://github.com/james-stocks))
|
42
|
+
|
43
|
+
**Fixed bugs:**
|
44
|
+
|
45
|
+
- \(maint\) use correct basedir for windows execs [\#51](https://github.com/puppetlabs/pdk/pull/51) ([DavidS](https://github.com/DavidS))
|
46
|
+
- \(maint\) Update pdk.gemspec to not depend on git to assign files. [\#27](https://github.com/puppetlabs/pdk/pull/27) ([scotje](https://github.com/scotje))
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# pdk [![
|
1
|
+
# pdk [![Build Status](https://travis-ci.org/puppetlabs/pdk.svg?branch=master)](https://travis-ci.org/puppetlabs/pdk) [![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/x70e2fqllbaootpd?svg=true)](https://ci.appveyor.com/project/puppetlabs/pdk)
|
2
2
|
|
3
3
|
|
4
4
|
A CLI to facilitate easy, unified development workflows for Puppet modules. pdk is a key part of the Puppet Development Kit, the shortest path to better modules.
|
@@ -11,6 +11,8 @@ A CLI to facilitate easy, unified development workflows for Puppet modules. pdk
|
|
11
11
|
$ gem install pdk
|
12
12
|
```
|
13
13
|
|
14
|
+
For default usage, you'll also need to have `git`, and `bundle` (from [bundler](http://bundler.io/)) on your system PATH.
|
15
|
+
|
14
16
|
## Usage
|
15
17
|
|
16
18
|
### Generate a new module
|
@@ -252,14 +254,6 @@ Specifies options to pass through to the actual test-runner. In the default temp
|
|
252
254
|
|
253
255
|
## Contributing
|
254
256
|
|
255
|
-
To run the `pdk` tool directly from the repository, set the environment variable `PDK_USE_SYSTEM_BINARIES` to `true`. This causes it to use the system installed binaries, instead of relying on the puppet-sdk-vanagon packaging. Currently required is a ruby (2.1, or later), and git.
|
256
|
-
|
257
|
-
```
|
258
|
-
PowerShell: $env:PDK_USE_SYSTEM_BINARIES = "true"
|
259
|
-
cmd.exe: set PDK_USE_SYSTEM_BINARIES=true
|
260
|
-
bash: export PDK_USE_SYSTEM_BINARIES=true
|
261
|
-
```
|
262
|
-
|
263
257
|
In cases where `pdk` needs to run in a working directory outside the cloned repository, either set `BUNDLE_GEMFILE` to the pdk's Gemfile location, or install and use the [binstubs of bundler](http://bundler.io/v1.15/bundle_binstubs.html), which are small proxy binaries, that set up the environment for running the tool.
|
264
258
|
|
265
259
|
```
|
data/exe/pdk
CHANGED
data/lib/pdk.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'pdk/version'
|
2
|
-
require 'pdk/logger'
|
3
|
-
require 'pdk/i18n'
|
4
1
|
require 'pdk/generate'
|
5
|
-
require 'pdk/
|
2
|
+
require 'pdk/i18n'
|
3
|
+
require 'pdk/logger'
|
6
4
|
require 'pdk/report'
|
5
|
+
require 'pdk/template_file'
|
6
|
+
require 'pdk/validate'
|
7
|
+
require 'pdk/version'
|
7
8
|
|
8
9
|
module PDK; end
|
data/lib/pdk/cli.rb
CHANGED
@@ -1,80 +1,83 @@
|
|
1
1
|
require 'cri'
|
2
2
|
|
3
3
|
require 'pdk/cli/errors'
|
4
|
-
require 'pdk/cli/util/option_validator'
|
5
4
|
require 'pdk/cli/util/option_normalizer'
|
5
|
+
require 'pdk/cli/util/option_validator'
|
6
|
+
require 'pdk/generators/module'
|
7
|
+
require 'pdk/i18n'
|
6
8
|
require 'pdk/logger'
|
7
9
|
require 'pdk/report'
|
10
|
+
require 'pdk/util/version'
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
module CLI
|
15
|
-
def self.base_command
|
16
|
-
@base ||= Cri::Command.new.tap do |cmd|
|
17
|
-
cmd.modify do
|
18
|
-
name 'pdk'
|
19
|
-
usage _("pdk command [options]")
|
20
|
-
summary _("Puppet Development Kit")
|
21
|
-
description _("The shortest path to better modules.")
|
22
|
-
|
23
|
-
flag :h, :help, _("show help for this command") do |_, c|
|
24
|
-
puts c.help
|
25
|
-
exit 0
|
26
|
-
end
|
12
|
+
module PDK::CLI
|
13
|
+
def self.run(args)
|
14
|
+
@base_cmd.run(args)
|
15
|
+
rescue PDK::CLI::FatalError => e
|
16
|
+
PDK.logger.fatal(e.message) if e.message
|
27
17
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
18
|
+
# If FatalError was raised as the result of another exception, send the
|
19
|
+
# details of that exception to the debug log. If there was no cause
|
20
|
+
# (FatalError raised on its own outside a rescue block), send the details
|
21
|
+
# of the FatalError exception to the debug log.
|
22
|
+
cause = e.cause
|
23
|
+
if cause.nil?
|
24
|
+
e.backtrace.each { |line| PDK.logger.debug(line) }
|
25
|
+
else
|
26
|
+
PDK.logger.debug("#{cause.class}: #{cause.message}")
|
27
|
+
cause.backtrace.each { |line| PDK.logger.debug(line) }
|
28
|
+
end
|
34
29
|
|
35
|
-
|
36
|
-
|
37
|
-
if v.include?(':')
|
38
|
-
format = v.split(':', 2).first
|
30
|
+
exit e.exit_code
|
31
|
+
end
|
39
32
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
33
|
+
def self.template_url_option(dsl)
|
34
|
+
dsl.option nil, 'template-url', _('Specifies the URL to the template to use when creating new modules, and other parts.'), argument: :required, default: PDK::Generate::Module::DEFAULT_TEMPLATE
|
35
|
+
end
|
46
36
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
37
|
+
@base_cmd = Cri::Command.define do
|
38
|
+
name 'pdk'
|
39
|
+
usage _('pdk command [options]')
|
40
|
+
summary _('Puppet Development Kit')
|
41
|
+
description _('The shortest path to better modules.')
|
42
|
+
default_subcommand 'help'
|
51
43
|
|
52
|
-
|
44
|
+
flag nil, :version, _('show version of pdk') do |_, _|
|
45
|
+
puts PDK::Util::Version.version_string
|
46
|
+
exit 0
|
47
|
+
end
|
53
48
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
end
|
49
|
+
flag :h, :help, _('show help for this command') do |_, c|
|
50
|
+
puts c.help
|
51
|
+
exit 0
|
58
52
|
end
|
59
53
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
54
|
+
format_desc = _(
|
55
|
+
"Specify desired output format. Valid formats are '%{available_formats}'. " \
|
56
|
+
'You may also specify a file to which the formatted output will be directed, ' \
|
57
|
+
"for example: '--format=junit:report.xml'. This option may be specified " \
|
58
|
+
'multiple times as long as each option specifies a distinct target file.',
|
59
|
+
) % { available_formats: PDK::Report.formats.join("', '") }
|
64
60
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
cause.backtrace.each { |line| PDK.logger.debug(line) }
|
61
|
+
option :f, :format, format_desc, argument: :required, multiple: true do |values|
|
62
|
+
values.compact.each do |v|
|
63
|
+
if v.include?(':')
|
64
|
+
format = v.split(':', 2).first
|
65
|
+
|
66
|
+
Util::OptionValidator.enum(format, PDK::Report.formats)
|
67
|
+
else
|
68
|
+
Util::OptionValidator.enum(v, PDK::Report.formats)
|
69
|
+
end
|
75
70
|
end
|
71
|
+
end
|
76
72
|
|
77
|
-
|
73
|
+
flag :d, :debug, _('Enable debug output.') do |_, _|
|
74
|
+
PDK.logger.enable_debug_output
|
78
75
|
end
|
79
76
|
end
|
77
|
+
|
78
|
+
require 'pdk/cli/new'
|
79
|
+
require 'pdk/cli/test'
|
80
|
+
require 'pdk/cli/validate'
|
81
|
+
|
82
|
+
@base_cmd.add_command Cri::Command.new_basic_help
|
80
83
|
end
|
data/lib/pdk/cli/errors.rb
CHANGED
@@ -3,7 +3,7 @@ module PDK
|
|
3
3
|
class FatalError < StandardError
|
4
4
|
attr_reader :exit_code
|
5
5
|
|
6
|
-
def initialize(msg = _(
|
6
|
+
def initialize(msg = _('An unexpected error has occurred, try running the command again with --debug'), exit_code = 1)
|
7
7
|
@exit_code = exit_code
|
8
8
|
super(msg)
|
9
9
|
end
|
data/lib/pdk/cli/exec.rb
CHANGED
@@ -1,50 +1,175 @@
|
|
1
|
+
require 'bundler'
|
1
2
|
require 'childprocess'
|
2
3
|
require 'tempfile'
|
4
|
+
require 'tty-spinner'
|
3
5
|
|
4
6
|
module PDK
|
5
7
|
module CLI
|
6
8
|
module Exec
|
7
|
-
# TODO: decide how to handle multiple output targets when underlying tool doesn't support that
|
8
|
-
# TODO: decide what this method should return
|
9
|
-
# TODO: decide how/when to connect stdin to child process for things like pry
|
10
9
|
def self.execute(*cmd)
|
11
|
-
|
10
|
+
Command.new(*cmd).execute!
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
def self.pdk_basedir
|
14
|
+
@pdk_basedir ||= Gem.win_platform? ? 'C:/Program Files/Puppet Labs/DevelopmentKit' : '/opt/puppetlabs/sdk'
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
def self.git_bindir
|
18
|
+
@git_dir ||= File.join(pdk_basedir, 'private', 'git', Gem.win_platform? ? 'cmd' : 'bin')
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
def self.git(*args)
|
22
|
+
git_bin = Gem.win_platform? ? 'git.exe' : 'git'
|
23
|
+
vendored_bin_path = File.join(git_bindir, git_bin)
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
execute(try_vendored_bin(vendored_bin_path, git_bin), *args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.bundle(*args)
|
29
|
+
bundle_bin = Gem.win_platform? ? 'bundle.bat' : 'bundle'
|
30
|
+
vendored_bin_path = File.join(pdk_basedir, 'private', 'ruby', '2.1.9', 'bin', bundle_bin)
|
29
31
|
|
30
|
-
|
31
|
-
:exit_code => process.exit_code,
|
32
|
-
:stdout => stdout,
|
33
|
-
:stderr => stderr
|
34
|
-
}
|
32
|
+
execute(try_vendored_bin(vendored_bin_path, bundle_bin), *args)
|
35
33
|
end
|
36
34
|
|
37
|
-
def self.
|
38
|
-
|
35
|
+
def self.bundle_bin
|
36
|
+
bundle_bin = Gem.win_platform? ? 'bundle.bat' : 'bundle'
|
37
|
+
vendored_bin_path = File.join(pdk_basedir, 'private', 'ruby', '2.1.9', 'bin', bundle_bin)
|
38
|
+
|
39
|
+
try_vendored_bin(vendored_bin_path, bundle_bin)
|
39
40
|
end
|
40
41
|
|
41
|
-
def self.
|
42
|
-
|
42
|
+
def self.try_vendored_bin(vendored_bin_path, fallback)
|
43
|
+
if File.exist?(vendored_bin_path)
|
44
|
+
PDK.logger.debug(_("Using '%{vendored_bin_path}'") % { fallback: fallback, vendored_bin_path: vendored_bin_path })
|
45
|
+
vendored_bin_path
|
46
|
+
else
|
47
|
+
PDK.logger.debug(_("Trying '%{fallback}' from the system PATH, instead of '%{vendored_bin_path}'") % { fallback: fallback, vendored_bin_path: vendored_bin_path })
|
48
|
+
fallback
|
49
|
+
end
|
43
50
|
end
|
44
51
|
|
45
|
-
|
46
|
-
|
47
|
-
|
52
|
+
# TODO: decide how/when to connect stdin to child process for things like pry
|
53
|
+
# TODO: need a way to set callbacks on new stdout/stderr data
|
54
|
+
class Command
|
55
|
+
attr_reader :argv
|
56
|
+
attr_reader :context
|
57
|
+
attr_accessor :timeout
|
58
|
+
|
59
|
+
def initialize(*argv)
|
60
|
+
@argv = argv
|
61
|
+
|
62
|
+
@process = ChildProcess.build(*@argv)
|
63
|
+
@process.leader = true
|
64
|
+
|
65
|
+
@stdout = Tempfile.new('stdout').tap { |io| io.sync = true }
|
66
|
+
@stderr = Tempfile.new('stderr').tap { |io| io.sync = true }
|
67
|
+
|
68
|
+
@process.io.stdout = @stdout
|
69
|
+
@process.io.stderr = @stderr
|
70
|
+
|
71
|
+
# Default to running things in the system context.
|
72
|
+
@context = :system
|
73
|
+
end
|
74
|
+
|
75
|
+
def context=(new_context)
|
76
|
+
unless [:system, :module].include?(new_context)
|
77
|
+
raise ArgumentError, _("Expected execution context to be :system or :module but got '%{context}'") % { context: new_contenxt }
|
78
|
+
end
|
79
|
+
|
80
|
+
@context = new_context
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_spinner(message, opts = {})
|
84
|
+
@success_message = opts.delete(:success)
|
85
|
+
@failure_message = opts.delete(:failure)
|
86
|
+
|
87
|
+
@spinner = TTY::Spinner.new("[:spinner] #{message}", opts)
|
88
|
+
end
|
89
|
+
|
90
|
+
def execute!
|
91
|
+
# Start spinning if configured.
|
92
|
+
@spinner.auto_spin if @spinner
|
93
|
+
|
94
|
+
if context == :module
|
95
|
+
# TODO: we should probably more carefully manage PATH and maybe other things too
|
96
|
+
@process.environment['GEM_HOME'] = File.join(PDK::Util.cachedir, 'bundler', 'ruby', RbConfig::CONFIG['ruby_version'])
|
97
|
+
@process.environment['GEM_PATH'] = pdk_gem_path
|
98
|
+
|
99
|
+
Dir.chdir(PDK::Util.module_root) do
|
100
|
+
::Bundler.with_clean_env do
|
101
|
+
run_process!
|
102
|
+
end
|
103
|
+
end
|
104
|
+
else
|
105
|
+
run_process!
|
106
|
+
end
|
107
|
+
|
108
|
+
# Stop spinning when done (if configured).
|
109
|
+
if @spinner
|
110
|
+
if @process.exit_code.zero?
|
111
|
+
@spinner.success(@success_message || '')
|
112
|
+
else
|
113
|
+
@spinner.error(@failure_message || '')
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
@stdout.rewind
|
118
|
+
@stderr.rewind
|
119
|
+
|
120
|
+
process_data = {
|
121
|
+
stdout: @stdout.read,
|
122
|
+
stderr: @stderr.read,
|
123
|
+
exit_code: @process.exit_code,
|
124
|
+
}
|
125
|
+
|
126
|
+
return process_data
|
127
|
+
ensure
|
128
|
+
@stdout.close
|
129
|
+
@stderr.close
|
130
|
+
end
|
131
|
+
|
132
|
+
protected
|
133
|
+
|
134
|
+
def run_process!
|
135
|
+
begin
|
136
|
+
@process.start
|
137
|
+
rescue ChildProcess::LaunchError => e
|
138
|
+
msg = if @process.respond_to?(:argv)
|
139
|
+
_("Failed to execute '%{command}': %{message}") % { command: @process.argv.join(' '), message: e.message }
|
140
|
+
else
|
141
|
+
_('Failed to execute process: %{message}') % { message: e.message }
|
142
|
+
end
|
143
|
+
raise PDK::CLI::FatalError, msg
|
144
|
+
end
|
145
|
+
|
146
|
+
if timeout
|
147
|
+
begin
|
148
|
+
@process.poll_for_exit(timeout)
|
149
|
+
rescue ChildProcess::TimeoutError
|
150
|
+
@process.stop # tries increasingly harsher methods to kill the process.
|
151
|
+
end
|
152
|
+
else
|
153
|
+
# Wait indfinitely if no timeout set.
|
154
|
+
@process.wait
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def pdk_gem_path
|
159
|
+
@pdk_gem_path ||= find_pdk_gem_path
|
160
|
+
end
|
161
|
+
|
162
|
+
def find_pdk_gem_path
|
163
|
+
# /opt/puppetlabs/sdk/private/ruby/2.1.9/lib/ruby/gems/2.1.0
|
164
|
+
package_gem_path = File.join(PDK::CLI::Exec.pdk_basedir, 'private', 'ruby', RUBY_VERSION, 'lib', 'ruby', 'gems', RbConfig::CONFIG['ruby_version'])
|
165
|
+
|
166
|
+
if File.directory?(package_gem_path)
|
167
|
+
package_gem_path
|
168
|
+
else
|
169
|
+
# FIXME: calculate this more reliably
|
170
|
+
File.absolute_path(File.join(`bundle show bundler`, '..', '..'))
|
171
|
+
end
|
172
|
+
end
|
48
173
|
end
|
49
174
|
end
|
50
175
|
end
|