avm 0.90.1 → 0.92.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df9c4437aefbdf73bfb8400b858046e1fe62d016f2a34f59e7dd9a5e73242048
4
- data.tar.gz: ad8db14ba70cafa75e13d8b12b3ff0b4c3b0ae041ba00e650671809610118068
3
+ metadata.gz: 15b1096b5fdec594a25fe5197312d72392f7e46fece8012263421f80f2d827a4
4
+ data.tar.gz: 49250daa335c7484229ad130bcb978133a0891bd7b9d41793ae20b8f85668e39
5
5
  SHA512:
6
- metadata.gz: 4746c4276ceddd25671695ccf8e52109c5817018dab1130919b7f7261f9e645e59e93ad5307dee32dc370d8dbc66592df5a98e46db4145aa81decfeea0f44dbe
7
- data.tar.gz: 5c135e4dbbd75af455e2330b14660bedc236233805cbe181c415ace85f4f31c9727b817eb1d59b616501e0b87d59a73cef8529cb44b6f06bd605608448d68dc4
6
+ metadata.gz: fc2292dc7acbfbdef138d2e8a8c97e87f96f2e4947669c11f399f1fd3ab45b73f2808e43d29a9ed5fe24f320b61bf26876b7333cb9d1fd2c6ae50254ac2957d8
7
+ data.tar.gz: 937555ba04232ed2364767d3420ccf4046096e5edeacfb378bb728afc7b296601ca97c94e739fd4fc7246dc306482af4980bb1a6cd0227cfa24ef2dc15cd59f6
@@ -10,7 +10,7 @@ module Avm
10
10
  module LocalSource
11
11
  # @return [Pathname]
12
12
  def local_source_path
13
- (local_source_path_entry.value || auto_local_source_path).to_pathname
13
+ user_local_source_path || auto_local_source_path
14
14
  end
15
15
 
16
16
  # @return [EacConfig::Entry]
@@ -18,6 +18,11 @@ module Avm
18
18
  ::EacConfig::Node.context.current.entry([local_instance_id, 'install', 'path'])
19
19
  end
20
20
 
21
+ # @return [Path, nil]
22
+ def user_local_source_path
23
+ local_source_path_entry.value.if_present(&:to_pathname)
24
+ end
25
+
21
26
  private
22
27
 
23
28
  # @return [Avm::Sources::Base]
@@ -7,6 +7,7 @@ module Avm
7
7
  module Docker
8
8
  class Runner
9
9
  DOCKER_DEFAULT_REGISTRY_METHOD = :docker_default_registry
10
+ DOCKER_DEFAULT_REGISTRY_NAME = 'local'
10
11
 
11
12
  enable_speaker
12
13
  enable_simple_cache
@@ -33,6 +34,11 @@ module Avm
33
34
  container_run
34
35
  end
35
36
 
37
+ # @return [EacDocker::Registry, nil]
38
+ def docker_default_registry
39
+ ::EacDocker::Registry.new(default_docker_registry_name)
40
+ end
41
+
36
42
  private
37
43
 
38
44
  def setup
@@ -65,6 +71,11 @@ module Avm
65
71
  instance.docker_container
66
72
  end
67
73
 
74
+ # @return [String]
75
+ def default_docker_registry_name
76
+ DOCKER_DEFAULT_REGISTRY_NAME
77
+ end
78
+
68
79
  def docker_image
69
80
  instance.docker_image
70
81
  end
@@ -18,8 +18,8 @@ module Avm
18
18
  instance.data_default_dump_path.to_pathname
19
19
  end
20
20
 
21
- def load(*args, &block)
22
- instance.on_disabled_processes { super(*args, &block) }
21
+ def load(...)
22
+ instance.on_disabled_processes { super }
23
23
  end
24
24
  end
25
25
  end
@@ -21,8 +21,8 @@ module Avm
21
21
  instance.data_package.units.key(self) || raise("No identifier found for #{self}")
22
22
  end
23
23
 
24
- def load(*args, &block)
25
- instance.on_disabled_processes { super(*args, &block) }
24
+ def load(...)
25
+ instance.on_disabled_processes { super }
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby-progressbar'
4
+ require 'avm/launcher/instances/base'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module Launcher
9
+ class Context
10
+ class InstanceDiscovery
11
+ class RootInstancePaths
12
+ acts_as_instance_method
13
+ enable_speaker
14
+
15
+ common_constructor :owner
16
+
17
+ # @return [Array<Avm::Launcher::Paths::Logical>]
18
+ def result
19
+ application_user_local_source_paths.map do |path|
20
+ ::Avm::Launcher::Paths::Logical.new(owner.context, nil, path.to_path,
21
+ "/#{path.basename}")
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ # @param application [Avm::Applications::Base]
28
+ # @return [Pathname, nil]
29
+ def application_user_local_source_path(application) # rubocop:disable Metrics/MethodLength
30
+ if application.user_local_source_path.blank?
31
+ warn "Application \"#{application}\" does not have a user local source set"
32
+ nil
33
+ elsif application.user_local_source_path.directory?
34
+ infov application,
35
+ "user local source found in \"#{application.user_local_source_path}"
36
+ application.user_local_source_path
37
+ else
38
+ warn "Application \"#{application}\"'s local source path is not a directory"
39
+ nil
40
+ end
41
+ end
42
+
43
+ # @return [Array<Pathname>]
44
+ def application_user_local_source_paths
45
+ ::Avm::Registry.applications.available.sort_by { |a| [a.id] }.map do |application|
46
+ application_user_local_source_path(application)
47
+ end.compact_blank.uniq.sort
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -2,23 +2,34 @@
2
2
 
3
3
  require 'ruby-progressbar'
4
4
  require 'avm/launcher/instances/base'
5
+ require 'eac_ruby_utils/core_ext'
5
6
 
6
7
  module Avm
7
8
  module Launcher
8
9
  class Context
9
10
  class InstanceDiscovery
10
- attr_reader :instances
11
+ enable_simple_cache
11
12
 
12
- def initialize(context)
13
- @context = context
13
+ # @!method instances
14
+ # @return [Array<Avm::Launcher::Instances::Base>]
15
+
16
+ # @!method initialize(context)
17
+ # @param context [Avm::Launcher::Context]
18
+ common_constructor :context
19
+
20
+ private
21
+
22
+ # @return [Array<Avm::Launcher::Instances::Base>]
23
+ def instances_uncached
14
24
  @progress = ::ProgressBar.create(title: 'Instance discovery', total: 1)
15
- @instances = path_instances(@context.root, nil)
25
+ root_instance_paths.flat_map { |path| path_instances(path, nil) }
16
26
  ensure
17
27
  @progress&.finish
18
28
  end
19
29
 
20
- private
21
-
30
+ # @param path [Avm::Launcher::Paths::Logical]
31
+ # @param parent_instance [Avm::Launcher::Instances::Base]
32
+ # @return [Array<Avm::Launcher::Instances::Base>]
22
33
  def path_instances(path, parent_instance)
23
34
  update_progress_format(path)
24
35
  on_rescued_path_instances(path) do |r|
@@ -32,6 +43,8 @@ module Avm
32
43
  end
33
44
  end
34
45
 
46
+ # @param path [Avm::Launcher::Paths::Logical]
47
+ # @return [Array<Avm::Launcher::Instances::Base>]
35
48
  def on_rescued_path_instances(path)
36
49
  r = []
37
50
  begin
@@ -42,14 +55,20 @@ module Avm
42
55
  r
43
56
  end
44
57
 
58
+ # @param path [Avm::Launcher::Paths::Logical]
59
+ # @return [void]
45
60
  def update_progress_format(path)
46
61
  @progress.format = "%t (Paths: %c/%C, Current: #{path.logical}) |%B| %a"
47
62
  end
48
63
 
64
+ # @param path [Array<Avm::Launcher::Paths::Logical>]
65
+ # @return [void]
49
66
  def update_progress_count(children)
50
67
  @progress.total += children.count
51
68
  @progress.increment
52
69
  end
70
+
71
+ require_sub __FILE__, require_mode: :kernel
53
72
  end
54
73
  end
55
74
  end
@@ -29,14 +29,14 @@ module Avm
29
29
  end
30
30
  end
31
31
 
32
- attr_reader :root, :settings, :cache_root
32
+ attr_reader :settings, :cache_root
33
33
  attr_accessor :publish_options, :recache, :instance_manager
34
34
 
35
35
  CONFIG_PATH_PREFIX = 'launcher'
36
+ FS_OBJECT_ID = 'unique'
36
37
 
37
38
  def initialize(options = {})
38
39
  @options = options.with_indifferent_access
39
- @root = ::Avm::Launcher::Paths::Logical.new(self, nil, build_option(:projects_root), '/')
40
40
  @settings = ::Avm::Launcher::Context::Settings.new(build_option(:settings_file))
41
41
  @cache_root = build_option(:cache_root)
42
42
  @publish_options = { new: false, confirm: false, stereotype: nil }
@@ -45,7 +45,7 @@ module Avm
45
45
  end
46
46
 
47
47
  def fs_object_id
48
- root.real.variableize
48
+ FS_OBJECT_ID
49
49
  end
50
50
 
51
51
  def instance(name)
@@ -7,7 +7,7 @@ module Avm
7
7
  def initialize(path)
8
8
  raise "Argument path is not a string: \"#{path}\"|#{path.class}" unless path.is_a?(String)
9
9
 
10
- super(path)
10
+ super
11
11
  end
12
12
 
13
13
  def subpath(relative_path)
@@ -8,7 +8,8 @@ module Avm
8
8
  module Setup
9
9
  require_sub __FILE__
10
10
  EXAMPLES = %w[avm_file_formats_with_fixtures avm_file_format_file_resource_name
11
- avm_source_generated entries_values in_avm_registry not_in_avm_registry].freeze
11
+ avm_source_generated entries_values in_avm_registry not_in_avm_registry
12
+ with_config].freeze
12
13
 
13
14
  def self.extended(obj)
14
15
  obj.setup_examples
@@ -4,15 +4,18 @@ require 'eac_fs/comparator'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  RSpec.shared_examples 'avm_source_generated' do |spec_file, stereotype, options = {}|
7
- fixtures_dir = Pathname.new('base_spec_files').expand_path(File.dirname(spec_file))
7
+ include_context 'spec_paths', spec_file
8
+ block_on_each_source = options.delete(:block_on_each_source)
8
9
 
9
- fixtures_dir.children.select(&:directory?).each do |target_dir|
10
+ spec_paths_controller.fixtures_directory.children.select(&:directory?).each do |target_dir|
10
11
  context "when target is \"#{target_dir.basename}\"" do
11
12
  let(:source) { avm_source(stereotype, options.merge(target_basename: target_dir.basename)) }
12
13
 
13
14
  it do
14
15
  expect(fs_comparator.build(source.path)).to eq(fs_comparator.build(target_dir))
15
16
  end
17
+
18
+ instance_exec(&block_on_each_source) if block_on_each_source
16
19
  end
17
20
  end
18
21
 
@@ -4,9 +4,7 @@ require 'eac_ruby_utils/core_ext'
4
4
 
5
5
  RSpec.shared_examples 'entries_values' do |spec_file, expected_values|
6
6
  describe '#read_entry' do
7
- config_path = spec_file.to_pathname
8
- config_path = config_path.dirname.join("#{config_path.basename_noext}_files", 'config.yml')
9
- EacRubyUtils::Rspec.default_setup.stub_eac_config_node(self, config_path)
7
+ include_examples 'with_config', spec_file
10
8
 
11
9
  expected_values.each do |instance_id, values|
12
10
  values.each do |input, expected|
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ RSpec.shared_examples 'with_config' do |spec_file|
6
+ config_path = spec_file.to_pathname
7
+ config_path = config_path.dirname.join("#{config_path.basename_noext}_files", 'config.yml')
8
+ temp_config_path = EacRubyUtils::Fs::Temp.file
9
+ FileUtils.cp(config_path, temp_config_path)
10
+ EacRubyUtils::Rspec.default_setup.stub_eac_config_node(self, temp_config_path)
11
+ end
@@ -8,6 +8,8 @@ module Avm
8
8
  module SourceGenerators
9
9
  class Base
10
10
  acts_as_abstract
11
+ enable_settings_provider
12
+ enable_speaker
11
13
  include ::Avm::With::ApplicationStereotype
12
14
 
13
15
  class << self
@@ -17,19 +19,29 @@ module Avm
17
19
  end
18
20
  end
19
21
 
22
+ OPTION_NAME = 'name'
23
+ JOBS = [].freeze
24
+
20
25
  common_constructor :target_path, :options, default: [{}] do
21
26
  self.target_path = target_path.to_pathname
22
27
  self.options = option_list.validate(options)
23
28
  end
24
29
 
30
+ # @return [String]
31
+ def name
32
+ options[OPTION_NAME].if_present(target_path.basename.to_path)
33
+ end
34
+
25
35
  # @return [Avm::SourceGenerators::OptionList]
26
36
  def option_list
27
37
  self.class.option_list
28
38
  end
29
39
 
30
40
  def perform
41
+ start_banner
31
42
  assert_clear_directory
32
43
  apply_template
44
+ perform_jobs
33
45
  end
34
46
 
35
47
  def assert_clear_directory
@@ -38,7 +50,25 @@ module Avm
38
50
  end
39
51
 
40
52
  def apply_template
41
- template.apply(self, target_path)
53
+ root_template.apply(self, target_path)
54
+ end
55
+
56
+ def perform_jobs
57
+ setting_value(:jobs).each do |job|
58
+ infom "Generating #{job.humanize}..."
59
+ send("generate_#{job}")
60
+ end
61
+ end
62
+
63
+ # @return [void]
64
+ def start_banner
65
+ infov 'Target path', target_path
66
+ infov 'Application name', name
67
+ end
68
+
69
+ # @return [EacTemlates::Modules::Base]
70
+ def root_template
71
+ template
42
72
  end
43
73
  end
44
74
  end
data/lib/avm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.90.1'
4
+ VERSION = '0.92.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.90.1
4
+ version: 0.92.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-10 00:00:00.000000000 Z
11
+ date: 2024-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_cli
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.40'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.40.1
19
+ version: '0.41'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.40'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.40.1
26
+ version: '0.41'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: eac_config
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -84,34 +78,28 @@ dependencies:
84
78
  requirements:
85
79
  - - "~>"
86
80
  - !ruby/object:Gem::Version
87
- version: '0.121'
81
+ version: '0.122'
88
82
  type: :runtime
89
83
  prerelease: false
90
84
  version_requirements: !ruby/object:Gem::Requirement
91
85
  requirements:
92
86
  - - "~>"
93
87
  - !ruby/object:Gem::Version
94
- version: '0.121'
88
+ version: '0.122'
95
89
  - !ruby/object:Gem::Dependency
96
90
  name: eac_templates
97
91
  requirement: !ruby/object:Gem::Requirement
98
92
  requirements:
99
93
  - - "~>"
100
94
  - !ruby/object:Gem::Version
101
- version: '0.5'
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: 0.5.1
95
+ version: '0.7'
105
96
  type: :runtime
106
97
  prerelease: false
107
98
  version_requirements: !ruby/object:Gem::Requirement
108
99
  requirements:
109
100
  - - "~>"
110
101
  - !ruby/object:Gem::Version
111
- version: '0.5'
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: 0.5.1
102
+ version: '0.7'
115
103
  - !ruby/object:Gem::Dependency
116
104
  name: minitar
117
105
  requirement: !ruby/object:Gem::Requirement
@@ -284,6 +272,7 @@ files:
284
272
  - lib/avm/launcher/context.rb
285
273
  - lib/avm/launcher/context/instance_collector.rb
286
274
  - lib/avm/launcher/context/instance_discovery.rb
275
+ - lib/avm/launcher/context/instance_discovery/root_instance_paths.rb
287
276
  - lib/avm/launcher/context/instance_manager.rb
288
277
  - lib/avm/launcher/context/instance_manager/cached_instance.rb
289
278
  - lib/avm/launcher/context/instance_manager/cached_instances.rb
@@ -337,6 +326,7 @@ files:
337
326
  - lib/avm/rspec/shared_examples/entries_values.rb
338
327
  - lib/avm/rspec/shared_examples/in_avm_registry.rb
339
328
  - lib/avm/rspec/shared_examples/not_in_avm_registry.rb
329
+ - lib/avm/rspec/shared_examples/with_config.rb
340
330
  - lib/avm/runners/base.rb
341
331
  - lib/avm/scms.rb
342
332
  - lib/avm/scms/auto_commit.rb