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.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +213 -0
  4. data/bin/tau +6 -0
  5. data/lib/Thorfile +3 -0
  6. data/lib/takelage.rb +230 -0
  7. data/lib/takelage/bit/check/cli.rb +23 -0
  8. data/lib/takelage/bit/check/workspace.rb +37 -0
  9. data/lib/takelage/bit/cli.rb +15 -0
  10. data/lib/takelage/bit/clipboard/cli.rb +73 -0
  11. data/lib/takelage/bit/clipboard/copy.rb +140 -0
  12. data/lib/takelage/bit/clipboard/lib.rb +132 -0
  13. data/lib/takelage/bit/clipboard/paste.rb +57 -0
  14. data/lib/takelage/bit/clipboard/pull.rb +37 -0
  15. data/lib/takelage/bit/clipboard/push.rb +37 -0
  16. data/lib/takelage/bit/scope/add.rb +55 -0
  17. data/lib/takelage/bit/scope/cli.rb +74 -0
  18. data/lib/takelage/bit/scope/inbit.rb +13 -0
  19. data/lib/takelage/bit/scope/list.rb +41 -0
  20. data/lib/takelage/bit/scope/new.rb +44 -0
  21. data/lib/takelage/completion/cli.rb +24 -0
  22. data/lib/takelage/default.yml +68 -0
  23. data/lib/takelage/docker/check/cli.rb +23 -0
  24. data/lib/takelage/docker/check/running.rb +23 -0
  25. data/lib/takelage/docker/cli.rb +18 -0
  26. data/lib/takelage/docker/container/check/cli.rb +57 -0
  27. data/lib/takelage/docker/container/check/existing.rb +31 -0
  28. data/lib/takelage/docker/container/check/network.rb +31 -0
  29. data/lib/takelage/docker/container/check/orphaned.rb +31 -0
  30. data/lib/takelage/docker/container/clean.rb +39 -0
  31. data/lib/takelage/docker/container/cli.rb +114 -0
  32. data/lib/takelage/docker/container/command.rb +33 -0
  33. data/lib/takelage/docker/container/daemon.rb +13 -0
  34. data/lib/takelage/docker/container/lib.rb +160 -0
  35. data/lib/takelage/docker/container/login.rb +46 -0
  36. data/lib/takelage/docker/container/prune.rb +30 -0
  37. data/lib/takelage/docker/image/check/cli.rb +39 -0
  38. data/lib/takelage/docker/image/check/outdated.rb +40 -0
  39. data/lib/takelage/docker/image/cli.rb +44 -0
  40. data/lib/takelage/docker/image/tag/check/cli.rb +48 -0
  41. data/lib/takelage/docker/image/tag/check/local.rb +42 -0
  42. data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
  43. data/lib/takelage/docker/image/tag/cli.rb +15 -0
  44. data/lib/takelage/docker/image/tag/latest/cli.rb +57 -0
  45. data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
  46. data/lib/takelage/docker/image/tag/latest/remote.rb +25 -0
  47. data/lib/takelage/docker/image/tag/list/cli.rb +53 -0
  48. data/lib/takelage/docker/image/tag/list/local.rb +19 -0
  49. data/lib/takelage/docker/image/tag/list/remote.rb +28 -0
  50. data/lib/takelage/docker/image/update.rb +33 -0
  51. data/lib/takelage/docker/socket/cli.rb +75 -0
  52. data/lib/takelage/docker/socket/host.rb +25 -0
  53. data/lib/takelage/docker/socket/lib.rb +88 -0
  54. data/lib/takelage/docker/socket/scheme.rb +63 -0
  55. data/lib/takelage/docker/socket/start.rb +34 -0
  56. data/lib/takelage/docker/socket/stop.rb +55 -0
  57. data/lib/takelage/git/check/clean.rb +46 -0
  58. data/lib/takelage/git/check/cli.rb +49 -0
  59. data/lib/takelage/git/check/master.rb +26 -0
  60. data/lib/takelage/git/check/workspace.rb +33 -0
  61. data/lib/takelage/git/cli.rb +9 -0
  62. data/lib/takelage/info/cli.rb +9 -0
  63. data/lib/takelage/info/project/cli.rb +56 -0
  64. data/lib/takelage/lib/config.rb +114 -0
  65. data/lib/takelage/lib/logging.rb +47 -0
  66. data/lib/takelage/lib/project.rb +69 -0
  67. data/lib/takelage/lib/subcmd.rb +16 -0
  68. data/lib/takelage/lib/system.rb +104 -0
  69. data/lib/takelage/self/cli.rb +43 -0
  70. data/lib/takelage/self/config/cli.rb +82 -0
  71. data/lib/takelage/self/list.rb +30 -0
  72. data/lib/takelage/version +1 -0
  73. metadata +298 -0
@@ -0,0 +1,37 @@
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_clipbpard_lib_remove_bit_artifacts
14
+ _bit_clipboard_lib_sync_workspace
15
+
16
+ log.info 'Pulled bit components'
17
+ true
18
+ end
19
+
20
+ private
21
+
22
+ # bit import components into workspace
23
+ def _bit_clipboard_pull_import_all
24
+ cmd_bit_import_all =
25
+ config.active['cmd_bit_clipboard_pull_bit_import_all']
26
+
27
+ run cmd_bit_import_all
28
+ end
29
+
30
+ # checkout components and merge them
31
+ def _bit_clipboard_pull_checkout_all
32
+ cmd_bit_checkout_all =
33
+ config.active['cmd_bit_clipboard_pull_bit_checkout_all']
34
+
35
+ run cmd_bit_checkout_all
36
+ end
37
+ 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
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage bit scope
5
+ class BitScope < SubCommandBase
6
+ include LoggingModule
7
+ include SystemModule
8
+ include ConfigModule
9
+ include GitCheckMaster
10
+ include GitCheckWorkspace
11
+ include BitCheckWorkspace
12
+ include BitScopeAdd
13
+ include BitScopeInbit
14
+ include BitScopeList
15
+ include BitScopeNew
16
+
17
+ #
18
+ # bit scope add
19
+ #
20
+ desc 'add [SCOPE]', 'Add a bit [SCOPE]'
21
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
22
+ Add bit remote scope
23
+ This command will add a bit remote scope to a local bit workspace.
24
+ The scope must exist on the bit remote server.
25
+ LONGDESC
26
+ # Add bit remote scope.
27
+ def add(scope)
28
+ exit bit_scope_add scope
29
+ end
30
+
31
+ #
32
+ # bit scope new
33
+ #
34
+ desc 'new [SCOPE]', 'Init a new bit [SCOPE]'
35
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
36
+ Create new bit remote scope
37
+ This command will create a new directory on the remote bit server.
38
+ Then it will run "bit init --bare" in the newly created directory.
39
+ See the bit documentation: http://docs.bit.dev/docs/bit-server
40
+ LONGDESC
41
+ # Create new bit remote scope.
42
+ def new(scope)
43
+ exit bit_scope_new scope
44
+ end
45
+
46
+ #
47
+ # bit scope list
48
+ #
49
+ desc 'list', 'List bit remote scopes'
50
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
51
+ List bit remote scopes
52
+ This command will list bit remote scopes.
53
+ LONGDESC
54
+ # List bit remote scopes.
55
+ def list
56
+ scopes = bit_scope_list
57
+ exit false if scopes == false
58
+ say scopes unless scopes.to_s.strip.empty?
59
+ true
60
+ end
61
+
62
+ #
63
+ # bit scope inbit
64
+ #
65
+ desc 'inbit', 'Log in to bit remote server'
66
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
67
+ Log in to bit remote server
68
+ LONGDESC
69
+ # Log in to bit remote server.
70
+ def inbit
71
+ exit bit_scope_inbit
72
+ end
73
+ end
74
+ end
@@ -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
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage completion
5
+ class Completion < SubCommandBase
6
+ include LoggingModule
7
+
8
+ desc 'bash', 'Print bash completion code'
9
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
10
+ Print bash completion code
11
+ This command will print bash code which can be parsed to enable auto-completion for the takelage cli.
12
+ Add this to your bash startup files:
13
+
14
+ source <(tau completion bash)
15
+ LONGDESC
16
+ # Print bash completion code.
17
+ def bash
18
+ completion_bash = Takelage::CLI.new.bash_fylla
19
+ exit false if completion_bash == false
20
+ say completion_bash
21
+ true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,68 @@
1
+ ---
2
+ bit_dev_user: 'takelage'
3
+ bit_remote: ''
4
+ bit_root: '/bit'
5
+ bit_ssh: ''
6
+ cmd_bit_check_workspace_bit_list: 'bit list'
7
+ cmd_bit_check_workspace_pwd: 'pwd'
8
+ cmd_bit_clipboard_copy_bit_list_scope: 'bit list --skip-update --json %{scope}'
9
+ cmd_bit_clipboard_copy_bit_list_remotes: 'bit remote --skip-update'
10
+ cmd_bit_clipboard_copy_bit_add_dir: 'bit add --skip-update --id %{id} --main %{dir}/README.bit %{dir}'
11
+ cmd_bit_clipboard_copy_bit_tag_id: 'bit tag --skip-update --skip-tests %{id}'
12
+ cmd_bit_clipboard_copy_bit_export_to_scope: 'bit export --skip-update %{scope}'
13
+ cmd_bit_clipboard_git_add: 'git add %{file}'
14
+ cmd_bit_clipboard_git_commit: 'git commit --message="%{message}"'
15
+ cmd_bit_clipboard_git_pull: 'git pull origin master'
16
+ cmd_bit_clipboard_git_push: 'git push origin master'
17
+ cmd_bit_clipboard_paste_bit_list_scope: 'bit list --skip-update --json %{scope}'
18
+ cmd_bit_clipboard_paste_bit_import_cid: 'bit import --ignore-package-json --ignore-dist --skip-update --path %{dir} %{cid}'
19
+ cmd_bit_clipboard_pull_bit_import_all: 'bit import --ignore-package-json --ignore-dist --skip-update'
20
+ cmd_bit_clipboard_pull_bit_checkout_all: 'bit checkout --ignore-package-json --ignore-dist --skip-update --skip-npm-install --all latest'
21
+ cmd_bit_clipboard_push_bit_tag_all: 'bit tag --skip-update --skip-tests --all'
22
+ cmd_bit_clipboard_push_bit_export_all: 'bit export --skip-update --all'
23
+ cmd_bit_scope_add_scope: 'bit remote add %{remote}/%{scope}'
24
+ cmd_bit_scope_list_find_scopes: 'find -L %{root} -name scope.json'
25
+ cmd_bit_scope_new_bit_init: 'mkdir -p %{root}/%{scope} && cd %{root}/%{scope} && bit init --bare'
26
+ cmd_bit_scope_remove_scope: 'rm --force --recursive %{root}/%{scope}'
27
+ cmd_docker_check_running_docker_info: 'docker info'
28
+ cmd_docker_container_check_existing_docker_ps: 'docker ps --filter name=^%{container}$ --quiet'
29
+ cmd_docker_container_check_network_docker_network: 'docker network ls --quiet --filter name=^%{network}$'
30
+ 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} --docker_daemon_port %{docker_daemon_port} --gpg_agent_port %{gpg_agent_port} --gpg_ssh_agent_port %{gpg_ssh_agent_port} --extra=%{extra} %{entrypoint_options}'
32
+ cmd_docker_container_create_network: 'docker network create %{network}'
33
+ cmd_docker_container_enter_container: 'docker exec --interactive --tty %{container} %{loginpoint} --username %{username}'
34
+ cmd_docker_container_get_container_name: 'docker ps --filter id=%{container} --format "{{.Names}}"'
35
+ cmd_docker_container_get_containers: 'docker ps --all --filter name=^%{docker_repo}_ --quiet'
36
+ cmd_docker_container_remove_network: 'docker network rm %{network}'
37
+ cmd_docker_container_docker_exec: 'docker exec %{container} su %{username} -c "LANG=en_US.UTF-8 %{command}"'
38
+ cmd_docker_container_stop_container: 'docker stop %{container}'
39
+ cmd_docker_image_tag_check_local_docker_images: 'docker images --quiet %{image}'
40
+ cmd_docker_image_tag_list_local_docker_images: 'docker images %{docker_user}\/%{docker_repo} --format "{{.Tag}}"'
41
+ cmd_docker_image_update_docker_pull_latest: 'docker pull %{docker_user}/%{docker_repo}:%{tag_latest_remote}'
42
+ cmd_docker_image_update_docker_remove_dangling: 'docker image prune --force'
43
+ cmd_docker_socket_config_agent_socket_path: 'gpgconf --list-dirs agent-socket'
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}'
46
+ cmd_docker_socket_start_sudo_true: 'sudo true'
47
+ cmd_docker_socket_stop_docker_socket_ps: 'sudo ps ax -o pid,command'
48
+ cmd_docker_socket_stop_docker_socket_kill: 'sudo kill -SIGTERM %{pid}'
49
+ cmd_git_check_clean_git_unstaged: 'git diff --exit-code'
50
+ cmd_git_check_clean_git_uncommitted: 'git diff --cached --exit-code'
51
+ cmd_git_check_clean_git_status: 'git status --porcelain'
52
+ cmd_git_check_master_git_branch: 'git symbolic-ref HEAD'
53
+ cmd_git_check_workspace_git_repo: 'git -C . rev-parse'
54
+ cmd_git_check_workspace_pwd: 'pwd'
55
+ docker_debug: 'ansible/roles/takel-takelage/files/takelscripts'
56
+ docker_entrypoint_extra: '.config/gcloud'
57
+ docker_entrypoint_options: ''
58
+ docker_registry: 'https://registry.hub.docker.com'
59
+ docker_repo: 'takelage'
60
+ docker_run_options: '--env GOOGLE_APPLICATION_CREDENTIALS=/hostdir/.google/default.json'
61
+ docker_shm_size: '512M'
62
+ docker_socket_docker_daemon_port: 17873
63
+ docker_socket_gpg_agent_port: 17874
64
+ docker_socket_gpg_ssh_agent_port: 17875
65
+ docker_tag: 'latest'
66
+ docker_user: 'takelage'
67
+ info_project_main: 'project.yml'
68
+ info_project_private: 'private/project.yml'
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage docker check
5
+ class DockerCheck < SubCommandBase
6
+ include LoggingModule
7
+ include SystemModule
8
+ include ConfigModule
9
+ include DockerCheckRunning
10
+
11
+ #
12
+ # docker check running
13
+ #
14
+ desc 'running', 'Check if docker daemon is running'
15
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
16
+ Check if docker daemon is running
17
+ LONGDESC
18
+ # Check if docker daemon is running.
19
+ def running
20
+ exit docker_check_running
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage docker check running
4
+ module DockerCheckRunning
5
+ # Backend method for docker check running.
6
+ # @return [Boolean] is the docker daemon running?
7
+ def docker_check_running
8
+ return true if @docker_daemon_running
9
+
10
+ log.debug 'Check if the docker daemon is running'
11
+
12
+ status = try config.active['cmd_docker_check_running_docker_info']
13
+
14
+ unless status.exitstatus.zero?
15
+ log.error 'The docker daemon is not running'
16
+ return false
17
+ end
18
+
19
+ log.debug 'The docker daemon is running'
20
+ @docker_daemon_running = true
21
+ true
22
+ end
23
+ end