power_stencil 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8df74429279b0f913ba3fda4b6c296dc6053945a
4
- data.tar.gz: 78fb02e5902690f445106a79ec6a2d36d4f2e3df
3
+ metadata.gz: 381fd5ec322002d77a04968f74f74fa9e3a180d9
4
+ data.tar.gz: fc328939af39ca43740d39170af6fcbd3d9e2979
5
5
  SHA512:
6
- metadata.gz: 1db0ca206eff645bece9e2d68abae5a95848ae2feaa71786aae605337ee4b848c447d123a1d0cd9905f6daf567216712d780b5ee6c9f302c458f22fab3f04aeb
7
- data.tar.gz: cb16ab5ad26dec5f5917e2f5e931f54dab0fae361959aff735d51b6f2a153378884a15e3c495ec5eafacbcf7c4339fff6da38099177e1a2cd36c3c49aa68f87c
6
+ metadata.gz: f6fd159bec0d10364cce84d2e6184d8f7708c8387f2e6f09754a95f34d5855fde0141a39e47d079bb39ae37b381b4cf864e87181f3dc5b71cec1472a5fd4145d
7
+ data.tar.gz: cb84a9ddc19a5a8106d9a14f1cdc9058588be4dfef89c90f3cbb64d2e30ec94012bbf017088197d2596b79da07d123a38b2dba8a98d07112e9693ad9b2335ece
data/README.md CHANGED
@@ -23,6 +23,7 @@ See [official website][PowerStencil site].
23
23
  - [Templates](#templates)
24
24
  - [Builds](#builds)
25
25
  - [Plugins](#plugins)
26
+ - [Git integration](#git-integration)
26
27
  - [Project status](#project-status)
27
28
  - [Contributing](#contributing)
28
29
  - [License](#license)
@@ -153,7 +154,7 @@ Once the project created, if you are anywhere within the project tree, you don't
153
154
 
154
155
  **:information_source: The rest of this documentation will assume you are at the root of this created project.**
155
156
 
156
- **:information_source: If you have `git` installed on your system, **the repository of the newly created project has been automatically turned into a git repository. And any action done through the `power_stencil` command-line will be automatically tracked by `git`**. Only things you will do outside of the `power_stencil` command-line (adding or modifying templates, creating or modifying entity types... any manual action) will require a user action to make `git` take it in account. You can completely de-activate this behaviour if you want to fully manage things by yourself by adding `:no-git: true` in the `.ps_project/versioned-config.yaml`, yet there is no good reason for that... Unless you know what you are doing, you should keep the default settings.
157
+ **:information_source: If you have `git` installed on your system, **the repository of the newly created project has been automatically turned into a git repository. And any action done through the `power_stencil` command-line will be automatically tracked by `git`**. Only things you will do outside of the `power_stencil` command-line (adding or modifying templates, creating or modifying entity types... any manual action) will require a user action to make `git` take it in account. You can completely de-activate this behaviour if you want to fully manage things by yourself by adding `:no-git: true` in the `.ps_project/versioned-config.yaml`, yet there is no good reason for that... Unless you know what you are doing, you should keep the default settings. See [Git integration] for further information.
157
158
 
158
159
  ## `PowerStencil` project structure
159
160
 
@@ -211,10 +212,13 @@ The mechanism that **combines entities and templates** is called a **[build][bui
211
212
  `PowerStencil` could stop there, and you would be able to do whatever you want, but there is a whole world beyond. **[Plugins]** provide a way to completely **extend `PowerStencil` and ease cross-projects share and re-usability**, further control relations between entities, implement complex post-build actions, add CLI sub-commands and options.
212
213
  Plugins can be local to the project or coming in the form of standard Ruby Gems ! The icing on the cake...
213
214
 
214
- <br>
215
+ ### Git integration
216
+
217
+ Git is closely integrated at the heart of `PowerStencil`. See how works the [Git integration].
218
+
215
219
  <br>
216
220
 
217
- And course, you may want to **read the [F.A.Q.]**
221
+ And of course, you may want to **read the [F.A.Q.]**
218
222
 
219
223
  # Project status
220
224
 
@@ -240,6 +244,7 @@ Everyone interacting in the PowerStencil project’s codebases, issue trackers,
240
244
  [builds]: doc/builds.md "Builds in PowerStencil"
241
245
  [plugins]: doc/plugins.md "Plugins in PowerStencil"
242
246
  [example use cases]: doc/example_use_cases.md "Example uses cases using PowerStencil"
247
+ [Git integration]: doc/git_integration.md "See of git is integrated with PowerStencil"
243
248
  [F.A.Q.]: doc/faq.md "PowerStencil F.A.Q."
244
249
  [status in the F.A.Q.]: doc/faq.md#what-is-the-status-of-powerstencil- "PowerStencil project status"
245
250
  [DB in F.A.Q.]: doc/faq.md#why-is-a-real-database-a-bad-idea-as-configuration-store-for-cicd- "Databases in build processes"
@@ -0,0 +1,364 @@
1
+ Git integration
2
+ ===============
3
+ <!-- TOC -->
4
+
5
+ - [Overview](#overview)
6
+ - [`PowerStencil` "_write_" actions](#powerstencil-_write_-actions)
7
+ - [Activating / De-activating integration](#activating--de-activating-integration)
8
+ - [Generic config flag](#generic-config-flag)
9
+ - [How things are tracked](#how-things-are-tracked)
10
+ - [Project creation](#project-creation)
11
+ - [Entity creation](#entity-creation)
12
+ - [Modifying an entity](#modifying-an-entity)
13
+ - [Deleting an entity](#deleting-an-entity)
14
+ - [`PowerStencil` shell session](#powerstencil-shell-session)
15
+ - [Plugin creation](#plugin-creation)
16
+ - [Manual actions](#manual-actions)
17
+
18
+ <!-- /TOC -->
19
+ [:back:][Documentation root]
20
+
21
+
22
+ # Overview
23
+
24
+ The git integration within `PowerStencil` provides tons of useful default behaviors. Let's browse what it brings out of the box.
25
+
26
+ :hand: You should have already read the whole [Getting Started] part before reading this.
27
+
28
+
29
+ # `PowerStencil` "_write_" actions
30
+
31
+ When interacting with `PowerStencil`, only some of the commands actually trigger write actions on your disk.
32
+
33
+ Here is a summary:
34
+
35
+ <a name="subcommands-impact"></a>
36
+
37
+ | `PowerStencil` sub-command | Status |
38
+ |----------------------------|:------:|
39
+ |init | creates a project
40
+ |info | read-only
41
+ |plugin | creates a plugin
42
+ |get | read-only
43
+ |shell | do anything
44
+ |adm | read-only
45
+ |check | read-only
46
+ |create | creates entities
47
+ |edit | modifies entities
48
+ |delete | deletes entities
49
+ |describe | read-only
50
+ |build | read-only
51
+
52
+ On top this we could add some other actions, you can obviously perform manually within the repository, like:
53
+
54
+ * Create/update/delete entity types
55
+ * Create/update/delete entity type templates-templates
56
+ * Code within local plugins
57
+ * Create/update/delete templates for buildable entities
58
+ * Modify `.ps_project/versioned-config.yaml` config file (the file `.ps_project/personal-config.yaml` is unversioned)
59
+ * ... and of course anything else, not `PowerStencil` related, you would like add to your project.
60
+
61
+ **:+1: The git integration will not interfere with any of your manually done actions and will keep anything you are doing manually out of scope of automatically generated git commits.**
62
+
63
+ # Activating / De-activating integration
64
+
65
+ ## Generic config flag
66
+
67
+ You can specify in the `.ps_project/versioned-config.yaml` config file that you don't want to activate the git integration by adding:
68
+
69
+ ```yaml
70
+ :no-git: true
71
+ ```
72
+
73
+ And then nothing will be automatically tracked by git. It could be also activated in your personal config file (`.ps_project/personal-config.yaml`) if you you temporarily want to manage commits manually for whatever strange reason.
74
+
75
+ Still if you do that, when you initially created the project a git repository has been created. But if you want to completely stay out of git and for example use another versioning tool (does it still exist ??), you can create your project without git integration by doing:
76
+
77
+ $ power_stencil init my_project --no-git
78
+
79
+ In this case the setting inside your config file is not even necessary.
80
+ Or course you could _a posteriori_ delete the `.git` directory, but why would you want to do that...
81
+
82
+ :warning: Be careful that the `.gitignore` file is there to normally ensure that only things that really need to be committed are actually. So it means that if you use a different versionning tool, you have to somehow translate this `.gitignore` file in the paradigm of the tool you actually use !
83
+
84
+
85
+ :information_source: One legitimate reason to temporarily avoid automatic git commit may be for plugin creation, but we'll see that in the next paragraph.
86
+
87
+ # How things are tracked
88
+
89
+ Each command not stated as "read-only" in the [table above](#subcommands-impact), actually generate a git commit. Let's see that in detail.
90
+
91
+ ## Project creation
92
+
93
+ When a project is created with:
94
+
95
+ $ power_stencil init test
96
+
97
+ A git repository is automatically created, initial project files are added to git staging and a first commit is done. So from the project directory we can see:
98
+
99
+ ```
100
+ $ git log --full-history --summary
101
+ commit a5cc500277d8a58d78111e1accdeff7f72fc3027
102
+ Author: Joe <joe@outerspace.org>
103
+ Date: Sun Nov 3 18:31:20 2019 +0100
104
+
105
+ Initial commit for project "test".
106
+
107
+ create mode 100644 .gitignore
108
+ create mode 100644 .ps_project/entities/README.md
109
+ create mode 100644 .ps_project/entity_definitions/README.md
110
+ create mode 100644 .ps_project/plugins/README.md
111
+ create mode 100644 .ps_project/templates-templates/README.md
112
+ create mode 100644 .ps_project/versioned-config.yaml
113
+ ```
114
+ So you see by default all the files which have been committed.
115
+
116
+ ## Entity creation
117
+
118
+ To make the things a bit more fun, let's do it with an entity that generates templates like a `simple_exec`:
119
+
120
+ $ power_stencil create simple_exec/foo
121
+
122
+ ```
123
+ $ git log -1 --summary
124
+ commit 00a09a274377c0797061b342b61ebab028189163
125
+ Author: Joe <joe@outerspace.org>
126
+ Date: Sun Nov 3 18:55:12 2019 +0100
127
+
128
+ Created 'simple_exec/foo' (and potential dependencies).
129
+
130
+ create mode 100644 .ps_project/entities/process_descriptor/simple_exec_foo.process.yaml
131
+ create mode 100644 .ps_project/entities/simple_exec/foo.yaml
132
+ create mode 100755 templates/simple_exec/foo/main.sh
133
+ ```
134
+
135
+ :+1: Yeah, all files generated are committed at once, including the `process_descriptor` it automatically creates as well as the templates generated. Pretty cool...
136
+
137
+ In the end it gives a pretty understandable history:
138
+
139
+ ```
140
+ $ git log --oneline
141
+ 00a09a2 Created 'simple_exec/foo' (and potential dependencies).
142
+ a5cc500 Initial commit for project "test".
143
+ ```
144
+ And of course the working directory remains clean:
145
+ ```
146
+ $ git status
147
+ On branch master
148
+ nothing to commit, working tree clean
149
+ ```
150
+
151
+ ## Modifying an entity
152
+
153
+ Of course you probably guessed it now, if you edit the `simple_exec/foo` entity using, the:
154
+
155
+ $ power_stencil edit simple_exec/foo
156
+
157
+ ```
158
+ $ git log -1 --summary
159
+ commit 7de417f51f7ca37a4e81b7dee968affaa437f383
160
+ Author: Joe <joe@outerspace.org>
161
+ Date: Sun Nov 3 19:10:44 2019 +0100
162
+
163
+ Edited entity 'simple_exec/foo'.
164
+ ```
165
+ And of course you can track the changes.
166
+
167
+ ```
168
+ $ git diff 00a09a2
169
+ diff --git a/.ps_project/entities/simple_exec/foo.yaml b/.ps_project/entities/simple_exec/foo.yaml
170
+ index 710b97f..1d9cc26 100644
171
+ --- a/.ps_project/entities/simple_exec/foo.yaml
172
+ +++ b/.ps_project/entities/simple_exec/foo.yaml
173
+ @@ -1,3 +1,4 @@
174
+ --- !ruby/object:PowerStencil::SystemEntityDefinitions::SimpleExec
175
+ :name: foo
176
+ :post_process: !entity process_descriptor/simple_exec_foo.process
177
+ +:description: A useless entity
178
+ ```
179
+ **:hand: But of course, if I modify the templates by editing manually the `templates/simple_exec/foo/main.sh` file, or by adding new files in the template directory of this entity, I will have to manage them manually like I would normally do with any file tracked by git.**
180
+
181
+ ## Deleting an entity
182
+
183
+ When deleting an entity, `PowerStencil` offers to delete the entity only with:
184
+
185
+ $ power_stencil delete simple_exec/foo
186
+
187
+ Or to delete it, including its associated templates with:
188
+
189
+ $ power_stencil delete simple_exec/foo --delete-files
190
+
191
+ In both cases, the git integration will track things correctly. Let's say we choose the second option:
192
+
193
+
194
+ ```
195
+ $ power_stencil delete simple_exec/foo --delete-files --auto
196
+ Deleting entity 'simple_exec/foo'
197
+ Deleted 'simple_exec/foo' and template files.
198
+
199
+ $ git log -1 --summary
200
+ commit 1193c1c961fc2eecc50dea93b5f76411797f415b
201
+ Author: Joe <joe@outerspace.org>
202
+ Date: Sun Nov 3 19:27:44 2019 +0100
203
+
204
+ Deleted entity 'simple_exec/foo' (and potential dependencies) including templates..
205
+
206
+ delete mode 100644 .ps_project/entities/process_descriptor/simple_exec_foo.process.yaml
207
+ delete mode 100644 .ps_project/entities/simple_exec/foo.yaml
208
+ delete mode 100755 templates/simple_exec/foo/main.sh
209
+ ```
210
+
211
+ ## `PowerStencil` shell session
212
+
213
+ You can do a lot of things within a shell session, and sometimes even destructive actions you may not want to commit. This is why `PowerStencil` will ask you if you want to commit your changes and present you with the list of changes. Here under a sample session:
214
+
215
+ ```
216
+ $ power_stencil shell
217
+ Please report a bug if this causes problems.
218
+ -------------------------------------------------------------------------------
219
+ Welcome to the PowerStencil shell session
220
+ In this shell you have access to anything the templating engine has access to.
221
+ On top of this, you can view, edit, save and delete entities.
222
+
223
+ - Retrieve and manipulate entities using the `entities` hash.
224
+ - Persist your changes using the `save` method on each entity.
225
+ - Create new project or user entities using `new_<entity_type>` and
226
+ `user_new_<entity_type>` methods (see `available_entity_types` for a list of
227
+ possible types).
228
+ - And of course, it is a fully fledged Ruby Pry REPL, so you can do anything
229
+ you want...
230
+
231
+ Type `exit` to end your session.
232
+ -------------------------------------------------------------------------------
233
+
234
+ PowerStencil DSL> e = new_simple_exec name: :test2
235
+ => #<PowerStencil::SystemEntityDefinitions::SimpleExec:47357208924260 composite_key=[:simple_exec, "test2"], @universe='Project entities (1572805960.765458)'>
236
+ PowerStencil DSL> e.save
237
+ => #<PowerStencil::SystemEntityDefinitions::SimpleExec:47357208924260 composite_key=[:simple_exec, "test2"], @universe='Project entities (1572805960.765458)'>
238
+ PowerStencil DSL> exit
239
+ Following files will be committed:
240
+ - '.ps_project/entities/process_descriptor/simple_exec_test2.process.yaml'
241
+ - '.ps_project/entities/simple_exec/test2.yaml'
242
+ - 'templates/simple_exec/test2/main.sh'
243
+ Would you like to commit your changes ? ([Yes]/y/No/n): y
244
+
245
+ $ git log -1 --summary
246
+ commit 8c8554b297a05466147208ca657323300e952981
247
+ Author: Joe <joe@outerspace.org>
248
+ Date: Sun Nov 3 19:33:25 2019 +0100
249
+
250
+ Changes done in PowerStencil shell session.
251
+
252
+ create mode 100644 .ps_project/entities/process_descriptor/simple_exec_test2.process.yaml
253
+ create mode 100644 .ps_project/entities/simple_exec/test2.yaml
254
+ create mode 100755 templates/simple_exec/test2/main.sh
255
+ ```
256
+
257
+ You see the commit is labelled `Changes done in PowerStencil shell session`.
258
+
259
+
260
+ :information_source: If you have not introduced any change, the question will not even be asked when you exit the shell...
261
+
262
+ ## Plugin creation
263
+
264
+ As expected if you create a plugin using the command:
265
+
266
+ $ power_stencil plugin --create bar
267
+
268
+ It tracks this as well:
269
+
270
+ ```
271
+ $ git log -1 --summary
272
+ commit 591df0951a04476ebe29284fda8fd548c638dcea
273
+ Author: Joe <joe@outerspace.org>
274
+ Date: Sun Nov 3 19:42:11 2019 +0100
275
+
276
+ Generated new local plugin 'bar'.
277
+
278
+ create mode 100644 .ps_project/plugins/bar/.gitignore
279
+ create mode 100644 .ps_project/plugins/bar/.rspec
280
+ create mode 100644 .ps_project/plugins/bar/.travis.yml
281
+ create mode 100644 .ps_project/plugins/bar/CODE_OF_CONDUCT.md
282
+ create mode 100644 .ps_project/plugins/bar/Gemfile
283
+ create mode 100644 .ps_project/plugins/bar/LICENSE.txt
284
+ create mode 100644 .ps_project/plugins/bar/README.md
285
+ create mode 100644 .ps_project/plugins/bar/Rakefile
286
+ create mode 100644 .ps_project/plugins/bar/bin/console
287
+ create mode 100644 .ps_project/plugins/bar/bin/setup
288
+ create mode 100644 .ps_project/plugins/bar/etc/command_line.yaml
289
+ create mode 100644 .ps_project/plugins/bar/etc/plugin_capabilities.yaml
290
+ create mode 100644 .ps_project/plugins/bar/etc/plugin_config.yaml
291
+ create mode 100644 .ps_project/plugins/bar/etc/templates/.git_keep
292
+ create mode 100644 .ps_project/plugins/bar/etc/templates/bar_entity/.copy_ignore
293
+ create mode 100644 .ps_project/plugins/bar/etc/templates/bar_entity/.subst_ignore
294
+ create mode 100644 .ps_project/plugins/bar/etc/templates/bar_entity/message.txt
295
+ create mode 100644 .ps_project/plugins/bar/lib/bar.rb
296
+ create mode 100644 .ps_project/plugins/bar/lib/bar/bar_processor.rb
297
+ create mode 100644 .ps_project/plugins/bar/lib/bar/dsl/bar_dsl.rb
298
+ create mode 100644 .ps_project/plugins/bar/lib/bar/entity_definitions/bar_entity.rb
299
+ create mode 100644 .ps_project/plugins/bar/lib/bar/plugin_helper.rb
300
+ create mode 100644 .ps_project/plugins/bar/lib/bar/version.rb
301
+ create mode 100644 .ps_project/plugins/bar/psplugin_bar.gemspec
302
+ create mode 100644 .ps_project/plugins/bar/spec/bar_spec.rb
303
+ create mode 100644 .ps_project/plugins/bar/spec/spec_helper.rb
304
+ ```
305
+
306
+ Cool ! Nevertheless, plugins may be one of the things you may want to track a bit differently. For example as git sub-modules, to keep a separated git history, and ease future re-useability of the plugin you are developing.
307
+ So it's up to you and `PowerStencil` provides an easy way to keep your plugin out of your project repo. Same as for `power_stencil init`, `power_stencil plugin --create` supports the `--no-git` option...
308
+
309
+ # Manual actions
310
+
311
+ Ok, so far we have a pretty nice git history:
312
+
313
+ ```
314
+ $ git log --oneline
315
+ 591df09 Generated new local plugin 'bar'.
316
+ 8c8554b Changes done in PowerStencil shell session.
317
+ 1193c1c Deleted entity 'simple_exec/foo' (and potential dependencies) including templates..
318
+ 7de417f Edited entity 'simple_exec/foo'.
319
+ 00a09a2 Created 'simple_exec/foo' (and potential dependencies).
320
+ a5cc500 Initial commit for project "test".
321
+ ```
322
+
323
+ And our working directory is still clean.
324
+
325
+ ```
326
+ $ git status
327
+ On branch master
328
+ nothing to commit, working tree clean
329
+ ```
330
+
331
+ But what happens if we modify things manually ? How does it interfere with everything we saw before.
332
+
333
+ :wink: Actually, before any action, `PowerStencil` gets a snapshot of the working directory in terms of git modifications (added, removed, modified, moved files...) and **will not include any of this pre-existing changes in its own commits**.
334
+
335
+ It's actually, a good separation of responsibilities. If you modified something by yourself, you are responsible to commit the changes (or not)...
336
+
337
+ In the end, it means you have to completely manage by yourself any changes you would apply to:
338
+
339
+ * the main config file (`.ps_project/versioned-config.yaml`)
340
+ * entity types creation, modification, deletion (under `.ps_project/entity_definitions/`).
341
+ * template-templates creation, modification, deletion for your own entity types (under `.ps_project/templates-templates/`).
342
+ * entity templates added and any modification (under `templates`).
343
+ * code changes in your local plugins (`.ps_project/plugins/`)
344
+
345
+
346
+ [:back:][Documentation root]
347
+ <!-- End of Document -->
348
+
349
+ <!-- Pages -->
350
+ [Documentation root]: ../README.md "Back to documentation root"
351
+ [entities]: entities.md "Entities in PowerStencil"
352
+ [plugins]: plugins.md "Plugins in PowerStencil"
353
+ [overrides]: builds.md#overriding-entities-and-build-scenarii "Overriding data locally"
354
+ [example use cases]: example_use_cases.md "Example uses cases using PowerStencil"
355
+ [Getting Started]: ../README.md#getting-started "Getting Started with PowerStencil"
356
+
357
+ <!-- Code links -->
358
+
359
+
360
+ <!-- Illustrations -->
361
+
362
+
363
+ <!-- External links -->
364
+
@@ -61,6 +61,7 @@ module PowerStencil
61
61
  attr_reader :git
62
62
 
63
63
  def setup_git_tracking
64
+ require 'git'
64
65
  @git = nil
65
66
  if config[:'no-git']
66
67
  logger.debug "Won't track any changes with git as per config request!"
@@ -1,3 +1,3 @@
1
1
  module PowerStencil
2
- VERSION = '0.8.3'.freeze
2
+ VERSION = '0.8.4'.freeze
3
3
  end
data/lib/power_stencil.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'power_stencil/version'
2
2
 
3
3
  require 'universe_compiler'
4
- require 'git'
5
4
  require 'dir_glob_ignore'
6
5
 
7
6
  $DO_NOT_AUTOSTART_CLIMATIC=true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power_stencil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Briais
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-02 00:00:00.000000000 Z
11
+ date: 2019-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -147,6 +147,7 @@ files:
147
147
  - doc/entities.md
148
148
  - doc/example_use_cases.md
149
149
  - doc/faq.md
150
+ - doc/git_integration.md
150
151
  - doc/images/power-stencil-entity-build.svg
151
152
  - doc/images/power-stencil-entity-creation.svg
152
153
  - doc/images/power-stencil-simple-flow.svg
@@ -298,7 +299,7 @@ metadata:
298
299
  documentation_uri: https://gitlab.com/tools4devops/power_stencil/blob/master/README.md
299
300
  source_code_uri: https://gitlab.com/tools4devops/power_stencil
300
301
  homepage_uri: https://powerstencil.brizone.org/
301
- post_install_message: "\nThank you for installing PowerStencil 0.8.3 !\nFrom the command
302
+ post_install_message: "\nThank you for installing PowerStencil 0.8.4 !\nFrom the command
302
303
  line you can run `power_stencil --help`\nIf your shell is not completing the command:\n
303
304
  \ If you use rbenv: `rbenv rehash`\n If you use zsh : `rehash`\n\nOfficial Website
304
305
  \ : https://powerstencil.brizone.org/\nFull documentation here : https://gitlab.com/tools4devops/power_stencil/blob/master/README.md\nFeel