diff --git a/packages/grafana-toolkit/CHANGELOG.md b/packages/grafana-toolkit/CHANGELOG.md index e69de29bb2d..9574c5442c4 100644 --- a/packages/grafana-toolkit/CHANGELOG.md +++ b/packages/grafana-toolkit/CHANGELOG.md @@ -0,0 +1,4 @@ +# 6.4.0 (unreleased) + +# 6.4.0-beta1 (2019-09-17) +First release, see [Readme](https://github.com/grafana/grafana/blob/v6.4.0-beta1/packages/grafana-toolkit/README.md) for details. diff --git a/packages/grafana-toolkit/src/cli/index.ts b/packages/grafana-toolkit/src/cli/index.ts index 9500d296757..03d87ccdbec 100644 --- a/packages/grafana-toolkit/src/cli/index.ts +++ b/packages/grafana-toolkit/src/cli/index.ts @@ -62,6 +62,7 @@ export const run = (includeInternalScripts = false) => { await execTask(changelogTask)({ milestone: cmd.milestone, + silent: true, }); }); diff --git a/packages/grafana-toolkit/src/cli/tasks/changelog.ts b/packages/grafana-toolkit/src/cli/tasks/changelog.ts index 36649d8e718..822381aa261 100644 --- a/packages/grafana-toolkit/src/cli/tasks/changelog.ts +++ b/packages/grafana-toolkit/src/cli/tasks/changelog.ts @@ -2,67 +2,84 @@ import * as _ from 'lodash'; import { Task, TaskRunner } from './task'; import GithubClient from '../utils/githubClient'; +import difference from 'lodash/difference'; +import chalk from 'chalk'; +import { useSpinner } from '../utils/useSpinner'; interface ChangelogOptions { milestone: string; } -const changelogTaskRunner: TaskRunner = async ({ milestone }) => { - const githubClient = new GithubClient(); - const client = githubClient.client; - - if (!/^\d+$/.test(milestone)) { - console.log('Use milestone number not title, find number in milestone url'); - return; +const filterBugs = (item: any) => { + if (item.title.match(/fix|fixes/i)) { + return true; } + if (item.labels.find((label: any) => label.name === 'type/bug')) { + return true; + } + return false; +}; - const res = await client.get('/issues', { - params: { - state: 'closed', - per_page: 100, - labels: 'add to changelog', - milestone: milestone, - }, - }); - - const issues = res.data; - - const bugs = _.sortBy( - issues.filter((item: any) => { - if (item.title.match(/fix|fixes/i)) { - return true; - } - if (item.labels.find((label: any) => label.name === 'type/bug')) { - return true; - } - return false; - }), - 'title' - ); - - const notBugs = _.sortBy(issues.filter((item: any) => !bugs.find((bug: any) => bug === item)), 'title'); +const getPackageChangelog = (packageName: string, issues: any[]) => { + if (issues.length === 0) { + return ''; + } - let markdown = ''; + let markdown = chalk.bold.yellow(`\n\n/*** ${packageName} changelog ***/\n\n`); + const bugs = _.sortBy(issues.filter(filterBugs), 'title'); + const notBugs = _.sortBy(difference(issues, bugs), 'title'); if (notBugs.length > 0) { - markdown = '### Features / Enhancements\n'; - } - - for (const item of notBugs) { - markdown += getMarkdownLineForIssue(item); + markdown += '### Features / Enhancements\n'; + for (const item of notBugs) { + markdown += getMarkdownLineForIssue(item); + } } if (bugs.length > 0) { markdown += '\n### Bug Fixes\n'; + for (const item of bugs) { + markdown += getMarkdownLineForIssue(item); + } } - for (const item of bugs) { - markdown += getMarkdownLineForIssue(item); - } - - console.log(markdown); + return markdown; }; +const changelogTaskRunner: TaskRunner = useSpinner( + 'Generating changelog', + async ({ milestone }) => { + const githubClient = new GithubClient(); + const client = githubClient.client; + + if (!/^\d+$/.test(milestone)) { + console.log('Use milestone number not title, find number in milestone url'); + return; + } + + const res = await client.get('/issues', { + params: { + state: 'closed', + per_page: 100, + labels: 'add to changelog', + milestone: milestone, + }, + }); + + const issues = res.data; + const toolkitIssues = issues.filter((item: any) => + item.labels.find((label: any) => label.name === 'area/grafana/toolkit') + ); + + let markdown = ''; + + markdown += getPackageChangelog('Grafana', issues); + markdown += getPackageChangelog('grafana-toolkit', toolkitIssues); + + console.log(markdown); + } +); + function getMarkdownLineForIssue(item: any) { const githubGrafanaUrl = 'https://github.com/grafana/grafana'; let markdown = '';