appril-cli 0.1.1 → 0.2.0
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 +4 -4
- data/app/base/assets/styles.css +2 -0
- data/{boilerplate/app/base/api → app/base/components}/base_controller.rb +3 -1
- data/app/base/components/deploy.js +25 -0
- data/app/base/components/index/index.js +3 -0
- data/app/base/components/index/server.rb +13 -0
- data/{boilerplate/app/base/api → app/base/components}/rtcp_controller.rb +5 -7
- data/app/base/core.js +77 -0
- data/app/base/templates/layout.liquid +13 -0
- data/app/config/config.rb +11 -0
- data/{sandbox → app}/config/config.yml +8 -4
- data/{boilerplate/app → app}/core/Gemfile +2 -2
- data/{sandbox → app}/core/boot.rb +2 -4
- data/app/core/generate_configs.rb +7 -0
- data/{boilerplate/app → app}/core/load.rb +2 -2
- data/{boilerplate/app/core/load_api.rb → app/core/load_components.rb} +2 -1
- data/app/generators/_component/index.js +3 -0
- data/app/generators/_component/template.html +3 -0
- data/app/generators/component +29 -0
- data/app/package.json +30 -0
- data/{boilerplate/app → app}/webpack/alias.js +3 -3
- data/app/webpack/entry.js +3 -0
- data/{boilerplate/app → app}/webpack/extensions.js +1 -2
- data/app/webpack/loaders.js +47 -0
- data/app/webpack/output.js +9 -0
- data/app/webpack/plugins.js +38 -0
- data/app/webpack.config.js +29 -0
- data/lib/appril-cli/assertions.rb +5 -21
- data/lib/appril-cli/docker/build.rb +35 -31
- data/lib/appril-cli/docker/install.rb +18 -11
- data/lib/appril-cli/docker/update.rb +20 -11
- data/lib/appril-cli/docker.rb +14 -43
- data/lib/appril-cli/helpers.rb +7 -9
- data/lib/appril-cli/install.rb +30 -0
- data/lib/appril-cli/update.rb +34 -0
- data/lib/appril-cli/version.rb +1 -1
- data/lib/appril-cli.rb +62 -47
- metadata +52 -109
- data/boilerplate/app/base/api/deploy.coffee +0 -45
- data/boilerplate/app/base/api/index/client.coffee +0 -4
- data/boilerplate/app/base/api/index/server.rb +0 -3
- data/boilerplate/app/base/core.coffee +0 -113
- data/boilerplate/app/base/helpers/application_helpers.coffee +0 -1
- data/boilerplate/app/base/templates/access_denied.html +0 -3
- data/boilerplate/app/base/templates/layout.liquid +0 -11
- data/boilerplate/app/base/templates/layouts/main.html +0 -1
- data/boilerplate/app/base/templates/layouts/none.html +0 -1
- data/boilerplate/app/config/config.rb +0 -14
- data/boilerplate/app/config/config.yml +0 -18
- data/boilerplate/app/core/boot.rb +0 -72
- data/boilerplate/app/core/generate_configs.rb +0 -79
- data/boilerplate/app/generators/api/client.coffee +0 -4
- data/boilerplate/app/generators/api/server.rb +0 -3
- data/boilerplate/app/package.json +0 -10
- data/boilerplate/app/webpack/config.js +0 -6
- data/boilerplate/app/webpack/entry.js +0 -3
- data/boilerplate/app/webpack/loaders.js +0 -15
- data/boilerplate/app/webpack/output.js +0 -11
- data/boilerplate/app/webpack/plugins.js +0 -19
- data/boilerplate/app/webpack.config.js +0 -19
- data/boilerplate/crudle/Gemfile +0 -7
- data/boilerplate/crudle/base/api/deploy.coffee +0 -51
- data/boilerplate/crudle/base/api/index/client.coffee +0 -5
- data/boilerplate/crudle/base/api/index/layout.html +0 -5
- data/boilerplate/crudle/base/api/index/server.rb +0 -7
- data/boilerplate/crudle/base/templates/menu.html +0 -3
- data/boilerplate/crudle/generators/api/client.coffee +0 -17
- data/boilerplate/crudle/generators/api/editor/layout.html +0 -3
- data/boilerplate/crudle/generators/api/list/item.html +0 -3
- data/boilerplate/crudle/generators/api/server.rb +0 -26
- data/boilerplate/crudle/package.json +0 -13
- data/boilerplate/crudle/webpack/loaders.js +0 -16
- data/lib/appril-cli/app/install.rb +0 -47
- data/lib/appril-cli/app/update.rb +0 -28
- data/lib/appril-cli/app.rb +0 -46
- data/lib/appril-cli/generator/api.rb +0 -16
- data/lib/appril-cli/generator.rb +0 -32
- data/sandbox/.gitignore +0 -6
- data/sandbox/.pryrc +0 -1
- data/sandbox/Gemfile +0 -7
- data/sandbox/Rakefile +0 -1
- data/sandbox/base/api/base_controller.rb +0 -21
- data/sandbox/base/api/index/client.coffee +0 -4
- data/sandbox/base/api/index/layout.html +0 -3
- data/sandbox/base/api/index/server.rb +0 -3
- data/sandbox/base/api/rtcp_controller.rb +0 -22
- data/sandbox/base/assets/styles.css +0 -0
- data/sandbox/base/boot.rb +0 -2
- data/sandbox/base/core.coffee +0 -128
- data/sandbox/base/helpers/application_helpers.coffee +0 -1
- data/sandbox/base/helpers/application_helpers.rb +0 -4
- data/sandbox/base/load.rb +0 -0
- data/sandbox/base/models/base_model.rb +0 -0
- data/sandbox/base/templates/access_denied.html +0 -3
- data/sandbox/base/templates/layout.liquid +0 -11
- data/sandbox/base/templates/layouts/main.html +0 -1
- data/sandbox/base/templates/layouts/none.html +0 -1
- data/sandbox/base/templates/menu.html +0 -3
- data/sandbox/config/config.rb +0 -9
- data/sandbox/config/env/development.yml +0 -0
- data/sandbox/config/env/production.yml +0 -0
- data/sandbox/config/env/stage.yml +0 -0
- data/sandbox/config/env/test.yml +0 -0
- data/sandbox/config.ru +0 -3
- data/sandbox/core/Gemfile +0 -4
- data/sandbox/core/generate_configs.rb +0 -125
- data/sandbox/core/load.rb +0 -14
- data/sandbox/core/load_controllers.rb +0 -14
- data/sandbox/generators/api/client.coffee +0 -11
- data/sandbox/generators/api/editor.html +0 -0
- data/sandbox/generators/api/layout.html +0 -0
- data/sandbox/generators/api/server.rb +0 -26
- data/sandbox/package.json +0 -15
- data/sandbox/webpack.config.js +0 -54
- /data/{boilerplate/app → app}/.gitignore +0 -0
- /data/{boilerplate/app → app}/.pryrc +0 -0
- /data/{boilerplate/app → app}/Gemfile +0 -0
- /data/{boilerplate/app → app}/Rakefile +0 -0
- /data/{boilerplate/app → app}/base/boot.rb +0 -0
- /data/{boilerplate/app/base/api/index/layout.html → app/base/components/index/template.html} +0 -0
- /data/{boilerplate/app → app}/base/helpers/application_helpers.rb +0 -0
- /data/{boilerplate/app/base/assets/styles.css → app/base/helpers/index.js} +0 -0
- /data/{boilerplate/app → app}/base/load.rb +0 -0
- /data/{boilerplate/app → app}/base/models/base_model.rb +0 -0
- /data/{boilerplate/app/public → app/compiled}/.ignore +0 -0
- /data/{boilerplate/app → app}/config/env/development.yml +0 -0
- /data/{boilerplate/app → app}/config/env/production.yml +0 -0
- /data/{boilerplate/app → app}/config/env/stage.yml +0 -0
- /data/{boilerplate/app → app}/config/env/test.yml +0 -0
- /data/{boilerplate/app → app}/config.ru +0 -0
- /data/{boilerplate/app → app}/core/load_helpers.rb +0 -0
- /data/{boilerplate/app → app}/core/load_models.rb +0 -0
- /data/{boilerplate/app/tmp → app/public}/.ignore +0 -0
- /data/{boilerplate/app/var → app/tmp}/.ignore +0 -0
- /data/{boilerplate/app/generators/api/layout.html → app/var/.ignore} +0 -0
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
module Appril
|
|
2
2
|
class CLI
|
|
3
|
-
|
|
3
|
+
class Docker
|
|
4
4
|
|
|
5
|
-
class Build
|
|
5
|
+
class Build < self
|
|
6
6
|
|
|
7
|
-
def initialize
|
|
8
|
-
|
|
7
|
+
def initialize path, update_runner_only: false, push_opted: false
|
|
8
|
+
src, dst = paths(path)
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
assert_directory_exists(dst)
|
|
11
|
+
assert_config_file_exists(dst)
|
|
12
|
+
|
|
13
|
+
Dir.chdir dst do
|
|
14
|
+
|
|
15
|
+
config = load_config()
|
|
11
16
|
validate_config(config)
|
|
12
17
|
|
|
13
|
-
build_dir =
|
|
18
|
+
build_dir = dst / '__tmpbuildir__'
|
|
14
19
|
|
|
15
20
|
prepare_build_dir(build_dir)
|
|
16
21
|
|
|
17
22
|
install_files(build_dir)
|
|
18
23
|
|
|
19
|
-
app_dir =
|
|
24
|
+
app_dir = dst / config['APP_DIR']
|
|
20
25
|
|
|
21
26
|
if update_runner_only
|
|
22
27
|
puts "Skipping image building"
|
|
@@ -49,8 +54,7 @@ module Appril
|
|
|
49
54
|
'RUN_SCRIPT' => :validate_config__run_script,
|
|
50
55
|
}.each_pair do |key,validator|
|
|
51
56
|
next if send(validator, config[key])
|
|
52
|
-
|
|
53
|
-
exit 1
|
|
57
|
+
fatal_error!("Please set #{key} in config.yml")
|
|
54
58
|
end
|
|
55
59
|
end
|
|
56
60
|
|
|
@@ -70,46 +74,46 @@ module Appril
|
|
|
70
74
|
!value.nil? && !value.empty?
|
|
71
75
|
end
|
|
72
76
|
|
|
73
|
-
def prepare_build_dir
|
|
74
|
-
FileUtils.rm_rf(
|
|
75
|
-
FileUtils.mkdir_p(
|
|
77
|
+
def prepare_build_dir path
|
|
78
|
+
FileUtils.rm_rf(path)
|
|
79
|
+
FileUtils.mkdir_p(path / 'build')
|
|
76
80
|
end
|
|
77
81
|
|
|
78
|
-
def install_files
|
|
79
|
-
install_dockerfile(
|
|
80
|
-
install_start_file(
|
|
81
|
-
install_build_files(
|
|
82
|
-
install_cleanup_file(
|
|
82
|
+
def install_files path
|
|
83
|
+
install_dockerfile(path)
|
|
84
|
+
install_start_file(path)
|
|
85
|
+
install_build_files(path)
|
|
86
|
+
install_cleanup_file(path)
|
|
83
87
|
end
|
|
84
88
|
|
|
85
|
-
def install_dockerfile
|
|
86
|
-
FileUtils.cp(DOCKER_DIR / 'Dockerfile',
|
|
89
|
+
def install_dockerfile path
|
|
90
|
+
FileUtils.cp(DOCKER_DIR / 'Dockerfile', path)
|
|
87
91
|
end
|
|
88
92
|
|
|
89
|
-
def install_start_file
|
|
90
|
-
File.open
|
|
93
|
+
def install_start_file path
|
|
94
|
+
File.open path / 'start', 'w' do |f|
|
|
91
95
|
f << File.read(DOCKER_DIR / 'start').sub('{start}', File.read(START_FILE))
|
|
92
96
|
end
|
|
93
97
|
end
|
|
94
98
|
|
|
95
|
-
def install_build_files
|
|
96
|
-
FileUtils.cp(PREPARE_BUILD_FILE,
|
|
97
|
-
FileUtils.cp(BUILD_FILE,
|
|
99
|
+
def install_build_files path
|
|
100
|
+
FileUtils.cp(PREPARE_BUILD_FILE, path / 'build')
|
|
101
|
+
FileUtils.cp(BUILD_FILE, path / 'build/build')
|
|
98
102
|
end
|
|
99
103
|
|
|
100
|
-
def install_cleanup_file
|
|
101
|
-
FileUtils.cp(CLEANUP_FILE,
|
|
104
|
+
def install_cleanup_file path
|
|
105
|
+
FileUtils.cp(CLEANUP_FILE, path / 'build/cleanup')
|
|
102
106
|
end
|
|
103
107
|
|
|
104
|
-
def prepare_build
|
|
105
|
-
Dir.chdir
|
|
108
|
+
def prepare_build path, app_dir
|
|
109
|
+
Dir.chdir path / 'build' do
|
|
106
110
|
CLI.run "APP_DIR=#{app_dir} #{PREPARE_BUILD_FILE}"
|
|
107
111
|
exit 1 unless $? && $?.success?
|
|
108
112
|
end
|
|
109
113
|
end
|
|
110
114
|
|
|
111
|
-
def build_image
|
|
112
|
-
CLI.run "docker build -t #{image_name} #{build_opts} '#{
|
|
115
|
+
def build_image path, image_name, build_opts
|
|
116
|
+
CLI.run "docker build -t #{image_name} #{build_opts} '#{path}'"
|
|
113
117
|
$? && $?.success?
|
|
114
118
|
end
|
|
115
119
|
|
|
@@ -146,7 +150,7 @@ module Appril
|
|
|
146
150
|
end
|
|
147
151
|
|
|
148
152
|
end
|
|
149
|
-
|
|
153
|
+
|
|
150
154
|
end
|
|
151
155
|
end
|
|
152
156
|
end
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
module Appril
|
|
2
2
|
class CLI
|
|
3
|
-
|
|
3
|
+
class Docker
|
|
4
4
|
|
|
5
|
-
class Install
|
|
6
|
-
include Helpers
|
|
5
|
+
class Install < self
|
|
7
6
|
|
|
8
|
-
def initialize
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
def initialize path
|
|
8
|
+
src, dst = paths(path)
|
|
9
|
+
|
|
10
|
+
install(src, dst)
|
|
11
|
+
post_install(dst)
|
|
12
|
+
|
|
13
|
+
puts "Done. All files installed into #{dst}"
|
|
12
14
|
end
|
|
13
15
|
|
|
14
|
-
def install
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
def install src, dst
|
|
17
|
+
create_dirname_for(dst)
|
|
18
|
+
assert_directory_does_not_exists(dst)
|
|
19
|
+
FileUtils.cp_r(src, dst)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def post_install dst
|
|
23
|
+
make_executable(dst / PREPARE_BUILD_FILE)
|
|
17
24
|
end
|
|
18
25
|
|
|
19
26
|
end
|
|
20
|
-
|
|
27
|
+
|
|
21
28
|
end
|
|
22
29
|
end
|
|
23
30
|
end
|
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
module Appril
|
|
2
2
|
class CLI
|
|
3
|
-
|
|
3
|
+
class Docker
|
|
4
4
|
|
|
5
|
-
class Update
|
|
6
|
-
include Helpers
|
|
5
|
+
class Update < self
|
|
7
6
|
|
|
8
|
-
def initialize
|
|
9
|
-
|
|
7
|
+
def initialize path
|
|
8
|
+
src, dst = paths(path)
|
|
10
9
|
|
|
10
|
+
Dir.chdir src do
|
|
11
11
|
Dir['**/*'].select {|e| File.file?(e)}.each do |file|
|
|
12
|
-
|
|
13
|
-
create_dirname_for(dir / file)
|
|
14
|
-
puts "Installing #{File.basename(dir)}/#{file}"
|
|
15
|
-
FileUtils.cp(file, dir / file)
|
|
12
|
+
update_file(file, dst)
|
|
16
13
|
end
|
|
17
|
-
|
|
18
14
|
end
|
|
15
|
+
|
|
16
|
+
post_update(dst)
|
|
19
17
|
puts "Done"
|
|
20
18
|
end
|
|
21
19
|
|
|
20
|
+
private
|
|
21
|
+
def update_file file, dst
|
|
22
|
+
return if File.file?(dst / file)
|
|
23
|
+
create_dirname_for(dst / file)
|
|
24
|
+
puts "Updating #{File.basename(dst)}/#{file}"
|
|
25
|
+
FileUtils.cp(file, dst / file)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def post_update dst
|
|
29
|
+
make_executable(dst / PREPARE_BUILD_FILE)
|
|
30
|
+
end
|
|
22
31
|
end
|
|
23
|
-
|
|
32
|
+
|
|
24
33
|
end
|
|
25
34
|
end
|
|
26
35
|
end
|
data/lib/appril-cli/docker.rb
CHANGED
|
@@ -1,61 +1,32 @@
|
|
|
1
1
|
module Appril
|
|
2
2
|
class CLI
|
|
3
|
-
|
|
3
|
+
class Docker
|
|
4
|
+
include Helpers
|
|
5
|
+
include Assertions
|
|
4
6
|
|
|
5
|
-
DOCKER_DIR = BASE_DIR / 'docker'
|
|
6
|
-
|
|
7
7
|
CONFIG_FILE = './config.yml'.freeze
|
|
8
8
|
START_FILE = './start.sh'.freeze
|
|
9
9
|
PREPARE_BUILD_FILE = './prepare_build.sh'.freeze
|
|
10
10
|
BUILD_FILE = './build.sh'.freeze
|
|
11
11
|
CLEANUP_FILE = './cleanup.sh'.freeze
|
|
12
12
|
|
|
13
|
-
def
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
when 'i', 'install'
|
|
20
|
-
|
|
21
|
-
docker_install(dir, working_dir_opted: working_dir_opted?(opted_dir))
|
|
22
|
-
|
|
23
|
-
when 'b', 'build'
|
|
24
|
-
|
|
25
|
-
docker_build(dir, {
|
|
26
|
-
update_runner_only: args.find {|a| a == '-u'},
|
|
27
|
-
push_opted: args.find {|a| a == '-p'}
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
when 'u', 'update'
|
|
31
|
-
|
|
32
|
-
docker_update(dir)
|
|
33
|
-
|
|
13
|
+
def paths path
|
|
14
|
+
if path == WORKING_DIR
|
|
15
|
+
[
|
|
16
|
+
DOCKER_DIR.to_path + '/skel/.',
|
|
17
|
+
path / 'docker'
|
|
18
|
+
]
|
|
34
19
|
else
|
|
35
|
-
|
|
20
|
+
[
|
|
21
|
+
DOCKER_DIR / 'skel',
|
|
22
|
+
path
|
|
23
|
+
]
|
|
36
24
|
end
|
|
37
25
|
end
|
|
38
|
-
|
|
39
|
-
def docker_install dir, opts
|
|
40
|
-
create_dirname_for(dir)
|
|
41
|
-
assert_installable_dir(dir, opts[:working_dir_opted])
|
|
42
|
-
Docker::Install.new(dir, opts)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def docker_build dir, opts
|
|
46
|
-
assert_directory_exists(dir)
|
|
47
|
-
assert_config_file_exists(dir)
|
|
48
|
-
Docker::Build.new(dir, opts)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def docker_update dir
|
|
52
|
-
assert_is_docker_dir(dir)
|
|
53
|
-
Docker::Update.new(dir)
|
|
54
|
-
end
|
|
55
26
|
end
|
|
56
27
|
end
|
|
57
28
|
end
|
|
58
29
|
|
|
59
30
|
require 'appril-cli/docker/install'
|
|
60
|
-
require 'appril-cli/docker/build'
|
|
61
31
|
require 'appril-cli/docker/update'
|
|
32
|
+
require 'appril-cli/docker/build'
|
data/lib/appril-cli/helpers.rb
CHANGED
|
@@ -2,13 +2,15 @@ module Appril
|
|
|
2
2
|
class CLI
|
|
3
3
|
module Helpers
|
|
4
4
|
|
|
5
|
-
def
|
|
6
|
-
|
|
5
|
+
def format_error *lines
|
|
6
|
+
lines.flatten!
|
|
7
|
+
header = lines.shift()
|
|
8
|
+
"\t::: %s :::%s" % [header, lines.any? ? ([''] + lines).join("\n\t") : ""]
|
|
7
9
|
end
|
|
8
10
|
|
|
9
|
-
def fatal_error!
|
|
10
|
-
|
|
11
|
-
exit
|
|
11
|
+
def fatal_error! *lines
|
|
12
|
+
puts '', format_error(lines), ''
|
|
13
|
+
exit 1
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
def expanded_path *path
|
|
@@ -23,10 +25,6 @@ module Appril
|
|
|
23
25
|
entries.flatten.each {|e| FileUtils.chmod('+x', e)}
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
def working_dir_opted? opted_dir
|
|
27
|
-
opted_dir == '.'
|
|
28
|
-
end
|
|
29
|
-
|
|
30
28
|
def extract_namespace args
|
|
31
29
|
return unless index = args.index('-n')
|
|
32
30
|
return unless namespace = args[index + 1]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Appril
|
|
2
|
+
class CLI
|
|
3
|
+
|
|
4
|
+
class Install
|
|
5
|
+
include Helpers
|
|
6
|
+
|
|
7
|
+
def initialize path
|
|
8
|
+
install(path)
|
|
9
|
+
post_install(path)
|
|
10
|
+
puts "Done. All files installed into #{path}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
def install path
|
|
15
|
+
src = path == WORKING_DIR ? APP_DIR.to_path + '/.' : APP_DIR
|
|
16
|
+
FileUtils.cp_r(src, path)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def post_install path
|
|
20
|
+
make_executable(path / 'core/generate_configs.rb')
|
|
21
|
+
cleanup(path)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def cleanup path
|
|
25
|
+
Dir["#{path}/**/.ignore"].each {|f| FileUtils.rm_f(f)}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Appril
|
|
2
|
+
class CLI
|
|
3
|
+
|
|
4
|
+
class Update
|
|
5
|
+
include Helpers
|
|
6
|
+
|
|
7
|
+
def initialize path
|
|
8
|
+
FileUtils.rm_rf(path / 'core')
|
|
9
|
+
|
|
10
|
+
Dir.chdir APP_DIR do
|
|
11
|
+
Dir['**/*'].select {|e| File.file?(e)}.each do |file|
|
|
12
|
+
update_file(path, file)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
post_update(path)
|
|
17
|
+
puts "Done"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
def update_file path, file
|
|
22
|
+
return if File.file?(path / file)
|
|
23
|
+
create_dirname_for(path / file)
|
|
24
|
+
puts "Updating #{File.basename(path)}/#{file}"
|
|
25
|
+
FileUtils.cp(file, path / file)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def post_update path
|
|
29
|
+
make_executable(path / 'core/generate_configs.rb')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/appril-cli/version.rb
CHANGED
data/lib/appril-cli.rb
CHANGED
|
@@ -5,98 +5,113 @@ require 'pty'
|
|
|
5
5
|
|
|
6
6
|
module Appril
|
|
7
7
|
class CLI
|
|
8
|
+
|
|
8
9
|
BASE_DIR = Pathname.new(File.expand_path('../..', __FILE__))
|
|
9
|
-
|
|
10
|
+
APP_DIR = BASE_DIR / 'app'
|
|
11
|
+
DOCKER_DIR = BASE_DIR / 'docker'
|
|
12
|
+
WORKING_DIR = Pathname.new(Dir.pwd)
|
|
13
|
+
|
|
14
|
+
def self.run cmd
|
|
15
|
+
puts "", "$ #{cmd}"
|
|
16
|
+
PTY.spawn cmd do |r, w, pid|
|
|
17
|
+
begin
|
|
18
|
+
r.sync
|
|
19
|
+
r.each_char do |char|
|
|
20
|
+
print(char)
|
|
21
|
+
end
|
|
22
|
+
rescue Errno::EIO => e
|
|
23
|
+
# simply ignoring this
|
|
24
|
+
ensure
|
|
25
|
+
Process.wait(pid)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
10
29
|
end
|
|
11
30
|
end
|
|
12
31
|
|
|
13
32
|
require 'appril-cli/version'
|
|
14
33
|
require 'appril-cli/helpers'
|
|
15
34
|
require 'appril-cli/assertions'
|
|
16
|
-
require 'appril-cli/
|
|
17
|
-
require 'appril-cli/
|
|
35
|
+
require 'appril-cli/install'
|
|
36
|
+
require 'appril-cli/update'
|
|
18
37
|
require 'appril-cli/docker'
|
|
19
38
|
|
|
20
39
|
module Appril
|
|
21
40
|
class CLI
|
|
22
|
-
|
|
23
41
|
include Helpers
|
|
24
|
-
include Assertions
|
|
25
|
-
include Docker
|
|
26
|
-
include App
|
|
27
|
-
include Generator
|
|
28
42
|
|
|
29
43
|
def initialize args
|
|
44
|
+
opts, args = args.partition {|a| a =~ /\A\-/}
|
|
45
|
+
|
|
30
46
|
case command = args[0]
|
|
31
|
-
when '
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
when 'i', 'install'
|
|
48
|
+
Install.new(Pathname.new(args[1] || WORKING_DIR))
|
|
49
|
+
|
|
50
|
+
when 'u', 'update'
|
|
51
|
+
Update.new(Pathname.new(args[1] || WORKING_DIR))
|
|
52
|
+
|
|
53
|
+
|
|
35
54
|
when 'd', 'docker'
|
|
36
|
-
|
|
37
|
-
|
|
55
|
+
path = Pathname.new(args[2] || WORKING_DIR)
|
|
56
|
+
|
|
57
|
+
case subcommand = args[1]
|
|
58
|
+
when 'i', 'install'
|
|
59
|
+
Docker::Install.new(path)
|
|
60
|
+
|
|
61
|
+
when 'u', 'update'
|
|
62
|
+
Docker::Update.new(path)
|
|
63
|
+
|
|
64
|
+
when 'b', 'build'
|
|
65
|
+
Docker::Build.new(path, {
|
|
66
|
+
update_runner_only: opts.include?('-u'),
|
|
67
|
+
push_opted: opts.include?('-p')
|
|
68
|
+
})
|
|
69
|
+
else
|
|
70
|
+
puts format_error("Unknown subcommand #{subcommand}")
|
|
71
|
+
usage
|
|
72
|
+
end
|
|
73
|
+
when '-v', '--version'
|
|
38
74
|
puts VERSION
|
|
39
75
|
when nil, '-h', '--help'
|
|
40
76
|
usage
|
|
41
77
|
else
|
|
42
|
-
|
|
78
|
+
puts format_error("Unknown command #{command}")
|
|
43
79
|
usage
|
|
44
80
|
end
|
|
45
81
|
end
|
|
46
82
|
|
|
47
|
-
|
|
48
83
|
def usage
|
|
49
84
|
puts "
|
|
50
85
|
Arguments in round brackets are required.
|
|
51
86
|
Arguments in square brackets are optional.
|
|
52
87
|
|
|
88
|
+
All operations accepts a path as last argument.
|
|
89
|
+
If no path given current folder will be used.
|
|
90
|
+
|
|
53
91
|
|
|
54
92
|
=== Install a new app ===
|
|
55
|
-
$ appril (
|
|
56
|
-
* If -crudle option provided it will install a Crudle app
|
|
93
|
+
$ appril (install || i) [path]
|
|
57
94
|
|
|
58
95
|
=== Update existing app ===
|
|
59
|
-
$ appril (
|
|
60
|
-
|
|
61
|
-
=== Generate a new API ===
|
|
62
|
-
$ appril (generate || g) (api) (api name) (dir || .)
|
|
96
|
+
$ appril (update || u) [path]
|
|
63
97
|
|
|
64
98
|
=== Install Docker builder ===
|
|
65
|
-
$ appril (docker || d) (install || i)
|
|
99
|
+
$ appril (docker || d) (install || i) [path]
|
|
66
100
|
|
|
67
101
|
=== Update Docker builder ===
|
|
68
|
-
$ appril (docker || d) (update || u)
|
|
102
|
+
$ appril (docker || d) (update || u) [path]
|
|
69
103
|
|
|
70
104
|
=== Build Docker image and install run script ===
|
|
71
|
-
$ appril (docker || d) (build || b)
|
|
105
|
+
$ appril (docker || d) (build || b) [path] [-u] [-p]
|
|
72
106
|
* If -u option provided it will only update the run script without building the image.
|
|
73
107
|
* If -p option provided it will try to push the image to Docker registry after successful build.
|
|
74
108
|
|
|
75
109
|
=== Usage ===
|
|
76
110
|
$ appril [-h || --help]
|
|
77
|
-
".split("\n").map {|l| "\t" + l.strip}.join("\n")
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def unknown_instruction_error! instruction, *available_instructions
|
|
82
|
-
fatal_error! "Unknown instruction #{instruction}. Use one of #{available_instructions*', '}"
|
|
83
|
-
end
|
|
84
|
-
|
|
85
111
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
begin
|
|
90
|
-
r.sync
|
|
91
|
-
r.each_char do |char|
|
|
92
|
-
print(char)
|
|
93
|
-
end
|
|
94
|
-
rescue Errno::EIO => e
|
|
95
|
-
# simply ignoring this
|
|
96
|
-
ensure
|
|
97
|
-
Process.wait(pid)
|
|
98
|
-
end
|
|
99
|
-
end
|
|
112
|
+
=== Version ===
|
|
113
|
+
$ appril [-v || --version]
|
|
114
|
+
".split("\n").map {|l| "\t" + l.strip}.join("\n")
|
|
100
115
|
end
|
|
101
116
|
end
|
|
102
117
|
end
|