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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90622c50ae9ea60aabd48e690c6afa8828e19655463388cc36b27ca7773754d3
4
- data.tar.gz: 81e0e3746b3a94418b797c413bb116dc7bafef3f31048c08f5d8f256397fbe1d
3
+ metadata.gz: 2588c43ae55e0764c8425290704320a29efb66a8c0e2082730354d9a3a7b7f9b
4
+ data.tar.gz: 789193e3987ac30e15017dfc0f02d7d945e0f73df3cf51d75445e057395312df
5
5
  SHA512:
6
- metadata.gz: 03feed9249a19f8c535122f0129e07142fff7fa2ba4a8e65f9b1280a898e8af900c2219eddc1598a5330b3ed973c3b49078642b6b31640edd4f8cc33e0e53109
7
- data.tar.gz: e1653e96cf2c1b8c06cc26cd8e148997a52e2981d868a221c0b908bfb251da501cd9112d31cd6f3adfc31cfd4db4470254973186bb9270185d39818066088045
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
- Harbr::Next::Job.perform_async(container, version)
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
- /(?<current>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
181
+ /(?:. * -> (?:.*))/ =~ `ls -l /var/harbr/containers/#{name}/current`
181
182
 
182
183
  `rm -r rollback`
183
184
  `ln -sf #{$2} rollback`
184
185
 
185
- /(?<next>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/next`
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
- /(?<current>. * -> (?<path>.*))/ =~ `ls -l /var/harbr/containers/#{name}/rollback`
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
- 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,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
- manifest = load_manifest(name, version)
170
- current_path = "/var/harbr/containers/#{name}/versions/#{version}"
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
- port = `port assign next.#{manifest.port}`.strip
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
- Dir.chdir current_path do
175
- system "sv stop next.#{name}"
176
- system "bundle install" if File.exist?("Gemfile")
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
- `mkdir -p /etc/sv/harbr/#{name}/next`
180
- `mkdir -p /etc/sv/harbr/#{name}/next/log`
181
- `mkdir -p /var/log/harbr/#{name}/next/log`
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
- write_to_file "/etc/sv/harbr/#{name}/next/run", Runit::Next::Run.new(name, port).to_s
184
- write_to_file "/etc/sv/harbr/#{name}/next/finish", Runit::Finish.new(port).to_s
185
- write_to_file "/etc/sv/harbr/#{name}/next/log/run", Runit::Next::Log.new(name).to_s
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
- `chmod +x /etc/sv/harbr/#{name}/next/run`
188
- `chmod +x /etc/sv/harbr/#{name}/next/log/run`
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
- system "rm /etc/service/next.#{name}"
192
- system "rm /var/harbr/containers/#{name}/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}"
193
198
 
194
- system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/next"
195
- system "ln -sf /etc/sv/harbr/#{name}/next /etc/service/next.#{name}"
199
+ `rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
200
+ puts "sync live data to next"
196
201
 
197
- `rsync -av /var/dddr/#{name}/live /var/dddr/#{name}/next`
198
- puts "sync live data to next"
202
+ system "sv restart next.#{name}"
203
+ end
199
204
 
200
- 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}"
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Harbr
4
- VERSION = "0.1.28"
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.28
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