README.md

Summary

Maintainability
Test Coverage
# PR Log

[![Gem Version](https://badge.fury.io/rb/pr_log.svg)](http://badge.fury.io/rb/pr_log)
[![Dependency Status](https://gemnasium.com/tf/pr_log.svg)](https://gemnasium.com/tf/pr_log)
[![Build Status](https://travis-ci.org/tf/pr_log.svg?branch=master)](https://travis-ci.org/tf/pr_log)
[![Test Coverage](https://codeclimate.com/github/tf/pr_log/badges/coverage.svg)](https://codeclimate.com/github/tf/pr_log)
[![Code Climate](https://codeclimate.com/github/tf/pr_log/badges/gpa.svg)](https://codeclimate.com/github/tf/pr_log)

Turn GitHub pull requests into changelog entries.

## Assumptions

**Changelogs should be written for humans by humans**

PrLog does not try to auto generate a complete changelog. Instead, it
pulls GitHub data to prefill your changelog as a baseline for manual
editing. Add prose, order items by priority, insert headers.

**Merged pull requests fully describe project history**

PrLog ignores GitHub issues. If a pull request fixes an
important issue it can reference it in its title or description.

**Pull requests are tagged with version milestones**

PrLog expects pull requests to be assigned to version milestones like
`v1.1`. This ensures consistency with the issue tracker and helps
limit GitHub API requests to relevant data.

**Changelogs are written in Markdown**

Markdown is the de facto standard for formatting files to be
displayed on GitHub.

## Installation

Install the command line tool:

    $ gem install pr_log

Generate a
[personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/)
and place it in a `.pr_log.yml` file in your home directory:

    # ~/.pr_log.yml
    access_token: "xxx"

## Usage

To insert items for new pull requests with milestone `v.1.2` into your
`CHANGELOG.md` file run:

    $ prlog fetch --github-repository some/repository --milestone v1.2

By default, this creates entries of the form:

    - Title of the pull request
      ([#100](https://github.com/some/repository/pull/100)))

If a pull request URL is already mentioned in the changelog, no entry
will be created.

### Convention over Configuration

The `fetch` command can also be invoked without command line options:

    $ prlog fetch

PrLog tries to derive defaults from gemspec information:

- If the `homepage` attribute mentions the URL of the github
  repository, it is used to determine the github repository name.
- PrLog constructs a milestone name of the form `v%{major}.%{minor}`
  from the current gem version.

### Configuration

To override PrLog's default configuration you can either pass command
line options or place a `.pr_log.yml` file inside your project's root
or your home directory:

    # .pr_log.yml
    changelog_file: "HISTORY.md"

The following configuration options are available:

- `access_token`: Personal access token to use for GitHub API
  requests.

- `changelog_file`: Relative path to the changelog file.

- `entry_template`: Template string used for new changelog
  entries. All fields from the
  [issue search response](https://developer.github.com/v3/search/#search-issues)
  can be used as interpolations.
  Default value: `- %{title} ([#%{number}](%{html_url}))`. Use `.` for nested fields (e.g. `%{user.login}`).

- `github_repository`: Name of the GitHub repository of the form
  `user/repository`.

- `insert_after`: Regular expression or string matching the line
  inside the changelog after which new items shall be inserted.

- `label_prefixes`: A hash mapping GitHub label names to title
  prefixes for changelog entries. See below for details.

- `milestone`: Name of the milestone filter fetched pull requests by.

- `milestone_format`: Template string used to derive a milestone name
  from the current gem version. The strings `%{major}`, `%{minor}` and
  `%{patch}` are replaces with the corresponding numeric component of
  the current version. Default value: `v%{major}.%{minor}`.

### Label Prefixes

Items for pull requests with certain labels can be prefixed with a
string automatically. To add a "Bug fix:" prefix to all pull requests
with the label `bug`, add the following lines to your configuration file:

    # pr_log.yml
    label_prefixes:
      bug: "Bug fix:"

## Development

After checking out the repo, run `bin/setup` to install
dependencies. You can also run `bin/console` for an interactive prompt
that will allow you to experiment.
You can then use `rake install` to install the gem locally.

### Running the Test Suite

Ensure the environment variable `PR_LOG_FIXTURE_OAUTH_TOKEN` is set to
a valid GitHub access token. Then run `bin/rspec`. The test suite uses
[VCR](https://github.com/vcr/vcr) to record and replay requests to the
GitHub API. Fixture data used by the test suite comes from the
[tf/pr_log_test_fixture](https://github.com/tf/pr_log_test_fixture)
repository.

## Contributing

Bug reports and pull requests are welcome on GitHub at
https://github.com/tf/pr_log. This project is intended to be a safe,
welcoming space for collaboration, and contributors are expected to
adhere to the [Contributor Covenant](http://contributor-covenant.org)
code of conduct.

## License

The gem is available as open source under the terms of the
[MIT License](http://opensource.org/licenses/MIT).