afterlife 1.0.0 → 1.2.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 +4 -4
- data/.rubocop.yml +1 -1
- data/afterlife.gemspec +4 -2
- data/lib/afterlife/cli.rb +6 -63
- data/lib/afterlife/config/cli.rb +21 -0
- data/lib/afterlife/config/provider.rb +31 -0
- data/lib/afterlife/config.rb +1 -24
- data/lib/afterlife/deploy/cdn_deployment.rb +22 -4
- data/lib/afterlife/deploy/cdn_stenciljs_deployment.rb +30 -0
- data/lib/afterlife/deploy/cli.rb +69 -0
- data/lib/afterlife/deploy/custom_deployment.rb +23 -0
- data/lib/afterlife/deploy/deployment.rb +5 -7
- data/lib/afterlife/deploy.rb +27 -24
- data/lib/afterlife/exec.rb +1 -1
- data/lib/afterlife/repo/config.rb +54 -0
- data/lib/afterlife/repo/provider.rb +47 -0
- data/lib/afterlife/repo.rb +5 -43
- data/lib/afterlife/version.rb +1 -1
- data/lib/afterlife.rb +1 -1
- metadata +10 -5
- data/Rakefile +0 -17
- data/yarn.lock +0 -260
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed6b64b46c70114724bb7961af7c384c079bc7917a69e83a3c4f5dce62152ecc
|
4
|
+
data.tar.gz: 8da0219c81a43ac90190721388bc5cc4afc685ec377caebe8a8ab04331fe3df0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fbb65c54f1e464917dab23183f6e376cd594de9de50aa9462225f06285234759cc6ec6092f164a2dc674426ad674938d2d03d958195bc2286de6dad470833d8
|
7
|
+
data.tar.gz: c57a701252b3b7c919a45c4164c26d5ce10086f55f222d66bf0afe8592dacb28875ffadf69d04a10d021b5530c36daf36d5c18a5f309e50e3e24001a8da50cb7
|
data/.rubocop.yml
CHANGED
data/afterlife.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ['Genaro Madrid']
|
9
9
|
spec.email = ['genmadrid@gmail.com']
|
10
10
|
|
11
|
-
spec.summary = 'Devops
|
11
|
+
spec.summary = 'Devops utils'
|
12
12
|
spec.description = 'Afterlife helps you setup your development environment and deploy code easily'
|
13
13
|
spec.required_ruby_version = '>= 2.6'
|
14
14
|
|
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
20
|
spec.files = Dir.chdir(__dir__) do
|
21
21
|
`git ls-files -z`.split("\x0").reject do |f|
|
22
|
-
(f == __FILE__) ||
|
22
|
+
(f == __FILE__) ||
|
23
|
+
f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) ||
|
24
|
+
f.match(/Rakefile/)
|
23
25
|
end
|
24
26
|
end
|
25
27
|
spec.bindir = 'exe'
|
data/lib/afterlife/cli.rb
CHANGED
@@ -22,45 +22,21 @@ module Afterlife
|
|
22
22
|
log_success 'afterlife is ready!'
|
23
23
|
end
|
24
24
|
|
25
|
-
desc 'config
|
26
|
-
|
27
|
-
path = path.split('.').map(&:to_sym)
|
28
|
-
result = repo.conf.dig(*path)
|
29
|
-
case result
|
30
|
-
when Hash
|
31
|
-
say JSON.generate(result)
|
32
|
-
when Array
|
33
|
-
result.each do |item|
|
34
|
-
say item
|
35
|
-
end
|
36
|
-
else
|
37
|
-
say result
|
38
|
-
end
|
39
|
-
end
|
25
|
+
desc 'config', 'Repo configuration options'
|
26
|
+
subcommand 'config', Config::Cli
|
40
27
|
|
41
28
|
desc 'cdn', 'CDN stuff'
|
42
29
|
subcommand 'cdn', Cdn::Cli
|
43
30
|
|
44
|
-
desc 'deploy <stage>', 'Deploy current
|
31
|
+
desc 'deploy <stage>', 'Deploy current repo'
|
45
32
|
option 'no-build', type: :boolean
|
46
33
|
option 'no-install', type: :boolean
|
47
34
|
option 'dry-run', type: :boolean
|
48
35
|
option 'skip-after-hooks', type: :boolean
|
49
36
|
option :yes, type: :boolean
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
Afterlife.cli = self
|
54
|
-
Afterlife.current_stage = Afterlife.config.stages[stage.to_sym]
|
55
|
-
fill_env
|
56
|
-
ask_confirmation(repo.confirmation_message) unless options['yes']
|
57
|
-
install_dependencies unless options['no-install']
|
58
|
-
build unless options['no-build']
|
59
|
-
|
60
|
-
say_status 'Deploying', repo.dist_path
|
61
|
-
output = Deploy.call
|
62
|
-
say_status 'Deployed', output
|
63
|
-
rescue Deploy::Error => e
|
37
|
+
def deploy(stage)
|
38
|
+
invoke Deploy::Cli, :call, [stage], options
|
39
|
+
rescue Deploy::Error
|
64
40
|
fatal!(e.message)
|
65
41
|
rescue Interrupt
|
66
42
|
log_interrupted
|
@@ -77,39 +53,6 @@ module Afterlife
|
|
77
53
|
|
78
54
|
private
|
79
55
|
|
80
|
-
def fill_env
|
81
|
-
repo.env.merge!(
|
82
|
-
'DIST_PATH' => repo.dist_path.to_s,
|
83
|
-
'CURRENT_BRANCH' => repo.current_branch,
|
84
|
-
'AFTERLIFE_STAGE' => Afterlife.current_stage.name,
|
85
|
-
)
|
86
|
-
end
|
87
|
-
|
88
|
-
def install_dependencies
|
89
|
-
return unless repo.install_dependencies_command
|
90
|
-
|
91
|
-
say_status 'Installing', '*' * 20
|
92
|
-
Exec.run(repo.install_dependencies_command)
|
93
|
-
end
|
94
|
-
|
95
|
-
def build
|
96
|
-
return unless repo.build_command
|
97
|
-
|
98
|
-
say_status 'Building', '*' * 20
|
99
|
-
Exec.run(repo.build_command)
|
100
|
-
end
|
101
|
-
|
102
|
-
def ask_confirmation(message)
|
103
|
-
if message
|
104
|
-
say message
|
105
|
-
else
|
106
|
-
say set_color("You're about to deploy the contents of '#{repo.dist_path}' to")
|
107
|
-
say set_color(Cdn.url(repo), :bold)
|
108
|
-
say set_color("\nWARNING: Please be aware that this may be a destructive operation", :yellow)
|
109
|
-
end
|
110
|
-
exit 1 unless yes?('Are you sure? [y/n]')
|
111
|
-
end
|
112
|
-
|
113
56
|
def repo
|
114
57
|
Afterlife.current_repo
|
115
58
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Config
|
5
|
+
class Cli < Thor
|
6
|
+
include BaseCli
|
7
|
+
def self.exit_on_failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'get <path>', 'get config path'
|
12
|
+
def get(path)
|
13
|
+
Repo::Config.read(path) do |value|
|
14
|
+
say value
|
15
|
+
end
|
16
|
+
rescue Repo::Config::Error => e
|
17
|
+
fatal!(e.message)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Config
|
5
|
+
class Provider
|
6
|
+
def self.file
|
7
|
+
Afterlife.local_path.join('config.yml')
|
8
|
+
end
|
9
|
+
|
10
|
+
def respond_to_missing?(sym, include_all)
|
11
|
+
config.key?(sym) || super
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(sym, *args, &block)
|
15
|
+
config.key?(sym) ? config[sym] : super
|
16
|
+
end
|
17
|
+
|
18
|
+
def stages
|
19
|
+
@stages ||= config.delete(:stages)&.to_h do |name, val|
|
20
|
+
[name, Stage.new(val.merge(name: name.to_s))]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def config
|
27
|
+
@config ||= YAML.load_file(Provider.file).deep_symbolize_keys
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/afterlife/config.rb
CHANGED
@@ -1,29 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
5
|
-
def self.file
|
6
|
-
Afterlife.local_path.join('config.yml')
|
7
|
-
end
|
8
|
-
|
9
|
-
def respond_to_missing?(sym, include_all)
|
10
|
-
config.key?(sym) || super
|
11
|
-
end
|
12
|
-
|
13
|
-
def method_missing(sym, *args, &block)
|
14
|
-
config.key?(sym) ? config[sym] : super
|
15
|
-
end
|
16
|
-
|
17
|
-
def stages
|
18
|
-
@stages ||= config.delete(:stages)&.to_h do |name, val|
|
19
|
-
[name, Stage.new(val.merge(name: name.to_s))]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def config
|
26
|
-
@config ||= YAML.load_file(Config.file).deep_symbolize_keys
|
27
|
-
end
|
4
|
+
module Config
|
28
5
|
end
|
29
6
|
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
4
|
+
module Deploy
|
5
5
|
class CdnDeployment < Deployment
|
6
6
|
def run
|
7
7
|
Exec.run(commands)
|
8
|
+
end
|
9
|
+
|
10
|
+
def output
|
8
11
|
Cdn.url(repo)
|
9
12
|
end
|
10
13
|
|
@@ -17,6 +20,15 @@ module Afterlife
|
|
17
20
|
)
|
18
21
|
end
|
19
22
|
|
23
|
+
def initial_message
|
24
|
+
repo.dist_path
|
25
|
+
end
|
26
|
+
|
27
|
+
def confirmation_message
|
28
|
+
repo.confirmation_message ||
|
29
|
+
"You are about to deploy the contents of '#{repo.dist_path}' to"
|
30
|
+
end
|
31
|
+
|
20
32
|
private
|
21
33
|
|
22
34
|
def commands
|
@@ -35,18 +47,24 @@ module Afterlife
|
|
35
47
|
%<S3_FULL_PATH>s
|
36
48
|
--exclude '*.ts'
|
37
49
|
--exclude '*.tsx'
|
38
|
-
--
|
50
|
+
--size-only
|
51
|
+
--cache-control 'public, max-age=31540000'
|
39
52
|
BASH
|
40
53
|
end
|
41
54
|
|
42
55
|
def revision
|
43
56
|
<<-BASH
|
44
|
-
echo "#{repo.current_revision}" |
|
57
|
+
echo "#{repo.current_revision}" |
|
58
|
+
aws s3 cp --content-type text/plain --cache-control 'no-cache' - #{s3_revision_path}
|
45
59
|
BASH
|
46
60
|
end
|
47
61
|
|
62
|
+
def s3_revision_path
|
63
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}/revision"
|
64
|
+
end
|
65
|
+
|
48
66
|
def s3_full_path
|
49
|
-
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}"
|
67
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}/#{repo.current_revision}"
|
50
68
|
end
|
51
69
|
end
|
52
70
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Deploy
|
5
|
+
class CdnStenciljsDeployment < CdnDeployment
|
6
|
+
private
|
7
|
+
|
8
|
+
def commands
|
9
|
+
[
|
10
|
+
add_revision_command,
|
11
|
+
repo_command || javascripts,
|
12
|
+
revision,
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_revision_command
|
17
|
+
Dir["#{repo.dist_path}/*.esm.js"].map do |file|
|
18
|
+
next if file.include?(repo.current_revision)
|
19
|
+
|
20
|
+
new_name = file.gsub('.esm.js', "-#{repo.current_revision}.esm.js")
|
21
|
+
"mv #{file} #{new_name}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def s3_full_path
|
26
|
+
"s3://#{Afterlife.current_stage.bucket}/#{repo.full_name}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Deploy
|
5
|
+
class Cli < Thor
|
6
|
+
include BaseCli
|
7
|
+
def self.exit_on_failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'deploy <stage>', 'Deploy current repo'
|
12
|
+
def call(stage)
|
13
|
+
Afterlife.cli = self
|
14
|
+
Deploy.call(stage) do |deployment|
|
15
|
+
setup_deploy(deployment)
|
16
|
+
say_status 'Deploying', deployment.initial_message
|
17
|
+
deployment.run
|
18
|
+
say_status 'Deployed', deployment.output
|
19
|
+
run_after_hooks
|
20
|
+
end
|
21
|
+
rescue Deploy::Error => e
|
22
|
+
fatal!(e.message)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def run_after_hooks
|
28
|
+
return if options['skip-after-hooks']
|
29
|
+
|
30
|
+
commands = repo.conf.dig(:deploy, :after)
|
31
|
+
return unless commands
|
32
|
+
|
33
|
+
say_status 'After hooks', ''
|
34
|
+
Exec.run(commands)
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup_deploy(deployment)
|
38
|
+
ask_confirmation(deployment) unless options['yes']
|
39
|
+
install_dependencies unless options['no-install']
|
40
|
+
build unless options['no-build']
|
41
|
+
end
|
42
|
+
|
43
|
+
def ask_confirmation(deployment)
|
44
|
+
say set_color(deployment.confirmation_message)
|
45
|
+
say set_color(deployment.output, :bold) if deployment.output
|
46
|
+
say set_color("\nWARNING: Please be aware that this may be a destructive operation", :yellow)
|
47
|
+
exit 1 unless yes?('Are you sure? [y/n]')
|
48
|
+
end
|
49
|
+
|
50
|
+
def install_dependencies
|
51
|
+
return unless repo.install_dependencies_command
|
52
|
+
|
53
|
+
say_status 'Installing', '*' * 20
|
54
|
+
Exec.run(repo.install_dependencies_command)
|
55
|
+
end
|
56
|
+
|
57
|
+
def build
|
58
|
+
return unless repo.build_command
|
59
|
+
|
60
|
+
say_status 'Building', '*' * 20
|
61
|
+
Exec.run(repo.build_command)
|
62
|
+
end
|
63
|
+
|
64
|
+
def repo
|
65
|
+
Afterlife.current_repo
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
module Deploy
|
5
|
+
class CustomDeployment < Deployment
|
6
|
+
def run
|
7
|
+
Exec.run(commands)
|
8
|
+
end
|
9
|
+
|
10
|
+
def confirmation_message
|
11
|
+
'You are about to deploy the current directory'
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def commands
|
17
|
+
[
|
18
|
+
repo_command,
|
19
|
+
].flatten
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,22 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
4
|
+
module Deploy
|
5
5
|
class Deployment
|
6
|
-
def self.run
|
7
|
-
deployment = new.tap(&:setup)
|
8
|
-
deployment.run
|
9
|
-
end
|
10
|
-
|
11
6
|
def run
|
12
7
|
fail NotImplementedError
|
13
8
|
end
|
14
9
|
|
15
10
|
def repo_command
|
16
|
-
Array(repo.conf.dig(:deploy, :command))
|
11
|
+
Array(repo.conf.dig(:deploy, :command)).presence
|
17
12
|
end
|
18
13
|
|
19
14
|
def setup; end
|
15
|
+
def output; end
|
16
|
+
def initial_message; end
|
17
|
+
def confirmation_message; end
|
20
18
|
|
21
19
|
protected
|
22
20
|
|
data/lib/afterlife/deploy.rb
CHANGED
@@ -1,44 +1,47 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Afterlife
|
4
|
-
|
5
|
-
|
4
|
+
module Deploy
|
5
|
+
module_function
|
6
6
|
|
7
|
-
|
8
|
-
new.deploy
|
9
|
-
end
|
7
|
+
Error = Class.new StandardError
|
10
8
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
def call(stage)
|
10
|
+
deployment = klass.new
|
11
|
+
setup_stage(stage)
|
12
|
+
fill_env
|
13
|
+
deployment.setup
|
14
|
+
yield deployment
|
15
|
+
deployment
|
17
16
|
end
|
18
17
|
|
19
|
-
|
18
|
+
def klass
|
19
|
+
klass = "#{current_type.gsub('-', '_')}_deployment".classify
|
20
|
+
fail Error, "deployment type '#{current_type}' is invalid" unless const_defined?(klass)
|
20
21
|
|
21
|
-
|
22
|
-
case deployment_type
|
23
|
-
when 'cdn'
|
24
|
-
CdnDeployment.run
|
25
|
-
end
|
22
|
+
const_get(klass)
|
26
23
|
end
|
27
24
|
|
28
|
-
def
|
29
|
-
|
25
|
+
def current_type
|
26
|
+
Afterlife.current_repo.conf.dig(:deploy, :type).tap do |result|
|
30
27
|
fail Error, 'deploy.type must be defined if you want to deploy with Afterlife' unless result
|
31
28
|
end
|
32
29
|
end
|
33
30
|
|
34
|
-
def
|
35
|
-
|
31
|
+
def setup_stage(stage)
|
32
|
+
unless Afterlife.config.stages.key?(stage.to_sym)
|
33
|
+
fail Error, "invalid stage '#{stage}'. Possible values: #{Afterlife.config.stages.keys.map(&:to_s)}"
|
34
|
+
end
|
36
35
|
|
37
|
-
|
36
|
+
Afterlife.current_stage = Afterlife.config.stages[stage.to_sym]
|
38
37
|
end
|
39
38
|
|
40
|
-
def
|
41
|
-
Afterlife.current_repo
|
39
|
+
def fill_env
|
40
|
+
Afterlife.current_repo.env.merge!(
|
41
|
+
'DIST_PATH' => Afterlife.current_repo.dist_path.to_s,
|
42
|
+
'CURRENT_BRANCH' => Afterlife.current_repo.current_branch,
|
43
|
+
'AFTERLIFE_STAGE' => Afterlife.current_stage.name,
|
44
|
+
)
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
data/lib/afterlife/exec.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
class Repo
|
5
|
+
class Config
|
6
|
+
Error = Class.new StandardError
|
7
|
+
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
def self.read(path, &block)
|
11
|
+
new(path).read(&block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(path)
|
15
|
+
@path = path.split('.').map(&:to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
def read(&block) # rubocop:disable Metrics/MethodLength
|
19
|
+
case from_yml
|
20
|
+
when Hash
|
21
|
+
yield(JSON.generate(from_yml))
|
22
|
+
when Array
|
23
|
+
from_yml.each(&block)
|
24
|
+
when String, Symbol
|
25
|
+
yield(from_yml)
|
26
|
+
else
|
27
|
+
fail Error, "No config with path '#{path.join('.')}'" unless repo_method?
|
28
|
+
|
29
|
+
yield(repo.public_send(repo_method))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def repo_method?
|
36
|
+
path.count == 1 && repo.public_methods(false).include?(repo_method)
|
37
|
+
end
|
38
|
+
|
39
|
+
def repo_method
|
40
|
+
@repo_method ||= path.first.to_s.gsub('-', '_').to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
def repo
|
44
|
+
Afterlife.current_repo
|
45
|
+
end
|
46
|
+
|
47
|
+
def from_yml
|
48
|
+
return @from_yml if defined?(@from_yml)
|
49
|
+
|
50
|
+
@from_yml ||= repo.conf.dig(*path)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Afterlife
|
4
|
+
class Repo
|
5
|
+
class Provider
|
6
|
+
CONFIG_NAME = '.afterlife.yml'
|
7
|
+
|
8
|
+
attr_reader :full_path
|
9
|
+
|
10
|
+
def initialize(full_path)
|
11
|
+
@full_path = full_path
|
12
|
+
end
|
13
|
+
|
14
|
+
def config
|
15
|
+
return @config if defined?(@config)
|
16
|
+
|
17
|
+
if config_file.exist?
|
18
|
+
@config = base_config
|
19
|
+
@config = parent.deep_merge(base_config) if parent
|
20
|
+
end
|
21
|
+
|
22
|
+
@config ||= {}
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def parent
|
28
|
+
return @parent if defined?(@parent)
|
29
|
+
|
30
|
+
inherit_from = base_config.delete(:inherit_from)
|
31
|
+
return @parent = nil unless inherit_from
|
32
|
+
|
33
|
+
@parent = Provider.new(full_path.join(inherit_from)).config
|
34
|
+
@parent[:cdn]&.delete(:packages)
|
35
|
+
@parent
|
36
|
+
end
|
37
|
+
|
38
|
+
def base_config
|
39
|
+
@base_config ||= YAML.load_file(config_file).deep_symbolize_keys
|
40
|
+
end
|
41
|
+
|
42
|
+
def config_file
|
43
|
+
@config_file ||= full_path.join(CONFIG_NAME)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/afterlife/repo.rb
CHANGED
@@ -74,6 +74,10 @@ module Afterlife
|
|
74
74
|
@current_revision ||= `git rev-parse HEAD`.chomp
|
75
75
|
end
|
76
76
|
|
77
|
+
def current_revision_short
|
78
|
+
@current_revision_short ||= `git rev-parse --short HEAD`.chomp
|
79
|
+
end
|
80
|
+
|
77
81
|
def name
|
78
82
|
full_name.split('/').last.gsub('-', '_')
|
79
83
|
end
|
@@ -110,49 +114,7 @@ module Afterlife
|
|
110
114
|
end
|
111
115
|
|
112
116
|
def conf
|
113
|
-
@conf ||=
|
114
|
-
end
|
115
|
-
|
116
|
-
class Config
|
117
|
-
CONFIG_NAME = '.afterlife.yml'
|
118
|
-
|
119
|
-
attr_reader :full_path
|
120
|
-
|
121
|
-
def initialize(full_path)
|
122
|
-
@full_path = full_path
|
123
|
-
end
|
124
|
-
|
125
|
-
def config
|
126
|
-
return @config if defined?(@config)
|
127
|
-
|
128
|
-
if config_file.exist?
|
129
|
-
@config = base_config
|
130
|
-
@config = parent.deep_merge(base_config) if parent
|
131
|
-
end
|
132
|
-
|
133
|
-
@config ||= {}
|
134
|
-
end
|
135
|
-
|
136
|
-
private
|
137
|
-
|
138
|
-
def parent
|
139
|
-
return @parent if defined?(@parent)
|
140
|
-
|
141
|
-
inherit_from = base_config.delete(:inherit_from)
|
142
|
-
return @parent = nil unless inherit_from
|
143
|
-
|
144
|
-
@parent = Config.new(full_path.join(inherit_from)).config
|
145
|
-
@parent[:cdn]&.delete(:packages)
|
146
|
-
@parent
|
147
|
-
end
|
148
|
-
|
149
|
-
def base_config
|
150
|
-
@base_config ||= YAML.load_file(config_file).deep_symbolize_keys
|
151
|
-
end
|
152
|
-
|
153
|
-
def config_file
|
154
|
-
@config_file ||= full_path.join(CONFIG_NAME)
|
155
|
-
end
|
117
|
+
@conf ||= Provider.new(full_path).config
|
156
118
|
end
|
157
119
|
end
|
158
120
|
end
|
data/lib/afterlife/version.rb
CHANGED
data/lib/afterlife.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: afterlife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genaro Madrid
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -110,7 +110,6 @@ files:
|
|
110
110
|
- CHANGELOG.md
|
111
111
|
- Gemfile
|
112
112
|
- README.md
|
113
|
-
- Rakefile
|
114
113
|
- afterlife.gemspec
|
115
114
|
- config.ru
|
116
115
|
- exe/afterlife
|
@@ -123,8 +122,13 @@ files:
|
|
123
122
|
- lib/afterlife/cdn/server.rb
|
124
123
|
- lib/afterlife/cli.rb
|
125
124
|
- lib/afterlife/config.rb
|
125
|
+
- lib/afterlife/config/cli.rb
|
126
|
+
- lib/afterlife/config/provider.rb
|
126
127
|
- lib/afterlife/deploy.rb
|
127
128
|
- lib/afterlife/deploy/cdn_deployment.rb
|
129
|
+
- lib/afterlife/deploy/cdn_stenciljs_deployment.rb
|
130
|
+
- lib/afterlife/deploy/cli.rb
|
131
|
+
- lib/afterlife/deploy/custom_deployment.rb
|
128
132
|
- lib/afterlife/deploy/deployment.rb
|
129
133
|
- lib/afterlife/environment.rb
|
130
134
|
- lib/afterlife/exec.rb
|
@@ -135,10 +139,11 @@ files:
|
|
135
139
|
- lib/afterlife/release/helper.rb
|
136
140
|
- lib/afterlife/release/pre_helper.rb
|
137
141
|
- lib/afterlife/repo.rb
|
142
|
+
- lib/afterlife/repo/config.rb
|
143
|
+
- lib/afterlife/repo/provider.rb
|
138
144
|
- lib/afterlife/stage.rb
|
139
145
|
- lib/afterlife/version.rb
|
140
146
|
- logs/.keep
|
141
|
-
- yarn.lock
|
142
147
|
homepage:
|
143
148
|
licenses: []
|
144
149
|
metadata:
|
@@ -163,5 +168,5 @@ requirements: []
|
|
163
168
|
rubygems_version: 3.2.33
|
164
169
|
signing_key:
|
165
170
|
specification_version: 4
|
166
|
-
summary: Devops
|
171
|
+
summary: Devops utils
|
167
172
|
test_files: []
|
data/Rakefile
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bundler/gem_tasks'
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
RSpec::Core::RakeTask.new(:spec)
|
7
|
-
|
8
|
-
require 'rubocop/rake_task'
|
9
|
-
|
10
|
-
RuboCop::RakeTask.new
|
11
|
-
|
12
|
-
desc 'start a console'
|
13
|
-
task :console do
|
14
|
-
exec 'pry -r afterlife -I ./lib'
|
15
|
-
end
|
16
|
-
|
17
|
-
task default: %i[spec rubocop]
|
data/yarn.lock
DELETED
@@ -1,260 +0,0 @@
|
|
1
|
-
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
-
# yarn lockfile v1
|
3
|
-
|
4
|
-
|
5
|
-
ansi-styles@^4.1.0:
|
6
|
-
version "4.3.0"
|
7
|
-
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
8
|
-
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
9
|
-
dependencies:
|
10
|
-
color-convert "^2.0.1"
|
11
|
-
|
12
|
-
async@^2.6.4:
|
13
|
-
version "2.6.4"
|
14
|
-
resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
|
15
|
-
integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
|
16
|
-
dependencies:
|
17
|
-
lodash "^4.17.14"
|
18
|
-
|
19
|
-
basic-auth@^2.0.1:
|
20
|
-
version "2.0.1"
|
21
|
-
resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
|
22
|
-
integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
|
23
|
-
dependencies:
|
24
|
-
safe-buffer "5.1.2"
|
25
|
-
|
26
|
-
call-bind@^1.0.0:
|
27
|
-
version "1.0.2"
|
28
|
-
resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
29
|
-
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
|
30
|
-
dependencies:
|
31
|
-
function-bind "^1.1.1"
|
32
|
-
get-intrinsic "^1.0.2"
|
33
|
-
|
34
|
-
chalk@^4.1.2:
|
35
|
-
version "4.1.2"
|
36
|
-
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
37
|
-
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
38
|
-
dependencies:
|
39
|
-
ansi-styles "^4.1.0"
|
40
|
-
supports-color "^7.1.0"
|
41
|
-
|
42
|
-
color-convert@^2.0.1:
|
43
|
-
version "2.0.1"
|
44
|
-
resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
45
|
-
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
46
|
-
dependencies:
|
47
|
-
color-name "~1.1.4"
|
48
|
-
|
49
|
-
color-name@~1.1.4:
|
50
|
-
version "1.1.4"
|
51
|
-
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
52
|
-
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
53
|
-
|
54
|
-
corser@^2.0.1:
|
55
|
-
version "2.0.1"
|
56
|
-
resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
|
57
|
-
integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==
|
58
|
-
|
59
|
-
debug@^3.2.7:
|
60
|
-
version "3.2.7"
|
61
|
-
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
62
|
-
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
63
|
-
dependencies:
|
64
|
-
ms "^2.1.1"
|
65
|
-
|
66
|
-
eventemitter3@^4.0.0:
|
67
|
-
version "4.0.7"
|
68
|
-
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
69
|
-
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
|
70
|
-
|
71
|
-
follow-redirects@^1.0.0:
|
72
|
-
version "1.15.2"
|
73
|
-
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
74
|
-
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
75
|
-
|
76
|
-
function-bind@^1.1.1:
|
77
|
-
version "1.1.1"
|
78
|
-
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
79
|
-
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
80
|
-
|
81
|
-
get-intrinsic@^1.0.2:
|
82
|
-
version "1.1.3"
|
83
|
-
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
|
84
|
-
integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
|
85
|
-
dependencies:
|
86
|
-
function-bind "^1.1.1"
|
87
|
-
has "^1.0.3"
|
88
|
-
has-symbols "^1.0.3"
|
89
|
-
|
90
|
-
has-flag@^4.0.0:
|
91
|
-
version "4.0.0"
|
92
|
-
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
93
|
-
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
94
|
-
|
95
|
-
has-symbols@^1.0.3:
|
96
|
-
version "1.0.3"
|
97
|
-
resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
98
|
-
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
99
|
-
|
100
|
-
has@^1.0.3:
|
101
|
-
version "1.0.3"
|
102
|
-
resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
103
|
-
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
104
|
-
dependencies:
|
105
|
-
function-bind "^1.1.1"
|
106
|
-
|
107
|
-
he@^1.2.0:
|
108
|
-
version "1.2.0"
|
109
|
-
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
110
|
-
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
111
|
-
|
112
|
-
html-encoding-sniffer@^3.0.0:
|
113
|
-
version "3.0.0"
|
114
|
-
resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
|
115
|
-
integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
|
116
|
-
dependencies:
|
117
|
-
whatwg-encoding "^2.0.0"
|
118
|
-
|
119
|
-
http-proxy@^1.18.1:
|
120
|
-
version "1.18.1"
|
121
|
-
resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
|
122
|
-
integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
|
123
|
-
dependencies:
|
124
|
-
eventemitter3 "^4.0.0"
|
125
|
-
follow-redirects "^1.0.0"
|
126
|
-
requires-port "^1.0.0"
|
127
|
-
|
128
|
-
http-server@^14.1.1:
|
129
|
-
version "14.1.1"
|
130
|
-
resolved "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e"
|
131
|
-
integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==
|
132
|
-
dependencies:
|
133
|
-
basic-auth "^2.0.1"
|
134
|
-
chalk "^4.1.2"
|
135
|
-
corser "^2.0.1"
|
136
|
-
he "^1.2.0"
|
137
|
-
html-encoding-sniffer "^3.0.0"
|
138
|
-
http-proxy "^1.18.1"
|
139
|
-
mime "^1.6.0"
|
140
|
-
minimist "^1.2.6"
|
141
|
-
opener "^1.5.1"
|
142
|
-
portfinder "^1.0.28"
|
143
|
-
secure-compare "3.0.1"
|
144
|
-
union "~0.5.0"
|
145
|
-
url-join "^4.0.1"
|
146
|
-
|
147
|
-
iconv-lite@0.6.3:
|
148
|
-
version "0.6.3"
|
149
|
-
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
150
|
-
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
151
|
-
dependencies:
|
152
|
-
safer-buffer ">= 2.1.2 < 3.0.0"
|
153
|
-
|
154
|
-
lodash@^4.17.14:
|
155
|
-
version "4.17.21"
|
156
|
-
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
157
|
-
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
158
|
-
|
159
|
-
mime@^1.6.0:
|
160
|
-
version "1.6.0"
|
161
|
-
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
162
|
-
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
163
|
-
|
164
|
-
minimist@^1.2.6:
|
165
|
-
version "1.2.7"
|
166
|
-
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
|
167
|
-
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
|
168
|
-
|
169
|
-
mkdirp@^0.5.6:
|
170
|
-
version "0.5.6"
|
171
|
-
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
172
|
-
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
173
|
-
dependencies:
|
174
|
-
minimist "^1.2.6"
|
175
|
-
|
176
|
-
ms@^2.1.1:
|
177
|
-
version "2.1.3"
|
178
|
-
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
179
|
-
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
180
|
-
|
181
|
-
object-inspect@^1.9.0:
|
182
|
-
version "1.12.2"
|
183
|
-
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
|
184
|
-
integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
|
185
|
-
|
186
|
-
opener@^1.5.1:
|
187
|
-
version "1.5.2"
|
188
|
-
resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
|
189
|
-
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
|
190
|
-
|
191
|
-
portfinder@^1.0.28:
|
192
|
-
version "1.0.32"
|
193
|
-
resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
|
194
|
-
integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==
|
195
|
-
dependencies:
|
196
|
-
async "^2.6.4"
|
197
|
-
debug "^3.2.7"
|
198
|
-
mkdirp "^0.5.6"
|
199
|
-
|
200
|
-
qs@^6.4.0:
|
201
|
-
version "6.11.0"
|
202
|
-
resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
|
203
|
-
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
|
204
|
-
dependencies:
|
205
|
-
side-channel "^1.0.4"
|
206
|
-
|
207
|
-
requires-port@^1.0.0:
|
208
|
-
version "1.0.0"
|
209
|
-
resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
210
|
-
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
|
211
|
-
|
212
|
-
safe-buffer@5.1.2:
|
213
|
-
version "5.1.2"
|
214
|
-
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
215
|
-
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
216
|
-
|
217
|
-
"safer-buffer@>= 2.1.2 < 3.0.0":
|
218
|
-
version "2.1.2"
|
219
|
-
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
220
|
-
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
221
|
-
|
222
|
-
secure-compare@3.0.1:
|
223
|
-
version "3.0.1"
|
224
|
-
resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"
|
225
|
-
integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==
|
226
|
-
|
227
|
-
side-channel@^1.0.4:
|
228
|
-
version "1.0.4"
|
229
|
-
resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
230
|
-
integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
|
231
|
-
dependencies:
|
232
|
-
call-bind "^1.0.0"
|
233
|
-
get-intrinsic "^1.0.2"
|
234
|
-
object-inspect "^1.9.0"
|
235
|
-
|
236
|
-
supports-color@^7.1.0:
|
237
|
-
version "7.2.0"
|
238
|
-
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
|
239
|
-
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
|
240
|
-
dependencies:
|
241
|
-
has-flag "^4.0.0"
|
242
|
-
|
243
|
-
union@~0.5.0:
|
244
|
-
version "0.5.0"
|
245
|
-
resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075"
|
246
|
-
integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==
|
247
|
-
dependencies:
|
248
|
-
qs "^6.4.0"
|
249
|
-
|
250
|
-
url-join@^4.0.1:
|
251
|
-
version "4.0.1"
|
252
|
-
resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
|
253
|
-
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
|
254
|
-
|
255
|
-
whatwg-encoding@^2.0.0:
|
256
|
-
version "2.0.0"
|
257
|
-
resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
|
258
|
-
integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
|
259
|
-
dependencies:
|
260
|
-
iconv-lite "0.6.3"
|