avm-tools 0.13.0 → 0.14.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: 0e358cd10846dd42a33702ee9bcc47ac075d2c2df7e4019aff7876055d3e98d3
4
- data.tar.gz: 198439929cad2eeeea336efff95b90c1a19fd83d187ba49e33f7ba9d77f49b84
3
+ metadata.gz: e397269b3172cef0af4f83f2c7276fb9dcb51c6d457f7278940701c473d41402
4
+ data.tar.gz: 20797859192beecaaafba3f3af1d6c70fb538248b836611d1a37425e43920c62
5
5
  SHA512:
6
- metadata.gz: e158e9238bb5283e8797dc7be877f1c76a76c64f2cfe43ac360a28d378555abcff90ce55b07f0bb145f17e9c7af43a3456c66e12ae1a22d8c2bf6fa92ab8c01a
7
- data.tar.gz: f86650bedb0fff3104e595dfb69ceb42bf60209a66af36e8ff96e500a7ee8720f8151071d6d6d6ff36bd4272f755a7818ad90f401288f441223907f889304311
6
+ metadata.gz: 8114b94bf8609107a002aaf93f99f70594f12ccdb92e009f8a86d28e2a41a1e3853f9adf877eca5e1fa2d120fb23e8ec8bb814123eae80770d62ecf0dfbd3a22
7
+ data.tar.gz: bac5f7db55ac67de51619596789953161386565bc19ceed6bc3537a6cb9f034e1ab365d7eff0c86eebf1a049bd5a55d281867977e622e539d4cbbd2df2f2e833
data/lib/avm.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  module Avm
4
4
  require 'avm/configs'
5
5
  require 'avm/data'
6
+ require 'avm/executables'
6
7
  require 'avm/git'
7
8
  require 'avm/instances'
8
9
  require 'avm/patches'
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/envs'
4
+
5
+ module Avm
6
+ module Executables
7
+ class << self
8
+ def env
9
+ ::EacRubyUtils::Envs.local
10
+ end
11
+
12
+ def git
13
+ @git ||= env.executable('git', '--version')
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'addressable'
4
+ require 'eac_ruby_utils/simple_cache'
5
+ require 'eac_ruby_utils/require_sub'
6
+ ::EacRubyUtils.require_sub(__FILE__)
7
+
8
+ module Avm
9
+ module Git
10
+ class Commit
11
+ class << self
12
+ def target_url_to_env_path(target_url)
13
+ uri = ::Addressable::URI.parse(target_url)
14
+ uri.scheme = 'file' if uri.scheme.blank?
15
+ [uri_to_env(uri), uri.path]
16
+ end
17
+
18
+ private
19
+
20
+ def uri_to_env(uri)
21
+ case uri.scheme
22
+ when 'file' then ::EacRubyUtils::Envs.local
23
+ when 'ssh' then ::EacRubyUtils::Envs.ssh(uri.authority)
24
+ else "Invalid schema \"#{uri.schema}\" (URI: #{uri})"
25
+ end
26
+ end
27
+ end
28
+
29
+ def deploy_to_env_path(target_env, target_path)
30
+ Deploy.new(self, target_env, target_path)
31
+ end
32
+
33
+ def deploy_to_url(target_url)
34
+ Deploy.new(self, *self.class.target_url_to_env_path(target_url))
35
+ end
36
+
37
+ class Deploy
38
+ include ::EacRubyUtils::SimpleCache
39
+
40
+ attr_reader :commit, :target_env, :target_path
41
+
42
+ def initialize(commit, target_env, target_path)
43
+ @commit = commit
44
+ @target_env = target_env
45
+ @target_path = target_path
46
+ run
47
+ end
48
+
49
+ private
50
+
51
+ def run
52
+ mkdir_target
53
+ clear_content
54
+ send_untar_package
55
+ end
56
+
57
+ def mkdir_target
58
+ target_env.command('mkdir', '-p', target_path).execute!
59
+ end
60
+
61
+ def clear_content
62
+ target_env.command(
63
+ 'find', target_path, '-mindepth', 1, '-exec', 'rm', '-rf', '{}', ';'
64
+ ).execute!
65
+ end
66
+
67
+ def send_untar_package
68
+ git_archive_command.pipe(untar_command).execute!
69
+ end
70
+
71
+ def git_archive_command
72
+ commit.git.command('archive', '--format=tar', commit.sha1)
73
+ end
74
+
75
+ def untar_command
76
+ target_env.command('tar', '-xf', '-', '-C', target_path)
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/envs'
4
+ require 'eac_launcher/git/base'
5
+ require 'fileutils'
6
+ require 'tmpdir'
7
+
8
+ module Avm
9
+ module Git
10
+ module SpecHelper
11
+ def stubbed_git_repository(bare = false)
12
+ path = ::Dir.mktmpdir
13
+ ::EacRubyUtils::Envs.local.command(stubbed_git_repository_args(path, bare)).execute!
14
+ StubbedGitRepository.new(path)
15
+ end
16
+
17
+ private
18
+
19
+ def stubbed_git_repository_args(path, bare)
20
+ r = %w[git init]
21
+ r << '--bare' if bare
22
+ r + [path]
23
+ end
24
+
25
+ class StubbedGitRepository < ::EacLauncher::Git::Base
26
+ def file(*subpath)
27
+ StubbedGitRepositoryFile.new(self, subpath)
28
+ end
29
+ end
30
+
31
+ class StubbedGitRepositoryFile
32
+ attr_reader :git, :subpath
33
+
34
+ def initialize(git, subpath)
35
+ @git = git
36
+ @subpath = subpath
37
+ end
38
+
39
+ def path
40
+ ::File.join(git, *subpath)
41
+ end
42
+
43
+ def touch
44
+ ::FileUtils.touch(path)
45
+ end
46
+
47
+ def delete
48
+ ::File.unlink(path)
49
+ end
50
+
51
+ def write(content)
52
+ ::File.write(path, content)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -12,6 +12,11 @@ module Avm
12
12
  args, options = build_args(args)
13
13
  ::EacRubyUtils::Envs.local.command(*args).execute(options)
14
14
  end
15
+
16
+ def command(*args)
17
+ args, _options = build_args(args)
18
+ ::EacRubyUtils::Envs.local.command(*args)
19
+ end
15
20
  end
16
21
  end
17
22
  end
@@ -17,7 +17,12 @@ module Avm
17
17
 
18
18
  Options:
19
19
  -h --help Show this screen.
20
+ -C <path> Path to Git repository [default: .].
20
21
  DOCOPT
22
+
23
+ def repository_path
24
+ options.fetch('-C')
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -24,7 +24,6 @@ module Avm
24
24
 
25
25
  Options:
26
26
  -h --help Mostra esta ajuda.
27
- -C <git-local> Caminho do repositório local [default: .].
28
27
  -f --files Mostra os arquivos.
29
28
  -s --size Mostra o tamanho de arquivos.
30
29
  DOCOPT
@@ -87,7 +86,7 @@ module Avm
87
86
  end
88
87
 
89
88
  def git_uncached
90
- ::EacLauncher::Git::Base.new(options.fetch('-C'))
89
+ ::EacLauncher::Git::Base.new(context(:repository_path))
91
90
  end
92
91
 
93
92
  def commit_uncached
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/console/docopt_runner'
4
+ require 'eac_ruby_utils/console/speaker'
5
+ require 'eac_ruby_utils/simple_cache'
6
+ require 'eac_launcher/git/base'
7
+ require 'avm/git/commit'
8
+
9
+ module Avm
10
+ module Tools
11
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
12
+ class Git < ::EacRubyUtils::Console::DocoptRunner
13
+ class Deploy < ::EacRubyUtils::Console::DocoptRunner
14
+ include ::EacRubyUtils::SimpleCache
15
+ include ::EacRubyUtils::Console::Speaker
16
+
17
+ DOC = <<~DOCOPT
18
+ Deploy a Git revision to a location (Local or remote).
19
+
20
+ Usage:
21
+ __PROGRAM__ [options] <target-url>
22
+ __PROGRAM__ -h | --help
23
+
24
+ Options:
25
+ -h --help Mostra esta ajuda.
26
+ -r --reference=<reference> Reference [default: HEAD].
27
+ DOCOPT
28
+
29
+ def run
30
+ input_banner
31
+ validate
32
+ main_info_banner
33
+ deploy
34
+ end
35
+
36
+ private
37
+
38
+ def input_banner
39
+ infov 'Repository', git
40
+ infov 'Reference', reference
41
+ end
42
+
43
+ def validate
44
+ return if reference_sha1.present?
45
+
46
+ fatal_error "Object ID not found for reference \"#{reference}\""
47
+ end
48
+
49
+ def main_info_banner
50
+ infov 'Reference SHA1', reference_sha1
51
+ end
52
+
53
+ def reference_sha1_uncached
54
+ git.rev_parse(reference)
55
+ end
56
+
57
+ def reference
58
+ options.fetch('--reference')
59
+ end
60
+
61
+ def git_uncached
62
+ ::EacLauncher::Git::Base.new(context(:repository_path))
63
+ end
64
+
65
+ def deploy
66
+ commit = ::Avm::Git::Commit.new(git, reference_sha1)
67
+ commit.deploy_to_url(options.fetch('<target-url>'))
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -21,7 +21,6 @@ module Avm
21
21
 
22
22
  Options:
23
23
  -h --help Show this screen.
24
- -C <path> Path to Git repository [default: .].
25
24
  -B --no-validate-branch Does not validate branch/tag name.
26
25
  -y --yes Does not ask for user confirmation.
27
26
  DOCOPT
@@ -40,7 +39,7 @@ module Avm
40
39
  end
41
40
 
42
41
  def git_complete_issue_options
43
- { dir: options.fetch('-C'),
42
+ { dir: context(:repository_path),
44
43
  no_validate_branch: options.fetch('--no-validate-branch') }
45
44
  end
46
45
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.13.0'
5
+ VERSION = '0.14.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-27 00:00:00.000000000 Z
11
+ date: 2019-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-parsers
@@ -76,14 +76,14 @@ dependencies:
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '0.12'
79
+ version: '0.13'
80
80
  type: :runtime
81
81
  prerelease: false
82
82
  version_requirements: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
- version: '0.12'
86
+ version: '0.13'
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: filesize
89
89
  requirement: !ruby/object:Gem::Requirement
@@ -179,10 +179,12 @@ files:
179
179
  - lib/avm/data/package/dump.rb
180
180
  - lib/avm/data/package/load.rb
181
181
  - lib/avm/data/unit.rb
182
+ - lib/avm/executables.rb
182
183
  - lib/avm/files.rb
183
184
  - lib/avm/files/rotate.rb
184
185
  - lib/avm/git.rb
185
186
  - lib/avm/git/commit.rb
187
+ - lib/avm/git/commit/deploy.rb
186
188
  - lib/avm/git/commit/diff_tree_line.rb
187
189
  - lib/avm/git/commit/file.rb
188
190
  - lib/avm/git/issue.rb
@@ -194,6 +196,7 @@ files:
194
196
  - lib/avm/git/issue/complete/_remote.rb
195
197
  - lib/avm/git/issue/complete/_tracker.rb
196
198
  - lib/avm/git/issue/complete/_validations.rb
199
+ - lib/avm/git/spec_helper.rb
197
200
  - lib/avm/instances.rb
198
201
  - lib/avm/instances/application.rb
199
202
  - lib/avm/instances/base.rb
@@ -219,6 +222,7 @@ files:
219
222
  - lib/avm/tools/runner/files/rotate.rb
220
223
  - lib/avm/tools/runner/git.rb
221
224
  - lib/avm/tools/runner/git/commit.rb
225
+ - lib/avm/tools/runner/git/deploy.rb
222
226
  - lib/avm/tools/runner/git/issue.rb
223
227
  - lib/avm/tools/runner/git/issue/complete.rb
224
228
  - lib/avm/tools/version.rb