dock0 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4ef255c069bf314b8c1f1108d0215ca2d42b94f
4
- data.tar.gz: bc3b05cfc4b6da6e16860c5506d80689e9009dd2
3
+ metadata.gz: 83c126fbfd1dce025ab4e55c8d5824c78427bfe5
4
+ data.tar.gz: b23d2424d470c95e2528b5abbc640c439b903c5f
5
5
  SHA512:
6
- metadata.gz: 7d021f20b9729deb9548d7507c7b5b41d213fbc40a9317e46301f87899c8882554dda8e6686a85fc9df33c37f2978c8b569423fe6777708802da98b8421012e8
7
- data.tar.gz: 7002494fe80e3ad94343c5fd0a8d2ee49965bc569acdd873e280c2867f02295dd1b448180b8f359cbca52e397745d3a8b23f681e65293045f18b957fa3992f01
6
+ metadata.gz: 10e63b9f04934b722d6aac4b2ea9e87a409c4c55b464cf6c668542ca1592302d541243c4847ffc935b6220f288f44dfec4999b8aa57e229fff0d7891826c7e77
7
+ data.tar.gz: c64d88a22c91e0ce3be3fde0fe971d474d067f35fbe19f193fb0d3088be45afa75560e4720a3cf2549c6fbd858bec5cb7802f31a659e0f6fa8120079277dc2bb
data/dock0.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency 'mercenary', '~> 0.3.4'
21
21
  s.add_dependency 'menagerie', '~> 1.0.0'
22
22
  s.add_dependency 'meld', '~> 1.0.0'
23
+ s.add_dependency 'cymbal', '~> 1.0.0'
23
24
 
24
25
  s.add_development_dependency 'rubocop', '~> 0.29.0'
25
26
  s.add_development_dependency 'rake', '~> 10.4.0'
data/lib/dock0.rb CHANGED
@@ -2,6 +2,7 @@ require 'yaml'
2
2
  require 'English'
3
3
  require 'fileutils'
4
4
  require 'meld'
5
+ require 'cymbal'
5
6
 
6
7
  ##
7
8
  # Dock0 provides an interface for building Arch images
@@ -31,17 +32,13 @@ module Dock0
31
32
  @config = configs.each_with_object(default_config) do |path, obj|
32
33
  new = YAML.load(File.read(path))
33
34
  next unless new
34
- obj.deep_merge! new
35
+ obj.deep_merge! Cymbal.symbolize(new)
35
36
  end
36
- @paths = @config['paths']
37
+ @paths = @config[:paths]
37
38
  end
38
39
 
39
40
  def default_config
40
- {
41
- 'paths' => {
42
- 'scripts' => './scripts'
43
- }
44
- }
41
+ { paths: { scripts: './scripts' } }
45
42
  end
46
43
 
47
44
  def run(cmd)
@@ -51,7 +48,7 @@ module Dock0
51
48
  end
52
49
 
53
50
  def templates
54
- Dir.chdir(@paths['templates']) do
51
+ Dir.chdir(@paths[:templates]) do
55
52
  Dir.glob('**/*').select { |x| File.file? x }
56
53
  end
57
54
  end
@@ -59,10 +56,10 @@ module Dock0
59
56
  def render_templates(prefix)
60
57
  templates.each do |path|
61
58
  puts "Templating #{path}"
62
- template = File.read "#{@paths['templates']}/#{path}"
59
+ template = File.read "#{@paths[:templates]}/#{path}"
63
60
  parsed = ERB.new(template, nil, '<>').result(binding)
64
61
 
65
- target_path = "#{@paths['build']}/#{prefix}/#{path}"
62
+ target_path = "#{@paths[:build]}/#{prefix}/#{path}"
66
63
  FileUtils.mkdir_p File.dirname(target_path)
67
64
  File.open(target_path, 'w') { |fh| fh.write parsed }
68
65
  end
@@ -73,7 +70,7 @@ module Dock0
73
70
  end
74
71
 
75
72
  def run_scripts
76
- Dir.glob(@paths['scripts'] + '/*.rb').sort.each do |script|
73
+ Dir.glob(@paths[:scripts] + '/*.rb').sort.each do |script|
77
74
  puts "Running #{script}"
78
75
  run_script script
79
76
  end
data/lib/dock0/config.rb CHANGED
@@ -7,29 +7,29 @@ module Dock0
7
7
  class Config < Base
8
8
  def default_config
9
9
  {
10
- 'paths' => {
11
- 'templates' => './templates',
12
- 'scripts' => './scripts',
13
- 'build' => './build/config',
14
- 'output' => './build.tar.gz'
10
+ paths: {
11
+ templates: './templates',
12
+ scripts: './scripts',
13
+ build: './build/config',
14
+ output: './build.tar.gz'
15
15
  }
16
16
  }
17
17
  end
18
18
 
19
19
  def finalize
20
- puts "Packing config into #{@paths['output']}"
21
- tar = Dir.chdir(File.dirname(@paths['build'])) do
20
+ puts "Packing config into #{@paths[:output]}"
21
+ tar = Dir.chdir(File.dirname(@paths[:build])) do
22
22
  run 'tar -cz --owner=root --group=root *'
23
23
  end
24
- File.open(@paths['output'], 'w') { |fh| fh << tar }
24
+ File.open(@paths[:output], 'w') { |fh| fh << tar }
25
25
  end
26
26
 
27
27
  def easy_mode
28
- cleanup @paths.values_at('build', 'output')
28
+ cleanup @paths.values_at(:build, :output)
29
29
  render_templates('templates')
30
30
  run_scripts
31
31
  finalize
32
- cleanup @paths.values_at('build')
32
+ cleanup @paths.values_at(:build)
33
33
  end
34
34
  end
35
35
  end
data/lib/dock0/image.rb CHANGED
@@ -6,58 +6,58 @@ module Dock0
6
6
  class Image < Base
7
7
  def default_config # rubocop:disable Metrics/MethodLength
8
8
  {
9
- 'paths' => {
10
- 'build_file' => './root.fs',
11
- 'build' => './build',
12
- 'package_list' => './packages',
13
- 'overlay' => './overlay',
14
- 'scripts' => './scripts',
15
- 'output' => './root.fs.sfs'
9
+ paths: {
10
+ build_file: './root.fs',
11
+ build: './build',
12
+ package_list: './packages',
13
+ overlay: './overlay',
14
+ scripts: './scripts',
15
+ output: './root.fs.sfs'
16
16
  },
17
- 'fs' => {
18
- 'size' => 512,
19
- 'type' => 'ext4',
20
- 'flags' => '-F'
17
+ fs: {
18
+ size: 512,
19
+ type: 'ext4',
20
+ flags: '-F'
21
21
  }
22
22
  }
23
23
  end
24
24
 
25
25
  def run_chroot(cmd)
26
- run "arch-chroot #{@paths['build']} #{cmd}"
26
+ run "arch-chroot #{@paths[:build]} #{cmd}"
27
27
  end
28
28
 
29
29
  def prepare_root
30
- build_file = @paths['build_file']
31
- filesystem = @config['fs']
30
+ build_file = @paths[:build_file]
31
+ filesystem = @config[:fs]
32
32
  puts "Making build FS at #{build_file}"
33
- run "dd if=/dev/zero of=#{build_file} bs=1MB count=#{filesystem['size']}"
34
- mkfs = "mkfs.#{filesystem['type']} #{filesystem['flags']}"
33
+ run "dd if=/dev/zero of=#{build_file} bs=1MB count=#{filesystem[:size]}"
34
+ mkfs = "mkfs.#{filesystem[:type]} #{filesystem[:flags]}"
35
35
  run "#{mkfs} #{build_file}"
36
- puts "Mounting FS at #{@paths['build']}"
37
- FileUtils.mkdir_p @paths['build']
38
- run "mount #{build_file} #{@paths['build']}"
36
+ puts "Mounting FS at #{@paths[:build]}"
37
+ FileUtils.mkdir_p @paths[:build]
38
+ run "mount #{build_file} #{@paths[:build]}"
39
39
  end
40
40
 
41
41
  def install_packages
42
- File.read(@paths['package_list']).split("\n").each do |package|
42
+ File.read(@paths[:package_list]).split("\n").each do |package|
43
43
  puts "Installing #{package}"
44
- run "pacstrap -G -M #{@paths['build']} #{package}"
44
+ run "pacstrap -G -M #{@paths[:build]} #{package}"
45
45
  end
46
46
  end
47
47
 
48
48
  def apply_overlay
49
- puts "Applying overlay from #{@paths['overlay']}"
50
- overlay_path = @paths['overlay'] + '/.'
51
- FileUtils.cp_r overlay_path, @paths['build']
49
+ puts "Applying overlay from #{@paths[:overlay]}"
50
+ overlay_path = @paths[:overlay] + '/.'
51
+ FileUtils.cp_r overlay_path, @paths[:build]
52
52
  end
53
53
 
54
54
  def run_commands
55
- cmds = @config.fetch('commands', {})
56
- cmds.fetch('chroot', []).each do |cmd|
55
+ cmds = @config.fetch(:commands, {})
56
+ cmds.fetch(:chroot, []).each do |cmd|
57
57
  puts "Running #{cmd} in chroot"
58
58
  run_chroot cmd
59
59
  end
60
- cmds.fetch('host', []).each do |cmd|
60
+ cmds.fetch(:host, []).each do |cmd|
61
61
  puts "Running #{cmd} on host"
62
62
  run cmd
63
63
  end
@@ -65,20 +65,20 @@ module Dock0
65
65
 
66
66
  def finalize
67
67
  puts 'Packing up root FS'
68
- run "umount #{@paths['build']}"
69
- FileUtils.rm_f @paths['output']
70
- run "mksquashfs #{@paths['build_file']} #{@paths['output']}"
68
+ run "umount #{@paths[:build]}"
69
+ FileUtils.rm_f @paths[:output]
70
+ run "mksquashfs #{@paths[:build_file]} #{@paths[:output]}"
71
71
  end
72
72
 
73
73
  def easy_mode
74
- cleanup @paths.values_at('build_file', 'build', 'output')
74
+ cleanup @paths.values_at(:build_file, :build, :output)
75
75
  prepare_root
76
76
  install_packages
77
77
  apply_overlay
78
78
  run_scripts
79
79
  run_commands
80
80
  finalize
81
- cleanup @paths.values_at('build_file', 'build')
81
+ cleanup @paths.values_at(:build_file, :build)
82
82
  end
83
83
  end
84
84
  end
data/lib/dock0/install.rb CHANGED
@@ -7,33 +7,33 @@ module Dock0
7
7
  class Install < Base
8
8
  def default_config
9
9
  {
10
- 'paths' => {
11
- 'templates' => './templates',
12
- 'scripts' => './scripts',
13
- 'build' => './build',
14
- 'base' => '/'
10
+ paths: {
11
+ templates: './templates',
12
+ scripts: './scripts',
13
+ build: './build',
14
+ base: '/'
15
15
  },
16
- 'org' => 'dock0',
17
- 'artifacts' => []
16
+ org: 'dock0',
17
+ artifacts: []
18
18
  }
19
19
  end
20
20
 
21
21
  def build_url(artifact)
22
- org = artifact['org'] || @config['org']
23
- name, version, file = artifact.values_at('name', 'version', 'file')
22
+ org = artifact[:org] || @config[:org]
23
+ name, version, file = artifact.values_at(:name, :version, :file)
24
24
  "https://github.com/#{org}/#{name}/releases/download/#{version}/#{file}"
25
25
  end
26
26
 
27
27
  def artifacts
28
- @config['artifacts'].map do |artifact|
29
- artifact['url'] ||= build_url(artifact)
28
+ @config[:artifacts].map do |artifact|
29
+ artifact[:url] ||= build_url(artifact)
30
30
  artifact
31
31
  end
32
32
  end
33
33
 
34
34
  def load_artifacts
35
- Dir.chdir("#{@paths['build']}/#{@paths['base']}") do
36
- menagerie = Menagerie.new @config['menagerie']
35
+ Dir.chdir("#{@paths[:build]}/#{@paths[:base]}") do
36
+ menagerie = Menagerie.new @config[:menagerie]
37
37
  menagerie.create artifacts
38
38
  end
39
39
  end
data/lib/dock0/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ##
2
2
  # Set the version (needed for Mercenary -v)
3
3
  module Dock0
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dock0
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-28 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mercenary
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: cymbal
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rubocop
57
71
  requirement: !ruby/object:Gem::Requirement