fpm-dockery 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c935a1fef8fa2087d31346840b6485bc572ec539
4
+ data.tar.gz: 9d200efd489fd6d69d29ecdf16d15eed9ed9e929
5
+ SHA512:
6
+ metadata.gz: 9ba023b1e3175338547cb678b8b7601d6d2fccb59c50fa942d7d01de325ca78a7d07b8d53aee03ac445edf3ee3cc1b427870a8300152d8c9a556eecab5518081
7
+ data.tar.gz: f6084650e84dc08246ada4911a3b1f22c2ac86e2ab869ae74474a75137212f5e5d244ddd3b3c400b302209548ce18e2b83f819a590bbfa5b9404e8940862944b
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /example_recipe/pkg
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ fpm-dockery
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fpm-dockery.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Andy Sykes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # fpm-dockery
2
+
3
+ Build [fpm-cookery](https://github.com/forward3d/fpm-cookery) recipes with Docker!
4
+
5
+ ## What is this?
6
+
7
+ This is a terribly-named wrapper around [fpm-cookery](https://github.com/forward3d/fpm-cookery)
8
+ that allows you to run fpm-cookery builds inside a container. I wrote this to allow me to run package builds
9
+ in development on my laptop in the same way that Jenkins runs them, and to allow easy building of packages
10
+ for a variety of Linux distributions.
11
+
12
+ ## Why would you use this?
13
+
14
+ If you are building your own operating system packages, you should be running them in a clean
15
+ environment every time. fpm-cookery is a superb tool for expressing the process of building and packaging
16
+ using fpm, but it provides no real functionality for working in a clean environment.
17
+
18
+ With the advent of [Docker](https://www.docker.com/), it is fast and easy to bring up an isolated
19
+ environment (a container) to perform the package building in. It also allows your CI server to perform
20
+ a very simple invocation to build packages (`fpm-dockery build recipe.rb ubuntu12.04`), and allows you
21
+ to run the same build on your development machine in the same way.
22
+
23
+ If a build fails, you can easily re-run the container and be dropped into the state where the build failed.
24
+ This makes it very easy to troubleshoot why a build is failing.
25
+
26
+ ## How does it work?
27
+
28
+ `fpm-dockery` has the notion of 'builder' images. These are specially prepared Docker images that
29
+ contain enough tooling to get `fpm-cookery` working, along with `fpm-cookery` itself.
30
+
31
+ You can see the Dockerfiles used to generate these images in the
32
+ [`docker` directory](https://github.com/andytinycat/fpm-dockery/tree/master/docker) of this
33
+ repository.
34
+
35
+ __NOTE: if you'd like to see more distributions supported, please contribute a Dockerfile in
36
+ a pull request - it will be welcomed! I went with what I know and use, but Centos/Fedora support should
37
+ be fairly trivial.__
38
+
39
+ These 'builder' images launch `fpm-cook` with specifically-crafted arguments to ensure a clean
40
+ build each time - and each build takes place in a new container created from the 'builder' image.
41
+
42
+ The containers launch with two volumes attached - one volume is the directory containing the recipe,
43
+ and the other volume is the output directory for the packages. The arguments supplied to `fpm-cook`
44
+ ensure packages are placed in the correct location.
45
+
46
+ ## Limitations
47
+
48
+ The following limitations are imposed on recipes you use with `fpm-dockery`:
49
+
50
+ * If a recipe includes external files, these files must be in the same directory
51
+ as the recipe file, or any number of subdirectories below where the recipe file is located.
52
+ This is because the directory containing the recipe is mounted inside the Docker container
53
+ when a build occurs, so files in this directory or lower can be referenced.
54
+ * Since we're using Docker, we can only run builds on Linux distributions.
55
+
56
+ ## Installation
57
+
58
+ fpm-dockery is distributed as a Rubygem:
59
+
60
+ `gem install fpm-dockery`
61
+
62
+ Once you've installed it, you will have access to the `fpm-dockery` command line tool.
63
+
64
+ ## Usage
65
+
66
+ `fpm-dockery` has command line documentation, accessible by supplying the `--help argument`:
67
+
68
+ $ bin/fpm-dockery --help
69
+ Usage:
70
+ fpm-dockery [OPTIONS] SUBCOMMAND [ARG] ...
71
+
72
+ Parameters:
73
+ SUBCOMMAND subcommand
74
+ [ARG] ... subcommand arguments
75
+
76
+ Subcommands:
77
+ create-builder-image Build one of the fpm-dockery Docker 'builder' images
78
+ package Run fpm-cookery in a Docker container to produce a package
79
+ list-builders List available builders
80
+
81
+ Options:
82
+ -h, --help print help
83
+
84
+ ### Building packages
85
+
86
+ To create a package, run `fpm-dockery package`, which takes two required arguments and one
87
+ optional argument:
88
+
89
+ fpm-dockery package PATH_TO_RECIPE BUILDER [PACKAGE_DIR]
90
+
91
+ The builder is one of the supported builder images. If the builder image does not exist on the
92
+ system where Docker is running, it will be automatically created first. The packages will be
93
+ created in `PATH_TO_RECIPE/pkg`.
94
+
95
+ For example, to run the supplied example recipe (which builds Redis) on Ubuntu Precise (12.04 LTS), run:
96
+
97
+ fpm-dockery package example_recipe/recipe.rb ubuntu12.04
98
+
99
+ If you'd like to override where packages are created, you can specify the optional third
100
+ argument `PACKAGE_DIR`:
101
+
102
+ fpm-dockery package example_recipe/recipe.rb ubuntu12.04 /tmp/somedir
103
+
104
+
105
+ ### Viewing available builders
106
+
107
+ To see the available builders, run:
108
+
109
+ fpm-dockery list-builders
110
+
111
+ ### Manually creating builder images
112
+
113
+ If you'd like to run a builder image creation task manually, you can run:
114
+
115
+ fpm-dockery create-builder-image BUILDER
116
+
117
+ For example, to build the Ubuntu Trusty (14.04 LTS) builder image, run:
118
+
119
+ fpm-dockery create-builder-image ubuntu14.04
120
+
121
+ If you want to run this image creation without the Docker cache (perhaps your image is somehow
122
+ messed up), run:
123
+
124
+ fpm-dockery create-builder-image --no-cache BUILDER
125
+
126
+ For example, to run the Trusty build again with no cache:
127
+
128
+ fpm-dockery create-builder-image --no-cache ubuntu14.04
129
+
130
+ ## Contributing
131
+
132
+ Pull requests are welcomed, especially for supporting new distributions. This project was a spike to replace
133
+ some unpleasant homegrown scripts at [Forward3D](https://github.com/forward3d), so it's immature. Bugfixes and features welcomed.
134
+
135
+ 1. Fork it ( https://github.com/[my-github-username]/fpm-dockery/fork )
136
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
137
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
138
+ 4. Push to the branch (`git push origin my-new-feature`)
139
+ 5. Create a new Pull Request
140
+
141
+ ## Acknowledgements
142
+
143
+ Thanks to [@bernd](https://github.com/bernd) for creating fpm-cookery, and [@sissel](https://github.com/jordansissel)
144
+ for creating FPM, without which life would be less pleasant.
145
+
146
+ I also used the Redis example recipe from @bernd's repository and placed it in this repository so it can be used
147
+ for a quick proof-of-concept.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/fpm-dockery ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ Bundler.require
5
+ require 'fpm/dockery'
6
+
7
+ FPM::Dockery::CLI.run
@@ -0,0 +1,25 @@
1
+ FROM ubuntu:12.04
2
+
3
+ RUN apt-get update
4
+
5
+ # Additional tooling
6
+ RUN apt-get install -y git
7
+ RUN apt-get install -y curl
8
+ RUN apt-get install -y mercurial
9
+ RUN apt-get install -y subversion
10
+
11
+ # Build tools
12
+ RUN apt-get install -y build-essential
13
+
14
+ # Install Ruby from Brightbox's PPA
15
+ RUN apt-get -y install python-software-properties
16
+ RUN apt-add-repository ppa:brightbox/ruby-ng
17
+ RUN apt-get update
18
+ RUN apt-get -y install ruby2.1
19
+ RUN apt-get -y install ruby2.1-dev
20
+
21
+ # Install fpm-cookery
22
+ RUN gem install fpm-cookery -v 0.27.0
23
+
24
+ # Set an entry point to simplify command execution
25
+ ENTRYPOINT ["/usr/local/bin/fpm-cook"]
@@ -0,0 +1,25 @@
1
+ FROM ubuntu:14.04
2
+
3
+ RUN apt-get update
4
+
5
+ # Additional tooling
6
+ RUN apt-get install -y git
7
+ RUN apt-get install -y curl
8
+ RUN apt-get install -y mercurial
9
+ RUN apt-get install -y subversion
10
+
11
+ # Build tools
12
+ RUN apt-get install -y build-essential
13
+
14
+ # Install Ruby from Brightbox's PPA
15
+ RUN apt-get -y install software-properties-common
16
+ RUN apt-add-repository ppa:brightbox/ruby-ng
17
+ RUN apt-get update
18
+ RUN apt-get -y install ruby2.1
19
+ RUN apt-get -y install ruby2.1-dev
20
+
21
+ # Install fpm-cookery
22
+ RUN gem install fpm-cookery -v 0.27.0
23
+
24
+ # Set an entry point to simplify command execution
25
+ ENTRYPOINT ["/usr/local/bin/fpm-cook"]
@@ -0,0 +1,48 @@
1
+ class Redis < FPM::Cookery::Recipe
2
+ homepage 'http://redis.io'
3
+
4
+ # Different source methods.
5
+ #
6
+ #source 'https://github.com/antirez/redis/trunk', :with => :svn
7
+ #source 'https://github.com/antirez/redis/trunk', :with => :svn, :revision => '2400'
8
+ #
9
+ #source 'https://github.com/antirez/redis', :with => :git, :tag => '2.4.2
10
+ #source 'https://github.com/antirez/redis', :with => :git, :branch => '2.4'
11
+ #source 'https://github.com/antirez/redis', :with => :git, :sha => '072a905'
12
+
13
+ source 'http://redis.googlecode.com/files/redis-2.4.2.tar.gz'
14
+ md5 'c4b0b5e4953a11a503cb54cf6b09670e'
15
+
16
+ name 'redis-server'
17
+ version '2.4.2'
18
+ # revision '0' # => redis-server-2.2.5+fpm1
19
+
20
+ description 'An advanced key-value store.'
21
+
22
+ conflicts 'redis-server'
23
+
24
+ config_files '/etc/redis/redis.conf'
25
+
26
+ patches 'patches/test.patch'
27
+
28
+ def build
29
+ make
30
+
31
+ inline_replace 'redis.conf' do |s|
32
+ s.gsub! 'daemonize no', 'daemonize yes # non-default'
33
+ end
34
+ end
35
+
36
+ def install
37
+ # make :install, 'DESTDIR' => destdir
38
+
39
+ var('lib/redis').mkdir
40
+
41
+ %w(run log/redis).each {|p| var(p).mkdir }
42
+
43
+ bin.install ['src/redis-server', 'src/redis-cli']
44
+
45
+ etc('redis').install 'redis.conf'
46
+ etc('init.d').install workdir('redis-server.init.d') => 'redis-server'
47
+ end
48
+ end
@@ -0,0 +1,80 @@
1
+ #! /bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: redis-server
4
+ # Required-Start: $syslog
5
+ # Required-Stop: $syslog
6
+ # Should-Start: $local_fs
7
+ # Should-Stop: $local_fs
8
+ # Default-Start: 2 3 4 5
9
+ # Default-Stop: 0 1 6
10
+ # Short-Description: redis-server - Persistent key-value db
11
+ # Description: redis-server - Persistent key-value db
12
+ ### END INIT INFO
13
+
14
+
15
+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
16
+ DAEMON=/usr/bin/redis-server
17
+ DAEMON_ARGS=/etc/redis/redis.conf
18
+ NAME=redis-server
19
+ DESC=redis-server
20
+ PIDFILE=/var/run/redis.pid
21
+
22
+ test -x $DAEMON || exit 0
23
+ test -x $DAEMONBOOTSTRAP || exit 0
24
+
25
+ set -e
26
+
27
+ case "$1" in
28
+ start)
29
+ echo -n "Starting $DESC: "
30
+ touch $PIDFILE
31
+ chown redis:redis $PIDFILE
32
+ chown redis:redis /var/log/redis
33
+ chown redis:redis /var/lib/redis
34
+ if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
35
+ then
36
+ echo "$NAME."
37
+ else
38
+ echo "failed"
39
+ fi
40
+ ;;
41
+ stop)
42
+ echo -n "Stopping $DESC: "
43
+ if start-stop-daemon --stop --retry 10 --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
44
+ then
45
+ echo "$NAME."
46
+ else
47
+ echo "failed"
48
+ fi
49
+ rm -f $PIDFILE
50
+ ;;
51
+
52
+ restart|force-reload)
53
+ ${0} stop
54
+ ${0} start
55
+ ;;
56
+ status)
57
+ if [ -f $PIDFILE ]
58
+ then
59
+ PID=`cat $PIDFILE`
60
+ echo -n "Redis (pid: $PID): "
61
+ if ps aux | grep $PID > /dev/null
62
+ then
63
+ echo "running"
64
+ exit 0
65
+ else
66
+ echo "failed"
67
+ exit 3
68
+ fi
69
+ else
70
+ echo "Redis not running"
71
+ exit 3
72
+ fi
73
+ ;;
74
+ *)
75
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
76
+ exit 1
77
+ ;;
78
+ esac
79
+
80
+ exit 0
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fpm/dockery/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fpm-dockery"
8
+ spec.version = Fpm::Dockery::VERSION
9
+ spec.authors = ["Andy Sykes"]
10
+ spec.email = ["github@tinycat.co.uk"]
11
+
12
+ spec.summary = %q{Build fpm-cookery recipes with Docker!}
13
+ spec.description = %q{Use Docker to produce clean builds of fpm-cookery recipes by building in containers}
14
+ spec.homepage = "https://github.com/andytinycat/fpm-dockery"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_runtime_dependency "clamp", "~> 0.6.4"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.8"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ end
@@ -0,0 +1,16 @@
1
+ require "clamp"
2
+ require "logger"
3
+ require "open3"
4
+
5
+ require "fpm/dockery/version"
6
+ require "fpm/dockery/logging"
7
+ require "fpm/dockery/utils"
8
+ require "fpm/dockery/cli"
9
+
10
+ module FPM
11
+ module Dockery
12
+ def self.root
13
+ File.expand_path("../../../", __FILE__)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,108 @@
1
+ require 'optparse'
2
+
3
+ module FPM
4
+ module Dockery
5
+ class CLI < Clamp::Command
6
+
7
+ class BaseCommand < Clamp::Command
8
+ include Logging
9
+ include Utils
10
+
11
+ def valid_builders
12
+ Dir.glob("#{FPM::Dockery.root}/docker/Dockerfile.*").map {|f| File.basename(f.gsub('Dockerfile.', ''))}
13
+ end
14
+
15
+ def validate_builder!
16
+ unless valid_builders.include?(builder)
17
+ fatal "Image type must be one of: #{valid_builders.join(', ')}"
18
+ exit 1
19
+ end
20
+ end
21
+
22
+ def create_builder_if_required
23
+ image_check = Subprocess.run("docker images | awk '{print $1}' | grep fpm-dockery/#{builder}")
24
+ unless image_check.exitstatus == 0
25
+ warn "The builder image '#{builder}' does not exist; running the image creation for you"
26
+ create_builder(false)
27
+ end
28
+ end
29
+
30
+ def create_builder(no_cache)
31
+ validate_builder!
32
+ cache_option = no_cache ? '--no-cache=true' : ''
33
+ exit_status = Subprocess.run("docker build #{cache_option} -f #{FPM::Dockery.root}/docker/Dockerfile.#{builder} -t fpm-dockery/#{builder} #{FPM::Dockery.root}")
34
+ if exit_status.exitstatus == 0
35
+ info "Build complete"
36
+ else
37
+ info "Build process exited with a non-zero exit code"
38
+ exit exit_status.exitstatus
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ class ListBuildersCommand < BaseCommand
45
+ def execute
46
+ puts valid_builders.join("\n")
47
+ end
48
+ end
49
+
50
+ class CreateBuilderImage < BaseCommand
51
+ parameter "BUILDER", "Type of builder image to build"
52
+ option "--no-cache", :flag, "Build without cache"
53
+
54
+ def execute
55
+ create_builder(no_cache?)
56
+ end
57
+ end
58
+
59
+ class PackageCommand < BaseCommand
60
+ parameter "RECIPE", "fpm-cookery recipe to build"
61
+ parameter "BUILDER", "Builder to use"
62
+ parameter "[PACKAGE_DIR]", "Where to place the packages created by the build (defaults to /pkg in same dir as recipe)"
63
+
64
+ def execute
65
+ recipe_path = File.expand_path(recipe)
66
+ dir_to_mount = File.dirname(recipe_path)
67
+ name_of_recipe = File.basename(recipe_path)
68
+
69
+ validate_builder!
70
+ create_builder_if_required
71
+
72
+ extra_command = ''
73
+ pkg_dir = "/recipe/pkg"
74
+
75
+ if package_dir
76
+ extra_command = "-v #{File.expand_path(package_dir)}:/output"
77
+ pkg_dir = "/output"
78
+ end
79
+
80
+ command = <<eos
81
+ docker run \
82
+ -v #{dir_to_mount}:/recipe \
83
+ #{extra_command} \
84
+ fpm-dockery/ubuntu \
85
+ --tmp-root /tmp/tmproot \
86
+ --pkg-dir #{pkg_dir} \
87
+ --cache-dir /tmp/cache \
88
+ package \
89
+ /recipe/#{name_of_recipe}
90
+ eos
91
+ exit_status = Subprocess.run(command)
92
+ if exit_status.exitstatus == 0
93
+ info "Packaging complete"
94
+ else
95
+ info "Packaging process exited with a non-zero exit code"
96
+ exit exit_status.exitstatus
97
+ end
98
+ end
99
+
100
+ end
101
+
102
+ subcommand "create-builder-image", "Build one of the fpm-dockery Docker 'builder' images", CreateBuilderImage
103
+ subcommand "package", "Run fpm-cookery in a Docker container to produce a package", PackageCommand
104
+ subcommand "list-builders", "List available builders", ListBuildersCommand
105
+
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,24 @@
1
+ module FPM
2
+ module Dockery
3
+ module Logging
4
+
5
+ @@logger = Logger.new(STDOUT)
6
+ @@logger.formatter = proc do |severity, datetime, progname, msg|
7
+ "[#{severity}] #{msg}\n"
8
+ end
9
+
10
+ def info(msg)
11
+ @@logger.info(msg)
12
+ end
13
+
14
+ def warn(msg)
15
+ @@logger.warn(msg)
16
+ end
17
+
18
+ def fatal(msg)
19
+ @@logger.fatal(msg)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ module FPM
2
+ module Dockery
3
+ module Utils
4
+
5
+ # A moderately decent way of dealing with running commands
6
+ # and coping with stdout/stderr
7
+ class Subprocess
8
+ extend Logging
9
+ def self.run(cmd, &block)
10
+ info "Running command '#{cmd}'"
11
+ log_command = "#{cmd.split(' ')[0]}"
12
+ # see: http://stackoverflow.com/a/1162850/83386
13
+ Open3.popen3(cmd) do |stdin, stdout, stderr, thread|
14
+ # read each stream from a new thread
15
+ { :out => stdout, :err => stderr }.each do |key, stream|
16
+ Thread.new do
17
+ until (line = stream.gets).nil? do
18
+ # yield the block depending on the stream
19
+ if key == :out
20
+ info("[#{log_command}] [stdout] #{line.chomp}") unless line.nil?
21
+ else
22
+ info("[#{log_command}] [stderr] #{line.chomp}") unless line.nil?
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ thread.join # don't exit until the external process is done
29
+ return thread.value
30
+ end
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,5 @@
1
+ module Fpm
2
+ module Dockery
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fpm-dockery
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andy Sykes
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-04-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: clamp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.6.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.6.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ description: Use Docker to produce clean builds of fpm-cookery recipes by building
56
+ in containers
57
+ email:
58
+ - github@tinycat.co.uk
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".ruby-gemset"
65
+ - ".ruby-version"
66
+ - Gemfile
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - bin/fpm-dockery
71
+ - docker/Dockerfile.ubuntu12.04
72
+ - docker/Dockerfile.ubuntu14.04
73
+ - example_recipe/recipe.rb
74
+ - example_recipe/redis-server.init.d
75
+ - fpm-dockery.gemspec
76
+ - lib/fpm/dockery.rb
77
+ - lib/fpm/dockery/cli.rb
78
+ - lib/fpm/dockery/logging.rb
79
+ - lib/fpm/dockery/utils.rb
80
+ - lib/fpm/dockery/version.rb
81
+ homepage: https://github.com/andytinycat/fpm-dockery
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.4.3
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Build fpm-cookery recipes with Docker!
105
+ test_files: []