README.md
# 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).