app_builder 0.1.3 → 0.1.4
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 +1 -0
- data/lib/app_builder.rb +1 -0
- data/lib/app_builder/base.rb +9 -8
- data/lib/app_builder/config.rb +75 -18
- data/lib/app_builder/server.rb +4 -4
- data/lib/app_builder/uploader.rb +33 -17
- data/lib/app_builder/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 17ce5dd23729388a0087da20a784ff3b816f8c57fba31ca57f3e721e1a7ffdcf
|
4
|
+
data.tar.gz: a88df3a875b6a397cc1c1035628bea75ae59712130f6b952c57a173408c92387
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bfc464fb1677988dc93858de377d3497fdf4cb470e6adfbf4ca20ba8d0586100f162e70c4b28579a35280215b9cf5f78cfdd96c6c3a4c584dbecdecf02bd121
|
7
|
+
data.tar.gz: 211e70acaf02d62d8e4077f158f2952b57a89a3e6a4d66fa10e9f0ab763d6bc18b522442c65bef511dc6d5c1e3365764b20b5076369303352fd8738953fde193
|
data/app_builder.gemspec
CHANGED
data/lib/app_builder.rb
CHANGED
data/lib/app_builder/base.rb
CHANGED
@@ -3,25 +3,26 @@ module AppBuilder
|
|
3
3
|
extend Forwardable
|
4
4
|
|
5
5
|
attr_accessor :config
|
6
|
-
|
6
|
+
Config::PARAMETERS.each do |name|
|
7
7
|
def_delegator :config, name
|
8
8
|
end
|
9
9
|
|
10
10
|
def initialize(conf = nil)
|
11
|
-
@config = conf ||
|
11
|
+
@config = conf || Config.new
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
+
def log(level, message)
|
17
|
+
logger&.send(level, message)
|
18
|
+
end
|
19
|
+
|
16
20
|
def execute(cmd, options = {})
|
17
|
-
|
18
|
-
stdout, stderr, status = Open3.capture3(cmd, **options)
|
19
|
-
log(:error, "Failed [#{status.exitstatus}]: #{stderr}") unless status.success?
|
20
|
-
stdout.chomp
|
21
|
+
build_server.execute(cmd, options).first
|
21
22
|
end
|
22
23
|
|
23
|
-
def
|
24
|
-
|
24
|
+
def build_server
|
25
|
+
@build_server ||= Server.new(:localhost, logger: logger)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
data/lib/app_builder/config.rb
CHANGED
@@ -1,20 +1,38 @@
|
|
1
1
|
module AppBuilder
|
2
2
|
class Config
|
3
|
-
|
3
|
+
CHANGEABLE_PARAMETERS = [
|
4
4
|
:build_id,
|
5
5
|
:project_name,
|
6
6
|
:remote_repository,
|
7
7
|
:branch,
|
8
8
|
:revision,
|
9
|
-
:
|
10
|
-
:
|
9
|
+
:upload_type,
|
10
|
+
:upload_id, # bucket name or remote host
|
11
|
+
:logger,
|
12
|
+
|
13
|
+
# source
|
14
|
+
:builded_src_ext,
|
11
15
|
:remote_src_path,
|
12
|
-
|
16
|
+
|
17
|
+
# manifest
|
13
18
|
:manifest_template_path,
|
19
|
+
:remote_manifest_path,
|
20
|
+
:manifest_ext,
|
21
|
+
|
22
|
+
# Only use when upload to S3
|
23
|
+
:region,
|
24
|
+
:access_key_id,
|
25
|
+
:secret_access_key,
|
26
|
+
|
27
|
+
# Only use when upload with scp
|
14
28
|
:resource_host,
|
15
|
-
:
|
16
|
-
:
|
17
|
-
|
29
|
+
:resource_user,
|
30
|
+
:resource_ssh_options,
|
31
|
+
|
32
|
+
# Only use when remote build
|
33
|
+
# :build_host,
|
34
|
+
# :build_user,
|
35
|
+
# :build_ssh_options,
|
18
36
|
].freeze
|
19
37
|
|
20
38
|
PARAMETERS = [
|
@@ -25,12 +43,13 @@ module AppBuilder
|
|
25
43
|
:builded_src_path,
|
26
44
|
:builded_manifest_path,
|
27
45
|
:revision_path,
|
46
|
+
:remote_src_file,
|
47
|
+
:remote_manifest_file,
|
28
48
|
:src_url,
|
29
|
-
:manifest_url,
|
30
49
|
:remote_app_home,
|
31
|
-
].concat(
|
50
|
+
].concat(CHANGEABLE_PARAMETERS).freeze
|
32
51
|
|
33
|
-
attr_accessor *
|
52
|
+
attr_accessor *CHANGEABLE_PARAMETERS
|
34
53
|
|
35
54
|
def initialize(options = {})
|
36
55
|
reset
|
@@ -45,11 +64,11 @@ module AppBuilder
|
|
45
64
|
end
|
46
65
|
|
47
66
|
def build_name
|
48
|
-
|
67
|
+
[build_id, builded_src_ext].join(".")
|
49
68
|
end
|
50
69
|
|
51
70
|
def manifest_name
|
52
|
-
|
71
|
+
[build_id, manifest_ext].join(".")
|
53
72
|
end
|
54
73
|
|
55
74
|
def working_path
|
@@ -80,12 +99,16 @@ module AppBuilder
|
|
80
99
|
File.join(archive_path, "revision.yml")
|
81
100
|
end
|
82
101
|
|
83
|
-
def
|
84
|
-
File.join(
|
102
|
+
def remote_src_file
|
103
|
+
File.join(remote_src_path, build_name)
|
85
104
|
end
|
86
105
|
|
87
|
-
def
|
88
|
-
File.join(
|
106
|
+
def remote_manifest_file
|
107
|
+
File.join(remote_manifest_path, manifest_name)
|
108
|
+
end
|
109
|
+
|
110
|
+
def src_url
|
111
|
+
"#{upload_type.to_s}://#{File.join(upload_id, remote_src_path, build_name)}"
|
89
112
|
end
|
90
113
|
|
91
114
|
def remote_app_home
|
@@ -93,15 +116,49 @@ module AppBuilder
|
|
93
116
|
end
|
94
117
|
|
95
118
|
def reset
|
119
|
+
@build_host = "localhost"
|
120
|
+
@build_user = ENV.fetch("USER", nil)
|
121
|
+
@build_ssh_options = {}
|
96
122
|
@build_id = Time.now.strftime("%Y%m%d%H%M%S")
|
97
123
|
@project_name = File.basename(`git rev-parse --show-toplevel`.chomp)
|
98
124
|
@remote_repository = `git remote get-url origin`.chomp
|
99
125
|
@branch = ENV.fetch("TARGET_BRANCH", "master")
|
100
126
|
@revision = `git rev-parse #{branch}`.chomp
|
127
|
+
@builded_src_ext = "tar.gz"
|
128
|
+
@manifest_ext = "yml"
|
101
129
|
@manifest_template_path = File.expand_path("template/manifest.yml.erb", __dir__)
|
102
|
-
@
|
103
|
-
@
|
130
|
+
@resource_user = @build_user
|
131
|
+
@resource_ssh_options = {}
|
104
132
|
@logger = Logger.new(STDOUT)
|
133
|
+
@upload_type = :s3
|
134
|
+
|
135
|
+
# for upload to S3
|
136
|
+
@region = ENV.fetch("AWS_DEFAULT_REGION", aws_config("region") || "ap-northeast-1")
|
137
|
+
@access_key_id = ENV.fetch("AWS_ACCESS_KEY_ID", aws_credential("aws_access_key_id"))
|
138
|
+
@secret_access_key = ENV.fetch("AWS_SECRET_ACCESS_KEY", aws_credential("aws_secret_access_key"))
|
105
139
|
end
|
140
|
+
|
141
|
+
private
|
142
|
+
|
143
|
+
def aws_config(key)
|
144
|
+
find_aws_setting_by(
|
145
|
+
ENV.fetch("AWS_CONFIG_FILE", File.expand_path("~/.aws/config")),
|
146
|
+
key,
|
147
|
+
)
|
148
|
+
end
|
149
|
+
|
150
|
+
def aws_credential(key)
|
151
|
+
find_aws_setting_by(
|
152
|
+
ENV.fetch("AWS_CREDENTIAL_FILE", File.expand_path("~/.aws/credentials")),
|
153
|
+
key,
|
154
|
+
)
|
155
|
+
end
|
156
|
+
|
157
|
+
def find_aws_setting_by(path, key)
|
158
|
+
return nil unless File.exist?(path)
|
159
|
+
File.readlines(path).detect { |line|
|
160
|
+
line.start_with?(/\A\s*#{key}/)
|
161
|
+
}&.split("=")&.last&.strip
|
162
|
+
end
|
106
163
|
end
|
107
164
|
end
|
data/lib/app_builder/server.rb
CHANGED
@@ -2,7 +2,7 @@ module AppBuilder
|
|
2
2
|
class Server
|
3
3
|
attr_accessor :address, :user, :options, :logger
|
4
4
|
|
5
|
-
LOCAL_ADDRESSES = %w(local 127.0.0.1).freeze
|
5
|
+
LOCAL_ADDRESSES = %w(local localhost 127.0.0.1).freeze
|
6
6
|
|
7
7
|
def initialize(address = nil, user: nil, options: {}, logger: nil)
|
8
8
|
@address = address
|
@@ -14,8 +14,8 @@ module AppBuilder
|
|
14
14
|
def execute(*cmds)
|
15
15
|
results = []
|
16
16
|
|
17
|
+
options = cmds.last.is_a?(Hash) ? cmds.pop : {}
|
17
18
|
if local?
|
18
|
-
options = cmds.last.is_a?(Hash) ? cmds.pop : {}
|
19
19
|
cmds.each do |cmd|
|
20
20
|
message = "Execute command [local]: #{cmd}"
|
21
21
|
message += " (with: #{options.inspect})" unless options.empty?
|
@@ -28,6 +28,7 @@ module AppBuilder
|
|
28
28
|
else
|
29
29
|
ssh_start do |ssh|
|
30
30
|
cmds.each do |cmd|
|
31
|
+
cmd = "cd #{options[:chdir]}; #{cmd}" if options.has_key?(:chdir)
|
31
32
|
log(:info, "Execute command [#{address}]: #{cmd}")
|
32
33
|
results << ssh.exec!(cmd).chomp
|
33
34
|
end
|
@@ -77,8 +78,7 @@ module AppBuilder
|
|
77
78
|
private
|
78
79
|
|
79
80
|
def log(level, message)
|
80
|
-
|
81
|
-
logger.send(level, message)
|
81
|
+
logger&.send(level, message)
|
82
82
|
end
|
83
83
|
|
84
84
|
def ssh_options
|
data/lib/app_builder/uploader.rb
CHANGED
@@ -10,38 +10,37 @@ module AppBuilder
|
|
10
10
|
|
11
11
|
def initialize(conf = nil)
|
12
12
|
case conf
|
13
|
-
when
|
13
|
+
when Archiver
|
14
14
|
@builder = Builder.new(conf)
|
15
15
|
conf = conf.config
|
16
|
-
when
|
16
|
+
when Builder
|
17
17
|
@builder = conf
|
18
18
|
conf = conf.config
|
19
19
|
end
|
20
20
|
super(conf)
|
21
|
+
@builder ||= Builder.new(config)
|
21
22
|
end
|
22
23
|
|
23
24
|
def upload
|
25
|
+
upload_proc = s3? ? method(:upload_to_s3) : method(:upload_to_server)
|
24
26
|
builder.build
|
25
|
-
|
26
|
-
upload_to_s3(builded_src_path, src_url)
|
27
|
-
else
|
28
|
-
upload_to_server(builded_src_path, remote_src_path)
|
29
|
-
end
|
30
|
-
|
27
|
+
upload_proc.call(builded_src_path, remote_src_file)
|
31
28
|
generate_manifest
|
32
|
-
|
33
|
-
upload_to_s3(builded_manifest_path, manifest_url)
|
34
|
-
else
|
35
|
-
upload_to_server(builded_manifest_path, remote_manifest_path)
|
36
|
-
end
|
29
|
+
upload_proc.call(builded_manifest_path, remote_manifest_file)
|
37
30
|
end
|
38
31
|
|
39
32
|
def upload_to_s3(local, remote)
|
40
|
-
|
33
|
+
log(:info, "Upload #{local} to #{src_url}")
|
34
|
+
s3_client.put_object(
|
35
|
+
bucket: upload_id,
|
36
|
+
key: remote,
|
37
|
+
body: File.open(local),
|
38
|
+
)
|
41
39
|
end
|
42
40
|
|
43
41
|
def upload_to_server(local, remote)
|
44
|
-
|
42
|
+
log(:info, "Upload #{local} to #{src_url}")
|
43
|
+
resource_server.upload(local, remote)
|
45
44
|
end
|
46
45
|
|
47
46
|
def generate_manifest
|
@@ -52,8 +51,25 @@ module AppBuilder
|
|
52
51
|
|
53
52
|
private
|
54
53
|
|
55
|
-
def s3?
|
56
|
-
|
54
|
+
def s3?
|
55
|
+
upload_type == :s3
|
56
|
+
end
|
57
|
+
|
58
|
+
def s3_client
|
59
|
+
@s3_client ||= Aws::S3::Client.new(
|
60
|
+
region: region,
|
61
|
+
access_key_id: access_key_id,
|
62
|
+
secret_access_key: secret_access_key
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
def resource_server
|
67
|
+
@resource_server ||= Server.new(
|
68
|
+
resource_host,
|
69
|
+
user: resource_user,
|
70
|
+
options: resource_ssh_options,
|
71
|
+
logger: logger
|
72
|
+
)
|
57
73
|
end
|
58
74
|
end
|
59
75
|
end
|
data/lib/app_builder/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.4
|
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-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-s3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
153
|
version: '0'
|
140
154
|
requirements: []
|
141
155
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.6
|
156
|
+
rubygems_version: 2.7.6
|
143
157
|
signing_key:
|
144
158
|
specification_version: 4
|
145
159
|
summary: Application build utilities.
|