fpm-cookery 0.29.0 → 0.30.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e13450b36139981c3b9700c05e8a1cdd307a7d15
4
- data.tar.gz: 36cbf763dd3217ee377eba4e6301d3f74d3825d6
3
+ metadata.gz: 5d4a540ee8894e347b9b30df41f55735f670f565
4
+ data.tar.gz: 974940d490281d11761d8e079e6c0f49df7f968b
5
5
  SHA512:
6
- metadata.gz: 431ea4562cea0993d46c3b05b6f841d933d5263831106b9080c11dee93c735cecb3851ed23b7a6c52f74ca1454e129b94b94d3034cdbe40c342d64976d33e832
7
- data.tar.gz: e5f23c74e1358f45f0bcfb7e35caddfe8c5ac85eb81dfff5bff7016c0ba1c1082e5c1cf64246aea80e6496616f72cfe0ad49e438d1a1668a6718b2d38086b010
6
+ metadata.gz: 6b287616baef2e572014cf0ba9736191b0e50a363e25c54ae05d6f96854e8cf3774b74dc0b6a6c72cf43185798eedcc98bf8c88c359a3e48c9eededb1df73948
7
+ data.tar.gz: 22e6f563aa586c7e771f3fa9c1c172bde1a0fdd5ae420e4c2ea5352f2a83d31136beef972a57f6e5d737f8e4af95a0ebb780bc9eb0fa8d5a91be64414191e27b
@@ -1,3 +1,22 @@
1
+ # v0.30.0 (2015-09-10)
2
+ * Add more lifecylce hooks:
3
+ * `before_package_create`
4
+ * `after_package_create`
5
+ * `before_source_download`
6
+ * `after_source_download`
7
+ * `before_source_extraction`
8
+ * `after_source_extraction`
9
+ * `before_build`
10
+ * `after_build`
11
+ * `before_install`
12
+ * `after_install`
13
+ * Remove some duplication in dependency handling. (glensc / #114)
14
+ * Add `:externals` option to SVN source handler. (glensc / #117)
15
+ * Use heredoc when calling hook script in fpm-cookery recipe. (glensc / #121)
16
+ * Add `sh()` method as an alias for `safesystem()`.
17
+ * Add `install-build-deps` CLI command to install all build dependencies. (cas-ei / #126)
18
+ * Fix no-deps CLI flags for omnibus style builds. (cas-ei / #124 / #125)
19
+
1
20
  # v0.29.0 (2015-07-25)
2
21
  * Start documentation at https://fpm-cookery.readthedocs.org/.
3
22
  The documentation is now included in the source code (`docs/` directory) and
data/README.md CHANGED
@@ -24,6 +24,8 @@ It is using __fpm__ to create the actual packages.
24
24
 
25
25
  Please find the documentation page here: https://fpm-cookery.readthedocs.org/
26
26
 
27
+ The documentation source is located in the `docs/` folder. Pull requests welcome! :)
28
+
27
29
  Hosting and building of the documentation is provided by the great [Read the Docs project](https://readthedocs.org/)!
28
30
 
29
31
  ## Why?
@@ -14,6 +14,33 @@ module FPM
14
14
  @config = config
15
15
  end
16
16
 
17
+ def install_build_deps
18
+ recipe.run_lifecycle_hook(:before_dependency_installation)
19
+ DependencyInspector.verify!([], recipe.build_depends)
20
+ recipe.chain_recipes.each do |name|
21
+ recipe_file = build_recipe_file_path(name)
22
+ unless File.exists?(recipe_file)
23
+ Log.fatal "Cannot find a recipe for #{name} at #{recipe_file}"
24
+ exit 1
25
+ end
26
+ FPM::Cookery::Book.instance.load_recipe(recipe_file, config) do |dep_recipe|
27
+ depPackager = FPM::Cookery::Packager.new(dep_recipe, config.to_hash)
28
+ depPackager.target = FPM::Cookery::Facts.target.to_s
29
+
30
+ #Chain, chain, chain ...
31
+ if dep_recipe.omnibus_package == true
32
+ FPM::Cookery::OmnibusPackager.new(depPackager, config).install_build_deps
33
+ elsif dep_recipe.chain_package == true
34
+ FPM::Cookery::ChainPackager.new(depPackager, config).install_build_deps
35
+ else
36
+ depPackager.install_build_deps
37
+ end
38
+ end
39
+ recipe.run_lifecycle_hook(:after_dependency_installation)
40
+ Log.info("Build dependencies installed!")
41
+ end
42
+ end
43
+
17
44
  def run
18
45
  Log.info "Recipe #{recipe.name} is a chain package; looking for child recipes to build"
19
46
 
@@ -131,6 +131,20 @@ module FPM
131
131
  end
132
132
  end
133
133
 
134
+ class InstallBuildDepsCmd < Command
135
+ parameter '[RECIPE]', 'the recipe file', :default => 'recipe.rb'
136
+
137
+ def exec(config, recipe, packager)
138
+ if recipe.omnibus_package == true
139
+ FPM::Cookery::OmnibusPackager.new(packager, config).install_build_deps
140
+ elsif recipe.chain_package == true
141
+ FPM::Cookery::ChainPackager.new(packager, config).install_build_deps
142
+ else
143
+ packager.install_build_deps
144
+ end
145
+ end
146
+ end
147
+
134
148
  class ShowDepsCmd < Command
135
149
  parameter '[RECIPE]', 'the recipe file', :default => 'recipe.rb'
136
150
 
@@ -144,6 +158,7 @@ module FPM
144
158
  subcommand 'package', 'builds the package', PackageCmd
145
159
  subcommand 'clean', 'cleans up', CleanCmd
146
160
  subcommand 'install-deps', 'installs build and runtime dependencies', InstallDepsCmd
161
+ subcommand 'install-build-deps', 'installs build dependencies', InstallBuildDepsCmd
147
162
  subcommand 'show-deps', 'show build and runtime dependencies', ShowDepsCmd
148
163
  end
149
164
  end
@@ -70,7 +70,7 @@ module FPM
70
70
  :ensure => "present"
71
71
  })
72
72
  result = Puppet::Resource.indirection.save(resource)[1]
73
- failed = Puppet::Resource.indirection.save(resource)[1].resource_statuses.values.first.failed
73
+ failed = result.resource_statuses.values.first.failed
74
74
  if failed
75
75
  Log.fatal "While processing depends package '#{package}':"
76
76
  result.logs.each {|log_line| Log.fatal log_line}
@@ -3,9 +3,9 @@ require 'fpm/cookery/log'
3
3
  module FPM
4
4
  module Cookery
5
5
  module LifecycleHooks
6
- def run_lifecycle_hook(hook_name)
7
- Log.debug("Run lifecycle hook: #{hook_name}")
8
- self.__send__(hook_name)
6
+ def run_lifecycle_hook(hook_name, *args)
7
+ Log.debug("Run lifecycle hook: #{hook_name} (args: #{args.inspect})")
8
+ self.__send__(hook_name, *args)
9
9
  end
10
10
 
11
11
  def before_dependency_installation
@@ -13,6 +13,39 @@ module FPM
13
13
 
14
14
  def after_dependency_installation
15
15
  end
16
+
17
+ def before_source_download
18
+ end
19
+
20
+ def after_source_download
21
+ end
22
+
23
+ def before_source_extraction
24
+ end
25
+
26
+ # Gets a FPM::Cookery::Path object pointing to the extracted source as argument.
27
+ def after_source_extraction(extracted_source)
28
+ end
29
+
30
+ def before_build
31
+ end
32
+
33
+ def after_build
34
+ end
35
+
36
+ def before_install
37
+ end
38
+
39
+ def after_install
40
+ end
41
+
42
+ # Gets a FPM::Package object as argument.
43
+ def before_package_create(package)
44
+ end
45
+
46
+ # Gets a FPM::Package object as argument.
47
+ def after_package_create(package)
48
+ end
16
49
  end
17
50
  end
18
51
  end
@@ -45,6 +45,10 @@ module FPM
45
45
  @output.puts(message)
46
46
  end
47
47
 
48
+ def deprecated(message)
49
+ warn("[DEPRECATED] #{message}")
50
+ end
51
+
48
52
  def <<(event)
49
53
  level = event.fetch(:level, :info).downcase.to_sym
50
54
 
@@ -37,13 +37,23 @@ module FPM
37
37
  dep_recipes
38
38
  end
39
39
 
40
+
41
+ def install_build_deps
42
+ build_deps = load_omnibus_recipes(recipe).map(&:build_depends).flatten.uniq
43
+ recipe.run_lifecycle_hook(:before_dependency_installation)
44
+ DependencyInspector.verify!([], build_deps)
45
+ recipe.run_lifecycle_hook(:after_dependency_installation)
46
+ Log.info("Build dependencies installed!")
47
+ end
48
+
40
49
  def run
41
50
  # Omnibus packages are many builds in one package; e.g. Ruby + Puppet together.
42
51
  Log.info "Recipe #{recipe.name} is an Omnibus package; looking for child recipes to build"
43
52
 
44
53
  dep_recipes = load_omnibus_recipes(recipe)
45
54
  dep_recipes.uniq.each do |dep_recipe|
46
- pkg = FPM::Cookery::Packager.new(dep_recipe, :skip_package => true, :keep_destdir => true)
55
+ pkg = FPM::Cookery::Packager.new(dep_recipe, :skip_package => true,
56
+ :keep_destdir => true, :dependency_check => config.dependency_check )
47
57
  pkg.target = FPM::Cookery::Facts.target.to_s
48
58
 
49
59
  Log.info "Located recipe for child recipe #{dep_recipe.name}; starting build"
@@ -43,6 +43,13 @@ module FPM
43
43
  FileUtils.rm_rf(recipe.destdir)
44
44
  end
45
45
 
46
+ def install_build_deps
47
+ recipe.run_lifecycle_hook(:before_dependency_installation)
48
+ DependencyInspector.verify!([], recipe.build_depends)
49
+ recipe.run_lifecycle_hook(:after_dependency_installation)
50
+ Log.info("Build dependencies installed!")
51
+ end
52
+
46
53
  def install_deps
47
54
  recipe.run_lifecycle_hook(:before_dependency_installation)
48
55
  DependencyInspector.verify!(recipe.depends, recipe.build_depends)
@@ -50,6 +57,7 @@ module FPM
50
57
  Log.info("All dependencies installed!")
51
58
  end
52
59
 
60
+
53
61
  def dispense
54
62
  env = ENV.to_hash
55
63
  package_name = "#{recipe.name}-#{recipe.version}"
@@ -73,8 +81,10 @@ module FPM
73
81
 
74
82
  recipe.cachedir.mkdir
75
83
  Dir.chdir(recipe.cachedir) do
84
+ recipe.run_lifecycle_hook(:before_source_download)
76
85
  Log.info "Fetching source: #{source.source_url}"
77
86
  source.fetch(:quiet => config[:quiet])
87
+ recipe.run_lifecycle_hook(:after_source_download)
78
88
 
79
89
  if source.checksum?
80
90
  SourceIntegrityCheck.new(recipe).tap do |check|
@@ -103,6 +113,7 @@ module FPM
103
113
 
104
114
  recipe.builddir.mkdir
105
115
  Dir.chdir(recipe.builddir) do
116
+ recipe.run_lifecycle_hook(:before_source_extraction)
106
117
  extracted_source = source.extract
107
118
 
108
119
  if recipe.extracted_source
@@ -110,6 +121,8 @@ module FPM
110
121
  extracted_source = recipe.extracted_source
111
122
  end
112
123
 
124
+ recipe.run_lifecycle_hook(:after_source_extraction, recipe.builddir(extracted_source))
125
+
113
126
  Dir.chdir(extracted_source) do
114
127
  #Source::Patches.new(recipe.patches).apply!
115
128
 
@@ -119,8 +132,10 @@ module FPM
119
132
  Log.warn "Skipping build of #{recipe.name} because build cookie found (#{build_cookie})," \
120
133
  " use \"fpm-cook clean\" to rebuild!"
121
134
  else
135
+ recipe.run_lifecycle_hook(:before_build)
122
136
  Log.info "Building in #{File.expand_path(extracted_source, recipe.builddir)}"
123
137
  recipe.build and FileUtils.touch(build_cookie)
138
+ recipe.run_lifecycle_hook(:after_build)
124
139
  end
125
140
 
126
141
  FileUtils.rm_rf(recipe.destdir) unless keep_destdir?
@@ -129,7 +144,9 @@ module FPM
129
144
  begin
130
145
  recipe.installing = true
131
146
  Log.info "Installing into #{recipe.destdir}"
147
+ recipe.run_lifecycle_hook(:before_install)
132
148
  recipe.install
149
+ recipe.run_lifecycle_hook(:after_install)
133
150
  ensure
134
151
  recipe.installing = false
135
152
  end
@@ -170,8 +187,10 @@ module FPM
170
187
 
171
188
  output = input.convert(output_class)
172
189
 
190
+ recipe.run_lifecycle_hook(:before_package_create, output)
173
191
  begin
174
192
  output.output(output.to_s)
193
+ recipe.run_lifecycle_hook(:after_package_create, output)
175
194
  rescue FPM::Package::FileAlreadyExists
176
195
  Log.info "Removing existing package file: #{output.to_s}"
177
196
  FileUtils.rm_f(output.to_s)
@@ -26,7 +26,8 @@ module FPM
26
26
  private
27
27
  def svn(url, path)
28
28
  revision = options[:revision] || 'HEAD'
29
- safesystem('svn', 'export', '--force', '-q', '-r', revision, url, path)
29
+ externals = '--ignore-externals' if !options[:externals]
30
+ safesystem('svn', 'export', '--force', externals, '-q', '-r', revision, url, path)
30
31
  end
31
32
 
32
33
  def extracted_source
@@ -14,8 +14,13 @@ module FPM
14
14
  return success
15
15
  end
16
16
 
17
+ # Alias for safesystem.
18
+ def sh(*args)
19
+ safesystem(*args)
20
+ end
21
+
17
22
  def cleanenv_safesystem(*args)
18
- Log.warn("[DEPRECATED] Use `environment.with_clean { safesystem(...) }` instead of `cleanenv_safesystem(...)` in the recipe")
23
+ Log.deprecated("Use `environment.with_clean { safesystem(...) }` instead of `cleanenv_safesystem(...)` in the recipe")
19
24
  environment.with_clean { safesystem(*args) }
20
25
  end
21
26
 
@@ -1,5 +1,5 @@
1
1
  module FPM
2
2
  module Cookery
3
- VERSION = '0.29.0'
3
+ VERSION = '0.30.0'
4
4
  end
5
5
  end
@@ -21,8 +21,29 @@ class FPMCookery < FPM::Cookery::Recipe
21
21
  destdir('bin').install workdir('fpm-cook.bin'), 'fpm-cook'
22
22
 
23
23
  with_trueprefix do
24
- create_post_install_hook
25
- create_pre_uninstall_hook
24
+ create_post_install_hook <<-EOF
25
+ set -e
26
+
27
+ BIN_PATH="#{destdir}/bin"
28
+ BIN="fpm-cook"
29
+
30
+ update-alternatives --install /usr/bin/$BIN $BIN $BIN_PATH/$BIN 100
31
+
32
+ exit 0
33
+ EOF
34
+
35
+ create_pre_uninstall_hook <<-EOF
36
+ set -e
37
+
38
+ BIN_PATH="#{destdir}/bin"
39
+ BIN="fpm-cook"
40
+
41
+ if [ "$1" != "upgrade" ]; then
42
+ update-alternatives --remove $BIN $BIN_PATH/$BIN
43
+ fi
44
+
45
+ exit 0
46
+ EOF
26
47
  end
27
48
  end
28
49
 
@@ -33,40 +54,16 @@ class FPMCookery < FPM::Cookery::Recipe
33
54
  cleanenv_safesystem "#{destdir}/embedded/bin/gem install --no-ri --no-rdoc #{v} #{name}"
34
55
  end
35
56
 
36
- def create_post_install_hook
57
+ def create_post_install_hook(script, interpreter = "/bin/sh")
37
58
  File.open(builddir('post-install'), 'w', 0755) do |f|
38
- f.write <<-__POSTINST
39
- #!/bin/sh
40
- set -e
41
-
42
- BIN_PATH="#{destdir}/bin"
43
- BIN="fpm-cook"
44
-
45
- update-alternatives --install /usr/bin/$BIN $BIN $BIN_PATH/$BIN 100
46
-
47
- exit 0
48
- __POSTINST
49
-
59
+ f.write "#!#{interpreter}\n" + script.gsub(/^\s+/, '')
50
60
  self.class.post_install(File.expand_path(f.path))
51
61
  end
52
62
  end
53
63
 
54
- def create_pre_uninstall_hook
64
+ def create_pre_uninstall_hook(script, interpreter = "/bin/sh")
55
65
  File.open(builddir('pre-uninstall'), 'w', 0755) do |f|
56
- f.write <<-__PRERM
57
- #!/bin/sh
58
- set -e
59
-
60
- BIN_PATH="#{destdir}/bin"
61
- BIN="fpm-cook"
62
-
63
- if [ "$1" != "upgrade" ]; then
64
- update-alternatives --remove $BIN $BIN_PATH/$BIN
65
- fi
66
-
67
- exit 0
68
- __PRERM
69
-
66
+ f.write "#!#{interpreter}\n" + script.gsub(/^\s+/, '')
70
67
  self.class.pre_uninstall(File.expand_path(f.path))
71
68
  end
72
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm-cookery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.0
4
+ version: 0.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernd Ahlers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-25 00:00:00.000000000 Z
11
+ date: 2015-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -242,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
242
  version: '0'
243
243
  requirements: []
244
244
  rubyforge_project: fpm-cookery
245
- rubygems_version: 2.2.3
245
+ rubygems_version: 2.2.5
246
246
  signing_key:
247
247
  specification_version: 4
248
248
  summary: A tool for building software packages with fpm.