diff --git a/docs/_data/global-options.yml b/docs/_data/global-options.yml index 6af541fd..33fcf520 100644 --- a/docs/_data/global-options.yml +++ b/docs/_data/global-options.yml @@ -31,6 +31,11 @@ name: tags valueType: '..' description: 'Write release notes for using data collected until . If only one tag is specified, will use data until the previous tag. To run gren for all the tags, use --tags=all' +- + short: '-l' + name: limit + valueType: '' + description: 'Just produce release notes for the last releases.' - short: '-D' name: data-source @@ -87,3 +92,8 @@ short: '-q' name: quiet description: 'Run command without console logs.' +- + short: '-c' + name: config + valueType: '' + description: 'Specify a custom config filename' diff --git a/docs/_data/versions.yml b/docs/_data/versions.yml index 8c82d105..213c0c75 100644 --- a/docs/_data/versions.yml +++ b/docs/_data/versions.yml @@ -8,3 +8,4 @@ - 0.13.0 - 0.14.0 - 0.15.0 +- 0.17.0 diff --git a/docs/github-release-notes/0.17.0/-_template.js.html b/docs/github-release-notes/0.17.0/-_template.js.html new file mode 100644 index 00000000..c16690b4 --- /dev/null +++ b/docs/github-release-notes/0.17.0/-_template.js.html @@ -0,0 +1,88 @@ + + + + + + _template.js - Documentation + + + + + + + + + + + + + + + + + +
+ +

_template.js

+ + + + + + + +
+
+
/**
+ * Generate the templated string based on
+ * a placeholders Object
+ *
+ * @since  0.6.0
+ * @private
+ *
+ * @param  {Object} placeholders All the keys/values to update
+ * @param  {string|Function} string The string or the function that needs to be replaced
+ *
+ * @return {string}
+ */
+function generate(placeholders, string) {
+    if (typeof string === 'function') {
+        return string(placeholders);
+    }
+
+    return Object.entries(placeholders)
+        .reduce((carry, [key, placeholder]) => {
+            const placeholderRegExp = new RegExp(`{{${key}}}`, 'g');
+
+            return carry.replace(placeholderRegExp, placeholder);
+        }, string);
+}
+
+export {
+    generate
+};
+
+
+
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + diff --git a/docs/github-release-notes/0.17.0/-_utils.js.html b/docs/github-release-notes/0.17.0/-_utils.js.html new file mode 100644 index 00000000..770b72a0 --- /dev/null +++ b/docs/github-release-notes/0.17.0/-_utils.js.html @@ -0,0 +1,378 @@ + + + + + + _utils.js - Documentation + + + + + + + + + + + + + + + + + +
+ +

_utils.js

+ + + + + + + +
+
+
const chalk = require('chalk');
+const fs = require('fs');
+const ora = require('ora');
+const YAML = require('json2yaml');
+const Path = require('path');
+const { js_beautify: beautify } = require('js-beautify');
+require('require-yaml');
+
+/**
+ * Sort an object by its keys
+ *
+ * @since 0.8.0
+ * @public
+ *
+ * @param  {Object} object
+ * @return {Object}
+ */
+function sortObject(object) {
+    return Object.keys(object)
+        .sort()
+        .reduce((result, key) => {
+            result[key] = object[key];
+
+            return result;
+        }, {});
+}
+
+/**
+* Print a task name in a custom format
+*
+* @since 0.5.0
+* @public
+*
+* @param  {string} name The name of the task
+*/// istanbul ignore next
+function printTask(isQuiet, name) {
+    if (isQuiet) {
+        return;
+    }
+
+    process.stdout.write(chalk.blue(`\n🤖  - ${name}:\n===================================\n`));
+}
+
+/**
+* Outputs the task status
+*
+* @since 0.5.0
+* @public
+*
+* @param  {string} taskName The task name
+*
+* @return {Function}          The function to be fired when is loaded
+*/// istanbul ignore next
+function task(gren, taskName) {
+    if (gren.options.quiet) {
+        gren.tasks[taskName] = {};
+
+        return noop;
+    }
+    const spinner = ora(taskName);
+    gren.tasks[taskName] = spinner;
+
+    spinner.start();
+
+    return message => {
+        spinner.succeed(message);
+    };
+}
+
+/**
+ * Clears all the tasks that are still running
+ *
+ * @since 0.6.0
+ * @public
+ *
+ * @param  {GithubReleaseNotes} gren
+ */// istanbul ignore next
+function clearTasks(gren) {
+    if (!Object.keys(gren.tasks.length)) {
+        return;
+    }
+
+    Object.keys(gren.tasks).forEach((taskName) => {
+        gren.tasks[taskName].stop();
+    });
+
+    process.stdout.write(chalk.red('\nTask(s) stopped because of the following error:\n'));
+
+    gren.tasks = [];
+}
+
+/**
+* Check if e value is between a min and a max
+*
+* @since 0.5.0
+* @public
+*
+* @param  {number}  value
+* @param  {number}  min
+* @param  {number}  max
+*
+* @return {Boolean}
+*/
+function isInRange(value, min, max) {
+    return !Math.floor((value - min) / (max - min));
+}
+
+/**
+* Transforms a dasherize string into a camel case one.
+*
+* @since 0.3.2
+* @public
+*
+* @param  {string} value The dasherize string
+*
+* @return {string}       The camel case string
+*/
+function dashToCamelCase(value) {
+    return value
+        .toLowerCase()
+        .replace(/-([a-z])/g, (match) => match[1].toUpperCase());
+}
+
+/**
+ * Converts an array like string to an actual Array,
+ * converting also underscores to spaces
+ *
+ * @since 0.6.0
+ * @public
+ *
+ * @param  {string} arrayLike The string of items
+ * e.g.
+ * "wont_fix, duplicate, bug"
+ *
+ * @return {Array}  The items with spaces instead of underscores.
+ */
+function convertStringToArray(arrayLike) {
+    if (!arrayLike) {
+        return [];
+    }
+
+    if (typeof arrayLike === 'object') {
+        return Object.keys(arrayLike).map((itemKey) => arrayLike[itemKey]);
+    }
+
+    return arrayLike
+        .replace(/\s/g, '')
+        .split(',')
+        .map((itemName) => itemName.replace(/_/g, ' ', itemName));
+}
+
+/**
+* Format a date into a string
+*
+* @since 0.5.0
+* @public
+*
+* @param  {Date} date
+* @return {string}
+*/
+function formatDate(date) {
+    return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear();
+}
+
+/**
+ * Gets the content from a filepath a returns an object
+ *
+ * @since  0.6.0
+ * @public
+ *
+ * @param  {string} filepath
+ * @return {Object|boolean}
+ */
+function requireConfig(filepath) {
+    if (!fs.existsSync(filepath)) {
+        return false;
+    }
+
+    if (getFileNameFromPath(filepath).match(/\./g).length === 1) {
+        return JSON.parse(fs.readFileSync(filepath, 'utf8'));
+    }
+
+    return require(filepath);
+}
+
+/**
+ * Get configuration from the one of the config files
+ *
+ * @since 0.6.0
+ * @public
+ *
+ * @param  {string} path Path where to look for config files
+ * @return {Object} The configuration from the first found file or empty object
+ */
+function getConfigFromFile(path, customFilename = null) {
+    if (customFilename) {
+        const config = requireConfig(Path.join(path, customFilename));
+        if (!config) {
+            throw chalk.red(`Could not find custom config file: ${customFilename}`);
+        }
+        return config;
+    }
+
+    return getFileTypes()
+        .reduce((carry, filename) => carry || requireConfig(Path.join(path, filename)), false) || {};
+}
+
+/**
+ * Return the extension of a filename
+ *
+ * @param  {string} filename
+ *
+ * @return {string}
+ */
+function getFileExtension(filename) {
+    return filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1);
+}
+
+/**
+ * Create the content for a configuratio file, based on extension and data
+ *
+ * @param  {string} path
+ * @param  {Object} data
+ *
+ * @return {string} File content
+ */// istanbul ignore next
+function writeConfigToFile(path, data) {
+    const extension = getFileExtension(getFileNameFromPath(path));
+    const dataType = {
+        yml: content => YAML.stringify(content),
+        yaml: content => YAML.stringify(content),
+        json: content => beautify(JSON.stringify(content)),
+        none: content => beautify(JSON.stringify(content)),
+        js: content => beautify(`module.exports = ${JSON.stringify(content)}`)
+    };
+
+    return dataType[extension || 'none'](data);
+}
+
+/**
+ * Get the filename from a path
+ *
+ * @since  0.10.0
+ * @private
+ *
+ * @param  {string} path
+ *
+ * @return {string}
+ */
+function getFileNameFromPath(path = '') {
+    return path.replace(/^.*[\\/]/, '');
+}
+
+/**
+ * Get the file types for the configuration
+ *
+ * @since  0.13.0
+ *
+ * @return {Array}
+ */
+function getFileTypes() {
+    return [
+        '.grenrc.yml',
+        '.grenrc.json',
+        '.grenrc.yaml',
+        '.grenrc.js',
+        '.grenrc'
+    ];
+}
+
+/**
+ * Remove all the configuration files
+ *
+ * @since  0.13.0
+ *
+ * @param {Boolean} confirm     Necessary to force the function.
+ */
+function cleanConfig(confirm, path = process.cwd()) {
+    if (confirm !== true) {
+        return;
+    }
+
+    getFileTypes().forEach(fileName => {
+        const file = `${path}/${fileName}`;
+        if (!fs.existsSync(file)) {
+            return false;
+        }
+
+        fs.unlinkSync(file);
+
+        return file;
+    });
+}
+
+/**
+ * Just a noop function
+ */
+function noop() {}
+
+// Allow nodeunit to work. Has to be fixed.
+module.exports = {
+    cleanConfig,
+    clearTasks,
+    convertStringToArray,
+    dashToCamelCase,
+    formatDate,
+    getConfigFromFile,
+    getFileExtension,
+    getFileNameFromPath,
+    getFileTypes,
+    isInRange,
+    noop,
+    printTask,
+    requireConfig,
+    sortObject,
+    task,
+    writeConfigToFile
+};
+
+
+
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + diff --git a/docs/github-release-notes/0.17.0/GitHubInfo.html b/docs/github-release-notes/0.17.0/GitHubInfo.html new file mode 100644 index 00000000..83f842ab --- /dev/null +++ b/docs/github-release-notes/0.17.0/GitHubInfo.html @@ -0,0 +1,885 @@ + + + + + + GitHubInfo - Documentation + + + + + + + + + + + + + + + + + +
+ +

GitHubInfo

+ + + + + + + +
+ +
+ +

+ GitHubInfo +

+ +

Class retrieving GitHub informations from the folder where .git is initialised.

+ + +
+ +
+
+ + +
+ + +

Constructor

+ + +

new GitHubInfo()

+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + +

Members

+ + + +
+

options

+ + + + +
+

Getter for the options

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + +
+ + + +
+

repo

+ + + + +
+

Getter for the repo

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + +
+ + + +
+

token

+ + + + +
+

Getter for the token

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + +
+ + + + + +

Methods

+ + + +
+ + + +

(private) _executeCommand(command, callback) → {Promise}

+ + + + + +
+

Execute a command in the bash and run a callback

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
command + + +string + + + + +

The command to execute

+ +
callback + + +function + + + + +

The callback which returns the stdout

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

_repo(callback) → {Promise}

+ + + + + +
+

Get repo informations

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
callback + + +function + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

The promise that resolves repo informations ({user: user, name: name})

+
+ + +
+ + + +
+ + +
+ + + +

_token(callback) → {Promise}

+ + + + + +
+

Get token informations

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
callback + + +function + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

The promise that resolves token informations ({token: token})

+
+ + +
+ + + +
+ + + + + + +
+ +
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/GitHubInfo.js.html b/docs/github-release-notes/0.17.0/GitHubInfo.js.html new file mode 100644 index 00000000..a860aedf --- /dev/null +++ b/docs/github-release-notes/0.17.0/GitHubInfo.js.html @@ -0,0 +1,169 @@ + + + + + + GitHubInfo.js - Documentation + + + + + + + + + + + + + + + + + +
+ +

GitHubInfo.js

+ + + + + + + +
+
+
import { exec } from 'child_process';
+import chalk from 'chalk';
+import { matchAll } from 'regex-match-all';
+
+/** Class retrieving GitHub informations from the folder where .git is initialised. */
+class GitHubInfo {
+    /**
+     * Getter for the options
+     *
+     * @return {Promise.all}
+     */
+    get options() {
+        return Promise.all([
+            this._repo(),
+            this._token()
+        ]);
+    }
+
+    /**
+     * Getter for the token
+     *
+     * @return {Promise}
+     */
+    get token() {
+        return this._token();
+    }
+
+    /**
+     * Getter for the repo
+     *
+     * @return {Promise}
+     */
+    get repo() {
+        return this._repo();
+    }
+
+    /**
+    * Execute a command in the bash and run a callback
+    *
+    * @since 0.5.0
+    * @private
+    *
+    * @param  {string}   command The command to execute
+    * @param  {Function} callback The callback which returns the stdout
+    *
+    * @return {Promise}
+    */
+    _executeCommand(command, callback) {
+        return new Promise((resolve, reject) => {
+            exec(command, (err, stdout, stderr) => {
+                if (err || stderr) {
+                    reject(err || stderr);
+                } else {
+                    resolve(stdout.replace('\n', ''));
+                }
+            });
+        })
+            .then(callback)
+            .catch((error) => {
+                throw new Error(chalk.red(error) + chalk.yellow('\nMake sure you\'re running the command from the repo folder, or you using the --username and --repo flags.'));
+            });
+    }
+
+    /**
+    * Get repo informations
+    *
+    * @since 0.5.0
+    * @public
+    *
+    * @param  {Function} callback
+    *
+    * @return {Promise} The promise that resolves repo informations ({user: user, name: name})
+    */
+    _repo(callback) {
+        return this._executeCommand('git config remote.origin.url', repo => {
+            const repoPath = matchAll(/([\w-]+)\/([\w-]+)(\.git)?$/g, repo);
+
+            if (!repoPath[1]) {
+                return Promise.reject('No repo found');
+            }
+
+            const user = repoPath[1][0];
+            const name = repoPath[1][1];
+
+            return {
+                username: user,
+                repo: name
+            };
+        }).then(callback);
+    }
+
+    /**
+    * Get token informations
+    *
+    * @since 0.5.0
+    * @public
+    *
+    * @param  {Function} callback
+    *
+    * @return {Promise} The promise that resolves token informations ({token: token})
+    */
+    _token() {
+        const token = process.env.GREN_GITHUB_TOKEN;
+
+        return token ? Promise.resolve({ token }) : Promise.resolve(null);
+    }
+}
+
+export default GitHubInfo;
+
+
+
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + diff --git a/docs/github-release-notes/0.17.0/Gren.html b/docs/github-release-notes/0.17.0/Gren.html new file mode 100644 index 00000000..3e77e17b --- /dev/null +++ b/docs/github-release-notes/0.17.0/Gren.html @@ -0,0 +1,6465 @@ + + + + + + Gren - Documentation + + + + + + + + + + + + + + + + + +
+ +

Gren

+ + + + + + + +
+ +
+ +

+ Gren +

+ +

Class creating release notes and changelog notes

+ + +
+ +
+
+ + +
+ + +

Constructor

+ + +

new Gren()

+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + +

Methods

+ + + +
+ + + +

(private) _checkChangelogFile() → {string}

+ + + + + +
+

Check if the changelog file exists

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _createChangelog(body)

+ + + + + +
+

Create the changelog file

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
body + + +string + + + + +

The body of the file

+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

(async, private) _createRelease(releaseOptions) → {Promise}

+ + + + + +
+

Create a release from a given tag (in the options)

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseOptions + + +Object + + + + +

The options to build the release:

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+
Example
+ +
{
+  "tag_name": "1.0.0",
+  "target_commitish": "master",
+  "name": "v1.0.0",
+  "body": "Description of the release",
+  "draft": false,
+  "prerelease": false
+}
+ +
+ +
+ + +
+ + + +

(private) _createReleaseRanges(releaseDates) → {Array}

+ + + + + +
+

Create the ranges of release dates

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseDates + + +Array + + + + +

The release dates

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async, private) _editRelease(releaseId, releaseOptions) → {Promise}

+ + + + + +
+

Edit a release from a given tag (in the options)

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseId + + +number + + + + +

The id of the release to edit

+ +
releaseOptions + + +Object + + + + +

The options to build the release:

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+
Example
+ +
{
+  "tag_name": "v1.0.0",
+  "target_commitish": "master",
+  "name": "v1.0.0",
+  "body": "Description of the release",
+  "draft": false,
+  "prerelease": false
+}
+ +
+ +
+ + +
+ + + +

(private) _filterBlockIssue(range, issue) → {Boolean}

+ + + + + +
+

Filter the issue based on the date range, or if is in the release +milestone.

+
+ + + + + +
+ + + + +
Since:
+
  • 0.9.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
range + + +Array + + + + +

The release ranges

+ +
issue + + +Object + + + + +

GitHub issue

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _filterBlockPullRequest(range, pullRequest) → {Boolean}

+ + + + + +
+

Filter the pull requests in case the release is milestone, +or otherwise by dates range.

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
range + + +Array + + + + +

The release ranges

+ +
pullRequest + + +Object + + + + +

GitHub pull request

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _filterCommit(commit) → {Boolean}

+ + + + + +
+

Filter a commit based on the includeMessages option and commit message

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
commit + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _filterIssue(issue) → {Boolean}

+ + + + + +
+

Filter the issue based on gren options and labels

+
+ + + + + +
+ + + + +
Since:
+
  • 0.9.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
issue + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _filterPullRequest(pullRequest) → {Boolean}

+ + + + + +
+

Filter the pull request based on gren options and labels

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pullRequest + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _generateCommitsBody(commits) → {string}

+ + + + + +
+

Return a commit messages generated body

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
commits + + +Array + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async, private) _getClosedIssues(releaseRanges) → {Promise}

+ + + + + +
+

Get all the closed issues from the current repo

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseRanges + + +Array + + + + +

The array of date ranges

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

The promise which resolves the list of the issues

+
+ + +
+ + + +
+ + +
+ + + +

(async, private) _getCommitBlocks(releaseRanges) → {Array.<Promise>}

+ + + + + +
+

Get the blocks of commits based on release dates

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseRanges + + +Array + + + + +

The array of date ranges

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array.<Promise> + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async, private) _getCommitsBetweenTwo(since, until) → {Promise}

+ + + + + +
+

Gets all the commits between two dates

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
since + + +string + + + + +

The since date in ISO

+ +
until + + +string + + + + +

The until date in ISO

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

The promise which resolves the [Array] commit messages

+
+ + +
+ + + +
+ + +
+ + + +

(async, private) _getIssueBlocks(releaseRanges) → {Array.<Promise>}

+ + + + + +
+

Get the blocks of issues based on release dates

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseRanges + + +Array + + + + +

The array of date ranges

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array.<Promise> + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _getLastPage(link) → {boolean|number}

+ + + + + +
+

Get the last page from a Hypermedia link

+
+ + + + + +
+ + + + +
Since:
+
  • 0.11.1
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
link + + +string + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +boolean +| + +number + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async, private) _getLastTags(releases, page) → {Promise}

+ + + + + +
+

Get all the tags of the repo

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
releases + + +Array + + + + + + + + +
page + + +number + + + + + + 1 + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async, private) _getListReleases() → {Promise}

+ + + + + +
+

Get all releases

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

The promise which resolves an array of releases

+
+ + +
+ + + +
+ + +
+ + + +

(async, private) _getMergedPullRequests(page, limit) → {Array.<Promise>}

+ + + + + +
+

Get the merged pull requests from the repo

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
page + + +number + + + + + + 1 + + + + +
limit + + +number + + + + + + 1000 + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array.<Promise> + + +
+
+ + +
+

The promises which returns pull requests

+
+ + +
+ + + +
+ + +
+ + + +

(async, private) _getPullRequestsBlocks(releaseRanges) → {Array.<Promise>}

+ + + + + +
+

Get the blocks of pull requests based on the release dates

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseRanges + + +Array + + + + +

The array of date ranges

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array.<Promise> + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async) _getReleaseBlocks() → {Promise}

+ + + + + +
+

Generate release blocks based on issues or commit messages +depending on the option.

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + +
+

Resolving the release blocks

+
+ + +
+ + + +
+ + +
+ + + +

(private) _getSelectedTags(allTags, tags) → {Boolean|Array}

+ + + + + +
+

Get the tags information from the given ones, and adds +the next one in case only one is given

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
allTags + + +Array +| + +string + + + + + + +
tags + + +Array.<Object> + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean +| + +Array + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _getTagDates(tags) → {Array.<Promise>}

+ + + + + +
+

Get the dates of the last two tags

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tags + + +Array.<Object> + + + + +

List of all the tags in the repo

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array.<Promise> + + +
+
+ + +
+

The promises which returns the dates

+
+ + +
+ + + +
+ + +
+ + + +

(private) _groupBy(issues) → {Array}

+ + + + + +
+

Create groups of issues based on labels

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
issues + + +Array + + + + +

The array of all the issues.

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _groupByLabel(issues) → {string}

+ + + + + +
+

Group the issues based on their first label

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
issues + + +Array + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _hasNetwork() → {Promise}

+ + + + + +
+

Check if there is connectivity

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _lablesAreIgnored(labels) → {boolean}

+ + + + + +
+

Compare the ignored labels with the passed ones

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
labels + + +Array + + + + +

The labels to check

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +boolean + + +
+
+ + +
+

If the labels array contains any of the ignore ones

+
+ + +
+ + + +
+
Example
+ +
[{
+    name: 'bug'
+}]
+ +
+ +
+ + +
+ + + +

_listReleases(options) → {Promise}

+ + + + + +
+

Temporary function for this.repo.listReleases to accept options

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

_listTags(options) → {Promise}

+ + + + + +
+

Temporary function for this.repo.listReleases to accept options

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

_outputOptions(options)

+ + + + + +
+

Output the options in the terminal in a formatted way

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +Object + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

(private) _prepareRelease(tags) → {Promise}

+ + + + + +
+

Creates the options to make the release

+
+ + + + + +
+ + + + +
Since:
+
  • 0.2.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tags + + +Array.<Object> + + + + +

The collection of tags

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _sortReleasesByDate(releaseDates) → {Array}

+ + + + + +
+

Sort releases by dates

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
releaseDates + + +Array + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _templateBody(blocks) → {string}

+ + + + + +
+

Generate the Changelog issues body template

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
blocks + + +Array.<Object> + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _templateCommits(commit) → {string}

+ + + + + +
+

Return the templated commit message

+
+ + + + + +
+ + + + +
Since:
+
  • 0.1.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
commit + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _templateGroups(groups) → {string}

+ + + + + +
+

Generates the template for the groups

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
groups + + +Object + + + + +

The groups to template e.g. +{ + 'bugs': [{...}, {...}, {...}] +}

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _templateIssue(issue) → {string}

+ + + + + +
+

Generate the MD template for each issue

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
issue + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _templateLabels(issue) → {string}

+ + + + + +
+

Generate the MD template from all the labels of a specific issue

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
issue + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

_validateRequiredTagsExists(tags, requireTags)

+ + + + + +
+

Check that the require tags are exists in tags

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tags + + +Array + + + + + + +
requireTags + + +Array + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

(async) changelog() → {Promise}

+ + + + + +
+

Generate changelog file based on the release notes or generate new one

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async) release() → {Promise}

+ + + + + +
+

Generate release notes and draft a new release

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + + + + + +
+ +
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/Gren.js.html b/docs/github-release-notes/0.17.0/Gren.js.html new file mode 100644 index 00000000..48535f94 --- /dev/null +++ b/docs/github-release-notes/0.17.0/Gren.js.html @@ -0,0 +1,1151 @@ + + + + + + Gren.js - Documentation + + + + + + + + + + + + + + + + + +
+ +

Gren.js

+ + + + + + + +
+
+
import chalk from 'chalk';
+import Github from 'github-api';
+import utils from './_utils.js';
+import { generate } from './_template.js';
+import connectivity from 'connectivity';
+import templateConfig from './templates.js';
+import ObjectAssign from 'object-assign-deep';
+import fs from 'fs';
+
+const defaults = {
+    tags: [],
+    prefix: '',
+    template: templateConfig,
+    prerelease: false,
+    generate: false,
+    quiet: false,
+    override: false,
+    debug: false,
+    ignoreLabels: false,
+    ignoreIssuesWith: false,
+    ignoreCommitsWith: false,
+    groupBy: false,
+    milestoneMatch: 'Release {{tag_name}}'
+};
+
+const MAX_TAGS_LIMIT = 99;
+const TAGS_LIMIT = 30;
+
+/** Class creating release notes and changelog notes */
+class Gren {
+    constructor(props = {}) {
+        this.options = ObjectAssign({}, defaults, props);
+        this.tasks = [];
+
+        const {
+            username,
+            repo,
+            token,
+            apiUrl,
+            tags,
+            limit,
+            ignoreLabels,
+            ignoreIssuesWith,
+            ignoreCommitsWith,
+            ignoreTagsWith
+        } = this.options;
+
+        this.options.tags = utils.convertStringToArray(tags);
+        this.options.ignoreLabels = utils.convertStringToArray(ignoreLabels);
+        this.options.ignoreIssuesWith = utils.convertStringToArray(ignoreIssuesWith);
+        this.options.ignoreCommitsWith = utils.convertStringToArray(ignoreCommitsWith);
+        this.options.ignoreTagsWith = utils.convertStringToArray(ignoreTagsWith);
+
+        if (limit && limit > 0 && limit <= MAX_TAGS_LIMIT) {
+            this.options.limit = limit;
+        } else if (this.options.tags.indexOf('all') >= 0) {
+            this.options.limit = MAX_TAGS_LIMIT;
+        } else {
+            this.options.limit = TAGS_LIMIT;
+        }
+
+        if (!token) {
+            throw chalk.red('You must provide the TOKEN');
+        }
+
+        if (this.options.debug) {
+            this._outputOptions(this.options);
+        }
+
+        const githubApi = new Github({
+            token
+        }, apiUrl);
+
+        this.repo = githubApi.getRepo(username, repo);
+        this.issues = githubApi.getIssues(username, repo);
+    }
+
+    /**
+     * Generate release notes and draft a new release
+     *
+     * @since  0.10.0
+     * @public
+     *
+     * @return {Promise}
+     */
+    async release() {
+        utils.printTask(this.options.quiet, 'Generate release notes');
+
+        await this._hasNetwork();
+        const blocks = await this._getReleaseBlocks();
+
+        return blocks.reduce((carry, block) => carry.then(this._prepareRelease.bind(this, block)), Promise.resolve());
+    }
+
+    /**
+     * Generate changelog file based on the release notes or generate new one
+     *
+     * @since  0.10.0
+     * @public
+     *
+     * @return {Promise}
+     */
+    async changelog() {
+        utils.printTask(this.options.quiet, 'Generate changelog file');
+
+        await this._hasNetwork();
+        this._checkChangelogFile();
+
+        const releases = this.options.generate ? await this._getReleaseBlocks() : await this._getListReleases();
+
+        if (releases.length === 0) {
+            throw chalk.red('There are no releases, use --generate to create release notes, or run the release command.');
+        }
+
+        return this._createChangelog(this._templateReleases(releases));
+    }
+
+    /**
+     * Check if the changelog file exists
+     *
+     * @since 0.8.0
+     * @private
+     *
+     * @return {string}
+     */
+    _checkChangelogFile() {
+        const filePath = process.cwd() + '/' + this.options.changelogFilename;
+
+        if (fs.existsSync(filePath) && !this.options.override) {
+            throw chalk.black(chalk.bgYellow('Looks like there is already a changelog, to override it use --override'));
+        }
+
+        return filePath;
+    }
+
+    /**
+     * Create the changelog file
+     *
+     * @since 0.8.0
+     * @private
+     *
+     * @param  {string} body The body of the file
+     */
+    _createChangelog(body) {
+        const loaded = utils.task(this, `Creating ${this.options.changelogFilename}`);
+        const filePath = process.cwd() + '/' + this.options.changelogFilename;
+
+        fs.writeFileSync(filePath, this.options.template.changelogTitle + body);
+
+        loaded(chalk.green(`Changelog created in ${filePath}`));
+    }
+
+    /**
+     * Edit a release from a given tag (in the options)
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {number} releaseId The id of the release to edit
+     * @param  {Object} releaseOptions The options to build the release:
+     * @example
+     * {
+     *   "tag_name": "v1.0.0",
+     *   "target_commitish": "master",
+     *   "name": "v1.0.0",
+     *   "body": "Description of the release",
+     *   "draft": false,
+     *   "prerelease": false
+     * }
+     *
+     * @return {Promise}
+     */
+    async _editRelease(releaseId, releaseOptions) {
+        const loaded = utils.task(this, 'Updating latest release');
+        const { data: release } = await this.repo.updateRelease(releaseId, releaseOptions);
+
+        loaded(chalk.green(`${release.name} has been successfully updated!`) + chalk.blue(`\nSee the results here: ${release.html_url}`));
+
+        return release;
+    }
+
+    /**
+     * Create a release from a given tag (in the options)
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param  {Object} releaseOptions The options to build the release:
+     * @example {
+     *   "tag_name": "1.0.0",
+     *   "target_commitish": "master",
+     *   "name": "v1.0.0",
+     *   "body": "Description of the release",
+     *   "draft": false,
+     *   "prerelease": false
+     * }
+     *
+     * @return {Promise}
+     */
+    async _createRelease(releaseOptions) {
+        const loaded = utils.task(this, 'Preparing the release');
+        const { data: release } = await this.repo.createRelease(releaseOptions);
+
+        loaded(chalk.green(`${release.name} has been successfully created!`) + chalk.blue(`\nSee the results here: ${release.html_url}`));
+
+        return release;
+    }
+
+    /**
+     * Creates the options to make the release
+     *
+     * @since 0.2.0
+     * @private
+     *
+     * @param  {Object[]} tags The collection of tags
+     *
+     * @return {Promise}
+     */
+    _prepareRelease(block) {
+        const releaseOptions = {
+            tag_name: block.release,
+            name: block.name,
+            body: block.body,
+            draft: this.options.draft,
+            prerelease: this.options.prerelease
+        };
+
+        if (block.id) {
+            if (!this.options.override) {
+                console.warn(chalk.black(chalk.bgYellow(`Skipping ${block.release} (use --override to replace it)`)));
+
+                return Promise.resolve();
+            }
+
+            return this._editRelease(block.id, releaseOptions);
+        }
+
+        return this._createRelease(releaseOptions);
+    }
+
+    /**
+     * Get the tags information from the given ones, and adds
+     * the next one in case only one is given
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Array|string} allTags
+     * @param  {Object[]} tags
+     *
+     * @return {Boolean|Array}
+     */
+    _getSelectedTags(allTags) {
+        const { tags } = this.options;
+
+        if (tags.indexOf('all') >= 0) {
+            return allTags;
+        }
+
+        if (!allTags || !allTags.length || !tags.length) {
+            return false;
+        }
+
+        const selectedTags = [].concat(tags);
+
+        return allTags.filter(({ name }, index) => {
+            const isSelectedTag = selectedTags.includes(name);
+
+            if (isSelectedTag && selectedTags.length === 1 && allTags[index + 1]) {
+                selectedTags.push(allTags[index + 1].name);
+            }
+            return isSelectedTag;
+        }).slice(0, 2);
+    }
+
+    /**
+     * Temporary function for this.repo.listReleases to accept options
+     *
+     * @see  https://github.com/github-tools/github/pull/485
+     * @param  {Object} options
+     *
+     * @return {Promise}
+     */
+    _listTags(options) {
+        return this.repo._request('GET', `/repos/${this.repo.__fullname}/tags`, options);
+    }
+
+    /**
+     * Get all the tags of the repo
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param {Array} releases
+     * @param {number} page
+     *
+     * @return {Promise}
+     */
+    async _getLastTags(releases, page = 1, limit = this.options.limit) {
+        const { headers: { link }, data: tags } = await this._listTags({
+            per_page: limit,
+            page
+        });
+
+        if (!tags.length) {
+            throw chalk.red('\nLooks like you have no tags! Tag a commit first and then run gren again');
+        }
+
+        const filteredTags = (this._getSelectedTags(tags) || [tags[0], tags[1]])
+            .filter(Boolean)
+            .filter(({ name }) => this.options.ignoreTagsWith.every(ignoreTag => !name.match(ignoreTag)))
+            .map(tag => {
+                const tagRelease = releases ? releases.filter(release => release.tag_name === tag.name)[0] : false;
+                const releaseId = tagRelease ? tagRelease.id : null;
+
+                return {
+                    tag: tag,
+                    releaseId: releaseId
+                };
+            });
+        const totalPages = this._getLastPage(link);
+
+        if ((this.options.tags.indexOf('all') >= 0 || filteredTags.length < 2) && totalPages && +page < totalPages) {
+            return this._getLastTags(releases, page + 1).then(moreTags => moreTags.concat(filteredTags));
+        }
+
+        return filteredTags;
+    }
+
+    /**
+     * Get the dates of the last two tags
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param  {Object[]} tags List of all the tags in the repo
+     *
+     * @return {Promise[]}     The promises which returns the dates
+     */
+    _getTagDates(tags) {
+        return tags.map(async tag => {
+            const { data: { committer } } = await this.repo.getCommit(tag.tag.commit.sha);
+
+            return {
+                id: tag.releaseId,
+                name: tag.tag.name,
+                date: committer.date
+            };
+        });
+    }
+
+    /**
+     * Temporary function for this.repo.listReleases to accept options
+     *
+     * @see  https://github.com/github-tools/github/pull/485
+     * @param  {Object} options
+     *
+     * @return {Promise}
+     */
+    _listReleases(options) {
+        return this.repo._request('GET', `/repos/${this.repo.__fullname}/releases`, options);
+    }
+
+    /**
+     * Get the merged pull requests from the repo
+     *
+     * @private
+     *
+     * @param {number} page
+     * @param {number} limit
+     *
+     * @return {Promise[]}     The promises which returns pull requests
+     */
+    async _getMergedPullRequests(since, page = 1, limit = 1000) {
+        const results = await this.repo.listPullRequests({
+            state: 'closed',
+            sort: 'updated',
+            direction: 'desc',
+            per_page: limit,
+            page
+        });
+
+        const { headers: { link }, data: prs } = results;
+        const totalPages = this._getLastPage(link);
+        const filterPrs = prs.filter(pr => pr.merged_at);
+        if (prs.length > 0 && since < prs[prs.length - 1].updated_at &&
+            totalPages && +page < totalPages) {
+            return this._getMergedPullRequests(since, page + 1).then(prsResults => prsResults.concat(filterPrs));
+        }
+
+        return filterPrs;
+    }
+
+    /**
+     * Get the last page from a Hypermedia link
+     *
+     * @since  0.11.1
+     * @private
+     *
+     * @param  {string} link
+     *
+     * @return {boolean|number}
+     */
+    _getLastPage(link) {
+        const linkMatch = Boolean(link) && link.match(/page=(\d+)>; rel="last"/);
+
+        return linkMatch && +linkMatch[1];
+    }
+
+    /**
+     * Get all releases
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @return {Promise} The promise which resolves an array of releases
+     */
+    async _getListReleases(page = 1, limit = this.options.limit) {
+        const loaded = utils.task(this, 'Getting the list of releases');
+        const { headers: { link }, data: releases } = await this._listReleases({
+            per_page: limit,
+            page
+        });
+
+        const totalPages = this._getLastPage(link);
+
+        if (this.options.tags.indexOf('all') >= 0 && totalPages && +page < totalPages) {
+            return this._getListReleases(page + 1).then(moreReleases => moreReleases.concat(releases));
+        }
+
+        loaded(`Releases found: ${releases.length}`);
+
+        return releases;
+    }
+
+    /**
+     * Generate the releases bodies from a release Objects Array
+     *
+     * @since 0.8.0
+     * @private
+     * @ignore
+     *
+     * @param  {Array} releases The release Objects Array coming from GitHub
+     *
+     * @return {string}
+     */
+    _templateReleases(releases) {
+        const { template } = this.options;
+
+        return releases.map(release => generate({
+            release: release.name || release.tag_name,
+            date: utils.formatDate(new Date(release.published_at)),
+            body: release.body
+        }, template.release)).join(template.releaseSeparator);
+    }
+
+    /**
+     * Return the templated commit message
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param  {Object} commit
+     *
+     * @return {string}
+     */
+    // eslint-disable-next-line camelcase
+    _templateCommits({ sha, html_url, author, commit: { author: { name }, message } }) {
+        return generate({
+            sha,
+            message: message.split('\n')[0],
+            url: html_url,
+            author: author && author.login,
+            authorName: name
+        }, this.options.template.commit);
+    }
+
+    /**
+     * Generate the MD template from all the labels of a specific issue
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Object} issue
+     *
+     * @return {string}
+     */
+    _templateLabels(issue) {
+        const labels = Array.from(issue.labels);
+
+        if (!labels.length && this.options.template.noLabel) {
+            labels.push({name: this.options.template.noLabel});
+        }
+
+        return labels
+            .filter(label => this.options.ignoreLabels.indexOf(label.name) === -1)
+            .map(label => generate({
+                label: label.name
+            }, this.options.template.label)).join('');
+    }
+
+    /**
+     * Generate the MD template for each issue
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Object} issue
+     *
+     * @return {string}
+     */
+    _templateIssue(issue) {
+        return generate({
+            labels: this._templateLabels(issue),
+            name: issue.title,
+            text: '#' + issue.number,
+            url: issue.html_url,
+            body: issue.body,
+            pr_base: issue.base && issue.base.ref,
+            pr_head: issue.head && issue.head.ref
+        }, this.options.template.issue);
+    }
+
+    /**
+     * Generate the Changelog issues body template
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Object[]} blocks
+     *
+     * @return {string}
+     */
+    _templateBody(body, rangeBody) {
+        if (Array.isArray(body) && body.length) {
+            return body.join('\n') + '\n';
+        }
+
+        if (rangeBody) {
+            return `${rangeBody}\n`;
+        }
+
+        return '*No changelog for this release.*\n';
+    }
+
+    /**
+     * Generates the template for the groups
+     *
+     * @since  0.8.0
+     * @private
+     *
+     * @param  {Object} groups The groups to template e.g.
+     * {
+     *     'bugs': [{...}, {...}, {...}]
+     * }
+     *
+     * @return {string}
+     */
+    _templateGroups(groups) {
+        return Object.entries(groups).map(([key, value]) => {
+            const heading = generate({
+                heading: key
+            }, this.options.template.group);
+            const body = value.join('\n');
+
+            return heading + '\n' + body;
+        });
+    }
+
+    /**
+     * Filter a commit based on the includeMessages option and commit message
+     *
+     * @since  0.10.0
+     * @private
+     *
+     * @param  {Object} commit
+     *
+     * @return {Boolean}
+     */
+    _filterCommit({ commit: { message } }) {
+        const messageType = this.options.includeMessages;
+        const filterMap = {
+            merges: message => message.match(/^merge/i),
+            commits: message => !message.match(/^merge/i),
+            all: () => true
+        };
+        const shouldIgnoreMessage = this.options.ignoreCommitsWith.every(commitMessage => {
+            const regex = new RegExp(commitMessage, 'i');
+            return !message.split('\n')[0].match(regex);
+        });
+
+        if (filterMap[messageType]) {
+            return filterMap[messageType](message) && shouldIgnoreMessage;
+        }
+
+        return filterMap.commits(message) && shouldIgnoreMessage;
+    }
+
+    /**
+     * Return a commit messages generated body
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param  {Array} commits
+     *
+     * @return {string}
+     */
+    _generateCommitsBody(commits = []) {
+        const bodyMessages = Array.from(commits);
+
+        if (bodyMessages.length === 1) {
+            bodyMessages.push(null);
+        }
+
+        return bodyMessages
+            .slice(0, -1)
+            .filter(this._filterCommit.bind(this))
+            .map(this._templateCommits.bind(this))
+            .join('\n');
+    }
+
+    /**
+     * Gets all the commits between two dates
+     *
+     * @since 0.1.0
+     * @private
+     *
+     * @param  {string} since The since date in ISO
+     * @param  {string} until The until date in ISO
+     *
+     * @return {Promise}      The promise which resolves the [Array] commit messages
+     */
+    async _getCommitsBetweenTwo(since, until) {
+        const options = {
+            since: since,
+            until: until,
+            per_page: 100
+        };
+
+        const { data } = await this.repo.listCommits(options);
+
+        return data;
+    }
+
+    /**
+     * Get the blocks of commits based on release dates
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Array} releaseRanges The array of date ranges
+     *
+     * @return {Promise[]}
+     */
+    async _getCommitBlocks(releaseRanges) {
+        const taskName = 'Creating the body blocks from commits';
+        const loaded = utils.task(this, taskName);
+
+        const ranges = await Promise.all(
+            releaseRanges
+                .map(async range => {
+                    const [{ date: until }, { date: since }] = range;
+
+                    this.tasks[taskName].text = `Get commits between ${utils.formatDate(new Date(since))} and ${utils.formatDate(new Date(until))}`;
+                    const commits = await this._getCommitsBetweenTwo(since, until);
+
+                    return {
+                        id: range[0].id,
+                        name: this.options.prefix + range[0].name,
+                        release: range[0].name,
+                        published_at: range[0].date,
+                        body: this._generateCommitsBody(commits) + '\n'
+                    };
+                })
+        );
+
+        loaded(`Commit ranges loaded: ${ranges.length}`);
+
+        return ranges;
+    }
+
+    /**
+     * Compare the ignored labels with the passed ones
+     *
+     * @since 0.10.0
+     * @private
+     *
+     * @param  {Array} labels   The labels to check
+     * @example [{
+     *     name: 'bug'
+     * }]
+     *
+     * @return {boolean}    If the labels array contains any of the ignore ones
+     */
+    _lablesAreIgnored(labels) {
+        if (!labels || !Array.isArray(labels)) {
+            return false;
+        }
+
+        const { ignoreIssuesWith } = this.options;
+
+        return ignoreIssuesWith.some(label => labels.map(({ name }) => name).includes(label));
+    }
+
+    /**
+     * Get all the closed issues from the current repo
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Array} releaseRanges The array of date ranges
+     *
+     * @return {Promise} The promise which resolves the list of the issues
+     */
+    async _getClosedIssues(releaseRanges) {
+        const type = {
+            issues: 'Issues',
+            milestones: 'Issues'
+        }[this.options.dataSource];
+        const loaded = utils.task(this, `Getting all closed ${type}`);
+        const { data: issues } = await this.issues.listIssues({
+            state: 'closed',
+            since: releaseRanges[releaseRanges.length - 1][1].date
+        });
+
+        loaded(`${type} found: ${issues.length}`);
+
+        return issues;
+    }
+
+    /**
+     * Group the issues based on their first label
+     *
+     * @since 0.8.0
+     * @private
+     *
+     * @param  {Array} issues
+     *
+     * @return {string}
+     */
+    _groupByLabel(issues) {
+        const groups = [];
+
+        Object.values(ObjectAssign({}, issues)).forEach(issue => {
+            if (!issue.labels.length) {
+                if (!this.options.template.noLabel) {
+                    return;
+                }
+
+                issue.labels.push({name: this.options.template.noLabel});
+            }
+
+            const labelName = issue.labels[0].name;
+
+            if (!groups[labelName]) {
+                groups[labelName] = [];
+            }
+
+            groups[labelName].push(this._templateIssue(issue));
+        });
+
+        return this._templateGroups(utils.sortObject(groups));
+    }
+
+    /**
+     * Create groups of issues based on labels
+     *
+     * @since  0.8.0
+     * @private
+     *
+     * @param  {Array} issues The array of all the issues.
+     *
+     * @return {Array}
+     */
+    _groupBy(passedIssues) {
+        const { groupBy } = this.options;
+        const issues = Object.values(ObjectAssign({}, passedIssues));
+
+        if (!groupBy || groupBy === 'false') {
+            return issues.map(this._templateIssue.bind(this));
+        }
+
+        if (groupBy === 'label') {
+            return this._groupByLabel(issues);
+        }
+
+        if (typeof groupBy !== 'object' || Array.isArray(groupBy)) {
+            throw chalk.red('The option for groupBy is invalid, please check the documentation');
+        }
+
+        const allLabels = Object.values(groupBy).reduce((carry, group) => carry.concat(group), []);
+        const groups = Object.keys(groupBy).reduce((carry, group, i, arr) => {
+            const groupIssues = issues.filter(issue => {
+                if (!issue.labels.length && this.options.template.noLabel) {
+                    issue.labels.push({name: this.options.template.noLabel});
+                }
+
+                return issue.labels.some(label => {
+                    const isOtherLabel = groupBy[group].indexOf('...') !== -1 && allLabels.indexOf(label.name) === -1;
+
+                    return groupBy[group].indexOf(label.name) !== -1 || isOtherLabel;
+                }) && !arr.filter(title => carry[title]).some(title => carry[title].indexOf(this._templateIssue(issue)) !== -1);
+            }).map(this._templateIssue.bind(this));
+
+            if (groupIssues.length) {
+                carry[group] = groupIssues;
+            }
+
+            return carry;
+        }, {});
+
+        return this._templateGroups(groups);
+    }
+
+    /**
+     * Filter the issue based on gren options and labels
+     *
+     * @since 0.9.0
+     * @private
+     *
+     * @param  {Object} issue
+     *
+     * @return {Boolean}
+     */
+    _filterIssue(issue) {
+        const { dataSource } = this.options;
+
+        return (issue.pull_request ? dataSource === 'prs' : dataSource === 'issues' | dataSource === 'milestones') && !this._lablesAreIgnored(issue.labels) &&
+            !((this.options.onlyMilestones || dataSource === 'milestones') && !issue.milestone);
+    }
+
+    /**
+     * Filter the pull request based on gren options and labels
+     * @private
+     *
+     * @param  {Object} pullRequest
+     *
+     * @return {Boolean}
+     */
+    _filterPullRequest(pullRequest) {
+        return !this._lablesAreIgnored(pullRequest.labels) && !(this.options.onlyMilestones && !pullRequest.milestone);
+    }
+
+    /**
+     * Filter the issue based on the date range, or if is in the release
+     * milestone.
+     *
+     * @since 0.9.0
+     * @private
+     *
+     * @param  {Array} range The release ranges
+     * @param  {Object} issue GitHub issue
+     *
+     * @return {Boolean}
+     */
+    _filterBlockIssue(range, issue) {
+        if (this.options.dataSource === 'milestones') {
+            return this.options.milestoneMatch.replace('{{tag_name}}', range[0].name) === issue.milestone.title;
+        }
+
+        return utils.isInRange(
+            Date.parse(issue.closed_at),
+            Date.parse(range[1].date),
+            Date.parse(range[0].date)
+        );
+    }
+
+    /**
+     * Filter the pull requests in case the release is milestone,
+     * or otherwise by dates range.
+     *
+     * @private
+     *
+     * @param  {Array} range The release ranges
+     * @param  {Object} pullRequest GitHub pull request
+     *
+     * @return {Boolean}
+     */
+    _filterBlockPullRequest(range, pullRequest) {
+        if (this.options.dataSource === 'milestones') {
+            return this.options.milestoneMatch.replace('{{tag_name}}', range[0].name) === pullRequest.milestone.title;
+        }
+
+        return utils.isInRange(
+            Date.parse(pullRequest.merged_at),
+            Date.parse(range[1].date),
+            Date.parse(range[0].date)
+        );
+    }
+
+    /**
+     * Get the blocks of issues based on release dates
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Array} releaseRanges The array of date ranges
+     *
+     * @return {Promise[]}
+     */
+    async _getIssueBlocks(releaseRanges) {
+        const issues = await this._getClosedIssues(releaseRanges);
+        const release = releaseRanges
+            .map(range => {
+                const filteredIssues = Array.from(issues)
+                    .filter(this._filterIssue.bind(this))
+                    .filter(this._filterBlockIssue.bind(this, range));
+                const body = (!range[0].body || this.options.override) && this._groupBy(filteredIssues);
+                return {
+                    id: range[0].id,
+                    release: range[0].name,
+                    name: this.options.prefix + range[0].name,
+                    published_at: range[0].date,
+                    body: this._templateBody(body, range[0].body)
+                };
+            });
+
+        return release;
+    }
+    /**
+     * Get the blocks of pull requests based on the release dates
+     *
+     * @private
+     *
+     * @param  {Array} releaseRanges The array of date ranges
+     *
+     * @return {Promise[]}
+     */
+    async _getPullRequestsBlocks(releaseRanges) {
+        const loaded = utils.task(this, `Getting all merged pull requests`);
+        const since = releaseRanges[releaseRanges.length - 1][1].date;
+        const prs = await this._getMergedPullRequests(since);
+
+        let totalPrs = 0;
+        const release = releaseRanges
+            .map(range => {
+                const filteredPullRequests = Array.from(prs)
+                    .filter(this._filterPullRequest.bind(this))
+                    .filter(this._filterBlockPullRequest.bind(this, range));
+                totalPrs += filteredPullRequests.length;
+                const body = (!range[0].body || this.options.override) && this._groupBy(filteredPullRequests);
+                return {
+                    id: range[0].id,
+                    release: range[0].name,
+                    name: this.options.prefix + range[0].name,
+                    published_at: range[0].date,
+                    body: this._templateBody(body, range[0].body)
+                };
+            });
+        loaded(`Pull Requests found: ${totalPrs}`);
+        return release;
+    }
+
+    /**
+     * Sort releases by dates
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param {Array} releaseDates
+     *
+     * @return {Array}
+     */
+    _sortReleasesByDate(releaseDates) {
+        return Array.from(releaseDates).sort((release1, release2) => new Date(release2.date) - new Date(release1.date));
+    }
+
+    /**
+     * Create the ranges of release dates
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @param  {Array} releaseDates The release dates
+     *
+     * @return {Array}
+     */
+    _createReleaseRanges(releaseDates) {
+        const ranges = [];
+        const RANGE = 2;
+        const sortedReleaseDates = this._sortReleasesByDate(releaseDates);
+
+        if (sortedReleaseDates.length === 1 || this.options.tags.indexOf('all') >= 0) {
+            sortedReleaseDates.push({
+                id: 0,
+                date: new Date(0)
+            });
+        }
+
+        for (let i = 0; i < sortedReleaseDates.length - 1; i++) {
+            // NOTE: Get one second later
+            const until = (new Date(new Date(sortedReleaseDates[i + 1].date).getTime() + 1000).toISOString()).replace(/\.000Z$/, 'Z');
+            ranges.push([
+                sortedReleaseDates[i],
+                {
+                    ...sortedReleaseDates[i + RANGE - 1],
+                    date: until
+                }
+            ]);
+        }
+
+        return ranges;
+    }
+
+    /**
+     * Generate release blocks based on issues or commit messages
+     * depending on the option.
+     *
+     * @return {Promise} Resolving the release blocks
+     */
+    async _getReleaseBlocks() {
+        const loaded = utils.task(this, 'Getting releases');
+        const dataSource = {
+            issues: this._getIssueBlocks.bind(this),
+            commits: this._getCommitBlocks.bind(this),
+            milestones: this._getIssueBlocks.bind(this),
+            prs: this._getPullRequestsBlocks.bind(this)
+        };
+        const releases = await this._getListReleases();
+        this.tasks['Getting releases'].text = 'Getting tags';
+
+        const tags = await this._getLastTags(releases.length ? releases : false);
+        this._validateRequiredTagsExists(tags, this.options.tags);
+        const releaseDates = await Promise.all(this._getTagDates(tags));
+
+        loaded(`Tags found: ${tags.map(({ tag: { name } }) => name).join(', ')}`);
+
+        return dataSource[this.options.dataSource](
+            this._createReleaseRanges(releaseDates)
+        );
+    }
+
+    /**
+     * Check that the require tags are exists in tags
+     *
+     * @param {Array} tags
+     * @param {Array} requireTags
+     *
+     * @throws{Exception} Will throw exception in case that
+     * @requireTags were set to 2 specific tags and these tags aren't exists in @tags
+     */
+    _validateRequiredTagsExists(tags, requireTags) {
+        if (requireTags.indexOf('all') >= 0 || !(requireTags instanceof Array)) return;
+
+        const tagsNames = tags.map(tagData => tagData.tag.name);
+
+        const missingTags = requireTags.filter(requireTag => tagsNames.indexOf(requireTag) < 0);
+        if (missingTags.length > 0) {
+            const inflection = (missingTags.length === 1) ? 'tag is' : 'tags are';
+            throw chalk.red(`\nThe following ${inflection} not found in the repository: ${missingTags}. ` +
+                'please provide existing tags.');
+        }
+    }
+
+    /**
+     * Check if there is connectivity
+     *
+     * @since 0.5.0
+     * @private
+     *
+     * @return {Promise}
+     */
+    _hasNetwork() {
+        return new Promise(resolve => {
+            connectivity(isOnline => {
+                if (!isOnline) {
+                    console.warn(chalk.yellow('WARNING: Looks like you don\'t have network connectivity!'));
+                }
+
+                resolve(isOnline);
+            });
+        });
+    }
+
+    /**
+     * Output the options in the terminal in a formatted way
+     *
+     * @param  {Object} options
+     */
+    _outputOptions(options) {
+        const camelcaseToSpaces = value => value.replace(/([A-Z])/g, ' $1').toLowerCase().replace(/\w/, a => a.toUpperCase());
+        const outputs = Object.entries(options)
+            .filter(option => option !== 'debug')
+            .map(([key, value]) => `${chalk.yellow(camelcaseToSpaces(key))}: ${value.toString() || 'empty'}`);
+
+        process.stdout.write('\n' + chalk.blue('Options: \n') + outputs.join('\n') + '\n');
+    }
+}
+
+export default Gren;
+
+
+
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + diff --git a/docs/github-release-notes/0.17.0/Program.html b/docs/github-release-notes/0.17.0/Program.html new file mode 100644 index 00000000..477b7ae6 --- /dev/null +++ b/docs/github-release-notes/0.17.0/Program.html @@ -0,0 +1,1558 @@ + + + + + + Program - Documentation + + + + + + + + + + + + + + + + + +
+ +

Program

+ + + + + + + +
+ +
+ +

+ Program +

+ +

Class creating a Commander program, managing the options passed via bash and config file.

+ + +
+ +
+
+ + +
+ + +

Constructor

+ + +

new Program()

+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + +

Methods

+ + + +
+ + + +

_camelCaseObjectKeys(object) → {Object}

+ + + + + +
+

Converts all Object values to camel case

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
object + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _consumeOptions(opts) → {Object}

+ + + + + +
+

Consume the options from the properties and provide get the defaults and the programOptions

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
opts + + +Array + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _dashToCamelCase(value) → {string}

+ + + + + +
+

Transforms a dasherize string into a camel case one.

+
+ + + + + +
+ + + + +
Since:
+
  • 0.3.2
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +string + + + + +

The dasherize string

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + +
+

The camel case string

+
+ + +
+ + + +
+ + +
+ + + +

(private) _filterObject(object) → {Object}

+ + + + + +
+

Remove all the properties that have undefined values from an object

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
object + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _getEnvOptions() → {Promise}

+ + + + + +
+

Get informations from the local folder

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _getOptionsFromObject(defaults) → {Object}

+ + + + + +
+

Extrapulate the options from a program

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
defaults + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _programWithEvents(program, events) → {Commander}

+ + + + + +
+

Add all the given events to a program

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
program + + +Commander + + + + + + +
events + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Commander + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) _programWithOptions(program, options) → {Commander}

+ + + + + +
+

Add all the given options to a program

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
program + + +Commander + + + + + + +
options + + +Array + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Commander + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(async) init() → {Promise}

+ + + + + +
+

Initialise the module

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Promise + + +
+
+ + + +
+ + + +
+ + + + + + +
+ +
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/Program.js.html b/docs/github-release-notes/0.17.0/Program.js.html new file mode 100644 index 00000000..2c58dc2b --- /dev/null +++ b/docs/github-release-notes/0.17.0/Program.js.html @@ -0,0 +1,285 @@ + + + + + + Program.js - Documentation + + + + + + + + + + + + + + + + + +
+ +

Program.js

+ + + + + + + +
+
+
import GitHubInfo from './GitHubInfo';
+import program from 'commander';
+import { getConfigFromFile } from './_utils.js';
+
+/** Class creating a Commander program, managing the options passed via bash and config file. */
+class Program {
+    constructor(props) {
+        const { programOptions, defaults } = this._consumeOptions(props.options);
+
+        this.name = props.name;
+        this.description = props.description;
+        this.examples = props.examples;
+        this.defaults = defaults;
+        this.program = this._programWithEvents(this._programWithOptions(program, programOptions), props.events)
+            .name(this.name)
+            .description(this.description)
+            .parse(props.argv);
+
+        this.options = Object.assign(
+            {},
+            getConfigFromFile(props.cwd, program.config),
+            this._getOptionsFromObject(this.program, this.defaults)
+        );
+    }
+
+    /**
+     * Initialise the module
+     *
+     * @since 0.10.0
+     * @public
+     *
+     * @return {Promise}
+     */
+    async init() {
+        const options = await this._getEnvOptions();
+        this.options = this._filterObject(this._camelCaseObjectKeys(
+            Object.assign(
+                {},
+                this.defaults,
+                Object.assign({}, ...[].concat(options)),
+                this.options
+            )
+        ));
+
+        return this.options;
+    }
+
+    /**
+     * Get informations from the local folder
+     *
+     * @since 0.10.0
+     * @private
+     *
+     * @return {Promise}
+     */
+    _getEnvOptions() {
+        const githubInfo = new GitHubInfo();
+        const { username, repo } = this.options;
+
+        if (username && repo) {
+            return githubInfo.token;
+        }
+
+        return githubInfo.options;
+    }
+
+    /**
+     * Remove all the properties that have undefined values from an object
+     *
+     * @since  0.10.0
+     * @private
+     *
+     * @param  {Object} object
+     *
+     * @return {Object}
+     */
+    _filterObject(object) {
+        return Object.entries(object)
+            .filter(([key, value]) => value !== undefined)
+            .reduce((carry, [key, value]) => {
+                carry[key] = value;
+                return carry;
+            }, {});
+    }
+
+    /**
+     * Add all the given events to a program
+     *
+     * @since  0.10.0
+     * @private
+     *
+     * @param  {Commander} program
+     * @param  {Object} events
+     *
+     * @return {Commander}
+     */
+    _programWithEvents(program, events) {
+        if (!events || !events.length) {
+            return program;
+        }
+
+        Object.entries(events).forEach(([event, action]) => {
+            program.on(event, action);
+        });
+
+        return program;
+    }
+
+    /**
+     * Add all the given options to a program
+     *
+     * @since 0.10.0
+     * @private
+     *
+     * @param  {Commander} program
+     * @param  {Array} options
+     *
+     * @return {Commander}
+     */
+    _programWithOptions(program, options) {
+        options.forEach(({ name, description, action, defaultValue }) => program.option(...[name, description, action, defaultValue].filter(Boolean)));
+        return program;
+    }
+
+    /**
+     * Consume the options from the properties and provide get the defaults and the programOptions
+     *
+     * @since  0.10.0
+     * @private
+     *
+     * @param  {Array} opts
+     *
+     * @return {Object}
+     */
+    _consumeOptions(opts = []) {
+        if (!Array.isArray(opts)) {
+            return {
+                programOptions: [],
+                defaults: {}
+            };
+        }
+
+        const programOptions = opts.map(({ short, name, valueType, description, defaultValue, action }) => ({
+            name: short && name ? `${short}, --${name} ${valueType || ''}` : ' ',
+            description,
+            defaultValue,
+            action
+        }));
+
+        const defaults = this._camelCaseObjectKeys(
+            opts.reduce((carry, opt) => {
+                carry[opt.name] = opt.defaultValue;
+                return carry;
+            }, {})
+        );
+
+        return {
+            programOptions,
+            defaults
+        };
+    }
+
+    /**
+     * Extrapulate the options from a program
+     *
+     * @since  0.10.0
+     * @private
+     *
+     * @param  {Object} defaults
+     *
+     * @return {Object}
+     */
+    _getOptionsFromObject(object = {}, defaults = {}) {
+        if (typeof object !== 'object' || Array.isArray(object)) {
+            return {};
+        }
+
+        return Object.keys(defaults).reduce((carry, option) => {
+            if (object[option] && object[option] !== defaults[option]) {
+                carry[option] = object[option];
+            }
+
+            return carry;
+        }, {});
+    }
+
+    /**
+     * Converts all Object values to camel case
+     *
+     * @param  {Object} object
+     *
+     * @return {Object}
+     */
+    _camelCaseObjectKeys(object = {}) {
+        if (typeof object !== 'object' || Array.isArray(object)) {
+            return {};
+        }
+
+        return Object.entries(object).reduce((carry, [key, value]) => {
+            carry[this._dashToCamelCase(key)] = value;
+            return carry;
+        }, {});
+    }
+
+    /**
+    * Transforms a dasherize string into a camel case one.
+    *
+    * @since 0.3.2
+    * @private
+    *
+    * @param  {string} value The dasherize string
+    *
+    * @return {string}       The camel case string
+    */
+    _dashToCamelCase(value = '') {
+        if (typeof value !== 'string') {
+            return '';
+        }
+
+        return value
+            .replace(/-([a-z])/g, (match) => match[1].toUpperCase());
+    }
+}
+
+export default Program;
+
+
+
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 00000000..5d20d916 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 00000000..3ed7be4b --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.woff new file mode 100644 index 00000000..1205787b Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Bold-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.eot new file mode 100644 index 00000000..1f639a15 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 00000000..6a2607b9 --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 00000000..ed760c06 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-BoldItalic-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.eot new file mode 100644 index 00000000..0c8a0ae0 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.svg new file mode 100644 index 00000000..e1075dcc --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.woff new file mode 100644 index 00000000..ff652e64 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Italic-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.eot new file mode 100644 index 00000000..14868406 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 00000000..11a472ca --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.woff new file mode 100644 index 00000000..e7860748 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Light-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 00000000..8f445929 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 00000000..431d7e35 --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.woff new file mode 100644 index 00000000..43e8b9e6 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-LightItalic-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 00000000..6bbc3cf5 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.svg new file mode 100644 index 00000000..25a39523 --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.woff new file mode 100644 index 00000000..e231183d Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Regular-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.eot new file mode 100644 index 00000000..d8375dd0 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.svg new file mode 100644 index 00000000..eec4db8b --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.ttf b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.ttf new file mode 100644 index 00000000..b3290843 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.ttf differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.woff new file mode 100644 index 00000000..28d6adee Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-Semibold-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.eot b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.eot new file mode 100644 index 00000000..0ab1db22 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.eot differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.svg b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.svg new file mode 100644 index 00000000..7166ec1b --- /dev/null +++ b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.ttf b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.ttf new file mode 100644 index 00000000..d2d6318f Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.ttf differ diff --git a/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.woff b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.woff new file mode 100644 index 00000000..d4dfca40 Binary files /dev/null and b/docs/github-release-notes/0.17.0/fonts/OpenSans-SemiboldItalic-webfont.woff differ diff --git a/docs/github-release-notes/0.17.0/global.html b/docs/github-release-notes/0.17.0/global.html new file mode 100644 index 00000000..4fe6c6d9 --- /dev/null +++ b/docs/github-release-notes/0.17.0/global.html @@ -0,0 +1,2778 @@ + + + + + + Global - Documentation + + + + + + + + + + + + + + + + + +
+ +

Global

+ + + + + + + +
+ +
+ +

+ +

+ + +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +

Methods

+ + + +
+ + + +

cleanConfig(confirm)

+ + + + + +
+

Remove all the configuration files

+
+ + + + + +
+ + + + +
Since:
+
  • 0.13.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
confirm + + +Boolean + + + + +

Necessary to force the function.

+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

clearTasks(gren)

+ + + + + +
+

Clears all the tasks that are still running

+
+ + + + + +
+ + + + +
Since:
+
  • 0.6.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
gren + + +GithubReleaseNotes + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

convertStringToArray(arrayLike) → {Array}

+ + + + + +
+

Converts an array like string to an actual Array, +converting also underscores to spaces

+
+ + + + + +
+ + + + +
Since:
+
  • 0.6.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
arrayLike + + +string + + + + +

The string of items +e.g. +"wont_fix, duplicate, bug"

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array + + +
+
+ + +
+

The items with spaces instead of underscores.

+
+ + +
+ + + +
+ + +
+ + + +

dashToCamelCase(value) → {string}

+ + + + + +
+

Transforms a dasherize string into a camel case one.

+
+ + + + + +
+ + + + +
Since:
+
  • 0.3.2
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +string + + + + +

The dasherize string

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + +
+

The camel case string

+
+ + +
+ + + +
+ + +
+ + + +

formatDate(date) → {string}

+ + + + + +
+

Format a date into a string

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
date + + +Date + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) generate(placeholders, string) → {string}

+ + + + + +
+

Generate the templated string based on +a placeholders Object

+
+ + + + + +
+ + + + +
Since:
+
  • 0.6.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
placeholders + + +Object + + + + +

All the keys/values to update

+ +
string + + +string +| + +function + + + + +

The string or the function that needs to be replaced

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

getConfigFromFile(path) → {Object}

+ + + + + +
+

Get configuration from the one of the config files

+
+ + + + + +
+ + + + +
Since:
+
  • 0.6.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
path + + +string + + + + +

Path where to look for config files

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + +
+

The configuration from the first found file or empty object

+
+ + +
+ + + +
+ + +
+ + + +

getFileExtension(filename) → {string}

+ + + + + +
+

Return the extension of a filename

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
filename + + +string + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

(private) getFileNameFromPath(path) → {string}

+ + + + + +
+

Get the filename from a path

+
+ + + + + +
+ + + + +
Since:
+
  • 0.10.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
path + + +string + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + + +
+ + + +
+ + +
+ + + +

getFileTypes() → {Array}

+ + + + + +
+

Get the file types for the configuration

+
+ + + + + +
+ + + + +
Since:
+
  • 0.13.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Array + + +
+
+ + + +
+ + + +
+ + +
+ + + +

isInRange(value, min, max) → {Boolean}

+ + + + + +
+

Check if e value is between a min and a max

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +number + + + + + + +
min + + +number + + + + + + +
max + + +number + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

noop()

+ + + + + +
+

Just a noop function

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +

printTask(name)

+ + + + + +
+

Print a task name in a custom format

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + +

The name of the task

+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ + + +

requireConfig(filepath) → {Object|boolean}

+ + + + + +
+

Gets the content from a filepath a returns an object

+
+ + + + + +
+ + + + +
Since:
+
  • 0.6.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
filepath + + +string + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object +| + +boolean + + +
+
+ + + +
+ + + +
+ + +
+ + + +

sortObject(object) → {Object}

+ + + + + +
+

Sort an object by its keys

+
+ + + + + +
+ + + + +
Since:
+
  • 0.8.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
object + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +Object + + +
+
+ + + +
+ + + +
+ + +
+ + + +

task(taskName) → {function}

+ + + + + +
+

Outputs the task status

+
+ + + + + +
+ + + + +
Since:
+
  • 0.5.0
+ + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
taskName + + +string + + + + +

The task name

+ +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +function + + +
+
+ + +
+

The function to be fired when is loaded

+
+ + +
+ + + +
+ + +
+ + + +

writeConfigToFile(path, data) → {string}

+ + + + + +
+

Create the content for a configuratio file, based on extension and data

+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
path + + +string + + + + + + +
data + + +Object + + + + + + +
+ + + + + + + + + + + + + + +
+
Returns:
+ + + +
+
+ Type: +
+
+ +string + + +
+
+ + +
+

File content

+
+ + +
+ + + +
+ + + + + + +
+ +
+ + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/index.html b/docs/github-release-notes/0.17.0/index.html new file mode 100644 index 00000000..6330e059 --- /dev/null +++ b/docs/github-release-notes/0.17.0/index.html @@ -0,0 +1,216 @@ + + + + + + Home - Documentation + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+

Changelog

v0.14.1 (08/12/2017)

No changelog for this release.

+
+

v0.14.0 (08/12/2017)

Enhancements:

    +
  • #108 Create a silent mode
  • +
  • #83 Create module initialisation panel
  • +
+

Bug Fixes:

    +
  • #122 Fix git configuration from https
  • +
  • #119 Tags all takes a lot to exit the task
  • +
+
+

v0.13.1 (06/12/2017)

Bug Fixes:

    +
  • #110 Configuration file not used with "gren release", but works with "gren changelog"
  • +
+
+

v0.13.0 (26/10/2017)

Enhancements:

    +
  • #102 Create a better log
  • +
  • #96 Translate Promises to async, await
  • +
  • #93 Add Pull Requests as data-source option
  • +
  • #92 Ignore tags with a certain string
  • +
  • #84 Ignore commits with keywords
  • +
+

Bug Fixes:

    +
  • #109 Babel Runtime is missing
  • +
+
+

v0.12.1 (14/10/2017)

No changelog for this release.

+
+

v0.12.0 (14/10/2017)

Bug Fixes:

    +
  • #99 Use Babel transform runtime
  • +
  • #95 Extend limit option to include pagination
  • +
+
+

v0.11.0 (13/10/2017)

Enhancements:

    +
  • #69 Remove the releases limit
  • +
+

Bug Fixes:

    +
  • #69 Remove the releases limit
  • +
+
+

v0.10.1 (12/10/2017)

Bug Fixes:

    +
  • #90 Fix the token option
  • +
+
+

v0.10.0 (08/10/2017)

Enhancements:

    +
  • #81 Swap Grunt with Gulp
  • +
  • #80 gren --help quietly does stuff
  • +
  • #78 README doesn't explain what gren does
  • +
  • #72 Expanded options for commit template variables
  • +
  • #68 Migrate to ES2015
  • +
  • #66 Create a --help section
  • +
  • #37 Introduce unit test
  • +
+

Bug Fixes:

    +
  • #77 Check if there are no tags
  • +
+
+

v0.9.0 (17/05/2017)

Enhancements:

    +
  • #74 Support GitHub Enterprise
  • +
  • #67 Use milestones to create release notes
  • +
+
+

v0.8.1 (13/04/2017)

Bug Fixes:

    +
  • #70 Options don't get converted to camelCase from bash
  • +
+
+

v0.8.0 (11/04/2017)

Enhancements:

    +
  • #64 Get the options with an external npm tool
  • +
  • #61 Rework the Changelog generator function
  • +
  • #55 Create a group-by-label option
  • +
+
+

v0.7.2 (17/03/2017)

Bug Fixes:

    +
  • #59 Changelog action doesn't work in the grunt task
  • +
+
+

v0.7.1 (16/03/2017)

Bug Fixes:

    +
  • #57 Fix object-deep-assign bug
  • +
+
+

v0.7.0 (16/03/2017)

Enhancements:

    +
  • #53 Allow functions as template values
  • +
  • #50 Add GIF in readme.md file
  • +
  • #27 Add possibility to change date format
  • +
+
+

v0.3.3 (14/03/2017)

No changelog for this release.

+
+

v0.5.0 (14/03/2017)

Enhancements:

    +
  • #20 Specify which tag to build
  • +
  • #18 Create global version of the module
  • +
  • #16 Update the documentation
  • +
  • #14 Add the chance to override the latest release body
  • +
  • #13 Check the network
  • +
  • #11 Add tests
  • +
  • #10 Use the issues as data source
  • +
  • #9 Get the information from the local git config
  • +
  • #7 Add the possibility to create a CHANGELOG file
  • +
+

Bug Fixes:

    +
  • #15 Manage the scenario where there is only one tag
  • +
+
+

v0.6.1 (14/03/2017)

Enhancements:

    +
  • #39 Use different files type for configuration
  • +
+

Bug Fixes:

    +
  • #43 Error when there is only one tag
  • +
+
+

v0.6.2 (14/03/2017)

Bug Fixes:

    +
  • #45 Remove unused option user.name
  • +
+
+

v0.6.3 (14/03/2017)

Bug Fixes:

    +
  • #48 Fix multiple repo information
  • +
+
+

v0.4.0 (14/03/2017)

Enhancements:

    +
  • #5 Include various types of commit messages
  • +
+
+

v0.6.0 (14/03/2017)

Enhancements:

    +
  • #32 Unwrap github-api promises
  • +
  • #26 Use external config file
  • +
  • #23 Introduce templates for the issues
  • +
  • #19 Add an "ignore label" flag
  • +
  • #12 Add the chance to rebuild the history of release notes
  • +
+

Bug Fixes:

    +
  • #29 Remove escaping character on regex
  • +
  • #24 The changelog action doesn't compile latest release
  • +
+
+

v0.2.2 (10/03/2017)

No changelog for this release.

+
+

v0.3.0 (10/03/2017)

No changelog for this release.

+
+

v0.3.1 (10/03/2017)

No changelog for this release.

+
+

v0.3.2 (10/03/2017)

No changelog for this release.

+
+

v0.2.1 (26/09/2016)

No changelog for this release.

+
+

v0.2.0 (26/09/2016)

No changelog for this release.

+
+

v0.1.0 (12/11/2015)

No changelog for this release.

+
+ + + + + + +
+ +
+ +
+ Generated by JSDoc 3.5.5 on Sun Oct 14 2018 11:52:53 GMT+0100 (BST) using the Minami theme. +
+ + + + + \ No newline at end of file diff --git a/docs/github-release-notes/0.17.0/scripts/linenumber.js b/docs/github-release-notes/0.17.0/scripts/linenumber.js new file mode 100644 index 00000000..8d52f7ea --- /dev/null +++ b/docs/github-release-notes/0.17.0/scripts/linenumber.js @@ -0,0 +1,25 @@ +/*global document */ +(function() { + var source = document.getElementsByClassName('prettyprint source linenums'); + var i = 0; + var lineNumber = 0; + var lineId; + var lines; + var totalLines; + var anchorHash; + + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; + + for (; i < totalLines; i++) { + lineNumber++; + lineId = 'line' + lineNumber; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } + } + } +})(); diff --git a/docs/github-release-notes/0.17.0/scripts/prettify/Apache-License-2.0.txt b/docs/github-release-notes/0.17.0/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/docs/github-release-notes/0.17.0/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/github-release-notes/0.17.0/scripts/prettify/lang-css.js b/docs/github-release-notes/0.17.0/scripts/prettify/lang-css.js new file mode 100644 index 00000000..041e1f59 --- /dev/null +++ b/docs/github-release-notes/0.17.0/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/docs/github-release-notes/0.17.0/scripts/prettify/prettify.js b/docs/github-release-notes/0.17.0/scripts/prettify/prettify.js new file mode 100644 index 00000000..eef5ad7e --- /dev/null +++ b/docs/github-release-notes/0.17.0/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p code { + font-size: 0.85em; +} + +.readme table { + margin-bottom: 1em; + border-collapse: collapse; + border-spacing: 0; +} + +.readme table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.readme table th, +.readme table td { + padding: 6px 13px; + border: 1px solid #ddd; +} + +.readme table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +/** Nav **/ +nav { + float: left; + display: block; + width: 250px; + background: #fff; + overflow: auto; + position: fixed; + height: 100%; + padding: 10px; + border-right: 1px solid #eee; + /* box-shadow: 0 0 3px rgba(0,0,0,0.1); */ +} + +nav li { + list-style: none; + padding: 0; + margin: 0; +} + +.nav-heading { + margin-top: 10px; + font-weight: bold; +} + +.nav-heading a { + color: #888; + font-size: 14px; + display: inline-block; +} + +.nav-item-type { + /* margin-left: 5px; */ + width: 18px; + height: 18px; + display: inline-block; + text-align: center; + border-radius: 0.2em; + margin-right: 5px; + font-weight: bold; + line-height: 20px; + font-size: 13px; +} + +.type-function { + background: #B3E5FC; + color: #0288D1; +} + +.type-class { + background: #D1C4E9; + color: #4527A0; +} + +.type-member { + background: #C8E6C9; + color: #388E3C; +} + +.type-module { + background: #E1BEE7; + color: #7B1FA2; +} + + +/** Footer **/ +footer { + color: hsl(0, 0%, 28%); + margin-left: 250px; + display: block; + padding: 30px; + font-style: italic; + font-size: 90%; + border-top: 1px solid #eee; +} + +.ancestors { + color: #999 +} + +.ancestors a { + color: #999 !important; + text-decoration: none; +} + +.clear { + clear: both +} + +.important { + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px +} + +.type-signature { + color: #aaa +} + +.name, .signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace +} + +.details { + margin-top: 14px; + border-left: 2px solid #DDD; + line-height: 30px; +} + +.details dt { + width: 120px; + float: left; + padding-left: 10px; +} + +.details dd { + margin-left: 70px +} + +.details ul { + margin: 0 +} + +.details ul { + list-style-type: none +} + +.details li { + margin-left: 30px +} + +.details pre.prettyprint { + margin: 0 +} + +.details .object-value { + padding-top: 0 +} + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption { + font-style: italic; + font-size: 107%; + margin: 0; +} + +.prettyprint { + font-size: 13px; + border: 1px solid #ddd; + border-radius: 3px; + box-shadow: 0 1px 3px hsla(0, 0%, 0%, 0.05); + overflow: auto; +} + +.prettyprint.source { + width: inherit +} + +.prettyprint code { + font-size: 12px; + line-height: 18px; + display: block; + background-color: #fff; + color: #4D4E53; +} + +.prettyprint code:empty:before { + content: ''; +} + +.prettyprint > code { + padding: 15px +} + +.prettyprint .linenums code { + padding: 0 15px +} + +.prettyprint .linenums li:first-of-type code { + padding-top: 15px +} + +.prettyprint code span.line { + display: inline-block +} + +.prettyprint.linenums { + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol { + padding-left: 0 +} + +.prettyprint.linenums li { + border-left: 3px #ddd solid +} + +.prettyprint.linenums li.selected, .prettyprint.linenums li.selected * { + background-color: lightyellow +} + +.prettyprint.linenums li * { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params, .props { + border-spacing: 0; + border: 1px solid #ddd; + border-collapse: collapse; + border-radius: 3px; + box-shadow: 0 1px 3px rgba(0,0,0,0.1); + width: 100%; + font-size: 14px; + /* margin-left: 15px; */ +} + +.params .name, .props .name, .name code { + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td, .params th, .props td, .props th { + margin: 0px; + text-align: left; + vertical-align: top; + padding: 10px; + display: table-cell; +} + +.params td { + border-top: 1px solid #eee +} + +.params thead tr, .props thead tr { + background-color: #fff; + font-weight: bold; +} + +.params .params thead tr, .props .props thead tr { + background-color: #fff; + font-weight: bold; +} + +.params td.description > p:first-child, .props td.description > p:first-child { + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, .props td.description > p:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +dl.param-type { + /* border-bottom: 1px solid hsl(0, 0%, 87%); */ + margin: 0; + padding: 0; + font-size: 16px; +} + +.param-type dt, .param-type dd { + display: inline-block +} + +.param-type dd { + font-family: Consolas, Monaco, 'Andale Mono', monospace; + display: inline-block; + padding: 0; + margin: 0; + font-size: 14px; +} + +.disabled { + color: #454545 +} + +/* navicon button */ +.navicon-button { + display: none; + position: relative; + padding: 2.0625rem 1.5rem; + transition: 0.25s; + cursor: pointer; + user-select: none; + opacity: .8; +} +.navicon-button .navicon:before, .navicon-button .navicon:after { + transition: 0.25s; +} +.navicon-button:hover { + transition: 0.5s; + opacity: 1; +} +.navicon-button:hover .navicon:before, .navicon-button:hover .navicon:after { + transition: 0.25s; +} +.navicon-button:hover .navicon:before { + top: .825rem; +} +.navicon-button:hover .navicon:after { + top: -.825rem; +} + +/* navicon */ +.navicon { + position: relative; + width: 2.5em; + height: .3125rem; + background: #000; + transition: 0.3s; + border-radius: 2.5rem; +} +.navicon:before, .navicon:after { + display: block; + content: ""; + height: .3125rem; + width: 2.5rem; + background: #000; + position: absolute; + z-index: -1; + transition: 0.3s 0.25s; + border-radius: 1rem; +} +.navicon:before { + top: .625rem; +} +.navicon:after { + top: -.625rem; +} + +/* open */ +.nav-trigger:checked + label:not(.steps) .navicon:before, +.nav-trigger:checked + label:not(.steps) .navicon:after { + top: 0 !important; +} + +.nav-trigger:checked + label .navicon:before, +.nav-trigger:checked + label .navicon:after { + transition: 0.5s; +} + +/* Minus */ +.nav-trigger:checked + label { + transform: scale(0.75); +} + +/* × and + */ +.nav-trigger:checked + label.plus .navicon, +.nav-trigger:checked + label.x .navicon { + background: transparent; +} + +.nav-trigger:checked + label.plus .navicon:before, +.nav-trigger:checked + label.x .navicon:before { + transform: rotate(-45deg); + background: #FFF; +} + +.nav-trigger:checked + label.plus .navicon:after, +.nav-trigger:checked + label.x .navicon:after { + transform: rotate(45deg); + background: #FFF; +} + +.nav-trigger:checked + label.plus { + transform: scale(0.75) rotate(45deg); +} + +.nav-trigger:checked ~ nav { + left: 0 !important; +} + +.nav-trigger:checked ~ .overlay { + display: block; +} + +.nav-trigger { + position: fixed; + top: 0; + clip: rect(0, 0, 0, 0); +} + +.overlay { + display: none; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + background: hsla(0, 0%, 0%, 0.5); + z-index: 1; +} + +.section-method { + margin-bottom: 30px; + padding-bottom: 30px; + border-bottom: 1px solid #eee; +} + +@media only screen and (min-width: 320px) and (max-width: 680px) { + body { + overflow-x: hidden; + } + + nav { + background: #FFF; + width: 250px; + height: 100%; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: -250px; + z-index: 3; + padding: 0 10px; + transition: left 0.2s; + } + + .navicon-button { + display: inline-block; + position: fixed; + top: 1.5em; + right: 0; + z-index: 2; + } + + #main { + width: 100%; + min-width: 360px; + } + + #main h1.page-title { + margin: 1em 0; + } + + #main section { + padding: 0; + } + + footer { + margin-left: 0; + } +} + +@media only print { + nav { + display: none; + } + + #main { + float: none; + width: 100%; + } +} diff --git a/docs/github-release-notes/0.17.0/styles/prettify-jsdoc.css b/docs/github-release-notes/0.17.0/styles/prettify-jsdoc.css new file mode 100644 index 00000000..834a866d --- /dev/null +++ b/docs/github-release-notes/0.17.0/styles/prettify-jsdoc.css @@ -0,0 +1,111 @@ +/* JSDoc prettify.js theme */ + +/* plain text */ +.pln { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* string content */ +.str { + color: hsl(104, 100%, 24%); + font-weight: normal; + font-style: normal; +} + +/* a keyword */ +.kwd { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a comment */ +.com { + font-weight: normal; + font-style: italic; +} + +/* a type name */ +.typ { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a literal value */ +.lit { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* punctuation */ +.pun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp open bracket */ +.opn { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp close bracket */ +.clo { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a markup tag name */ +.tag { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute name */ +.atn { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute value */ +.atv { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a declaration */ +.dec { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a variable name */ +.var { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a function name */ +.fun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} diff --git a/docs/github-release-notes/0.17.0/styles/prettify-tomorrow.css b/docs/github-release-notes/0.17.0/styles/prettify-tomorrow.css new file mode 100644 index 00000000..81e74d13 --- /dev/null +++ b/docs/github-release-notes/0.17.0/styles/prettify-tomorrow.css @@ -0,0 +1,132 @@ +/* Tomorrow Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #4d4d4c; } + +@media screen { + /* string content */ + .str { + color: hsl(104, 100%, 24%); } + + /* a keyword */ + .kwd { + color: hsl(240, 100%, 50%); } + + /* a comment */ + .com { + color: hsl(0, 0%, 60%); } + + /* a type name */ + .typ { + color: hsl(240, 100%, 32%); } + + /* a literal value */ + .lit { + color: hsl(240, 100%, 40%); } + + /* punctuation */ + .pun { + color: #000000; } + + /* lisp open bracket */ + .opn { + color: #000000; } + + /* lisp close bracket */ + .clo { + color: #000000; } + + /* a markup tag name */ + .tag { + color: #c82829; } + + /* a markup attribute name */ + .atn { + color: #f5871f; } + + /* a markup attribute value */ + .atv { + color: #3e999f; } + + /* a declaration */ + .dec { + color: #f5871f; } + + /* a variable name */ + .var { + color: #c82829; } + + /* a function name */ + .fun { + color: #4271ae; } } +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #060; } + + .kwd { + color: #006; + font-weight: bold; } + + .com { + color: #600; + font-style: italic; } + + .typ { + color: #404; + font-weight: bold; } + + .lit { + color: #044; } + + .pun, .opn, .clo { + color: #440; } + + .tag { + color: #006; + font-weight: bold; } + + .atn { + color: #404; } + + .atv { + color: #060; } } +/* Style */ +/* +pre.prettyprint { + background: white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 12px; + line-height: 1.5; + border: 1px solid #ccc; + padding: 10px; } +*/ + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; } + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L4, +li.L5, +li.L6, +li.L7, +li.L8, +li.L9 { + /* */ } + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + /* */ } diff --git a/package.json b/package.json index 08be2812..21a4317a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-release-notes", - "version": "0.15.0", + "version": "0.17.0", "description": "Create a release from a tag and uses issues or commits to creating the release notes. It also can generate a CHANGELOG.md file based on the release notes (or generate a brand new).", "main": "./github-release-notes.js", "scripts": {