Compare commits
No commits in common. "2e9d0d4b66a0530769c58e4204569d7d5dbb72e8" and "d826b4191dcad554bd84b4209912323fc96362da" have entirely different histories.
2e9d0d4b66
...
d826b4191d
@ -13,8 +13,6 @@ releases:
|
||||
- type: feat
|
||||
desc: cutting a release also add a new NEXT release
|
||||
commit: 167f631d1fe4eadba3ed5fdadbe378b8255d4ad2
|
||||
- type: feat
|
||||
desc: git-gather also filters on descs
|
||||
- version: 0.1.0
|
||||
changes:
|
||||
- port the core of the Perl changelord to JavaScript.
|
||||
|
@ -102,7 +102,7 @@ Git messages are compared to the regular expression
|
||||
configured at `project.commit_regex`. If none is found, it
|
||||
defaults to
|
||||
|
||||
^(?<type>[^: ]+):\s*(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$
|
||||
^(?<type>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$
|
||||
|
||||
The regular expression must capture a `desc` field, and may
|
||||
capture a `type` and `ticket` as well.
|
||||
|
@ -8,7 +8,6 @@ import fs from "fs-extra";
|
||||
import consola from "consola";
|
||||
import u from "@yanick/updeep-remeda";
|
||||
import { once } from "remeda";
|
||||
import simpleGit from "simple-git";
|
||||
|
||||
import print from "./command/print.js";
|
||||
import init from "./command/init.js";
|
||||
@ -23,7 +22,6 @@ consola.raw = (...args) => console.log(...args);
|
||||
|
||||
yargs(hideBin(process.argv))
|
||||
.middleware((config) => {
|
||||
config.git = once(simpleGit);
|
||||
config.consola = consola;
|
||||
config.changelog = once(() =>
|
||||
fs.readFile(config.source, "utf-8").then(yaml.parse)
|
||||
|
@ -2,54 +2,50 @@ import simpleGit from "simple-git";
|
||||
import { prop, compact, pickBy } from "remeda";
|
||||
|
||||
const handler = async (config) => {
|
||||
const next = await config.next_release();
|
||||
const seen_sha1s = compact(next?.changes.map(prop("commit")));
|
||||
const seen_descs = next?.changes.map((change) =>
|
||||
typeof change === "string" ? change : change.desc
|
||||
);
|
||||
const next = await config.next_release();
|
||||
const seen_sha1s = compact(next?.changes.map(prop("commit")));
|
||||
|
||||
const git = config.git();
|
||||
const git = simpleGit();
|
||||
|
||||
const { version } = await config.latest_version();
|
||||
const { version } = await config.latest_version();
|
||||
|
||||
let { all: commits } = await git.log({
|
||||
from: "v" + version,
|
||||
});
|
||||
let { all: commits } = await git.log({
|
||||
from: "v" + version,
|
||||
});
|
||||
|
||||
config.consola.start(`gathering changes since v${version}`);
|
||||
config.consola.start(`gathering changes since v${version}`);
|
||||
|
||||
commits = commits.filter(({ hash }) => !seen_sha1s.includes(hash));
|
||||
commits = commits.filter(({ hash }) => !seen_sha1s.includes(hash));
|
||||
|
||||
const regex = new RegExp(
|
||||
(await config.changelog().project?.commit_regex) ??
|
||||
/^(?<type>[^: ]+):\s*(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$/
|
||||
);
|
||||
|
||||
const changes = commits
|
||||
.map((commit) => [commit, commit.message.match(regex)])
|
||||
.filter((x) => x[1])
|
||||
.filter((x) => !seen_descs.includes(x[1].groups.desc))
|
||||
.map(([commit, res]) =>
|
||||
pickBy({ ...res.groups, commit: commit.hash }, (x) => x)
|
||||
const regex = new RegExp(
|
||||
(await config.changelog().project?.commit_regex) ??
|
||||
/^(?<type>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$/
|
||||
);
|
||||
|
||||
if (changes.length === 0) {
|
||||
config.consola.success("no changes detected");
|
||||
return;
|
||||
}
|
||||
const changes = commits
|
||||
.map((commit) => [commit, commit.message.match(regex)])
|
||||
.filter((x) => x[1])
|
||||
.map(([commit, res]) =>
|
||||
pickBy({ ...res.groups, commit: commit.hash }, (x) => x)
|
||||
);
|
||||
|
||||
for (const change of changes) {
|
||||
config.consola.info(`${change.type}: ${change.desc}`);
|
||||
config.add_to_next(change);
|
||||
}
|
||||
config.consola.success("done");
|
||||
if (changes.length === 0) {
|
||||
config.consola.success("no changes detected");
|
||||
return;
|
||||
}
|
||||
|
||||
for (const change of changes) {
|
||||
config.consola.info(`${change.type}: ${change.desc}`);
|
||||
config.add_to_next(change);
|
||||
}
|
||||
config.consola.success("done");
|
||||
};
|
||||
|
||||
export default {
|
||||
command: "git-gather",
|
||||
desc: "gather change entries from git commits",
|
||||
builder: (yargs) => {
|
||||
yargs;
|
||||
},
|
||||
handler,
|
||||
command: "git-gather",
|
||||
desc: "gather change entries from git commits",
|
||||
builder: (yargs) => {
|
||||
yargs;
|
||||
},
|
||||
handler,
|
||||
};
|
||||
|
@ -1,28 +0,0 @@
|
||||
import { test, expect, vi } from "vitest";
|
||||
import gather from "./git-gather.js";
|
||||
|
||||
test("no changes detected", async () => {
|
||||
const changelog = {
|
||||
releases: [{ version: "NEXT", changes: [] }, { version: "1.0.0" }],
|
||||
};
|
||||
|
||||
const noop = () => {};
|
||||
const config = {
|
||||
consola: {
|
||||
start: noop,
|
||||
success: vi.fn(),
|
||||
},
|
||||
changelog: () => changelog,
|
||||
next_release: () => ({
|
||||
changes: [],
|
||||
}),
|
||||
latest_version: () => ({ version: "1.2.3" }),
|
||||
git: () => ({
|
||||
log: () => ({ all: [] }),
|
||||
}),
|
||||
};
|
||||
|
||||
await gather.handler(config);
|
||||
|
||||
expect(config.consola.success).toHaveBeenCalledWith("no changes detected");
|
||||
});
|
Loading…
Reference in New Issue
Block a user