Skip to main content

CLI tool to get Git commit informations and store them in a config file

Project description

Git App Version

PyPI version travis-build scrutinizer-quality scrutinizer-coverage GitHub license Maintenance

A CLI tool written in Python to fetch Git commit informations and store them in a config file.

supported formats :

  • JSON
  • YAML
  • XML
  • INI
  • CSV
  • Shell script variables

Typical usecase : when deploying, run this command and import the git version config file.

Requirements

  • Python 2.7 or >= 3.4
  • python pip package tool

Installation

Just run :

pip install git-app-version

Or download latest binary release for Linux amd64 :

wget https://github.com/csanquer/git-app-version/releases/download/v1.0.0/git-app-version_linux_amd64.tar.gz
tar -xvzf git-app-version_linux_amd64.tar.gz
sudo mv git-app-version /usr/local/bin/
sudo chmod a+x /usr/local/bin/git-app-version

Usage

Help

To get help

git-app-version -h

Help result

Usage: git-app-version [OPTIONS] [REPOSITORY] [COMMIT]

  Get Git commit informations and store them in a config file

  REPOSITORY git repository path, Default is the current directory.
  COMMIT     git commit to check, Default is HEAD.

Options:
  -V, --version
  -q, --quiet                     silent mode
  -o, --output TEXT               output file path (without extension).
                                  Default is '<repository-path>/version'.
  -f, --format [all|json|yml|xml|ini|csv|sh]
                                  output file format and extension, use 'all'
                                  to output all format, can be set several
                                  times , Default is json.
  -n, --namespace TEXT            namespace like notation in version file, use
                                  dot separator to segment namespaces e.g.:
                                  'foo.bar.git'. Default is 'app_version' for
                                  XML and INI and no namespace for JSON and
                                  YAML. Never used for CSV or Shell file.
  -m, --meta METADATA             meta data to add, format = "<key>=<value>",
                                  can be set several times
  -d, --csv-delimiter TEXT        CSV delimiter, default=","
  -e, --csv-eol [lf|crlf]         CSV end of line, lf = Unix new line, crlf =
                                  windows new line, default=lf
  -u, --csv-quote TEXT            CSV quoting character, default='"'
  -h, --help                      Show this message and exit.

Get Commit Informations

To store git commit informations into a json file

# git-app-version -o <output-file-without-extension> -f <file-format> <my-git-repository>
git-app-version -o version -f json

output :

Git commit :
----------------  ----------------------------------------
abbrev_commit     40aaf83
author_date       2015-09-05T16:14:16+0000
author_email      paul.durand@example.com
author_name       Paul Durand
author_timestamp  1441469656
branches          master develop
commit_date       2015-09-05T16:14:16+0000
commit_timestamp  1441469656
committer_email   paul.durand@example.com
committer_name    Paul Durand
deploy_date       2016-06-21T09:33:01+0000
deploy_timestamp  1466501581
full_commit       40aaf83894b98898895d478f8b7cc4a866b1d62c
message           new feature
top_branches      master
version           v1.1.0-3-g439e52
----------------  ----------------------------------------
written to :
<my-git-repository>/version.json

This will generate a version.json file in the current directory (if this directory is a git repository).

You can generate several format at once :

git-app-version -o version -f json -f yml -f xml -f ini -f sh

Metadata : adding custom fields

You can add custom metadata fields with the --meta / -m option (can be used several times) :

git-app-version -m foo=bar -m custom_key=custom_value

output :

Git commit :
----------------  ----------------------------------------
abbrev_commit     40aaf83
author_date       2015-09-05T16:14:16+0000
author_email      paul.durand@example.com
author_name       Paul Durand
author_timestamp  1441469656
branches          master develop
commit_date       2015-09-05T16:14:16+0000
commit_timestamp  1441469656
committer_email   paul.durand@example.com
committer_name    Paul Durand
custom_key        custom_value
deploy_date       2016-06-21T09:33:01+0000
deploy_timestamp  1466501581
foo               bar
full_commit       40aaf83894b98898895d478f8b7cc4a866b1d62c
message           new feature
top_branches      master
version           v1.1.0-3-g439e52
----------------  ----------------------------------------
written to :
<my-git-repository>/version.json

Commit informations fields

  • full_commit : Git SHA1 commit hash,

    e.g.: 40aaf83894b98898895d478f8b7cc4a866b1d62c

  • abbrev_commit : Git SHA1 commit hash abbrev notation (x significant first characters),

    e.g.: 40aaf83

  • version : result of the command git describe --tags --always, see git-describe, if no version is found, the abbrev commit will be used per default

    e.g.: v1.1.0-3-g439e52

  • message : Git commit message

  • commit_date : Git commit date in iso8601 format,

    e.g.: 2016-03-01T09:33:33+0000

  • commit_timestamp : Git commit date in timestamp format,

    e.g.: 1456824813

  • author_date : Git author date in iso8601 format,

    e.g.: 2016-03-02T11:33:45+0000

  • author_timestamp : Git author date in timestamp format,

    e.g.: 1456918425

  • deploy_date : current date (when running the tool) in iso8601 format,

    e.g.: 2016-03-02T11:33:45+0000

  • deploy_timestamp : current date (when running the tool) in timestamp format,

    e.g.: 1456918425

  • branches : branches which the commit belongs,

    e.g.: ['master', 'develop']

  • top_branches : branches where the commit is the HEAD commit,

    e.g.: ['master']

  • committer_name : Git committer name,

    e.g.: Paul Durand

  • committer_email : Git committer email,

    e.g.: paul.durand@example.com

  • author_name : Git author name,

    e.g.: Paul Durand

  • author_email : Git author email,

    e.g.: paul.durand@example.com

File formats

  • json

    without namespace

    git-app-version -f json
    

    result

    {
      "version": "v1.1.0-3-g439e52",
      "full_commit": "40aaf83894b98898895d478f8b7cc4a866b1d62c",
      "abbrev_commit": "40aaf83",
      "branches": [
        "develop",
        "master"
      ],
      "top_branches": [
        "master"
      ],
      "committer_email": "paul.durand@example.com",
      "committer_name": "Paul Durand",
      "author_name": "Paul Durand",
      "author_email": "paul.durand@example.com",
      "commit_date": "2015-09-05T16:14:16+0000",
      "commit_timestamp": "1441469656",
      "author_date": "2015-09-05T16:14:16+0000",
      "author_timestamp": "1441469656",
      "deploy_date": "2016-06-21T09:33:01+0000",
      "deploy_timestamp": "1466501581",
      "message": "new feature"
    
    }
    

    with namespace

    git-app-version -f json -n git.infos
    

    result

    {
      "git": {
        "infos": {
          "version": "v1.1.0-3-g439e52",
          "full_commit": "40aaf83894b98898895d478f8b7cc4a866b1d62c",
          "abbrev_commit": "40aaf83",
          "branches": [
            "develop",
            "master"
          ],
          "top_branches": [
            "master"
          ],
          "committer_email": "paul.durand@example.com",
          "committer_name": "Paul Durand",
          "author_name": "Paul Durand",
          "author_email": "paul.durand@example.com",
          "commit_date": "2015-09-05T16:14:16+0000",
          "commit_timestamp": "1441469656",
          "author_date": "2015-09-05T16:14:16+0000",
          "author_timestamp": "1441469656",
          "deploy_date": "2016-06-21T09:33:01+0000",
          "deploy_timestamp": "1466501581",
          "message": "new feature"
        }
      }
    }
    
  • yml

    without namespace

    git-app-version -f yml
    

    result

    ---
    'version': 'v1.1.0-3-g439e52'
    'full_commit': '40aaf83894b98898895d478f8b7cc4a866b1d62c'
    'abbrev_commit': '40aaf83'
    'committer_name': 'Paul Durand'
    'committer_email': 'paul.durand@example.com'
    'author_name': 'Paul Durand'
    'author_email': 'paul.durand@example.com'
    'commit_date': '2015-09-05T16:14:16+0000'
    'commit_timestamp': '1441469656'
    'author_date': '2015-09-05T16:14:16+0000'
    'author_timestamp': '1441469656'
    'deploy_date': '2016-06-21T09:32:57+0000'
    'deploy_timestamp': '1466501577'
    'message': 'new feature'
    'branches':
    - 'develop'
    - 'master'
    'top_branches':
    - 'master'
    

    with namespace

    git-app-version -f yml -n git.infos
    

    result

    ---
    'git':
      'infos':
        'version': 'v1.1.0-3-g439e52'
        'full_commit': '40aaf83894b98898895d478f8b7cc4a866b1d62c'
        'abbrev_commit': '40aaf83'
        'committer_name': 'Paul Durand'
        'committer_email': 'paul.durand@example.com'
        'author_name': 'Paul Durand'
        'author_email': 'paul.durand@example.com'
        'commit_date': '2015-09-05T16:14:16+0000'
        'commit_timestamp': '1441469656'
        'author_date': '2015-09-05T16:14:16+0000'
        'author_timestamp': '1441469656'
        'deploy_date': '2016-06-21T09:32:57+0000'
        'deploy_timestamp': '1466501577'
        'message': 'new feature'
        'branches':
        - 'develop'
        - 'master'
        'top_branches':
        - 'master'
    
  • xml

    with default namespace

    git-app-version -f xml
    

    result

    <?xml version='1.0' encoding='UTF-8'?>
    <app_version>
      <version>v1.1.0-3-g439e52</version>
      <full_commit>40aaf83894b98898895d478f8b7cc4a866b1d62c</full_commit>
      <abbrev_commit>40aaf83</abbrev_commit>
      <commit_date>2015-09-05T16:14:16+0000</commit_date>
      <commit_timestamp>1441469656</commit_timestamp>
      <author_date>2015-09-05T16:14:16+0000</author_date>
      <author_timestamp>1441469656</author_timestamp>
      <deploy_date>2016-06-21T09:32:53+0000</deploy_date>
      <deploy_timestamp>1466501573</deploy_timestamp>
      <committer_name>Paul Durand</committer_name>
      <committer_email>paul.durand@example.com</committer_email>
      <author_name>Paul Durand</author_name>
      <author_email>paul.durand@example.com</author_email>
      <message>new feature</message>
      <branches>develop</branches>
      <branches>master</branches>
      <top_branches>master</top_branches>
    </app_version>
    

    with namespace

    git-app-version -f xml -n git.infos
    

    result

    <?xml version='1.0' encoding='UTF-8'?>
    <git>
      <infos>
        <version>v1.1.0-3-g439e52</version>
        <full_commit>40aaf83894b98898895d478f8b7cc4a866b1d62c</full_commit>
        <abbrev_commit>40aaf83</abbrev_commit>
        <commit_date>2015-09-05T16:14:16+0000</commit_date>
        <commit_timestamp>1441469656</commit_timestamp>
        <author_date>2015-09-05T16:14:16+0000</author_date>
        <author_timestamp>1441469656</author_timestamp>
        <deploy_date>2016-06-21T09:32:53+0000</deploy_date>
        <deploy_timestamp>1466501573</deploy_timestamp>
        <committer_name>Paul Durand</committer_name>
        <committer_email>paul.durand@example.com</committer_email>
        <author_name>Paul Durand</author_name>
        <author_email>paul.durand@example.com</author_email>
        <message>new feature</message>
        <branches>develop</branches>
        <branches>master</branches>
        <top_branches>master</top_branches>
      </infos>
    </git>
    
  • ini

    with default namespace

    git-app-version -f ini
    

    result

    [app_version]
    version = v1.1.0-3-g439e52
    full_commit = 40aaf83894b98898895d478f8b7cc4a866b1d62c
    abbrev_commit = 40aaf83
    commit_date = 2016-03-01T09:33:33+0000
    commit_timestamp = 1456824813
    author_date = 2016-03-01T09:33:33+0000
    author_timestamp = 1456824813
    deploy_date = 2016-03-02T11:33:45+0000
    deploy_timestamp = 1456918425
    message = new feature
    author_name = Paul Durand
    author_email = paul.durand@example.com
    committer_name = Paul Durand
    committer_email = paul.durand@example.com
    top_branches = ['master']
    branches = ['master','develop']
    

    with namespace

    git-app-version -f ini -n git.infos
    

    result

    [git.infos]
    version = v1.1.0-3-g439e52
    full_commit = 40aaf83894b98898895d478f8b7cc4a866b1d62c
    abbrev_commit = 40aaf83
    commit_date = 2016-03-01T09:33:33+0000
    commit_timestamp = 1456824813
    author_date = 2016-03-01T09:33:33+0000
    author_timestamp = 1456824813
    deploy_date = 2016-03-02T11:33:45+0000
    deploy_timestamp = 1456918425
    message = new feature
    author_name = Paul Durand
    author_email = paul.durand@example.com
    committer_name = Paul Durand
    committer_email = paul.durand@example.com
    top_branches = ['master']
    branches = ['master','develop']
    
  • csv

    you can configure CSV format with the option --csv-delimiter , --csv-eol and --csv-quote

    git-app-version -f csv --csv-delimiter ',' --csv-eol lf --csv-quote '"'
    

    result

    version,v1.1.0-3-g439e52
    full_commit,40aaf83894b98898895d478f8b7cc4a866b1d62c
    abbrev_commit,40aaf83
    commit_date,2016-03-01T09:33:33+0000
    commit_timestamp,1456824813
    author_date,2016-03-01T09:33:33+0000
    author_timestamp,1456824813
    deploy_date,2016-03-02T11:33:45+0000
    deploy_timestamp,1456918425
    message,new feature
    author_name,Paul Durand
    author_email,paul.durand@example.com
    committer_name,Paul Durand
    committer_email,paul.durand@example.com
    top_branches,"['master']"
    branches,"['master','develop']"
    
  • sh (shell script variables)

    git-app-version -f sh
    

    result

    version="v1.1.0-3-g439e52"
    full_commit="40aaf83894b98898895d478f8b7cc4a866b1d62c"
    abbrev_commit="40aaf83"
    commit_date="2016-03-01T09:33:33+0000"
    commit_timestamp="1456824813"
    author_date="2016-03-01T09:33:33+0000"
    author_timestamp="1456824813"
    deploy_date="2016-03-02T11:33:45+0000"
    deploy_timestamp="1456918425"
    message="new feature"
    author_name="Paul Durand"
    author_email="paul.durand@example.com"
    committer_name="Paul Durand"
    committer_email="paul.durand@example.com"
    top_branches="['master']"
    branches="['master','develop']"
    

Licensing

Project under GPL v3 License

Copyright (C) 2016 Charles Sanquer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

git-app-version-1.0.2.tar.gz (31.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

git_app_version-1.0.2-py2.py3-none-any.whl (26.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file git-app-version-1.0.2.tar.gz.

File metadata

  • Download URL: git-app-version-1.0.2.tar.gz
  • Upload date:
  • Size: 31.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

File hashes

Hashes for git-app-version-1.0.2.tar.gz
Algorithm Hash digest
SHA256 b2646f0ffc74d6ad6ffd4403630325e51fb46a20b1533973e69671332eb005a8
MD5 ba24b28054e28ff3487d3948ea0d12f9
BLAKE2b-256 bd6d46541081b255a2fef113a1236531ea63a520c35e1d43e7c897a2076ffc32

See more details on using hashes here.

File details

Details for the file git_app_version-1.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: git_app_version-1.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 26.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/2.7.14

File hashes

Hashes for git_app_version-1.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 84fb1f78733b8d2c382be8253accc30bf6816c9a5377d764b1482a83870adeff
MD5 156f3970ed494312f0e0dbf2f382120b
BLAKE2b-256 6be2d7383fc96d9929695b53de2f2f1e7a0599db8aac9b1f9510dce6334712d8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page