Skip to main content

Examples

This is an example of how you can use mani. Simply save the following content to a file named mani.yaml and then run mani sync to clone all the repositories. If you already have your own repositories, just omit the projects section.

You can then run some of the commands or checkout git-quick-stats.sh for additional git statistics and run them via mani for multiple projects.

Config

projects:
  example:
    path: .
    desc: A mani example

  pinto:
    path: frontend/pinto
    url: https://github.com/alajmo/pinto.git
    desc: A vim theme editor
    tags: [frontend, node]

  dashgrid:
    path: frontend/dashgrid
    url: https://github.com/alajmo/dashgrid.git
    desc: A highly customizable drag-and-drop grid
    tags: [frontend, lib, node]

  template-generator:
    url: https://github.com/alajmo/template-generator.git
    desc: A simple bash script used to manage boilerplates
    tags: [cli, bash]
    env:
      branch: master

specs:
  custom:
    output: table
    parallel: true

targets:
  all:
    all: true

themes:
  custom:
    table:
      options:
        draw_border: true
        separate_columns: true
        separate_header: true
        separate_rows: true

tasks:
  git-status:
    desc: show working tree status
    spec: custom
    target: all
    cmd: git status -s

  git-last-commit-msg:
    desc: show last commit
    cmd: git log -1 --pretty=%B

  git-last-commit-date:
    desc: show last commit date
    cmd: |
      git log -1 --format="%cd (%cr)" -n 1 --date=format:"%d  %b %y" \
      | sed 's/ //'

  git-branch:
    desc: show current git branch
    cmd: git rev-parse --abbrev-ref HEAD

  npm-install:
    desc: run npm install in node repos
    target:
      tags: [node]
    cmd: npm install

  git-overview:
    desc: show branch, local and remote diffs, last commit and date
    spec: custom
    target: all
    theme: custom
    commands:
      - task: git-branch
      - task: git-last-commit-msg
      - task: git-last-commit-date

Commands

List all Projects as Table or Tree:

$ mani list projects

 Project            | Tag                 | Description
--------------------+---------------------+--------------------------------------------------
 example            |                     | A mani example
 pinto              | frontend, node      | A vim theme editor
 dashgrid           | frontend, lib, node | A highly customizable drag-and-drop grid
 template-generator | cli, bash           | A simple bash script used to manage boilerplates

$ mani list projects --tree
┌─ frontend
│  ├─ pinto
│  └─ dashgrid
└─ template-generator

Describe Task

$ mani describe task git-overview

Name: git-overview
Description: show branch, local and remote diffs, last commit and date
Theme: custom
Target:
    All: true
    Cwd: false
    Projects:
    Paths:
    Tags:
Spec:
    Output: table
    Parallel: true
    IgnoreError: false
    OmitEmpty: false
Commands:
     - git-branch: show current git branch
     - git-last-commit-msg: show last commit
     - git-last-commit-date: show last commit date

Run a Task Targeting Projects with Tag node and Output Table

$ mani run npm-install --tags node

TASK [npm-install: run npm install in node repos] *********************************

pinto |
pinto | up to date, audited 911 packages in 928ms
pinto |
pinto | 71 packages are looking for funding
pinto |   run `npm fund` for details
pinto |
pinto | 15 vulnerabilities (9 moderate, 6 high)
pinto |
pinto | To address issues that do not require attention, run:
pinto |   npm audit fix
pinto |
pinto | To address all issues (including breaking changes), run:
pinto |   npm audit fix --force
pinto |
pinto | Run `npm audit` for details.

TASK [npm-install: run npm install in node repos] *********************************

dashgrid |
dashgrid | up to date, audited 960 packages in 1s
dashgrid |
dashgrid | 87 packages are looking for funding
dashgrid |   run `npm fund` for details
dashgrid |
dashgrid | 14 vulnerabilities (2 low, 2 moderate, 10 high)
dashgrid |
dashgrid | To address all issues possible (including breaking changes), run:
dashgrid |   npm audit fix --force
dashgrid |
dashgrid | Some issues need review, and may require choosing
dashgrid | a different dependency.
dashgrid |
dashgrid | Run `npm audit` for details.

Run Custom Command for All Projects

$ mani exec --all --output table --parallel 'find . -type f | wc -l'

 Project            | Output
--------------------+--------
 example            | 31016
 pinto              | 14444
 dashgrid           | 16527
 template-generator | 42