takelage 0.21.1 → 0.23.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 +4 -4
- data/README.md +2 -1
- data/lib/takelage.rb +8 -15
- data/lib/takelage/bit/clipboard/cli.rb +1 -1
- data/lib/takelage/bit/clipboard/copy.rb +1 -1
- data/lib/takelage/bit/clipboard/lib.rb +20 -8
- data/lib/takelage/bit/clipboard/paste.rb +1 -1
- data/lib/takelage/bit/clipboard/pull.rb +1 -3
- data/lib/takelage/bit/clipboard/push.rb +1 -3
- data/lib/takelage/bit/require/cli.rb +1 -1
- data/lib/takelage/bit/require/import.rb +1 -1
- data/lib/takelage/bit/scope/add.rb +2 -2
- data/lib/takelage/bit/scope/cli.rb +1 -1
- data/lib/takelage/default.yml +10 -7
- data/lib/takelage/docker/check/cli.rb +18 -5
- data/lib/takelage/docker/check/{running.rb → daemon.rb} +3 -3
- data/lib/takelage/docker/check/socat.rb +23 -0
- data/lib/takelage/docker/container/check/cli.rb +2 -1
- data/lib/takelage/docker/container/check/existing.rb +1 -1
- data/lib/takelage/docker/container/check/network.rb +1 -1
- data/lib/takelage/docker/container/check/orphaned.rb +1 -1
- data/lib/takelage/docker/container/clean.rb +1 -1
- data/lib/takelage/docker/container/cli.rb +5 -5
- data/lib/takelage/docker/container/command.rb +1 -1
- data/lib/takelage/docker/container/daemon.rb +1 -1
- data/lib/takelage/docker/container/lib.rb +1 -1
- data/lib/takelage/docker/container/login.rb +1 -14
- data/lib/takelage/docker/container/prune.rb +1 -1
- data/lib/takelage/docker/image/cli.rb +1 -6
- data/lib/takelage/docker/image/tag/check.rb +42 -0
- data/lib/takelage/docker/image/tag/cli.rb +59 -6
- data/lib/takelage/docker/image/tag/latest.rb +20 -0
- data/lib/takelage/docker/image/tag/list.rb +19 -0
- data/lib/takelage/docker/image/update.rb +4 -10
- data/lib/takelage/docker/socket/cli.rb +2 -1
- data/lib/takelage/docker/socket/host.rb +14 -5
- data/lib/takelage/docker/socket/start.rb +3 -1
- data/lib/takelage/docker/socket/stop.rb +4 -3
- data/lib/takelage/git/check/cli.rb +7 -7
- data/lib/takelage/git/check/main.rb +26 -0
- data/lib/takelage/info/project/cli.rb +13 -0
- data/lib/takelage/lib/logging.rb +1 -1
- data/lib/takelage/lib/project.rb +8 -5
- data/lib/takelage/lib/subcmd.rb +2 -0
- data/lib/takelage/version +1 -1
- metadata +7 -14
- data/lib/takelage/docker/image/check/cli.rb +0 -39
- data/lib/takelage/docker/image/check/outdated.rb +0 -40
- data/lib/takelage/docker/image/tag/check/cli.rb +0 -48
- data/lib/takelage/docker/image/tag/check/local.rb +0 -42
- data/lib/takelage/docker/image/tag/check/remote.rb +0 -38
- data/lib/takelage/docker/image/tag/latest/cli.rb +0 -57
- data/lib/takelage/docker/image/tag/latest/local.rb +0 -20
- data/lib/takelage/docker/image/tag/latest/remote.rb +0 -25
- data/lib/takelage/docker/image/tag/list/cli.rb +0 -53
- data/lib/takelage/docker/image/tag/list/local.rb +0 -19
- data/lib/takelage/docker/image/tag/list/remote.rb +0 -28
- data/lib/takelage/git/check/master.rb +0 -26
@@ -6,7 +6,7 @@ module DockerContainerCommand
|
|
6
6
|
def docker_container_command(command)
|
7
7
|
log.debug 'Running command in container'
|
8
8
|
|
9
|
-
return false unless
|
9
|
+
return false unless docker_check_daemon
|
10
10
|
|
11
11
|
docker_socket_start
|
12
12
|
return false unless _docker_container_lib_create_net_and_ctr @hostname
|
@@ -115,7 +115,7 @@ module DockerContainerLib
|
|
115
115
|
|
116
116
|
# Check if docker image is available
|
117
117
|
def _docker_container_lib_image_available?(image)
|
118
|
-
return true if
|
118
|
+
return true if docker_image_tag_list.include? @docker_tag
|
119
119
|
|
120
120
|
log.error "No local image \"#{image}\" available"
|
121
121
|
log.info "Try: docker pull #{image}"
|
@@ -6,9 +6,8 @@ module DockerContainerLogin
|
|
6
6
|
def docker_container_login
|
7
7
|
log.debug 'Logging in to docker container'
|
8
8
|
|
9
|
-
return false unless
|
9
|
+
return false unless docker_check_daemon
|
10
10
|
|
11
|
-
_docker_container_login_check_outdated
|
12
11
|
docker_socket_start
|
13
12
|
return false unless _docker_container_lib_create_net_and_ctr @hostname
|
14
13
|
|
@@ -17,18 +16,6 @@ module DockerContainerLogin
|
|
17
16
|
|
18
17
|
private
|
19
18
|
|
20
|
-
# Check if newer docker container is available.
|
21
|
-
def _docker_container_login_check_outdated
|
22
|
-
return if @docker_tag == 'latest'
|
23
|
-
|
24
|
-
outdated = docker_image_check_outdated @docker_tag
|
25
|
-
return unless outdated
|
26
|
-
|
27
|
-
tag_latest = docker_image_tag_latest_remote
|
28
|
-
log.warn "#{@docker_user}/#{@docker_repo}:#{@docker_tag} is outdated"
|
29
|
-
log.warn "#{@docker_user}/#{@docker_repo}:#{tag_latest} is available"
|
30
|
-
end
|
31
|
-
|
32
19
|
# Prepare enter existing container command.
|
33
20
|
def _docker_container_login_enter_container(container)
|
34
21
|
log.debug "Entering container \"#{container}\""
|
@@ -6,7 +6,7 @@ module DockerContainerPrune
|
|
6
6
|
def docker_container_prune
|
7
7
|
log.debug 'Removing orphaned docker containers'
|
8
8
|
|
9
|
-
return false unless
|
9
|
+
return false unless docker_check_daemon
|
10
10
|
|
11
11
|
networks = _docker_container_prune_kill_orphaned_containers
|
12
12
|
_docker_container_lib_remove_networks networks
|
@@ -6,9 +6,7 @@ module Takelage
|
|
6
6
|
include LoggingModule
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
|
-
include
|
10
|
-
include DockerImageTagListRemote
|
11
|
-
include DockerImageTagLatestRemote
|
9
|
+
include DockerCheckDaemon
|
12
10
|
include DockerImageUpdate
|
13
11
|
|
14
12
|
# Initialize takelage docker image
|
@@ -21,9 +19,6 @@ module Takelage
|
|
21
19
|
@docker_registry = config.active['docker_registry']
|
22
20
|
end
|
23
21
|
|
24
|
-
desc 'check [COMMAND]', 'Check docker image'
|
25
|
-
subcommand 'check', DockerImageCheck
|
26
|
-
|
27
22
|
desc 'tag [COMMAND]', 'Handle docker image tags'
|
28
23
|
subcommand 'tag', DockerImageTag
|
29
24
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag check
|
4
|
+
module DockerImageTagCheck
|
5
|
+
# Backend method for docker image tag check.
|
6
|
+
# @return [Boolean] does docker image tag exist?
|
7
|
+
def docker_image_tag_check(tag)
|
8
|
+
log.debug "Check if docker image tag \"#{tag}\" exists"
|
9
|
+
|
10
|
+
return false unless docker_check_daemon
|
11
|
+
|
12
|
+
if tag.to_s.strip.empty?
|
13
|
+
log.warn 'No docker image tag specified'
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
image = "#{@docker_user}/#{@docker_repo}:#{tag}"
|
18
|
+
|
19
|
+
return false unless _docker_image_check_image? image
|
20
|
+
|
21
|
+
log.debug "Found docker image \"#{image}\""
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Check if image exists.
|
28
|
+
def _docker_image_check_image?(image)
|
29
|
+
cmd_docker_images =
|
30
|
+
format(
|
31
|
+
config.active['cmd_docker_image_tag_check_docker_images'],
|
32
|
+
image: image
|
33
|
+
)
|
34
|
+
|
35
|
+
if (run cmd_docker_images).to_s.strip.empty?
|
36
|
+
log.debug "No docker image \"#{image}\" found"
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
|
40
|
+
true
|
41
|
+
end
|
42
|
+
end
|
@@ -3,13 +3,66 @@
|
|
3
3
|
module Takelage
|
4
4
|
# takelage docker image tag
|
5
5
|
class DockerImageTag < SubCommandBase
|
6
|
-
|
7
|
-
|
6
|
+
include LoggingModule
|
7
|
+
include SystemModule
|
8
|
+
include ConfigModule
|
9
|
+
include DockerCheckDaemon
|
10
|
+
include DockerImageTagList
|
11
|
+
include DockerImageTagList
|
12
|
+
include DockerImageTagLatest
|
13
|
+
include DockerImageTagCheck
|
8
14
|
|
9
|
-
|
10
|
-
|
15
|
+
# Initialize takelage docker image tag check
|
16
|
+
def initialize(args = [], local_options = {}, configuration = {})
|
17
|
+
# initialize thor parent class
|
18
|
+
super args, local_options, configuration
|
11
19
|
|
12
|
-
|
13
|
-
|
20
|
+
@docker_user = config.active['docker_user']
|
21
|
+
@docker_repo = config.active['docker_repo']
|
22
|
+
@docker_registry = config.active['docker_registry']
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# docker image tag check
|
27
|
+
#
|
28
|
+
desc 'check [TAG]', 'Check if docker image [TAG] exists'
|
29
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
30
|
+
Check if docker image tag exists
|
31
|
+
LONGDESC
|
32
|
+
# Check if docker image tag exists.
|
33
|
+
def check(tag)
|
34
|
+
exit docker_image_tag_check tag
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# docker image tag latest
|
39
|
+
#
|
40
|
+
desc 'list', 'Print latest docker image tag'
|
41
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
42
|
+
Print latest docker image tag
|
43
|
+
Print the tag of the docker image with the highest tag.
|
44
|
+
LONGDESC
|
45
|
+
# Print latest docker image tag.
|
46
|
+
def latest
|
47
|
+
tag_latest = docker_image_tag_latest
|
48
|
+
exit false if tag_latest == false
|
49
|
+
say tag_latest
|
50
|
+
true
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# docker image tag list
|
55
|
+
#
|
56
|
+
desc 'list', 'Print docker image tags'
|
57
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
58
|
+
Print docker image tags
|
59
|
+
LONGDESC
|
60
|
+
# Print docker image tags.
|
61
|
+
def list
|
62
|
+
tag_list = docker_image_tag_list
|
63
|
+
exit false if tag_list == false
|
64
|
+
say tag_list
|
65
|
+
true
|
66
|
+
end
|
14
67
|
end
|
15
68
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag latest
|
4
|
+
module DockerImageTagLatest
|
5
|
+
# Backend method for docker image tag latest.
|
6
|
+
# @return [String] latest docker image tag
|
7
|
+
def docker_image_tag_latest
|
8
|
+
log.debug 'Getting latest docker image tag'
|
9
|
+
|
10
|
+
return false unless docker_check_daemon
|
11
|
+
|
12
|
+
tags = docker_image_tag_list
|
13
|
+
|
14
|
+
tag_latest = tags[-1]
|
15
|
+
|
16
|
+
log.debug "Latest docker tag: #{tag_latest}"
|
17
|
+
|
18
|
+
tag_latest
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage docker image tag list
|
4
|
+
module DockerImageTagList
|
5
|
+
# Backend method for docker image tag list.
|
6
|
+
# @return [Array] docker image tags
|
7
|
+
def docker_image_tag_list
|
8
|
+
cmd_docker_tags =
|
9
|
+
format(
|
10
|
+
config.active['cmd_docker_image_tag_list_docker_images'],
|
11
|
+
docker_user: @docker_user,
|
12
|
+
docker_repo: @docker_repo
|
13
|
+
)
|
14
|
+
|
15
|
+
tags = (run cmd_docker_tags).split("\n")
|
16
|
+
|
17
|
+
VersionSorter.sort(tags)
|
18
|
+
end
|
19
|
+
end
|
@@ -4,14 +4,9 @@
|
|
4
4
|
module DockerImageUpdate
|
5
5
|
# Backend method for docker image update.
|
6
6
|
def docker_image_update
|
7
|
-
return false unless
|
7
|
+
return false unless docker_check_daemon
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
tag = 'latest'
|
12
|
-
tag = docker_image_tag_latest_remote unless tags_remote.include?('latest')
|
13
|
-
|
14
|
-
cmd_docker_pull_latest = _docker_image_update_cmd_docker_pull_latest tag
|
9
|
+
cmd_docker_pull_latest = _docker_image_update_cmd_docker_pull_latest
|
15
10
|
|
16
11
|
cmd_docker_remove_dangling =
|
17
12
|
config.active['cmd_docker_image_update_docker_remove_dangling']
|
@@ -22,12 +17,11 @@ module DockerImageUpdate
|
|
22
17
|
private
|
23
18
|
|
24
19
|
# Prepare dpcker pull latest command.
|
25
|
-
def _docker_image_update_cmd_docker_pull_latest
|
20
|
+
def _docker_image_update_cmd_docker_pull_latest
|
26
21
|
format(
|
27
22
|
config.active['cmd_docker_image_update_docker_pull_latest'],
|
28
23
|
docker_user: @docker_user,
|
29
|
-
docker_repo: @docker_repo
|
30
|
-
tag_latest_remote: tag
|
24
|
+
docker_repo: @docker_repo
|
31
25
|
)
|
32
26
|
end
|
33
27
|
end
|
@@ -6,6 +6,17 @@ module DockerSocketHost
|
|
6
6
|
def docker_socket_host
|
7
7
|
log.debug 'Getting docker socket host ip address'
|
8
8
|
|
9
|
+
socket_host = _docker_socket_host_get_socket_host
|
10
|
+
|
11
|
+
log.debug "Docker socket host ip address is \"#{socket_host}\""
|
12
|
+
|
13
|
+
socket_host
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Get the socket host, i.e. the ip of the docker host.
|
19
|
+
def _docker_socket_host_get_socket_host
|
9
20
|
socket_host = '127.0.0.1'
|
10
21
|
|
11
22
|
addr_infos = Socket.getifaddrs
|
@@ -13,12 +24,10 @@ module DockerSocketHost
|
|
13
24
|
# if interface docker0 exists (== linux host)
|
14
25
|
# then return the ip address
|
15
26
|
addr_infos.each do |addr_info|
|
16
|
-
|
17
|
-
socket_host = addr_info.addr.ip_address if addr_info.addr.ipv4?
|
18
|
-
end
|
19
|
-
end
|
27
|
+
next unless (addr_info.name == 'docker0') && addr_info.addr.ipv4?
|
20
28
|
|
21
|
-
|
29
|
+
socket_host = addr_info.addr.ip_address
|
30
|
+
end
|
22
31
|
|
23
32
|
socket_host
|
24
33
|
end
|
@@ -6,7 +6,9 @@ module DockerSocketStart
|
|
6
6
|
def docker_socket_start
|
7
7
|
log.debug 'Starting sockets for docker container'
|
8
8
|
|
9
|
-
return false unless
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
return false unless docker_check_socat
|
10
12
|
|
11
13
|
cmds_start_socket = _docker_socket_lib_get_socket_start_commands 'start'
|
12
14
|
|
@@ -6,12 +6,13 @@ module DockerSocketStop
|
|
6
6
|
def docker_socket_stop
|
7
7
|
log.debug 'Stopping sockets for docker container'
|
8
8
|
|
9
|
-
return false unless
|
9
|
+
return false unless docker_check_daemon
|
10
|
+
|
11
|
+
return false unless docker_check_socat
|
10
12
|
|
11
13
|
# get process list
|
12
14
|
# assuming format: "pid command"
|
13
|
-
cmd_ps =
|
14
|
-
config.active['cmd_docker_socket_stop_docker_socket_ps']
|
15
|
+
cmd_ps = config.active['cmd_docker_socket_stop_docker_socket_ps']
|
15
16
|
|
16
17
|
stdout_str = run cmd_ps
|
17
18
|
|
@@ -7,7 +7,7 @@ module Takelage
|
|
7
7
|
include SystemModule
|
8
8
|
include ConfigModule
|
9
9
|
include GitCheckClean
|
10
|
-
include
|
10
|
+
include GitCheckMain
|
11
11
|
include GitCheckWorkspace
|
12
12
|
|
13
13
|
#
|
@@ -23,15 +23,15 @@ module Takelage
|
|
23
23
|
end
|
24
24
|
|
25
25
|
#
|
26
|
-
# git check
|
26
|
+
# git check main
|
27
27
|
#
|
28
|
-
desc '
|
28
|
+
desc 'main', 'Check if we are on the git main branch'
|
29
29
|
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
30
|
-
Check if we are on the git
|
30
|
+
Check if we are on the git main branch
|
31
31
|
LONGDESC
|
32
|
-
# Check if we are on the git
|
33
|
-
def
|
34
|
-
exit
|
32
|
+
# Check if we are on the git main branch.
|
33
|
+
def main
|
34
|
+
exit git_check_main
|
35
35
|
end
|
36
36
|
|
37
37
|
#
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# takelage git check main
|
4
|
+
module GitCheckMain
|
5
|
+
# Backend method for git check main.
|
6
|
+
# @return [Boolean] are we on the git main branch?
|
7
|
+
def git_check_main
|
8
|
+
log.debug 'Check if we are on the git main branch'
|
9
|
+
|
10
|
+
return false unless git_check_workspace
|
11
|
+
|
12
|
+
branch = _git_check_main_get_branch
|
13
|
+
log.debug "We are on git branch \"#{branch}\""
|
14
|
+
|
15
|
+
branch == config.active['git_main_branch']
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Get git branch.
|
21
|
+
def _git_check_main_get_branch
|
22
|
+
cmd_get_branch =
|
23
|
+
config.active['cmd_git_check_main_git_branch']
|
24
|
+
(run cmd_get_branch).strip.split('/')[-1]
|
25
|
+
end
|
26
|
+
end
|
@@ -52,5 +52,18 @@ module Takelage
|
|
52
52
|
say project_main_yaml
|
53
53
|
true
|
54
54
|
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# info project dir
|
58
|
+
#
|
59
|
+
desc 'dir', 'Print project root directory'
|
60
|
+
long_desc <<-LONGDESC.gsub("\n", "\x5")
|
61
|
+
Print project root directory
|
62
|
+
LONGDESC
|
63
|
+
# Print project root directory.
|
64
|
+
def dir
|
65
|
+
say project.dir
|
66
|
+
true
|
67
|
+
end
|
55
68
|
end
|
56
69
|
end
|
data/lib/takelage/lib/logging.rb
CHANGED
data/lib/takelage/lib/project.rb
CHANGED
@@ -9,12 +9,13 @@ module ProjectModule
|
|
9
9
|
include SystemModule
|
10
10
|
include ConfigModule
|
11
11
|
|
12
|
-
attr_accessor :active, :private, :main
|
12
|
+
attr_accessor :active, :private, :main, :dir
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
@active = {}
|
16
16
|
@private = {}
|
17
17
|
@main = {}
|
18
|
+
@dir = {}
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -23,6 +24,8 @@ module ProjectModule
|
|
23
24
|
TakelageProject.instance.main = _project_read_main
|
24
25
|
TakelageProject.instance.private = _project_read_private
|
25
26
|
TakelageProject.instance.active = _project_merge_active
|
27
|
+
TakelageProject.instance.dir =
|
28
|
+
TakelageProject.instance.config.active['project_root_dir']
|
26
29
|
end
|
27
30
|
|
28
31
|
# @return [Object] global singleton project
|
@@ -34,8 +37,8 @@ module ProjectModule
|
|
34
37
|
|
35
38
|
# Read main YAML file.
|
36
39
|
def _project_read_main
|
37
|
-
|
38
|
-
main_file = "#{
|
40
|
+
dir = TakelageProject.instance.config.active['project_root_dir']
|
41
|
+
main_file = "#{dir}/" \
|
39
42
|
"#{TakelageProject.instance.config.active['info_project_main']}"
|
40
43
|
|
41
44
|
return {} unless File.exist? main_file
|
@@ -45,8 +48,8 @@ module ProjectModule
|
|
45
48
|
|
46
49
|
# Read private YAML file.
|
47
50
|
def _project_read_private
|
48
|
-
|
49
|
-
private_file = "#{
|
51
|
+
dir = TakelageProject.instance.config.active['project_root_dir']
|
52
|
+
private_file = "#{dir}/" \
|
50
53
|
"#{TakelageProject.instance.config.active['info_project_private']}"
|
51
54
|
|
52
55
|
return {} unless File.exist? private_file
|