monoz 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95f85442889a0675ea32c6e1109e20201793b8a9933329103be401551b23438b
4
- data.tar.gz: 81e4f563fc9797196c7bf5531030f5848da689e9e400fea3cdf28263c66dc99d
3
+ metadata.gz: e73d1688f568042f98029b57b070f6541c3a19ba0ae206c7f89a3ecb60dda061
4
+ data.tar.gz: 3f9a57bfc7abacf3bf67783e713d3e92bcc6bea586c0c8c53b1b298c3ecfc990
5
5
  SHA512:
6
- metadata.gz: '08dad5e93a296263067bcf7e38621772bfd74c88a0258d07f7c3b72674c56c450211aeebc178bd0075c5626356039413c4d129eb38ee2545865d005e1ac43945'
7
- data.tar.gz: 1858caeb0e79ceba16d373b79278a4acc031953963751e5c8815f43ff1691af9e4884002826963989ddd7dfdf9ace6588b3e199778dcbb3ebcec1de90b7b45d3
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.1"
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.1
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