cide 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/README.md +17 -1
  4. data/bin/cide +56 -60
  5. data/cide.gemspec +1 -1
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b13407dc7b787e3fc64af27c04c31c184db72fe8
4
- data.tar.gz: e4cce2fd8ea61a204413009b4e57f47abcf0b005
3
+ metadata.gz: a3dd99e04fa0893686988a2e80fc1082d5dcab15
4
+ data.tar.gz: a2df7f906f19db7e98e47829d3864d05bf75cb0a
5
5
  SHA512:
6
- metadata.gz: 5e224c380f04d7906384d5276ca039cf1c4c0f552381e18e0c6b70fa1ecd0d8b23191b46e7ac261ce4308fe557b7d5cf940283b925478c4a3044364122016bad
7
- data.tar.gz: c3a60c370b9fc787d6c24531ded055d07f2aeb6f9a54a0776d5a8fae5d90b6856d5812ce6010409f8873b657d32cf3b0ff6f4994cf4f38dde93ef5b815992c9b
6
+ metadata.gz: 867b9f04b9ae236496e92bcc6b81eb8f434412de87591e7691ebf2ceb0c24c0e76f93274cda4abe191eee6838ea72598bfe2ed14a2e6db7009058f8581238ce7
7
+ data.tar.gz: 93b5c43787f8bca0ca068a1fe232fe7bf4891b2a314f09f31cd79b422706aabab9661ff47fa03e1e7408a0807f49a0c04fe60b9db45413a3bf69e84bd034a67e
data/CHANGELOG.md CHANGED
@@ -1,4 +1,11 @@
1
1
 
2
+ 0.0.3 / 2014-09-29
3
+ ==================
4
+
5
+ * Cleanup and fixes DATA usage
6
+ * Removes the GEM_HOME environment setting
7
+ * Installation instructions
8
+
2
9
  0.0.2 / 2014-09-15
3
10
  ==================
4
11
 
data/README.md CHANGED
@@ -39,6 +39,23 @@ Limitations
39
39
  A temporary Dockerfile has to be created in the project's root because docker
40
40
  doesn't allow referencing files outside of the directory (even with a symlink)
41
41
 
42
+ Installation
43
+ ------------
44
+
45
+ Install docker: https://docs.docker.com/installation/#installation
46
+
47
+ ```
48
+ gem install cide
49
+ ```
50
+
51
+ OSX docker install:
52
+ ```
53
+ brew install boot2docker
54
+ boot2docker init
55
+ boot2docker up
56
+ # cide auto-detects boot2docker on OSX
57
+ ```
58
+
42
59
  TODO
43
60
  ----
44
61
 
@@ -50,4 +67,3 @@ TODO
50
67
  * `cide gc` to cleanup old cide builds
51
68
  * travis.yml compatiblity with docker containers that map to languages
52
69
  * add ways of exporting artifacts
53
- * ENV GEM_HOME is container specific
data/bin/cide CHANGED
@@ -7,9 +7,33 @@ require "erb"
7
7
  require "optparse"
8
8
  require "yaml"
9
9
 
10
+ DOCKERFILE = 'Dockerfile'
11
+ DOCKERFILE_TEMPLATE = <<EOF
12
+ FROM <%= image %>
13
+ RUN useradd -m -U -d /cide cide
14
+
15
+ # Install system build dependencies here
16
+
17
+ <% as_root.each do |cmd| %>
18
+ RUN <%= cmd %>
19
+ <% end %>
20
+
21
+ # Add project data
22
+
23
+ ADD . /cide/src
24
+ RUN chown -R cide:cide /cide
25
+
26
+ # Switch to cide user
27
+
28
+ USER cide
29
+
30
+ WORKDIR /cide/src
31
+ ENV HOME /cide
32
+ EOF
33
+
10
34
  module Fmt; extend self
11
35
  def fmt(obj)
12
- dump_obj(obj)
36
+ dump_obj obj
13
37
  end
14
38
 
15
39
  protected
@@ -25,13 +49,13 @@ module Fmt; extend self
25
49
  obj.index(/['"\s\{\}\[\]\=]/) ? obj.inspect : obj
26
50
  end
27
51
  rescue
28
- dump($!.to_s)
52
+ dump $!.to_s
29
53
  end
30
54
 
31
55
  def dump_obj(obj)
32
56
  obj.map do |(k, v)|
33
57
  "#{k}=#{dump v}"
34
- end.join(' ')
58
+ end.join ' '
35
59
  end
36
60
  end
37
61
 
@@ -39,27 +63,6 @@ def log(opts={})
39
63
  $stdout.puts "cide: #{Fmt.fmt opts}"
40
64
  end
41
65
 
42
- def struct(opts={})
43
- Class.new(Struct.new(*opts.keys)) do
44
- def set(name)
45
- method("#{name}=")
46
- end
47
-
48
- def to_dockerfile
49
- ERB.new(DATA.read).result(binding)
50
- end
51
-
52
- def merge!(opts={})
53
- opts.each_pair{|k,v| self[k] = v }
54
- end
55
- end.new(*opts.values)
56
- end
57
-
58
- # Replaces invalid docker tag characters by underscores
59
- def id(str)
60
- "#{str}".downcase.gsub(/[^a-z0-9\-_.]/, '_')
61
- end
62
-
63
66
  def sh(*args)
64
67
  log cmd: args
65
68
  unless system(*args.map(&:to_s))
@@ -71,20 +74,36 @@ def docker(*args)
71
74
  sh "docker", *args
72
75
  end
73
76
 
77
+ def struct(opts={}, &block)
78
+ Class.new(Struct.new(*opts.keys), &block).new(*opts.values)
79
+ end
80
+
74
81
  config = struct(
75
82
  image: "ubuntu",
76
- tag: id(File.basename(Dir.pwd)),
83
+ tag: File.basename(Dir.pwd),
77
84
  as_root: [],
78
85
  command: 'script/ci',
79
- )
86
+ ) do
87
+ def set(name)
88
+ method "#{name}="
89
+ end
80
90
 
81
- CIDEFILE = '.cide.yml'
82
- if !File.exists?(CIDEFILE)
83
- log reason: "not found", file: CIDEFILE
84
- else
85
- config.merge! YAML.load_file(CIDEFILE)
91
+ def tag=(str)
92
+ # Replaces invalid docker tag characters by underscores
93
+ super "#{str}".downcase.gsub(/[^a-z0-9\-_.]/, '_')
94
+ end
95
+
96
+ def to_dockerfile
97
+ ERB.new(DOCKERFILE_TEMPLATE).result(binding)
98
+ end
99
+
100
+ def merge!(opts={})
101
+ opts.each_pair{|k,v| self[k] = v }
102
+ end
86
103
  end
87
104
 
105
+ config.merge! YAML.load_file('.cide.yml')
106
+
88
107
  OptionParser.new do |opts|
89
108
  opts.on('-i', '--image IMAGE', "Select the source image (#{config.image})", &config.set(:image))
90
109
  opts.on('-t', '--tag TAG', "Name of the build (#{config.tag})", &config.set(:tag))
@@ -95,15 +114,13 @@ OptionParser.new do |opts|
95
114
  end
96
115
  end.parse!
97
116
 
98
- config.tag = id("cide-#{config.tag}")
99
-
100
117
  log config: config.to_h
101
118
 
102
- if !File.exist?('Dockerfile')
119
+ if !File.exist?(DOCKERFILE)
103
120
  log msg: "Creating temporary Dockerfile"
104
- File.write('Dockerfile', config.to_dockerfile)
121
+ File.write(DOCKERFILE, config.to_dockerfile)
105
122
  at_exit do
106
- File.unlink('Dockerfile')
123
+ File.unlink(DOCKERFILE)
107
124
  end
108
125
  else
109
126
  log msg: "Using existing Dockerfile"
@@ -119,28 +136,7 @@ if `uname`.strip == "Darwin" && !ENV['DOCKER_HOST']
119
136
  ENV['DOCKER_HOST'] = `boot2docker socket 2>/dev/null`.strip
120
137
  end
121
138
 
122
- docker :build, '-t', config.tag, '.'
123
- docker :run, '--rm', '-t', config.tag, "sh", "-c", config.command
124
-
125
- __END__
126
- FROM <%= image %>
127
- RUN useradd -m -U -d /cide cide
128
-
129
- # Install system build dependencies here
130
-
131
- <% as_root.each do |cmd| %>
132
- RUN <%= cmd %>
133
- <% end %>
134
-
135
- # Add project data
139
+ tag = "cide-#{config.tag}"
136
140
 
137
- ADD . /cide/src
138
- RUN chown -R cide:cide /cide
139
-
140
- # Switch to cide user
141
-
142
- USER cide
143
-
144
- WORKDIR /cide/src
145
- ENV HOME /cide
146
- ENV GEM_HOME /cide/.gem
141
+ docker :build, '-t', tag, '.'
142
+ docker :run, '--rm', '-t', tag, "sh", "-c", config.command
data/cide.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'cide'
5
- s.version = '0.0.2'
5
+ s.version = '0.0.3'
6
6
  s.authors = ['zimbatm']
7
7
  s.email = ['zimbatm@zimbatm.com']
8
8
  s.summary = 'CI docker runner'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - zimbatm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-15 00:00:00.000000000 Z
11
+ date: 2014-09-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  cide makes it easy to reproduce CI builds on the developer computer by