harbr 0.0.68 → 0.0.70

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: 8cd0772a215c2f38d897bee4adda759b4f13504748f6a511ca72f39143e33300
4
- data.tar.gz: cc88c5f9512b8601f81b393889e2a4943749582ea5b2cd42702a40fecb1424d2
3
+ metadata.gz: 0e797dfe98b5f3f8b54dfd54f4300b98893c12d688aa799003cffc5616f59597
4
+ data.tar.gz: 3ba62188cf4275cfd2ee7d536bde3523ac3661df04bf25fa00f9f9df1e3ffb42
5
5
  SHA512:
6
- metadata.gz: 201d894dbaf5f9924344408f35d70dbb5967cd5dfbce9aad89b91c98247c5ab4bdd81d6bdeb53d4104ad410da33d2bfcb5006099d4eb82c41f5bf8c68d6dea49
7
- data.tar.gz: 8d3c550931bd303201ff7ad506adeb4ee4934dd2110829df8dc7ae7381366a9fde21273a89a8f35d1254a1e6d89d984288ad33cdea61a8772e7b0cd90eb469be
6
+ metadata.gz: f84b37919dfbffb691e8823454457c40a2acd2d00710350632960e30462203f9638c5ab8b5b323ce08e373cadd3786b0409d87f717e1949317a651ea6f35c44a
7
+ data.tar.gz: edf02e829ba5bc62604ac3cd2fdbc7f3584f7a4305283426b2ae262d51be737263558d7e525c4949de37d1583d7a0a08ff77f7fd0fddc0730d62c74cced5469d
data/exe/harbr CHANGED
@@ -76,7 +76,8 @@ class HarbrCLI < Thor
76
76
  puts "Initial Deploy!!! of #{container}"
77
77
  Harbr::Job.perform_async(container, version)
78
78
  else
79
- puts "deploy version #{version} of #{container}"
79
+ Harbr::Next::Job.perform_async(container, version)
80
+ puts "deploy next version #{version} of #{container}"
80
81
 
81
82
  end
82
83
  end
data/lib/harbr/job.rb CHANGED
@@ -106,6 +106,7 @@ module Harbr
106
106
  end
107
107
 
108
108
  system("cd /var/harbr/#{manifest.name}/current && bundle install")
109
+ puts `lsof -i :#{port} | awk 'NR!=1 {print $2}' | xargs kill -9`
109
110
  system("sv restart #{manifest.name}")
110
111
  puts "Started container: #{manifest.name}"
111
112
  create_traefik_config(containers.all)
@@ -0,0 +1,129 @@
1
+ module Harbr
2
+ module Next
3
+ class Job
4
+ include SuckerPunch::Job
5
+
6
+ def load_manifest(container, version)
7
+ manifest_path = "/var/harbr/#{container}/versions/#{version}/config/manifest.yml"
8
+ raise "Manifest not found at #{manifest_path}" unless File.exist?(manifest_path)
9
+ manifest_data = YAML.load_file(manifest_path)
10
+ OpenStruct.new(manifest_data)
11
+ end
12
+
13
+ def create_traefik_config(containers)
14
+ config = {
15
+ "http" => {
16
+ "routers" => {
17
+ "traefik-dashboard" => {
18
+ "rule" => "Host(`traefik.harbr.zero2one.ee`)",
19
+ "service" => "api@internal"
20
+ }
21
+ },
22
+ "services" => {}
23
+ }
24
+ }
25
+
26
+ containers.each do |container|
27
+ container.ip = "127.0.0.1"
28
+
29
+ config["http"]["routers"]["#{container.name}-router"] = {
30
+ "rule" => "Host(`#{container.host_header}`)",
31
+ "service" => "#{container.name}-service"
32
+ }
33
+ config["http"]["services"]["#{container.name}-service"] = {
34
+ "loadBalancer" => {
35
+ "servers" => [{"url" => "http://#{container.ip}:#{container.port}"}]
36
+ }
37
+ }
38
+ end
39
+
40
+ File.write("/etc/traefik/harbr.toml", TomlRB.dump(config))
41
+ puts "Traefik configuration written to /etc/traefik/harbr.toml"
42
+ end
43
+
44
+ def create_run_script(container_name, port)
45
+ service_dir = "/etc/sv/harbr/#{container_name}/next"
46
+
47
+ script_template = <<~SCRIPT
48
+ #!/bin/sh
49
+ exec 2>&1
50
+ cd /var/harbr/#{container_name}/next
51
+ exec ./exe/run #{port}
52
+ SCRIPT
53
+
54
+ service_dir = "/etc/sv/harbr/#{container_name}/next"
55
+ FileUtils.mkdir_p(service_dir)
56
+
57
+ File.write("#{service_dir}/run", script_template)
58
+ FileUtils.chmod("+x", "#{service_dir}/run")
59
+ puts "Run script created and made executable for container: next.#{container_name}"
60
+ end
61
+
62
+ def create_log_script(container_name)
63
+ log_dir = "/var/log/harbr/#{container_name}/next"
64
+
65
+ FileUtils.mkdir_p(log_dir)
66
+
67
+ script_template = <<~SCRIPT
68
+ #!/bin/sh
69
+ exec svlogd -tt #{log_dir}/
70
+ SCRIPT
71
+
72
+ dir_path = "/etc/sv/harbr/#{container_name}/next/log"
73
+ FileUtils.mkdir_p(dir_path)
74
+
75
+ File.write("#{dir_path}/run", script_template)
76
+ FileUtils.chmod("+x", "#{dir_path}/run")
77
+ puts "Log script created and made executable for container: next.#{container_name}"
78
+ end
79
+
80
+ def create_a_service(container_name, port)
81
+ create_run_script(container_name, port)
82
+ create_log_script(container_name)
83
+
84
+ system("ln -s /etc/sv/harbr/#{container_name}/next /etc/service/next.#{container_name}") unless File.exist?("/etc/service/next.#{container_name}")
85
+ end
86
+
87
+ def run_container(manifest)
88
+ puts "Starting container: next.#{manifest.name}"
89
+ port = system("port assign next.#{manifest.port}").strip
90
+ puts "Port assigned: #{port}"
91
+
92
+ create_a_service(manifest.name, port)
93
+
94
+ containers = Container::Repository.new
95
+ container = containers.find_by_header("next.#{manifest.host}")
96
+
97
+ if container.nil?
98
+ container = Container.new
99
+ container.name = "next.#{manifest.name}"
100
+ container.host_header = "next.#{manifest.host}"
101
+ container.ip = "127.0.0.1"
102
+ container.port = port
103
+ containers.create(container)
104
+ else
105
+ container.port = port
106
+ containers.update(container)
107
+ end
108
+
109
+
110
+
111
+ system("cd /var/harbr/#{manifest.name}/next && bundle install")
112
+
113
+
114
+ puts `lsof -i :#{port} | awk 'NR!=1 {print $2}' | xargs kill -9`
115
+ system("sv restart next.#{manifest.name}")
116
+
117
+ puts "Started container: next.#{manifest.name}"
118
+ create_traefik_config(containers.all)
119
+ end
120
+
121
+ def perform(container, version)
122
+ puts "Running tasks for container: 'next.#{container}', Version: '#{version}'"
123
+ manifest = load_manifest(container, version)
124
+ puts "Manifest: #{manifest}"
125
+ run_container(manifest)
126
+ end
127
+ end
128
+ end
129
+ 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.0.68"
4
+ VERSION = "0.0.70"
5
5
  end
data/lib/harbr.rb CHANGED
@@ -10,6 +10,8 @@ require "sucker_punch"
10
10
  require_relative "harbr/version"
11
11
  require_relative "harbr/container"
12
12
  require_relative "harbr/job"
13
+ require_relative "harbr/next/job"
14
+
13
15
 
14
16
  # Harbr module for managing containers, jobs, ports, and 2s
15
17
  module Harbr
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.0.68
4
+ version: 0.0.70
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-09 00:00:00.000000000 Z
11
+ date: 2023-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen
@@ -134,6 +134,7 @@ files:
134
134
  - lib/harbr.rb
135
135
  - lib/harbr/container.rb
136
136
  - lib/harbr/job.rb
137
+ - lib/harbr/next/job.rb
137
138
  - lib/harbr/version.rb
138
139
  - sig/harbr.rbs
139
140
  homepage: https://github.com/delaneyburke/harbr