app_builder 0.1.2 → 0.1.3
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 +5 -5
- data/app_builder.gemspec +3 -0
- data/lib/app_builder.rb +6 -0
- data/lib/app_builder/archiver.rb +2 -2
- data/lib/app_builder/base.rb +2 -2
- data/lib/app_builder/builder.rb +13 -6
- data/lib/app_builder/logger.rb +48 -0
- data/lib/app_builder/server.rb +97 -0
- data/lib/app_builder/uploader.rb +16 -6
- data/lib/app_builder/version.rb +1 -1
- metadata +33 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 16e6784f07c5a6ea216a05502d569ead643ef3cc
|
4
|
+
data.tar.gz: 6d2fb40d61b2e7329eb4c3a2f528feaea073a013
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0865b3c4d763355ff5aa601ea8dd2b098af728efcd92c336ce2674745819e73aee94deb1d243ac67a3d6f460f41d73ca071b935fddd5f19a0d06ec1741f3374f'
|
7
|
+
data.tar.gz: 20aa8af30e89a5f56daa96d151acc1864f4995a30799b03c442ab5b6a21825785bd0386947948373889198b028df80c3cd52479e11458e1c88a3c0096f538242
|
data/app_builder.gemspec
CHANGED
@@ -20,6 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.add_dependency "net-ssh"
|
24
|
+
spec.add_dependency "net-scp"
|
25
|
+
|
23
26
|
spec.add_development_dependency "bundler", "~> 1.16"
|
24
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
28
|
spec.add_development_dependency "minitest", "~> 5.0"
|
data/lib/app_builder.rb
CHANGED
@@ -2,10 +2,16 @@ require "erb"
|
|
2
2
|
require "forwardable"
|
3
3
|
require "logger"
|
4
4
|
require "open3"
|
5
|
+
require "tempfile"
|
5
6
|
require "yaml"
|
6
7
|
|
8
|
+
require "net/ssh"
|
9
|
+
require "net/scp"
|
10
|
+
|
7
11
|
require "app_builder/version"
|
8
12
|
require "app_builder/config"
|
13
|
+
require "app_builder/logger"
|
14
|
+
require "app_builder/server.rb"
|
9
15
|
require "app_builder/base"
|
10
16
|
require "app_builder/archiver"
|
11
17
|
require "app_builder/builder"
|
data/lib/app_builder/archiver.rb
CHANGED
data/lib/app_builder/base.rb
CHANGED
data/lib/app_builder/builder.rb
CHANGED
@@ -1,18 +1,25 @@
|
|
1
1
|
module AppBuilder
|
2
2
|
class Builder < Base
|
3
|
+
attr_accessor :archiver
|
4
|
+
|
3
5
|
class << self
|
4
|
-
def build(
|
5
|
-
new(
|
6
|
+
def build(conf)
|
7
|
+
new(conf).build
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(conf = nil)
|
12
|
+
if conf.class <= Archiver
|
13
|
+
@archiver = conf
|
14
|
+
conf = conf.config
|
6
15
|
end
|
16
|
+
super(conf)
|
17
|
+
@archiver ||= Archiver.new(config)
|
7
18
|
end
|
8
19
|
|
9
20
|
def build
|
10
21
|
archiver.archive
|
11
22
|
execute("tar zcf #{builded_src_path} .", chdir: archive_path)
|
12
23
|
end
|
13
|
-
|
14
|
-
def archiver
|
15
|
-
@archiver ||= Archiver.new(config)
|
16
|
-
end
|
17
24
|
end
|
18
25
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module AppBuilder
|
2
|
+
class Logger < ::Logger
|
3
|
+
class Formatter < ::Logger::Formatter
|
4
|
+
Format = "%s\t%s\t%d\t%s\n".freeze
|
5
|
+
|
6
|
+
def call(severity, time, progname, msg)
|
7
|
+
Format % [severity, format_datetime(time), $$, msg2str(msg)]
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def format_datetime(time)
|
13
|
+
time.strftime(@datetime_format || "%F %H:%M:%S.%6N".freeze)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
|
18
|
+
progname: nil, formatter: nil, datetime_format: nil,
|
19
|
+
shift_period_suffix: '%Y%m%d')
|
20
|
+
super
|
21
|
+
@default_formatter = Formatter.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def format_message(severity, datetime, progname, msg)
|
25
|
+
apply_severity_color(
|
26
|
+
severity,
|
27
|
+
(@formatter || @default_formatter).call(severity, datetime, progname, msg),
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def apply_severity_color(severity, msg)
|
34
|
+
case severity
|
35
|
+
when "DEBUG".freeze
|
36
|
+
"\033[2m#{msg}\033[m"
|
37
|
+
when "INFO".freeze
|
38
|
+
"\033[32m#{msg}\033[m"
|
39
|
+
when "WARN".freeze
|
40
|
+
"\033[33m#{msg}\033[m"
|
41
|
+
when "ERROR".freeze, "FATAL".freeze
|
42
|
+
"\033[31m#{msg}\033[m"
|
43
|
+
else
|
44
|
+
msg
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module AppBuilder
|
2
|
+
class Server
|
3
|
+
attr_accessor :address, :user, :options, :logger
|
4
|
+
|
5
|
+
LOCAL_ADDRESSES = %w(local 127.0.0.1).freeze
|
6
|
+
|
7
|
+
def initialize(address = nil, user: nil, options: {}, logger: nil)
|
8
|
+
@address = address
|
9
|
+
@user = user || ENV.fetch("USER", nil)
|
10
|
+
@options = options
|
11
|
+
@logger = logger
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute(*cmds)
|
15
|
+
results = []
|
16
|
+
|
17
|
+
if local?
|
18
|
+
options = cmds.last.is_a?(Hash) ? cmds.pop : {}
|
19
|
+
cmds.each do |cmd|
|
20
|
+
message = "Execute command [local]: #{cmd}"
|
21
|
+
message += " (with: #{options.inspect})" unless options.empty?
|
22
|
+
log(:info, message)
|
23
|
+
|
24
|
+
stdout, stderr, status = Open3.capture3(cmd, **options)
|
25
|
+
log(:error, "Failed [#{status.exitstatus}]: #{stderr}") unless status.success?
|
26
|
+
results << stdout
|
27
|
+
end
|
28
|
+
else
|
29
|
+
ssh_start do |ssh|
|
30
|
+
cmds.each do |cmd|
|
31
|
+
log(:info, "Execute command [#{address}]: #{cmd}")
|
32
|
+
results << ssh.exec!(cmd).chomp
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
results
|
38
|
+
end
|
39
|
+
|
40
|
+
def upload(src_path, dest_path)
|
41
|
+
erb = File.extname(src_path) == ".erb".freeze
|
42
|
+
if local?
|
43
|
+
if erb
|
44
|
+
log(:info, "Create #{dest_path} from #{src_path}")
|
45
|
+
File.open(dest_path, "w") { |f| f.write(ERB.new(File.read(src_path)).result) }
|
46
|
+
else
|
47
|
+
execute("cp #{src_path} #{dest_path}")
|
48
|
+
end
|
49
|
+
else
|
50
|
+
ssh_start do |ssh|
|
51
|
+
log(:info, "Upload: local:#{src_path} to #{address}:#{dest_path}")
|
52
|
+
if erb
|
53
|
+
begin
|
54
|
+
f = Tempfile.open(File.basename(dest_path))
|
55
|
+
f.write(ERB.new(File.read(src_path)).result)
|
56
|
+
f.close
|
57
|
+
ssh.scp.upload!(f.path, dest_path)
|
58
|
+
rescue
|
59
|
+
f.unlink
|
60
|
+
end
|
61
|
+
else
|
62
|
+
ssh.scp.upload!(src_path, dest_path)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def ssh_start
|
69
|
+
raise ArgumentError unless block_given?
|
70
|
+
Net::SSH.start(address, ssh_user, ssh_options) { |ssh| yield ssh }
|
71
|
+
end
|
72
|
+
|
73
|
+
def local?
|
74
|
+
address.nil? || LOCAL_ADDRESSES.include?(address.to_s)
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def log(level, message)
|
80
|
+
return unless logger
|
81
|
+
logger.send(level, message)
|
82
|
+
end
|
83
|
+
|
84
|
+
def ssh_options
|
85
|
+
return default_ssh_options if options.nil? || options.empty?
|
86
|
+
default_ssh_options.merge(options)
|
87
|
+
end
|
88
|
+
|
89
|
+
def ssh_user
|
90
|
+
user || ENV["USER"]
|
91
|
+
end
|
92
|
+
|
93
|
+
def default_ssh_options
|
94
|
+
{ port: 22, keys: File.expand_path("~/.ssh/id_rsa"), forward_agent: true }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/app_builder/uploader.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
1
|
module AppBuilder
|
2
2
|
class Uploader < Base
|
3
|
+
attr_accessor :builder
|
4
|
+
|
3
5
|
class << self
|
4
|
-
def upload(
|
5
|
-
new(
|
6
|
+
def upload(conf)
|
7
|
+
new(conf).upload
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(conf = nil)
|
12
|
+
case conf
|
13
|
+
when AppBuilder::Archiver
|
14
|
+
@builder = Builder.new(conf)
|
15
|
+
conf = conf.config
|
16
|
+
when AppBuilder::Builder
|
17
|
+
@builder = conf
|
18
|
+
conf = conf.config
|
6
19
|
end
|
20
|
+
super(conf)
|
7
21
|
end
|
8
22
|
|
9
23
|
def upload
|
@@ -41,9 +55,5 @@ module AppBuilder
|
|
41
55
|
def s3?(url)
|
42
56
|
url.to_s.start_with?("s3://")
|
43
57
|
end
|
44
|
-
|
45
|
-
def builder
|
46
|
-
@builder || Builder.new(config)
|
47
|
-
end
|
48
58
|
end
|
49
59
|
end
|
data/lib/app_builder/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- i2bskn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: net-ssh
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: net-scp
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +115,8 @@ files:
|
|
87
115
|
- lib/app_builder/base.rb
|
88
116
|
- lib/app_builder/builder.rb
|
89
117
|
- lib/app_builder/config.rb
|
118
|
+
- lib/app_builder/logger.rb
|
119
|
+
- lib/app_builder/server.rb
|
90
120
|
- lib/app_builder/template/manifest.yml.erb
|
91
121
|
- lib/app_builder/uploader.rb
|
92
122
|
- lib/app_builder/version.rb
|
@@ -109,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
139
|
version: '0'
|
110
140
|
requirements: []
|
111
141
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.6.11
|
113
143
|
signing_key:
|
114
144
|
specification_version: 4
|
115
145
|
summary: Application build utilities.
|