takelage 0.18.0 → 0.20.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/README.md +2 -0
- data/lib/takelage.rb +5 -1
- data/lib/takelage/bit/cli.rb +3 -0
- data/lib/takelage/bit/clipboard/cli.rb +1 -1
- data/lib/takelage/bit/clipboard/copy.rb +8 -8
- data/lib/takelage/bit/clipboard/lib.rb +13 -14
- data/lib/takelage/bit/clipboard/paste.rb +3 -2
- data/lib/takelage/bit/clipboard/pull.rb +2 -2
- data/lib/takelage/bit/clipboard/push.rb +3 -3
- data/lib/takelage/bit/require/cli.rb +57 -0
- data/lib/takelage/bit/require/export.rb +32 -0
- data/lib/takelage/bit/require/import.rb +129 -0
- data/lib/takelage/bit/require/lib.rb +19 -0
- data/lib/takelage/bit/scope/list.rb +2 -2
- data/lib/takelage/default.yml +5 -2
- data/lib/takelage/docker/container/check/existing.rb +1 -0
- data/lib/takelage/docker/container/check/network.rb +1 -0
- data/lib/takelage/docker/container/check/orphaned.rb +1 -0
- data/lib/takelage/docker/container/clean.rb +2 -2
- data/lib/takelage/docker/container/lib.rb +15 -7
- data/lib/takelage/docker/container/prune.rb +1 -1
- data/lib/takelage/docker/socket/lib.rb +2 -2
- data/lib/takelage/docker/socket/scheme.rb +14 -31
- data/lib/takelage/lib/config.rb +4 -2
- data/lib/takelage/lib/logging.rb +2 -0
- data/lib/takelage/lib/subcmd.rb +2 -2
- data/lib/takelage/self/list.rb +1 -0
- data/lib/takelage/version +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff76a5fa994c76003af554e174ec3d4ae3e1a8b4e08caf61df2101e0bedd5607
|
4
|
+
data.tar.gz: 85de4c4db687bfa14385614ba4960314655909775b975c7a32c01aabe7573cb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e51313c752ce726c55d786541ff273a63291e3c31cee20416bf70e2ee48906b3e02ccfef97bbfe1c6164ce1dbad4dc781f5ec1ce0f4e11915495e59cc73f8390
|
7
|
+
data.tar.gz: fb5458e2480025692fb344dba806c595570a756bf59abd45dfe948bc4af0edd4f315c3e7d5f23f2c7511d8b96d1996d4156d1e1e63323de39213f93b1db5c985
|
data/README.md
CHANGED
@@ -52,6 +52,8 @@ tau [bit clipboard copy](features/takelage/bit/bit.clipboard.copy.feature) [DIR]
|
|
52
52
|
tau [bit clipboard paste](features/takelage/bit/bit.clipboard.paste.feature) [COMPONENT] [DIR] | Paste bit [COMPONENT] into [DIR]
|
53
53
|
tau [bit clipboard pull](features/takelage/bit/bit.clipboard.pull.feature) | Pull all updates for bit components from bit remote scopes
|
54
54
|
tau [bit clipboard push](features/takelage/bit/bit.clipboard.push.feature) | Push all updates of bit components to bit remote scopes
|
55
|
+
tau [bit require export](features/takelage/bit/bit.require.export.feature) | Show requirements file of bit components
|
56
|
+
tau [bit require import](features/takelage/bit/bit.require.import.feature) | Import bit components from requirements file
|
55
57
|
tau [bit scope add](features/takelage/bit/bit.scope.add.feature) [SCOPE] | Add a bit [SCOPE]
|
56
58
|
tau [bit scope inbit](features/takelage/bit/bit.scope.inbit.feature) | Log in to bit remote server
|
57
59
|
tau [bit scope list](features/takelage/bit/bit.scope.list.feature) | List bit remote scopes
|
data/lib/takelage.rb
CHANGED
@@ -38,6 +38,10 @@ require_relative 'takelage/bit/clipboard/paste'
|
|
38
38
|
require_relative 'takelage/bit/clipboard/pull'
|
39
39
|
require_relative 'takelage/bit/clipboard/push'
|
40
40
|
require_relative 'takelage/bit/clipboard/cli'
|
41
|
+
require_relative 'takelage/bit/require/lib'
|
42
|
+
require_relative 'takelage/bit/require/export'
|
43
|
+
require_relative 'takelage/bit/require/import'
|
44
|
+
require_relative 'takelage/bit/require/cli'
|
41
45
|
require_relative 'takelage/bit/cli'
|
42
46
|
require_relative 'takelage/completion/cli'
|
43
47
|
require_relative 'takelage/docker/check/running'
|
@@ -112,7 +116,7 @@ module Takelage
|
|
112
116
|
# Initialize global singleton project
|
113
117
|
initialize_project
|
114
118
|
|
115
|
-
#
|
119
|
+
# Prepare for the worst
|
116
120
|
@docker_daemon_running = false
|
117
121
|
|
118
122
|
# fylla bash completion code
|
data/lib/takelage/bit/cli.rb
CHANGED
@@ -9,6 +9,9 @@ module Takelage
|
|
9
9
|
desc 'clipboard [COMMAND]', 'Manage bit clipboard'
|
10
10
|
subcommand 'clipboard', BitClipboard
|
11
11
|
|
12
|
+
desc 'require [COMMAND]', 'Manage bit requirements'
|
13
|
+
subcommand 'require', BitRequire
|
14
|
+
|
12
15
|
desc 'scope [COMMAND]', 'Manage bit scopes'
|
13
16
|
subcommand 'scope', BitScope
|
14
17
|
end
|
@@ -43,7 +43,7 @@ module BitClipboardCopy
|
|
43
43
|
end
|
44
44
|
# rubocop:enable Metrics/MethodLength
|
45
45
|
|
46
|
-
#
|
46
|
+
# Touch README.bit if necessary.
|
47
47
|
def _bit_clipboard_copy_touch_readme_bit(dir)
|
48
48
|
readme_bit = "#{dir}/README.bit"
|
49
49
|
return if File.file? readme_bit
|
@@ -52,7 +52,7 @@ module BitClipboardCopy
|
|
52
52
|
File.open(readme_bit, 'w') {}
|
53
53
|
end
|
54
54
|
|
55
|
-
#
|
55
|
+
# Check if a README.bit file exists in a subdirectory.
|
56
56
|
def _bit_clipboard_copy_readme_bit_exists_in_subdir?(dir)
|
57
57
|
Dir.glob("#{dir}/**/README.bit").each do |file|
|
58
58
|
unless file == "#{dir}/README.bit"
|
@@ -64,7 +64,7 @@ module BitClipboardCopy
|
|
64
64
|
false
|
65
65
|
end
|
66
66
|
|
67
|
-
# Check if bit scope exists
|
67
|
+
# Check if bit scope exists.
|
68
68
|
def _bit_clipboard_copy_dir_scope_exists?(scope)
|
69
69
|
bit_dev = config.active['bit_dev_user']
|
70
70
|
|
@@ -78,7 +78,7 @@ module BitClipboardCopy
|
|
78
78
|
true
|
79
79
|
end
|
80
80
|
|
81
|
-
#
|
81
|
+
# Check if bit.dev remote scope exists.
|
82
82
|
def _bit_clipboard_bit_dev_scope_exists(scope)
|
83
83
|
cmd_bit_list_scope = format(
|
84
84
|
config.active['cmd_bit_clipboard_copy_bit_list_scope'],
|
@@ -93,7 +93,7 @@ module BitClipboardCopy
|
|
93
93
|
false
|
94
94
|
end
|
95
95
|
|
96
|
-
#
|
96
|
+
# Check if bit remote scope is added to local workspace.
|
97
97
|
def _bit_clipboard_custom_scope_exists(scope)
|
98
98
|
cmd_bit_list_remotes =
|
99
99
|
config.active['cmd_bit_clipboard_copy_bit_list_remotes']
|
@@ -107,7 +107,7 @@ module BitClipboardCopy
|
|
107
107
|
false
|
108
108
|
end
|
109
109
|
|
110
|
-
# bit tag dir
|
110
|
+
# bit tag dir.
|
111
111
|
def _bit_clipboard_copy_add_dir(id, dir)
|
112
112
|
cmd_bit_add_dir = format(
|
113
113
|
config.active['cmd_bit_clipboard_copy_bit_add_dir'],
|
@@ -118,7 +118,7 @@ module BitClipboardCopy
|
|
118
118
|
run cmd_bit_add_dir
|
119
119
|
end
|
120
120
|
|
121
|
-
# bit tag dir
|
121
|
+
# bit tag dir.
|
122
122
|
def _bit_clipboard_copy_tag_dir(id)
|
123
123
|
cmd_bit_tag_id = format(
|
124
124
|
config.active['cmd_bit_clipboard_copy_bit_tag_id'],
|
@@ -128,7 +128,7 @@ module BitClipboardCopy
|
|
128
128
|
run cmd_bit_tag_id
|
129
129
|
end
|
130
130
|
|
131
|
-
# bit export component to bit remote scope
|
131
|
+
# bit export component to bit remote scope.
|
132
132
|
def _bit_clipboard_copy_export_to_scope(scope)
|
133
133
|
cmd_bit_export_to_scope = format(
|
134
134
|
config.active['cmd_bit_clipboard_copy_bit_export_to_scope'],
|
@@ -52,29 +52,28 @@ module BitClipboardLib
|
|
52
52
|
log.debug 'Syncing git workspace'
|
53
53
|
|
54
54
|
_rakefile, path = Rake.application.find_rakefile_location
|
55
|
-
|
55
|
+
file = "#{path}/.bitmap"
|
56
|
+
message = 'Update .bitmap'
|
56
57
|
|
57
|
-
_bit_clipboard_lib_git_add
|
58
|
-
_bit_clipboard_lib_git_commit
|
58
|
+
_bit_clipboard_lib_git_add file
|
59
|
+
_bit_clipboard_lib_git_commit message
|
59
60
|
_bit_clipboard_lib_git_push
|
60
61
|
end
|
61
62
|
|
62
|
-
# git add .bitmap
|
63
|
-
def _bit_clipboard_lib_git_add(
|
64
|
-
log.debug "Adding \"#{
|
63
|
+
# git add .bitmap.
|
64
|
+
def _bit_clipboard_lib_git_add(file)
|
65
|
+
log.debug "Adding \"#{file}\" to git"
|
65
66
|
|
66
67
|
cmd_bit_clipboard_git_add = format(
|
67
68
|
config.active['cmd_bit_clipboard_git_add'],
|
68
|
-
file:
|
69
|
+
file: file
|
69
70
|
)
|
70
71
|
run cmd_bit_clipboard_git_add
|
71
72
|
end
|
72
73
|
|
73
|
-
# git commit -m "Update .bitmap"
|
74
|
-
def _bit_clipboard_lib_git_commit(
|
75
|
-
|
76
|
-
|
77
|
-
log.debug "Committing \"#{bitmap}\" to git"
|
74
|
+
# git commit -m "Update .bitmap".
|
75
|
+
def _bit_clipboard_lib_git_commit(message)
|
76
|
+
log.debug "Committing to git with message \"#{message}\""
|
78
77
|
|
79
78
|
cmd_bit_clipboard_git_commit = format(
|
80
79
|
config.active['cmd_bit_clipboard_git_commit'],
|
@@ -84,7 +83,7 @@ module BitClipboardLib
|
|
84
83
|
run cmd_bit_clipboard_git_commit
|
85
84
|
end
|
86
85
|
|
87
|
-
# git push origin master
|
86
|
+
# git push origin master.
|
88
87
|
def _bit_clipboard_lib_git_push
|
89
88
|
log.debug 'Pushing master branch to origin'
|
90
89
|
|
@@ -94,7 +93,7 @@ module BitClipboardLib
|
|
94
93
|
run cmd_bit_clipboard_git_push
|
95
94
|
end
|
96
95
|
|
97
|
-
# git pull
|
96
|
+
# git pull.
|
98
97
|
def _bit_clipboard_lib_git_pull
|
99
98
|
log.debug 'Updating git workspace'
|
100
99
|
cmd_bit_clipboard_git_pull =
|
@@ -20,7 +20,7 @@ module BitClipboardPaste
|
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
-
# paste bit component into directory
|
23
|
+
# paste bit component into directory.
|
24
24
|
def _bit_clipboard_paste_import_cid(cid, dir)
|
25
25
|
cmd_bit_import_cid = format(
|
26
26
|
config.active['cmd_bit_clipboard_paste_bit_import_cid'],
|
@@ -31,6 +31,7 @@ module BitClipboardPaste
|
|
31
31
|
run cmd_bit_import_cid
|
32
32
|
end
|
33
33
|
|
34
|
+
# Check if remote component exists.
|
34
35
|
def _bit_clipboard_paste_cid_exists?(cid)
|
35
36
|
scope = cid.scan(%r{([^/]*).*}).first.first
|
36
37
|
|
@@ -45,7 +46,7 @@ module BitClipboardPaste
|
|
45
46
|
false
|
46
47
|
end
|
47
48
|
|
48
|
-
#
|
49
|
+
# Get components in remote scope.
|
49
50
|
def _bit_clipboard_paste_cid_exists_list_scope(scope)
|
50
51
|
cmd_bit_list_scope = format(
|
51
52
|
config.active['cmd_bit_clipboard_paste_bit_list_scope'],
|
@@ -19,7 +19,7 @@ module BitClipboardPull
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
# bit import components into workspace
|
22
|
+
# bit import components into workspace.
|
23
23
|
def _bit_clipboard_pull_import_all
|
24
24
|
cmd_bit_import_all =
|
25
25
|
config.active['cmd_bit_clipboard_pull_bit_import_all']
|
@@ -27,7 +27,7 @@ module BitClipboardPull
|
|
27
27
|
run cmd_bit_import_all
|
28
28
|
end
|
29
29
|
|
30
|
-
#
|
30
|
+
# Checkout components and merge them.
|
31
31
|
def _bit_clipboard_pull_checkout_all
|
32
32
|
cmd_bit_checkout_all =
|
33
33
|
config.active['cmd_bit_clipboard_pull_bit_checkout_all']
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# takelage bit clipboard push
|
4
4
|
module BitClipboardPush
|
5
|
-
# Backend method for bit push
|
5
|
+
# Backend method for bit push.
|
6
6
|
def bit_clipboard_push
|
7
7
|
log.debug 'Running bit push'
|
8
8
|
|
@@ -19,7 +19,7 @@ module BitClipboardPush
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
# bit tag all components
|
22
|
+
# bit tag all components.
|
23
23
|
def _bit_clipboard_push_tag_all
|
24
24
|
cmd_bit_tag_all =
|
25
25
|
config.active['cmd_bit_clipboard_push_bit_tag_all']
|
@@ -27,7 +27,7 @@ module BitClipboardPush
|
|
27
27
|
run cmd_bit_tag_all
|
28
28
|
end
|
29
29
|
|
30
|
-
# bit export components
|
30
|
+
# bit export components.
|
31
31
|
def _bit_clipboard_push_export_all
|
32
32
|
cmd_bit_export_all =
|
33
33
|
config.active['cmd_bit_clipboard_push_bit_export_all']
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Takelage
|
4
|
+
# takelage bit requiere
|
5
|
+
class BitRequire < SubCommandBase
|
6
|
+
include LoggingModule
|
7
|
+
include ConfigModule
|
8
|
+
include SystemModule
|
9
|
+
include GitCheckClean
|
10
|
+
include GitCheckMaster
|
11
|
+
include GitCheckWorkspace
|
12
|
+
include BitCheckWorkspace
|
13
|
+
include BitScopeList
|
14
|
+
include BitScopeAdd
|
15
|
+
include BitClipboardLib
|
16
|
+
include BitClipboardCopy
|
17
|
+
include BitClipboardPaste
|
18
|
+
include BitRequireLib
|
19
|
+
include BitRequireExport
|
20
|
+
include BitRequireImport
|
21
|
+
|
22
|
+
# Initialize bit require
|
23
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
24
|
+
# initialize thor parent class
|
25
|
+
super args, local_options, configuration
|
26
|
+
|
27
|
+
@bit_require_file = config.active['bit_require_file']
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# bit require export
|
32
|
+
#
|
33
|
+
desc 'export', 'Create requirements file with bit components.'
|
34
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
35
|
+
Create requirements file with bit components
|
36
|
+
LONGDESC
|
37
|
+
# Create requirements file with bit components.
|
38
|
+
def export
|
39
|
+
bit_require_yml = bit_require_export
|
40
|
+
exit false if bit_require_yml == false
|
41
|
+
say bit_require_yml
|
42
|
+
true
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# bit require import
|
47
|
+
#
|
48
|
+
desc 'import', 'Import bit components from requirements file.'
|
49
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
50
|
+
Import bit components from requirements file
|
51
|
+
LONGDESC
|
52
|
+
# Import bit components from requirements file.
|
53
|
+
def import
|
54
|
+
exit bit_require_import
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage bit require export
|
4
|
+
module BitRequireExport
|
5
|
+
# Backend method for bit require export.
|
6
|
+
def bit_require_export
|
7
|
+
log.debug 'Running bit require export'
|
8
|
+
|
9
|
+
components = _bit_require_lib_get_components
|
10
|
+
bitrequire_yml = _bit_require_export_get_bitrequire_yml components
|
11
|
+
|
12
|
+
log.debug "bitrequire.yml of this project:\n#{bitrequire_yml}"
|
13
|
+
bitrequire_yml
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Create contents of bitrequire yaml file.
|
19
|
+
# rubocop:disable Metrics/AbcSize
|
20
|
+
def _bit_require_export_get_bitrequire_yml(components)
|
21
|
+
bitrequire = {}
|
22
|
+
components.each do |component|
|
23
|
+
scope = component['id'].clone.gsub!(%r{/.*}, '')
|
24
|
+
name = component['id'].clone.gsub!(%r{#{scope}/}, '')
|
25
|
+
bitrequire['scopes'] = { scope => [] } if bitrequire['scopes'].nil?
|
26
|
+
bitrequire['scopes'] = { scope => [] } unless bitrequire['scopes'].key? scope
|
27
|
+
bitrequire['scopes'][scope] << { 'name' => name }
|
28
|
+
end
|
29
|
+
hash_to_yaml bitrequire
|
30
|
+
end
|
31
|
+
# rubocop:enable Metrics/AbcSize
|
32
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage bit require import
|
4
|
+
module BitRequireImport
|
5
|
+
# Backend method for bit require import.
|
6
|
+
def bit_require_import
|
7
|
+
log.debug 'Running bit require import'
|
8
|
+
|
9
|
+
return false unless _bit_clipboard_lib_prepare_workspace
|
10
|
+
|
11
|
+
return false unless _bit_require_import_check_require_file_exists
|
12
|
+
|
13
|
+
scopes = _bit_require_import_get_scopes_and_components
|
14
|
+
return false unless scopes
|
15
|
+
|
16
|
+
components = _bit_require_import_get_components scopes
|
17
|
+
return false unless components
|
18
|
+
|
19
|
+
return false unless _bit_require_import_add_scopes scopes
|
20
|
+
|
21
|
+
_bit_require_import_paste_components components
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Check if a bit requirements file exists.
|
27
|
+
def _bit_require_import_check_require_file_exists
|
28
|
+
return true if File.exist? @bit_require_file
|
29
|
+
|
30
|
+
log.error "No #{@bit_require_file} file found"
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
# Get scopes and components from requirements file.
|
35
|
+
def _bit_require_import_get_scopes_and_components
|
36
|
+
bit_require = read_yaml_file(@bit_require_file)
|
37
|
+
return bit_require['scopes'] if bit_require.key?('scopes')
|
38
|
+
|
39
|
+
log.error "No scopes in #{@bit_require_file} file"
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get flat components array.
|
44
|
+
def _bit_require_import_get_components(scopes)
|
45
|
+
components_all = []
|
46
|
+
scopes.each do |scope, components|
|
47
|
+
scope_components = _bit_require_import_get_scope_components scope, components
|
48
|
+
return false unless scope_components
|
49
|
+
|
50
|
+
components_all |= scope_components
|
51
|
+
end
|
52
|
+
components_all
|
53
|
+
end
|
54
|
+
|
55
|
+
# Get bit components of a scope.
|
56
|
+
def _bit_require_import_get_scope_components(scope, components)
|
57
|
+
scope_components = []
|
58
|
+
components.each do |component|
|
59
|
+
return false unless _bit_require_import_check_component_valid component, scope
|
60
|
+
|
61
|
+
name = component['name']
|
62
|
+
path = name
|
63
|
+
path = component['path'] if component.key?('path')
|
64
|
+
scope_components << { name: name, path: path, scope: scope }
|
65
|
+
log.debug "Identified bit component \"#{name}\" with path \"#{path}\" in scope \"#{scope}\""
|
66
|
+
end
|
67
|
+
scope_components
|
68
|
+
end
|
69
|
+
|
70
|
+
# Check if there are bit components
|
71
|
+
def _bit_require_import_check_component_valid(component, scope)
|
72
|
+
return true if (component.class == Hash) && component.key?('name')
|
73
|
+
|
74
|
+
log.error "No component in #{scope}"
|
75
|
+
false
|
76
|
+
end
|
77
|
+
|
78
|
+
# Add bit scopes to workspace.
|
79
|
+
def _bit_require_import_add_scopes(scopes)
|
80
|
+
scopes.each do |scope, _components|
|
81
|
+
bit_scope_add scope unless _bit_clipboard_bit_dev_scope_exists scope
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Paste bit components.
|
86
|
+
def _bit_require_import_paste_components(components)
|
87
|
+
_rakefile, path = Rake.application.find_rakefile_location
|
88
|
+
components.each do |component|
|
89
|
+
next if _bit_require_import_check_component_exists component, path
|
90
|
+
|
91
|
+
return false unless _bit_require_import_paste_component component
|
92
|
+
|
93
|
+
_bit_require_import_commit_component component, path
|
94
|
+
end
|
95
|
+
true
|
96
|
+
end
|
97
|
+
|
98
|
+
# Check if there are bit components
|
99
|
+
def _bit_require_import_check_component_exists(component, path)
|
100
|
+
scope = component[:scope]
|
101
|
+
cid = component[:name]
|
102
|
+
dir = component[:path]
|
103
|
+
dest = "#{path}/#{dir}"
|
104
|
+
cids = _bit_require_lib_get_components_ids
|
105
|
+
return false unless cids.include? "#{scope}/#{cid}"
|
106
|
+
|
107
|
+
log.warn "Skipping existing bit component \"#{scope}/#{cid}\" with path \"#{dest}\""
|
108
|
+
true
|
109
|
+
end
|
110
|
+
|
111
|
+
# Paste a bit component
|
112
|
+
def _bit_require_import_paste_component(component)
|
113
|
+
scope = component[:scope]
|
114
|
+
cid = component[:name]
|
115
|
+
dir = component[:path]
|
116
|
+
bit_clipboard_paste "#{scope}/#{cid}", dir
|
117
|
+
end
|
118
|
+
|
119
|
+
# Commit a bit component
|
120
|
+
def _bit_require_import_commit_component(component, path)
|
121
|
+
scope = component[:scope]
|
122
|
+
cid = component[:name]
|
123
|
+
dir = component[:path]
|
124
|
+
dest = "#{path}/#{dir}"
|
125
|
+
message = "Add bit component \"#{scope}/#{cid}\" to path \"#{dest}\""
|
126
|
+
_bit_clipboard_lib_git_add dest
|
127
|
+
_bit_clipboard_lib_git_commit message
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage bit require lib
|
4
|
+
module BitRequireLib
|
5
|
+
private
|
6
|
+
|
7
|
+
# Get bit components.
|
8
|
+
def _bit_require_lib_get_components
|
9
|
+
cmd_bit_list = config.active['cmd_bit_require_lib_bit_list']
|
10
|
+
bit_list = run cmd_bit_list
|
11
|
+
JSON.parse bit_list
|
12
|
+
end
|
13
|
+
|
14
|
+
# Get bit components ids.
|
15
|
+
def _bit_require_lib_get_components_ids
|
16
|
+
cmd_bit_list_ids = config.active['cmd_bit_require_lib_bit_list_ids']
|
17
|
+
run cmd_bit_list_ids
|
18
|
+
end
|
19
|
+
end
|
@@ -9,7 +9,7 @@ module BitScopeList
|
|
9
9
|
|
10
10
|
return false unless configured? %w[bit_ssh bit_remote]
|
11
11
|
|
12
|
-
# get ssh command from active config
|
12
|
+
# get ssh command from active config.
|
13
13
|
cmd_bit_ssh =
|
14
14
|
config.active['bit_ssh']
|
15
15
|
|
@@ -17,7 +17,7 @@ module BitScopeList
|
|
17
17
|
|
18
18
|
cmd_bit_scope_list = _bit_scope_list_cmd root
|
19
19
|
|
20
|
-
# run ssh command with scope list command
|
20
|
+
# run ssh command with scope list command.
|
21
21
|
scope_list = run "#{cmd_bit_ssh} '#{cmd_bit_scope_list}'"
|
22
22
|
|
23
23
|
# remove bit remote root directory from results
|
data/lib/takelage/default.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
---
|
2
2
|
bit_dev_user: 'takelage'
|
3
3
|
bit_remote: ''
|
4
|
+
bit_require_file: 'bitrequire.yml'
|
4
5
|
bit_root: '/bit'
|
5
6
|
bit_ssh: ''
|
6
7
|
cmd_bit_check_workspace_bit_list: 'bit list'
|
@@ -20,6 +21,9 @@ cmd_bit_clipboard_pull_bit_import_all: 'bit import --ignore-package-json --ignor
|
|
20
21
|
cmd_bit_clipboard_pull_bit_checkout_all: 'bit checkout --ignore-package-json --ignore-dist --skip-update --skip-npm-install --all latest'
|
21
22
|
cmd_bit_clipboard_push_bit_tag_all: 'bit tag --skip-update --skip-tests --all'
|
22
23
|
cmd_bit_clipboard_push_bit_export_all: 'bit export --skip-update --all'
|
24
|
+
cmd_bit_clipboard_export_bit_list: 'bit list --skip-update --json %{scope}'
|
25
|
+
cmd_bit_require_lib_bit_list: 'bit list --skip-update --json'
|
26
|
+
cmd_bit_require_lib_bit_list_ids: 'bit list --skip-update --json --ids'
|
23
27
|
cmd_bit_scope_add_scope: 'bit remote add %{remote}/%{scope}'
|
24
28
|
cmd_bit_scope_list_find_scopes: 'find -L %{root} -name scope.json'
|
25
29
|
cmd_bit_scope_new_bit_init: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init --bare'
|
@@ -28,7 +32,7 @@ cmd_docker_check_running_docker_info: 'docker info'
|
|
28
32
|
cmd_docker_container_check_existing_docker_ps: 'docker ps --filter name=^%{container}$ --quiet'
|
29
33
|
cmd_docker_container_check_network_docker_network: 'docker network ls --quiet --filter name=^%{network}$'
|
30
34
|
cmd_docker_container_check_orphaned_docker_exec: 'docker exec --interactive %{container} ps a'
|
31
|
-
cmd_docker_container_create: 'docker run --detach --env TAKELAGE_PROJECT_BASE_DIR=%{workdir} --env TZ=%{timezone} --hostname %{container} --name %{container} --network %{container} --privileged --rm --shm-size %{shmsize} --tty --volume %{homedir}:/hostdir --volume %{workdir}:/project %{volume_dev} --workdir /project %{addhost} %{docker_run_options} %{image} %{entrypoint} --gid %{gid} --home %{homedir} --uid %{uid} --username %{username} --
|
35
|
+
cmd_docker_container_create: 'docker run --detach --env TAKELAGE_PROJECT_BASE_DIR=%{workdir} --env TZ=%{timezone} --hostname %{container} --name %{container} --network %{container} --privileged --rm --shm-size %{shmsize} --tty --volume %{dockersock}:/var/run/docker.sock --volume %{homedir}:/hostdir --volume %{workdir}:/project %{volume_dev} --workdir /project %{addhost} %{docker_run_options} %{image} %{entrypoint} --gid %{gid} --home %{homedir} --uid %{uid} --username %{username} --gpg_agent_port %{gpg_agent_port} --gpg_ssh_agent_port %{gpg_ssh_agent_port} --extra=%{extra} %{entrypoint_options}'
|
32
36
|
cmd_docker_container_create_network: 'docker network create %{network}'
|
33
37
|
cmd_docker_container_enter_container: 'docker exec --interactive --tty %{container} %{loginpoint} --username %{username}'
|
34
38
|
cmd_docker_container_get_container_name: 'docker ps --filter id=%{container} --format "{{.Names}}"'
|
@@ -59,7 +63,6 @@ docker_registry: 'https://registry.hub.docker.com'
|
|
59
63
|
docker_repo: 'takelage'
|
60
64
|
docker_run_options: '--env GOOGLE_APPLICATION_CREDENTIALS=/hostdir/.google/default.json'
|
61
65
|
docker_shm_size: '512M'
|
62
|
-
docker_socket_docker_daemon_port: 17873
|
63
66
|
docker_socket_gpg_agent_port: 17874
|
64
67
|
docker_socket_gpg_ssh_agent_port: 17875
|
65
68
|
docker_tag: 'latest'
|
@@ -16,7 +16,7 @@ module DockerContainerClean
|
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
# Check if we are running tau clean inside a takelage container
|
19
|
+
# Check if we are running tau clean inside a takelage container.
|
20
20
|
def _docker_container_clean_harakiri?
|
21
21
|
hostname = ENV['HOSTNAME'] || ''
|
22
22
|
return false unless hostname.start_with? "#{@docker_repo}_"
|
@@ -26,7 +26,7 @@ module DockerContainerClean
|
|
26
26
|
true
|
27
27
|
end
|
28
28
|
|
29
|
-
# Kill all docker containers and return list of networks
|
29
|
+
# Kill all docker containers and return list of networks.
|
30
30
|
def _docker_container_clean_kill_existing_containers
|
31
31
|
networks = []
|
32
32
|
_docker_container_lib_get_containers.each do |container|
|
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
# takelage docker container lib
|
4
4
|
# rubocop:disable Metrics/ModuleLength
|
5
|
+
# rubocop:disable Style/IfUnlessModifier
|
5
6
|
module DockerContainerLib
|
6
7
|
private
|
7
8
|
|
8
9
|
# Create docker container and network.
|
9
|
-
# rubocop:disable Style/IfUnlessModifier
|
10
10
|
def _docker_container_lib_create_net_and_ctr(name)
|
11
|
+
return false if _docker_container_lib_check_matrjoschka
|
12
|
+
|
11
13
|
unless docker_container_check_network name
|
12
14
|
_docker_container_lib_create_network name
|
13
15
|
end
|
@@ -16,10 +18,8 @@ module DockerContainerLib
|
|
16
18
|
|
17
19
|
_docker_container_lib_create_container name
|
18
20
|
end
|
19
|
-
# rubocop:enable Style/IfUnlessModifier
|
20
21
|
|
21
22
|
# Remove docker networks.
|
22
|
-
# rubocop:disable Style/IfUnlessModifier
|
23
23
|
def _docker_container_lib_remove_networks(networks)
|
24
24
|
networks.each do |network|
|
25
25
|
if docker_container_check_network network
|
@@ -27,7 +27,6 @@ module DockerContainerLib
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
|
-
# rubocop:enable Style/IfUnlessModifier
|
31
30
|
|
32
31
|
# Create docker network.
|
33
32
|
def _docker_container_lib_create_network(network)
|
@@ -56,7 +55,6 @@ module DockerContainerLib
|
|
56
55
|
# Create docker container.
|
57
56
|
# rubocop:disable Metrics/MethodLength
|
58
57
|
# rubocop:disable Metrics/AbcSize
|
59
|
-
# rubocop:disable Style/IfUnlessModifier
|
60
58
|
def _docker_container_lib_create_container(container)
|
61
59
|
log.debug "Creating container \"#{container}\""
|
62
60
|
|
@@ -83,7 +81,7 @@ module DockerContainerLib
|
|
83
81
|
addhost: addhost,
|
84
82
|
container: container,
|
85
83
|
docker_run_options: config.active['docker_run_options'],
|
86
|
-
|
84
|
+
dockersock: '/var/run/docker.sock',
|
87
85
|
entrypoint: entrypoint,
|
88
86
|
entrypoint_options: config.active['docker_entrypoint_options'],
|
89
87
|
extra: config.active['docker_entrypoint_extra'],
|
@@ -102,10 +100,19 @@ module DockerContainerLib
|
|
102
100
|
|
103
101
|
try cmd_docker_create
|
104
102
|
end
|
105
|
-
# rubocop:enable Style/IfUnlessModifier
|
106
103
|
# rubocop:enable Metrics/AbcSize
|
107
104
|
# rubocop:enable Metrics/MethodLength
|
108
105
|
|
106
|
+
# Check if we are already inside a takelage container
|
107
|
+
def _docker_container_lib_check_matrjoschka
|
108
|
+
log.debug 'Checking if we are already inside a takelage container'
|
109
|
+
|
110
|
+
return false unless ENV.keys.include? 'TAKELAGE_PROJECT_BASE_DIR'
|
111
|
+
|
112
|
+
log.error 'You cannot log in to takelage from within takelage'
|
113
|
+
true
|
114
|
+
end
|
115
|
+
|
109
116
|
# Check if docker image is available
|
110
117
|
def _docker_container_lib_image_available?(image)
|
111
118
|
return true if docker_image_tag_list_local.include? @docker_tag
|
@@ -157,4 +164,5 @@ module DockerContainerLib
|
|
157
164
|
run cmd_docker_stop
|
158
165
|
end
|
159
166
|
end
|
167
|
+
# rubocop:enable Style/IfUnlessModifier
|
160
168
|
# rubocop:enable Metrics/ModuleLength
|
@@ -23,7 +23,7 @@ module DockerSocketLib
|
|
23
23
|
cmds_start_socket
|
24
24
|
end
|
25
25
|
|
26
|
-
# Get socket start command
|
26
|
+
# Get socket start command.
|
27
27
|
def _docker_socket_lib_get_start_cmd(mode, socket, host, port, path)
|
28
28
|
if mode == 'start'
|
29
29
|
unless _docker_socket_lib_socket_up? socket, host, port, path
|
@@ -45,7 +45,7 @@ module DockerSocketLib
|
|
45
45
|
)
|
46
46
|
end
|
47
47
|
|
48
|
-
# Check if a socket is available by trying to connect to it via TCP
|
48
|
+
# Check if a socket is available by trying to connect to it via TCP.
|
49
49
|
def _docker_socket_lib_socket_up?(socket, host, port, path)
|
50
50
|
error_message = _docker_socket_lib_error_msg socket, host, port, path
|
51
51
|
begin
|
@@ -6,34 +6,20 @@ module DockerSocketScheme
|
|
6
6
|
def docker_socket_scheme
|
7
7
|
log.debug 'Getting docker socket scheme'
|
8
8
|
|
9
|
-
|
9
|
+
gpg_path = _socket_get_agent_socket_path
|
10
|
+
gpg_port = config.active['docker_socket_gpg_agent_port']
|
11
|
+
ssh_path = _socket_get_agent_ssh_socket_path
|
12
|
+
ssh_port = config.active['docker_socket_gpg_ssh_agent_port']
|
10
13
|
|
11
|
-
|
14
|
+
socket_scheme = _socket_get_scheme gpg_path, gpg_port, ssh_path, ssh_port
|
15
|
+
log.debug 'Docker socket scheme is ' \
|
16
|
+
"\n\"\"\"\n#{hash_to_yaml socket_scheme}\"\"\""
|
12
17
|
|
13
18
|
socket_scheme
|
14
19
|
end
|
15
20
|
|
16
21
|
private
|
17
22
|
|
18
|
-
# Get docker socket config.
|
19
|
-
def _socket_get_config
|
20
|
-
socket_config = {
|
21
|
-
'docker_path' => _socket_get_docker_daemon_path,
|
22
|
-
'docker_port' => config.active['docker_socket_docker_daemon_port'],
|
23
|
-
'gpg_path' => _socket_get_agent_socket_path,
|
24
|
-
'gpg_port' => config.active['docker_socket_gpg_agent_port'],
|
25
|
-
'ssh_path' => _socket_get_agent_ssh_socket_path,
|
26
|
-
'ssh_port' => config.active['docker_socket_gpg_ssh_agent_port']
|
27
|
-
}
|
28
|
-
|
29
|
-
socket_config
|
30
|
-
end
|
31
|
-
|
32
|
-
# Get docker socket path.
|
33
|
-
def _socket_get_docker_daemon_path
|
34
|
-
'/var/run/docker.sock'
|
35
|
-
end
|
36
|
-
|
37
23
|
# Get gpg agent socket path.
|
38
24
|
def _socket_get_agent_socket_path
|
39
25
|
cmd_agent_socket_path =
|
@@ -49,15 +35,12 @@ module DockerSocketScheme
|
|
49
35
|
end
|
50
36
|
|
51
37
|
# Create socket scheme.
|
52
|
-
def _socket_get_scheme(
|
53
|
-
{ '
|
54
|
-
|
55
|
-
|
56
|
-
'
|
57
|
-
|
58
|
-
|
59
|
-
'gpg-ssh-agent' => { 'path' => socket_config['ssh_path'],
|
60
|
-
'host' => @socket_host,
|
61
|
-
'port' => socket_config['ssh_port'] } }
|
38
|
+
def _socket_get_scheme(gpg_path, gpg_port, ssh_path, ssh_port)
|
39
|
+
{ 'agent-socket' => { 'path' => gpg_path,
|
40
|
+
'host' => @socket_host,
|
41
|
+
'port' => gpg_port },
|
42
|
+
'agent-ssh-socket' => { 'path' => ssh_path,
|
43
|
+
'host' => @socket_host,
|
44
|
+
'port' => ssh_port } }
|
62
45
|
end
|
63
46
|
end
|
data/lib/takelage/lib/config.rb
CHANGED
@@ -19,6 +19,7 @@ module ConfigModule
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Initialze config
|
22
|
+
# rubocop:disable Metrics/AbcSize
|
22
23
|
def initialize_config
|
23
24
|
log.debug "takelage version: #{Takelage::VERSION}"
|
24
25
|
log.debug "Current working directory: #{Dir.pwd}"
|
@@ -28,6 +29,7 @@ module ConfigModule
|
|
28
29
|
TakelageConfig.instance.project = _config_read_project
|
29
30
|
TakelageConfig.instance.active = _config_merge_active
|
30
31
|
end
|
32
|
+
# rubocop:enable Metrics/AbcSize
|
31
33
|
|
32
34
|
# @return [Object] global singleton config
|
33
35
|
def config
|
@@ -55,7 +57,7 @@ module ConfigModule
|
|
55
57
|
false
|
56
58
|
end
|
57
59
|
|
58
|
-
# Check if config key is nil or empty
|
60
|
+
# Check if config key is nil or empty.
|
59
61
|
def _check_key_set?(config_key)
|
60
62
|
takel_config_key = TakelageConfig.instance.active[config_key]
|
61
63
|
return true unless takel_config_key.nil? || takel_config_key.empty?
|
@@ -99,7 +101,7 @@ module ConfigModule
|
|
99
101
|
project_yaml.sort.to_h
|
100
102
|
end
|
101
103
|
|
102
|
-
# Merge active config
|
104
|
+
# Merge active config.
|
103
105
|
def _config_merge_active
|
104
106
|
# make a clone or else we'll change the original hash
|
105
107
|
default = TakelageConfig.instance.default.clone
|
data/lib/takelage/lib/logging.rb
CHANGED
@@ -28,12 +28,14 @@ module LoggingModule
|
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
|
+
# Get log format.
|
31
32
|
def _logging_get_log_format
|
32
33
|
proc do |severity, _datetime, _progname, msg|
|
33
34
|
"[#{severity}] #{msg}\n"
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
38
|
+
# Get log level.
|
37
39
|
def _logging_get_log_level(loglevel)
|
38
40
|
if %w[FATAL ERROR WARN INFO DEBUG].include? loglevel
|
39
41
|
loglevel
|
data/lib/takelage/lib/subcmd.rb
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
# Thor with subcommands that work correctly with help
|
4
4
|
class SubCommandBase < Thor
|
5
|
-
# Set the subcommand banner
|
5
|
+
# Set the subcommand banner.
|
6
6
|
def self.banner(command, _namespace = nil, _subcommand = false)
|
7
7
|
"#{basename} #{subcommand_prefix} #{command.usage}"
|
8
8
|
end
|
9
9
|
|
10
|
-
# Set the subcommand prefix
|
10
|
+
# Set the subcommand prefix.
|
11
11
|
def self.subcommand_prefix
|
12
12
|
name.gsub(/.*::/, '')
|
13
13
|
.gsub(/^[A-Z]/) { |match| match[0].downcase }
|
data/lib/takelage/self/list.rb
CHANGED
data/lib/takelage/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.20.0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: takelage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Geospin
|
@@ -214,6 +214,10 @@ files:
|
|
214
214
|
- lib/takelage/bit/clipboard/paste.rb
|
215
215
|
- lib/takelage/bit/clipboard/pull.rb
|
216
216
|
- lib/takelage/bit/clipboard/push.rb
|
217
|
+
- lib/takelage/bit/require/cli.rb
|
218
|
+
- lib/takelage/bit/require/export.rb
|
219
|
+
- lib/takelage/bit/require/import.rb
|
220
|
+
- lib/takelage/bit/require/lib.rb
|
217
221
|
- lib/takelage/bit/scope/add.rb
|
218
222
|
- lib/takelage/bit/scope/cli.rb
|
219
223
|
- lib/takelage/bit/scope/inbit.rb
|
@@ -284,7 +288,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
284
288
|
requirements:
|
285
289
|
- - ">="
|
286
290
|
- !ruby/object:Gem::Version
|
287
|
-
version: '
|
291
|
+
version: '2.4'
|
288
292
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
289
293
|
requirements:
|
290
294
|
- - ">="
|