commit
2e9d0d4b66
@ -13,6 +13,8 @@ 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>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$
|
||||
^(?<type>[^: ]+):\s*(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$
|
||||
|
||||
The regular expression must capture a `desc` field, and may
|
||||
capture a `type` and `ticket` as well.
|
||||
|
@ -8,6 +8,7 @@ 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";
|
||||
@ -22,6 +23,7 @@ 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)
|
||||
|
@ -4,8 +4,11 @@ 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 git = simpleGit();
|
||||
const git = config.git();
|
||||
|
||||
const { version } = await config.latest_version();
|
||||
|
||||
@ -19,12 +22,13 @@ const handler = async (config) => {
|
||||
|
||||
const regex = new RegExp(
|
||||
(await config.changelog().project?.commit_regex) ??
|
||||
/^(?<type>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$/
|
||||
/^(?<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)
|
||||
);
|
||||
|
28
src/command/git-gather.test.js
Normal file
28
src/command/git-gather.test.js
Normal file
@ -0,0 +1,28 @@
|
||||
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