avmtrf1-tools 0.33.0 → 0.34.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/avmtrf1/active_directory/user.rb +3 -3
- data/lib/avmtrf1/core_ext.rb +4 -0
- data/lib/avmtrf1/default_jira.rb +3 -2
- data/lib/avmtrf1/docker/image.rb +12 -0
- data/lib/avmtrf1/docker/image_runner.rb +83 -0
- data/lib/avmtrf1/forponto/user/month.rb +0 -1
- data/lib/avmtrf1/git/cached_repository.rb +2 -2
- data/lib/avmtrf1/git/issue_on_repository.rb +2 -2
- data/lib/avmtrf1/git/push_large/lfs_commit/cache.rb +19 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/checkout_previous_revision.rb +35 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/commit_changes.rb +48 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/helpers.rb +29 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/pick_source_revision.rb +103 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/push.rb +90 -0
- data/lib/avmtrf1/git/push_large/lfs_commit/track_large_files.rb +53 -0
- data/lib/avmtrf1/git/push_large/lfs_commit.rb +5 -10
- data/lib/avmtrf1/git/push_large/source_commit/push.rb +42 -0
- data/lib/avmtrf1/git/push_large/source_commit.rb +4 -7
- data/lib/avmtrf1/git/push_large.rb +6 -6
- data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +1 -1
- data/lib/avmtrf1/node_js/docker_image.rb +10 -0
- data/lib/avmtrf1/node_js.rb +9 -0
- data/lib/avmtrf1/patches/avm/git/issue.rb +4 -0
- data/lib/avmtrf1/patches/avm/git.rb +4 -0
- data/lib/avmtrf1/patches/avm/launcher/git/base.rb +46 -0
- data/lib/avmtrf1/patches/avm/launcher/git.rb +4 -0
- data/lib/avmtrf1/patches/avm/launcher.rb +4 -0
- data/lib/avmtrf1/patches/avm.rb +4 -0
- data/lib/avmtrf1/patches.rb +3 -0
- data/lib/avmtrf1/php/docker_image.rb +2 -19
- data/lib/avmtrf1/red/helper.rb +2 -2
- data/lib/avmtrf1/template.rb +2 -2
- data/lib/avmtrf1/tools/runner/check_point/login.rb +6 -19
- data/lib/avmtrf1/tools/runner/check_point.rb +7 -13
- data/lib/avmtrf1/tools/runner/esosti/changed.rb +9 -22
- data/lib/avmtrf1/tools/runner/esosti/fetch.rb +9 -22
- data/lib/avmtrf1/tools/runner/esosti/request.rb +17 -29
- data/lib/avmtrf1/tools/runner/esosti.rb +8 -20
- data/lib/avmtrf1/tools/runner/forponto/espelho.rb +11 -21
- data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +7 -18
- data/lib/avmtrf1/tools/runner/forponto/resumos.rb +7 -19
- data/lib/avmtrf1/tools/runner/forponto/saldo.rb +10 -21
- data/lib/avmtrf1/tools/runner/forponto.rb +13 -23
- data/lib/avmtrf1/tools/runner/git/issues_check.rb +7 -18
- data/lib/avmtrf1/tools/runner/git/push_large.rb +27 -18
- data/lib/avmtrf1/tools/runner/git.rb +2 -4
- data/lib/avmtrf1/tools/runner/node_js/docker.rb +15 -0
- data/lib/avmtrf1/tools/runner/node_js.rb +18 -0
- data/lib/avmtrf1/tools/runner/oracle/query.rb +9 -13
- data/lib/avmtrf1/tools/runner/oracle/source_get.rb +17 -18
- data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +7 -15
- data/lib/avmtrf1/tools/runner/oracle.rb +15 -22
- data/lib/avmtrf1/tools/runner/php/docker.rb +3 -60
- data/lib/avmtrf1/tools/runner/red.rb +21 -25
- data/lib/avmtrf1/tools/runner/trf1_dspace_base0/deploy.rb +1 -1
- data/lib/avmtrf1/tools/runner/trf1_dspace_base0.rb +9 -18
- data/lib/avmtrf1/tools/runner.rb +5 -2
- data/lib/avmtrf1/tools/version.rb +1 -1
- data/template/avmtrf1/node_js/docker_image/Dockerfile.template +11 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/config_banner.sh +15 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/init.sh +17 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/lib.sh +30 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/ng_serve.sh +16 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/npm_install.sh +21 -0
- data/template/avmtrf1/node_js/docker_image/auxiliary/start.sh +17 -0
- data/template/avmtrf1/php/docker_image/Dockerfile.template +1 -1
- metadata +36 -102
- data/lib/avmtrf1/configs.rb +0 -24
- data/lib/avmtrf1/fs_cache.rb +0 -11
- data/lib/avmtrf1/git/push_large/lfs_commit/_00_checkout_previous_revision.rb +0 -33
- data/lib/avmtrf1/git/push_large/lfs_commit/_01_cherry_pick_source_revision.rb +0 -89
- data/lib/avmtrf1/git/push_large/lfs_commit/_02_track_large_files.rb +0 -51
- data/lib/avmtrf1/git/push_large/lfs_commit/_03_commit_changes.rb +0 -46
- data/lib/avmtrf1/git/push_large/lfs_commit/_04_push.rb +0 -88
- data/lib/avmtrf1/git/push_large/lfs_commit/_cache.rb +0 -17
- data/lib/avmtrf1/git/push_large/lfs_commit/_helpers.rb +0 -27
- data/lib/avmtrf1/git/push_large/source_commit/_push.rb +0 -40
- data/lib/avmtrf1/patches/eac_launcher/git/base.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 721191619e9226448f8b47fcee4b701bb6719ef2647da8485daa97ac35a4ede0
|
4
|
+
data.tar.gz: 4c090c12dc45b3a1791d021c053b5f579e6f1f0b18cdc9a71cff1e1de5d46d67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 757659e4c913b5e3ac291123e47e7d7b50b9583411a31b9b079c2d3070483f9300d3f88539fd9e606df99317bc13d355fcbcd84e1c5f74868252c33b79063fc0
|
7
|
+
data.tar.gz: 78687b9902d833e495821865721006a9f6c73cff652ae0becd84db7952a1a8288828e8c0e30f95c5f6399811547d80aed24afb36792fbd8eadba44fef036debc
|
@@ -6,9 +6,9 @@ module Avmtrf1
|
|
6
6
|
class << self
|
7
7
|
def by_configs(path_prefix)
|
8
8
|
new(
|
9
|
-
::
|
10
|
-
::
|
11
|
-
::
|
9
|
+
::EacConfig::Node.context.current.entry("#{path_prefix}.domain").value,
|
10
|
+
::EacConfig::Node.context.current.entry("#{path_prefix}.username").value,
|
11
|
+
::EacConfig::Node.context.current.entry("#{path_prefix}.password", noecho: true).value
|
12
12
|
)
|
13
13
|
end
|
14
14
|
end
|
data/lib/avmtrf1/default_jira.rb
CHANGED
@@ -9,8 +9,9 @@ module Avmtrf1
|
|
9
9
|
def default_jira
|
10
10
|
@default_jira ||= ::Avmtrf1::Jira::Instance.new(
|
11
11
|
'https://jira.engesoftware.com.br',
|
12
|
-
::
|
13
|
-
::
|
12
|
+
::EacConfig::Node.context.current.entry("#{DEFAULT_JIRA_PATH_PREFIX}.username").value,
|
13
|
+
::EacConfig::Node.context.current
|
14
|
+
.entry("#{DEFAULT_JIRA_PATH_PREFIX}.password", noecho: true).value
|
14
15
|
)
|
15
16
|
end
|
16
17
|
end
|
data/lib/avmtrf1/docker/image.rb
CHANGED
@@ -7,6 +7,18 @@ require 'avmtrf1/template'
|
|
7
7
|
module Avmtrf1
|
8
8
|
module Docker
|
9
9
|
class Image < ::Avm::Docker::Image
|
10
|
+
enable_simple_cache
|
11
|
+
|
12
|
+
common_constructor :registry, :plataform_version
|
13
|
+
|
14
|
+
def plataform_stereotype_tag
|
15
|
+
self.class.name.split('::')[-2].underscore.dasherize
|
16
|
+
end
|
17
|
+
|
18
|
+
def stereotype_tag
|
19
|
+
"#{plataform_stereotype_tag}-#{plataform_version}"
|
20
|
+
end
|
21
|
+
|
10
22
|
def generator_version
|
11
23
|
::Avmtrf1::Tools::VERSION
|
12
24
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_config/node'
|
4
|
+
require 'eac_ruby_base0/core_ext'
|
5
|
+
require 'eac_docker/registry'
|
6
|
+
|
7
|
+
module Avmtrf1
|
8
|
+
module Docker
|
9
|
+
class ImageRunner
|
10
|
+
runner_with :help do
|
11
|
+
bool_opt '-h', '--help', 'Mostra esta ajuda.'
|
12
|
+
bool_opt '-d', '--default', 'Adiciona as versões padrão.'
|
13
|
+
arg_opt '-n', '--registry-name', 'Nome do registro.'
|
14
|
+
bool_opt '-p', '--push', 'Envia a imagem.'
|
15
|
+
bool_opt '-S', '--no-snapshot', 'Não adiciona "-snapshot" no nome da imagem.'
|
16
|
+
bool_opt '-V', '--no-version', 'Não adiciona a versão do gerador no nome da imagem.'
|
17
|
+
pos_arg :version, repeat: true, optional: true
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
infov 'Versions to build', versions_to_s
|
22
|
+
versions.each do |version|
|
23
|
+
process_version(version)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def default_versions
|
28
|
+
::EacConfig::Node.context.current.entry(default_versions_config_key).value.split(',')
|
29
|
+
.map(&:strip).reject(&:blank?)
|
30
|
+
end
|
31
|
+
|
32
|
+
def versions_to_s
|
33
|
+
if versions.any?
|
34
|
+
versions.join(', ')
|
35
|
+
else
|
36
|
+
'-- NONE --'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def versions
|
41
|
+
(
|
42
|
+
parsed.version +
|
43
|
+
(parsed.default? ? default_versions : [])
|
44
|
+
).uniq.sort
|
45
|
+
end
|
46
|
+
|
47
|
+
def process_version(version)
|
48
|
+
image = build_image(version)
|
49
|
+
infom "Building Docker image \"#{image.tag}\""
|
50
|
+
image.build
|
51
|
+
image.push if parsed.push?
|
52
|
+
end
|
53
|
+
|
54
|
+
def registry_name
|
55
|
+
parsed.registry_name || ::EacConfig::Node.context.current.entry('docker.registry.name')
|
56
|
+
.value
|
57
|
+
end
|
58
|
+
|
59
|
+
def registry_uncached
|
60
|
+
::EacDocker::Registry.new(registry_name)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_image(plataform_version)
|
64
|
+
r = docker_image_class.new(registry, plataform_version)
|
65
|
+
r.send('version=', !parsed.no_version?)
|
66
|
+
r.snapshot = !parsed.no_snapshot?
|
67
|
+
r
|
68
|
+
end
|
69
|
+
|
70
|
+
def default_versions_config_key
|
71
|
+
"#{plataform_name.underscore}.default_versions"
|
72
|
+
end
|
73
|
+
|
74
|
+
def docker_image_class
|
75
|
+
"Avmtrf1::#{plataform_name}::DockerImage".constantize
|
76
|
+
end
|
77
|
+
|
78
|
+
def plataform_name
|
79
|
+
self.class.name.split('::')[-2]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'avm/launcher/git/base'
|
4
4
|
|
5
5
|
module Avmtrf1
|
6
6
|
module Git
|
7
|
-
class CachedRepository < ::
|
7
|
+
class CachedRepository < ::Avm::Launcher::Git::Base
|
8
8
|
attr_reader :url
|
9
9
|
|
10
10
|
def initialize(url)
|
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'eac_ruby_utils/
|
3
|
+
require 'eac_ruby_utils/patches/module/speaker'
|
4
4
|
require 'eac_ruby_utils/simple_cache'
|
5
5
|
require 'avmtrf1/result'
|
6
6
|
|
7
7
|
module Avmtrf1
|
8
8
|
module Git
|
9
9
|
class IssueOnRepository
|
10
|
-
|
10
|
+
enable_speaker
|
11
11
|
include ::EacRubyUtils::SimpleCache
|
12
12
|
|
13
13
|
CHECKS = %w[no_branch_nor_tag branch_and_tag issue_not_found issue_closed_git_open
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module Cache
|
8
|
+
def fs_cache_uncached
|
9
|
+
source_commit.fs_cache.child(lfs_file_min_size.present? ? lfs_file_min_size : 'nil')
|
10
|
+
end
|
11
|
+
|
12
|
+
%w[sha1 files_size push_pack_error].each do |attr|
|
13
|
+
define_method("#{attr}_cache_uncached") { fs_cache.child(attr) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module CheckoutPreviousRevision
|
8
|
+
private
|
9
|
+
|
10
|
+
def checkout_base_uncached
|
11
|
+
if previous_revision.blank?
|
12
|
+
checkout_orphan
|
13
|
+
else
|
14
|
+
checkout_previous_revision
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def checkout_orphan
|
19
|
+
infom message('Checkout orphan')
|
20
|
+
git.execute!('reset', '--hard')
|
21
|
+
git.execute!('clean', '-df')
|
22
|
+
git.execute!('checkout', source_commit.sha1)
|
23
|
+
end
|
24
|
+
|
25
|
+
def checkout_previous_revision
|
26
|
+
infom message("Checkout previous revision #{previous_revision}")
|
27
|
+
git.execute!('reset', '--hard')
|
28
|
+
git.execute!('clean', '-df')
|
29
|
+
git.execute!('checkout', previous_revision)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module CommitChanges
|
8
|
+
# @return [Avm::Git::Commit]
|
9
|
+
def commit
|
10
|
+
commit_changes
|
11
|
+
@commit
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def commit_changes_uncached
|
17
|
+
if sha1_cache.read.present?
|
18
|
+
@commit = ::Avm::Git::Commit.new(git, sha1_cache.read)
|
19
|
+
return
|
20
|
+
end
|
21
|
+
track_large_files
|
22
|
+
add_files
|
23
|
+
commit_amend
|
24
|
+
store_commit
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_files
|
28
|
+
infom ' * Adding files'
|
29
|
+
git.system!('add', '.')
|
30
|
+
end
|
31
|
+
|
32
|
+
def commit_amend
|
33
|
+
infom message('Commiting')
|
34
|
+
git.command('commit', '--amend', '--allow-empty', '--allow-empty-message')
|
35
|
+
.envvar('GIT_EDITOR', true).execute!
|
36
|
+
end
|
37
|
+
|
38
|
+
def store_commit
|
39
|
+
@commit = ::Avm::Git::Commit.new(git, git.rev_parse('HEAD'))
|
40
|
+
infov message('Commited (SHA1)'), @commit.sha1
|
41
|
+
sha1_cache.write(@commit.sha1)
|
42
|
+
files_size_cache.write(@commit.files_size)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module Helpers
|
8
|
+
private
|
9
|
+
|
10
|
+
def message(suffix, padding = 0)
|
11
|
+
"#{(' ' * (padding + 2))}* #{suffix}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def git
|
15
|
+
source_commit.git
|
16
|
+
end
|
17
|
+
|
18
|
+
def push_large
|
19
|
+
source_commit.push_large
|
20
|
+
end
|
21
|
+
|
22
|
+
def previous_revision
|
23
|
+
push_large.last_pushed_revision
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module PickSourceRevision
|
8
|
+
private
|
9
|
+
|
10
|
+
def add_cacheinfo_fail?(result)
|
11
|
+
!result.fetch(:exit_code).zero? && result.fetch(:stderr).include?('add_cacheinfo')
|
12
|
+
end
|
13
|
+
|
14
|
+
def cherry_pick_source_revision_uncached
|
15
|
+
checkout_base
|
16
|
+
return unless previous_revision.present?
|
17
|
+
|
18
|
+
infom message("Cherry pick #{source_commit.sha1}")
|
19
|
+
result = git.execute('cherry-pick', '--allow-empty', '--allow-empty-message',
|
20
|
+
'-Xtheirs', source_commit.sha1)
|
21
|
+
check_cherry_pick_result(result)
|
22
|
+
end
|
23
|
+
|
24
|
+
def check_cherry_pick_result(result)
|
25
|
+
return if result.fetch(:exit_code).zero?
|
26
|
+
return on_cherry_pick_conflict if cherry_pick_conflict?
|
27
|
+
return on_add_cacheinfo_fail if add_cacheinfo_fail?(result)
|
28
|
+
|
29
|
+
raise "Cherry pick failed: #{result}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def cherry_pick_conflict?
|
33
|
+
::File.exist?(::File.join(git, '.git', 'CHERRY_PICK_HEAD'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_add_cacheinfo_fail
|
37
|
+
warn message('"add_cacheinfo" fail')
|
38
|
+
end
|
39
|
+
|
40
|
+
def on_cherry_pick_conflict
|
41
|
+
warn message('Cherry pick failed with conflict')
|
42
|
+
resolve_cherry_pick_conflicts
|
43
|
+
|
44
|
+
check_dirty_files
|
45
|
+
check_cherry_continue
|
46
|
+
end
|
47
|
+
|
48
|
+
def resolve_cherry_pick_conflicts
|
49
|
+
git.status_files.each do |scf|
|
50
|
+
if scf.dirty == 'D'
|
51
|
+
remove_file(scf.path)
|
52
|
+
elsif scf.dirty.present?
|
53
|
+
add_file(scf.path)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_file(path)
|
59
|
+
infov message('Removing file'), path
|
60
|
+
git.execute!('rm', path)
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_file(path)
|
64
|
+
infov message('Adding file'), path
|
65
|
+
git.execute!('add', path)
|
66
|
+
end
|
67
|
+
|
68
|
+
def check_dirty_files
|
69
|
+
infom message('Checking dirty files...')
|
70
|
+
df = dirty_files
|
71
|
+
infov message('Dirty files?'), df.any?
|
72
|
+
return unless df.any?
|
73
|
+
|
74
|
+
df.each do |f|
|
75
|
+
infov message(f.path, 1), "|#{f.stage}|#{f.dirty}|"
|
76
|
+
end
|
77
|
+
raise 'There are dirty files'
|
78
|
+
end
|
79
|
+
|
80
|
+
def dirty_files
|
81
|
+
git.status_files.select { |scf| scf.dirty.present? }
|
82
|
+
end
|
83
|
+
|
84
|
+
def check_cherry_continue
|
85
|
+
infom message('Continuing cherry pick')
|
86
|
+
git.execute!('-c', "core.editor=#{bash_editor}", 'cherry-pick', '--continue')
|
87
|
+
raise 'Still in cherry-pick conflict' if cherry_pick_conflict?
|
88
|
+
|
89
|
+
infom message('Cherry pick continue successful')
|
90
|
+
end
|
91
|
+
|
92
|
+
def bash_editor
|
93
|
+
if source_commit.subject.present?
|
94
|
+
'true'
|
95
|
+
else
|
96
|
+
'bash -c "printf \\"Mensagem original em branco.\\n\\" > $1"'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module Push
|
8
|
+
private
|
9
|
+
|
10
|
+
PACK_ERROR_MESSAGE = 'pack exceeds maximum allowed size'
|
11
|
+
PACK_ERROR_TRUE = 'true'
|
12
|
+
PACK_ERROR_FALSE = 'false'
|
13
|
+
|
14
|
+
def push_ok_uncached
|
15
|
+
commit
|
16
|
+
fresh_push if push_pack_error_cache.read.blank?
|
17
|
+
after_push_banner
|
18
|
+
push_pack_error_cache.read != PACK_ERROR_TRUE
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_push_banner
|
22
|
+
infov message('Commit SHA1'), commit.sha1
|
23
|
+
raise 'Cache of files size not found' if files_size_cache.read.blank?
|
24
|
+
|
25
|
+
infov message('Files size'), PushLarge.bytes_size(files_size_cache.read)
|
26
|
+
end
|
27
|
+
|
28
|
+
def fresh_push
|
29
|
+
fresh_push_banner
|
30
|
+
check_push_result(
|
31
|
+
git.execute(
|
32
|
+
'push', push_large.remote_name, '--force',
|
33
|
+
"#{commit.sha1}:#{push_reference}"
|
34
|
+
)
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def fresh_push_banner
|
39
|
+
infom message('Pushing...')
|
40
|
+
fresh_push_commit_banner
|
41
|
+
fresh_push_remote_banner
|
42
|
+
end
|
43
|
+
|
44
|
+
def fresh_push_commit_banner
|
45
|
+
infov message('SHA1', 1), commit.sha1
|
46
|
+
infov message('Files size', 1), PushLarge.bytes_size(commit.files_size)
|
47
|
+
end
|
48
|
+
|
49
|
+
def fresh_push_remote_banner
|
50
|
+
infov message('Remote', 1), push_large.remote_name
|
51
|
+
infov message('Reference', 1), push_reference
|
52
|
+
end
|
53
|
+
|
54
|
+
def push_reference
|
55
|
+
"refs/heads/#{push_large.target_ref}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def check_push_result(result)
|
59
|
+
if result.fetch(:exit_code).zero?
|
60
|
+
on_push_result_ok
|
61
|
+
elsif result.fetch(:stderr).include?(PACK_ERROR_MESSAGE)
|
62
|
+
on_push_result_pack_error
|
63
|
+
else
|
64
|
+
on_push_result_arbitrary_error(result)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def on_push_result_ok
|
69
|
+
push_pack_error_cache.write(PACK_ERROR_FALSE)
|
70
|
+
success(push_message('successful'))
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_push_result_pack_error
|
74
|
+
push_pack_error_cache.write(PACK_ERROR_TRUE)
|
75
|
+
warn(push_message("failed with message \"#{PACK_ERROR_MESSAGE}\""))
|
76
|
+
end
|
77
|
+
|
78
|
+
def on_push_result_arbitrary_error(result)
|
79
|
+
raise result.pretty_inspect.to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
def push_message(suffix)
|
83
|
+
message("Push of #{commit.sha1} (Size: #{commit.files_size}, " \
|
84
|
+
"Files: #{commit.files.count}): #{suffix}.")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avmtrf1
|
4
|
+
module Git
|
5
|
+
class PushLarge
|
6
|
+
class LfsCommit
|
7
|
+
module TrackLargeFiles
|
8
|
+
private
|
9
|
+
|
10
|
+
EXTENSIONS_REQUIRED_TO_TRACK = %w[
|
11
|
+
bak bkp bmp bpm cfm chm dat db doc fla flv gz jar log mp3 mp4 otf pdf ppt psd rar rtf
|
12
|
+
swf ttf wav wmf wmv wmz woff woff2 xmind z zip
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
def track_large_files_uncached
|
16
|
+
cherry_pick_source_revision
|
17
|
+
if lfs_file_min_size.present?
|
18
|
+
|
19
|
+
source_commit.files.each do |file|
|
20
|
+
next unless track_file_with_lfs?(file)
|
21
|
+
|
22
|
+
track_file(file)
|
23
|
+
end
|
24
|
+
raise 'None file was tracked' unless tracked_files.positive?
|
25
|
+
end
|
26
|
+
infov message('Tracked files'), @tracked_files
|
27
|
+
end
|
28
|
+
|
29
|
+
def track_file(file)
|
30
|
+
infov message('Tracking with LFS'), file
|
31
|
+
git.execute!('rm', '--cached', file.path)
|
32
|
+
git.execute!('lfs', 'track', file.path) unless tracked_file?(file)
|
33
|
+
@tracked_files += 1
|
34
|
+
end
|
35
|
+
|
36
|
+
def track_file_with_lfs?(file)
|
37
|
+
return false unless file.dst_size.positive?
|
38
|
+
|
39
|
+
required_extesion_to_track?(file) || (file.dst_size >= lfs_file_min_size)
|
40
|
+
end
|
41
|
+
|
42
|
+
def required_extesion_to_track?(file)
|
43
|
+
EXTENSIONS_REQUIRED_TO_TRACK.include?(::File.extname(file.path).gsub(/\A\./, ''))
|
44
|
+
end
|
45
|
+
|
46
|
+
def tracked_file?(file)
|
47
|
+
git.execute!('check-attr', '--all', '--', file.path).strip.present?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -1,21 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'avmtrf1/core_ext'
|
4
4
|
|
5
5
|
module Avmtrf1
|
6
6
|
module Git
|
7
7
|
class PushLarge
|
8
8
|
class LfsCommit
|
9
|
-
|
10
|
-
|
9
|
+
require_sub __FILE__, include_modules: true
|
10
|
+
enable_simple_cache
|
11
|
+
enable_speaker
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
attr_reader :source_commit, :lfs_file_min_size, :tracked_files
|
15
|
-
|
16
|
-
def initialize(source_commit, lfs_file_min_size)
|
17
|
-
@source_commit = source_commit
|
18
|
-
@lfs_file_min_size = lfs_file_min_size
|
13
|
+
common_constructor :source_commit, :lfs_file_min_size do
|
19
14
|
@tracked_files = 0
|
20
15
|
@commit = nil
|
21
16
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'filesize'
|
4
|
+
|
5
|
+
module Avmtrf1
|
6
|
+
module Git
|
7
|
+
class PushLarge
|
8
|
+
class SourceCommit
|
9
|
+
module Push
|
10
|
+
private
|
11
|
+
|
12
|
+
LFS_FILE_MIN_SIZES = [nil, 1_048_576, 524_288, 131_072].freeze
|
13
|
+
|
14
|
+
def pushed_revision_uncached
|
15
|
+
fs_cache.child('pushed_revision')
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_pushs
|
19
|
+
return if LFS_FILE_MIN_SIZES.any? do |lfs_file_min_size|
|
20
|
+
lfs_commit = ::Avmtrf1::Git::PushLarge::LfsCommit.new(self, lfs_file_min_size)
|
21
|
+
lfs_commit.start_banner
|
22
|
+
push_with_lfs(lfs_commit)
|
23
|
+
end
|
24
|
+
|
25
|
+
raise 'Push de todos os commits falharam'
|
26
|
+
end
|
27
|
+
|
28
|
+
def push_with_lfs(lfs_commit)
|
29
|
+
if lfs_commit.push_ok?
|
30
|
+
pushed_revision.write(lfs_commit.commit.sha1)
|
31
|
+
success " * Pushed: #{pushed_revision.read}"
|
32
|
+
true
|
33
|
+
else
|
34
|
+
warn ' * Push failed'
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,18 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'avm/git/commit'
|
4
|
-
require '
|
5
|
-
require 'eac_ruby_utils/simple_cache'
|
6
|
-
require 'eac_ruby_utils/require_sub'
|
4
|
+
require 'avmtrf1/core_ext'
|
7
5
|
|
8
6
|
module Avmtrf1
|
9
7
|
module Git
|
10
8
|
class PushLarge
|
11
9
|
class SourceCommit < ::Avm::Git::Commit
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
::EacRubyUtils.require_sub(__FILE__)
|
10
|
+
require_sub __FILE__, include_modules: true
|
11
|
+
enable_simple_cache
|
12
|
+
enable_speaker
|
16
13
|
|
17
14
|
attr_reader :push_large, :sha1, :no_lfs_max_size
|
18
15
|
|