building 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/building.rb +70 -24
  3. metadata +6 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2edfe6caacb030124aec94fd0875516f4de2907f
4
- data.tar.gz: 7b945e7cf653c8f8f9b522f0fe72e641e82cb498
3
+ metadata.gz: 3744e78cd0ca432f9d2fda9ecb230627a264f96f
4
+ data.tar.gz: 2c29701e06a4767e68521b8a5a6caba511b7a289
5
5
  SHA512:
6
- metadata.gz: 3e6f7b9300342d0535cdbf068085e575cbd1789f18794890a334363d2361f4d821083967a0e32207c58753e6ed138d46ef8fa7a0b89afaf53d13b832fafcdee0
7
- data.tar.gz: 5d09dc19ad2a6592ef4759b6e69c88d81b476ca1a8eec521ca6e741bb6e4b984616d58408e9abaebe8865293a9e01feaba7c2429a6a48298a92f59762299e824
6
+ metadata.gz: aaaab250877fe69b264a65ff26f0b1506d04b812fead145b4734203353d4fa8bfba31bce34bf6ac1edac0594ee1b953ec6621dfb9271976f3eafbf3030818fe5
7
+ data.tar.gz: 8ac316c49e0fe3b3c49956a47d6818106f05fd6a2467fd95b747e2caeb7996f91c37e6e140e074050ef01d051a70f71e5442398dcc7f2e4f98e281949951f963
data/lib/building.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'fileutils'
3
+ require 'bundler/setup'
4
+ require 'highline/import'
3
5
 
4
6
  class Building
5
7
  def self.convert(app_name, tag, options={})
@@ -19,57 +21,71 @@ class Building
19
21
  create_dockerfile
20
22
  build_container
21
23
 
24
+ build_fig if @fig
25
+
22
26
  if @port
23
27
  run_container(@port)
24
28
  else
25
29
  explain_container(8080)
26
30
  end
27
31
 
28
- if @fig
29
- build_fig
30
- end
31
-
32
32
  exit 0
33
33
  end
34
34
 
35
35
  def create_dockerfile
36
- File.open("Dockerfile" , "w") do |file|
37
- file << "FROM #{@from || "ctlc/buildstep:ubuntu13.10"}\n"
38
- end
36
+ dockerfile = []
37
+ dockerfile << "FROM #{@from || "ctlc/buildstep:ubuntu13.10"}\n"
39
38
 
40
39
  if @buildpack_url
41
- File.open("Dockerfile" , "a") do |file|
42
- file << <<-eof
40
+ dockerfile << <<-eof
43
41
  RUN git clone --depth 1 #{@buildpack_url} /build/buildpacks/#{@buildpack_url.split("/").last.sub(".git","")}
44
42
  RUN echo #{@buildpack_url} >> /build/buildpacks.txt
45
43
  eof
46
- end
47
44
  end
48
45
 
49
46
  if @includes
50
- File.open("Dockerfile" , "a") do |file|
51
- file << "RUN #{@includes}\n"
52
- end
47
+ dockerfile << "RUN #{@includes}\n"
53
48
  end
54
49
 
55
50
  if @file
56
- File.open("Dockerfile" , "a") do |file|
57
- file << IO.read(@file)
58
- end
51
+ dockerfile << IO.read(@file)
59
52
  end
60
53
 
61
- File.open("Dockerfile" , "a") do |file|
62
- file << <<-eof
54
+ dockerfile << <<-eof
63
55
  ADD . /app
64
56
  RUN /build/builder
65
57
  CMD /start web
66
58
  eof
59
+
60
+ skip = false
61
+
62
+ if File.exists?("Dockerfile")
63
+ if IO.read("Dockerfile") == dockerfile.join("\n")
64
+ skip = true
65
+ say %{ <%= color('identical', [BLUE, BOLD]) %> Dockerfile}
66
+ else
67
+ say %{ <%= color('conflict', [RED, BOLD]) %> Dockerfile}
68
+ choice = ask("Overwrite Dockerfile? [Yn] ")
69
+ if choice.downcase == "n"
70
+ say("Aborting...")
71
+ exit 1
72
+ else
73
+ say %{ <%= color('force', [YELLOW, BOLD]) %> Dockerfile}
74
+ end
75
+ end
76
+ else
77
+ say %{ <%= color('create', [GREEN, BOLD]) %> Dockerfile}
78
+ end
79
+
80
+ if !skip
81
+ File.open("Dockerfile" , "w") do |file|
82
+ file << dockerfile.join("\n")
83
+ end
67
84
  end
68
85
  end
69
86
 
70
87
  def build_fig
71
- File.open(@fig , "w") do |file|
72
- file << <<-eof
88
+ figfile = <<-eof
73
89
  web:
74
90
  image: #{@app_name}:#{@tag}
75
91
  command: /start web
@@ -78,22 +94,52 @@ web:
78
94
  ports:
79
95
  - #{@port || 8080}
80
96
  eof
97
+
98
+ skip = false
99
+
100
+ if File.exists?(@fig)
101
+ if IO.read(@fig) == figfile
102
+ skip = true
103
+ say %{ <%= color('identical', [BLUE, BOLD]) %> #{@fig}}
104
+ else
105
+ say %{ <%= color('conflict', [RED, BOLD]) %> #{@fig}}
106
+ choice = ask("Overwrite #{File.expand_path(@fig)}? [Yn] ")
107
+ if choice.downcase == "n"
108
+ say("Aborting...")
109
+ exit 1
110
+ else
111
+ say %{ <%= color('force', [YELLOW, BOLD]) %> #{@fig}}
112
+ end
113
+ end
114
+ else
115
+ say %{ <%= color('create', [GREEN, BOLD]) %> #{@fig}}
116
+ end
117
+
118
+ if !skip
119
+ File.open(@fig , "w") do |file|
120
+ file << figfile
121
+ end
81
122
  end
82
123
  end
83
124
 
84
125
  def build_container
85
- pid = fork { exec "docker build -t #{@app_name}:#{@tag} ." }
126
+ build_cmd = "docker build -t #{@app_name}:#{@tag} ."
127
+ say %{ <%= color('building', [BLUE, BOLD]) %> #{build_cmd}}
128
+ pid = fork { exec build_cmd }
86
129
  Process.waitpid(pid)
87
130
  end
88
131
 
89
132
  def explain_container(port)
90
133
  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"
134
+ rebuild = "docker build -t #{@app_name} ."
135
+
136
+ say " <%= color('hint', [YELLOW, BOLD]) %> To run your app, try: <%= color('#{run}', [BOLD]) %>"
137
+ say " <%= color('hint', [YELLOW, BOLD]) %> To re-build your app, try: <%= color('#{rebuild}', [BOLD]) %>"
92
138
  end
93
139
 
94
140
  def run_container(port)
95
- run = "\ndocker run -d -p #{port} -e \"PORT=#{port}\" #{@app_name}:#{@tag}"
96
- puts "#{run}"
141
+ run = "docker run -d -p #{port} -e \"PORT=#{port}\" #{@app_name}:#{@tag}"
142
+ say " <%= color('running', [BLUE, BOLD]) %> #{run}"
97
143
  exec run
98
144
  end
99
145
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: building
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Carlson
@@ -17,8 +17,8 @@ executables:
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - bin/building
21
20
  - lib/building.rb
21
+ - bin/building
22
22
  homepage: http://github.com/CenturyLinkLabs/building
23
23
  licenses:
24
24
  - MIT
@@ -29,18 +29,19 @@ require_paths:
29
29
  - lib
30
30
  required_ruby_version: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - '>='
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  required_rubygems_version: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">="
37
+ - - '>='
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  requirements:
41
41
  - bundler
42
+ - highline
42
43
  rubyforge_project:
43
- rubygems_version: 2.2.0
44
+ rubygems_version: 2.0.3
44
45
  signing_key:
45
46
  specification_version: 4
46
47
  summary: Build a Docker container for any app using Heroku Buildpacks