harbr 0.1.28 → 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 +8 -7
- data/lib/harbr/job.rb +4 -5
- data/lib/harbr/next/job.rb +51 -48
- 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
|
@@ -70,8 +70,10 @@ class HarbrCLI < Thor
|
|
|
70
70
|
sleep 1
|
|
71
71
|
if version.to_i == 0
|
|
72
72
|
Harbr::Job.perform_async(container, version)
|
|
73
|
+
else
|
|
74
|
+
Harbr::Next::Job.perform_async(container, version)
|
|
73
75
|
end
|
|
74
|
-
|
|
76
|
+
|
|
75
77
|
puts "deploy next version #{version} of #{container}"
|
|
76
78
|
end
|
|
77
79
|
|
|
@@ -118,16 +120,15 @@ class HarbrCLI < Thor
|
|
|
118
120
|
[name, "next.#{name}"].each do |container_name|
|
|
119
121
|
container = container_repo.find_by_name(container_name)
|
|
120
122
|
if container
|
|
121
|
-
`port release #{container.port}`
|
|
123
|
+
`port release #{container.port}`
|
|
122
124
|
puts "released port #{container.port} successfully."
|
|
123
125
|
container_repo.delete(container)
|
|
124
126
|
end
|
|
125
127
|
|
|
126
128
|
`rm -rf /etc/service/#{container_name}`
|
|
127
129
|
`rm -rf /etc/sv/harbr/#{container_name}`
|
|
128
|
-
|
|
130
|
+
|
|
129
131
|
puts "Container #{container_name} destroyed successfully."
|
|
130
|
-
|
|
131
132
|
end
|
|
132
133
|
|
|
133
134
|
`rm -rf /var/harbr/containers/#{name}`
|
|
@@ -177,12 +178,12 @@ class HarbrCLI < Thor
|
|
|
177
178
|
desc "deploy", "deploy a container to production"
|
|
178
179
|
def deploy(name)
|
|
179
180
|
Dir.chdir("/var/harbr/containers/#{name}/") do
|
|
180
|
-
/(
|
|
181
|
+
/(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
|
|
181
182
|
|
|
182
183
|
`rm -r rollback`
|
|
183
184
|
`ln -sf #{$2} rollback`
|
|
184
185
|
|
|
185
|
-
/(
|
|
186
|
+
/(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/next`
|
|
186
187
|
`rm -r current`
|
|
187
188
|
`ln -sf #{$2} current`
|
|
188
189
|
`sv restart #{name}`
|
|
@@ -194,7 +195,7 @@ class HarbrCLI < Thor
|
|
|
194
195
|
Dir.chdir("/var/harbr/containers/#{name}") do
|
|
195
196
|
if File.exist?("rollback")
|
|
196
197
|
Dir.chdir("/var/harbr/containers/#{name}/") do
|
|
197
|
-
/(
|
|
198
|
+
/(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/rollback`
|
|
198
199
|
`rm -r current`
|
|
199
200
|
`ln -sf #{$2} current`
|
|
200
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,46 +164,49 @@ module Harbr
|
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
def perform(name, version)
|
|
167
|
-
`bundle config set --local path 'vendor/bundle'`
|
|
168
167
|
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
Harbr.notifiable do
|
|
169
|
+
manifest = load_manifest(name, version)
|
|
170
|
+
current_path = "/var/harbr/containers/#{name}/versions/#{version}"
|
|
171
|
+
|
|
172
|
+
port = `port assign next.#{manifest.port}`.strip
|
|
171
173
|
|
|
172
|
-
|
|
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
|
|
173
180
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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`
|
|
178
184
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
|
182
188
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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`
|
|
186
192
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
`chmod +x /etc/sv/harbr/#{name}/next/finish`
|
|
193
|
+
system "rm /etc/service/next.#{name}"
|
|
194
|
+
system "rm /var/harbr/containers/#{name}/next"
|
|
190
195
|
|
|
191
|
-
|
|
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
198
|
|
|
194
|
-
|
|
195
|
-
|
|
199
|
+
`rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
|
|
200
|
+
puts "sync live data to next"
|
|
196
201
|
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
system "sv restart next.#{name}"
|
|
203
|
+
end
|
|
199
204
|
|
|
200
|
-
|
|
205
|
+
containers = collate_containers("next.#{name}", "next.#{manifest.host}", port)
|
|
206
|
+
create_traefik_config(containers)
|
|
207
|
+
puts "harbr: #{version} of #{name}"
|
|
201
208
|
end
|
|
202
209
|
|
|
203
|
-
containers = collate_containers("next.#{name}", "next.#{manifest.host}", port)
|
|
204
|
-
create_traefik_config(containers)
|
|
205
|
-
|
|
206
|
-
puts "process #{version} of #{name}"
|
|
207
210
|
end
|
|
208
211
|
end
|
|
209
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
|