Skip to content

Commit

Permalink
Add --latest-version option
Browse files Browse the repository at this point in the history
Closes #17
  • Loading branch information
cookpete committed Dec 21, 2017
1 parent 7d99456 commit 89ab994
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 13 deletions.
19 changes: 10 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,16 @@ Usage: auto-changelog [options]

Options:

-o, --output [file] # output file, default: CHANGELOG.md
-t, --template [template] # specify template to use [compact, keepachangelog, json], default: compact
-r, --remote [remote] # specify git remote to use for links, default: origin
-p, --package # use version from package.json as latest release
-u, --unreleased # include section for unreleased changes
-l, --commit-limit [count] # number of commits to display per release, default: 3
-i, --issue-url [url] # override url for issues, use {id} for issue id
-V, --version # output the version number
-h, --help # output usage information
-o, --output [file] # output file, default: CHANGELOG.md
-t, --template [template] # specify template to use [compact, keepachangelog, json], default: compact
-r, --remote [remote] # specify git remote to use for links, default: origin
-p, --package # use version from package.json as latest release
-v, --latest-version [version] # use specified version as latest release
-u, --unreleased # include section for unreleased changes
-l, --commit-limit [count] # number of commits to display per release, default: 3
-i, --issue-url [url] # override url for issues, use {id} for issue id
-V, --version # output the version number
-h, --help # output usage information


# Write log to CHANGELOG.md in current directory
Expand Down
4 changes: 2 additions & 2 deletions src/releases.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { niceDate } from './utils'

const MERGE_COMMIT_PATTERN = /^Merge (remote-tracking )?branch '.+'/

export function parseReleases (commits, origin, packageVersion, options) {
let release = newRelease(packageVersion)
export function parseReleases (commits, origin, latestVersion, options) {
let release = newRelease(latestVersion)
const releases = []
for (let commit of commits) {
if (commit.tag && semver.valid(commit.tag)) {
Expand Down
19 changes: 17 additions & 2 deletions src/run.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Command } from 'commander'
import { readJson, writeFile, pathExists } from 'fs-extra'
import semver from 'semver'

import { version } from '../package.json'
import { fetchOrigin } from './origin'
Expand All @@ -21,6 +22,7 @@ function getOptions (argv, pkg) {
.option('-t, --template [template]', `specify template to use [compact, keepachangelog, json], default: ${DEFAULT_TEMPLATE}`, DEFAULT_TEMPLATE)
.option('-r, --remote [remote]', `specify git remote to use for links, default: ${DEFAULT_REMOTE}`, DEFAULT_REMOTE)
.option('-p, --package', 'use version from package.json as latest release')
.option('-v, --latest-version [version]', 'use specified version as latest release')
.option('-u, --unreleased', 'include section for unreleased changes')
.option('-l, --commit-limit [count]', `number of commits to display per release, default: ${DEFAULT_COMMIT_LIMIT}`, parseLimit, DEFAULT_COMMIT_LIMIT)
.option('-i, --issue-url [url]', `override url for issues, use {id} for issue id`)
Expand All @@ -39,13 +41,26 @@ function getOptions (argv, pkg) {
}
}

function getLatestVersion (options, pkg) {
if (options.latestVersion) {
if (!semver.valid(options.latestVersion)) {
throw Error('--latest-version must be a valid semver version')
}
return options.latestVersion
}
if (options.package) {
return NPM_VERSION_TAG_PREFIX + pkg.version
}
return null
}

export default async function run (argv) {
const pkg = await pathExists('package.json') && await readJson('package.json')
const options = getOptions(argv, pkg)
const origin = await fetchOrigin(options.remote)
const commits = await fetchCommits(origin, options)
const packageVersion = options.package ? NPM_VERSION_TAG_PREFIX + pkg.version : null
const releases = parseReleases(commits, origin, packageVersion, options)
const latestVersion = getLatestVersion(options, pkg)
const releases = parseReleases(commits, origin, latestVersion, options)
const log = await compileTemplate(options.template, { releases })
await writeFile(options.output, log)
return `${Buffer.byteLength(log, 'utf8')} bytes written to ${options.output}`
Expand Down

0 comments on commit 89ab994

Please sign in to comment.