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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module Dapp
2
+ VERSION = '0.0.1'.freeze
3
+ end
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: []