legionio 0.4.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +45 -0
  3. data/.github/workflows/rubocop.yml +28 -0
  4. data/.github/workflows/sourcehawk-scan.yml +20 -0
  5. data/.gitignore +0 -0
  6. data/.rubocop.yml +2 -6
  7. data/CHANGELOG.md +5 -34
  8. data/CODE_OF_CONDUCT.md +75 -0
  9. data/CONTRIBUTING.md +55 -0
  10. data/Dockerfile +2 -2
  11. data/Gemfile +9 -0
  12. data/INDIVIDUAL_CONTRIBUTOR_LICENSE.md +30 -0
  13. data/LICENSE +201 -0
  14. data/NOTICE.txt +9 -0
  15. data/README.md +13 -12
  16. data/SECURITY.md +9 -0
  17. data/attribution.txt +1 -0
  18. data/legionio.gemspec +20 -31
  19. data/lib/legion/cli/chain.rb +0 -0
  20. data/lib/legion/cli/cohort.rb +0 -0
  21. data/lib/legion/cli/function.rb +0 -0
  22. data/lib/legion/cli/lex/actor.rb +0 -0
  23. data/lib/legion/cli/lex/exchange.rb +0 -0
  24. data/lib/legion/cli/lex/message.rb +0 -0
  25. data/lib/legion/cli/lex/queue.rb +0 -0
  26. data/lib/legion/cli/lex/runner.rb +0 -0
  27. data/lib/legion/cli/lex/templates/actor.erb +0 -0
  28. data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
  29. data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +0 -0
  30. data/lib/legion/cli/lex/templates/base/dockerfile.erb +5 -0
  31. data/lib/legion/cli/lex/templates/base/gemfile.erb +8 -1
  32. data/lib/legion/cli/lex/templates/base/gemspec.erb +10 -12
  33. data/lib/legion/cli/lex/templates/base/github_rspec.yml.erb +23 -0
  34. data/lib/legion/cli/lex/templates/base/github_rubocop.yml.erb +28 -0
  35. data/lib/legion/cli/lex/templates/base/gitignore.erb +0 -0
  36. data/lib/legion/cli/lex/templates/base/lex.erb +0 -0
  37. data/lib/legion/cli/lex/templates/base/lex_spec.erb +0 -0
  38. data/lib/legion/cli/lex/templates/base/lic.erb +1 -1
  39. data/lib/legion/cli/lex/templates/base/readme.md.erb +0 -0
  40. data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +1 -0
  41. data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +0 -0
  42. data/lib/legion/cli/lex/templates/base/version.erb +1 -1
  43. data/lib/legion/cli/lex/templates/exchange.erb +0 -0
  44. data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
  45. data/lib/legion/cli/lex/templates/message.erb +0 -0
  46. data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
  47. data/lib/legion/cli/lex/templates/queue.erb +0 -0
  48. data/lib/legion/cli/lex/templates/queue_helper.erb +0 -0
  49. data/lib/legion/cli/lex/templates/queue_spec.erb +0 -0
  50. data/lib/legion/cli/lex/templates/runner.erb +0 -0
  51. data/lib/legion/cli/lex/templates/runner_spec.erb +0 -0
  52. data/lib/legion/cli/relationship.rb +0 -0
  53. data/lib/legion/cli/task.rb +0 -0
  54. data/lib/legion/cli/trigger.rb +2 -2
  55. data/lib/legion/cli/version.rb +0 -0
  56. data/lib/legion/cli.rb +0 -0
  57. data/lib/legion/extensions/actors/base.rb +0 -0
  58. data/lib/legion/extensions/actors/defaults.rb +28 -0
  59. data/lib/legion/extensions/actors/every.rb +0 -0
  60. data/lib/legion/extensions/actors/loop.rb +0 -0
  61. data/lib/legion/extensions/actors/nothing.rb +0 -0
  62. data/lib/legion/extensions/actors/once.rb +4 -4
  63. data/lib/legion/extensions/actors/poll.rb +0 -0
  64. data/lib/legion/extensions/actors/subscription.rb +0 -0
  65. data/lib/legion/extensions/builders/actors.rb +0 -0
  66. data/lib/legion/extensions/builders/base.rb +1 -1
  67. data/lib/legion/extensions/builders/helpers.rb +0 -0
  68. data/lib/legion/extensions/builders/runners.rb +4 -0
  69. data/lib/legion/extensions/core.rb +1 -1
  70. data/lib/legion/extensions/data/migrator.rb +7 -1
  71. data/lib/legion/extensions/data/model.rb +0 -0
  72. data/lib/legion/extensions/data.rb +4 -1
  73. data/lib/legion/extensions/helpers/base.rb +0 -0
  74. data/lib/legion/extensions/helpers/cache.rb +0 -0
  75. data/lib/legion/extensions/helpers/core.rb +0 -0
  76. data/lib/legion/extensions/helpers/data.rb +0 -0
  77. data/lib/legion/extensions/helpers/lex.rb +0 -0
  78. data/lib/legion/extensions/helpers/logger.rb +0 -0
  79. data/lib/legion/extensions/helpers/task.rb +2 -2
  80. data/lib/legion/extensions/helpers/transport.rb +0 -0
  81. data/lib/legion/extensions/transport.rb +1 -1
  82. data/lib/legion/extensions.rb +11 -1
  83. data/lib/legion/lex.rb +26 -3
  84. data/lib/legion/runner/log.rb +0 -0
  85. data/lib/legion/runner/status.rb +0 -0
  86. data/lib/legion/runner.rb +8 -6
  87. data/lib/legion/service.rb +5 -5
  88. data/lib/legion/version.rb +1 -1
  89. data/lib/legion.rb +0 -1
  90. data/sourcehawk.yml +4 -0
  91. metadata +42 -267
  92. data/.circleci/config.yml +0 -136
  93. data/.rspec +0 -2
  94. data/LICENSE.txt +0 -21
  95. data/Rakefile +0 -32
  96. data/bitbucket-pipelines.yml +0 -19
  97. data/lib/legion/cli/lex/templates/base/rakefile.erb +0 -6
data/legionio.gemspec CHANGED
@@ -10,22 +10,29 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['Esity']
11
11
  spec.email = ['matthewdiverson@gmail.com']
12
12
 
13
- spec.summary = 'Legion Core Software to string it all together'
14
- spec.description = 'Legion Core runs Legion Framwork'
15
- spec.homepage = 'https://bitbucket.org/legion-io/legion/'
16
- spec.metadata['source_code_uri'] = 'https://bitbucket.org/legion-io/legion/src/master/'
17
- spec.metadata['documentation_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEGION/overview'
18
- spec.metadata['bug_tracker_uri'] = 'https://legionio.atlassian.net/browse/LEG'
19
- spec.license = 'MIT'
13
+ spec.summary = 'The primary gem to run the LegionIO Framework'
14
+ spec.description = 'LegionIO is an extensible framework for running, scheduling and building relationships of tasks in a concurrent matter'
15
+ spec.homepage = 'https://github.com/Optum/LegionIO'
16
+ spec.license = 'Apache-2.0'
17
+ spec.require_paths = ['lib']
20
18
  spec.required_ruby_version = '>= 2.5.0'
21
19
 
20
+ spec.metadata = {
21
+ 'bug_tracker_uri' => 'https://github.com/Optum/LegionIO/issues',
22
+ 'changelog_uri' => 'https://github.com/Optum/LegionIO/src/main/CHANGELOG.md',
23
+ 'documentation_uri' => 'https://github.com/Optum/LegionIO',
24
+ 'homepage_uri' => 'https://github.com/Optum/LegionIO',
25
+ 'source_code_uri' => 'https://github.com/Optum/LegionIO',
26
+ 'wiki_uri' => 'https://github.com/Optum/LegionIO'
27
+ }
28
+
22
29
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
30
  f.match(%r{^(test|spec|features)/})
24
31
  end
32
+ spec.test_files = spec.files.select { |p| p =~ %r{^test/.*_test.rb} }
25
33
 
26
34
  spec.bindir = 'exe'
27
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ['lib']
29
36
 
30
37
  spec.add_dependency 'concurrent-ruby', '>= 1.1.7'
31
38
  spec.add_dependency 'concurrent-ruby-ext', '>= 1.1.7'
@@ -33,32 +40,14 @@ Gem::Specification.new do |spec|
33
40
  spec.add_dependency 'oj', '>= 3.10'
34
41
  spec.add_dependency 'thor', '>= 1'
35
42
 
36
- spec.add_dependency 'legion-cache'
43
+ spec.add_dependency 'legion-cache', '>= 0.2.0'
37
44
  spec.add_dependency 'legion-crypt', '>= 0.2.0'
38
- spec.add_dependency 'legion-exceptions'
39
- spec.add_dependency 'legion-json'
40
- spec.add_dependency 'legion-logging'
41
- spec.add_dependency 'legion-settings'
42
- spec.add_dependency 'legion-transport', '>= 1.1.8'
45
+ spec.add_dependency 'legion-json', '>= 0.2.0'
46
+ spec.add_dependency 'legion-logging', '>= 0.2.0'
47
+ spec.add_dependency 'legion-settings', '>= 0.2.0'
48
+ spec.add_dependency 'legion-transport', '>= 1.1.9'
43
49
 
44
50
  spec.add_dependency 'lex-node'
45
51
 
46
- spec.add_development_dependency 'codecov'
47
52
  spec.add_development_dependency 'legion-data'
48
- spec.add_development_dependency 'rake'
49
- spec.add_development_dependency 'rspec'
50
- spec.add_development_dependency 'rspec_junit_formatter'
51
- spec.add_development_dependency 'rubocop'
52
- spec.add_development_dependency 'rubocop-rake'
53
- spec.add_development_dependency 'rubocop-rspec'
54
- spec.add_development_dependency 'simplecov'
55
-
56
- spec.add_development_dependency 'lex-conditioner'
57
- spec.add_development_dependency 'lex-health'
58
- spec.add_development_dependency 'lex-http'
59
- spec.add_development_dependency 'lex-lex'
60
- spec.add_development_dependency 'lex-log'
61
- spec.add_development_dependency 'lex-scheduler'
62
- spec.add_development_dependency 'lex-tasker'
63
- spec.add_development_dependency 'lex-transformer'
64
53
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ FROM legionio/legion:latest
2
+ LABEL maintainer="Matthew Iverson <matthewdiverson@gmail.com>"
3
+
4
+ RUN gem install lex-<%= config[:lex] %> legion-data --no-document --no-prerelease
5
+ CMD ruby $(which legionio)
@@ -1,3 +1,10 @@
1
1
  source 'https://rubygems.org'
2
-
3
2
  gemspec
3
+
4
+ group :test do
5
+ gem 'rake'
6
+ gem 'rspec'
7
+ gem 'rspec_junit_formatter'
8
+ gem 'rubocop'
9
+ gem 'simplecov'
10
+ end
@@ -3,24 +3,22 @@ require_relative 'lib/legion/extensions/<%= config[:lex] %>/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'lex-<%= config[:lex] %>'
5
5
  spec.version = Legion::Extensions::<%= config[:class_name] %>::VERSION
6
- spec.authors = ['Esity']
7
- spec.email = ['matthewdiverson@gmail.com']
6
+ spec.authors = []
7
+ spec.email = []
8
8
 
9
9
  spec.summary = 'LEX::<%= config[:class_name] %>'
10
10
  spec.description = 'Connects Legion to <%= config[:class_name] %>'
11
- spec.homepage = 'https://bitbucket.org/legion-io/lex-<%= config[:lex] %>'
11
+ spec.homepage = 'https://github.com/LegionIO/lex-<%= config[:lex] %>'
12
12
  spec.license = 'MIT'
13
13
  spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
14
14
 
15
15
  spec.metadata['homepage_uri'] = spec.homepage
16
- spec.metadata['source_code_uri'] = 'https://bitbucket.org/legion-io/lex-<%= config[:lex] %>/src'
17
- spec.metadata['documentation_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/'
18
- spec.metadata['changelog_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/'
19
- spec.metadata['bug_tracker_uri'] = 'https://bitbucket.org/legion-io/lex-<%= config[:lex] %>/issues'
16
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-<%= config[:lex] %>/src'
17
+ spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-<%= config[:lex] %>/wiki'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-<%= config[:lex] %>'
19
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-<%= config[:lex] %>'
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
21
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ end
20
23
  spec.require_paths = ['lib']
21
-
22
- spec.add_development_dependency 'rake'
23
- spec.add_development_dependency 'rspec'
24
- spec.add_development_dependency 'rubocop'
25
- spec.add_development_dependency 'simplecov'
26
24
  end
@@ -0,0 +1,23 @@
1
+ name: RSpec
2
+ on: [push, pull_request]
3
+
4
+ jobs:
5
+ rspec:
6
+ strategy:
7
+ fail-fast: false
8
+ matrix:
9
+ os: [ubuntu-latest]
10
+ ruby: [2.7]
11
+ runs-on: ${{ matrix.os }}
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: ${{ matrix.ruby }}
17
+ bundler-cache: true
18
+ - name: RSpec run
19
+ run: |
20
+ bash -c "
21
+ bundle exec rspec
22
+ [[ $? -ne 2 ]]
23
+ "
@@ -0,0 +1,28 @@
1
+ name: Rubocop
2
+ on: [push, pull_request]
3
+ jobs:
4
+ rubocop:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ os: [ubuntu-latest]
9
+ ruby: [2.7]
10
+ runs-on: ${{ matrix.os }}
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: ${{ matrix.ruby }}
16
+ bundler-cache: true
17
+ - name: Install Rubocop
18
+ run: gem install rubocop code-scanning-rubocop
19
+ - name: Rubocop run --no-doc
20
+ run: |
21
+ bash -c "
22
+ rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
23
+ [[ $? -ne 2 ]]
24
+ "
25
+ - name: Upload Sarif output
26
+ uses: github/codeql-action/upload-sarif@v1
27
+ with:
28
+ sarif_file: rubocop.sarif
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Esity
3
+ Copyright (c) 2021
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
File without changes
@@ -9,6 +9,7 @@ Style/Documentation:
9
9
  AllCops:
10
10
  TargetRubyVersion: 2.5
11
11
  NewCops: enable
12
+ SuggestExtensions: false
12
13
  Style/FrozenStringLiteralComment:
13
14
  Enabled: false
14
15
  Naming/FileName:
File without changes
@@ -1,7 +1,7 @@
1
1
  module Legion
2
2
  module Extensions
3
3
  module <%= config[:class_name] %>
4
- VERSION = '0.1.1'.freeze
4
+ VERSION = '0.1.0'.freeze
5
5
  end
6
6
  end
7
7
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -65,7 +65,7 @@ module Legion
65
65
 
66
66
  status = options[:delay].zero? ? 'task.queued' : 'task.delayed'
67
67
  task = generate_task_id(function_id: trigger_function.values[:id], status: status, runner_id: trigger_runner.values[:id], args: payload,
68
- delay: options[:delay])
68
+ delay: options[:delay])
69
69
 
70
70
  unless options[:delay].zero?
71
71
  say "Task: #{task[:task_id]} is queued and will be run in #{options[:delay]}s"
@@ -74,7 +74,7 @@ delay: options[:delay])
74
74
 
75
75
  routing_key = "#{trigger_extension.values[:exchange]}.#{trigger_runner.values[:queue]}.#{trigger_function.values[:name]}"
76
76
  exchange = Legion::Transport::Messages::Dynamic.new(function: trigger_function.values[:name], function_id: trigger_function.values[:id],
77
- routing_key: routing_key, args: payload)
77
+ routing_key: routing_key, args: payload)
78
78
  exchange.options[:task_id] = task[:task_id]
79
79
  exchange.publish if options[:delay].zero?
80
80
 
File without changes
data/lib/legion/cli.rb CHANGED
File without changes
File without changes
@@ -0,0 +1,28 @@
1
+ module Legion
2
+ module Extensions
3
+ module Actors
4
+ module Defaults
5
+ def use_runner?
6
+ true
7
+ end
8
+ # module_function :use_runner?
9
+
10
+ def check_subtask?
11
+ true
12
+ end
13
+ # module_function :check_subtask?
14
+
15
+ def generate_task?
16
+ false
17
+ end
18
+ # module_function :generate_task?
19
+
20
+ def enabled?
21
+ true
22
+ end
23
+ # module_function :enabled?
24
+ # extend self
25
+ end
26
+ end
27
+ end
28
+ end
File without changes
File without changes
File without changes
@@ -7,18 +7,18 @@ module Legion
7
7
  include Legion::Extensions::Actors::Base
8
8
 
9
9
  def initialize
10
- return if disabled?
10
+ return unless enabled?
11
11
 
12
12
  if respond_to? :functions
13
13
  functions.each do
14
14
  function
15
15
  @task = Concurrent::ScheduledTask.execute(delay) do
16
- use_runner ? runner : manual
16
+ use_runner? ? runner : manual
17
17
  end
18
18
  end
19
19
  else
20
20
  @task = Concurrent::ScheduledTask.execute(delay) do
21
- use_runner ? runner : manual
21
+ use_runner? ? runner : manual
22
22
  end
23
23
  end
24
24
  rescue StandardError => e
@@ -30,7 +30,7 @@ module Legion
30
30
  end
31
31
 
32
32
  def cancel
33
- return if disabled?
33
+ return unless enabled?
34
34
 
35
35
  @task.cancel unless @task.cancelled?
36
36
  end
File without changes
File without changes
File without changes
@@ -21,7 +21,7 @@ module Legion
21
21
  end
22
22
 
23
23
  def define_constant_two(item, root: Kernel, type: Module)
24
- return true if const_defined?(item, root: root)
24
+ return true if root.const_defined?(item)
25
25
 
26
26
  root.const_set(item.to_s, type.new)
27
27
  end
File without changes
@@ -31,6 +31,8 @@ module Legion
31
31
  class_methods: {}
32
32
  }
33
33
 
34
+ @runners[runner_name.to_sym][:scheduled_tasks] = loaded_runner.scheduled_tasks if loaded_runner.method_defined? :scheduled_tasks
35
+
34
36
  if settings.key?(:runners) && settings[:runners].key?(runner_name.to_sym)
35
37
  @runners[runner_name.to_sym][:desc] = settings[:runners][runner_name.to_sym][:desc]
36
38
  end
@@ -42,6 +44,8 @@ module Legion
42
44
  end
43
45
 
44
46
  loaded_runner.methods(false).each do |runner_method|
47
+ next if %i[scheduled_tasks runner_description].include? runner_method
48
+
45
49
  @runners[runner_name.to_sym][:class_methods][runner_method] = {
46
50
  args: loaded_runner.method(runner_method).parameters
47
51
  }
@@ -84,7 +84,7 @@ module Legion
84
84
  end
85
85
  end
86
86
 
87
- def build_settings # rubocop:disable Metrics/AbcSize
87
+ def build_settings
88
88
  if Legion::Settings[:extensions].key?(lex_name.to_sym)
89
89
  Legion::Settings[:default_extension_settings].each do |key, value|
90
90
  Legion::Settings[:extensions][lex_name.to_sym][key.to_sym] = if Legion::Settings[:extensions][lex_name.to_sym].key?(key.to_sym)
@@ -4,9 +4,11 @@ module Legion
4
4
  module Extensions
5
5
  module Data
6
6
  class Migrator < Sequel::IntegerMigrator
7
- def initialize(path, extension, **)
7
+ def initialize(path, extension, lex_name, **)
8
8
  @path = path
9
9
  @extension = extension
10
+ @lex_name = lex_name
11
+ schema_dataset
10
12
  super(Legion::Data::Connection.sequel, path)
11
13
  end
12
14
 
@@ -19,6 +21,10 @@ module Legion
19
21
  end
20
22
 
21
23
  def schema_dataset
24
+ dataset = Legion::Data::Connection.sequel.from(default_schema_table).where(namespace: @extension)
25
+ return dataset if dataset.count.positive?
26
+
27
+ Legion::Data::Model::Extension.insert(active: 1, namespace: @extension, name: @lex_name)
22
28
  Legion::Data::Connection.sequel.from(default_schema_table).where(namespace: @extension)
23
29
  end
24
30
  alias ds schema_dataset
File without changes
@@ -8,6 +8,7 @@ module Legion
8
8
  include Legion::Extensions::Helpers::Logger
9
9
 
10
10
  def build
11
+ Legion::Logging.fatal 'testing inside run'
11
12
  @models = []
12
13
  @migrations = []
13
14
  if Dir[File.expand_path("#{data_path}/migrations/*.rb")].count.positive?
@@ -43,10 +44,12 @@ module Legion
43
44
  end
44
45
 
45
46
  def migrate_class
46
- @migrate_class ||= Legion::Extensions::Data::Migrator.new(migrations_path, lex_class.to_s)
47
+ @migrate_class ||= Legion::Extensions::Data::Migrator.new(migrations_path, lex_class.to_s, lex_name)
47
48
  end
48
49
 
49
50
  def run
51
+ Legion::Logging.fatal 'testing inside run'
52
+
50
53
  return true if migrate_class.is_current?
51
54
 
52
55
  log.debug('Running LEX schema migrator')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -20,11 +20,11 @@ module Legion
20
20
  Legion::Transport::Messages::TaskLog.new(task_id: task_id, runner_class: runner_class, function: function, entry: payload).publish
21
21
  end
22
22
 
23
- def task_update(task_id, status, **opts)
23
+ def task_update(task_id, status, use_database: true, **opts)
24
24
  return if task_id.nil? || status.nil?
25
25
 
26
26
  begin
27
- if Legion::Settings[:data][:connected]
27
+ if Legion::Settings[:data][:connected] && use_database
28
28
  task = Legion::Data::Model::Task[task_id]
29
29
  task.update(status: status)
30
30
  return true
File without changes
@@ -34,7 +34,7 @@ module Legion
34
34
  end
35
35
 
36
36
  def require_transport_items
37
- { 'exchanges': @exchanges, 'queues': @queues, 'consumers': @consumers, 'messages': @messages }.each do |item, obj|
37
+ { exchanges: @exchanges, queues: @queues, consumers: @consumers, messages: @messages }.each do |item, obj|
38
38
  Dir[File.expand_path("#{transport_path}/#{item}/*.rb")].sort.each do |file|
39
39
  require file
40
40
  file_name = file.to_s.split('/').last.split('.').first
@@ -59,10 +59,15 @@ module Legion
59
59
  Legion::Logging.info "#{@extensions.count} extensions loaded with subscription:#{@subscription_tasks.count},every:#{@timer_tasks.count},poll:#{@poll_tasks.count},once:#{@once_tasks.count},loop:#{@loop_tasks.count}"
60
60
  end
61
61
 
62
- def load_extension(extension, values)
62
+ def load_extension(extension, values) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize
63
63
  return unless gem_load(values[:gem_name], extension)
64
64
 
65
65
  extension = Kernel.const_get(values[:extension_class])
66
+ extension.extend Legion::Extensions::Core unless extension.singleton_class.included_modules.include? Legion::Extensions::Core
67
+
68
+ min_version = Legion::Settings[:extensions][values[:extension_name]][:min_version] || nil
69
+ Legion::Logging.fatal values if min_version.is_a?(String) && Gem::Version.new(values[:version]) >= Gem::Version.new(min_version)
70
+
66
71
  if extension.data_required? && Legion::Settings[:data][:connected] == false
67
72
  Legion::Logging.warn "#{values[:extension_name]} requires Legion::Data but isn't enabled, skipping"
68
73
  return false
@@ -73,6 +78,11 @@ module Legion
73
78
  return false
74
79
  end
75
80
 
81
+ if extension.crypt_required? && Legion::Settings[:crypt][:cs].nil?
82
+ Legion::Logging.warn "#{values[:extension_name]} requires Legion::Crypt but isn't ready, skipping"
83
+ return false
84
+ end
85
+
76
86
  if extension.vault_required? && Legion::Settings[:crypt][:vault][:connected] == false
77
87
  Legion::Logging.warn "#{values[:extension_name]} requires Legion::Crypt::Vault but isn't enabled, skipping"
78
88
  return false
data/lib/legion/lex.rb CHANGED
@@ -63,16 +63,17 @@ module Legion
63
63
  template('cli/lex/templates/base/gemspec.erb', "#{filename}/#{filename}.gemspec", vars)
64
64
  template('cli/lex/templates/base/gemfile.erb', "#{filename}/Gemfile", vars)
65
65
  template('cli/lex/templates/base/gitignore.erb', "#{filename}/.gitignore", vars)
66
- template('cli/lex/templates/base/lic.erb', "#{filename}/LICENSE.txt", vars)
67
- template('cli/lex/templates/base/rakefile.erb', "#{filename}/Rakefile", vars)
66
+ template('cli/lex/templates/base/lic.erb', "#{filename}/LICENSE", vars)
68
67
  template('cli/lex/templates/base/rubocop.yml.erb', "#{filename}/.rubocop.yml", vars)
69
68
  template('cli/lex/templates/base/readme.md.erb', "#{filename}/README.md", **vars)
70
69
  template('cli/lex/templates/base/lex.erb', "#{filename}/lib/legion/extensions/#{name}.rb", vars)
71
70
  template('cli/lex/templates/base/version.erb', "#{filename}/lib/legion/extensions/#{name}/version.rb", vars)
72
- template('cli/lex/templates/base/bitbucket.yml.erb', "#{filename}/bitbucket-pipelines.yml", vars) if options[:pipeline]
73
71
  template('cli/lex/templates/base/spec_helper.rb.erb', "#{filename}/spec/spec_helper.rb", vars)
74
72
  template('cli/lex/templates/base/lex_spec.erb', "#{filename}/spec/legion/#{name}_spec.rb", vars)
75
73
 
74
+ template('cli/lex/templates/base/github_rspec.yml.erb', "#{filename}/.github/workflows/rspec.yml", vars)
75
+ template('cli/lex/templates/base/github_rubocop.yml.erb', "#{filename}/.github/workflows/rubocop.yml", vars)
76
+
76
77
  return if !options[:git_init] && !options[:bundle_install]
77
78
 
78
79
  run("cd lex_gen-#{filename}")
@@ -84,6 +85,28 @@ module Legion
84
85
 
85
86
  run('bundle update') if options[:bundle_install]
86
87
  end
88
+
89
+ method_option github: true
90
+ method_option rubygems: true
91
+ method_option docker: true
92
+ desc 'deploy a lex to multiple places', 'deploys a lex'
93
+ def deploy
94
+ system 'gem build'
95
+ if options[:github_gem]
96
+ system "gh release create v#{version} '#{long_name}-#{version}.gem'"
97
+ system 'gh release create v1.1.1 lex-node-1.1.1.gem -n v1.1.1 -t v1.1.1'
98
+ system "gem push --key github --host https://rubygems.pkg.github.com/LegionIO"
99
+ end
100
+
101
+ if options[:rubygems]
102
+ system "gem push .gem"
103
+ end
104
+
105
+ if options[:docker]
106
+
107
+ end
108
+
109
+ end
87
110
  end
88
111
  end
89
112
  end
File without changes
File without changes