pdk 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +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 [](https://travis-ci.org/puppetlabs/pdk) [](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
|