monoz 0.3.0 → 0.4.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: 96e8da2c3502938a5ce98be2928ba50af5ebd1625b18f3fc38a93dcae90c54d7
4
- data.tar.gz: 4c74b8e036f21b2ee39b489cfffdac0b6879240458f9d4c403f5f770dac0b81d
3
+ metadata.gz: e73d1688f568042f98029b57b070f6541c3a19ba0ae206c7f89a3ecb60dda061
4
+ data.tar.gz: 3f9a57bfc7abacf3bf67783e713d3e92bcc6bea586c0c8c53b1b298c3ecfc990
5
5
  SHA512:
6
- metadata.gz: e0f87d4586b4609fbdef8cc14f87949b9de57fabe6adec1fe3f9a5f0521855865ff7b346a6742a842df11a73ae42b2cabf96c817203b52ad0f452ae33895f2e7
7
- data.tar.gz: 3056c87d2d821dc1b940191bc65b40c8984c3e36446a64a4b0dc0881abf3e43d1bcf83015681f32b1fb1d0e18748d0c3f37b1b12fb1d933fefa6c7e2a027bc6a
6
+ metadata.gz: 4d5a0d391b17475e9a5d0a05a1bacf8815d5f8d23ed79608dabd1fd31c4df491dad9fa0f33c9ae058e69ffaaa1138a4c0def0cb4e5e1a752ff13281822191fd0
7
+ data.tar.gz: ae0449a70ae6c4b0a8474fd4d80fc8d39e26c4316b2a6191eccf16e3a6dc55bbc310902db0a0fae04423d35ca3421b8f016e3594dcb8a72df07b585c03483d26
data/README.md CHANGED
@@ -57,6 +57,13 @@ To bundle all the projects in the Monoz repository, simply run:
57
57
 
58
58
  ```console
59
59
  $ monoz bundle
60
+
61
+ kiqr_core: bundle ✓
62
+ content_api: bundle ✓
63
+ core_api: bundle ✓
64
+ kiqr_cloud: bundle ✓
65
+
66
+ The command ran successfully in all projects without any errors.
60
67
  ```
61
68
 
62
69
  If you instead want to update the dependencies of your projects, you can use the `monoz bundle update` command. This command will update the `Gemfile.lock` file of each project based on the latest available versions of their dependencies.
@@ -71,27 +78,108 @@ Note that when you add a new dependency to a project, you'll need to run `monoz
71
78
 
72
79
  #### Run other bundler commands
73
80
 
74
- You can also run other bundler commands on all projects in the repository using the `monoz bundle` command followed by the desired arguments. For example, to run the RSpec tests for all projects, you can use the following command:
81
+ You can also run other bundler commands on all projects in the repository using the `monoz bundle` command followed by the desired arguments. For example, to run Rubocop tests in all projects, you can use the following command:
75
82
 
76
83
  ```console
77
- $ monoz bundle exec rspec
84
+ $ monoz bundle exec rubocop
85
+
86
+ kiqr_core: bundle exec rubocop ✓
87
+ content_api: bundle exec rubocop ✗
88
+ Configuration file not found: /some/path/.rubocop.yml
78
89
 
79
- [kiqr_core] bundle exec rspec
80
- [core_api] bundle exec rspec
81
- [content_api] bundle exec rspec
82
- [kiqr_cloud] bundle exec rspec
90
+ core_api: bundle exec rubocop ✓
91
+ kiqr_cloud: bundle exec rubocop ✓
92
+
93
+ Error: The command bundle exec rubocop failed to run in one or more project directories
83
94
  ```
84
95
 
85
- This will execute the `bundle exec rspec` command in each project directory, ensuring that all the necessary dependencies are installed and loaded for each project. Similarly, you can run other bundler commands such as `bundle install`, `bundle update`, and so on, by appending the desired arguments to the `monoz bundle` command.
96
+ This will execute the `bundle exec rubocop` command in each project directory, ensuring that all the necessary dependencies are installed and loaded for each project. Similarly, you can run other bundler commands such as `bundle install`, `bundle update`, and so on, by appending the desired arguments to the `monoz bundle` command.
97
+
98
+ ### Running commands in projects
99
+
100
+ You can run any command in all projects of your Monoz repository using the `monoz run` command. Simply provide the command you want to run as an argument, and Monoz will execute it in each project directory.
101
+
102
+ For example, to create an empty file named test.txt in the tmp/ directory of all projects, you can use the following command:
103
+
104
+ ```console
105
+ $ monoz run touch tmp/test.txt
106
+
107
+ kiqr_core: touch tmp/test.txt ✓
108
+ content_api: touch tmp/test.txt ✓
109
+ core_api: touch tmp/test.txt ✓
110
+ kiqr_cloud: touch tmp/test.txt ✓
111
+
112
+ The command ran successfully in all projects without any errors.
113
+ ```
114
+
115
+ This will execute the `touch tmp/test.txt` command in each project directory, creating the test.txt file in the tmp/ directory. If a command fails to run in a project directory, Monoz will display an error message with the output of the command.
116
+
117
+ Note that if you need to run a command in a specific project, you can simply navigate to the project directory and run the command as you would in a regular Ruby project. The monoz run command is primarily useful for running commands across one ore many projects in a Monoz repository at once.
118
+
119
+ ### Run in foreground / interactive mode
120
+
121
+ You can run commands in interactive mode using the flag `--tty`, or `-t`:
122
+
123
+ ```console
124
+ $ monoz run bin/dev --filter=example_com --tty
125
+
126
+ example_com: bin/dev
127
+ 23:41:04 web.1 | started with pid 96841
128
+ 23:41:04 css.1 | started with pid 96842
129
+ 23:41:05 web.1 | => Booting Puma
130
+ 23:41:05 web.1 | => Rails 7.0.4.3 application starting in development
131
+ 23:41:05 web.1 | => Run `bin/rails server --help` for more startup options
132
+ 23:41:06 web.1 | Puma starting in single mode...
133
+ 23:41:06 web.1 | * Puma version: 5.6.5 (ruby 3.2.0-p0) ("Birdie's Version")
134
+ 23:41:06 web.1 | * Min threads: 5
135
+ 23:41:06 web.1 | * Max threads: 5
136
+ 23:41:06 web.1 | * Environment: development
137
+ 23:41:06 web.1 | * PID: 96841
138
+ 23:41:06 web.1 | * Listening on http://127.0.0.1:3000
139
+ 23:41:06 web.1 | * Listening on http://[::1]:3000
140
+ 23:41:06 web.1 | Use Ctrl-C to stop
141
+ 23:41:06 css.1 |
142
+ 23:41:06 css.1 | Rebuilding...
143
+ 23:41:06 css.1 |
144
+ 23:41:06 css.1 | Done in 354ms.
145
+ ```
146
+
147
+ ### Filter projects
148
+
149
+ The `--filter` option in Monoz allows you to select certain projects based on specific criteria. This is useful if you only want to run a command on a specific subset of projects, rather than all of them. To use the `--filter` option, you simply specify a filter expression after the option. The filter expression is a comma-separated list of keywords that match the project names or tags in your Monoz configuration.
150
+
151
+ For example, suppose you have a Monoz configuration with several projects, some of which are tagged as **apps** and some of which are tagged as **gems**. You can use the "--filter" option to select only the **apps** projects by running the following command:
152
+
153
+ ```console
154
+ $ monoz bundle --filter=apps
155
+ ```
156
+
157
+ Similarly, if you only want to list only gem projects, you can use the following command:
158
+
159
+ ```console
160
+ $ monoz projects --filter=gems
161
+ ```
162
+
163
+ You can also use multiple keywords in the filter expression to select projects that match any of the keywords. For example, to run the `mrsk deploy` command on all **apps** and **apis** projects, you can use the following command:
164
+
165
+ ```console
166
+ $ monoz run mrsk deploy --filter="apps,apis"
167
+ ```
168
+
169
+ Finally, you can also specify individual project names in the filter expression. For example, to run the `rubocop` command on only the **gem1** and **gem2** projects, you can use the following command:
170
+
171
+ ```console
172
+ $ monoz run rubocop --filter="gem1,gem2"
173
+ ```
86
174
 
87
- ### Inspect projects
175
+ ### List projects
88
176
 
89
- You can inspect the projects in your Monoz repository using the `monoz inspect` command. This command will display a table that shows the projects in the repository, their type (app or gem), the gem name (if it's a gem), the test framework(s) used, and the projects that depend on them.
177
+ You can inspect the projects in your Monoz repository using the `monoz projects` command. This command will display a table that shows the projects in the repository, their type (app or gem), the gem name (if it's a gem), the test framework(s) used, and the projects that depend on them.
90
178
 
91
- Here's an example output of the `monoz inspect` command:
179
+ Here's an example output of the `monoz projects` command:
92
180
 
93
181
  ```console
94
- $ monoz inspect
182
+ $ monoz projects
95
183
 
96
184
  o---------------o--------o-------------o---------------------o-------------------------------------o
97
185
  | Project | Type | Gem Name | Test Framework(s) | Dependants |
data/bin/monoz CHANGED
@@ -4,8 +4,12 @@
4
4
  require "monoz"
5
5
 
6
6
  begin
7
- Monoz::Cli::Main.start(ARGV)
7
+ Monoz::Application.start(ARGV)
8
8
  rescue Monoz::Errors::ConfigurationNotFound
9
- puts "This is not a valid Monoz directory."
9
+ puts "Error: This is not a valid Monoz directory."
10
10
  puts "Run monoz init to initialize Monoz in the current directory."
11
+ exit(1)
12
+ rescue Monoz::Errors::StandardError => e
13
+ puts "Error: #{e.message}"
14
+ exit(1)
11
15
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thor"
4
+ require "yaml"
5
+ require "fileutils"
6
+
7
+ module Monoz
8
+ class Application < Thor
9
+ class_option :tty, type: :boolean, aliases: ["--verbose", "-t"], default: false
10
+ class_option :filter
11
+
12
+ def initialize(*args)
13
+ super
14
+ Monoz.app = self
15
+ end
16
+
17
+ desc "init [PATH]", "Initialize a monozrepo at the specified PATH"
18
+ def init(path = ".")
19
+ Monoz::Services::InitService.new(self).call(path)
20
+ end
21
+
22
+ desc "bundle [COMMAND]", "Run bundle commands in all projects"
23
+ def bundle(*command)
24
+ return help("bundle") if command.nil? || command.first == "help"
25
+
26
+ projects = Monoz.projects.order(:dependants)
27
+ Monoz::Services::RunService.new(self).call(projects, "bundle", *command)
28
+
29
+ say "The command ran successfully in all project directories without any errors.", [:green]
30
+ end
31
+
32
+ desc "projects", "Shows a list of projects in this repository"
33
+ def projects
34
+ Monoz.projects.order(:name).to_table
35
+ end
36
+
37
+ map "run" => "run_action"
38
+ desc "run [COMMAND]", "Run commands in all projects"
39
+ def run_action(*command)
40
+ return help("run") if command.empty? || command.first == "help"
41
+
42
+ projects = Monoz.projects.order(:dependants)
43
+ Monoz::Services::RunService.new(self).call(projects, *command)
44
+
45
+ say "The command ran successfully in all project directories without any errors.", [:green]
46
+ end
47
+
48
+ desc "version", "Get the current version of Monoz"
49
+ def version
50
+ say "Monoz version: #{Monoz::VERSION}"
51
+ end
52
+ end
53
+ end
data/lib/monoz/project.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Monoz
4
4
  class Project
5
- attr_reader :name, :root_path, :gemspec, :type, :dependencies, :gem_name, :dependants
5
+ attr_reader :name, :root_path, :gemspec, :type, :dependencies, :gem_name, :dependants, :frameworks
6
6
 
7
7
  def initialize(root_path)
8
8
  @root_path = root_path
@@ -21,33 +21,27 @@ module Monoz
21
21
  @root_path != nil && gemfile_path != nil
22
22
  end
23
23
 
24
- def run(*command)
25
- FileUtils.chdir(root_path) do
26
- system(*command)
27
- end
28
- end
29
-
30
24
  def text_color
31
25
  is_gem? ? :green : :blue
32
26
  end
33
27
 
34
- def test_frameworks
35
- frameworks = []
28
+ private
29
+ def find_frameworks
30
+ frameworks = []
36
31
 
37
- rspec_files = Dir.glob(File.join(@root_path, "**/*_spec.rb"))
38
- if !rspec_files.empty?
39
- frameworks << "rspec"
40
- end
32
+ rspec_files = Dir.glob(File.join(@root_path, "**/*_spec.rb"))
33
+ if !rspec_files.empty?
34
+ frameworks << "rspec"
35
+ end
41
36
 
42
- minitest_files = Dir.glob(File.join(@root_path, "test/**/*_test.rb"))
43
- if !minitest_files.empty?
44
- frameworks << "minitest"
45
- end
37
+ minitest_files = Dir.glob(File.join(@root_path, "test/**/*_test.rb"))
38
+ if !minitest_files.empty?
39
+ frameworks << "minitest"
40
+ end
46
41
 
47
- frameworks
48
- end
42
+ frameworks
43
+ end
49
44
 
50
- private
51
45
  def parse_project_files
52
46
  @gemspec = parse_gemspec
53
47
  end
@@ -61,8 +55,7 @@ module Monoz
61
55
 
62
56
  spec = Gem::Specification.load(gemspec_file)
63
57
  {
64
- name: spec.name,
65
- version: spec.version.to_s
58
+ name: spec.name
66
59
  }
67
60
  end
68
61
 
@@ -70,7 +63,7 @@ module Monoz
70
63
  @name = File.basename(root_path)
71
64
  @gem_name = @gemspec.dig(:name) if is_gem?
72
65
  @type = is_gem? ? "gem" : "app"
73
- @test_frameworks =
66
+ @frameworks = find_frameworks
74
67
  @dependants = []
75
68
  end
76
69
 
@@ -51,27 +51,42 @@ module Monoz
51
51
  end
52
52
  end
53
53
 
54
- def filter(key)
55
- if key.to_sym == :apps
56
- @items = @items.select { |i| i.type == "app" }
57
- self
58
- elsif key.to_sym == :gems
59
- @items = @items.select { |i| i.type == "gem" }
60
- self
61
- else
62
- raise "Invalid filter key: #{key}"
54
+ def filter(filters = [])
55
+ if filters.is_a?(String)
56
+ filters = filters.split(",").map(&:strip)
57
+ end
58
+ if filters.empty?
59
+ @items = []
60
+ return self
61
+ end
62
+ filtered_items = []
63
+ filters.each do |filter|
64
+ if filter == "gems"
65
+ filtered_items += @items.select { |i| i.type == "gem" }
66
+ elsif filter == "apps"
67
+ filtered_items += @items.select { |i| i.type == "app" }
68
+ else
69
+ project = find(filter)
70
+ if project
71
+ filtered_items << project
72
+ else
73
+ raise Monoz::Errors::StandardError.new("Invalid key: #{filter}")
74
+ end
75
+ end
63
76
  end
77
+ @items = filtered_items.uniq
78
+ self
64
79
  end
65
80
 
66
81
  def to_table
67
82
  rows = []
68
83
  @items.each do |project|
69
- rows << [project.name, project.type, project.gem_name, project.test_frameworks.join(", "), project.dependants.join(", ")]
84
+ rows << [project.name, project.type, project.gem_name, project.frameworks.join(", "), project.dependants.join(", ")]
70
85
  end
71
86
  table = Terminal::Table.new(
72
- headings: ["Project", "Type", "Gem Name", "Test Framework(s)", "Dependants"],
73
- rows:,
74
- style: { padding_left: 2, padding_right: 2, border_i: "o" },
87
+ headings: ["Project", "Type", "Gem name", "Found Framework(s)", "Dependants"],
88
+ rows: rows,
89
+ style: { padding_left: 2, padding_right: 2, border_i: "o" }
75
90
  )
76
91
  puts table
77
92
  end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+ require "open3"
6
+
7
+ module Monoz
8
+ module Services
9
+ class RunService < Monoz::Services::BaseService
10
+ attr_reader :errors, :warnings
11
+
12
+ def initialize(thor_instance)
13
+ @projects = nil
14
+ @errors = []
15
+ @warnings = []
16
+ super(thor_instance)
17
+ end
18
+
19
+ def success?
20
+ !errors? && !warnings?
21
+ end
22
+
23
+ def errors?
24
+ @errors.any?
25
+ end
26
+
27
+ def warnings?
28
+ @warnings.any?
29
+ end
30
+
31
+ def call(projects, *command)
32
+ raise ArgumentError.new("Missing command") if command.empty?
33
+
34
+ if projects.is_a?(Monoz::ProjectCollection)
35
+ @projects = projects.all
36
+ elsif projects.is_a?(Monoz::Project)
37
+ @projects = [projects]
38
+ else
39
+ raise "Invalid projects"
40
+ end
41
+
42
+ @projects.each do |project|
43
+ say "#{project.name}: ", [:bold, :blue]
44
+ Monoz.tty? ? say(command.join(" ")) : say("#{command.join(" ")} ")
45
+
46
+ response = run_commands_in_project(project, *command)
47
+
48
+ if response.success?
49
+ say "\u2713", [:green, :bold] unless Monoz.tty? # Checkmark symbol in green and bold
50
+ else
51
+ say "\u2717", [:red, :bold] unless Monoz.tty? # Cross symbol in red
52
+ say response.output
53
+ say ""
54
+ @errors << {
55
+ project: project.name,
56
+ command: command.join(" "),
57
+ exit_code: response.exit_code,
58
+ output: response.output
59
+ }
60
+ end
61
+ end
62
+
63
+ say ""
64
+
65
+ if errors?
66
+ say "Error: The command ", :red
67
+ say "#{command.join(" ")} ", [:red, :bold]
68
+ say "failed to run in one or more project directories", [:red]
69
+ exit(1)
70
+ end
71
+ end
72
+
73
+ private
74
+ def run_commands_in_project(project, *command)
75
+ raise ArgumentError.new("Invalid command") if command.empty?
76
+
77
+ output = ""
78
+ exit_status = nil
79
+
80
+ FileUtils.chdir(project.root_path) do
81
+ if Monoz.tty?
82
+ Open3.popen2e(*command.map { |arg| Shellwords.escape(arg) }) do |stdin, stdout_err, wait_thr|
83
+ while line = stdout_err.gets
84
+ output += line
85
+ print line
86
+ end
87
+
88
+ exit_status = wait_thr.value.exitstatus
89
+ end
90
+
91
+ say ""
92
+ else
93
+ output, status = Open3.capture2e(*command.map { |arg| Shellwords.escape(arg) })
94
+ exit_status = status.exitstatus
95
+ end
96
+ end
97
+
98
+ return Monoz::Responses::CaptureRunResponse.new(output, exit_status)
99
+ end
100
+ end
101
+ end
102
+ end
data/lib/monoz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Monoz
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/monoz.rb CHANGED
@@ -3,36 +3,71 @@
3
3
  require_relative "monoz/version"
4
4
 
5
5
  require "pathname"
6
+ require "shellwords"
6
7
 
7
8
  module Monoz
8
9
  module Errors
10
+ class StandardError < StandardError; end
9
11
  class ConfigurationNotFound < StandardError; end
10
12
  end
11
13
 
12
- module Cli
13
- autoload "Inspect", "monoz/cli/inspect"
14
- autoload "Main", "monoz/cli/main"
15
- autoload "Run", "monoz/cli/run"
14
+ module Responses
15
+ class CaptureRunResponse
16
+ attr_reader :output, :exit_code
17
+
18
+ def initialize(output, exit_code)
19
+ @output = output
20
+ @exit_code = exit_code
21
+ end
22
+
23
+ def success?
24
+ exit_code == 0
25
+ end
26
+
27
+ def error?
28
+ exit_code == 1
29
+ end
30
+ end
16
31
  end
17
32
 
18
33
  module Services
19
34
  autoload "BaseService", "monoz/services/base_service"
20
- autoload "BundleService", "monoz/services/bundle_service"
21
35
  autoload "InitService", "monoz/services/init_service"
22
- autoload "RunActionService", "monoz/services/run_action_service"
36
+ autoload "RunService", "monoz/services/run_service"
23
37
  end
24
38
 
39
+ autoload "Application", "monoz/application"
25
40
  autoload "Configuration", "monoz/configuration"
26
41
  autoload "Project", "monoz/project"
27
42
  autoload "ProjectCollection", "monoz/project_collection"
28
43
 
29
44
  class << self
45
+ def app
46
+ @app
47
+ end
48
+
49
+ def app=(value)
50
+ @app = value
51
+ end
52
+
30
53
  def config
31
54
  @config ||= Monoz::Configuration.new(pwd)
32
55
  end
33
56
 
57
+ def options
58
+ @app&.options
59
+ end
60
+
61
+ def tty?
62
+ Monoz.options.dig("tty") == true
63
+ end
64
+
34
65
  def projects
35
- Monoz::ProjectCollection.new(config.root_path)
66
+ filter = Monoz.options&.dig("filter")
67
+ projects = Monoz::ProjectCollection.new(config.root_path)
68
+ projects = projects.filter(filter) unless filter.nil?
69
+
70
+ projects
36
71
  end
37
72
 
38
73
  def pwd
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monoz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kjellberg
@@ -64,15 +64,13 @@ files:
64
64
  - README.md
65
65
  - bin/monoz
66
66
  - lib/monoz.rb
67
- - lib/monoz/cli/inspect.rb
68
- - lib/monoz/cli/main.rb
67
+ - lib/monoz/application.rb
69
68
  - lib/monoz/configuration.rb
70
69
  - lib/monoz/project.rb
71
70
  - lib/monoz/project_collection.rb
72
71
  - lib/monoz/services/base_service.rb
73
- - lib/monoz/services/bundle_service.rb
74
72
  - lib/monoz/services/init_service.rb
75
- - lib/monoz/services/run_action_service.rb
73
+ - lib/monoz/services/run_service.rb
76
74
  - lib/monoz/version.rb
77
75
  homepage: https://github.com/kjellberg/monoz
78
76
  licenses:
@@ -89,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
87
  requirements:
90
88
  - - ">="
91
89
  - !ruby/object:Gem::Version
92
- version: 2.6.0
90
+ version: 2.7.0
93
91
  required_rubygems_version: !ruby/object:Gem::Requirement
94
92
  requirements:
95
93
  - - ">="
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
- require "yaml"
5
-
6
- module Monoz
7
- module Cli
8
- class Inspect < Thor
9
- default_task :all
10
-
11
- desc "all", "Returns a list of all projects in this monozrepo"
12
- def all
13
- Monoz.projects.order(:name).to_table
14
- end
15
-
16
- desc "apps", "Returns a list of apps in this monozrepo"
17
- def apps
18
- Monoz.projects.order(:name).filter(:apps).to_table
19
- end
20
-
21
- desc "gems", "Returns a list of gems in this monozrepo"
22
- def gems
23
- Monoz.projects.filter(:gems).order(:name).to_table
24
- end
25
- end
26
- end
27
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
- require "yaml"
5
- require "fileutils"
6
-
7
- module Monoz
8
- module Cli
9
- class Main < Thor
10
- desc "init [PATH]", "Initialize a monozrepo at the specified PATH"
11
- def init(path = ".")
12
- Monoz::Services::InitService.new(self).call(path)
13
- end
14
-
15
- desc "bundle [COMMAND]", "Run bundle commands in all projects"
16
- def bundle(*command)
17
- Monoz::Services::BundleService.new(self).call(*command)
18
- end
19
-
20
- desc "inspect", "Inspect this monozrepo"
21
- subcommand "inspect", Monoz::Cli::Inspect
22
-
23
- map "run" => "run_action"
24
- desc "run [action]", "Run commands in all projects"
25
- def run_action(keys = nil)
26
- return help("run") if keys.nil? || keys == "help"
27
-
28
- Monoz::Services::RunActionService.new(self).call(keys)
29
- end
30
-
31
- desc "version", "Get the current version of Monoz"
32
- def version
33
- say "Monoz version: #{Monoz::VERSION}"
34
- end
35
- end
36
- end
37
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
- require "fileutils"
5
- require "active_support"
6
-
7
- module Monoz
8
- module Services
9
- class BundleService < Monoz::Services::BaseService
10
- def call(*command)
11
- Monoz.projects.order(:dependants).each do |project|
12
- say "[#{project.name}] ", [:blue, :bold], false
13
- say("bundle #{command.join(" ")}".strip, :green)
14
- project.run "bundle", *command
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
- require "fileutils"
5
-
6
- module Monoz
7
- module Services
8
- class RunActionService < Monoz::Services::BaseService
9
- def call(keys = nil)
10
- action = Monoz.config.dig("actions", *keys)
11
-
12
- if action.nil?
13
- say "Invalid action: ", :red, false
14
- say keys, [:red, :bold]
15
- exit 0
16
- end
17
-
18
- pp action
19
- # Monoz.projects.order(:dependants).each do |project|
20
- # project.run "ls"
21
- # end
22
- end
23
- end
24
- end
25
- end