dapp 0.0.1
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 +15 -0
- data/bin/dapp +8 -0
- data/lib/dapp.rb +21 -0
- data/lib/dapp/atomizer.rb +53 -0
- data/lib/dapp/builder.rb +217 -0
- data/lib/dapp/builder/cascade_tagging.rb +48 -0
- data/lib/dapp/builder/centos7.rb +46 -0
- data/lib/dapp/builder/chefify.rb +101 -0
- data/lib/dapp/cli.rb +133 -0
- data/lib/dapp/docker.rb +188 -0
- data/lib/dapp/filelock.rb +42 -0
- data/lib/dapp/git_artifact.rb +330 -0
- data/lib/dapp/git_repo/base.rb +50 -0
- data/lib/dapp/git_repo/chronicler.rb +43 -0
- data/lib/dapp/git_repo/remote.rb +59 -0
- data/lib/dapp/version.rb +3 -0
- metadata +210 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
module Dapp
|
2
|
+
module GitRepo
|
3
|
+
# Base class for any Git repo (remote, gitkeeper, etc)
|
4
|
+
class Base
|
5
|
+
attr_reader :builder
|
6
|
+
attr_reader :name
|
7
|
+
attr_reader :su
|
8
|
+
|
9
|
+
def initialize(builder, name, build_path: nil)
|
10
|
+
@builder = builder
|
11
|
+
@name = name
|
12
|
+
@build_path = build_path || []
|
13
|
+
end
|
14
|
+
|
15
|
+
def build_path(*paths)
|
16
|
+
builder.build_path(*@build_path, *paths)
|
17
|
+
end
|
18
|
+
|
19
|
+
def dir_path
|
20
|
+
build_path "#{name}.git"
|
21
|
+
end
|
22
|
+
|
23
|
+
def git(command, **kwargs)
|
24
|
+
builder.shellout "git #{command}", **kwargs
|
25
|
+
end
|
26
|
+
|
27
|
+
def git_bare(command, **kwargs)
|
28
|
+
git "--git-dir=#{dir_path} #{command}", **kwargs
|
29
|
+
end
|
30
|
+
|
31
|
+
def commit_at(commit)
|
32
|
+
Time.at Integer git_bare("show -s --format=%ct #{commit}").stdout.strip
|
33
|
+
end
|
34
|
+
|
35
|
+
def latest_commit(branch = 'master')
|
36
|
+
git_bare("rev-parse #{branch}").stdout.strip
|
37
|
+
end
|
38
|
+
|
39
|
+
def cleanup!
|
40
|
+
lock do
|
41
|
+
FileUtils.rm_rf dir_path
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def lock(**kwargs, &block)
|
46
|
+
builder.filelock(build_path("#{name}.lock"), error_message: "Repository #{name} in use! Try again later.", **kwargs, &block)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Dapp
|
2
|
+
module GitRepo
|
3
|
+
# Gitkeeper for autogenerated and external data
|
4
|
+
class Chronicler < Base
|
5
|
+
def initialize(builder, name, **kwargs)
|
6
|
+
super
|
7
|
+
|
8
|
+
lock do
|
9
|
+
unless File.directory? chronodir_path
|
10
|
+
git "init --separate-git-dir=#{dir_path} #{chronodir_path}"
|
11
|
+
git_chrono 'commit --allow-empty -m init'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def chronodir_path(*path)
|
17
|
+
build_path name, *path
|
18
|
+
end
|
19
|
+
|
20
|
+
def commit!(comment = '+')
|
21
|
+
lock do
|
22
|
+
git_chrono 'add --all'
|
23
|
+
unless git_chrono('diff --cached --quiet', returns: [0, 1]).status.success?
|
24
|
+
git_chrono "commit -m #{comment}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def cleanup!
|
30
|
+
lock do
|
31
|
+
super
|
32
|
+
FileUtils.rm_rf chronodir_path
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
def git_chrono(command, **kwargs)
|
39
|
+
git "-C #{chronodir_path} #{command}", **kwargs
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Dapp
|
2
|
+
module GitRepo
|
3
|
+
# Normal Git repo
|
4
|
+
class Remote < Base
|
5
|
+
def initialize(builder, name, url:, ssh_key_path: nil, **kwargs)
|
6
|
+
super(builder, name, **kwargs)
|
7
|
+
|
8
|
+
@url = url
|
9
|
+
@ssh_key_path = File.expand_path(ssh_key_path, builder.home_path) if ssh_key_path
|
10
|
+
|
11
|
+
@use_ssh_key = false
|
12
|
+
File.chmod(0600, @ssh_key_path) if @ssh_key_path
|
13
|
+
|
14
|
+
lock do
|
15
|
+
unless File.directory? dir_path
|
16
|
+
with_ssh_key do
|
17
|
+
git "clone --bare --depth 1 #{url} #{dir_path}", log_verbose: true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def fetch!(branch = 'master')
|
24
|
+
lock do
|
25
|
+
with_ssh_key do
|
26
|
+
git_bare "fetch origin #{branch}:#{branch}", log_verbose: true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
attr_reader :url
|
34
|
+
attr_reader :ssh_key_path
|
35
|
+
|
36
|
+
attr_accessor :use_ssh_key
|
37
|
+
def use_ssh_key
|
38
|
+
@use_ssh_key ||= false
|
39
|
+
end
|
40
|
+
|
41
|
+
def with_ssh_key
|
42
|
+
original = use_ssh_key
|
43
|
+
self.use_ssh_key = true
|
44
|
+
|
45
|
+
yield
|
46
|
+
ensure
|
47
|
+
self.use_ssh_key = original
|
48
|
+
end
|
49
|
+
|
50
|
+
def git(command, **kwargs)
|
51
|
+
if use_ssh_key && ssh_key_path
|
52
|
+
builder.shellout "ssh-agent bash -ec 'ssh-add #{ssh_key_path}; git #{command}'", **kwargs
|
53
|
+
else
|
54
|
+
super
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/dapp/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dapp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dmitry Stolyarov
|
8
|
+
- Timofey Kirillov
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-03-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mixlib-shellout
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.0'
|
21
|
+
- - <
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '3.0'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.0'
|
31
|
+
- - <
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: mixlib-cli
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- - <
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '3.0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '1.0'
|
51
|
+
- - <
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: bundler
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.7'
|
61
|
+
type: :development
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.7'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rake
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '10.0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ~>
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '10.0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.4'
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 3.4.0
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '3.4'
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 3.4.0
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: pry
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 0.10.3
|
109
|
+
- - <
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '1.0'
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.10.3
|
119
|
+
- - <
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '1.0'
|
122
|
+
- !ruby/object:Gem::Dependency
|
123
|
+
name: pry-stack_explorer
|
124
|
+
requirement: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 0.4.9.2
|
129
|
+
- - <
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.4.9.2
|
139
|
+
- - <
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '1.0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: travis
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ~>
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '1.8'
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.8.2
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ~>
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '1.8'
|
159
|
+
- - ! '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 1.8.2
|
162
|
+
description: Build docker packaged apps using chef or shell
|
163
|
+
email:
|
164
|
+
- dmitry.stolyarov@flant.com
|
165
|
+
- timofey.kirillov@flant.com
|
166
|
+
executables:
|
167
|
+
- dapp
|
168
|
+
extensions: []
|
169
|
+
extra_rdoc_files: []
|
170
|
+
files:
|
171
|
+
- bin/dapp
|
172
|
+
- lib/dapp.rb
|
173
|
+
- lib/dapp/atomizer.rb
|
174
|
+
- lib/dapp/builder.rb
|
175
|
+
- lib/dapp/builder/cascade_tagging.rb
|
176
|
+
- lib/dapp/builder/centos7.rb
|
177
|
+
- lib/dapp/builder/chefify.rb
|
178
|
+
- lib/dapp/cli.rb
|
179
|
+
- lib/dapp/docker.rb
|
180
|
+
- lib/dapp/filelock.rb
|
181
|
+
- lib/dapp/git_artifact.rb
|
182
|
+
- lib/dapp/git_repo/base.rb
|
183
|
+
- lib/dapp/git_repo/chronicler.rb
|
184
|
+
- lib/dapp/git_repo/remote.rb
|
185
|
+
- lib/dapp/version.rb
|
186
|
+
homepage: https://github.com/flant/dapp
|
187
|
+
licenses:
|
188
|
+
- MIT
|
189
|
+
metadata: {}
|
190
|
+
post_install_message:
|
191
|
+
rdoc_options: []
|
192
|
+
require_paths:
|
193
|
+
- lib
|
194
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '2.2'
|
199
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - ! '>='
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0'
|
204
|
+
requirements: []
|
205
|
+
rubyforge_project:
|
206
|
+
rubygems_version: 2.4.5
|
207
|
+
signing_key:
|
208
|
+
specification_version: 4
|
209
|
+
summary: Build docker packaged apps using chef or shell
|
210
|
+
test_files: []
|