cide 0.0.2 → 0.0.3
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +17 -1
- data/bin/cide +56 -60
- data/cide.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3dd99e04fa0893686988a2e80fc1082d5dcab15
|
4
|
+
data.tar.gz: a2df7f906f19db7e98e47829d3864d05bf75cb0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 867b9f04b9ae236496e92bcc6b81eb8f434412de87591e7691ebf2ceb0c24c0e76f93274cda4abe191eee6838ea72598bfe2ed14a2e6db7009058f8581238ce7
|
7
|
+
data.tar.gz: 93b5c43787f8bca0ca068a1fe232fe7bf4891b2a314f09f31cd79b422706aabab9661ff47fa03e1e7408a0807f49a0c04fe60b9db45413a3bf69e84bd034a67e
|
data/CHANGELOG.md
CHANGED
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
|
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
|
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:
|
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
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
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?(
|
119
|
+
if !File.exist?(DOCKERFILE)
|
103
120
|
log msg: "Creating temporary Dockerfile"
|
104
|
-
File.write(
|
121
|
+
File.write(DOCKERFILE, config.to_dockerfile)
|
105
122
|
at_exit do
|
106
|
-
File.unlink(
|
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
|
-
|
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
|
-
|
138
|
-
|
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
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.
|
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-
|
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
|