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 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