compose-hook 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d427520abbe59d4d4aa9b24270c7d54a2c5e286062c29710333f7ff55c32880b
4
- data.tar.gz: 4300439a695628b7741d9b52fa3de99d4d48f766e5c6821415966763b71a6fdf
3
+ metadata.gz: d6af1586d6748a6aa330311bd40f8b7814c2b75de17b7cd1d8a41ebcab5c5f70
4
+ data.tar.gz: d090d9aa9581fb85f0aa3d0471ed9fe581afac047fb14aa40276c84b53a59ac3
5
5
  SHA512:
6
- metadata.gz: 6a460dd5dd9a6c3d1e543c895089a2a994e7ea0256e5773d8578009996fee3c28f33471ee984d2d28d105107eab06408ebe14df7465d81e3f24f96997d64fba0
7
- data.tar.gz: 56b536867cf8a10d78d0b89e7c9b42263e8de99842376e9281baa4e39fdd116b108e60d8c05599d540f5585b95ac8f41c9f8a71dfa0293c77865d817adbcff79
6
+ metadata.gz: 88738ed3b89d1153c023504b662681197cf7c29f47acba4146216df4cedcd1101bf64b02883d9e5179b89c4d2deeaca8c6341b3bbdf60b59fe40be9b0161932e
7
+ data.tar.gz: 130429b7385c4e9c8e9bcd9545d366ccbcf07e61e9c2ccccf42745fc18ade73b06bd63e0fdbe89bed435bde69727bd1f0f0451a43ced243db923853bcac2f1fd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- compose-hook (0.1.2)
4
+ compose-hook (0.1.3)
5
5
  faraday
6
6
  jwt (~> 2.2)
7
7
  puma
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -0,0 +1,6 @@
1
+ ---
2
+ version: '3.6'
3
+ services:
4
+ barong:
5
+ restart: always
6
+ image: quay.io/openware/barong:2.4.6
@@ -4,22 +4,29 @@ class ComposeHook::WebHook < Sinatra::Base
4
4
  class RequestError < StandardError; end
5
5
  class ServerError < StandardError; end
6
6
 
7
- attr_accessor :config, :secret, :decoder
8
-
9
7
  set :show_exceptions, false
10
8
 
11
9
  def initialize(app=nil)
12
10
  super
13
11
 
14
- @secret = ENV["WEBHOOK_JWT_SECRET"]
15
12
  raise "WEBHOOK_JWT_SECRET is not set" if secret.to_s.empty?
16
13
  raise "CONFIG_PATH is not set" if ENV["CONFIG_PATH"].to_s.empty?
17
14
  raise "File #{ENV['CONFIG_PATH']} not found" unless File.exist?(ENV["CONFIG_PATH"])
15
+ end
16
+
17
+ def secret
18
+ ENV["WEBHOOK_JWT_SECRET"]
19
+ end
18
20
 
19
- @config = YAML.load_file(ENV["CONFIG_PATH"])
20
- raise "The config file is empty or non-existent" if @config.empty?
21
+ def decoder
22
+ ComposeHook::Payload.new(secret: secret)
23
+ end
24
+
25
+ def config
26
+ config = YAML.load_file(ENV["CONFIG_PATH"])
27
+ raise "The config file is empty or non-existent" if config.empty?
21
28
 
22
- @decoder = ComposeHook::Payload.new(secret: secret)
29
+ config
23
30
  end
24
31
 
25
32
  def update_service(path, service, image)
@@ -30,17 +37,16 @@ class ComposeHook::WebHook < Sinatra::Base
30
37
  end
31
38
 
32
39
  def find_service(service, path)
33
- res = ""
40
+ puts "find_service: #{path}"
34
41
 
35
42
  Dir[File.join(path, "*.yml")].each do |file|
36
43
  begin
37
- res = file.path unless YAML.load_file(file)["services"][service].empty?
44
+ return file unless YAML.load_file(file)["services"][service].empty?
38
45
  rescue StandardError => e
39
- puts "Error while parsing deployment files:", e
46
+ warn "Error while parsing deployment files:", e
40
47
  end
41
48
  end
42
-
43
- res
49
+ raise RequestError.new("service #{service} not found")
44
50
  end
45
51
 
46
52
  before do
@@ -53,31 +59,35 @@ class ComposeHook::WebHook < Sinatra::Base
53
59
 
54
60
  get "/deploy/:token" do |token|
55
61
  begin
56
- decoded = @decoder.safe_decode(token)
62
+ decoded = decoder.safe_decode(token)
57
63
  return answer(400, "invalid token") unless decoded
58
64
 
59
65
  service = decoded["service"]
60
66
  image = decoded["image"]
61
67
  hostname = request.host
68
+ return answer(500, "configuration must be an array of hash") unless config.is_a?(Array)
69
+
62
70
  deployment = config.find {|d| d["domain"] == hostname }
63
- service_file = find_service(service, File.join(deployment["path"], deployment["subpath"]))
71
+ return answer(400, "unknown domain #{hostname}") unless deployment
72
+ return answer(400, "root missing for #{hostname}") unless deployment["root"]
64
73
 
74
+ service_file = find_service(service, File.join(deployment["root"], deployment["subpath"].to_s))
65
75
  return answer(400, "service is not specified") unless service
66
76
  return answer(400, "image is not specified") unless image
67
77
  return answer(404, "invalid domain") unless deployment
68
78
  return answer(404, "invalid service") unless service_file
69
- return answer(400, "invalid image") if (%r(^(([-_\w\.]){,20}(\/|:))+([-\w\.]{,20})$) =~ image).nil?
79
+ return answer(400, "invalid image format") if (%r(^(([-_\w\.]){,20}(\/|:))+([-\w\.]{,20})$) =~ image).nil?
70
80
 
71
- system "docker image pull #{image}"
81
+ Kernel.system "docker image pull #{image}"
72
82
 
73
83
  unless $CHILD_STATUS.success?
74
- system("docker image inspect #{image} > /dev/null")
84
+ Kernel.system("docker image inspect #{image} > /dev/null")
75
85
  return answer(404, "invalid image") unless $CHILD_STATUS.success?
76
86
  end
77
87
 
78
88
  Dir.chdir(deployment["root"]) do
79
89
  update_service(service_file, service, image)
80
- system "docker-compose up -Vd #{service}"
90
+ Kernel.system "docker-compose up -Vd #{service}"
81
91
  raise ServerError.new("could not recreate the container") unless $CHILD_STATUS.success?
82
92
  end
83
93
 
@@ -86,6 +96,9 @@ class ComposeHook::WebHook < Sinatra::Base
86
96
  return answer(400, e.to_s)
87
97
  rescue ServerError => e
88
98
  return answer(500, e.to_s)
99
+ rescue StandardError => e
100
+ warn "Error: #{e}:\n#{e.backtrace.join("\n")}"
101
+ return answer(500, "Internal server error")
89
102
  end
90
103
  end
91
104
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compose-hook
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danylo P.
@@ -246,7 +246,7 @@ files:
246
246
  - bin/install_webhook
247
247
  - compose-hook.gemspec
248
248
  - config.ru
249
- - config/deployments.yml
249
+ - config/docker-compose.yml
250
250
  - lib/compose-hook.rb
251
251
  - lib/compose_hook/payload.rb
252
252
  - lib/compose_hook/webhook.rb
@@ -1,3 +0,0 @@
1
- - domain: "www.example.com"
2
- root: "/home/deploy/example"
3
- subpath: "compose"