13 releases

0.4.4 May 1, 2021
0.4.0 Mar 11, 2021
0.2.10 Nov 19, 2020
0.2.7 Jul 15, 2020

#547 in Template engine

44 downloads per month

MIT OR Apache-2.0

71KB
1K SLoC

guidon-cli

guidon-cli is the tool using the guidon library to render project templates.
It's executable is named guic (as in guidon-cli...).

Features

  • command line tool
  • uses handlebars template syntax
  • render templatized filename or folder name
  • the source can be a local folder or a git repository
    • for a git repository a specific revision can be used
  • the target is a folder

Usage

$ guic --help
Usage: guic [OPTIONS]

Apply template to project structures


Optional arguments:
 -h, --help     help
 -v, --verbose  verbosity
 -q, --quiet    quiet mode

Available commands:
 tplt   Templatize the given data
 crypt  Encrypt / Decrypt
 $ guic tptl -h
 Usage: guic tplt [OPTIONS]
 
 Positional arguments:
  from_path              Path or git repo of the template
  to_path                Output path for the target

 Optional arguments:
  -h, --help             This help message
  -g, --git-source       Required if template is hosted in a git repo
  -r, --rev REV          Revision to use
  -k, --unsecure         True to ignore certificate validation
  -a, --auto-proxy       If set to true, git tries to detect proxy configuration
  -m, --mode MODE        Render mode (lax, strict or strict_ask)
  -i, --interactive      Review variables before rendering template
  -t, --custom-tplt CUSTOM-TPLT
                         Provide a template file. If not provided, taken from given from_path.
 $ guic -h crypt
 Usage: guic crypt [OPTIONS]

 Positional arguments:
  data           The data to encrypt/decrypt

 Optional arguments:
  -h, --help     This help message
  -x, --decrypt  set to true to decrypt given data. If false, data encryption
  -k, --key KEY  The key to use. If not provided, the key will be read from GUIDON_KEY env var

Apply from local folder

$ guic tplt /path/to/template/folder /path/to/target

The template file is expected te be in the folder :

folder
|- template.toml
|- template
|    | - file1.hbs
     | - file2.hbs

Apply from template file

$ guic tplt /path/to/template_file.toml /path/to/target

The structure is expected to be the following:

folder
|- template_file.toml
|- file1.hbs
|- file2.hbs

Apply with custom template

guic tplt -t tplt_file.toml path_to/template_dir /path/to/target

With the given structure:

|
|- tplt_file.toml
|- path_to
|    |- template_dir
     |    |- file1.hbs
          |- file2.hbs

Apply from git repo

Simple use case

If a git url is used, the ssh key must be present in ssh-agent instance.

# With a https url
$ guic tplt -g https://url.to.my/git/repo /path/to/target

# With a git/ssh url
$guic tplt -g git@git.provider:git/repo /path/to/target

Private repo

With self-signed certificate and access token.

$ guic tplt -g -k  https://:access_token@url.to.my/git/repo /path/to/target

With user password. You should provide url encoded user and password

$guic tplt -g https://user:password@url.to.my/git/repo /path/to/target

If ssh-agent is running and can provide the correct key, you can call

$guic tplt -g git@git.provider:git/rep path/to/target

Templates

A basic template structure is the following :

a_folder/                   parent folder
  |- template.toml          configuration file (key / values)
  |- template/              folder containing templates files
    | - file1.txt.hbs       a template file (hbs extension)
    | - file{{key1}}        the {{key1}} part will be replaced
    | - dir1                
    |   |- file2.txt.hbs    a template file
    |   |- file3.txt        this file will be copied to destination
    | - {{dirkey}}          this folder will be renamed
    |   |- {{filekey}}.hbs  this file will be renamed and rendered

And a file1.txt.hbs file like:

This is a {{key2}}, but it could have been a {{key3}}.

With a template.toml file like the following :

[variables]
key1 = ".bak"
key2 = "plop"
key3 = "toto"
dirkey = "THE/FOLDER"
filekey = "my_file.ini"

The output structure will be:

target_folder/
    |- file1.txt
    |- file.bak
    |- dir1/
    |   |- file2.txt
    |   |- file3.txt
    |- THE/
        |- FOLDER/
            |- my_file.ini

and the file1.txt content will be:

This is a plop, but it could have been a toto.

Some helpers are provided, see the readme

Render modes

If lax, missing values are defaulted to an empty string, if strict an error is raised for a missing value, if strict_ask, user is prompted for missing values.

Installation

via Cargo

$ cargo install --force guidon-cli

Prebuilt binaries

Prebuilt binaries are available there

Dependencies

~5–13MB
~160K SLoC