building 1.0.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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/building +50 -0
  3. data/lib/building.rb +99 -0
  4. metadata +47 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2edfe6caacb030124aec94fd0875516f4de2907f
4
+ data.tar.gz: 7b945e7cf653c8f8f9b522f0fe72e641e82cb498
5
+ SHA512:
6
+ metadata.gz: 3e6f7b9300342d0535cdbf068085e575cbd1789f18794890a334363d2361f4d821083967a0e32207c58753e6ed138d46ef8fa7a0b89afaf53d13b832fafcdee0
7
+ data.tar.gz: 5d09dc19ad2a6592ef4759b6e69c88d81b476ca1a8eec521ca6e741bb6e4b984616d58408e9abaebe8865293a9e01feaba7c2429a6a48298a92f59762299e824
data/bin/building ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "building"))
4
+
5
+ BUILDING_BANNER = "Usage: building [options] CONTAINER_NAME [TAG]"
6
+
7
+ options = {}
8
+
9
+ opt_parser = OptionParser.new do |opts|
10
+ opts.banner = BUILDING_BANNER
11
+
12
+ opts.on("-o", "--output FIGCONF", "Output a fig configuration file") do |fig|
13
+ options[:fig] = fig
14
+ end
15
+
16
+ opts.on("-f", "--from FROM", "Change the default FROM (progrium/buildstep)") do |from|
17
+ options[:from] = from
18
+ end
19
+
20
+ opts.on("-d", "--dockerfile DOCKERFILE", "External Dockerfile to append to the building generated Dockerfile") do |file|
21
+ options[:file] = file
22
+ end
23
+
24
+ opts.on("-i", "--include CMD", "Extra commands during the image build") do |includes|
25
+ options[:includes] = includes
26
+ end
27
+
28
+ opts.on("-b", "--buildpack URL", "Add an external Buildpack URL") do |buildpack_url|
29
+ options[:buildpack_url] = buildpack_url
30
+ end
31
+
32
+ opts.on("-p", "--p PORT", "Run the container after it is built on a certain port") do |port|
33
+ options[:port] = port
34
+ end
35
+
36
+ opts.on( '-h', '--help', 'Display this screen' ) do
37
+ puts opts
38
+ exit
39
+ end
40
+
41
+ end
42
+
43
+ opt_parser.parse!
44
+
45
+ if ARGV[0].nil?
46
+ puts opt_parser
47
+ exit -1
48
+ end
49
+
50
+ puts Building.convert(ARGV[0], ARGV[1], options)
data/lib/building.rb ADDED
@@ -0,0 +1,99 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+
4
+ class Building
5
+ def self.convert(app_name, tag, options={})
6
+ Building.new(app_name, tag, options)
7
+ end
8
+
9
+ def initialize(app_name, tag, options={})
10
+ @app_name = app_name
11
+ @tag = tag || "latest"
12
+ @buildpack_url = options[:buildpack_url]
13
+ @includes = options[:includes]
14
+ @file = options[:file]
15
+ @from = options[:from]
16
+ @fig = options[:fig]
17
+ @port = options[:port]
18
+
19
+ create_dockerfile
20
+ build_container
21
+
22
+ if @port
23
+ run_container(@port)
24
+ else
25
+ explain_container(8080)
26
+ end
27
+
28
+ if @fig
29
+ build_fig
30
+ end
31
+
32
+ exit 0
33
+ end
34
+
35
+ def create_dockerfile
36
+ File.open("Dockerfile" , "w") do |file|
37
+ file << "FROM #{@from || "ctlc/buildstep:ubuntu13.10"}\n"
38
+ end
39
+
40
+ if @buildpack_url
41
+ File.open("Dockerfile" , "a") do |file|
42
+ file << <<-eof
43
+ RUN git clone --depth 1 #{@buildpack_url} /build/buildpacks/#{@buildpack_url.split("/").last.sub(".git","")}
44
+ RUN echo #{@buildpack_url} >> /build/buildpacks.txt
45
+ eof
46
+ end
47
+ end
48
+
49
+ if @includes
50
+ File.open("Dockerfile" , "a") do |file|
51
+ file << "RUN #{@includes}\n"
52
+ end
53
+ end
54
+
55
+ if @file
56
+ File.open("Dockerfile" , "a") do |file|
57
+ file << IO.read(@file)
58
+ end
59
+ end
60
+
61
+ File.open("Dockerfile" , "a") do |file|
62
+ file << <<-eof
63
+ ADD . /app
64
+ RUN /build/builder
65
+ CMD /start web
66
+ eof
67
+ end
68
+ end
69
+
70
+ def build_fig
71
+ File.open(@fig , "w") do |file|
72
+ file << <<-eof
73
+ web:
74
+ image: #{@app_name}:#{@tag}
75
+ command: /start web
76
+ environment:
77
+ PORT: #{@port || 8080}
78
+ ports:
79
+ - #{@port || 8080}
80
+ eof
81
+ end
82
+ end
83
+
84
+ def build_container
85
+ pid = fork { exec "docker build -t #{@app_name}:#{@tag} ." }
86
+ Process.waitpid(pid)
87
+ end
88
+
89
+ def explain_container(port)
90
+ run = "docker run -d -p #{port} -e \"PORT=#{port}\" #{@app_name}:#{@tag}"
91
+ puts "\nTo run your app, try something like this:\n\n\t#{run}\n\n"
92
+ end
93
+
94
+ def run_container(port)
95
+ run = "\ndocker run -d -p #{port} -e \"PORT=#{port}\" #{@app_name}:#{@tag}"
96
+ puts "#{run}"
97
+ exec run
98
+ end
99
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: building
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Lucas Carlson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-31 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Build a Docker container for any app using Heroku Buildpacks
14
+ email: lucas@rufy.com
15
+ executables:
16
+ - building
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/building
21
+ - lib/building.rb
22
+ homepage: http://github.com/CenturyLinkLabs/building
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements:
41
+ - bundler
42
+ rubyforge_project:
43
+ rubygems_version: 2.2.0
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Build a Docker container for any app using Heroku Buildpacks
47
+ test_files: []