kitchen_hooks 1.3.0
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 +7 -0
- data/.gitignore +16 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +214 -0
- data/LICENSE +13 -0
- data/Rakefile +47 -0
- data/Readme.md +61 -0
- data/VERSION +1 -0
- data/bin/kitchen_hooks +3 -0
- data/etc/commit.json +66 -0
- data/etc/config.json +14 -0
- data/kitchen_hooks.gemspec +30 -0
- data/lib/kitchen_hooks/app.rb +112 -0
- data/lib/kitchen_hooks/helpers.rb +190 -0
- data/lib/kitchen_hooks/main.rb +65 -0
- data/lib/kitchen_hooks/metadata.rb +23 -0
- data/lib/kitchen_hooks.rb +3 -0
- data/web/app/kitchen_hooks.js +25 -0
- data/web/app/style/kitchen_hooks.css +33 -0
- data/web/public/favicon.ico +0 -0
- data/web/public/vendor/css/superhero-v3.3.0.css +9 -0
- data/web/public/vendor/css/vertical-timeline-v1.0.0.css +460 -0
- data/web/public/vendor/img/cd-icon.svg +11 -0
- data/web/public/vendor/js/bootstrap-v3.3.0.js +2276 -0
- data/web/public/vendor/js/jquery-timeago-v1.4.1.js +214 -0
- data/web/public/vendor/js/jquery-v2.1.1.js +9190 -0
- data/web/views/app.erb +22 -0
- data/web/views/layout.erb +24 -0
- metadata +197 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 760843807d63eaef7ed7404f29a3753a31bf87cb
|
4
|
+
data.tar.gz: b4f84ca3eb75f8186a98aaf18627861fba741218
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 94fc3e2fa4ecdd92622de6bcd529572b18d4f75ed72cf98dd236d80fa09643291f41cebc1fb76ecb95523d5696e12c28d1382f097bab71f009168e7cfb0ab14e
|
7
|
+
data.tar.gz: 51951023a68f5fc43cd22cae3989e43d6f937f8d069ef5dad4ae8c4ea545ce5c8b7840d591344f4a12088c39466a0297b6b663fb3ee6ba1805dfad7d16c8f293
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
kitchen_hooks (1.2.0)
|
5
|
+
berkshelf (~> 3)
|
6
|
+
chef (~> 11.16.4)
|
7
|
+
daybreak (~> 0.3)
|
8
|
+
git (~> 1.2)
|
9
|
+
mime-types (~> 1)
|
10
|
+
retryable (~> 1)
|
11
|
+
ridley (~> 4.1)
|
12
|
+
sinatra (~> 1.4)
|
13
|
+
thor (~> 0)
|
14
|
+
|
15
|
+
GEM
|
16
|
+
remote: https://rubygems.org/
|
17
|
+
specs:
|
18
|
+
addressable (2.3.6)
|
19
|
+
arr-pm (0.0.9)
|
20
|
+
cabin (> 0)
|
21
|
+
backports (3.6.4)
|
22
|
+
berkshelf (3.2.1)
|
23
|
+
addressable (~> 2.3.4)
|
24
|
+
berkshelf-api-client (~> 1.2)
|
25
|
+
buff-config (~> 1.0)
|
26
|
+
buff-extensions (~> 1.0)
|
27
|
+
buff-shell_out (~> 0.1)
|
28
|
+
celluloid (~> 0.16.0)
|
29
|
+
celluloid-io (~> 0.16.1)
|
30
|
+
cleanroom (~> 1.0)
|
31
|
+
faraday (~> 0.9.0)
|
32
|
+
minitar (~> 0.5.4)
|
33
|
+
octokit (~> 3.0)
|
34
|
+
retryable (~> 1.3.3)
|
35
|
+
ridley (~> 4.0)
|
36
|
+
solve (~> 1.1)
|
37
|
+
thor (~> 0.19)
|
38
|
+
berkshelf-api-client (1.2.0)
|
39
|
+
faraday (~> 0.9.0)
|
40
|
+
buff-config (1.0.1)
|
41
|
+
buff-extensions (~> 1.0)
|
42
|
+
varia_model (~> 0.4)
|
43
|
+
buff-extensions (1.0.0)
|
44
|
+
buff-ignore (1.1.1)
|
45
|
+
buff-ruby_engine (0.1.0)
|
46
|
+
buff-shell_out (0.2.0)
|
47
|
+
buff-ruby_engine (~> 0.1.0)
|
48
|
+
cabin (0.6.1)
|
49
|
+
celluloid (0.16.0)
|
50
|
+
timers (~> 4.0.0)
|
51
|
+
celluloid-io (0.16.1)
|
52
|
+
celluloid (>= 0.16.0)
|
53
|
+
nio4r (>= 1.0.0)
|
54
|
+
chef (11.16.4)
|
55
|
+
chef-zero (~> 2.1, >= 2.1.4)
|
56
|
+
diff-lcs (~> 1.2, >= 1.2.4)
|
57
|
+
erubis (~> 2.7)
|
58
|
+
ffi-yajl (~> 1.0)
|
59
|
+
highline (~> 1.6, >= 1.6.9)
|
60
|
+
mime-types (~> 1.16)
|
61
|
+
mixlib-authentication (~> 1.3)
|
62
|
+
mixlib-cli (~> 1.4)
|
63
|
+
mixlib-config (~> 2.0)
|
64
|
+
mixlib-log (~> 1.3)
|
65
|
+
mixlib-shellout (~> 1.4)
|
66
|
+
net-ssh (~> 2.6)
|
67
|
+
net-ssh-multi (~> 1.1)
|
68
|
+
ohai (~> 7.4)
|
69
|
+
plist (~> 3.1.0)
|
70
|
+
pry (~> 0.9)
|
71
|
+
rest-client (>= 1.0.4, <= 1.6.7)
|
72
|
+
chef-zero (2.2.1)
|
73
|
+
ffi-yajl (~> 1.1)
|
74
|
+
hashie (~> 2.0)
|
75
|
+
mixlib-log (~> 1.3)
|
76
|
+
rack
|
77
|
+
childprocess (0.5.5)
|
78
|
+
ffi (~> 1.0, >= 1.0.11)
|
79
|
+
clamp (0.6.3)
|
80
|
+
cleanroom (1.0.0)
|
81
|
+
coderay (1.1.0)
|
82
|
+
daemons (1.1.9)
|
83
|
+
daybreak (0.3.0)
|
84
|
+
dep-selector-libgecode (1.0.2)
|
85
|
+
dep_selector (1.0.3)
|
86
|
+
dep-selector-libgecode (~> 1.0)
|
87
|
+
ffi (~> 1.9)
|
88
|
+
diff-lcs (1.2.5)
|
89
|
+
erubis (2.7.0)
|
90
|
+
eventmachine (1.0.3)
|
91
|
+
faraday (0.9.0)
|
92
|
+
multipart-post (>= 1.2, < 3)
|
93
|
+
ffi (1.9.6)
|
94
|
+
ffi-yajl (1.3.1)
|
95
|
+
ffi (~> 1.5)
|
96
|
+
libyajl2 (~> 1.2)
|
97
|
+
fpm (1.3.2)
|
98
|
+
arr-pm (~> 0.0.9)
|
99
|
+
backports (>= 2.6.2)
|
100
|
+
cabin (>= 0.6.0)
|
101
|
+
childprocess
|
102
|
+
clamp (~> 0.6)
|
103
|
+
ffi
|
104
|
+
json (>= 1.7.7)
|
105
|
+
git (1.2.8)
|
106
|
+
hashie (2.1.2)
|
107
|
+
highline (1.6.21)
|
108
|
+
hitimes (1.2.2)
|
109
|
+
ipaddress (0.8.0)
|
110
|
+
json (1.8.1)
|
111
|
+
libyajl2 (1.2.0)
|
112
|
+
method_source (0.8.2)
|
113
|
+
mime-types (1.25.1)
|
114
|
+
minitar (0.5.4)
|
115
|
+
minitest (5.4.3)
|
116
|
+
mixlib-authentication (1.3.0)
|
117
|
+
mixlib-log
|
118
|
+
mixlib-cli (1.5.0)
|
119
|
+
mixlib-config (2.1.0)
|
120
|
+
mixlib-log (1.6.0)
|
121
|
+
mixlib-shellout (1.6.1)
|
122
|
+
multipart-post (2.0.0)
|
123
|
+
net-http-persistent (2.9.4)
|
124
|
+
net-ssh (2.9.1)
|
125
|
+
net-ssh-gateway (1.2.0)
|
126
|
+
net-ssh (>= 2.6.5)
|
127
|
+
net-ssh-multi (1.2.0)
|
128
|
+
net-ssh (>= 2.6.5)
|
129
|
+
net-ssh-gateway (>= 1.2.0)
|
130
|
+
nio4r (1.0.1)
|
131
|
+
octokit (3.7.0)
|
132
|
+
sawyer (~> 0.6.0, >= 0.5.3)
|
133
|
+
ohai (7.4.0)
|
134
|
+
ffi (~> 1.9)
|
135
|
+
ffi-yajl (~> 1.0)
|
136
|
+
ipaddress
|
137
|
+
mime-types (~> 1.16)
|
138
|
+
mixlib-cli
|
139
|
+
mixlib-config (~> 2.0)
|
140
|
+
mixlib-log
|
141
|
+
mixlib-shellout (~> 1.2)
|
142
|
+
systemu (~> 2.6.4)
|
143
|
+
wmi-lite (~> 1.0)
|
144
|
+
plist (3.1.0)
|
145
|
+
pry (0.10.1)
|
146
|
+
coderay (~> 1.1.0)
|
147
|
+
method_source (~> 0.8.1)
|
148
|
+
slop (~> 3.4)
|
149
|
+
rack (1.5.2)
|
150
|
+
rack-protection (1.5.3)
|
151
|
+
rack
|
152
|
+
rake (10.4.2)
|
153
|
+
rest-client (1.6.7)
|
154
|
+
mime-types (>= 1.16)
|
155
|
+
retryable (1.3.6)
|
156
|
+
ridley (4.1.0)
|
157
|
+
addressable
|
158
|
+
buff-config (~> 1.0)
|
159
|
+
buff-extensions (~> 1.0)
|
160
|
+
buff-ignore (~> 1.1)
|
161
|
+
buff-shell_out (~> 0.1)
|
162
|
+
celluloid (~> 0.16.0)
|
163
|
+
celluloid-io (~> 0.16.1)
|
164
|
+
erubis
|
165
|
+
faraday (~> 0.9.0)
|
166
|
+
hashie (>= 2.0.2, < 3.0.0)
|
167
|
+
json (>= 1.7.7)
|
168
|
+
mixlib-authentication (>= 1.3.0)
|
169
|
+
net-http-persistent (>= 2.8)
|
170
|
+
retryable
|
171
|
+
semverse (~> 1.1)
|
172
|
+
varia_model (~> 0.4)
|
173
|
+
rubygems-tasks (0.2.4)
|
174
|
+
sawyer (0.6.0)
|
175
|
+
addressable (~> 2.3.5)
|
176
|
+
faraday (~> 0.8, < 0.10)
|
177
|
+
semverse (1.2.1)
|
178
|
+
sinatra (1.4.5)
|
179
|
+
rack (~> 1.4)
|
180
|
+
rack-protection (~> 1.4)
|
181
|
+
tilt (~> 1.3, >= 1.3.4)
|
182
|
+
slop (3.6.0)
|
183
|
+
solve (1.2.1)
|
184
|
+
dep_selector (~> 1.0)
|
185
|
+
semverse (~> 1.1)
|
186
|
+
systemu (2.6.4)
|
187
|
+
thin (1.6.3)
|
188
|
+
daemons (~> 1.0, >= 1.0.9)
|
189
|
+
eventmachine (~> 1.0)
|
190
|
+
rack (~> 1.0)
|
191
|
+
thor (0.19.1)
|
192
|
+
tilt (1.4.1)
|
193
|
+
timers (4.0.1)
|
194
|
+
hitimes
|
195
|
+
varia_model (0.4.0)
|
196
|
+
buff-extensions (~> 1.0)
|
197
|
+
hashie (>= 2.0.2, < 3.0.0)
|
198
|
+
version (1.0.0)
|
199
|
+
wmi-lite (1.0.0)
|
200
|
+
yard (0.8.7.6)
|
201
|
+
|
202
|
+
PLATFORMS
|
203
|
+
ruby
|
204
|
+
|
205
|
+
DEPENDENCIES
|
206
|
+
fpm
|
207
|
+
kitchen_hooks!
|
208
|
+
minitest
|
209
|
+
pry
|
210
|
+
rake
|
211
|
+
rubygems-tasks
|
212
|
+
thin
|
213
|
+
version
|
214
|
+
yard
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright (c) 2014 Blue Jeans Network
|
2
|
+
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
purpose with or without fee is hereby granted, provided that the above
|
5
|
+
copyright notice and this permission notice appear in all copies.
|
6
|
+
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
8
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
9
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
10
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
11
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
12
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
13
|
+
PERFORMANCE OF THIS SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
|
7
|
+
# "rake test"
|
8
|
+
require 'rake/testtask'
|
9
|
+
Rake::TestTask.new(:test) do |test|
|
10
|
+
test.libs << 'lib' << 'test'
|
11
|
+
test.test_files = FileList['test/test*.rb']
|
12
|
+
test.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
task :default => :test
|
16
|
+
|
17
|
+
|
18
|
+
# "rake yard"
|
19
|
+
require 'yard'
|
20
|
+
YARD::Rake::YardocTask.new do |t|
|
21
|
+
t.files = %w[ --readme Readme.md lib/**/*.rb - VERSION ]
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# "rake build"
|
26
|
+
require 'rubygems/tasks'
|
27
|
+
Gem::Tasks.new({
|
28
|
+
push: false,
|
29
|
+
sign: {}
|
30
|
+
}) do |tasks|
|
31
|
+
tasks.console.command = 'pry'
|
32
|
+
end
|
33
|
+
Gem::Tasks::Sign::Checksum.new sha2: true
|
34
|
+
|
35
|
+
|
36
|
+
# "rake version"
|
37
|
+
require 'rake/version_task'
|
38
|
+
Rake::VersionTask.new
|
39
|
+
|
40
|
+
|
41
|
+
# "rake fpm"
|
42
|
+
desc 'Convert latest .gem to .deb with FPM'
|
43
|
+
task fpm: :build do
|
44
|
+
latest_gem = Dir['pkg/*.gem'].pop
|
45
|
+
system "fpm -s gem -t deb #{Shellwords::escape latest_gem}"
|
46
|
+
system 'mv *.deb pkg'
|
47
|
+
end
|
data/Readme.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Hooks
|
2
|
+
|
3
|
+
[Kitchen Hooks](http://git.bluejeansnet.com/kitchen-hooks) provide a GitLab
|
4
|
+
WebHoook for automated Chef Server uploads following Kitchen standards.
|
5
|
+
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Clone the repo and `rake build`.
|
10
|
+
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
After installing the gem, the `kitchen_hooks` executable should be available:
|
15
|
+
|
16
|
+
$ kitchen_hooks help
|
17
|
+
Commands:
|
18
|
+
kitchen_hooks art # Show application art
|
19
|
+
kitchen_hooks help [COMMAND] # Describe available commands or one specific command
|
20
|
+
kitchen_hooks server # Start application web server
|
21
|
+
kitchen_hooks version # Show application version
|
22
|
+
|
23
|
+
Use the `server` command to start the WebHook receiver:
|
24
|
+
|
25
|
+
$ kitchen_hooks server -c etc/config.json -p 80 -e production
|
26
|
+
== Sinatra/1.4.5 has taken the stage on 80 for production with backup from Thin
|
27
|
+
Thin web server (v1.6.3 codename Protein Powder)
|
28
|
+
Maximum connections set to 1024
|
29
|
+
Listening on 0.0.0.0:80, CTRL+C to stop
|
30
|
+
...
|
31
|
+
|
32
|
+
|
33
|
+
## TODO
|
34
|
+
|
35
|
+
* Use Ridley for data bag, role, and environment uploads to remove Chef dependency
|
36
|
+
|
37
|
+
|
38
|
+
## Changelog
|
39
|
+
|
40
|
+
### 1.3
|
41
|
+
|
42
|
+
* Added local database to store history (Daybreak), visualized on homepage
|
43
|
+
|
44
|
+
### 1.2
|
45
|
+
|
46
|
+
* Added `bind` option to `server` command
|
47
|
+
* Added `berks upload` functionality when tagging realm versions
|
48
|
+
|
49
|
+
### 1.1
|
50
|
+
|
51
|
+
* Moved `examples` to `etc`
|
52
|
+
* Started checking in `Gemfile.lock` for future reference
|
53
|
+
* Added `port` and `environment` options to `kitchen_hooks server`
|
54
|
+
* Move `rake fpm` `.deb` artifacts under `pkg` alongside `.gem` files
|
55
|
+
* Commits to the Kitchen trigger data bag, role, and environment uploads
|
56
|
+
* Tagging a cookbook with a version triggers a cookbook upload (frozen)
|
57
|
+
* Tagging a realm with the name of an environment applies version constraints
|
58
|
+
|
59
|
+
### 1.0
|
60
|
+
|
61
|
+
* Initial release. Gem structure in place, but lacking functionaily
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.3.0
|
data/bin/kitchen_hooks
ADDED
data/etc/commit.json
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
{
|
2
|
+
"before": "08f20548e398f634979047d0c8114260bcc2949a",
|
3
|
+
"after": "fb38bcc884a0579cb52836b00589bca653a9c229",
|
4
|
+
"ref": "refs/heads/master",
|
5
|
+
"user_id": 645,
|
6
|
+
"user_name": "Sean Clemmer",
|
7
|
+
"repository": {
|
8
|
+
"name": "Kitchen Hooks",
|
9
|
+
"url": "git@git.bluejeansnet.com:kitchen-hooks.git",
|
10
|
+
"description": "",
|
11
|
+
"homepage": "http://git.bluejeansnet.com/kitchen-hooks"
|
12
|
+
},
|
13
|
+
"commits": [
|
14
|
+
{
|
15
|
+
"id": "b635fcb8f05e7503c7e6255a6b3e0cebbf487df3",
|
16
|
+
"message": "Initial script",
|
17
|
+
"timestamp": "2014-11-20T15:45:54-08:00",
|
18
|
+
"url": "http://git.bluejeansnet.com/kitchen-hooks/commit/b635fcb8f05e7503c7e6255a6b3e0cebbf487df3",
|
19
|
+
"author": {
|
20
|
+
"name": "Kelly Wong",
|
21
|
+
"email": "kelly@bluejeans.com"
|
22
|
+
}
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"id": "b76fd9058de0f0236605f1ac12aaa405e905a383",
|
26
|
+
"message": "Add notifications",
|
27
|
+
"timestamp": "2014-11-24T18:23:21-08:00",
|
28
|
+
"url": "http://git.bluejeansnet.com/kitchen-hooks/commit/b76fd9058de0f0236605f1ac12aaa405e905a383",
|
29
|
+
"author": {
|
30
|
+
"name": "Kelly Wong",
|
31
|
+
"email": "kelly@bluejeans.com"
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"id": "750a5fbb0741977a2b3e5b87e680b8e1beec001e",
|
36
|
+
"message": "Make a gem",
|
37
|
+
"timestamp": "2014-11-25T17:47:16-08:00",
|
38
|
+
"url": "http://git.bluejeansnet.com/kitchen-hooks/commit/750a5fbb0741977a2b3e5b87e680b8e1beec001e",
|
39
|
+
"author": {
|
40
|
+
"name": "Kelly Wong",
|
41
|
+
"email": "kelly@bluejeans.com"
|
42
|
+
}
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"id": "e3727928632d4ac30599c6726e9532b5e0cd86d7",
|
46
|
+
"message": "Remove MIT license",
|
47
|
+
"timestamp": "2014-11-25T18:29:17-08:00",
|
48
|
+
"url": "http://git.bluejeansnet.com/kitchen-hooks/commit/e3727928632d4ac30599c6726e9532b5e0cd86d7",
|
49
|
+
"author": {
|
50
|
+
"name": "Kelly Wong",
|
51
|
+
"email": "kelly@bluejeans.com"
|
52
|
+
}
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"id": "fb38bcc884a0579cb52836b00589bca653a9c229",
|
56
|
+
"message": "Update readme",
|
57
|
+
"timestamp": "2014-11-25T18:30:57-08:00",
|
58
|
+
"url": "http://git.bluejeansnet.com/kitchen-hooks/commit/fb38bcc884a0579cb52836b00589bca653a9c229",
|
59
|
+
"author": {
|
60
|
+
"name": "Kelly Wong",
|
61
|
+
"email": "kelly@bluejeans.com"
|
62
|
+
}
|
63
|
+
}
|
64
|
+
],
|
65
|
+
"total_commits_count": 5
|
66
|
+
}
|
data/etc/config.json
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path(File.join('..', 'lib'), __FILE__)
|
3
|
+
require 'kitchen_hooks'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'kitchen_hooks'
|
7
|
+
s.version = KitchenHooks::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.author = KitchenHooks::AUTHOR
|
10
|
+
s.email = KitchenHooks::EMAIL
|
11
|
+
s.summary = KitchenHooks::SUMMARY
|
12
|
+
s.description = KitchenHooks::SUMMARY + '.'
|
13
|
+
s.homepage = KitchenHooks::HOMEPAGE
|
14
|
+
s.license = KitchenHooks::LICENSE
|
15
|
+
|
16
|
+
s.add_runtime_dependency 'daybreak', '~> 0.3'
|
17
|
+
s.add_runtime_dependency 'retryable', '~> 1'
|
18
|
+
s.add_runtime_dependency 'berkshelf', '~> 3'
|
19
|
+
s.add_runtime_dependency 'mime-types', '~> 1'
|
20
|
+
s.add_runtime_dependency 'chef', '~> 11.16.4'
|
21
|
+
s.add_runtime_dependency 'thor', '~> 0'
|
22
|
+
s.add_runtime_dependency 'git', '~> 1.2'
|
23
|
+
s.add_runtime_dependency 'sinatra', '~> 1.4'
|
24
|
+
s.add_runtime_dependency 'ridley', '~> 4.1'
|
25
|
+
|
26
|
+
s.files = `git ls-files`.split("\n")
|
27
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
28
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File::basename(f) }
|
29
|
+
s.require_paths = %w[ lib ]
|
30
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
require 'daybreak'
|
5
|
+
require 'sinatra/base'
|
6
|
+
|
7
|
+
require_relative 'helpers'
|
8
|
+
require_relative 'metadata'
|
9
|
+
|
10
|
+
|
11
|
+
module KitchenHooks
|
12
|
+
class App < Sinatra::Application
|
13
|
+
set :root, File.join(KitchenHooks::ROOT, 'web')
|
14
|
+
|
15
|
+
enable :sessions
|
16
|
+
|
17
|
+
include KitchenHooks::Helpers
|
18
|
+
|
19
|
+
def self.db! db_path
|
20
|
+
@@db = Daybreak::DB.new db_path
|
21
|
+
end
|
22
|
+
|
23
|
+
def db &block
|
24
|
+
if block_given?
|
25
|
+
@@db.synchronize do
|
26
|
+
yield
|
27
|
+
end
|
28
|
+
else
|
29
|
+
return @@db
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def database
|
34
|
+
db_entries = {}
|
35
|
+
db.each do |k, v|
|
36
|
+
db_entries[k] = v
|
37
|
+
end
|
38
|
+
return db_entries.sort_by { |stamp, _| stamp }
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.config! config
|
42
|
+
@@knives = config['servers'].map do |s|
|
43
|
+
Pathname.new(s['knife']).expand_path.realpath.to_s
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def knives ; @@knives ||= [] end
|
48
|
+
|
49
|
+
|
50
|
+
get '/' do
|
51
|
+
erb :app, locals: {
|
52
|
+
database: database
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
get '/favicon.ico' do
|
57
|
+
send_file File.join(settings.root, 'favicon.ico'), \
|
58
|
+
:disposition => 'inline'
|
59
|
+
end
|
60
|
+
|
61
|
+
get %r|/app/(.*)| do |fn|
|
62
|
+
send_file File.join(settings.root, 'app', fn), \
|
63
|
+
:disposition => 'inline'
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
post '/' do
|
68
|
+
request.body.rewind
|
69
|
+
event = JSON::parse request.body.read
|
70
|
+
|
71
|
+
if commit_to_kitchen?(event)
|
72
|
+
perform_kitchen_upload(event, knives)
|
73
|
+
save_event \
|
74
|
+
type: 'kitchen upload',
|
75
|
+
author: author(event),
|
76
|
+
repo: repo_name(event),
|
77
|
+
raw: event
|
78
|
+
end
|
79
|
+
|
80
|
+
if tagged_commit_to_cookbook?(event) &&
|
81
|
+
tag_name(event) =~ /^v\d+/ # Tagged with version we're releasing
|
82
|
+
perform_cookbook_upload(event, knives)
|
83
|
+
save_event \
|
84
|
+
type: 'cookbook upload',
|
85
|
+
author: author(event),
|
86
|
+
repo: repo_name(event),
|
87
|
+
cookbook: cookbook_name(event),
|
88
|
+
raw: event
|
89
|
+
end
|
90
|
+
|
91
|
+
if tagged_commit_to_realm?(event) &&
|
92
|
+
tag_name(event) =~ /^bjn_/ # Tagged with environment we're pinning
|
93
|
+
perform_constraint_application(event, knives)
|
94
|
+
save_event \
|
95
|
+
type: 'constraint application',
|
96
|
+
author: author(event),
|
97
|
+
repo: repo_name(event),
|
98
|
+
cookbook: cookbook_name(event),
|
99
|
+
raw: event
|
100
|
+
end
|
101
|
+
|
102
|
+
db.flush
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
def save_event e
|
107
|
+
db do
|
108
|
+
db[Time.now.to_f] = e
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|