harbr 0.1.28 → 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: 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