A lot of projects start from a set of identical skeletons. For example, a project for a Python library should have the basic structure including a setup.py and a few CI jobs. A react webpack project should have a node package configuration and the webpack configuration. Only a few properties have to be adjusted for the initial commit of the project, such as the name of the packages and the project URL. Over time, I’ve accumulated a couple of scripts which replace placeholders in template projects by the new projects name. In the last couple of weeks, I’ve converted these scripts into a proper Python project itself. The project is called GiTemplet, a conctenation of Git and template because it takes Git repositories as templates.

What could GiTemplet do for you?

First of all, GiTemplet is a super simple command line tool. In it’s basic form,

$ gitemplet REPO PROJECT_NAME

it clones the repository into a temporary directory and replaces the strings {{ PN }} or {{ project_name }} by the given project name. Internally, the replacement is done using the jinja2 template engine. The generated files are copied to the current working directory. This even works with file names.

Is there more?

For most project templates one would like to prompt for more parameters when instantiating a new project, for example, the author of the project.

This can be achieved by adding the manifest .gitemplet.yml to the template repository. Have a look at the manifest of the python project.

version: '1'

questions:
  author:
    ask: Author
    default: Frank Sauerburger

  email:
    ask: e-mail address
    default: frank@sauerburger.com

  url:
    ask: Repository URL

  exec:
    ask: "Include an command-line tool?"
    q_type: bool
    default: false

  exec_name:
    ask: "Name of command-line tool?"
    only: exec

  versions:
    ask: "Which python version should be tested?"
    q_type: float
    nargs: '+'

When you instantiate a new project using this template,

$ gitemplet https://gitlab.sauerburger.com/templates/python.git \
   MySuperCoolPythonPackage

the following things will happen:

  • GiTemplet will prompt for the author’s name. The default is my name.
  • GiTemplet will prompt for the author’s email address.
  • GiTemplet will prompt for the URL of the repository.
  • GiTemplet will ask if the project ships with command-line tool.
  • If yes and only then, GiTemplet will ask for the name of the command-line tool.
  • Finally, the GiTemplet will ask which Python versions should be supported. Multiple values are allowed. This information is used to setup a test CI job for every supported version.

Are there ready-to-use templates?

Yes, currently, there are public project templates for Python libraries and webpack projects using react and bootstrap. Checkout the templates group.

Ok, fine. How do I get it?

Simply run:

$ git clone https://gitlab.sauerburger.com/frank/gitemplet.git
$ cd gitemplet
$ python3 setup.py

Done.