harbr 0.1.29 → 0.1.30
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 +4 -4
- data/exe/harbr +5 -6
- data/lib/harbr/job.rb +4 -5
- data/lib/harbr/next/job.rb +52 -50
- data/lib/harbr/version.rb +1 -1
- data/lib/harbr.rb +32 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2588c43ae55e0764c8425290704320a29efb66a8c0e2082730354d9a3a7b7f9b
|
4
|
+
data.tar.gz: 789193e3987ac30e15017dfc0f02d7d945e0f73df3cf51d75445e057395312df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
/(
|
181
|
+
/(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
|
183
182
|
|
184
183
|
`rm -r rollback`
|
185
184
|
`ln -sf #{$2} rollback`
|
186
185
|
|
187
|
-
/(
|
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
|
-
/(
|
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
|
-
|
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
|
-
|
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
|
-
|
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}`
|
data/lib/harbr/next/job.rb
CHANGED
@@ -80,11 +80,11 @@ module Harbr
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def to_s
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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
|
-
|
117
|
-
|
118
|
-
|
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
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
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
|
-
|
147
|
-
|
148
|
-
|
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
|
-
|
168
|
+
Harbr.notifiable do
|
169
|
+
manifest = load_manifest(name, version)
|
170
|
+
current_path = "/var/harbr/containers/#{name}/versions/#{version}"
|
172
171
|
|
173
|
-
|
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
|
-
|
182
|
-
|
183
|
-
|
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
|
-
|
186
|
-
|
187
|
-
|
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
|
-
|
190
|
-
|
191
|
-
|
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
|
-
|
194
|
-
|
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
|
-
|
197
|
-
|
193
|
+
system "rm /etc/service/next.#{name}"
|
194
|
+
system "rm /var/harbr/containers/#{name}/next"
|
198
195
|
|
199
|
-
|
200
|
-
|
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
|
-
|
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
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.
|
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-
|
11
|
+
date: 2023-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: listen
|