blufin 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/bf +5 -0
- data/bin/blufin +5 -0
- data/lib/blufin.rb +245 -0
- data/lib/core/code_scanners/common/scanner_common.rb +83 -0
- data/lib/core/code_scanners/common/scanner_java.rb +106 -0
- data/lib/core/code_scanners/scanner_java_embedded_objects.rb +386 -0
- data/lib/core/code_scanners/scanner_java_enums.rb +125 -0
- data/lib/core/code_scanners/scanner_java_source.rb +29 -0
- data/lib/core/code_scanners/scanner_java_tests.rb +157 -0
- data/lib/core/error_handling/schema_error.rb +9 -0
- data/lib/core/error_handling/sql_error.rb +21 -0
- data/lib/core/error_handling/sql_error_handler.rb +149 -0
- data/lib/core/error_handling/yml_error.rb +21 -0
- data/lib/core/error_handling/yml_error_handler.rb +437 -0
- data/lib/core/mysql.rb +347 -0
- data/lib/core/opt.rb +21 -0
- data/lib/core/site/site.rb +26 -0
- data/lib/core/site/site_auth.rb +88 -0
- data/lib/core/site/site_embedded.rb +27 -0
- data/lib/core/site/site_ports.rb +9 -0
- data/lib/core/site/site_resolver.rb +276 -0
- data/lib/core/site/site_services.rb +162 -0
- data/lib/core/site/site_ui.rb +16 -0
- data/lib/core/yml/config/yml_config_validator.rb +219 -0
- data/lib/core/yml/maven/yml_maven_validator.rb +1132 -0
- data/lib/core/yml/resource/yml_resource_validator.rb +154 -0
- data/lib/core/yml/schema/yml_schema_flags.rb +9 -0
- data/lib/core/yml/schema/yml_schema_validator.rb +1850 -0
- data/lib/core/yml/yml_cache_handler.rb +115 -0
- data/lib/core/yml/yml_common.rb +487 -0
- data/lib/core/yml/yml_meta_writer_base.rb +300 -0
- data/lib/core/yml/yml_outputter.rb +307 -0
- data/lib/core/yml/yml_validator_base.rb +630 -0
- data/lib/core/yml_writers/yml_configuration_writer.rb +40 -0
- data/lib/core/yml_writers/yml_java_api_resource_writer.rb +348 -0
- data/lib/core/yml_writers/yml_java_cron_type_writer.rb +113 -0
- data/lib/core/yml_writers/yml_java_css_dependency_writer.rb +59 -0
- data/lib/core/yml_writers/yml_java_dao_writer.rb +364 -0
- data/lib/core/yml_writers/yml_java_dto_writer.rb +251 -0
- data/lib/core/yml_writers/yml_java_embedded_object_writer.rb +968 -0
- data/lib/core/yml_writers/yml_java_enum_writer.rb +161 -0
- data/lib/core/yml_writers/yml_java_js_dependency_writer.rb +59 -0
- data/lib/core/yml_writers/yml_java_message_type_writer.rb +106 -0
- data/lib/core/yml_writers/yml_java_meta_writer.rb +173 -0
- data/lib/core/yml_writers/yml_java_model_writer.rb +510 -0
- data/lib/core/yml_writers/yml_java_pom_writer.rb +1050 -0
- data/lib/core/yml_writers/yml_java_resource_data_writer.rb +251 -0
- data/lib/core/yml_writers/yml_java_sdk_writer.rb +732 -0
- data/lib/core/yml_writers/yml_java_validator_writer.rb +280 -0
- data/lib/core/yml_writers/yml_java_worker_writer.rb +81 -0
- data/lib/core/yml_writers/yml_sql_structure_writer.rb +307 -0
- data/lib/core/yml_writers/yml_sql_template_writer.rb +243 -0
- data/lib/core/yml_writers/yml_vue_service_writer.rb +170 -0
- data/lib/core/yml_writers/yml_writer_base.rb +114 -0
- data/lib/routes/api_list.rb +35 -0
- data/lib/routes/api_meta.rb +59 -0
- data/lib/routes/build.rb +46 -0
- data/lib/routes/create/create_api.rb +35 -0
- data/lib/routes/create/create_ui.rb +84 -0
- data/lib/routes/export.rb +56 -0
- data/lib/routes/generate/generate_api.rb +225 -0
- data/lib/routes/generate/generate_img_favicon.rb +56 -0
- data/lib/routes/generate/generate_img_landing.rb +94 -0
- data/lib/routes/generate/generate_lambda.rb +43 -0
- data/lib/routes/lint.rb +35 -0
- data/lib/routes/mysql_reset.rb +43 -0
- data/lib/routes/release_blufin.rb +351 -0
- data/lib/routes/run.rb +35 -0
- data/lib/version.rb +1 -0
- data/opt/README.MD +2 -0
- data/opt/config/schema.yml +73 -0
- data/opt/config/template.yml +25 -0
- data/opt/sql/data/config/data-client.sql +7 -0
- data/opt/sql/data/config/data-db-configuration-property.sql +47 -0
- data/opt/sql/data/config/data-db-configuration.sql +9 -0
- data/opt/sql/data/config/data-db.sql +175 -0
- data/opt/sql/data/config/data-profile-api.sql +47 -0
- data/opt/sql/data/config/data-profile-cron.sql +0 -0
- data/opt/sql/data/config/data-profile-worker.sql +0 -0
- data/opt/sql/data/config/data-profile.sql +87 -0
- data/opt/sql/data/config/data-project.sql +95 -0
- data/opt/sql/structure/blufin-master-structure-fks.sql +65 -0
- data/opt/sql/structure/blufin-master-structure.sql +97 -0
- data/opt/sql/structure/blufin-mock-structure-fks.sql +38 -0
- data/opt/sql/structure/blufin-mock-structure.sql +98 -0
- data/opt/sql/templates/config/template-client.sql +7 -0
- data/opt/sql/templates/config/template-db-configuration-property.sql +11 -0
- data/opt/sql/templates/config/template-db-configuration.sql +9 -0
- data/opt/sql/templates/config/template-db.sql +21 -0
- data/opt/sql/templates/config/template-profile-api.sql +11 -0
- data/opt/sql/templates/config/template-profile-cron.sql +7 -0
- data/opt/sql/templates/config/template-profile-worker.sql +7 -0
- data/opt/sql/templates/config/template-profile.sql +21 -0
- data/opt/sql/templates/config/template-project.sql +23 -0
- data/opt/yml/api/schema/config/client.yml +14 -0
- data/opt/yml/api/schema/config/db.yml +45 -0
- data/opt/yml/api/schema/config/db_configuration.yml +22 -0
- data/opt/yml/api/schema/config/db_configuration_property.yml +22 -0
- data/opt/yml/api/schema/config/profile.yml +53 -0
- data/opt/yml/api/schema/config/profile_api.yml +22 -0
- data/opt/yml/api/schema/config/profile_cron.yml +14 -0
- data/opt/yml/api/schema/config/profile_worker.yml +14 -0
- data/opt/yml/api/schema/config/project.yml +48 -0
- data/opt/yml/api/schema/mock/mock.yml +99 -0
- data/opt/yml/api/schema/mock/mock_nested_if_enum.yml +16 -0
- data/opt/yml/api/schema/mock/mock_nested_if_enum_system.yml +16 -0
- data/opt/yml/api/schema/mock/mock_nested_linked.yml +43 -0
- data/opt/yml/api/schema/mock/mock_nested_multiple.yml +61 -0
- data/opt/yml/api/schema/mock/mock_nested_single.yml +67 -0
- data/opt/yml/api/schema/mock/mock_nested_single_super_deep.yml +32 -0
- data/opt/yml/api/schema/mock/mock_nested_single_super_super_deep.yml +17 -0
- metadata +240 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'mini_magick'
|
2
|
+
|
3
|
+
module AppCommand
|
4
|
+
|
5
|
+
class GenerateUIFavIcon < ::Convoy::ActionCommand::Base
|
6
|
+
|
7
|
+
ACCEPTED_IMG_FORMATS = %w(jpg jpeg png)
|
8
|
+
|
9
|
+
def execute
|
10
|
+
|
11
|
+
begin
|
12
|
+
|
13
|
+
@opts = command_options
|
14
|
+
@args = arguments
|
15
|
+
|
16
|
+
opts_validate
|
17
|
+
opts_routing
|
18
|
+
|
19
|
+
rescue => e
|
20
|
+
|
21
|
+
Blufin::Terminal::print_exception(e)
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def opts_validate
|
28
|
+
|
29
|
+
# TODO - Validate
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
# Generates a favicon.ico file (using ImageMagick)
|
34
|
+
# @return void
|
35
|
+
def opts_routing
|
36
|
+
|
37
|
+
# TODO - FAVICON GENERATOR - https://medium.com/@morsetree/creating-a-favicon-command-line-8f6bf224e360
|
38
|
+
|
39
|
+
img = 'path-to-img.jpg|png'
|
40
|
+
cmd = <<TEMPLATE
|
41
|
+
convert #{img} -background white \
|
42
|
+
\( -clone 0 -resize 16x16 -extent 16x16 \) \
|
43
|
+
\( -clone 0 -resize 32x32 -extent 32x32 \) \
|
44
|
+
\( -clone 0 -resize 48x48 -extent 48x48 \) \
|
45
|
+
\( -clone 0 -resize 64x64 -extent 64x64 \) \
|
46
|
+
-delete 0 -alpha off -colors 256 favicon.ico
|
47
|
+
TEMPLATE
|
48
|
+
|
49
|
+
puts cmd
|
50
|
+
raise RuntimeError, 'Not yet implemented!'
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module AppCommand
|
2
|
+
|
3
|
+
class GenerateUIImageLanding < ::Convoy::ActionCommand::Base
|
4
|
+
|
5
|
+
ACCEPTED_IMG_FORMATS = %w(jpg jpeg png)
|
6
|
+
|
7
|
+
def execute
|
8
|
+
|
9
|
+
begin
|
10
|
+
|
11
|
+
@opts = command_options
|
12
|
+
@args = arguments
|
13
|
+
|
14
|
+
opts_validate
|
15
|
+
opts_routing
|
16
|
+
|
17
|
+
rescue => e
|
18
|
+
|
19
|
+
Blufin::Terminal::print_exception(e)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def opts_validate
|
26
|
+
if @args.nil? || @args.length < 2
|
27
|
+
Blufin::Terminal::arg_instructions(
|
28
|
+
[
|
29
|
+
'Path to source image.',
|
30
|
+
"Prefix for new image name(s) \xe2\x80\x94 IE: #{Blufin::Terminal::format_highlight('logo')}\x1B[38;5;208m will produce \xe2\x86\x92 #{Blufin::Terminal::format_highlight('logo-375x250.jpg')}"
|
31
|
+
])
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
@file_source = File.expand_path(@args[0])
|
35
|
+
Blufin::Terminal::error("#{Blufin::Terminal::format_directory(@file_source)} file doesn't exist.") unless Blufin::Files::file_exists(@file_source)
|
36
|
+
fss = @file_source.split('/')
|
37
|
+
fss.pop
|
38
|
+
@path_target = fss.join('/')
|
39
|
+
@image_prefix = @args[1]
|
40
|
+
@quality = @opts[:quality]
|
41
|
+
Blufin::Terminal::error("#{Blufin::Terminal::format_directory(@path_target)} path doesn't exist.") unless Blufin::Files::path_exists(@path_target)
|
42
|
+
Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Image prefix')} cannot be blank or nil.") if @image_prefix.nil? || @image_prefix.to_s.strip == ''
|
43
|
+
Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Quality')} must be integer between 0 - 100, instead got: #{@quality}") unless @quality.to_s =~ /^\d+$/ && @quality.to_i >= 0 && @quality.to_i <= 100
|
44
|
+
@image_ext = File.extname(@file_source).gsub(/^\./, '').strip.downcase
|
45
|
+
Blufin::Terminal::error("Unsupported file-extension #{Blufin::Terminal::format_highlight(@image_ext)}. Supported extensions are:", ACCEPTED_IMG_FORMATS, true) unless ACCEPTED_IMG_FORMATS.include?(@image_ext)
|
46
|
+
@image = Blufin::Image::info(@file_source)
|
47
|
+
Blufin::Terminal::custom('SCANNED', 4, "Source Image: #{Blufin::Terminal::format_directory(@file_source)}", [
|
48
|
+
"Type: \x1B[38;5;94m#{@image.type}\x1B[0m",
|
49
|
+
"Size: \x1B[38;5;94m#{@image.size}\x1B[0m",
|
50
|
+
"Dimensions: \x1B[38;5;94m#{@image.width}x#{@image.height}\x1B[0m",
|
51
|
+
"GCD: \x1B[38;5;94m#{Blufin::Image::gcd(@image.width, @image.height)}\x1B[0m",
|
52
|
+
"Aspect: \x1B[38;5;94m#{Blufin::Image::calc_aspect_ratio(@image.width, @image.height)}\x1B[0m"
|
53
|
+
])
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
# Generates a Landing Page Image.
|
58
|
+
# See: https://www.rubyguides.com/2018/12/minimagick-gem/
|
59
|
+
# @return void
|
60
|
+
def opts_routing
|
61
|
+
|
62
|
+
# TODO REMOVE - $ my g b bl && my g b && bf g ui l ~/Repos/blufin-archetypes/nuxt/v1/static/img/bg/face.jpg testing -ys
|
63
|
+
|
64
|
+
target_images = [
|
65
|
+
{:side => 'width', :length => 2560, :ratio => '16:9', :quality => @quality},
|
66
|
+
{:side => 'width', :length => 1920, :ratio => '16:9', :quality => @quality},
|
67
|
+
{:side => 'width', :length => 1366, :ratio => '16:9', :quality => @quality},
|
68
|
+
{:side => 'width', :length => 414, :ratio => '9:18', :quality => @quality},
|
69
|
+
]
|
70
|
+
target_output = ["Destination path: #{Blufin::Terminal::format_directory(@path_target)}", nil]
|
71
|
+
target_images.each { |ti| target_output << "\x1B[38;5;154m#{Blufin::Image::calc_file_name(@image_prefix, @image_ext, ti[:side], ti[:length], ti[:ratio])}\x1B[0m \xe2\x86\x92 #{ti.inspect}" }
|
72
|
+
if @opts[:skip_confirm] || Blufin::Terminal::prompt_yes_no("About to #{Blufin::Terminal::format_action('create')} the following images from #{Blufin::Terminal::format_directory(@file_source)}:", target_output)
|
73
|
+
# This runs the crop(s).
|
74
|
+
target_images.each { |ti|
|
75
|
+
target = "#{@path_target}/#{Blufin::Image::calc_file_name(@image_prefix, @image_ext, ti[:side], ti[:length], ti[:ratio])}"
|
76
|
+
Blufin::Image::crop_to_length_and_ratio(@file_source, target, ti[:side], ti[:length], ti[:ratio], ti[:quality])
|
77
|
+
if @opts[:add_size]
|
78
|
+
img = Blufin::Image::info(target)
|
79
|
+
Blufin::Image::add_text(target, target, "#{img.width}x#{img.height}")
|
80
|
+
end
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
# Standardized way of generating image-name.
|
87
|
+
# @return string
|
88
|
+
def image_name(suffix)
|
89
|
+
"#{@image_prefix}-#{suffix}.#{@image_ext}"
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module AppCommand
|
2
|
+
|
3
|
+
class GenerateLambda < ::Convoy::ActionCommand::Base
|
4
|
+
|
5
|
+
def execute
|
6
|
+
|
7
|
+
begin
|
8
|
+
|
9
|
+
@opts = command_options
|
10
|
+
@args = arguments
|
11
|
+
|
12
|
+
opts_validate
|
13
|
+
opts_routing
|
14
|
+
|
15
|
+
rescue => e
|
16
|
+
|
17
|
+
Blufin::Terminal::print_exception(e)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def opts_validate
|
24
|
+
|
25
|
+
# TODO - Validate something?
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
# Generates a favicon.ico file (using ImageMagick)
|
30
|
+
# @return void
|
31
|
+
def opts_routing
|
32
|
+
|
33
|
+
# TODO - Figure out structure of configuration files.
|
34
|
+
# TODO - Scan configuration files + validate.
|
35
|
+
# TODO - Generate boiler-plate code.
|
36
|
+
|
37
|
+
raise RuntimeError, 'Not yet implemented!'
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/routes/lint.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module AppCommand
|
2
|
+
|
3
|
+
class Lint < ::Convoy::ActionCommand::Base
|
4
|
+
|
5
|
+
def execute
|
6
|
+
|
7
|
+
begin
|
8
|
+
|
9
|
+
@opts = command_options
|
10
|
+
@args = arguments
|
11
|
+
|
12
|
+
opts_validate
|
13
|
+
opts_routing
|
14
|
+
|
15
|
+
rescue => e
|
16
|
+
|
17
|
+
Blufin::Terminal::print_exception(e)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def opts_validate
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def opts_routing
|
28
|
+
|
29
|
+
Blufin::Terminal::error('Not yet implemented!')
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module AppCommand
|
2
|
+
|
3
|
+
class MySQLReset < ::Convoy::ActionCommand::Base
|
4
|
+
|
5
|
+
def execute
|
6
|
+
|
7
|
+
begin
|
8
|
+
|
9
|
+
@opts = command_options
|
10
|
+
@args = arguments
|
11
|
+
|
12
|
+
@site = Blufin::SiteResolver::validate_site(@args[0])
|
13
|
+
|
14
|
+
opts_validate
|
15
|
+
opts_routing
|
16
|
+
|
17
|
+
rescue => e
|
18
|
+
|
19
|
+
Blufin::Terminal::print_exception(e)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def opts_validate
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def opts_routing
|
30
|
+
|
31
|
+
reset_database
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_database
|
36
|
+
|
37
|
+
App::MySQL::reset_full_mock_data(@site, @opts[:skip_confirm], @opts[:verbose])
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,351 @@
|
|
1
|
+
module AppCommand
|
2
|
+
|
3
|
+
class ReleaseBlufin < ::Convoy::ActionCommand::Base
|
4
|
+
|
5
|
+
def execute
|
6
|
+
|
7
|
+
|
8
|
+
begin
|
9
|
+
|
10
|
+
@opts = command_options
|
11
|
+
@args = arguments
|
12
|
+
|
13
|
+
@threads = []
|
14
|
+
|
15
|
+
@version_release = nil
|
16
|
+
@version_current = '0.0.0'
|
17
|
+
@version_color = 33
|
18
|
+
|
19
|
+
@path_blufin_aws = Blufin::Config::get_path('Paths', 'BlufinAWS')
|
20
|
+
@path_blufin_java = Blufin::Config::get_path('Paths', 'BlufinJava')
|
21
|
+
@path_blufin_java_labs = Blufin::Config::get_path('Paths', 'BlufinJavaLabs')
|
22
|
+
@path_blufin_java_framework = Blufin::Config::get_path('Paths', 'BlufinJavaFramework') # TODO - DEPRECATE THIS!
|
23
|
+
@path_blufin_ruby = Blufin::Config::get_path('Paths', 'BlufinRuby')
|
24
|
+
@blufin_version_file = "#{@path_blufin_ruby}/blufin/lib/version.rb"
|
25
|
+
@blufin_java_version_file = "#{@path_blufin_java}/maven.yml"
|
26
|
+
@blufin_labs_version_file = "#{@path_blufin_java_labs}/app-infrastructure/maven.yml"
|
27
|
+
|
28
|
+
@minify_exclude_file = "#{@path_blufin_java}/minify-exclude.txt" # Does not copy across.
|
29
|
+
@minify_ignore_file = "#{@path_blufin_java}/minify-ignore.txt" # Copies across but does not alter file.
|
30
|
+
|
31
|
+
opts_validate
|
32
|
+
opts_routing
|
33
|
+
|
34
|
+
rescue => e
|
35
|
+
|
36
|
+
Blufin::Terminal::print_exception(e)
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def opts_validate
|
43
|
+
|
44
|
+
system('clear')
|
45
|
+
|
46
|
+
# TODO - Check Maven installed with version above 3.6
|
47
|
+
# TODO - Check MySQL is running (required for integration testing)
|
48
|
+
|
49
|
+
# TODO - Uncomment.
|
50
|
+
[@path_blufin_aws,
|
51
|
+
# @path_blufin_java,
|
52
|
+
# @path_blufin_java_labs,
|
53
|
+
# @path_blufin_java_framework,
|
54
|
+
# @path_blufin_ruby
|
55
|
+
].each do |path|
|
56
|
+
|
57
|
+
path = File.expand_path(path)
|
58
|
+
Blufin::Terminal::error('Path does not exist', path, true) unless Blufin::Files::path_exists(path)
|
59
|
+
git_status = Blufin::Terminal::command_capture('git status', path, false)[0]
|
60
|
+
clean_repo = git_status.to_s == "On branch master\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n"
|
61
|
+
Blufin::Terminal::error("#{Blufin::Terminal::format_directory(path)} is either not #{Blufin::Terminal::format_highlight('clean')} or not on #{Blufin::Terminal::format_highlight('master')}.", git_status.split("\n"), true) unless clean_repo
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# Check that blufin-java/minify-exclude.txt file exists.
|
66
|
+
exists_exclude = Blufin::Files::file_exists(@minify_exclude_file)
|
67
|
+
exists_ignore = Blufin::Files::file_exists(@minify_ignore_file)
|
68
|
+
if !exists_exclude || !exists_ignore
|
69
|
+
Blufin::Terminal::error('Files required for release process are missing:', [
|
70
|
+
"#{exists_exclude ? "\x1B[38;5;46m Found\x1B[0m" : "\x1B[38;5;196mMissing\x1B[0m"} \xe2\x86\x92 #{Blufin::Terminal::format_directory(@minify_exclude_file)}",
|
71
|
+
"#{exists_ignore ? "\x1B[38;5;46m Found\x1B[0m" : "\x1B[38;5;196mMissing\x1B[0m"} \xe2\x86\x92 #{Blufin::Terminal::format_directory(@minify_ignore_file)}"
|
72
|
+
], true)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Gets Blufin Version from -> /Users/Albert/Repos/blufin/blufin/lib/version.rb
|
76
|
+
blufin_version = get_blufin_version(@blufin_version_file)
|
77
|
+
Blufin::Terminal::error("Could not extract valid version number from #{Blufin::Terminal::format_directory(@blufin_version_file)}", ["Found: #{blufin_version.inspect}"]) unless blufin_version =~ /^\d+\.\d+\.\d+(-SNAPSHOT)?$/i
|
78
|
+
|
79
|
+
# Gets Blufin-Java Version from -> /Users/Albert/Repos/blufin-java/maven.yml
|
80
|
+
blufin_java_version = get_blufin_java_version(@blufin_java_version_file)
|
81
|
+
Blufin::Terminal::error("Could not extract valid version number from #{Blufin::Terminal::format_directory(@blufin_java_version_file)}", ["Found: #{blufin_java_version.inspect}"]) unless blufin_java_version =~ /^\d+\.\d+\.\d+(-SNAPSHOT)?$/i
|
82
|
+
|
83
|
+
# Gets Blufin-Labs Version from -> /Users/Albert/Repos/repos-blufin/blufin-labs/app-infrastructure/maven.yml
|
84
|
+
blufin_labs_version = get_blufin_java_version(@blufin_java_version_file)
|
85
|
+
Blufin::Terminal::error("Could not extract valid version number from #{Blufin::Terminal::format_directory(@blufin_labs_version_file)}", ["Found: #{blufin_labs_version.inspect}"]) unless blufin_labs_version =~ /^\d+\.\d+\.\d+(-SNAPSHOT)?$/i
|
86
|
+
|
87
|
+
dir_max_length = [@blufin_version_file.length, @blufin_java_version_file.length, @blufin_labs_version_file.length].max
|
88
|
+
|
89
|
+
# Checks that all the versions are the same.
|
90
|
+
Blufin::Terminal::error('Version mismatch:', [
|
91
|
+
"#{Blufin::Terminal::format_directory(@blufin_version_file.ljust(dir_max_length, ' '))} \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{blufin_version}\x1B[0m",
|
92
|
+
"#{Blufin::Terminal::format_directory(@blufin_java_version_file.ljust(dir_max_length, ' '))} \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{blufin_java_version}\x1B[0m",
|
93
|
+
"#{Blufin::Terminal::format_directory(@blufin_labs_version_file.ljust(dir_max_length, ' '))} \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{blufin_labs_version}\x1B[0m"
|
94
|
+
], true) unless [blufin_version, blufin_java_version, blufin_labs_version].uniq!.length == 1
|
95
|
+
|
96
|
+
@version_current = blufin_version.gsub(/(-SNAPSHOT)?$/i, '')
|
97
|
+
|
98
|
+
@site = Blufin::Site::DEFAULT_SITE
|
99
|
+
|
100
|
+
# Must go first because it contains the most important configuration data.
|
101
|
+
Blufin::SiteEmbedded::init(Blufin::ScannerJavaEmbeddedObjects::new(@site, @error_handler).get_data)
|
102
|
+
|
103
|
+
@error_handler = Blufin::YmlErrorHandler.new(@site)
|
104
|
+
|
105
|
+
@yml_maven = Blufin::YmlMavenValidator.new(@site, @error_handler)
|
106
|
+
|
107
|
+
@error_handler.display_errors_if_any(true)
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
def opts_routing
|
112
|
+
|
113
|
+
begin
|
114
|
+
|
115
|
+
# Get user to choose new version.
|
116
|
+
# @version_release = prompt_for_new_version
|
117
|
+
|
118
|
+
# Confirm new version.
|
119
|
+
# Blufin::Terminal::prompt_yes_no("New Blufin version is \x1B[38;5;240m\xe2\x86\x92\x1B[0m \x1B[38;5;#{@version_color}m#{@version_release}\x1B[0m")
|
120
|
+
|
121
|
+
# Change all the versions on all the repos to the new one.
|
122
|
+
# change_versions_on_files(@version_release)
|
123
|
+
|
124
|
+
# Build blufin-java/blufin-labs to regenerate the POMs with new version.
|
125
|
+
# execute_command('bf s g bf', @path_blufin_ruby)
|
126
|
+
|
127
|
+
# Copy all the files from blufin-java to public repository. This performs minor obfuscation and minification.
|
128
|
+
# Blufin::Terminal::execute_proc("Copying/obfuscating #{Blufin::Terminal::format_directory(@path_blufin_java)} to \xe2\x86\x92 #{Blufin::Terminal::format_directory(@path_blufin_java_framework)} (and removing tests).", Proc.new { |args|
|
129
|
+
# AppCommand::ReleaseBlufin::copy_blufin_java(@path_blufin_java, @path_blufin_java_framework, @minify_exclude_file, @minify_ignore_file)
|
130
|
+
# AppCommand::ReleaseBlufin::remove_tests(@path_blufin_java_framework)
|
131
|
+
# true
|
132
|
+
# })
|
133
|
+
|
134
|
+
# TODO - Writing POM files always includes blank + ebay...
|
135
|
+
|
136
|
+
yml_java_pom_writer = Blufin::YmlJavaPomWriter.new(@yml_maven.data_blufin)
|
137
|
+
yml_java_pom_writer.write_poms_blufin(@path_blufin_java_framework)
|
138
|
+
|
139
|
+
# TODO - REMOVE
|
140
|
+
# abort_the_mission(@path_blufin_aws, @path_blufin_java, @path_blufin_java_framework, @path_blufin_java_labs)
|
141
|
+
|
142
|
+
exit
|
143
|
+
|
144
|
+
Blufin::Files::get_dirs_in_dir(@path_blufin_java_framework).each do |path|
|
145
|
+
|
146
|
+
mod = path.split('/')[path.split('/').length - 1]
|
147
|
+
mod_path = "#{@path_blufin_java_framework}/#{mod}"
|
148
|
+
# mod_title = 'N/A'
|
149
|
+
#
|
150
|
+
# Blufin::Files::read_file("#{mod_path}/pom.xml").each do |line|
|
151
|
+
# if line =~ /^\s*<name>(.*)<\/name>\s*$/
|
152
|
+
# mod_title = line.gsub(/^\s*<name>/, '').gsub(/<\/name>\s*$/, '')
|
153
|
+
# end
|
154
|
+
# end
|
155
|
+
|
156
|
+
execute_command('mvn clean test', mod_path)
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
exit
|
161
|
+
|
162
|
+
# TODO - Build the final validation screen first, so you know what to aim for...
|
163
|
+
# Show final validation screen (after which is the point of no return).
|
164
|
+
|
165
|
+
# Run -> git commit "Release: v1.0.0"
|
166
|
+
# Run -> git tag v1.0.0
|
167
|
+
|
168
|
+
rescue => e
|
169
|
+
|
170
|
+
# TODO - Add Prompt.
|
171
|
+
# abort_the_mission(@path_blufin_aws, @path_blufin_java, @path_blufin_java_framework, @path_blufin_java_labs)
|
172
|
+
|
173
|
+
Blufin::Terminal::print_exception(e)
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
private
|
180
|
+
|
181
|
+
# Proxy function that bombs-out soon as an execution fails.
|
182
|
+
# @return void
|
183
|
+
def execute_command(command, path)
|
184
|
+
unless Blufin::Terminal::execute(command, path)
|
185
|
+
Blufin::Terminal::error('Something went wrong.', 'Please look at above failures.', true)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# This prompts the user to select a new version number.
|
190
|
+
# @return void
|
191
|
+
def prompt_for_new_version
|
192
|
+
puts
|
193
|
+
puts " \x1B[38;5;240m Last Blufin release version was \xe2\x86\x92\x1B[0m \x1B[38;5;33m#{@version_current}\x1B[0m"
|
194
|
+
puts
|
195
|
+
version = get_versions(@version_current)
|
196
|
+
version_choices = [
|
197
|
+
"\x1B[38;5;198m1)\x1B[0m Bump major version \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{version[:mj]}\x1B[0m",
|
198
|
+
"\x1B[38;5;198m2)\x1B[0m Bump minor version \x1B[38;5;246m(default)\x1B[0m \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{version[:mn]}\x1B[0m",
|
199
|
+
"\x1B[38;5;198m3)\x1B[0m Bump point-release version \xe2\x86\x92 \x1B[38;5;#{@version_color}m#{version[:pr]}\x1B[0m"
|
200
|
+
]
|
201
|
+
validation_proc = Proc.new { |value| %w(1 2 3).include?(value.to_s.upcase) || value.strip == '' }
|
202
|
+
validation_message = "Value must either be \x1B[38;5;220m1, 2,\x1B[0m or \x1B[38;5;220m3\x1B[0m"
|
203
|
+
version_chosen = Blufin::Terminal::prompt_for_input('CHOOSE VERSION', 'Choose next Blufin release version:', version_choices, validation_proc, validation_message).to_s.upcase
|
204
|
+
case version_chosen
|
205
|
+
when '1'
|
206
|
+
return version[:mj]
|
207
|
+
when ''
|
208
|
+
return version[:mn]
|
209
|
+
when '2'
|
210
|
+
return version[:mn]
|
211
|
+
when '3'
|
212
|
+
return version[:pr]
|
213
|
+
else
|
214
|
+
raise RuntimeError, "Could not determine version from user input: #{version_chosen}"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
# Calculate major, minor, point-release version numbers.
|
219
|
+
# @return array
|
220
|
+
def get_versions(current_version)
|
221
|
+
vs = current_version.split('.')
|
222
|
+
raise RuntimeError, "Expected version parts to be 3, got: #{vs.length} (#{vs.inspect})" unless vs.length == 3
|
223
|
+
mj = vs[0].to_i
|
224
|
+
mn = vs[1].to_i
|
225
|
+
pr = vs[2].to_i
|
226
|
+
{
|
227
|
+
:mj => "#{mj + 1}.0.0",
|
228
|
+
:mn => "#{mj}.#{mn + 1}.0",
|
229
|
+
:pr => "#{mj}.#{mn}.#{pr + 1}",
|
230
|
+
}
|
231
|
+
end
|
232
|
+
|
233
|
+
# If something goes wrong or we don't want to do the release, this will revert EVERYTHING!
|
234
|
+
# @return void
|
235
|
+
def abort_the_mission(path_blufin_aws, path_blufin_java, path_blufin_java_framework, path_blufin_java_labs)
|
236
|
+
Blufin::Terminal::info('Reverting the following repositories:', %w(blufin-aws blufin-java blufin-blufin-framework blufin-labs))
|
237
|
+
# Blufin::Terminal::execute('git reset --hard HEAD', path_blufin_aws)
|
238
|
+
Blufin::Terminal::execute('git reset --hard HEAD', path_blufin_java)
|
239
|
+
# Blufin::Terminal::execute('git reset --hard HEAD', path_blufin_java_framework)
|
240
|
+
Blufin::Terminal::execute('git reset --hard HEAD', path_blufin_java_labs)
|
241
|
+
end
|
242
|
+
|
243
|
+
# Gets the version number from Blufin ruby gem.
|
244
|
+
# @return string
|
245
|
+
def get_blufin_version(path_to_file)
|
246
|
+
Blufin::Files::read_file(path_to_file).each do |line|
|
247
|
+
if line.strip.length > 0
|
248
|
+
line = line.gsub("BLUFIN_VERSION = '", '')
|
249
|
+
line = line.chomp("'")
|
250
|
+
return line
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
# Gets the version number from Blufin ruby gem.
|
256
|
+
# @return string
|
257
|
+
def get_blufin_java_version(path_to_file)
|
258
|
+
previous_was_blufin = false
|
259
|
+
Blufin::Files::read_file(path_to_file).each do |line|
|
260
|
+
line = line.strip
|
261
|
+
if previous_was_blufin
|
262
|
+
if line.strip.length > 0
|
263
|
+
return line.gsub(/version:\s*/, '')
|
264
|
+
end
|
265
|
+
end
|
266
|
+
previous_was_blufin = true if line =~ /blufin:/
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
# Change all the places were the Blufin version is stored.
|
271
|
+
# @return void
|
272
|
+
def change_versions_on_files(version)
|
273
|
+
Blufin::Files::write_line_to_file(@blufin_version_file, "BLUFIN_VERSION = '#{version}'", /^\s*BLUFIN_VERSION\s*=\s*'0.0.0(-SNAPSHOT)?'\s*$/, false, true)
|
274
|
+
Blufin::Files::write_line_to_file(@blufin_java_version_file, " version: #{version}", /^\s+(version:)\s*#{@version_current}(-SNAPSHOT)?$/, false, true)
|
275
|
+
Blufin::Files::write_line_to_file(@blufin_labs_version_file, " version: #{version}", /^\s+(version:)\s*#{@version_current}(-SNAPSHOT)?$/, false, true)
|
276
|
+
end
|
277
|
+
|
278
|
+
# This method copies all of the blufin-java code into blufin-framework and performs various mutation/minification operations.
|
279
|
+
# @return void
|
280
|
+
def self.copy_blufin_java(path_blufin_java, path_blufin_java_framework, minify_exclude_file, minify_ignore_file, verbose = false, quick = false)
|
281
|
+
exclude_files = []
|
282
|
+
Blufin::Files::read_file(minify_exclude_file).each { |line| exclude_files << line.strip } if Blufin::Files::file_exists(minify_exclude_file)
|
283
|
+
ignore_files = []
|
284
|
+
Blufin::Files::read_file(minify_ignore_file).each { |line| ignore_files << line.strip } if Blufin::Files::file_exists(minify_ignore_file)
|
285
|
+
# Wipe out the framework path.
|
286
|
+
system("cd #{path_blufin_java_framework} && rm -r ./* >/dev/null 2>&1")
|
287
|
+
Blufin::Files::get_files_in_dir(path_blufin_java).each do |file|
|
288
|
+
# Skip POM files and .gitignore.
|
289
|
+
next if file.strip =~ /\/pom\.xml\s*$/
|
290
|
+
next if file.strip =~ /^\.gitignore$/
|
291
|
+
exclude = false
|
292
|
+
exclude_files.each do |exclude_file|
|
293
|
+
if file.strip =~ /(#{exclude_file.strip.gsub(/\*/, '')})/
|
294
|
+
exclude = true
|
295
|
+
break
|
296
|
+
end
|
297
|
+
end
|
298
|
+
next if exclude
|
299
|
+
ignore = false
|
300
|
+
ignore_files.each do |ignore_file|
|
301
|
+
if file.strip =~ /(#{ignore_file.strip.gsub(/\*/, '')})/
|
302
|
+
ignore = true
|
303
|
+
break
|
304
|
+
end
|
305
|
+
end
|
306
|
+
file_split = file.split('/')
|
307
|
+
unless file_split[6] == 'target'
|
308
|
+
file_target = file.gsub(path_blufin_java, path_blufin_java_framework)
|
309
|
+
begin
|
310
|
+
if !ignore && !quick && file.strip =~ /\.java$/ && file !~ /src\/test\/java\// && file !~ /ebay/ && file !~ /blufin-blank/
|
311
|
+
puts "\x1B[38;5;246m#{file}\x1B[0m" if verbose
|
312
|
+
Blufin::Files::write_file(file_target, [])
|
313
|
+
|
314
|
+
# TODO - Put this somehwere more reliable, like possibly in the OPT folder...
|
315
|
+
unless system("java -jar ~/Repos/blufin/assets/bin/blufin-minifier-1.0.0.jar --in #{file} --out #{file_target} --mode compact > /dev/null 2>&1")
|
316
|
+
write_framework_file(file, file_target)
|
317
|
+
end
|
318
|
+
|
319
|
+
else
|
320
|
+
puts "\x1B[38;5;240m#{file}\x1B[0m" if verbose
|
321
|
+
write_framework_file(file, file_target)
|
322
|
+
end
|
323
|
+
rescue
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
# This method removes all Tests from the blufin-framework repo.
|
330
|
+
# @return void
|
331
|
+
def self.remove_tests(path_blufin_java_framework, verbose = false)
|
332
|
+
Blufin::Files::get_dirs_in_dir(path_blufin_java_framework).each do |dir|
|
333
|
+
test_directory = "#{dir}/src/test"
|
334
|
+
puts "\x1B[38;5;198m Removing:\x1B[0m \x1B[38;5;240m#{test_directory}\x1B[0m" if verbose
|
335
|
+
system("rm -rf #{test_directory}") if Blufin::Files::path_exists(test_directory)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
# Write a file without doing any conversions.
|
340
|
+
# @return void
|
341
|
+
def self.write_framework_file(source_file, target_file, lines = nil)
|
342
|
+
if lines.nil?
|
343
|
+
lines = Blufin::Files::read_file(source_file)
|
344
|
+
lines.map! { |n| n.gsub("\n", '') }
|
345
|
+
end
|
346
|
+
Blufin::Files::write_file(target_file, lines)
|
347
|
+
end
|
348
|
+
|
349
|
+
end
|
350
|
+
|
351
|
+
end
|