takelage 0.18.1
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 +7 -0
- data/LICENSE +674 -0
- data/README.md +213 -0
- data/bin/tau +6 -0
- data/lib/Thorfile +3 -0
- data/lib/takelage.rb +230 -0
- data/lib/takelage/bit/check/cli.rb +23 -0
- data/lib/takelage/bit/check/workspace.rb +37 -0
- data/lib/takelage/bit/cli.rb +15 -0
- data/lib/takelage/bit/clipboard/cli.rb +73 -0
- data/lib/takelage/bit/clipboard/copy.rb +140 -0
- data/lib/takelage/bit/clipboard/lib.rb +132 -0
- data/lib/takelage/bit/clipboard/paste.rb +57 -0
- data/lib/takelage/bit/clipboard/pull.rb +37 -0
- data/lib/takelage/bit/clipboard/push.rb +37 -0
- data/lib/takelage/bit/scope/add.rb +55 -0
- data/lib/takelage/bit/scope/cli.rb +74 -0
- data/lib/takelage/bit/scope/inbit.rb +13 -0
- data/lib/takelage/bit/scope/list.rb +41 -0
- data/lib/takelage/bit/scope/new.rb +44 -0
- data/lib/takelage/completion/cli.rb +24 -0
- data/lib/takelage/default.yml +68 -0
- data/lib/takelage/docker/check/cli.rb +23 -0
- data/lib/takelage/docker/check/running.rb +23 -0
- data/lib/takelage/docker/cli.rb +18 -0
- data/lib/takelage/docker/container/check/cli.rb +57 -0
- data/lib/takelage/docker/container/check/existing.rb +31 -0
- data/lib/takelage/docker/container/check/network.rb +31 -0
- data/lib/takelage/docker/container/check/orphaned.rb +31 -0
- data/lib/takelage/docker/container/clean.rb +39 -0
- data/lib/takelage/docker/container/cli.rb +114 -0
- data/lib/takelage/docker/container/command.rb +33 -0
- data/lib/takelage/docker/container/daemon.rb +13 -0
- data/lib/takelage/docker/container/lib.rb +160 -0
- data/lib/takelage/docker/container/login.rb +46 -0
- data/lib/takelage/docker/container/prune.rb +30 -0
- data/lib/takelage/docker/image/check/cli.rb +39 -0
- data/lib/takelage/docker/image/check/outdated.rb +40 -0
- data/lib/takelage/docker/image/cli.rb +44 -0
- data/lib/takelage/docker/image/tag/check/cli.rb +48 -0
- data/lib/takelage/docker/image/tag/check/local.rb +42 -0
- data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
- data/lib/takelage/docker/image/tag/cli.rb +15 -0
- data/lib/takelage/docker/image/tag/latest/cli.rb +57 -0
- data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
- data/lib/takelage/docker/image/tag/latest/remote.rb +25 -0
- data/lib/takelage/docker/image/tag/list/cli.rb +53 -0
- data/lib/takelage/docker/image/tag/list/local.rb +19 -0
- data/lib/takelage/docker/image/tag/list/remote.rb +28 -0
- data/lib/takelage/docker/image/update.rb +33 -0
- data/lib/takelage/docker/socket/cli.rb +75 -0
- data/lib/takelage/docker/socket/host.rb +25 -0
- data/lib/takelage/docker/socket/lib.rb +88 -0
- data/lib/takelage/docker/socket/scheme.rb +63 -0
- data/lib/takelage/docker/socket/start.rb +34 -0
- data/lib/takelage/docker/socket/stop.rb +55 -0
- data/lib/takelage/git/check/clean.rb +46 -0
- data/lib/takelage/git/check/cli.rb +49 -0
- data/lib/takelage/git/check/master.rb +26 -0
- data/lib/takelage/git/check/workspace.rb +33 -0
- data/lib/takelage/git/cli.rb +9 -0
- data/lib/takelage/info/cli.rb +9 -0
- data/lib/takelage/info/project/cli.rb +56 -0
- data/lib/takelage/lib/config.rb +114 -0
- data/lib/takelage/lib/logging.rb +47 -0
- data/lib/takelage/lib/project.rb +69 -0
- data/lib/takelage/lib/subcmd.rb +16 -0
- data/lib/takelage/lib/system.rb +104 -0
- data/lib/takelage/self/cli.rb +43 -0
- data/lib/takelage/self/config/cli.rb +82 -0
- data/lib/takelage/self/list.rb +30 -0
- data/lib/takelage/version +1 -0
- metadata +298 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage git check clean
|
4
|
+
module GitCheckClean
|
5
|
+
# Backend method for git check clean.
|
6
|
+
# @return [Boolean] is git workspace clean?
|
7
|
+
def git_check_clean
|
8
|
+
log.debug 'Checking if git workspace is clean'
|
9
|
+
|
10
|
+
return false unless git_check_workspace
|
11
|
+
|
12
|
+
status_unstaged = _git_check_clean_get_status_unstaged
|
13
|
+
status_uncommitted = _git_check_clean_get_status_uncommitted
|
14
|
+
stdout_str_status = _git_check_clean_get_str_status
|
15
|
+
|
16
|
+
# only return true if neither unstaged nor uncommitted nor empty files
|
17
|
+
sum = status_unstaged.exitstatus +
|
18
|
+
status_uncommitted.exitstatus +
|
19
|
+
stdout_str_status.length
|
20
|
+
|
21
|
+
sum.zero?
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Get git status of unstaged changes.
|
27
|
+
def _git_check_clean_get_status_unstaged
|
28
|
+
cmd_git_unstaged =
|
29
|
+
config.active['cmd_git_check_clean_git_unstaged']
|
30
|
+
try cmd_git_unstaged
|
31
|
+
end
|
32
|
+
|
33
|
+
# Get git status of uncommitted changes.
|
34
|
+
def _git_check_clean_get_status_uncommitted
|
35
|
+
cmd_git_uncommitted =
|
36
|
+
config.active['cmd_git_check_clean_git_uncommitted']
|
37
|
+
try cmd_git_uncommitted
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get git status result.
|
41
|
+
def _git_check_clean_get_str_status
|
42
|
+
cmd_git_status =
|
43
|
+
config.active['cmd_git_check_clean_git_status']
|
44
|
+
run cmd_git_status
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Takelage
|
4
|
+
# takelage git check
|
5
|
+
class GitCheck < SubCommandBase
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include GitCheckClean
|
10
|
+
include GitCheckMaster
|
11
|
+
include GitCheckWorkspace
|
12
|
+
|
13
|
+
#
|
14
|
+
# git check clean
|
15
|
+
#
|
16
|
+
desc 'clean', 'Check if the git workspace is clean'
|
17
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
18
|
+
Check if the git workspace is clean
|
19
|
+
LONGDESC
|
20
|
+
# Check if the git workspace is clean.
|
21
|
+
def clean
|
22
|
+
exit git_check_clean
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# git check master
|
27
|
+
#
|
28
|
+
desc 'master', 'Check if we are on the git master branch'
|
29
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
30
|
+
Check if we are on the git master branch
|
31
|
+
LONGDESC
|
32
|
+
# Check if we are on the git master branch.
|
33
|
+
def master
|
34
|
+
exit git_check_master
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# git check workspace
|
39
|
+
#
|
40
|
+
desc 'workspace', 'Check if a git workspace exists'
|
41
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
42
|
+
Check if a git workspace exists
|
43
|
+
LONGDESC
|
44
|
+
# Check if a git workspace exists.
|
45
|
+
def workspace
|
46
|
+
exit git_check_workspace
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage git check master
|
4
|
+
module GitCheckMaster
|
5
|
+
# Backend method for git check master.
|
6
|
+
# @return [Boolean] are we on the git master branch?
|
7
|
+
def git_check_master
|
8
|
+
log.debug 'Check if we are on the git master branch'
|
9
|
+
|
10
|
+
return false unless git_check_workspace
|
11
|
+
|
12
|
+
branch = _git_check_master_get_branch
|
13
|
+
log.debug "We are on git branch \"#{branch}\""
|
14
|
+
|
15
|
+
branch == 'master'
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Get git branch.
|
21
|
+
def _git_check_master_get_branch
|
22
|
+
cmd_get_branch =
|
23
|
+
config.active['cmd_git_check_master_git_branch']
|
24
|
+
(run cmd_get_branch).strip.split('/')[-1]
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage git check workspace
|
4
|
+
module GitCheckWorkspace
|
5
|
+
# Backend method for git check workspace.
|
6
|
+
# @return [Boolean] is this a git workspace?
|
7
|
+
def git_check_workspace
|
8
|
+
log.debug 'Check if this is a git workspace'
|
9
|
+
status_repo = _git_check_workspace_get_status_repo
|
10
|
+
dir = _git_check_workspace_get_dir
|
11
|
+
unless status_repo.exitstatus.zero?
|
12
|
+
log.debug "No git workspace found in \"#{dir}\""
|
13
|
+
return false
|
14
|
+
end
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Get git repository status.
|
21
|
+
def _git_check_workspace_get_status_repo
|
22
|
+
cmd_git_repo =
|
23
|
+
config.active['cmd_git_check_workspace_git_repo']
|
24
|
+
try cmd_git_repo
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get current working directory.
|
28
|
+
def _git_check_workspace_get_dir
|
29
|
+
cmd_pwd =
|
30
|
+
config.active['cmd_git_check_workspace_pwd']
|
31
|
+
(run cmd_pwd).strip
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Takelage
|
4
|
+
# takelage info project
|
5
|
+
class InfoProject < SubCommandBase
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include ProjectModule
|
10
|
+
|
11
|
+
#
|
12
|
+
# info project active
|
13
|
+
#
|
14
|
+
desc 'active', 'Print active project info'
|
15
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
16
|
+
Print active project info
|
17
|
+
LONGDESC
|
18
|
+
# Print active project info.
|
19
|
+
def active
|
20
|
+
project_active_yaml = hash_to_yaml(project.active)
|
21
|
+
exit false if project_active_yaml == false
|
22
|
+
say project_active_yaml
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# info project private
|
28
|
+
#
|
29
|
+
desc 'private', 'Print private project info'
|
30
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
31
|
+
Print private project info
|
32
|
+
LONGDESC
|
33
|
+
# Print private project info.
|
34
|
+
def private
|
35
|
+
project_private_yaml = hash_to_yaml(project.private)
|
36
|
+
exit false if project_private_yaml == false
|
37
|
+
say project_private_yaml
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# info project main
|
43
|
+
#
|
44
|
+
desc 'main', 'Print main project info'
|
45
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
46
|
+
Print main project info
|
47
|
+
LONGDESC
|
48
|
+
# Print main project info.
|
49
|
+
def main
|
50
|
+
project_main_yaml = hash_to_yaml(project.main)
|
51
|
+
exit false if project_main_yaml == false
|
52
|
+
say project_main_yaml
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage config module
|
4
|
+
module ConfigModule
|
5
|
+
# takelage config class.
|
6
|
+
class TakelageConfig
|
7
|
+
include Singleton
|
8
|
+
include LoggingModule
|
9
|
+
include SystemModule
|
10
|
+
|
11
|
+
attr_accessor :active, :default, :home, :project
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@active = {}
|
15
|
+
@default = {}
|
16
|
+
@home = {}
|
17
|
+
@project = {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Initialze config
|
22
|
+
def initialize_config
|
23
|
+
log.debug "takelage version: #{Takelage::VERSION}"
|
24
|
+
log.debug "Current working directory: #{Dir.pwd}"
|
25
|
+
|
26
|
+
TakelageConfig.instance.default = _config_read_default
|
27
|
+
TakelageConfig.instance.home = _config_read_home
|
28
|
+
TakelageConfig.instance.project = _config_read_project
|
29
|
+
TakelageConfig.instance.active = _config_merge_active
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Object] global singleton config
|
33
|
+
def config
|
34
|
+
TakelageConfig.instance
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Boolean] check if config keys are configured
|
38
|
+
def configured?(config_keys)
|
39
|
+
@configured = true
|
40
|
+
config_keys.each do |config_key|
|
41
|
+
next unless _check_key_defined? config_key
|
42
|
+
next unless _check_key_set? config_key
|
43
|
+
end
|
44
|
+
@configured
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Check if config key is defined.
|
50
|
+
def _check_key_defined?(config_key)
|
51
|
+
return true if TakelageConfig.instance.active.key? config_key
|
52
|
+
|
53
|
+
log.error "Undefined config key. Please configure \"#{config_key}\""
|
54
|
+
@configured = false
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
58
|
+
# Check if config key is nil or empty
|
59
|
+
def _check_key_set?(config_key)
|
60
|
+
takel_config_key = TakelageConfig.instance.active[config_key]
|
61
|
+
return true unless takel_config_key.nil? || takel_config_key.empty?
|
62
|
+
|
63
|
+
log.error "Unset config key. Please configure \"#{config_key}\""
|
64
|
+
@configured = false
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
# Read default config file in lib.
|
69
|
+
def _config_read_default
|
70
|
+
default_file = File.expand_path("#{File.dirname(__FILE__)}/../default.yml")
|
71
|
+
|
72
|
+
return {} unless File.exist? default_file
|
73
|
+
|
74
|
+
default_yaml = read_yaml_file(default_file) || {}
|
75
|
+
|
76
|
+
default_yaml.sort.to_h
|
77
|
+
end
|
78
|
+
|
79
|
+
# Read custom config file in $HOME.
|
80
|
+
def _config_read_home
|
81
|
+
home_file = "#{Dir.home}/.takelage.yml"
|
82
|
+
|
83
|
+
return {} unless File.exist? home_file
|
84
|
+
|
85
|
+
home_yaml = read_yaml_file(home_file) || {}
|
86
|
+
|
87
|
+
home_yaml.sort.to_h
|
88
|
+
end
|
89
|
+
|
90
|
+
# Read custom config file next to Rakefile.
|
91
|
+
def _config_read_project
|
92
|
+
_rakefile, path = Rake.application.find_rakefile_location
|
93
|
+
project_file = "#{path}/takelage.yml"
|
94
|
+
|
95
|
+
return {} unless File.exist? project_file
|
96
|
+
|
97
|
+
project_yaml = read_yaml_file(project_file) || {}
|
98
|
+
|
99
|
+
project_yaml.sort.to_h
|
100
|
+
end
|
101
|
+
|
102
|
+
# Merge active config
|
103
|
+
def _config_merge_active
|
104
|
+
# make a clone or else we'll change the original hash
|
105
|
+
default = TakelageConfig.instance.default.clone
|
106
|
+
home = TakelageConfig.instance.home.clone
|
107
|
+
project = TakelageConfig.instance.project.clone
|
108
|
+
|
109
|
+
# merge default and home and project to active
|
110
|
+
# project wins against home wins against default
|
111
|
+
project_over_home = home.merge!(project)
|
112
|
+
default.merge!(project_over_home).sort.to_h
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage logging module
|
4
|
+
module LoggingModule
|
5
|
+
# takelage logger
|
6
|
+
class TakelageLogger
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
attr_accessor :logger
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@logger = Logger.new(STDOUT)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Initialize logger with loglevel.
|
17
|
+
def initialize_logging(loglevel)
|
18
|
+
TakelageLogger.instance.logger.formatter = _logging_get_log_format
|
19
|
+
log_level_in_use = _logging_get_log_level loglevel
|
20
|
+
TakelageLogger.instance.logger.level = log_level_in_use
|
21
|
+
TakelageLogger.instance.logger.debug "Using loglevel #{log_level_in_use}"
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Object] global singleton logger
|
25
|
+
def log
|
26
|
+
TakelageLogger.instance.logger
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def _logging_get_log_format
|
32
|
+
proc do |severity, _datetime, _progname, msg|
|
33
|
+
"[#{severity}] #{msg}\n"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def _logging_get_log_level(loglevel)
|
38
|
+
if %w[FATAL ERROR WARN INFO DEBUG].include? loglevel
|
39
|
+
loglevel
|
40
|
+
else
|
41
|
+
TakelageLogger.instance.logger.error 'The parameter "loglevel"' \
|
42
|
+
' must be one of FATAL, ERROR, WARN, INFO, DEBUG'
|
43
|
+
TakelageLogger.instance.logger.info 'Using loglevel INFO'
|
44
|
+
Logger::INFO
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage project module
|
4
|
+
module ProjectModule
|
5
|
+
# takelage config class.
|
6
|
+
class TakelageProject
|
7
|
+
include Singleton
|
8
|
+
include LoggingModule
|
9
|
+
include SystemModule
|
10
|
+
include ConfigModule
|
11
|
+
|
12
|
+
attr_accessor :active, :private, :main
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@active = {}
|
16
|
+
@private = {}
|
17
|
+
@main = {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Initialze project
|
22
|
+
def initialize_project
|
23
|
+
TakelageProject.instance.main = _project_read_main
|
24
|
+
TakelageProject.instance.private = _project_read_private
|
25
|
+
TakelageProject.instance.active = _project_merge_active
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Object] global singleton project
|
29
|
+
def project
|
30
|
+
TakelageProject.instance
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# Read main YAML file.
|
36
|
+
def _project_read_main
|
37
|
+
_rakefile, @path = Rake.application.find_rakefile_location
|
38
|
+
main_file = "#{@path}/" \
|
39
|
+
"#{TakelageProject.instance.config.active['info_project_main']}"
|
40
|
+
|
41
|
+
return {} unless File.exist? main_file
|
42
|
+
|
43
|
+
read_yaml_file(main_file).sort.to_h || {}
|
44
|
+
end
|
45
|
+
|
46
|
+
# Read private YAML file.
|
47
|
+
def _project_read_private
|
48
|
+
_rakefile, @path = Rake.application.find_rakefile_location
|
49
|
+
private_file = "#{@path}/" \
|
50
|
+
"#{TakelageProject.instance.config.active['info_project_private']}"
|
51
|
+
|
52
|
+
return {} unless File.exist? private_file
|
53
|
+
|
54
|
+
private_yaml = read_yaml_file(private_file) || {}
|
55
|
+
|
56
|
+
private_yaml.sort.to_h
|
57
|
+
end
|
58
|
+
|
59
|
+
# Merge active configuration.
|
60
|
+
def _project_merge_active
|
61
|
+
# make a clone or else we'll change the original hash
|
62
|
+
main = TakelageProject.instance.main.clone
|
63
|
+
private = TakelageProject.instance.private.clone
|
64
|
+
|
65
|
+
# merge main and private to active
|
66
|
+
# private wins against main
|
67
|
+
main.merge!(private).sort.to_h
|
68
|
+
end
|
69
|
+
end
|