ffizer 1.4.0

ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.
Documentation

ffizer

crates.io crates.io

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Build Status codecov

Crates.io GitHub All Releases

ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.

keywords: file generator, project template, project scaffolding, quick start, project initializer, project skeleton

Features

  • A native executable (cli)
    • Install via download a standalone single file on system (no pre-requirements like python, ruby, nodejs, java, ...).
    • Run as fast enough project generator.
    • Run with dry mode (useful to test).
    • Support self-upgrade.
  • A rust library
    • Can be included into other tool
  • Templates Authoring
    • Can be used for any file & folder generation (no specialization to one ecosystem).
    • Can start as simple as a folder to copy "as is".
    • Can use the [Handlebars] template syntax for file content, extended with functions:
      • To transform strings (toUpperCase, toLowerCase, Capitalize,...)
      • To retrieve content via http get (eg gitignore from gitignore.io, license from spdx)
      • ...
    • Can replace variables part in file and folder's name
    • Can be composed of other templates (applied as layer)
    • Can ignore file / folder under conditions
    • Can store the content at the root of the folder or under the subfolder template
  • Templates Hosting[X] template hosted as
    • On a local folder
    • On a hosted git repository (public / private, github / bitbucket/ gitlab / ...)
      • At the root of the repository
      • In a subfolder of the repository
      • In any revision (branch, tag, commit)

Suggestions are welcomes ;-)

Usages

Install

curl https://raw.githubusercontent.com/ffizer/ffizer/master/scripts/getLatest.sh | sh

via homebrew

brew tap ffizer/ffizer
brew install ffizer-bin
ffizer upgrade

via github releases

Download the binary for your platform from github releases, then unarchive it and place it your PATH.

via cargo

cargo install ffizer --force --features cli

Run

➜  ffizer --help

ffizer 1.2.0
https://github.com/ffizer/ffizer
ffizer is a files and folders initializer / generator. Create any kind (or part) of project from template.

USAGE:
    ffizer [FLAGS] <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Verbose mode (-v, -vv (very verbose / level debug), -vvv) print on stderr

SUBCOMMANDS:
    apply      Apply a template into a target directory
    help       Prints this message or the help of the given subcommand(s)
    upgrade    Self upgrade ffizer executable

Self upgrade the executable

  ffizer upgrade --help

ffizer-upgrade 1.2.0
https://github.com/ffizer/ffizer
Self upgrade ffizer executable

USAGE:
    ffizer upgrade

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

Apply a template

  ffizer apply --help

ffizer-apply 1.2.0
https://github.com/ffizer/ffizer
Apply a template into a target directory

USAGE:
    ffizer apply [FLAGS] [OPTIONS] --destination <dst_folder> --source <uri>

FLAGS:
    -h, --help                      Prints help information
        --offline                   in offline, only local templates or cached templates are used
    -V, --version                   Prints version information
        --x-always_default_value    should not ask for valiables values, always use defautl value or empty
                                    (experimental)

OPTIONS:
        --confirm <confirm>               ask confirmation 'never' or 'always' [default: never]
    -d, --destination <dst_folder>        destination folder (created if doesn't exist)
        --rev <rev>                       git revision of the template [default: master]
        --source-subfolder <subfolder>    path of the folder under the source uri to use for template
    -s, --source <uri>                    uri / path of the template
  • use a local folder as template

    ffizer apply --source $HOME/my_templates/tmpl0 --destination my_project
    
  • use a remote git repository as template

    ffizer apply --source https://github.com/ffizer/template_sample.git --destination my_project
    

    output

    Configure variables
    
    project_name: my_project
    
    
    Plan to execute
    
      - mkdir "my_project/"
      - mkdir "my_project/dir_1"
      - copyraw "my_project/dir_1/file_1_1.txt"
      - mkdir "my_project/dir_2_my_project"
      - copyraw "my_project/dir_2_my_project/file_1_2.txt"
      - copyraw "my_project/file_1.txt"
      - copyrender "my_project/file_2.txt"
      - keep "my_project/file_2.txt"
      - copyrender "my_project/file_3.txt"
      - copyraw "my_project/file_4_my_project.txt"
      - copyrender "my_project/file_5_my_project.txt"
      - copyraw "my_project/file_6.hbs"
    

Authoring a template

see Template Authoring - ffizer WIP

Templates

Build

cargo install cargo-make --force
cargo make ci-flow

Update CHANGELOG.md

cargo make update-changelog
git add CHANGELOG.md
git commit -m ':memo: (CHANGELOG) update'

Release a new version by bump patch (or minoror major)

cargo make publish -- patch --dry-run
cargo make publish -- patch

Alternatives

Generic

  • Cookiecutter, lot of templates, require python + pip + install dependencies on system (automatic)
  • Cookiecutter — Similar projects
  • sethyuan/fgen: A file generator library to be used to generate project structures, file templates and/or snippets. Templates are based on mustache. require nodejs
  • project_init in rust, use mustache for templating but I have some issues with it (project template creation not obvious, github only) I could contributes but I have incompatible requirements.
  • skeleton, good idea but no template file, more like a script.
  • porteurbars, very similar but I discovered it too late.

Specialized

specialized to a platform, build tool,...