# FAF Tool

Command line utility which helps in setting up faf project

## Table of Contents

  1. [Install](#install)
  1. [Basic Usage](#basic-usage)
  1. [Commands](#commands)
  1. [CLI Options](#cli-options)
  1. [Settings File](#settings-file)

## Install

```bash
npm install -g faf-tool

```

##Basic Usage


```bash

mkdir diamond-feature
cd diamond-feature
faf-tool

```

running faf-tool without command shows help and copy `settings.json.example` to current folder
rename `settings.json.example` to `settings.json` and edit it, for example:

```javascript
{
  "svn-server": "svnserver.jaspersoft.com",
  "release-cycle": "diamond",
  "feature-name": "feature",
  "jasperserver-branch": "diamond-ce-feature",
  "jasperserver-pro-branch": "diamond-pro-feature",
  "modules": [
    "bi-charts",
    "bi-dashboard",
    "bi-report",
    "bi-repository",
    "js-sdk",
    "jrs-ui",
    "jrs-ui-pro"
  ]
}
```

Prepare local project to work

```bash
faf-tool setup

```

**[⬆ back to top](#table-of-contents)**

##Commands

#### setup

Checkout selected modules and run *npm* init

```bash

faf-tool setup

```

#### init

Initialize for each module: npm install && npm prune && grunt init

```bash

faf-tool init

```

#### watch

Start watchers assets like js,hml,css etc in all faf packages

```bash

faf-tool watch

```
> To find out local deployment you have to prepare .workspace file

#### update-init

Update and initialize for each module: svn up && npm install && npm prune && grunt init

```bash

faf-tool update-init


```

#### checkout-full

Checking out faf modules and jrs if specified

```bash

faf-tool create-feature

```

#### switch

Switch repository to specified branch

```bash

faf-tool switch

```


#### downmerge
Runs svn up and svn merge from trunk command for FAF modules and JRS
Accepts "--accept=<value>" svn argument. Default "postpone".
Accepts "--separate-changelist=<true|false>" svn argument. Default "true".

```bash

faf-tool downmerge

```


#### removecl
removes all changelists which was created during downmerge task
executed with --separate-changelist=true wich is set by default

```bash

faf-tool removecl


```


#### cleanup
runs svn cleanup for each module


```bash

faf-tool cleanup


```

**[⬆ back to top](#table-of-contents)**

## CLI options

 - `--dry-run=true`
 - `--verbose`
 - `--no-time` - hide time report
 - `--username=<username>` - svn username
 - `--password=<password>` - svn password
 - `--accept=<value>` - argument for svn merge command, works for "downmerge" task. Default "postpone".
 - `--parallel=<true|false>` - argument for parallel command execution, works for most tasks which use svn. Default "true".
 - `--separate-changelist=<true|false>` - argument for adding module changes to a separate svn changelist, works for "downmerge" task. Default "true"

##Dry run example

```bash
faf-tool create-feature --dry-run

```

**[⬆ back to top](#table-of-contents)**

##Settings File
Look at [settings.json samples](https://github.com/Jaspersoft/faf-tool/tree/master/samples)

```javascript
{
  // by default it uses "https://" protocol
  "svn-server": "svnserver.jaspersoft.com",
  
  // branch name parts
  //name of the feature branch or "trunk"
  "feature-name": "<feature name>", 
  
  // optional parameter for features without release cycle like bugfix
  "release-cycle": "<release name>", 
  

  // optional JRS branches names used for checkout JRS
  "jasperserver-branch": "<existing jrs ce branch name>",
  "jasperserver-pro-branch": "<existing jrs pro branch name>",

  // optional JRS location 
  "jasperserver-ci-path": "<path to ci jrs>",
  "jasperserver-pro-ci-path": "<path to ci jrs-pro>",

  // optional svn credentials
  "username": "username",
  "password":"password",

  "modules": [
    "bi-charts",
    "bi-dashboard",
    "bi-report",
    "bi-repository",
    "js-sdk",
    "jrs-ui",
    "jrs-ui-pro"
  ]
}
```

**[⬆ back to top](#table-of-contents)**
