harbr 0.1.17 → 0.1.19

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: 7bdeb351b67890252df89a99f18bdf2541540aca0033460f4fe8380254dccfaa
4
- data.tar.gz: 3a5620d791e5eeae7c5cbe667bee6ea7ec040db00c8165ca703984328a3d45de
3
+ metadata.gz: b584af86b43ec89938ea427ffb14918c6b6e74aad600266b9b0b09d45b9c80e4
4
+ data.tar.gz: 1ce98abc55439996b3d228cf5ca48b01e8a0cad8cd615ba969b934787590c12e
5
5
  SHA512:
6
- metadata.gz: 0eac17e4dec14a0eb7635d91475f5facc5ce6d3ddce3c90d07aebebd8186803cf0ba59f1e81b994a6d089ab0c88969a6e57c14a47e2b65b3519e08941ea83891
7
- data.tar.gz: d41bdc758f50ccbe1345046abb877b4ed72a1ed7f44b32d6fb9fc4a0fbcf137c4966202292035b5fed276719e8fe4cb279c9865fe13d276345829bf0bcf27037
6
+ metadata.gz: 532b7b8e256b8d5e53b3096085230e7807b4617bd6973023b7e4971fc80a8d15740bbcbfea7abbe27b7d8ba5ce447dc25fb35e13bb4b116e9b2f1f621b541583
7
+ data.tar.gz: 172a6396c837b15edfacb39280aec97d230c3ec41f7396f964bae2ea9b3253a648cdd47520216a073bee90c617c60b5e8e9d536206109d6d220331b146490ca3
data/exe/harbr CHANGED
@@ -3,12 +3,6 @@ require_relative "../lib/harbr"
3
3
 
4
4
  class HarbrCLI < Thor
5
5
  no_commands do
6
- def highest_numbered_directory(path)
7
- directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
8
- directories.max_by { |entry| entry[/\d+/].to_i }
9
- end
10
-
11
-
12
6
  def display_containers_table(containers)
13
7
  return puts "No containers available." if containers.empty?
14
8
 
@@ -73,16 +67,12 @@ class HarbrCLI < Thor
73
67
 
74
68
  def run_jobs(container, version)
75
69
  puts "Running tasks for container: #{container}, version: #{version}"
76
- puts "waiting for 3 seconds"
77
- sleep 3
78
- puts "done waiting"
70
+ sleep 1
79
71
  if version.to_i == 0
80
- puts "Initial Deploy!!! of #{container}"
81
72
  Harbr::Job.perform_async(container, version)
82
- else
83
- Harbr::Next::Job.perform_async(container, version)
84
- puts "deploy next version #{version} of #{container}"
85
73
  end
74
+ Harbr::Next::Job.perform_async(container, version)
75
+ puts "deploy next version #{version} of #{container}"
86
76
  end
87
77
 
88
78
  def create_traefik_config(containers)
@@ -183,6 +173,7 @@ desc "peek CONTAINER", "Peek in a given container"
183
173
 
184
174
  desc "deploy", "deploy a container to production"
185
175
  def deploy(name)
176
+
186
177
  Dir.chdir("/var/harbr/containers/#{name}/") do
187
178
 
188
179
  /(?<current>. * -> (?<path>.*))/.match(`ls -l /var/harbr/containers/#{name}/current`)
data/lib/harbr/job.rb CHANGED
@@ -2,12 +2,7 @@ require 'harbr'
2
2
  module Harbr
3
3
  class Job
4
4
  include SuckerPunch::Job
5
-
6
- def highest_numbered_directory(path)
7
- directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
8
- directories.max_by { |entry| entry[/\d+/].to_i }
9
- end
10
-
5
+
11
6
  def get_container_name(path)
12
7
  File.basename(path)
13
8
  end
@@ -8,11 +8,6 @@ module Harbr
8
8
  class Job
9
9
  include SuckerPunch::Job
10
10
 
11
- def highest_numbered_directory(path)
12
- directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
13
- directories.max_by { |entry| entry[/\d+/].to_i }
14
- end
15
-
16
11
  def get_container_name(path)
17
12
  File.basename(path)
18
13
  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.17"
4
+ VERSION = "0.1.19"
5
5
  end
data/lib/harbr.rb CHANGED
@@ -17,12 +17,6 @@ module Harbr
17
17
  DEFAULT_DIRECTORY = "/var/harbr/containers"
18
18
  DEFAULT_DIRECTORY_DATA_DIR = "#{DEFAULT_DIRECTORY}/.data"
19
19
  class Error < StandardError; end
20
-
21
- def self.highest_numbered_directory(path)
22
- directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
23
- directories.max_by { |entry| entry[/\d+/].to_i }
24
- end
25
-
26
20
  end
27
21
 
28
22
  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.17
4
+ version: 0.1.19
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-18 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen
@@ -118,7 +118,6 @@ executables:
118
118
  extensions: []
119
119
  extra_rdoc_files: []
120
120
  files:
121
- - "!"
122
121
  - ".data/development/Harbr::Port.dir"
123
122
  - ".data/development/Harbr::Port.pag"
124
123
  - ".rspec"
data/! DELETED
@@ -1,177 +0,0 @@
1
- require 'harbr'
2
- module Harbr
3
- class Job
4
- include SuckerPunch::Job
5
-
6
- def highest_numbered_directory(path)
7
- directories = Dir.glob("#{path}/*").select { |entry| File.directory?(entry) }
8
- directories.max_by { |entry| entry[/\d+/].to_i }
9
- end
10
-
11
- def get_container_name(path)
12
- File.basename(path)
13
- end
14
-
15
-
16
- def create_traefik_config(containers)
17
- config = {
18
- "http" => {
19
- "routers" => {
20
- "traefik-dashboard" => {
21
- "rule" => "Host(`traefik.harbr.zero2one.ee`)",
22
- "service" => "api@internal",
23
- "tls" => {} # Enable TLS for the dashboard
24
- }
25
- },
26
- "services" => {}
27
- }
28
- }
29
-
30
- containers.each do |container|
31
- container.ip = "127.0.0.1"
32
- name = container.name.gsub(".", "-")
33
-
34
- # Create the router with TLS enabled
35
- config["http"]["routers"]["#{name}-router"] = {
36
- "rule" => "Host(`#{container.host_header}`)",
37
- "service" => "#{name}-service",
38
- "tls" => {
39
- "certResolver" => "letsencrypt" # Specify the certificate resolver for TLS
40
- }
41
- }
42
-
43
- # Create the service
44
- config["http"]["services"]["#{name}-service"] = {
45
- "loadBalancer" => {
46
- "servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
47
- }
48
- }
49
- end
50
-
51
-
52
- File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
53
- puts "Traefik configuration written to /etc/traefik/harbr.toml"
54
- end
55
-
56
- def collate_containers(name,host,port)
57
-
58
- containers = Harbr::Container::Repository.new
59
- container = containers.find_by_header(host)
60
-
61
- if container.nil?
62
- container = Harbr::Container.new
63
- container.name = name
64
- container.host_header =host
65
- container.ip = "127.0.0.1"
66
- container.port = port
67
- containers.create(container)
68
- else
69
- container.port = port
70
- containers.update(container)
71
- end
72
- containers.all
73
- end
74
-
75
-
76
- module Runit
77
-
78
- class Run
79
- def initialize(container, port)
80
- @container_name = container
81
- @port = port
82
- end
83
-
84
- def to_s
85
- script_template = <<~SCRIPT
86
- #!/bin/sh
87
- exec 2>&1
88
- cd /var/harbr/containers/#{@container_name}/current
89
- exec ./exe/run #{@port} live
90
- SCRIPT
91
- end
92
-
93
- def link
94
- "ln -s /etc/sv/harbr/#{@container_name} /etc/service/#{@container_name}"
95
- end
96
- end
97
-
98
-
99
- class Finish
100
- def initialize(port)
101
- @port = port
102
- end
103
-
104
- def to_s
105
- script_template = <<~SCRIPT
106
- #!/bin/sh
107
- sleep 3
108
- `lsof -i :#{@port} | awk 'NR!=1 {print $2}' | xargs kill`
109
- SCRIPT
110
- end
111
- end
112
-
113
- class Log
114
- def initialize(container)
115
- @container_name = container
116
- end
117
-
118
- def to_s
119
- script_template = <<~SCRIPT
120
- #!/bin/sh
121
- exec svlogd -tt /var/log/harbr/#{@container_name}
122
- SCRIPT
123
- end
124
-
125
- end
126
-
127
- end
128
-
129
- def write_to_file(path, contents)
130
- File.open(path, 'w') do |file|
131
- file.write(contents)
132
- end
133
- end
134
-
135
- def load_manifest(container, version)
136
- manifest_path = "/var/harbr/containers/#{container}/versions/#{version}/config/manifest.yml"
137
- raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
138
- manifest_data = YAML.load_file(manifest_path)
139
- OpenStruct.new(manifest_data)
140
- end
141
-
142
- def perform(name,version)
143
-
144
- Dir.chdir "/var/harbr/containers/#{name}/versions/#{version}" do
145
-
146
- `bundle config set --local path 'vendor/bundle'`
147
- manifest = load_manifest(name, version)
148
- port = `port assign #{manifest.port}`.strip
149
- system "sv stop #{name}" if File.exist?("/etc/service/#{name}")
150
- system 'bundle install'
151
-
152
-
153
- `mkdir -p /etc/sv/harbr/#{name}`
154
- `mkdir -p /etc/sv/harbr/#{name}/log`
155
- `mkdir -p /var/log/harbr/#{name}`
156
-
157
- write_to_file "/etc/sv/harbr/#{name}/run", Runit::Run.new(name, port).to_s
158
- write_to_file "/etc/sv/harbr/#{name}/finish", Runit::Finish.new(port).to_s
159
- write_to_file "/etc/sv/harbr/#{name}/log/run", Runit::Log.new(name).to_s
160
-
161
- `chmod +x /etc/sv/harbr/#{name}/run`
162
- `chmod +x /etc/sv/harbr/#{name}/log/run`
163
- `chmod +x /etc/sv/harbr/#{name}/finish`
164
-
165
- system "ln -sf /var/harbr/containers/#{name}/versions/#{version} /var/harbr/containers/#{name}/current"
166
- system "ln -sf /etc/sv/harbr/#{name} /etc/service/#{name}"
167
-
168
- containers = collate_containers(name, manifest.host, port)
169
- create_traefik_config(containers)
170
- puts "process #{version} of #{name}"
171
- end
172
-
173
- end
174
-
175
- end
176
-
177
- end