harbr 0.1.29 → 0.1.30

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: 1107100336cf38cf470271553322c65c0804e6eed5289ba7fa659a28e796d3b4
4
- data.tar.gz: 528bae66f18eb8a2910766ee41b06f2b86773816623de3a381110c59469b5065
3
+ metadata.gz: 2588c43ae55e0764c8425290704320a29efb66a8c0e2082730354d9a3a7b7f9b
4
+ data.tar.gz: 789193e3987ac30e15017dfc0f02d7d945e0f73df3cf51d75445e057395312df
5
5
  SHA512:
6
- metadata.gz: 17e27a58c4c599411dd3127d9287bf5356feb7026d6420ff9c8c89b670ae34ea33da0353e26aa91425fb41f2e295f4cc752ca0ab80259bcac0606887312d95d7
7
- data.tar.gz: 24fdda1278341c4ba8996ce49eb5c86cc801e948bde4ea24cc231909951f077da0eee38c8af70b48043e2349e7d8633487d2064d1825b13ec8617fb62843add3
6
+ metadata.gz: 2065f4f5527f2425094a8dea877301fb6ca6ab778e427f7deac6386658a9115ba98707680832591c5b37221921edd0a1e1127e72968f54c8f91d03f38e62b54c
7
+ data.tar.gz: 36c0febbdab8d272e150a6a75e1491330e9072409e1dc1d427d70a3cc89fbf07174e6b02cdc69d1309ed6399d1c2d448e2e94b87b359f1b6ebb211e4d242a3f0
data/exe/harbr CHANGED
@@ -73,7 +73,7 @@ class HarbrCLI < Thor
73
73
  else
74
74
  Harbr::Next::Job.perform_async(container, version)
75
75
  end
76
-
76
+
77
77
  puts "deploy next version #{version} of #{container}"
78
78
  end
79
79
 
@@ -120,7 +120,7 @@ class HarbrCLI < Thor
120
120
  [name, "next.#{name}"].each do |container_name|
121
121
  container = container_repo.find_by_name(container_name)
122
122
  if container
123
- `port release #{container.port}`
123
+ `port release #{container.port}`
124
124
  puts "released port #{container.port} successfully."
125
125
  container_repo.delete(container)
126
126
  end
@@ -129,7 +129,6 @@ class HarbrCLI < Thor
129
129
  `rm -rf /etc/sv/harbr/#{container_name}`
130
130
 
131
131
  puts "Container #{container_name} destroyed successfully."
132
-
133
132
  end
134
133
 
135
134
  `rm -rf /var/harbr/containers/#{name}`
@@ -179,12 +178,12 @@ class HarbrCLI < Thor
179
178
  desc "deploy", "deploy a container to production"
180
179
  def deploy(name)
181
180
  Dir.chdir("/var/harbr/containers/#{name}/") do
182
- /(?<current>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
181
+ /(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
183
182
 
184
183
  `rm -r rollback`
185
184
  `ln -sf #{$2} rollback`
186
185
 
187
- /(?<next>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/next`
186
+ /(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/next`
188
187
  `rm -r current`
189
188
  `ln -sf #{$2} current`
190
189
  `sv restart #{name}`
@@ -196,7 +195,7 @@ class HarbrCLI < Thor
196
195
  Dir.chdir("/var/harbr/containers/#{name}") do
197
196
  if File.exist?("rollback")
198
197
  Dir.chdir("/var/harbr/containers/#{name}/") do
199
- /(?<current>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/rollback`
198
+ /(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/rollback`
200
199
  `rm -r current`
201
200
  `ln -sf #{$2} current`
202
201
  `sv restart #{name}`
data/lib/harbr/job.rb CHANGED
@@ -75,7 +75,7 @@ module Harbr
75
75
  end
76
76
 
77
77
  def to_s
78
- script_template = <<~SCRIPT
78
+ <<~SCRIPT
79
79
  #!/bin/sh
80
80
  exec 2>&1
81
81
  cd /var/harbr/containers/#{@container_name}/current
@@ -94,7 +94,7 @@ module Harbr
94
94
  end
95
95
 
96
96
  def to_s
97
- script_template = <<~SCRIPT
97
+ <<~SCRIPT
98
98
  #!/bin/sh
99
99
  sleep 3
100
100
  `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
@@ -108,7 +108,7 @@ module Harbr
108
108
  end
109
109
 
110
110
  def to_s
111
- script_template = <<~SCRIPT
111
+ <<~SCRIPT
112
112
  #!/bin/sh
113
113
  exec svlogd -tt /var/log/harbr/#{@container_name}
114
114
  SCRIPT
@@ -129,13 +129,12 @@ module Harbr
129
129
 
130
130
  def perform(name, version)
131
131
  Dir.chdir "/var/harbr/containers/#{name}/versions/#{version}" do
132
-
133
132
  manifest = load_manifest(name, version)
134
133
  port = `port assign #{manifest.port}`.strip
135
134
  system "sv stop #{name}" if File.exist?("/etc/service/#{name}")
136
135
  if File.exist?("Gemfile")
137
136
  `bundle config set --local path 'vendor/bundle'`
138
- system "bundle install"
137
+ system "bundle install"
139
138
  end
140
139
 
141
140
  `mkdir -p /etc/sv/harbr/#{name}`
@@ -80,11 +80,11 @@ module Harbr
80
80
  end
81
81
 
82
82
  def to_s
83
- script_template = <<~SCRIPT
84
- #!/bin/sh
85
- exec 2>&1
86
- cd /var/harbr/#{@container_name}/current
87
- exec ./exe/run #{@port} live
83
+ <<~SCRIPT
84
+ #!/bin/sh
85
+ exec 2>&1
86
+ cd /var/harbr/#{@container_name}/current
87
+ exec ./exe/run #{@port} live
88
88
  SCRIPT
89
89
  end
90
90
 
@@ -99,10 +99,10 @@ module Harbr
99
99
  end
100
100
 
101
101
  def to_s
102
- script_template = <<~SCRIPT
103
- #!/bin/sh
104
- sleep 3
105
- `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
102
+ <<~SCRIPT
103
+ #!/bin/sh
104
+ sleep 3
105
+ `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
106
106
  SCRIPT
107
107
  end
108
108
  end
@@ -113,9 +113,9 @@ module Harbr
113
113
  end
114
114
 
115
115
  def to_s
116
- script_template = <<~SCRIPT
117
- #!/bin/sh
118
- exec svlogd -tt /var/log/harbr/#{@container_name}/next/
116
+ <<~SCRIPT
117
+ #!/bin/sh
118
+ exec svlogd -tt /var/log/harbr/#{@container_name}/next/
119
119
  SCRIPT
120
120
  end
121
121
  end
@@ -128,11 +128,11 @@ module Harbr
128
128
  end
129
129
 
130
130
  def to_s
131
- script_template = <<~SCRIPT
132
- #!/bin/sh
133
- exec 2>&1
134
- cd /var/harbr/containers/#{@container_name}/next
135
- exec ./exe/run #{@port} next
131
+ <<~SCRIPT
132
+ #!/bin/sh
133
+ exec 2>&1
134
+ cd /var/harbr/containers/#{@container_name}/next
135
+ exec ./exe/run #{@port} next
136
136
  SCRIPT
137
137
  end
138
138
  end
@@ -143,9 +143,9 @@ module Harbr
143
143
  end
144
144
 
145
145
  def to_s
146
- script_template = <<~SCRIPT
147
- #!/bin/sh
148
- exec svlogd -tt /var/log/harbr/#{@container_name}/next/
146
+ <<~SCRIPT
147
+ #!/bin/sh
148
+ exec svlogd -tt /var/log/harbr/#{@container_name}/next/
149
149
  SCRIPT
150
150
  end
151
151
  end
@@ -164,47 +164,49 @@ module Harbr
164
164
  end
165
165
 
166
166
  def perform(name, version)
167
-
168
- manifest = load_manifest(name, version)
169
- current_path = "/var/harbr/containers/#{name}/versions/#{version}"
170
167
 
171
- port = `port assign next.#{manifest.port}`.strip
168
+ Harbr.notifiable do
169
+ manifest = load_manifest(name, version)
170
+ current_path = "/var/harbr/containers/#{name}/versions/#{version}"
172
171
 
173
- Dir.chdir current_path do
174
- system "sv stop next.#{name}"
175
- if File.exist?("Gemfile")
176
- `bundle config set --local path 'vendor/bundle'`
177
- system "bundle install"
178
- end
179
-
172
+ port = `port assign next.#{manifest.port}`.strip
180
173
 
181
- `mkdir -p /etc/sv/harbr/#{name}/next`
182
- `mkdir -p /etc/sv/harbr/#{name}/next/log`
183
- `mkdir -p /var/log/harbr/#{name}/next/log`
174
+ Dir.chdir current_path do
175
+ system "sv stop next.#{name}"
176
+ if File.exist?("Gemfile")
177
+ `bundle config set --local path 'vendor/bundle'`
178
+ system "bundle install"
179
+ end
184
180
 
185
- write_to_file "/etc/sv/harbr/#{name}/next/run", Runit::Next::Run.new(name, port).to_s
186
- write_to_file "/etc/sv/harbr/#{name}/next/finish", Runit::Finish.new(port).to_s
187
- write_to_file "/etc/sv/harbr/#{name}/next/log/run", Runit::Next::Log.new(name).to_s
181
+ `mkdir -p /etc/sv/harbr/#{name}/next`
182
+ `mkdir -p /etc/sv/harbr/#{name}/next/log`
183
+ `mkdir -p /var/log/harbr/#{name}/next/log`
188
184
 
189
- `chmod +x /etc/sv/harbr/#{name}/next/run`
190
- `chmod +x /etc/sv/harbr/#{name}/next/log/run`
191
- `chmod +x /etc/sv/harbr/#{name}/next/finish`
185
+ write_to_file "/etc/sv/harbr/#{name}/next/run", Runit::Next::Run.new(name, port).to_s
186
+ write_to_file "/etc/sv/harbr/#{name}/next/finish", Runit::Finish.new(port).to_s
187
+ write_to_file "/etc/sv/harbr/#{name}/next/log/run", Runit::Next::Log.new(name).to_s
192
188
 
193
- system "rm /etc/service/next.#{name}"
194
- system "rm /var/harbr/containers/#{name}/next"
189
+ `chmod +x /etc/sv/harbr/#{name}/next/run`
190
+ `chmod +x /etc/sv/harbr/#{name}/next/log/run`
191
+ `chmod +x /etc/sv/harbr/#{name}/next/finish`
195
192
 
196
- system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/next"
197
- system "ln -sf /etc/sv/harbr/#{name}/next /etc/service/next.#{name}"
193
+ system "rm /etc/service/next.#{name}"
194
+ system "rm /var/harbr/containers/#{name}/next"
198
195
 
199
- `rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
200
- puts "sync live data to next"
196
+ system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/next"
197
+ system "ln -sf /etc/sv/harbr/#{name}/next /etc/service/next.#{name}"
198
+
199
+ `rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
200
+ puts "sync live data to next"
201
+
202
+ system "sv restart next.#{name}"
203
+ end
201
204
 
202
- system "sv restart next.#{name}"
205
+ containers = collate_containers("next.#{name}", "next.#{manifest.host}", port)
206
+ create_traefik_config(containers)
207
+ puts "harbr: #{version} of #{name}"
203
208
  end
204
209
 
205
- containers = collate_containers("next.#{name}", "next.#{manifest.host}", port)
206
- create_traefik_config(containers)
207
- puts "harbr: #{version} of #{name}"
208
210
  end
209
211
  end
210
212
  end
data/lib/harbr/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.1.29"
4
+ VERSION = "0.1.30"
5
5
  end
data/lib/harbr.rb CHANGED
@@ -6,6 +6,7 @@ require "toml-rb"
6
6
  require "fileutils"
7
7
  require "ostruct"
8
8
  require "sucker_punch"
9
+ require 'resend'
9
10
 
10
11
  require_relative "harbr/version"
11
12
  require_relative "harbr/container"
@@ -17,6 +18,37 @@ module Harbr
17
18
  DEFAULT_DIRECTORY = "/var/harbr/containers"
18
19
  DEFAULT_DIRECTORY_DATA_DIR = "#{DEFAULT_DIRECTORY}/.data"
19
20
  class Error < StandardError; end
21
+
22
+ def self.notifiable
23
+ begin
24
+ yield if block_given?
25
+ send_notification("Harbr: #{name} deployed successfully","<p>harbr: #{version} of #{name} deployed successfully</p>")
26
+ rescue => e
27
+ html_content = "<p>Error: #{e.message}</p>
28
+ <p>#{e.backtrace.join('<br>')}</p>
29
+ <p>harbr: #{version} of #{name} failed to deploy</p>"
30
+ Harbr.send_notification("Harbr: #{name} failed to deploy",html_content)
31
+
32
+ end
33
+
34
+ def self.send_notification(subject, body)
35
+ begin
36
+ Resend.api_key = ENV['RESEND_API_KEY']
37
+ params = {
38
+ from: ENV['RESEND_FROM'],
39
+ to: ENV['RESEND_TO'],
40
+ subject: subject,
41
+ html: body
42
+ }
43
+
44
+ Resend::Emails.send(params)
45
+ rescue => e
46
+ puts "Error sending notification: #{e.message}"
47
+ return
48
+ end
49
+
50
+ end
51
+
20
52
  end
21
53
 
22
54
  Dddr.configure do |config|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: harbr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.29
4
+ version: 0.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delaney Kuldvee Burke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-23 00:00:00.000000000 Z
11
+ date: 2023-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen