squared 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.ruby.md +13 -11
- data/lib/squared/common/base.rb +3 -2
- data/lib/squared/common/format.rb +1 -1
- data/lib/squared/common/task.rb +3 -2
- data/lib/squared/config.rb +15 -15
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +53 -25
- data/lib/squared/workspace/project/base.rb +17 -4
- data/lib/squared/workspace/project/git.rb +27 -20
- data/lib/squared/workspace/project/node.rb +82 -66
- data/lib/squared/workspace/project/python.rb +4 -0
- data/lib/squared/workspace/project/ruby.rb +4 -0
- data/lib/squared/workspace/repo.rb +10 -5
- data/lib/squared/workspace/series.rb +27 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90258e1d46b51b15fcb414cddf85407968d227b5032797e76ead83befa5d302b
|
4
|
+
data.tar.gz: a01b153f7c26b7f15a24cc66a159e47e42bc117e7b0810d7146c6ca3766f3cd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 484c0af12a637957f3ed9ddc43b6f08bee1f3dbcba50a2acdfdd0dcb7bb929b83b64d40fd8bbf17ceddc5d8177a27773e4193198cbc80f2991651bf55366b2c8
|
7
|
+
data.tar.gz: a9617a969c41e971235b98bc730fd440f6c913a2ce21b9e8acb1907ae170ac72da1bb5d72df8650c1833827599fb0d95ab4aae19e5c75249dac07c0096efe077
|
data/README.ruby.md
CHANGED
@@ -34,13 +34,14 @@ Projects from any accessible folder can be added either relative to `REPO_ROOT`
|
|
34
34
|
require "squared"
|
35
35
|
require "squared/workspace/repo" # Repo (optional)
|
36
36
|
|
37
|
+
# NODE_ENV = production
|
37
38
|
# REPO_ROOT = /workspaces
|
38
39
|
# REPO_HOME = /workspaces/squared
|
39
|
-
# NODE_ENV = production
|
40
40
|
# rake = /workspaces/squared/Rakefile
|
41
41
|
|
42
42
|
Workspace::Application
|
43
43
|
.new(main: "squared") # Dir.pwd? (main? is implicitly basename)
|
44
|
+
.banner("group", "project", styles: %i[yellow black], border: "bold") # name | project | path | ref | group?
|
44
45
|
.repo("https://github.com/anpham6/squared-repo", "nightly", run: "build", ref: :node) # Repo (optional)
|
45
46
|
.run("rake install", ref: :ruby)
|
46
47
|
.depend(false, group: "default")
|
@@ -70,19 +71,20 @@ Workspace::Application
|
|
70
71
|
# squared = /workspaces/squared
|
71
72
|
|
72
73
|
Workspace::Application
|
73
|
-
.new(ENV["SQUARED_DIR"], prefix: "rb", common: false) #
|
74
|
-
.group("default", "ruby", run: "rake build", copy: "rake install", clean: "rake clean", ref: :ruby, override: {
|
74
|
+
.new(ENV["SQUARED_DIR"], prefix: "rb", common: false) # Local styles
|
75
|
+
.group("default", "ruby/", run: "rake build", copy: "rake install", clean: "rake clean", ref: :ruby, override: {
|
75
76
|
pathname: {
|
76
|
-
run: "rake compile"
|
77
|
+
run: "rake compile" # rake rb:pathname:build
|
77
78
|
}
|
78
79
|
})
|
79
|
-
.with(
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
add("
|
85
|
-
|
80
|
+
.with(:python) do # ref=Symbol | group=String
|
81
|
+
banner("path", command: false, styles: "yellow") #
|
82
|
+
doc("make html") # rake rb:doc:python
|
83
|
+
run(false) # rake rb:build:python (disabled)
|
84
|
+
exclude(%i[base git]) # Project::Git.ref (superclass)
|
85
|
+
add("android", "android-docs") # rake rb:android:doc
|
86
|
+
add("chrome", "chrome-docs") # rake rb:chrome:doc
|
87
|
+
end #
|
86
88
|
.style("inline", "bold")
|
87
89
|
.build
|
88
90
|
# default = /workspaces/ruby/*
|
data/lib/squared/common/base.rb
CHANGED
@@ -83,7 +83,7 @@ module Squared
|
|
83
83
|
args.reject(&:empty?).join(' => ') + (hint ? " (#{hint})" : '')
|
84
84
|
end
|
85
85
|
|
86
|
-
def as_a(obj, meth = nil, flat: nil)
|
86
|
+
def as_a(obj, meth = nil, flat: nil, compact: false)
|
87
87
|
return [] if obj.nil?
|
88
88
|
|
89
89
|
if !obj.is_a?(::Array)
|
@@ -91,7 +91,8 @@ module Squared
|
|
91
91
|
elsif flat
|
92
92
|
obj = obj.flatten(flat == true ? nil : flat)
|
93
93
|
end
|
94
|
-
|
94
|
+
obj = obj.map(&meth) if meth
|
95
|
+
compact ? obj.compact : obj
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
@@ -109,7 +109,7 @@ module Squared
|
|
109
109
|
def check_style(*args, empty: true)
|
110
110
|
ret = []
|
111
111
|
colors = __get__(:colors)
|
112
|
-
as_a(args, flat: true).each do |val|
|
112
|
+
as_a(args, flat: true, compact: true).each do |val|
|
113
113
|
if !val.is_a?(Numeric)
|
114
114
|
val = val.to_sym
|
115
115
|
ret << val if colors.key?(val) || TEXT_STYLE.include?(val)
|
data/lib/squared/common/task.rb
CHANGED
@@ -7,8 +7,9 @@ module Squared
|
|
7
7
|
module Task
|
8
8
|
module_function
|
9
9
|
|
10
|
-
def invoke(
|
11
|
-
|
10
|
+
def invoke(series, *args, exception: true, warning: true)
|
11
|
+
series = [series] unless series.is_a?(::Array)
|
12
|
+
series.each { |name| ::Rake::Task[name].invoke(*args) }
|
12
13
|
rescue StandardError => e
|
13
14
|
raise if exception
|
14
15
|
|
data/lib/squared/config.rb
CHANGED
@@ -60,8 +60,7 @@ module Squared
|
|
60
60
|
|
61
61
|
params = ->(args) { exist? ? [realpath, [args.keys] + args.extras] : [args.keys, args.extras] }
|
62
62
|
|
63
|
-
ns =
|
64
|
-
namespace ns do
|
63
|
+
namespace(ns = task_name(name)) do
|
65
64
|
view = @command && @command != name ? @command : 'view'
|
66
65
|
namespace view do
|
67
66
|
if @mime['json'] && (exist? || !::Rake::Task.task_defined?("#{ns}:#{view}:json"))
|
@@ -94,7 +93,7 @@ module Squared
|
|
94
93
|
ext << type if (ext = as_a(ext)).empty?
|
95
94
|
file = realpath if file.nil? && exist?
|
96
95
|
|
97
|
-
namespace(
|
96
|
+
namespace task_name(name) do
|
98
97
|
desc format_desc(command, *ext, exist: exist)
|
99
98
|
namespace command do
|
100
99
|
task type, [:keys] do |_, args|
|
@@ -191,19 +190,16 @@ module Squared
|
|
191
190
|
.realpath
|
192
191
|
.to_s
|
193
192
|
.sub(Regexp.new("^#{Regexp.escape(File.join(Dir.pwd, ''))}"), '')
|
194
|
-
sub = if pipe?
|
195
|
-
nil
|
196
|
-
else
|
197
|
-
styles = theme
|
193
|
+
sub = if !pipe?
|
198
194
|
[
|
199
|
-
{ pat: /^((?:[^:]|(?<! ):(?! ))+)$/, styles:
|
200
|
-
{ pat: /^(.*?)(<[^>]+>)(.+)$/m, styles:
|
201
|
-
{ pat: /^(.+)( : (?!undefined).+)$/m, styles:
|
202
|
-
{ pat: /^(.+ : )(-?[\d.]+)(\s*)$/m, styles:
|
203
|
-
{ pat: /^(.+ : ")(.+)("\s*)$/m, styles:
|
204
|
-
{ pat: /^(.+ : \{)(.+)(\}\s*)$/m, styles:
|
205
|
-
{ pat: /^(.+ : \[)(.+)(\]\s*)$/m, styles:
|
206
|
-
{ pat: /^(.+ : (?!undefined))([^"\[{].*)$/m, styles:
|
195
|
+
{ pat: /^((?:[^:]|(?<! ):(?! ))+)$/, styles: theme[:banner] },
|
196
|
+
{ pat: /^(.*?)(<[^>]+>)(.+)$/m, styles: theme[:undefined], index: 2 },
|
197
|
+
{ pat: /^(.+)( : (?!undefined).+)$/m, styles: theme[:key] },
|
198
|
+
{ pat: /^(.+ : )(-?[\d.]+)(\s*)$/m, styles: theme[:number], index: 2 },
|
199
|
+
{ pat: /^(.+ : ")(.+)("\s*)$/m, styles: theme[:string], index: 2 },
|
200
|
+
{ pat: /^(.+ : \{)(.+)(\}\s*)$/m, styles: theme[:hash], index: 2 },
|
201
|
+
{ pat: /^(.+ : \[)(.+)(\]\s*)$/m, styles: theme[:array], index: 2 },
|
202
|
+
{ pat: /^(.+ : (?!undefined))([^"\[{].*)$/m, styles: theme[:value], index: 2 }
|
207
203
|
]
|
208
204
|
end
|
209
205
|
emphasize(lines, title: title, sub: sub)
|
@@ -254,6 +250,10 @@ module Squared
|
|
254
250
|
project ? project.base_path(file) : Pathname.new(file).realdirpath
|
255
251
|
end
|
256
252
|
|
253
|
+
def task_name(val)
|
254
|
+
@prefix ? "#{@prefix}:#{val}" : val.to_s
|
255
|
+
end
|
256
|
+
|
257
257
|
def mime_type(file)
|
258
258
|
case (ret = File.extname(file).sub('.', '').downcase)
|
259
259
|
when 'yml'
|
data/lib/squared/version.rb
CHANGED
@@ -45,7 +45,7 @@ module Squared
|
|
45
45
|
@main = (main || home.basename).to_s
|
46
46
|
@root = @home.parent
|
47
47
|
@prefix = prefix
|
48
|
-
@series = Application.impl_series.new(
|
48
|
+
@series = Application.impl_series.new(self)
|
49
49
|
@project = {}
|
50
50
|
@extensions = []
|
51
51
|
@script = {
|
@@ -66,6 +66,7 @@ module Squared
|
|
66
66
|
else
|
67
67
|
@theme = {}
|
68
68
|
end
|
69
|
+
@banner = {}
|
69
70
|
end
|
70
71
|
|
71
72
|
def build(**kwargs)
|
@@ -88,17 +89,17 @@ module Squared
|
|
88
89
|
yield self if block_given?
|
89
90
|
end
|
90
91
|
|
91
|
-
def with(
|
92
|
+
def with(val, &blk)
|
92
93
|
@group = nil
|
93
94
|
@ref = nil
|
94
|
-
if
|
95
|
-
@group =
|
95
|
+
if val.is_a?(::String)
|
96
|
+
@group = val
|
96
97
|
if block_given?
|
97
98
|
instance_eval(&blk)
|
98
99
|
@group = nil
|
99
100
|
end
|
100
|
-
elsif
|
101
|
-
@ref =
|
101
|
+
elsif val.is_a?(::Symbol)
|
102
|
+
@ref = val
|
102
103
|
if block_given?
|
103
104
|
instance_eval(&blk)
|
104
105
|
@ref = nil
|
@@ -143,7 +144,7 @@ module Squared
|
|
143
144
|
Application.find(ref, path: path)
|
144
145
|
elsif ref < Project::Base
|
145
146
|
ref
|
146
|
-
end) || Project::Base).new(
|
147
|
+
end) || Project::Base).new(task_name(name), path, self, **kwargs)
|
147
148
|
@project[name = name.to_sym] = proj
|
148
149
|
__get__(:project)[name] = proj unless kwargs[:private]
|
149
150
|
self
|
@@ -170,7 +171,7 @@ module Squared
|
|
170
171
|
end
|
171
172
|
|
172
173
|
def compose(name, &blk)
|
173
|
-
namespace(name, &blk)
|
174
|
+
namespace(task_name(name), &blk)
|
174
175
|
self
|
175
176
|
end
|
176
177
|
|
@@ -194,6 +195,25 @@ module Squared
|
|
194
195
|
self
|
195
196
|
end
|
196
197
|
|
198
|
+
def banner(*order, command: true, styles: [], border: [], group: nil, ref: nil)
|
199
|
+
return (group && @banner[group.to_sym]) || @banner[:"_#{ref || ''}"] if order.empty?
|
200
|
+
|
201
|
+
key = if group ||= @group
|
202
|
+
group.to_sym
|
203
|
+
else
|
204
|
+
:"_#{ref || @ref || ''}"
|
205
|
+
end
|
206
|
+
data = { command: command, order: [], styles: check_style(styles, empty: false), border: check_style(border) }
|
207
|
+
order.flatten.each do |val|
|
208
|
+
case (val = val.to_sym)
|
209
|
+
when :name, :project, :path, :ref, :group
|
210
|
+
data[:order] << val
|
211
|
+
end
|
212
|
+
end
|
213
|
+
@banner[key] = data if command || !data[:order].empty?
|
214
|
+
self
|
215
|
+
end
|
216
|
+
|
197
217
|
def script(*args, group: nil, ref: nil)
|
198
218
|
if group
|
199
219
|
@script[:group][group.to_sym]
|
@@ -228,6 +248,18 @@ module Squared
|
|
228
248
|
Application.impl_project.find { |proj| obj.instance_of?(proj) }
|
229
249
|
end
|
230
250
|
|
251
|
+
def task_name(val, desc: false)
|
252
|
+
ret = @prefix ? "#{@prefix}:#{val}" : val.to_s
|
253
|
+
desc ? ret.split(':').join(' => ') : ret
|
254
|
+
end
|
255
|
+
|
256
|
+
def task_namespace(val, first: false)
|
257
|
+
return nil unless (val = val.to_s).include?(':')
|
258
|
+
|
259
|
+
ret = val.split(':')
|
260
|
+
first ? ret.first : ret[0..-2].join(':')
|
261
|
+
end
|
262
|
+
|
231
263
|
def to_s
|
232
264
|
root.to_s
|
233
265
|
end
|
@@ -240,12 +272,6 @@ module Squared
|
|
240
272
|
!@extensions.empty? || @project.any? { |_, proj| proj.enabled? }
|
241
273
|
end
|
242
274
|
|
243
|
-
def task_base?(key, val)
|
244
|
-
return val if task_defined?(key)
|
245
|
-
|
246
|
-
val if key == :refresh && series.build.include?(val = "#{val.split(':').first}:build")
|
247
|
-
end
|
248
|
-
|
249
275
|
def task_extend?(obj, key)
|
250
276
|
series.extend?(obj, key)
|
251
277
|
end
|
@@ -267,21 +293,18 @@ module Squared
|
|
267
293
|
private
|
268
294
|
|
269
295
|
def __build__(**kwargs)
|
270
|
-
if !task_defined?('default') && (
|
271
|
-
task 'default' =>
|
296
|
+
if !task_defined?('default') && (target = kwargs[:default]) && task_defined?(target = task_name(target))
|
297
|
+
task 'default' => target
|
272
298
|
end
|
273
|
-
return unless series.
|
274
|
-
|
275
|
-
series.refresh.clear unless series.refresh.any? { |val| val.end_with?(':refresh') }
|
299
|
+
return unless series.some?(:build)
|
276
300
|
|
277
|
-
init = [
|
301
|
+
init = [task_name('depend'), task_name(dev? && series.some?(:refresh) ? 'refresh' : 'build')]
|
278
302
|
|
279
303
|
task 'default' => init[1] unless task_defined?('default')
|
304
|
+
return unless series.some?(:depend) && !task_defined?(key = task_name('init'))
|
280
305
|
|
281
|
-
|
282
|
-
|
283
|
-
desc 'init'
|
284
|
-
task 'init' => init
|
306
|
+
desc key
|
307
|
+
task key => init
|
285
308
|
end
|
286
309
|
|
287
310
|
def script_command(task, val, group, ref)
|
@@ -303,7 +326,12 @@ module Squared
|
|
303
326
|
pat = @script[state] if pat.nil?
|
304
327
|
script ||= @script[:build]
|
305
328
|
end
|
306
|
-
pat.is_a?(::Regexp)
|
329
|
+
if pat.is_a?(::Regexp)
|
330
|
+
script = script[state == :prod ? 1 : 0] if script.is_a?(::Array)
|
331
|
+
pat.match?(script)
|
332
|
+
else
|
333
|
+
pat == true
|
334
|
+
end
|
307
335
|
end
|
308
336
|
|
309
337
|
def contains?(data, val)
|
@@ -134,6 +134,10 @@ module Squared
|
|
134
134
|
@ref << ref unless @exclude.include?(ref)
|
135
135
|
end
|
136
136
|
|
137
|
+
def ref
|
138
|
+
Base.ref
|
139
|
+
end
|
140
|
+
|
137
141
|
def populate(*)
|
138
142
|
valid = ref?(Base.ref)
|
139
143
|
series = workspace.series
|
@@ -358,12 +362,12 @@ module Squared
|
|
358
362
|
puts val unless val.empty? || (val.size == 1 && val.first.nil?)
|
359
363
|
end
|
360
364
|
|
361
|
-
def print_banner(*lines, styles: theme[:banner], border: theme[:border])
|
365
|
+
def print_banner(*lines, styles: theme[:banner], border: theme[:border], client: false)
|
362
366
|
pad = 0
|
363
367
|
if styles
|
364
368
|
if styles.any? { |s| s.to_s.end_with?('!') }
|
365
369
|
pad = 1
|
366
|
-
elsif styles.size <= 1
|
370
|
+
elsif !client && styles.size <= 1
|
367
371
|
styles = [:bold] + styles
|
368
372
|
end
|
369
373
|
end
|
@@ -409,10 +413,18 @@ module Squared
|
|
409
413
|
def format_banner(cmd, banner: true, multiple: false)
|
410
414
|
return unless banner
|
411
415
|
|
416
|
+
if (data = workspace.banner(group: group, ref: ref))
|
417
|
+
client = true
|
418
|
+
else
|
419
|
+
data = { command: true, order: %i[path], styles: theme[:banner], border: theme[:border] }
|
420
|
+
end
|
412
421
|
if verbose?
|
413
|
-
|
422
|
+
out = []
|
423
|
+
out << cmd.sub(/^\S+/, &:upcase) if data[:command]
|
424
|
+
data[:order].each { |val| out << val.to_s if (val = __send__(val)) }
|
425
|
+
print_banner(*out, styles: data[:styles], border: data[:border], client: client)
|
414
426
|
elsif multiple && workspace.series.multiple?
|
415
|
-
"## #{path} ##"
|
427
|
+
"## #{__send__(data[:order].first || :path)} ##"
|
416
428
|
end
|
417
429
|
end
|
418
430
|
|
@@ -474,6 +486,7 @@ module Squared
|
|
474
486
|
end
|
475
487
|
|
476
488
|
def invoked_sync?(action, flag = nil)
|
489
|
+
action = workspace.task_name(action)
|
477
490
|
return true if !flag.nil? || workspace.series.sync?("#{action}:sync")
|
478
491
|
|
479
492
|
check = lambda do |val|
|
@@ -11,26 +11,26 @@ module Squared
|
|
11
11
|
class << self
|
12
12
|
include ::Rake::DSL
|
13
13
|
|
14
|
-
def populate(
|
15
|
-
return if
|
16
|
-
|
17
|
-
desc 'all[git?=rebase|stash]'
|
18
|
-
task 'all', [:git] do |_, args|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def populate(ws, **)
|
15
|
+
return if ws.series.pull.empty?
|
16
|
+
|
17
|
+
desc ws.task_name('all[git?=rebase|stash]', desc: true)
|
18
|
+
task ws.task_name('all'), [:git] do |_, args|
|
19
|
+
sync = lambda do |key|
|
20
|
+
key = ws.task_name(key)
|
21
|
+
ws.task_defined?(ret = "#{key}:sync") ? ret : key
|
22
|
+
end
|
23
|
+
cmd = [case args.git
|
23
24
|
when 'rebase'
|
24
25
|
sync.('rebase')
|
25
26
|
when 'stash'
|
26
|
-
invoke(sync.('stash'), exception: exception, warning: warning)
|
27
|
+
invoke(sync.('stash'), exception: ws.exception, warning: ws.warning)
|
27
28
|
sync.('pull')
|
28
29
|
else
|
29
30
|
sync.('pull')
|
30
|
-
end
|
31
|
-
|
32
|
-
Common::Task.invoke(
|
33
|
-
exception: exception, warning: warning)
|
31
|
+
end]
|
32
|
+
cmd << ws.task_name(ws.dev? && ws.series.some?(:refresh) ? 'refresh' : 'build')
|
33
|
+
Common::Task.invoke(cmd, exception: ws.exception, warning: ws.warning)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -66,6 +66,10 @@ module Squared
|
|
66
66
|
initialize_ref(Git.ref)
|
67
67
|
end
|
68
68
|
|
69
|
+
def ref
|
70
|
+
Git.ref
|
71
|
+
end
|
72
|
+
|
69
73
|
def populate(*)
|
70
74
|
super
|
71
75
|
return unless gitdir.exist? && ref?(Git.ref)
|
@@ -265,12 +269,15 @@ module Squared
|
|
265
269
|
print_item banner
|
266
270
|
banner = nil
|
267
271
|
end
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
272
|
+
sub = if verbose?
|
273
|
+
[
|
274
|
+
{ pat: /^(.)([A-Z])(.+)$/, styles: :red, index: 2 },
|
275
|
+
{ pat: /^([A-Z])(.+)$/, styles: :green },
|
276
|
+
{ pat: /^(\?\?)(.+)$/, styles: :red },
|
277
|
+
{ pat: /^(## )(.+)(\.{3})(.+)$/, styles: [nil, :green, nil, :red], index: -1 }
|
278
|
+
]
|
279
|
+
end
|
280
|
+
ret = write_lines(out, banner: banner, sub: sub)
|
274
281
|
list_result(ret, 'files', action: 'modified')
|
275
282
|
end
|
276
283
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
|
3
5
|
module Squared
|
4
6
|
module Workspace
|
5
7
|
module Project
|
@@ -25,7 +27,7 @@ module Squared
|
|
25
27
|
end
|
26
28
|
|
27
29
|
@@tasks[ref] = {
|
28
|
-
install: %i[force dedupe
|
30
|
+
install: %i[force frozen dedupe],
|
29
31
|
outdated: %i[major minor patch],
|
30
32
|
run: nil
|
31
33
|
}.freeze
|
@@ -43,10 +45,10 @@ module Squared
|
|
43
45
|
|
44
46
|
if @output[0].nil?
|
45
47
|
val, ext = @workspace.script(Node.ref, @group)
|
46
|
-
|
48
|
+
script_set val
|
47
49
|
unless ext
|
48
50
|
if script
|
49
|
-
|
51
|
+
script_set script
|
50
52
|
elsif (val = @script && @script[:run])
|
51
53
|
@output[0] = val
|
52
54
|
@output[1] = nil
|
@@ -56,6 +58,10 @@ module Squared
|
|
56
58
|
@output[@output[0] || val.include?(' ') ? 0 : 1] = val if (val = env('BUILD', strict: true))
|
57
59
|
end
|
58
60
|
|
61
|
+
def ref
|
62
|
+
Node.ref
|
63
|
+
end
|
64
|
+
|
59
65
|
def populate(*)
|
60
66
|
super
|
61
67
|
return unless outdated? && ref?(Node.ref)
|
@@ -110,26 +116,29 @@ module Squared
|
|
110
116
|
next unless dev? & !doc?
|
111
117
|
|
112
118
|
dest = dir
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
119
|
+
else
|
120
|
+
case dir
|
121
|
+
when ::String
|
122
|
+
dest = workspace.root_path(dir)
|
123
|
+
when ::Symbol
|
124
|
+
dest = Workspace.resolve(dir)&.path
|
125
|
+
when ::Hash
|
126
|
+
into = nil
|
127
|
+
glob = nil
|
128
|
+
dir.each do |key, val|
|
129
|
+
case key.to_sym
|
130
|
+
when :from
|
131
|
+
from = val
|
132
|
+
when :glob
|
133
|
+
glob = val
|
134
|
+
when :subdir
|
135
|
+
subdir = val
|
136
|
+
when :into
|
137
|
+
into = val
|
138
|
+
end
|
132
139
|
end
|
140
|
+
when Project::Base
|
141
|
+
dest = dir.path
|
133
142
|
end
|
134
143
|
next unless into
|
135
144
|
end
|
@@ -146,53 +155,51 @@ module Squared
|
|
146
155
|
if @depend && !flag
|
147
156
|
super
|
148
157
|
elsif outdated?
|
149
|
-
frozen = flag == :frozen
|
150
|
-
force = flag == :force
|
151
|
-
dedupe = flag == :dedupe
|
152
158
|
if (yarn = install_type(:yarn)) > 0
|
153
159
|
cmd = session 'yarn'
|
154
160
|
if yarn > 1
|
155
|
-
if dedupe
|
161
|
+
if flag == :dedupe
|
156
162
|
cmd << 'dedupe'
|
157
163
|
else
|
158
|
-
cmd << 'install'
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
end
|
164
|
+
cmd << 'install' << if flag == :force
|
165
|
+
'--check-cache'
|
166
|
+
elsif flag == :frozen
|
167
|
+
'--immutable'
|
168
|
+
end
|
164
169
|
end
|
165
170
|
else
|
166
|
-
cmd << 'install'
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
end
|
171
|
+
cmd << 'install' << if flag == :force
|
172
|
+
'--force'
|
173
|
+
elsif flag == :frozen
|
174
|
+
'--frozen-lockfile'
|
175
|
+
end
|
172
176
|
cmd << '--production' if prod?
|
173
177
|
cmd << '--ignore-engines' unless env('YARN_IGNORE_ENGINES', equals: '0')
|
174
178
|
end
|
175
179
|
elsif pnpm?
|
176
180
|
cmd = session 'pnpm'
|
177
|
-
if dedupe
|
181
|
+
if flag == :dedupe
|
178
182
|
cmd << 'dedupe'
|
179
183
|
else
|
180
|
-
cmd << 'install'
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
end
|
184
|
+
cmd << 'install' << if flag == :force
|
185
|
+
'--force'
|
186
|
+
elsif flag == :frozen
|
187
|
+
'--frozen-lockfile'
|
188
|
+
end
|
186
189
|
end
|
187
190
|
cmd << '--prod' if prod?
|
188
191
|
cmd << '--ignore-workspace' if env('NODE_WORKSPACES', equals: '0')
|
189
192
|
append_nocolor
|
190
193
|
else
|
191
|
-
cmd = session 'npm'
|
192
|
-
if
|
193
|
-
cmd << '
|
194
|
-
|
195
|
-
cmd << '
|
194
|
+
cmd = session 'npm'
|
195
|
+
if flag == :dedupe
|
196
|
+
cmd << 'dedupe'
|
197
|
+
else
|
198
|
+
cmd << 'install' << if flag == :force
|
199
|
+
'--force'
|
200
|
+
elsif flag == :frozen
|
201
|
+
'--package-lock-only'
|
202
|
+
end
|
196
203
|
end
|
197
204
|
cmd << '--omit=dev' if prod?
|
198
205
|
cmd << '--workspaces=false' if env('NODE_WORKSPACES', equals: '0')
|
@@ -205,7 +212,6 @@ module Squared
|
|
205
212
|
end
|
206
213
|
|
207
214
|
def outdated(rev = nil, opts: [])
|
208
|
-
require 'json'
|
209
215
|
equ = rev || (prod? ? :patch : :minor)
|
210
216
|
cmd = pnpm? ? 'pnpm outdated' : 'npm outdated'
|
211
217
|
log.info cmd
|
@@ -348,10 +354,6 @@ module Squared
|
|
348
354
|
end
|
349
355
|
end
|
350
356
|
|
351
|
-
def run_script(cmd)
|
352
|
-
cmd.each { |val| run_s compose(val) }
|
353
|
-
end
|
354
|
-
|
355
357
|
def compose(args)
|
356
358
|
args ||= @output[1]
|
357
359
|
cmd = [if yarn?
|
@@ -403,13 +405,10 @@ module Squared
|
|
403
405
|
else
|
404
406
|
1
|
405
407
|
end
|
408
|
+
elsif (ver = read_packagemanager || env('NODE_INSTALL')) && ver.start_with?('yarn')
|
409
|
+
ver == 'yarn' || ver.include?('@1') ? 1 : 3
|
406
410
|
else
|
407
|
-
|
408
|
-
if ver&.start_with?('yarn')
|
409
|
-
ver.include?('@1') ? 1 : 3
|
410
|
-
else
|
411
|
-
0
|
412
|
-
end
|
411
|
+
0
|
413
412
|
end) > 0
|
414
413
|
end
|
415
414
|
|
@@ -430,20 +429,24 @@ module Squared
|
|
430
429
|
4
|
431
430
|
end
|
432
431
|
else
|
433
|
-
env('NODE_INSTALL')&.start_with?('pnpm') ? 4 : 0
|
432
|
+
(read_packagemanager || env('NODE_INSTALL'))&.start_with?('pnpm') ? 4 : 0
|
434
433
|
end) > 0
|
435
434
|
end
|
436
435
|
|
437
436
|
def dev?
|
438
|
-
!Node.prod? && workspace.dev?(
|
437
|
+
!Node.prod? && workspace.dev?(pat: @dev, **runargs)
|
439
438
|
end
|
440
439
|
|
441
440
|
def prod?
|
442
|
-
Node.prod? || workspace.prod?(
|
441
|
+
Node.prod? || workspace.prod?(pat: @prod, **runargs)
|
443
442
|
end
|
444
443
|
|
445
444
|
private
|
446
445
|
|
446
|
+
def run_script(cmd)
|
447
|
+
cmd.each { |val| run_s compose(val) }
|
448
|
+
end
|
449
|
+
|
447
450
|
def append_loglevel(cmd = @session)
|
448
451
|
return unless (level = env('NODE_LOGLEVEL'))
|
449
452
|
|
@@ -481,7 +484,20 @@ module Squared
|
|
481
484
|
default: m ? 'N' : 'Y', timeout: 60)
|
482
485
|
end
|
483
486
|
|
484
|
-
def
|
487
|
+
def read_packagemanager
|
488
|
+
if @pm[:_].nil?
|
489
|
+
doc = JSON.parse(package.read)
|
490
|
+
@pm[:_] = (val = doc['packageManager']) ? val[0..(val.index('+') || 0) - 1] : false
|
491
|
+
end
|
492
|
+
rescue StandardError => e
|
493
|
+
log.warn e if package.exist?
|
494
|
+
@pm[:_] = false
|
495
|
+
nil
|
496
|
+
else
|
497
|
+
@pm[:_] || nil
|
498
|
+
end
|
499
|
+
|
500
|
+
def script_set(val)
|
485
501
|
@output[1] = if val.is_a?(::Array)
|
486
502
|
val[Node.prod? ? 1 : 0]
|
487
503
|
else
|
@@ -490,7 +506,7 @@ module Squared
|
|
490
506
|
end
|
491
507
|
|
492
508
|
def runargs
|
493
|
-
{ ref: Node.ref, group: group, global: @output[0].nil? && !(@script && @script[:run]) }
|
509
|
+
{ script: @output[1], ref: Node.ref, group: group, global: @output[0].nil? && !(@script && @script[:run]) }
|
494
510
|
end
|
495
511
|
end
|
496
512
|
end
|
@@ -116,10 +116,14 @@ module Squared
|
|
116
116
|
end
|
117
117
|
status = lambda do |val, alt = nil|
|
118
118
|
ver = branch || alt
|
119
|
-
|
119
|
+
if ver
|
120
|
+
message(@prefix || '', 'repo', val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail'), ver)
|
121
|
+
else
|
122
|
+
'inactive'
|
123
|
+
end
|
120
124
|
end
|
121
125
|
|
122
|
-
namespace 'repo' do |repo|
|
126
|
+
namespace task_name('repo') do |repo|
|
123
127
|
desc status.('all[{0}]')
|
124
128
|
task 'all', [:opts] do |_, args|
|
125
129
|
parse_opts.(args)
|
@@ -145,8 +149,9 @@ module Squared
|
|
145
149
|
|
146
150
|
desc status.('sync[{0}]')
|
147
151
|
task 'sync', [:opts] do |_, args|
|
148
|
-
|
149
|
-
|
152
|
+
unless branch || stage == 'init'
|
153
|
+
raise_error('repo is not initialized', "rake #{task_name('repo:init')}", kind: LoadError)
|
154
|
+
end
|
150
155
|
parse_opts.(args)
|
151
156
|
cmd << "-j#{ENV.fetch('REPO_JOBS', ::Rake::CpuCounter.count)}"
|
152
157
|
cmd << '--fail-fast' if failfast
|
@@ -154,7 +159,7 @@ module Squared
|
|
154
159
|
begin
|
155
160
|
shell("repo sync #{cmd.join(' ')}", chdir: root, exception: failfast)
|
156
161
|
rescue StandardError => e
|
157
|
-
emphasize(e, title: "rake stash repo:#{stage || 'sync'}")
|
162
|
+
emphasize(e, title: "rake stash #{task_name("repo:#{stage || 'sync'}")}")
|
158
163
|
raise
|
159
164
|
end
|
160
165
|
end
|
@@ -9,21 +9,30 @@ module Squared
|
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
TASK_BASE = %i[build refresh depend outdated doc test copy clean].freeze
|
12
|
+
TASK_ALIAS = {
|
13
|
+
refresh: :build
|
14
|
+
}
|
12
15
|
TASK_KEYS = TASK_BASE.dup
|
13
16
|
TASK_EXTEND = {}
|
14
|
-
private_constant :TASK_BASE, :TASK_KEYS, :TASK_EXTEND
|
17
|
+
private_constant :TASK_BASE, :TASK_ALIAS, :TASK_KEYS, :TASK_EXTEND
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
class << self
|
20
|
+
def add(task, obj)
|
21
|
+
TASK_KEYS << task unless TASK_KEYS.include?(task)
|
22
|
+
(TASK_EXTEND[task] ||= []).push(obj)
|
23
|
+
end
|
24
|
+
|
25
|
+
def alias(key, task)
|
26
|
+
TASK_ALIAS[key.to_sym] = task.to_sym
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
attr_reader :sync, :multiple, :parallel
|
22
31
|
|
23
32
|
def_delegators :@data, :[], :each, :each_key, :keys, :fetch, :to_a, :to_s, :inspect, :merge!, :key?
|
24
33
|
|
25
|
-
def initialize(
|
26
|
-
@
|
34
|
+
def initialize(workspace)
|
35
|
+
@workspace = workspace
|
27
36
|
@sync = []
|
28
37
|
@multiple = []
|
29
38
|
@parallel = []
|
@@ -47,7 +56,10 @@ module Squared
|
|
47
56
|
ws = proj.workspace
|
48
57
|
each do |key, items|
|
49
58
|
task = "#{proj.name}:#{key}"
|
50
|
-
|
59
|
+
unless include?(key) ? proj.has?(key) || ws.task_defined?(key) : ws.task_extend?(proj, key)
|
60
|
+
alt = TASK_ALIAS[key]
|
61
|
+
next unless alt && (task = "#{proj.name}:#{alt}") && self[alt].include?(task)
|
62
|
+
end
|
51
63
|
next unless ws.task_defined?(task)
|
52
64
|
|
53
65
|
if (g = proj.group)
|
@@ -70,12 +82,11 @@ module Squared
|
|
70
82
|
each do |key, items|
|
71
83
|
next if items.empty?
|
72
84
|
|
73
|
-
name = key.to_s
|
74
|
-
|
75
|
-
val = key.split(':').join(' => ')
|
85
|
+
key = @workspace.task_name(name = key.to_s)
|
86
|
+
val = @workspace.task_name(name, desc: true)
|
76
87
|
if items.size > 1
|
77
88
|
@multiple << key
|
78
|
-
if parallel.include?(name) || (
|
89
|
+
if parallel.include?(name) || ((ns = @workspace.task_namespace(name)) && parallel.include?(ns))
|
79
90
|
desc "#{val} (thread)"
|
80
91
|
multitask key => items
|
81
92
|
@parallel << key
|
@@ -90,11 +101,15 @@ module Squared
|
|
90
101
|
desc val
|
91
102
|
task key => items
|
92
103
|
end
|
104
|
+
TASK_ALIAS.each_key do |key|
|
105
|
+
suf = ":#{key}"
|
106
|
+
self[key].clear unless self[key].any? { |val| val.end_with?(suf) }
|
107
|
+
end
|
93
108
|
@multiple += sync
|
94
109
|
@session = nil
|
95
110
|
end
|
96
111
|
|
97
|
-
def
|
112
|
+
def some?(key)
|
98
113
|
!key.nil? && key?(key = key.to_sym) && !self[key].empty?
|
99
114
|
end
|
100
115
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: squared
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- An Pham
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|