takeltau 0.34.9

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 (94) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +235 -0
  4. data/bin/tau +6 -0
  5. data/lib/Thorfile +3 -0
  6. data/lib/takeltau.rb +257 -0
  7. data/lib/takeltau/bit/check/cli.rb +23 -0
  8. data/lib/takeltau/bit/check/workspace.rb +37 -0
  9. data/lib/takeltau/bit/cli.rb +18 -0
  10. data/lib/takeltau/bit/clipboard/cli.rb +73 -0
  11. data/lib/takeltau/bit/clipboard/copy.rb +142 -0
  12. data/lib/takeltau/bit/clipboard/lib.rb +143 -0
  13. data/lib/takeltau/bit/clipboard/paste.rb +60 -0
  14. data/lib/takeltau/bit/clipboard/pull.rb +37 -0
  15. data/lib/takeltau/bit/clipboard/push.rb +37 -0
  16. data/lib/takeltau/bit/require/cli.rb +57 -0
  17. data/lib/takeltau/bit/require/export.rb +34 -0
  18. data/lib/takeltau/bit/require/import.rb +133 -0
  19. data/lib/takeltau/bit/require/lib.rb +19 -0
  20. data/lib/takeltau/bit/scope/add.rb +55 -0
  21. data/lib/takeltau/bit/scope/cli.rb +74 -0
  22. data/lib/takeltau/bit/scope/list.rb +41 -0
  23. data/lib/takeltau/bit/scope/new.rb +44 -0
  24. data/lib/takeltau/bit/scope/ssh.rb +13 -0
  25. data/lib/takeltau/completion/cli.rb +24 -0
  26. data/lib/takeltau/default.yml +95 -0
  27. data/lib/takeltau/docker/check/cli.rb +23 -0
  28. data/lib/takeltau/docker/check/daemon.rb +27 -0
  29. data/lib/takeltau/docker/cli.rb +15 -0
  30. data/lib/takeltau/docker/container/check/cli.rb +57 -0
  31. data/lib/takeltau/docker/container/check/existing.rb +32 -0
  32. data/lib/takeltau/docker/container/check/network.rb +32 -0
  33. data/lib/takeltau/docker/container/check/orphaned.rb +32 -0
  34. data/lib/takeltau/docker/container/clean.rb +40 -0
  35. data/lib/takeltau/docker/container/cli.rb +118 -0
  36. data/lib/takeltau/docker/container/command.rb +38 -0
  37. data/lib/takeltau/docker/container/daemon.rb +17 -0
  38. data/lib/takeltau/docker/container/lib.rb +181 -0
  39. data/lib/takeltau/docker/container/login.rb +58 -0
  40. data/lib/takeltau/docker/container/prune.rb +31 -0
  41. data/lib/takeltau/docker/image/cli.rb +39 -0
  42. data/lib/takeltau/docker/image/tag/check.rb +42 -0
  43. data/lib/takeltau/docker/image/tag/cli.rb +68 -0
  44. data/lib/takeltau/docker/image/tag/latest.rb +24 -0
  45. data/lib/takeltau/docker/image/tag/list.rb +19 -0
  46. data/lib/takeltau/docker/image/update.rb +27 -0
  47. data/lib/takeltau/git/check/bit.rb +26 -0
  48. data/lib/takeltau/git/check/clean.rb +46 -0
  49. data/lib/takeltau/git/check/cli.rb +49 -0
  50. data/lib/takeltau/git/check/workspace.rb +34 -0
  51. data/lib/takeltau/git/cli.rb +9 -0
  52. data/lib/takeltau/info/cli.rb +12 -0
  53. data/lib/takeltau/info/project/cli.rb +69 -0
  54. data/lib/takeltau/info/status/bar.rb +112 -0
  55. data/lib/takeltau/info/status/cli.rb +107 -0
  56. data/lib/takeltau/info/status/git.rb +47 -0
  57. data/lib/takeltau/info/status/gopass.rb +37 -0
  58. data/lib/takeltau/info/status/gpg.rb +39 -0
  59. data/lib/takeltau/info/status/lib.rb +46 -0
  60. data/lib/takeltau/info/status/ssh.rb +46 -0
  61. data/lib/takeltau/init/cli.rb +12 -0
  62. data/lib/takeltau/init/lib.rb +86 -0
  63. data/lib/takeltau/init/packer/cli.rb +82 -0
  64. data/lib/takeltau/init/packer/docker.rb +64 -0
  65. data/lib/takeltau/init/packer/templates/ansiblelint.tt +3 -0
  66. data/lib/takeltau/init/packer/templates/bitrequireyml.tt +13 -0
  67. data/lib/takeltau/init/packer/templates/groupvarsprojectyml.tt +2 -0
  68. data/lib/takeltau/init/packer/templates/playbooksiteyml.tt +6 -0
  69. data/lib/takeltau/init/packer/templates/projectyml.tt +19 -0
  70. data/lib/takeltau/init/takelage/cli.rb +70 -0
  71. data/lib/takeltau/init/takelage/rake.rb +61 -0
  72. data/lib/takeltau/init/takelage/templates/bitrequireyml.tt +5 -0
  73. data/lib/takeltau/init/takelage/templates/projectyml.tt +3 -0
  74. data/lib/takeltau/init/templates/Rakefile.tt +3 -0
  75. data/lib/takeltau/init/templates/gitignore.tt +16 -0
  76. data/lib/takeltau/lib/config.rb +130 -0
  77. data/lib/takeltau/lib/logging.rb +49 -0
  78. data/lib/takeltau/lib/project.rb +72 -0
  79. data/lib/takeltau/lib/subcmd.rb +18 -0
  80. data/lib/takeltau/lib/system.rb +194 -0
  81. data/lib/takeltau/mutagen/check/cli.rb +40 -0
  82. data/lib/takeltau/mutagen/check/daemon.rb +76 -0
  83. data/lib/takeltau/mutagen/cli.rb +12 -0
  84. data/lib/takeltau/mutagen/socket/check.rb +33 -0
  85. data/lib/takeltau/mutagen/socket/cli.rb +103 -0
  86. data/lib/takeltau/mutagen/socket/create.rb +47 -0
  87. data/lib/takeltau/mutagen/socket/list.rb +33 -0
  88. data/lib/takeltau/mutagen/socket/terminate.rb +32 -0
  89. data/lib/takeltau/mutagen/socket/tidy.rb +21 -0
  90. data/lib/takeltau/self/cli.rb +43 -0
  91. data/lib/takeltau/self/config/cli.rb +82 -0
  92. data/lib/takeltau/self/list.rb +35 -0
  93. data/lib/takeltau/version +1 -0
  94. metadata +319 -0
data/README.md ADDED
@@ -0,0 +1,235 @@
1
+ [![license](https://img.shields.io/github/license/takelwerk/takelage-cli?color=blueviolet)](https://github.com/takelwerk/takelage-cli/blob/main/LICENSE)
2
+ [![rubygems.org](https://img.shields.io/gem/v/takelage?label=rubygems.org&color=blue)](https://rubygems.org/gems/takelage)
3
+ [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-cli/Build,%20test%20and%20deploy%20project?label=deploy%20project)](https://github.com/takelwerk/takelage-cli/actions/workflows/build_test_deploy_project_on_push.yml)
4
+ [![test project](https://img.shields.io/github/workflow/status/takelwerk/takelage-cli/Test%20project?label=test%20project)](https://github.com/takelwerk/takelage-cli/actions/workflows/test_project_nightly.yml)
5
+
6
+ # takelage-cli
7
+
8
+ *takelage-cli* is a command line interface
9
+ to facilitate the takelage devops workflow.
10
+ The takelage devops workflow helps devops engineers
11
+ build, test and deploy os images.
12
+
13
+ The *takelage-cli* executable *tau* is a
14
+ [ruby](https://www.ruby-lang.org/)
15
+ command line script using the
16
+ [thor](http://whatisthor.com/) toolkit.
17
+
18
+ ## Framework Versions
19
+
20
+ | App | Artifact |
21
+ | --- | -------- |
22
+ | *[takelage-doc](https://github.com/takelwerk/takelage-doc)* | [![License](https://img.shields.io/github/license/takelwerk/takelage-doc?color=blueviolet)](https://github.com/takelwerk/takelage-doc/blob/main/LICENSE) |
23
+ | *[takelage-dev](https://github.com/takelwerk/takelage-dev)* | [![hub.docker.com](https://img.shields.io/docker/v/takelwerk/takelage/latest?label=hub.docker.com&sort=semver&color=blue)](https://hub.docker.com/r/takelwerk/takelage) |
24
+ | *[takelage-cli](https://github.com/takelwerk/takelage-cli)* | [![rubygems.org](https://img.shields.io/gem/v/takelage?label=rubygems.org&color=blue)](https://rubygems.org/gems/takelage) |
25
+ | *[takelage-var](https://github.com/takelwerk/takelage-var)* | [![pypi,org](https://img.shields.io/pypi/v/takeltest?label=pypi.org&color=blue)](https://pypi.org/project/takeltest/) |
26
+ | *[takelage-bit](https://github.com/takelwerk/takelage-bit)* | [![hub.docker.com](https://img.shields.io/docker/v/takelwerk/bitboard/latest?label=hub.docker.com&sort=semver&color=blue)](https://hub.docker.com/r/takelwerk/bitboard) |
27
+ | *[takelage-img-takelslim](https://github.com/takelwerk/takelage-img-takelslim)* | [![hub.docker.com](https://img.shields.io/docker/v/takelwerk/takelslim/latest?label=hub.docker.com&color=blue)](https://hub.docker.com/r/takelwerk/takelslim) |
28
+ | *[takelage-img-takelbase](https://github.com/takelwerk/takelage-img-takelbase)* | [![hub.docker.com](https://img.shields.io/docker/v/takelwerk/takelbase/latest?label=hub.docker.com&color=blue)](https://hub.docker.com/r/takelwerk/takelbase) |
29
+
30
+ ## Framework Status
31
+
32
+ | App | Deploy project | Test project | Test roles |
33
+ | --- | -------------- | ------------ | ---------- |
34
+ | *[takelage-dev](https://github.com/takelwerk/takelage-dev)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-dev/Build,%20test%20and%20deploy%20project?label=deploy%20project)](https://github.com/takelwerk/takelage-dev/actions/workflows/build_test_deploy_project_on_push.yml) | [![test project](https://img.shields.io/github/workflow/status/takelwerk/takelage-dev/Build%20and%20test%20project?label=test%20project)](https://github.com/takelwerk/takelage-dev/actions/workflows/build_test_project_nightly.yml) | [![test roles](https://img.shields.io/github/workflow/status/takelwerk/takelage-dev/Test%20roles?label=test%20roles)](https://github.com/takelwerk/takelage-dev/actions/workflows/build_test_roles_nightly.yml) |
35
+ | *[takelage-cli](https://github.com/takelwerk/takelage-cli)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-cli/Build,%20test%20and%20deploy%20project?label=deploy%20project)](https://github.com/takelwerk/takelage-cli/actions/workflows/build_test_deploy_project_on_push.yml) | [![test project](https://img.shields.io/github/workflow/status/takelwerk/takelage-cli/Test%20project?label=test%20project)](https://github.com/takelwerk/takelage-cli/actions/workflows/test_project_nightly.yml) |
36
+ | *[takelage-var](https://github.com/takelwerk/takelage-var)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-var/Build,%20test%20and%20deploy%20project?label=deploy%20project)](https://github.com/takelwerk/takelage-var/actions/workflows/build_test_deploy_project_on_push.yml) | [![test project](https://img.shields.io/github/workflow/status/takelwerk/takelage-var/Build%20and%20test%20project?label=test%20project)](https://github.com/takelwerk/takelage-var/actions/workflows/build_test_project_nightly.yml) |
37
+ | *[takelage-bit](https://github.com/takelwerk/takelage-bit)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-bit/Build,%20test%20and%20deploy%20project?label=deploy%20project)](https://github.com/takelwerk/takelage-bit/actions/workflows/build_test_deploy_project_on_push.yml) | [![test project](https://img.shields.io/github/workflow/status/takelwerk/takelage-bit/Build%20and%20test%20project?label=test%20project)](https://github.com/takelwerk/takelage-bit/actions/workflows/build_test_project_nightly.yml) | [![test roles](https://img.shields.io/github/workflow/status/takelwerk/takelage-bit/Test%20roles?label=test%20roles)](https://github.com/takelwerk/takelage-bit/actions/workflows/build_test_roles_nightly.yml) |
38
+ | *[takelage-img-takelslim](https://github.com/takelwerk/takelage-img-takelslim)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-img-takelslim/Build%20and%20deploy%20takelslim?label=deploy%20project)](https://github.com/takelwerk/takelage-img-takelslim/actions/workflows/build_deploy_takelslim_nightly.yml) |
39
+ | *[takelage-img-takelbase](https://github.com/takelwerk/takelage-img-takelbase)* | [![deploy project](https://img.shields.io/github/workflow/status/takelwerk/takelage-img-takelbase/Build%20and%20deploy%20takelbase?label=deploy%20project)](https://github.com/takelwerk/takelage-img-takelbase/actions/workflows/build_deploy_takelbase_nightly.yml) |
40
+
41
+ ## Installation
42
+
43
+ *tau* is part of *takelage-dev*'s docker image
44
+ but you typically want to install it on the host system as well.
45
+ Install the takelage gem and its dependencies
46
+ through the [gem](https://github.com/rubygems/rubygems)
47
+ command line tool:
48
+
49
+ ```bash
50
+ gem install takeltau
51
+ ```
52
+
53
+ ## Commands
54
+
55
+ *takelage-cli* uses [cucumber](https://github.com/cucumber/cucumber)
56
+ to system test its features.
57
+ You are encouraged to read the cucumber feature files
58
+ for the *tau* commands
59
+ to get an idea of how the commands work.
60
+ You can list the *tau* commands by running
61
+ *tau [self list](features/cucumber/features/self/self.list.feature)*
62
+ or *tau list*:
63
+
64
+ Command | Description
65
+ ------- | -----------
66
+ tau [bit check workspace](features/cucumber/features/bit/bit.check.workspace.feature) | Check if a bit workspace exists
67
+ tau [bit clipboard copy](features/cucumber/features/bit/bit.clipboard.copy.feature) [DIR] [SCOPE] | Copy new [DIR] to [SCOPE]
68
+ tau [bit clipboard paste](features/cucumber/features/bit/bit.clipboard.paste.feature) [COMPONENT] [DIR] | Paste bit [COMPONENT] into [DIR]
69
+ tau [bit clipboard pull](features/cucumber/features/bit/bit.clipboard.pull.feature) | Pull all updates for bit components from bit remote scopes
70
+ tau [bit clipboard push](features/cucumber/features/bit/bit.clipboard.push.feature) | Push all updates of bit components to bit remote scopes
71
+ tau [bit require export](features/cucumber/features/bit/bit.require.export.feature) | Show requirements file of bit components
72
+ tau [bit require import](features/cucumber/features/bit/bit.require.import.feature) | Import bit components from requirements file
73
+ tau [bit scope add](features/cucumber/features/bit/bit.scope.add.feature) [SCOPE] | Add a bit [SCOPE]
74
+ tau [bit scope ssh](features/cucumber/features/bit/bit.scope.ssh.feature) | Log in to bit remote server
75
+ tau [bit scope list](features/cucumber/features/bit/bit.scope.list.feature) | List bit remote scopes
76
+ tau [bit scope new](features/cucumber/features/bit/bit.scope.new.feature) [SCOPE] | Init a new bit [SCOPE]
77
+ tau [completion bash](features/cucumber/features/completion/completion.bash.feature) | Print bash completion code
78
+ tau [docker check daemon](features/cucumber/features/docker/docker.check.daemon.feature) | Check if docker daemon is running
79
+ tau [docker container check existing](features/cucumber/features/docker/docker.container.check.existing.feature) [CONTAINER] | Check if docker [CONTAINER] is existing
80
+ tau [docker container check network](features/cucumber/features/docker/docker.container.check.network.feature) [NETWORK] | Check if docker [NETWORK] is existing
81
+ tau [docker container check orphaned](features/cucumber/features/docker/docker.container.check.orphaned.feature) [CONTAINER] | Check if docker [CONTAINER] is orphaned
82
+ tau [docker container clean](features/cucumber/features/docker/docker.container.clean.feature) | Remove all docker containers
83
+ tau [docker container command](features/cucumber/features/docker/docker.container.command.feature) [CMD] | Run [CMD] in a docker container
84
+ tau [docker container daemon](features/cucumber/features/docker/docker.container.daemon.feature) | Run docker container in daemon mode
85
+ tau [docker container login](features/cucumber/features/docker/docker.container.login.feature) | Log in to latest local docker container
86
+ tau [docker container prune](features/cucumber/features/docker/docker.container.prune.feature) | Remove orphaned docker containers
87
+ tau [docker image tag check](features/cucumber/features/docker/docker.image.tag.check.feature) [TAG] | Check if local docker image [TAG] exists
88
+ tau [docker image tag latest](features/cucumber/features/docker/docker.image.tag.latest.feature) | Print latest local docker image tag
89
+ tau [docker image tag list](features/cucumber/features/docker/docker.image.tag.list.feature) | Print local docker image tags
90
+ tau [docker image update](features/cucumber/features/docker/docker.image.update.feature) | Get latest remote docker container
91
+ tau [git check clean](features/cucumber/features/git/git.check.clean.feature) | Check if the git workspace is clean
92
+ tau [git check bit](features/cucumber/features/git/git.check.bit.feature) | Check if we are on the git bit branch
93
+ tau [git check workspace](features/cucumber/features/git/git.check.workspace.feature) | Check if a git workspace exists
94
+ tau [info project active](features/cucumber/features/info/info.project.active.feature) | Print active project info
95
+ tau [info project dir](features/cucumber/features/info/info.project.dir.feature) | Print project root directory
96
+ tau [info project main](features/cucumber/features/info/info.project.main.feature) | Print main project info
97
+ tau [info project private](features/cucumber/features/info/info.project.private.feature) | Print private project info
98
+ tau [info status bar](features/cucumber/features/info/info.status.bar.feature) | Print status bar
99
+ tau [info status git](features/cucumber/features/info/info.status.git.feature) | Check git status
100
+ tau [info status gopass](features/cucumber/features/info/info.status.gopass.feature) | Check gopass status
101
+ tau [info status gpg](features/cucumber/features/info/info.status.gpg.feature) | Check gpg status
102
+ tau [info status mutagen](features/cucumber/features/info/info.status.mutagen.feature) | Check mutagen status
103
+ tau [info status ssh](features/cucumber/features/info/info.status.ssh.feature) | Check ssh status
104
+ tau [init packer docker](features/cucumber/features/info/init.packer.docker.feature) | Initialize packer project for docker images
105
+ tau [mutagen check daemon](features/cucumber/features/mutagen/mutagen.check.daemon.feature)) | Check if mutagen host conenction is available
106
+ tau [mutagen socket check](features/cucumber/features/mutagen/mutagen.socket.check.feature) [SOCKET] | Check if mutagen [SOCKET] exists
107
+ tau [mutagen socket create](features/cucumber/features/mutagen/mutagen.socket.create.feature) [NAME] [IN] [OUT] | Create a mutagen socket [NAME] from [IN] to [OUT] of the container
108
+ tau [mutagen socket list](features/cucumber/features/mutagen/mutagen.socket.list.feature) | List mutagen sockets
109
+ tau [mutagen socket tidy](features/cucumber/features/mutagen/mutagen.socket.tidy.feature) | Remove mutagen daemon files
110
+ tau [mutagen socket terminate](features/cucumber/features/mutagen/mutagen.socket.terminate.feature) [SOCKET] | Terminate a mutagen [SOCKET]
111
+ tau [self config active](features/cucumber/features/self/self.config.active.feature) | Print active takelage configuration
112
+ tau [self config default](features/cucumber/features/self/self.config.default.feature) | Print takelage default configuration
113
+ tau [self config home](features/cucumber/features/self/self.config.home.feature) | Print takelage home config file configuration
114
+ tau [self config project](features/cucumber/features/self/self.config.project.feature) | Print takelage project config file configuration
115
+ tau [self list](features/cucumber/features/self/self.list.feature) | List all commands
116
+ tau [self version](features/cucumber/features/self/self.version.feature) | Print tau semantic version number
117
+ tau clean | Alias for tau [docker container clean](features/cucumber/features/docker/docker.container.clean.feature)
118
+ tau config | Alias for tau [self config active](features/cucumber/features/self/self.config.active.feature)
119
+ tau copy [DIR] [SCOPE] | Alias for tau [bit clipboard copy](features/cucumber/features/bit/bit.clipboard.copy.feature)
120
+ tau list | Alias for tau [self list](features/cucumber/features/self/self.list.feature)
121
+ tau login | Alias for tau [docker container login](features/cucumber/features/docker/docker.container.login.feature)
122
+ tau paste [COMPONENT] [DIR] | Alias for tau [bit clipboard paste](features/cucumber/features/bit/bit.clipboard.paste.feature)
123
+ tau project | Alias for tau [info project active](features/cucumber/features/info/info.project.active.feature)
124
+ tau prune | Alias for tau [docker container prune](features/cucumber/features/docker/docker.container.prune.feature)
125
+ tau pull | Alias for tau [bit clipboard pull](features/cucumber/features/bit/bit.clipboard.pull.feature)
126
+ tau push | Alias for tau [bit clipboard push](features/cucumber/features/bit/bit.clipboard.push.feature)
127
+ tau status | Alias for tau [docker info status bar](features/cucumber/features/info/info.status.bar.feature)
128
+ tau update | Alias for tau [docker image update](features/cucumber/features/docker/docker.image.update.feature)
129
+ tau version | Alias for tau [self version](features/cucumber/features/self/self.version.feature)
130
+
131
+ **Warning: *tau update* will call *docker image prune* and remove all dangling images!**
132
+
133
+ ## Configuration
134
+
135
+ ### Configuration Files
136
+
137
+ *takelage-cli* uses three different YAML configuration files
138
+ which have different precedences.
139
+ They are merged to an active configuration during runtime
140
+ which can be inspected with
141
+ *tau [self config active](features/cucumber/features/self/self.config.active.feature)*
142
+ or *tau config*.
143
+
144
+ | Filename | Precedence | Description |
145
+ | -------- | ---------- | ----------- |
146
+ | *default.yml* | lowest | Shipped with *takelage-cli*. Sets defaults where applicable. |
147
+ | *~/.takelage.yml* | normal | User-wide configuration file in your home directory. This is your normal custom configuration file. |
148
+ | *takelage.yml* | highest | Project-specific configuration file next to your main Rakefile. Some projects need special configuration. |
149
+
150
+ Please remember that a project directory is identified by the main
151
+ [Rakefile](Rakefile).
152
+
153
+ ### Configuration Examples
154
+
155
+ - You should add the following configuration items in your *~/.takelage.yml*
156
+ if you want to use a private bit remote server:
157
+
158
+ ```yaml
159
+ ---
160
+ bit_remote: 'ssh://bit@bit.example.com:222:/bit'
161
+ bit_ssh: 'ssh -p 222 bit@bit.example.com'
162
+ ```
163
+
164
+ - If you want to pin a specific docker tag for one of your projects
165
+ then create an *takelage.yml* file with:
166
+
167
+ ```yaml
168
+ ---
169
+ docker_tag: '1.2.3'
170
+ ```
171
+
172
+ - The cucumber tests make use of an *~/.takelage.yml*
173
+ to overwrite defaults like:
174
+
175
+ ```yaml
176
+ ---
177
+ docker_repo: takelage-mock
178
+ ```
179
+
180
+ Furthermore, every external command can be reconfigured.
181
+
182
+ ### Project Files
183
+
184
+ *tau* reads two different YAML project files
185
+ which have different precedences.
186
+ They are merged to an active configuration during runtime
187
+ which can be inspected with
188
+ *tau [info project active](features/cucumber/features/info/info.project.active.feature)*
189
+ or *tau project*.
190
+
191
+ | Default filename | Config key | Precedence | Description |
192
+ | -------- | ---------- | ---------- | ----------- |
193
+ | *project.yml* | info_project_main | normal | Main project file. |
194
+ | *private/project.yml* | info_project_private | highest | Private project file. Should be in *.gitignore*. |
195
+
196
+ ### Bash Completion
197
+
198
+ Add this to your [bash startup files](https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html):
199
+
200
+ ```bash
201
+ source <(tau completion bash)
202
+ ```
203
+
204
+ ### Software Tests
205
+
206
+ *takelage-cli* uses
207
+ [minitest](https://github.com/seattlerb/minitest) unit tests.
208
+
209
+ *takelage-cli* ships with
210
+ [cucumber](https://github.com/cucumber/cucumber) ruby system tests.
211
+ It uses cucumber's
212
+ [aruba](https://github.com/cucumber/aruba) extension and especially its
213
+ [filesystem](https://relishapp.com/cucumber/aruba/v/0-11-0/docs/filesystem)
214
+ library.
215
+
216
+ *takelage-cli* [deploys](https://docs.docker.com/registry/deploying/)
217
+ a private docker
218
+ [registry](https://hub.docker.com/_/registry)
219
+ to conduct end-to-end tests of *tau docker* commands.
220
+ The registry exposes port 5005.
221
+ You need to whitelist it in your host's docker engine configuration:
222
+
223
+ ```json
224
+ {
225
+ "insecure-registries": [
226
+ "host.docker.internal:5005"
227
+ ]
228
+ }
229
+ ```
230
+
231
+ *takelage-cli* deploys a
232
+ *[bitboard](https://hub.docker.com/r/takelwerk/bitboard)*
233
+ server created with
234
+ *[takelage-bit](https://github.com/takelwerk/takelage-bit)*
235
+ to end-to-end test the *tau bit* commands.
data/bin/tau ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'takeltau'
5
+ Fylla.load('tau')
6
+ Takeltau::CLI.start
data/lib/Thorfile ADDED
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'takeltau'
data/lib/takeltau.rb ADDED
@@ -0,0 +1,257 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'etc'
4
+ require 'digest/bubblebabble'
5
+ require 'fileutils'
6
+ require 'fylla'
7
+ require 'json'
8
+ require 'logger'
9
+ require 'rake'
10
+ require 'singleton'
11
+ require 'socket'
12
+ require 'thor'
13
+ require 'timeout'
14
+ require 'version_sorter'
15
+ require 'yaml'
16
+
17
+ require_relative 'takeltau/lib/logging'
18
+ require_relative 'takeltau/lib/subcmd'
19
+ require_relative 'takeltau/lib/system'
20
+ require_relative 'takeltau/lib/config'
21
+ require_relative 'takeltau/lib/project'
22
+
23
+ require_relative 'takeltau/git/check/clean'
24
+ require_relative 'takeltau/git/check/bit'
25
+ require_relative 'takeltau/git/check/workspace'
26
+ require_relative 'takeltau/git/check/cli'
27
+ require_relative 'takeltau/git/cli'
28
+ require_relative 'takeltau/bit/check/workspace'
29
+ require_relative 'takeltau/bit/check/cli'
30
+ require_relative 'takeltau/bit/scope/add'
31
+ require_relative 'takeltau/bit/scope/ssh'
32
+ require_relative 'takeltau/bit/scope/list'
33
+ require_relative 'takeltau/bit/scope/new'
34
+ require_relative 'takeltau/bit/scope/cli'
35
+ require_relative 'takeltau/bit/clipboard/lib'
36
+ require_relative 'takeltau/bit/clipboard/copy'
37
+ require_relative 'takeltau/bit/clipboard/paste'
38
+ require_relative 'takeltau/bit/clipboard/pull'
39
+ require_relative 'takeltau/bit/clipboard/push'
40
+ require_relative 'takeltau/bit/clipboard/cli'
41
+ require_relative 'takeltau/bit/require/lib'
42
+ require_relative 'takeltau/bit/require/export'
43
+ require_relative 'takeltau/bit/require/import'
44
+ require_relative 'takeltau/bit/require/cli'
45
+ require_relative 'takeltau/bit/cli'
46
+ require_relative 'takeltau/completion/cli'
47
+ require_relative 'takeltau/init/lib'
48
+ require_relative 'takeltau/init/packer/docker'
49
+ require_relative 'takeltau/init/packer/cli'
50
+ require_relative 'takeltau/init/takelage/rake'
51
+ require_relative 'takeltau/init/takelage/cli'
52
+ require_relative 'takeltau/init/cli'
53
+ require_relative 'takeltau/mutagen/check/daemon'
54
+ require_relative 'takeltau/mutagen/socket/check'
55
+ require_relative 'takeltau/mutagen/socket/create'
56
+ require_relative 'takeltau/mutagen/socket/terminate'
57
+ require_relative 'takeltau/mutagen/socket/tidy'
58
+ require_relative 'takeltau/docker/check/daemon'
59
+ require_relative 'takeltau/docker/check/cli'
60
+ require_relative 'takeltau/docker/image/tag/list'
61
+ require_relative 'takeltau/docker/image/tag/latest'
62
+ require_relative 'takeltau/docker/image/tag/check'
63
+ require_relative 'takeltau/docker/image/tag/cli'
64
+ require_relative 'takeltau/docker/image/update'
65
+ require_relative 'takeltau/docker/image/cli'
66
+ require_relative 'takeltau/docker/container/check/existing'
67
+ require_relative 'takeltau/docker/container/check/network'
68
+ require_relative 'takeltau/docker/container/check/orphaned'
69
+ require_relative 'takeltau/docker/container/check/cli'
70
+ require_relative 'takeltau/docker/container/lib'
71
+ require_relative 'takeltau/docker/container/command'
72
+ require_relative 'takeltau/docker/container/daemon'
73
+ require_relative 'takeltau/docker/container/login'
74
+ require_relative 'takeltau/docker/container/clean'
75
+ require_relative 'takeltau/docker/container/prune'
76
+ require_relative 'takeltau/docker/container/cli'
77
+ require_relative 'takeltau/docker/cli'
78
+ require_relative 'takeltau/mutagen/check/cli'
79
+ require_relative 'takeltau/mutagen/socket/list'
80
+ require_relative 'takeltau/mutagen/socket/cli'
81
+ require_relative 'takeltau/mutagen/cli'
82
+ require_relative 'takeltau/info/status/lib'
83
+ require_relative 'takeltau/info/status/git'
84
+ require_relative 'takeltau/info/status/gopass'
85
+ require_relative 'takeltau/info/status/gpg'
86
+ require_relative 'takeltau/info/status/ssh'
87
+ require_relative 'takeltau/info/status/bar'
88
+ require_relative 'takeltau/info/status/cli'
89
+ require_relative 'takeltau/info/project/cli'
90
+ require_relative 'takeltau/info/cli'
91
+ require_relative 'takeltau/self/config/cli'
92
+ require_relative 'takeltau/self/list'
93
+ require_relative 'takeltau/self/cli'
94
+
95
+ # Facilitate the takelage devops workflow.
96
+ module Takeltau
97
+ # takeltau
98
+ class CLI < Thor
99
+ include LoggingModule
100
+ include SystemModule
101
+ include ConfigModule
102
+ include ProjectModule
103
+
104
+ check_unknown_options!
105
+
106
+ # @return [String] bash completion code
107
+ attr_reader :bash_fylla
108
+
109
+ option :loglevel,
110
+ aliases: 'l',
111
+ default: 'INFO',
112
+ desc: 'One of: FATAL, ERROR, WARN, INFO, DEBUG'
113
+ # Initialize takelage cli.
114
+ def initialize(args = [], local_options = {}, configuration = {})
115
+ # Initialize thor parent class
116
+ super args, local_options, configuration
117
+
118
+ # Initialize global singleton log
119
+ initialize_logging options[:loglevel].to_s.upcase
120
+
121
+ # Initialize global singleton config
122
+ initialize_config
123
+
124
+ # Initialize global singleton project
125
+ initialize_project
126
+
127
+ # Set defaults
128
+ @docker_daemon_running = false
129
+ @command_available_docker = false
130
+ @mutagen_daemon_available = false
131
+ @command_available_mutagen = false
132
+
133
+ # fylla bash completion code
134
+ @bash_fylla = Fylla.bash_completion self
135
+ end
136
+
137
+ #
138
+ # Subcommands
139
+ #
140
+
141
+ desc 'bit [COMMAND] ', 'Manage bit'
142
+ subcommand 'bit', Bit
143
+
144
+ desc 'completion [COMMAND] ', 'Print shell completion code'
145
+ subcommand 'completion', Completion
146
+
147
+ desc 'docker [COMMAND] ', 'Manage docker containers'
148
+ subcommand 'docker', Docker
149
+
150
+ desc 'git [COMMAND] ', 'Manage git'
151
+ subcommand 'git', Git
152
+
153
+ desc 'info [COMMAND] ', 'Get information'
154
+ subcommand 'info', Info
155
+
156
+ desc 'init [COMMAND] ', 'Init projects'
157
+ subcommand 'init', Init
158
+
159
+ desc 'mutagen [COMMAND] ', 'Manage mutagen'
160
+ subcommand 'mutagen', Mutagen
161
+
162
+ desc 'self [COMMAND] ', 'Manage takelage tools'
163
+ subcommand 'self', Self
164
+
165
+ #
166
+ # Top-level commands
167
+ #
168
+
169
+ desc 'config', 'Alias for tau self config active'
170
+ # takeltau config: {takelage::SelfConfig#active}
171
+ def config
172
+ Takeltau::SelfConfig.new.active
173
+ end
174
+
175
+ desc 'copy [DIR] [SCOPE]', 'Alias for tau bit clipboard copy'
176
+ # takeltau copy: {takelage::BitClipboard#copy}
177
+ def copy(dir_or_file, scope)
178
+ Takeltau::BitClipboard.new.copy dir_or_file, scope
179
+ end
180
+
181
+ desc 'project', 'Alias for tau info project active'
182
+ # takeltau project: {takelage::InfoProject#active}
183
+ def project
184
+ Takeltau::InfoProject.new.active
185
+ end
186
+
187
+ desc 'login', 'Alias for tau docker container login'
188
+ # takeltau login: {takelage::DockerContainer#login}
189
+ def login
190
+ Takeltau::DockerContainer.new.login
191
+ end
192
+
193
+ desc 'list', 'Alias for tau self list'
194
+ # takeltau version: {takelage::Self#list}
195
+ def list
196
+ Takeltau::Self.new.list
197
+ end
198
+
199
+ desc 'clean', 'Alias for tau docker container clean'
200
+ # takeltau clean: {takelage::DockerContainer#clean}
201
+ def clean
202
+ Takeltau::DockerContainer.new.clean
203
+ end
204
+
205
+ desc 'paste [COMPONENT] [DIR]', 'Alias for tau bit clipboard paste'
206
+ # takeltau paste: {takelage::BitClipboard#paste}
207
+ def paste(cid, dir)
208
+ Takeltau::BitClipboard.new.paste cid, dir
209
+ end
210
+
211
+ desc 'pull', 'Alias for tau bit clipboard pull'
212
+ # takeltau pull: {takelage::BitClipboard#pull}
213
+ def pull
214
+ Takeltau::BitClipboard.new.pull
215
+ end
216
+
217
+ desc 'prune', 'Alias for tau docker container prune'
218
+ # takeltau prune: {takelage::DockerContainer#prune}
219
+ def prune
220
+ Takeltau::DockerContainer.new.prune
221
+ end
222
+
223
+ desc 'push', 'Alias for tau bit clipboard push'
224
+ # takeltau push: {takelage::BitClipboard#push}
225
+ def push
226
+ Takeltau::BitClipboard.new.push
227
+ end
228
+
229
+ desc 'status', 'Alias for tau info status bar'
230
+ # takeltau status: {takelage::InfoStatus#bar}
231
+ def status
232
+ Takeltau::InfoStatus.new.bar
233
+ end
234
+
235
+ desc 'update', 'Alias for tau docker image update'
236
+ # takeltau update: {takelage::DockerImage#update}
237
+ def update
238
+ Takeltau::DockerImage.new.update
239
+ end
240
+
241
+ desc 'version', 'Alias for tau self version'
242
+ # takeltau version: {takelage::Self#version}
243
+ def version
244
+ Takeltau::Self.new.version
245
+ end
246
+
247
+ #
248
+ # Administrative functions
249
+ #
250
+
251
+ # Behave as expected by correctly reporting failure in exit status.
252
+ # See https://github.com/erikhuda/thor/wiki/Making-An-Executable
253
+ def self.exit_on_failure?
254
+ true
255
+ end
256
+ end
257
+ end