takelage 0.13.3 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/takelage.rb +37 -14
  3. data/lib/takelage/bit/check/cli.rb +1 -1
  4. data/lib/takelage/bit/check/{module.rb → workspace.rb} +2 -2
  5. data/lib/takelage/bit/clipboard/cli.rb +9 -3
  6. data/lib/takelage/bit/clipboard/copy.rb +140 -0
  7. data/lib/takelage/bit/clipboard/lib.rb +153 -0
  8. data/lib/takelage/bit/clipboard/paste.rb +58 -0
  9. data/lib/takelage/bit/clipboard/pull.rb +38 -0
  10. data/lib/takelage/bit/clipboard/push.rb +37 -0
  11. data/lib/takelage/bit/scope/add.rb +55 -0
  12. data/lib/takelage/bit/scope/cli.rb +7 -3
  13. data/lib/takelage/bit/scope/inbit.rb +13 -0
  14. data/lib/takelage/bit/scope/list.rb +41 -0
  15. data/lib/takelage/bit/scope/new.rb +44 -0
  16. data/lib/takelage/default.yml +4 -3
  17. data/lib/takelage/docker/check/cli.rb +1 -1
  18. data/lib/takelage/docker/check/{module.rb → running.rb} +2 -2
  19. data/lib/takelage/docker/container/check/cli.rb +4 -2
  20. data/lib/takelage/docker/container/check/existing.rb +31 -0
  21. data/lib/takelage/docker/container/check/network.rb +31 -0
  22. data/lib/takelage/docker/container/check/orphaned.rb +31 -0
  23. data/lib/takelage/docker/container/cli.rb +35 -34
  24. data/lib/takelage/docker/container/command.rb +33 -0
  25. data/lib/takelage/docker/container/daemon.rb +13 -0
  26. data/lib/takelage/docker/container/lib.rb +149 -0
  27. data/lib/takelage/docker/container/login.rb +46 -0
  28. data/lib/takelage/docker/container/nuke.rb +39 -0
  29. data/lib/takelage/docker/container/purge.rb +30 -0
  30. data/lib/takelage/docker/image/check/cli.rb +4 -4
  31. data/lib/takelage/docker/image/check/{module.rb → outdated.rb} +4 -5
  32. data/lib/takelage/docker/image/cli.rb +4 -4
  33. data/lib/takelage/docker/image/tag/check/cli.rb +4 -3
  34. data/lib/takelage/docker/image/tag/check/{module.rb → local.rb} +2 -34
  35. data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
  36. data/lib/takelage/docker/image/tag/latest/cli.rb +5 -3
  37. data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
  38. data/lib/takelage/docker/image/tag/latest/{module.rb → remote.rb} +2 -18
  39. data/lib/takelage/docker/image/tag/list/cli.rb +3 -2
  40. data/lib/takelage/docker/image/tag/list/local.rb +19 -0
  41. data/lib/takelage/docker/image/tag/list/{module.rb → remote.rb} +2 -17
  42. data/lib/takelage/docker/image/{module.rb → update.rb} +2 -2
  43. data/lib/takelage/docker/socket/cli.rb +6 -2
  44. data/lib/takelage/docker/socket/host.rb +25 -0
  45. data/lib/takelage/docker/socket/lib.rb +88 -0
  46. data/lib/takelage/docker/socket/scheme.rb +46 -0
  47. data/lib/takelage/docker/socket/start.rb +34 -0
  48. data/lib/takelage/docker/socket/stop.rb +55 -0
  49. data/lib/takelage/git/check/clean.rb +46 -0
  50. data/lib/takelage/git/check/cli.rb +3 -1
  51. data/lib/takelage/git/check/master.rb +26 -0
  52. data/lib/takelage/git/check/workspace.rb +33 -0
  53. data/lib/takelage/self/cli.rb +1 -1
  54. data/lib/takelage/self/{module.rb → list.rb} +2 -2
  55. data/lib/takelage/version +1 -1
  56. metadata +38 -15
  57. data/lib/takelage/bit/clipboard/module.rb +0 -401
  58. data/lib/takelage/bit/scope/module.rb +0 -122
  59. data/lib/takelage/docker/container/check/module.rb +0 -81
  60. data/lib/takelage/docker/container/module.rb +0 -295
  61. data/lib/takelage/docker/socket/module.rb +0 -227
  62. data/lib/takelage/git/check/module.rb +0 -93
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit clipboard pull
4
+ module BitClipboardPull
5
+ # Backend method for bit pull.
6
+ def bit_clipboard_pull
7
+ log.debug 'Running bit pull'
8
+
9
+ return false unless _bit_clipboard_lib_prepare_workspace
10
+
11
+ _bit_clipboard_pull_import_all
12
+ _bit_clipboard_pull_checkout_all
13
+ _bit_clipboard_lib_handle_bitignore
14
+ _bit_clipbpard_lib_remove_bit_artifacts
15
+ _bit_clipboard_lib_sync_workspace
16
+
17
+ log.info 'Pulled bit components'
18
+ true
19
+ end
20
+
21
+ private
22
+
23
+ # bit import components into workspace
24
+ def _bit_clipboard_pull_import_all
25
+ cmd_bit_import_all =
26
+ config.active['cmd_bit_clipboard_pull_bit_import_all']
27
+
28
+ run cmd_bit_import_all
29
+ end
30
+
31
+ # checkout components and merge them
32
+ def _bit_clipboard_pull_checkout_all
33
+ cmd_bit_checkout_all =
34
+ config.active['cmd_bit_clipboard_pull_bit_checkout_all']
35
+
36
+ run cmd_bit_checkout_all
37
+ end
38
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit clipboard push
4
+ module BitClipboardPush
5
+ # Backend method for bit push
6
+ def bit_clipboard_push
7
+ log.debug 'Running bit push'
8
+
9
+ return false unless _bit_clipboard_lib_prepare_workspace
10
+
11
+ _bit_clipboard_push_tag_all
12
+ _bit_clipboard_push_export_all
13
+ _bit_clipbpard_lib_remove_bit_artifacts
14
+ _bit_clipboard_lib_sync_workspace
15
+
16
+ log.info 'Pushed bit components'
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ # bit tag all components
23
+ def _bit_clipboard_push_tag_all
24
+ cmd_bit_tag_all =
25
+ config.active['cmd_bit_clipboard_push_bit_tag_all']
26
+
27
+ run cmd_bit_tag_all
28
+ end
29
+
30
+ # bit export components
31
+ def _bit_clipboard_push_export_all
32
+ cmd_bit_export_all =
33
+ config.active['cmd_bit_clipboard_push_bit_export_all']
34
+
35
+ run cmd_bit_export_all
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit scope add
4
+ module BitScopeAdd
5
+ # Backend method for bit scope add.
6
+ def bit_scope_add(scope)
7
+ log.debug "Adding bit remote scope \"#{scope}\" to local workspace"
8
+
9
+ return false unless configured? %w[bit_ssh bit_remote]
10
+
11
+ return false unless _bit_scope_add_workspace_ready?
12
+
13
+ return false unless _bit_scope_add_scope_exists? scope
14
+
15
+ run _bit_scope_add_cmd scope
16
+
17
+ log.info "Added bit remote scope \"#{scope}\" to local bit workspace"
18
+ end
19
+
20
+ private
21
+
22
+ # Check if workspace ready for bit scope add.
23
+ def _bit_scope_add_workspace_ready?
24
+ unless bit_check_workspace
25
+ log.error 'No bit workspace'
26
+ return false
27
+ end
28
+
29
+ return true unless git_check_workspace
30
+
31
+ return true if git_check_master
32
+
33
+ log.error 'Not on git master branch'
34
+ false
35
+ end
36
+
37
+ # Check if bit remote scope exists.
38
+ def _bit_scope_add_scope_exists?(scope)
39
+ return true if bit_scope_list.include? scope
40
+
41
+ log.error "The bit remote bit scope \"#{scope}\" doesn't exist"
42
+ false
43
+ end
44
+
45
+ # Prepare bit add scope command.
46
+ def _bit_scope_add_cmd(scope)
47
+ remote = config.active['bit_remote']
48
+
49
+ format(
50
+ config.active['cmd_bit_scope_add_scope'],
51
+ remote: remote,
52
+ scope: scope
53
+ )
54
+ end
55
+ end
@@ -6,9 +6,13 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include GitCheckModule
10
- include BitCheckModule
11
- include BitScopeModule
9
+ include GitCheckMaster
10
+ include GitCheckWorkspace
11
+ include BitCheckWorkspace
12
+ include BitScopeAdd
13
+ include BitScopeInbit
14
+ include BitScopeList
15
+ include BitScopeNew
12
16
 
13
17
  #
14
18
  # bit scope add
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit scope inbit
4
+ module BitScopeInbit
5
+ # Backend method for bit scope inbit.
6
+ def bit_scope_inbit
7
+ log.debug 'Logging in to bit remote server'
8
+
9
+ return false unless configured? %w[bit_ssh]
10
+
11
+ run_and_exit config.active['bit_ssh']
12
+ end
13
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit scope list
4
+ module BitScopeList
5
+ # Backend method for bit scope list.
6
+ # @return [String] list of bit scopes
7
+ def bit_scope_list
8
+ log.debug 'Listing bit remote scopes'
9
+
10
+ return false unless configured? %w[bit_ssh bit_remote]
11
+
12
+ # get ssh command from active config
13
+ cmd_bit_ssh =
14
+ config.active['bit_ssh']
15
+
16
+ root = config.active['bit_root']
17
+
18
+ cmd_bit_scope_list = _bit_scope_list_cmd root
19
+
20
+ # run ssh command with scope list command
21
+ scope_list = run "#{cmd_bit_ssh} '#{cmd_bit_scope_list}'"
22
+
23
+ # remove bit remote root directory from results
24
+ scope_list.gsub!(%r{#{root}/*}, '')
25
+
26
+ # remove /scope.json from results
27
+ scope_list.gsub!(%r{/scope.json}, '')
28
+
29
+ scope_list
30
+ end
31
+
32
+ private
33
+
34
+ # Prepare bit scope list command.
35
+ def _bit_scope_list_cmd(root)
36
+ format(
37
+ config.active['cmd_bit_scope_list_find_scopes'],
38
+ root: root
39
+ )
40
+ end
41
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage bit scope new
4
+ module BitScopeNew
5
+ # Backend method for bit scope new.
6
+ # @return [Int] status of new command
7
+ def bit_scope_new(scope)
8
+ log.debug "Creating new bit remote scope \"#{scope}\""
9
+
10
+ return false unless configured? %w[bit_ssh bit_remote]
11
+
12
+ return false if _bit_scope_new_scope_exists? scope
13
+
14
+ cmd_bit_ssh = config.active['bit_ssh']
15
+
16
+ cmd_bit_scope_new = _bit_scope_new_cmd scope
17
+
18
+ run "#{cmd_bit_ssh} '#{cmd_bit_scope_new}'"
19
+
20
+ log.info "Created new bit remote scope \"#{scope}\""
21
+ end
22
+
23
+ private
24
+
25
+ # Check if bit scope already exists.
26
+ def _bit_scope_new_scope_exists?(scope)
27
+ scope_list = bit_scope_list
28
+ return false unless scope_list.include? scope
29
+
30
+ log.error "The remote bit scope \"#{scope}\" already exists"
31
+ false
32
+ end
33
+
34
+ # Prepare bit scope new command.
35
+ def _bit_scope_new_cmd(scope)
36
+ root = config.active['bit_root']
37
+
38
+ format(
39
+ config.active['cmd_bit_scope_new_bit_init'],
40
+ scope: scope,
41
+ root: root
42
+ )
43
+ end
44
+ end
@@ -20,6 +20,7 @@ cmd_bit_clipboard_pull_bit_import_all: 'bit import --ignore-package-json --ignor
20
20
  cmd_bit_clipboard_pull_bit_checkout_all: 'bit checkout --ignore-dist --skip-update --all latest'
21
21
  cmd_bit_clipboard_push_bit_tag_all: 'bit tag --skip-update --skip-tests --all'
22
22
  cmd_bit_clipboard_push_bit_export_all: 'bit export --skip-update --all'
23
+ cmd_bit_scope_add_scope: 'bit remote add %{remote}/%{scope}'
23
24
  cmd_bit_scope_list_find_scopes: 'find -L %{root} -name scope.json'
24
25
  cmd_bit_scope_new_bit_init: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init --bare'
25
26
  cmd_bit_scope_remove_scope: 'rm --force --recursive %{root}/%{scope}'
@@ -39,12 +40,12 @@ cmd_docker_image_tag_check_local_docker_images: 'docker images --quiet %{image}'
39
40
  cmd_docker_image_tag_list_local_docker_images: 'docker images %{docker_user}\/%{docker_repo} --format "{{.Tag}}"'
40
41
  cmd_docker_image_update_docker_pull_latest: 'docker pull %{docker_user}/%{docker_repo}:%{tag_latest_remote}'
41
42
  cmd_docker_image_update_docker_remove_dangling: 'docker image prune --force'
42
- cmd_docker_socket_stop_docker_socket_ps: 'sudo ps a -o pid,command'
43
- cmd_docker_socket_stop_docker_socket_kill: 'sudo kill -SIGTERM %{pid}'
44
- cmd_docker_socket_get_start: 'sudo socat TCP-LISTEN:%{port},bind=%{host},reuseaddr,fork UNIX-CLIENT:%{path}'
45
43
  cmd_docker_socket_config_agent_socket_path: 'gpgconf --list-dirs agent-socket'
46
44
  cmd_docker_socket_config_agent_ssh_socket_path: 'gpgconf --list-dirs agent-ssh-socket'
45
+ cmd_docker_socket_get_start: 'sudo socat TCP-LISTEN:%{port},bind=%{host},reuseaddr,fork UNIX-CLIENT:%{path}'
47
46
  cmd_docker_socket_start_sudo_true: 'sudo true'
47
+ cmd_docker_socket_stop_docker_socket_ps: 'sudo ps a -o pid,command'
48
+ cmd_docker_socket_stop_docker_socket_kill: 'sudo kill -SIGTERM %{pid}'
48
49
  cmd_git_check_clean_git_unstaged: 'git diff --exit-code'
49
50
  cmd_git_check_clean_git_uncommitted: 'git diff --cached --exit-code'
50
51
  cmd_git_check_clean_git_status: 'git status --porcelain'
@@ -6,7 +6,7 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
9
+ include DockerCheckRunning
10
10
 
11
11
  #
12
12
  # docker check running
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # takelage docker check module
4
- module DockerCheckModule
3
+ # takelage docker check running
4
+ module DockerCheckRunning
5
5
  # Backend method for docker check running.
6
6
  # @return [Boolean] is the docker daemon running?
7
7
  def docker_check_running
@@ -6,8 +6,10 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
10
- include DockerContainerCheckModule
9
+ include DockerCheckRunning
10
+ include DockerContainerCheckExisting
11
+ include DockerContainerCheckNetwork
12
+ include DockerContainerCheckOrphaned
11
13
 
12
14
  #
13
15
  # docker container check existing
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container check existing
4
+ module DockerContainerCheckExisting
5
+ # Backend method for docker container check existing.
6
+ # @return [Boolean] is container existing?
7
+ def docker_container_check_existing(container)
8
+ log.debug "Checking if container \"#{container}\" is existing"
9
+
10
+ return false unless docker_check_running
11
+
12
+ stdout_str = run _docker_container_cmd_check_existing container
13
+
14
+ if stdout_str.to_s.strip.empty?
15
+ log.debug "Container \"#{container}\" is not existing"
16
+ return false
17
+ end
18
+
19
+ log.debug "Container \"#{container}\" is existing"
20
+ true
21
+ end
22
+
23
+ private
24
+
25
+ def _docker_container_cmd_check_existing(container)
26
+ format(
27
+ config.active['cmd_docker_container_check_existing_docker_ps'],
28
+ container: container
29
+ )
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container check network
4
+ module DockerContainerCheckNetwork
5
+ # Backend method for docker container check network.
6
+ # @return [Boolean] is network existing?
7
+ def docker_container_check_network(network)
8
+ log.debug "Checking if network \"#{network}\" is existing"
9
+
10
+ return false unless docker_check_running
11
+
12
+ stdout_str = run _docker_container_cmd_check_network network
13
+
14
+ if stdout_str.to_s.strip.empty?
15
+ log.debug "Network \"#{network}\" is not existing"
16
+ return false
17
+ end
18
+
19
+ log.debug "Network \"#{network}\" is existing"
20
+ true
21
+ end
22
+
23
+ private
24
+
25
+ def _docker_container_cmd_check_network(network)
26
+ format(
27
+ config.active['cmd_docker_container_check_network_docker_network'],
28
+ network: network
29
+ )
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker container check orphaned
4
+ module DockerContainerCheckOrphaned
5
+ # Backend method for docker container check orphaned.
6
+ # @return [Boolean] is container orphaned?
7
+ def docker_container_check_orphaned(container)
8
+ log.debug "Check if container \"#{container}\" is orphaned"
9
+
10
+ return false unless docker_check_running
11
+
12
+ stdout_str = run _docker_container_cmd_check_orphaned container
13
+
14
+ if stdout_str.include? '/loginpoint.py'
15
+ log.debug "Container \"#{container}\" isn't orphaned"
16
+ return false
17
+ end
18
+
19
+ log.debug "Container \"#{container}\" is orphaned"
20
+ true
21
+ end
22
+
23
+ private
24
+
25
+ def _docker_container_cmd_check_orphaned(container)
26
+ format(
27
+ config.active['cmd_docker_container_check_orphaned_docker_exec'],
28
+ container: container
29
+ )
30
+ end
31
+ end
@@ -6,14 +6,24 @@ module Takelage
6
6
  include LoggingModule
7
7
  include SystemModule
8
8
  include ConfigModule
9
- include DockerCheckModule
10
- include DockerContainerCheckModule
11
- include DockerContainerModule
12
- include DockerImageTagLatestModule
13
- include DockerImageTagListModule
14
- include DockerImageTagCheckModule
15
- include DockerImageCheckModule
16
- include DockerSocketModule
9
+ include DockerCheckRunning
10
+ include DockerContainerCheckExisting
11
+ include DockerContainerCheckNetwork
12
+ include DockerContainerCheckOrphaned
13
+ include DockerContainerLib
14
+ include DockerContainerCommand
15
+ include DockerContainerDaemon
16
+ include DockerContainerLogin
17
+ include DockerContainerNuke
18
+ include DockerContainerPurge
19
+ include DockerImageTagLatestLocal
20
+ include DockerImageTagListLocal
21
+ include DockerImageTagCheckLocal
22
+ include DockerImageCheckOutdated
23
+ include DockerSocketLib
24
+ include DockerSocketHost
25
+ include DockerSocketScheme
26
+ include DockerSocketStart
17
27
 
18
28
  # Initialize docker container
19
29
  # rubocop:disable Metrics/MethodLength
@@ -23,34 +33,25 @@ module Takelage
23
33
  super args, local_options, configuration
24
34
 
25
35
  @docker_debug = config.active['docker_debug']
26
-
27
36
  @docker_user = config.active['docker_user']
28
37
  @docker_repo = config.active['docker_repo']
29
- @docker_registry = config.active['docker_registry']
30
38
  @docker_tag = config.active['docker_tag']
31
-
39
+ @docker_registry = config.active['docker_registry']
32
40
  @dockersock = '/var/run/docker.sock'
33
-
34
41
  @dockerrun_options = config.active['docker_run_options']
35
-
36
42
  @entrypoint_extra = config.active['docker_entrypoint_extra']
37
43
  @entrypoint_options = config.active['docker_entrypoint_options']
38
-
39
44
  @gpg_agent_port = config.active['docker_socket_gpg_agent_port']
40
45
  @gpg_ssh_agent_port = config.active['docker_socket_gpg_ssh_agent_port']
41
-
42
- @username = ENV['USER'] || 'username'
43
- @gid = Etc.getpwnam(@username).gid
46
+ @socket_host = docker_socket_host
47
+ @sockets = docker_socket_scheme
48
+ @username = ENV['USER'] || 'noname'
44
49
  @uid = Etc.getpwnam(@username).uid
45
-
50
+ @gid = Etc.getpwnam(@username).gid
46
51
  @homedir = ENV['HOME'] || '/tmp'
47
52
  @workdir = Dir.getwd
48
53
  @hostname = "#{@docker_repo}_#{File.basename(@workdir)}"
49
-
50
54
  @timezone = 'Europe/Berlin'
51
-
52
- @socket_host = docker_socket_host
53
- @sockets = docker_socket_scheme
54
55
  end
55
56
  # rubocop:enable Metrics/AbcSize
56
57
  # rubocop:enable Metrics/MethodLength
@@ -58,6 +59,18 @@ module Takelage
58
59
  desc 'check [COMMAND]', 'Check docker container'
59
60
  subcommand 'check', DockerContainerCheck
60
61
 
62
+ #
63
+ # docker container command
64
+ #
65
+ desc 'command [CMD]', 'Run [CMD] in a docker container'
66
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
67
+ Run command in docker container
68
+ LONGDESC
69
+ # Run command in docker container.
70
+ def command(command)
71
+ docker_container_command(command)
72
+ end
73
+
61
74
  #
62
75
  # docker container daemon
63
76
  #
@@ -110,17 +123,5 @@ module Takelage
110
123
  def purge
111
124
  docker_container_purge
112
125
  end
113
-
114
- #
115
- # docker container run
116
- #
117
- desc 'command [CMD]', 'Run [CMD] in a docker container'
118
- long_desc <<-LONGDESC.gsub("\n", "\x5")
119
- Run command in docker container
120
- LONGDESC
121
- # Run command in docker container.
122
- def command(command)
123
- docker_container_command(command)
124
- end
125
126
  end
126
127
  end