Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: reformat changelog output #27

Merged
merged 4 commits into from
Apr 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/cuddly-carrots-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@mheob/changeset-changelog': major
---

reformat the changelog output to displzy first the PR and user
1 change: 1 addition & 0 deletions .commitlintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ module.exports = {
...defaultConfig,
prompt: {
...defaultConfig.prompt,
allowEmptyScopes: true,
},
};
13 changes: 9 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
# `@mheob/changeset-changelog`

[![Release](https://github.com/mheob/changeset-changelog/actions/workflows/release.yml/badge.svg)](https://github.com/mheob/changeset-changelog/actions/workflows/release.yml) [![Check](https://github.com/mheob/changeset-changelog/actions/workflows/check.yml/badge.svg)](https://github.com/mheob/changeset-changelog/actions/workflows/check.yml) [![codecov](https://codecov.io/gh/mheob/changeset-changelog/branch/main/graph/badge.svg?token=E7RZLWHMEX)](https://codecov.io/gh/mheob/changeset-changelog)
[![Release](https://github.com/mheob/changeset-changelog/actions/workflows/release.yml/badge.svg)](https://github.com/mheob/changeset-changelog/actions/workflows/release.yml)
[![Check](https://github.com/mheob/changeset-changelog/actions/workflows/check.yml/badge.svg)](https://github.com/mheob/changeset-changelog/actions/workflows/check.yml)
[![codecov](https://codecov.io/gh/mheob/changeset-changelog/branch/main/graph/badge.svg?token=E7RZLWHMEX)](https://codecov.io/gh/mheob/changeset-changelog)

Add my own style for the changelogs generated by the awesome [changesets](https://github.com/changesets/changesets) library. The style was inspired by the original [@changesets/changelog-github](https://github.com/changesets/changesets/tree/main/packages/changelog-github) and the [@svitejs/changesets-changelog-github-compact](https://github.com/svitejs/changesets-changelog-github-compact) packages.
Add my own style for the changelogs generated by the awesome [changesets](https://github.com/changesets/changesets) library. The
style was inspired by the original
[@changesets/changelog-github](https://github.com/changesets/changesets/tree/main/packages/changelog-github) and the
[@svitejs/changesets-changelog-github-compact](https://github.com/svitejs/changesets-changelog-github-compact) packages.

## Installation

Expand Down Expand Up @@ -54,8 +59,8 @@ There are differences between this changelog output and the others:

<!-- markdownlint-enable MD024 -->

- Add nice feature to the project with a PR and commit --> ([#PR](#)) by [@user](#)
- Add nice feature to the project without a PR --> ([commit](#)) by [@user](#)
- [PR](#) ([@user](#)): Add nice feature to the project with a PR and commit
- [commit](#) ([@user](#)): Add nice feature to the project without a PR

## Additional feature: linking issues

Expand Down
5 changes: 1 addition & 4 deletions src/getDependencyReleaseLine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ import type { GetDependencyReleaseLine, NewChangesetWithCommit } from '@changese

import { errorMessage } from './utils';

async function getDependencyReleaseLinks(
changesets: NewChangesetWithCommit[],
repository: string,
): Promise<string> {
async function getDependencyReleaseLinks(changesets: NewChangesetWithCommit[], repository: string) {
const changesetLinks = await Promise.all(
changesets.map(async (cs) => {
// istanbul ignore next: because of our mocked get-github-info -- @preserve
Expand Down
19 changes: 9 additions & 10 deletions src/getReleaseLine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ async function getGitHubLinks(
commit?: string,
commitFromSummary?: string,
prFromSummary?: number,
): Promise<GithubLinks> {
) {
let githubLinks: GithubLinks = { commit: undefined, pull: undefined, user: undefined };

if (prFromSummary) {
Expand Down Expand Up @@ -82,7 +82,7 @@ async function getGitHubLinks(
return githubLinks;
}

function getUserLink(usersFromSummary: string[], user?: string): string | undefined {
function getUserLink(usersFromSummary: string[], user?: string) {
const userLink =
usersFromSummary.length > 0
? usersFromSummary
Expand All @@ -91,12 +91,12 @@ function getUserLink(usersFromSummary: string[], user?: string): string | undefi
.trim()
: user;

return userLink ? `by ${userLink}` : undefined;
return userLink ? `(${userLink})` : '';
}

// add links to issue hints (fix #123) => (fix [#123](https://....))
// thanks to https://github.com/svitejs/changesets-changelog-github-compact
function linkifyIssue(line: string, repository: string): string {
function linkifyIssue(line: string, repository: string) {
return line.replace(/(?<=\( ?(?:fix|fixes|resolves|see) )(#\d+)(?= ?\))/g, (issue) => {
return `[${issue}](https://github.com/${repository}/issues/${issue.slice(1)})`;
});
Expand All @@ -118,14 +118,13 @@ export const getReleaseLine: GetReleaseLine = async (changeset, _type, options)
.split('\n')
.map((line) => linkifyIssue(line.trimEnd(), options['repo']));

const prMessage = pull ? `(${pull})` : '';
const commitMessage = commit ? `(${commit})` : '';
const userLinkMessage = userLink ?? '';
const prMessage = pull ? `${pull}` : '';
const commitMessage = commit ? `${commit}` : '';
// istanbul ignore next: because of our mocked get-github-info -- @preserve
const printPrOrCommit = pull !== '' ? prMessage : commitMessage;
const suffix = printPrOrCommit.trim() ? ` --> ${printPrOrCommit.trim()} ${userLinkMessage}` : '';
const printPrOrCommit = (pull !== '' ? prMessage : commitMessage).trim();
const prefix = printPrOrCommit ? `${printPrOrCommit} ${userLink}: ` : '';

const futureLinesMessage = futureLines.map((line) => ` ${line}`).join('\n');

return `\n\n- ${firstLine}${suffix}\n${futureLinesMessage}`;
return `\n\n- ${prefix}${firstLine}\n${futureLinesMessage}`;
};
6 changes: 3 additions & 3 deletions src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,23 +112,23 @@ describe('getReplacedChangelog', () => {
);
const result = await getReleaseLine(changeset, 'minor', { repo: data.repo });
expect(result).toBe(
'\n\n- An awesome feature. --> ([#2](https://github.com/mheob/changeset-changelog/pull/2)) by [@mheob](https://github.com/mheob)\n',
'\n\n- [#2](https://github.com/mheob/changeset-changelog/pull/2) ([@mheob](https://github.com/mheob)): An awesome feature.\n',
);
});

it('should return the changelog in a string format with data from commit', async () => {
const changeset = getChangeset('An awesome feature.', data.commit);
const result = await getReleaseLine(changeset, 'minor', { repo: data.repo });
expect(result).toBe(
'\n\n- An awesome feature. --> ([#2](https://github.com/mheob/changeset-changelog/pull/2)) by [@mheob](https://github.com/mheob)\n',
'\n\n- [#2](https://github.com/mheob/changeset-changelog/pull/2) ([@mheob](https://github.com/mheob)): An awesome feature.\n',
);
});

it('should return the changelog in a string format with data from commit', async () => {
const changeset = getChangeset('An awesome feature, (resolves #9)', data.commit);
const result = await getReleaseLine(changeset, 'minor', { repo: data.repo });
expect(result).toBe(
'\n\n- An awesome feature, (resolves [#9](https://github.com/mheob/changeset-changelog/issues/9)) --> ([#2](https://github.com/mheob/changeset-changelog/pull/2)) by [@mheob](https://github.com/mheob)\n',
'\n\n- [#2](https://github.com/mheob/changeset-changelog/pull/2) ([@mheob](https://github.com/mheob)): An awesome feature, (resolves [#9](https://github.com/mheob/changeset-changelog/issues/9))\n',
);
});

Expand Down