takeltau 0.34.9

Sign up to get free protection for your applications and to get access to all the features.
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