@slopus/beer 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/bin/beer.js +2 -0
- package/dist/apps/bootstrap.d.ts +5 -0
- package/dist/apps/bootstrap.d.ts.map +1 -0
- package/dist/apps/bootstrap.js +170 -0
- package/dist/apps/bootstrap.js.map +1 -0
- package/dist/commands/bootstrapCommand.d.ts +6 -0
- package/dist/commands/bootstrapCommand.d.ts.map +1 -0
- package/dist/commands/bootstrapCommand.js +16 -0
- package/dist/commands/bootstrapCommand.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +17 -0
- package/dist/main.js.map +1 -0
- package/dist/modules/ai/aiOutputExtract.d.ts +6 -0
- package/dist/modules/ai/aiOutputExtract.d.ts.map +1 -0
- package/dist/modules/ai/aiOutputExtract.js +16 -0
- package/dist/modules/ai/aiOutputExtract.js.map +1 -0
- package/dist/modules/ai/aiOutputExtract.spec.d.ts +2 -0
- package/dist/modules/ai/aiOutputExtract.spec.d.ts.map +1 -0
- package/dist/modules/ai/aiOutputExtract.spec.js +25 -0
- package/dist/modules/ai/aiOutputExtract.spec.js.map +1 -0
- package/dist/modules/ai/aiReadmeGenerate.d.ts +18 -0
- package/dist/modules/ai/aiReadmeGenerate.d.ts.map +1 -0
- package/dist/modules/ai/aiReadmeGenerate.js +23 -0
- package/dist/modules/ai/aiReadmeGenerate.js.map +1 -0
- package/dist/modules/ai/aiReadmeGenerate.spec.d.ts +2 -0
- package/dist/modules/ai/aiReadmeGenerate.spec.d.ts.map +1 -0
- package/dist/modules/ai/aiReadmeGenerate.spec.js +27 -0
- package/dist/modules/ai/aiReadmeGenerate.spec.js.map +1 -0
- package/dist/modules/ai/generate.d.ts +28 -0
- package/dist/modules/ai/generate.d.ts.map +1 -0
- package/dist/modules/ai/generate.js +132 -0
- package/dist/modules/ai/generate.js.map +1 -0
- package/dist/modules/ai/generate.spec.d.ts +2 -0
- package/dist/modules/ai/generate.spec.d.ts.map +1 -0
- package/dist/modules/ai/generate.spec.js +53 -0
- package/dist/modules/ai/generate.spec.js.map +1 -0
- package/dist/modules/ai/generateFile.d.ts +14 -0
- package/dist/modules/ai/generateFile.d.ts.map +1 -0
- package/dist/modules/ai/generateFile.js +56 -0
- package/dist/modules/ai/generateFile.js.map +1 -0
- package/dist/modules/ai/generateFile.spec.d.ts +2 -0
- package/dist/modules/ai/generateFile.spec.d.ts.map +1 -0
- package/dist/modules/ai/generateFile.spec.js +60 -0
- package/dist/modules/ai/generateFile.spec.js.map +1 -0
- package/dist/modules/ai/generateText.d.ts +9 -0
- package/dist/modules/ai/generateText.d.ts.map +1 -0
- package/dist/modules/ai/generateText.js +12 -0
- package/dist/modules/ai/generateText.js.map +1 -0
- package/dist/modules/ai/generateText.spec.d.ts +2 -0
- package/dist/modules/ai/generateText.spec.d.ts.map +1 -0
- package/dist/modules/ai/generateText.spec.js +28 -0
- package/dist/modules/ai/generateText.spec.js.map +1 -0
- package/dist/modules/ai/providerGenerate.d.ts +29 -0
- package/dist/modules/ai/providerGenerate.d.ts.map +1 -0
- package/dist/modules/ai/providerGenerate.js +144 -0
- package/dist/modules/ai/providerGenerate.js.map +1 -0
- package/dist/modules/ai/providerGenerate.spec.d.ts +2 -0
- package/dist/modules/ai/providerGenerate.spec.d.ts.map +1 -0
- package/dist/modules/ai/providerGenerate.spec.js +85 -0
- package/dist/modules/ai/providerGenerate.spec.js.map +1 -0
- package/dist/modules/ai/providerGenerate.unit.spec.d.ts +2 -0
- package/dist/modules/ai/providerGenerate.unit.spec.d.ts.map +1 -0
- package/dist/modules/ai/providerGenerate.unit.spec.js +49 -0
- package/dist/modules/ai/providerGenerate.unit.spec.js.map +1 -0
- package/dist/modules/beer/beerDevFolderResolve.d.ts +5 -0
- package/dist/modules/beer/beerDevFolderResolve.d.ts.map +1 -0
- package/dist/modules/beer/beerDevFolderResolve.js +9 -0
- package/dist/modules/beer/beerDevFolderResolve.js.map +1 -0
- package/dist/modules/beer/beerDevFolderResolve.spec.d.ts +2 -0
- package/dist/modules/beer/beerDevFolderResolve.spec.d.ts.map +1 -0
- package/dist/modules/beer/beerDevFolderResolve.spec.js +10 -0
- package/dist/modules/beer/beerDevFolderResolve.spec.js.map +1 -0
- package/dist/modules/beer/beerOriginalPathResolve.d.ts +5 -0
- package/dist/modules/beer/beerOriginalPathResolve.d.ts.map +1 -0
- package/dist/modules/beer/beerOriginalPathResolve.js +8 -0
- package/dist/modules/beer/beerOriginalPathResolve.js.map +1 -0
- package/dist/modules/beer/beerOriginalPathResolve.spec.d.ts +2 -0
- package/dist/modules/beer/beerOriginalPathResolve.spec.d.ts.map +1 -0
- package/dist/modules/beer/beerOriginalPathResolve.spec.js +10 -0
- package/dist/modules/beer/beerOriginalPathResolve.spec.js.map +1 -0
- package/dist/modules/beer/beerSettingsPathResolve.d.ts +5 -0
- package/dist/modules/beer/beerSettingsPathResolve.d.ts.map +1 -0
- package/dist/modules/beer/beerSettingsPathResolve.js +9 -0
- package/dist/modules/beer/beerSettingsPathResolve.js.map +1 -0
- package/dist/modules/beer/beerSettingsPathResolve.spec.d.ts +2 -0
- package/dist/modules/beer/beerSettingsPathResolve.spec.d.ts.map +1 -0
- package/dist/modules/beer/beerSettingsPathResolve.spec.js +10 -0
- package/dist/modules/beer/beerSettingsPathResolve.spec.js.map +1 -0
- package/dist/modules/beer/beerSettingsRead.d.ts +6 -0
- package/dist/modules/beer/beerSettingsRead.d.ts.map +1 -0
- package/dist/modules/beer/beerSettingsRead.js +28 -0
- package/dist/modules/beer/beerSettingsRead.js.map +1 -0
- package/dist/modules/beer/beerSettingsTypes.d.ts +12 -0
- package/dist/modules/beer/beerSettingsTypes.d.ts.map +1 -0
- package/dist/modules/beer/beerSettingsTypes.js +2 -0
- package/dist/modules/beer/beerSettingsTypes.js.map +1 -0
- package/dist/modules/beer/beerSettingsWrite.d.ts +6 -0
- package/dist/modules/beer/beerSettingsWrite.d.ts.map +1 -0
- package/dist/modules/beer/beerSettingsWrite.js +10 -0
- package/dist/modules/beer/beerSettingsWrite.js.map +1 -0
- package/dist/modules/context/contextGet.d.ts +7 -0
- package/dist/modules/context/contextGet.d.ts.map +1 -0
- package/dist/modules/context/contextGet.js +12 -0
- package/dist/modules/context/contextGet.js.map +1 -0
- package/dist/modules/context/contextGetOrInitialize.d.ts +7 -0
- package/dist/modules/context/contextGetOrInitialize.d.ts.map +1 -0
- package/dist/modules/context/contextGetOrInitialize.js +12 -0
- package/dist/modules/context/contextGetOrInitialize.js.map +1 -0
- package/dist/modules/context/contextInitialize.d.ts +7 -0
- package/dist/modules/context/contextInitialize.d.ts.map +1 -0
- package/dist/modules/context/contextInitialize.js +25 -0
- package/dist/modules/context/contextInitialize.js.map +1 -0
- package/dist/modules/context/contextInitialize.spec.d.ts +2 -0
- package/dist/modules/context/contextInitialize.spec.d.ts.map +1 -0
- package/dist/modules/context/contextInitialize.spec.js +77 -0
- package/dist/modules/context/contextInitialize.spec.js.map +1 -0
- package/dist/modules/context/contextTypes.d.ts +21 -0
- package/dist/modules/context/contextTypes.d.ts.map +1 -0
- package/dist/modules/context/contextTypes.js +2 -0
- package/dist/modules/context/contextTypes.js.map +1 -0
- package/dist/modules/git/gitPush.d.ts +6 -0
- package/dist/modules/git/gitPush.d.ts.map +1 -0
- package/dist/modules/git/gitPush.js +9 -0
- package/dist/modules/git/gitPush.js.map +1 -0
- package/dist/modules/git/gitRemoteEnsure.d.ts +6 -0
- package/dist/modules/git/gitRemoteEnsure.d.ts.map +1 -0
- package/dist/modules/git/gitRemoteEnsure.js +20 -0
- package/dist/modules/git/gitRemoteEnsure.js.map +1 -0
- package/dist/modules/git/gitRepoCheckout.d.ts +6 -0
- package/dist/modules/git/gitRepoCheckout.d.ts.map +1 -0
- package/dist/modules/git/gitRepoCheckout.js +15 -0
- package/dist/modules/git/gitRepoCheckout.js.map +1 -0
- package/dist/modules/git/gitRepoCheckout.spec.d.ts +2 -0
- package/dist/modules/git/gitRepoCheckout.spec.d.ts.map +1 -0
- package/dist/modules/git/gitRepoCheckout.spec.js +33 -0
- package/dist/modules/git/gitRepoCheckout.spec.js.map +1 -0
- package/dist/modules/git/gitStageAndCommit.d.ts +6 -0
- package/dist/modules/git/gitStageAndCommit.d.ts.map +1 -0
- package/dist/modules/git/gitStageAndCommit.js +18 -0
- package/dist/modules/git/gitStageAndCommit.js.map +1 -0
- package/dist/modules/github/githubCliEnsure.d.ts +6 -0
- package/dist/modules/github/githubCliEnsure.d.ts.map +1 -0
- package/dist/modules/github/githubCliEnsure.js +13 -0
- package/dist/modules/github/githubCliEnsure.js.map +1 -0
- package/dist/modules/github/githubOwnerChoicesGet.d.ts +5 -0
- package/dist/modules/github/githubOwnerChoicesGet.d.ts.map +1 -0
- package/dist/modules/github/githubOwnerChoicesGet.js +20 -0
- package/dist/modules/github/githubOwnerChoicesGet.js.map +1 -0
- package/dist/modules/github/githubRepoCreate.d.ts +6 -0
- package/dist/modules/github/githubRepoCreate.d.ts.map +1 -0
- package/dist/modules/github/githubRepoCreate.js +17 -0
- package/dist/modules/github/githubRepoCreate.js.map +1 -0
- package/dist/modules/github/githubRepoExists.d.ts +5 -0
- package/dist/modules/github/githubRepoExists.d.ts.map +1 -0
- package/dist/modules/github/githubRepoExists.js +9 -0
- package/dist/modules/github/githubRepoExists.js.map +1 -0
- package/dist/modules/github/githubRepoNameResolve.d.ts +17 -0
- package/dist/modules/github/githubRepoNameResolve.d.ts.map +1 -0
- package/dist/modules/github/githubRepoNameResolve.js +34 -0
- package/dist/modules/github/githubRepoNameResolve.js.map +1 -0
- package/dist/modules/github/githubRepoNameResolve.spec.d.ts +2 -0
- package/dist/modules/github/githubRepoNameResolve.spec.d.ts.map +1 -0
- package/dist/modules/github/githubRepoNameResolve.spec.js +37 -0
- package/dist/modules/github/githubRepoNameResolve.spec.js.map +1 -0
- package/dist/modules/github/githubRepoParse.d.ts +7 -0
- package/dist/modules/github/githubRepoParse.d.ts.map +1 -0
- package/dist/modules/github/githubRepoParse.js +35 -0
- package/dist/modules/github/githubRepoParse.js.map +1 -0
- package/dist/modules/github/githubRepoParse.spec.d.ts +2 -0
- package/dist/modules/github/githubRepoParse.spec.d.ts.map +1 -0
- package/dist/modules/github/githubRepoParse.spec.js +17 -0
- package/dist/modules/github/githubRepoParse.spec.js.map +1 -0
- package/dist/modules/github/githubRepoStatusGet.d.ts +7 -0
- package/dist/modules/github/githubRepoStatusGet.d.ts.map +1 -0
- package/dist/modules/github/githubRepoStatusGet.js +21 -0
- package/dist/modules/github/githubRepoStatusGet.js.map +1 -0
- package/dist/modules/github/githubRepoUrlBuild.d.ts +5 -0
- package/dist/modules/github/githubRepoUrlBuild.d.ts.map +1 -0
- package/dist/modules/github/githubRepoUrlBuild.js +7 -0
- package/dist/modules/github/githubRepoUrlBuild.js.map +1 -0
- package/dist/modules/github/githubTypes.d.ts +8 -0
- package/dist/modules/github/githubTypes.d.ts.map +1 -0
- package/dist/modules/github/githubTypes.js +2 -0
- package/dist/modules/github/githubTypes.js.map +1 -0
- package/dist/modules/github/githubViewerGet.d.ts +5 -0
- package/dist/modules/github/githubViewerGet.d.ts.map +1 -0
- package/dist/modules/github/githubViewerGet.js +14 -0
- package/dist/modules/github/githubViewerGet.js.map +1 -0
- package/dist/modules/prompt/promptConfirm.d.ts +6 -0
- package/dist/modules/prompt/promptConfirm.d.ts.map +1 -0
- package/dist/modules/prompt/promptConfirm.js +23 -0
- package/dist/modules/prompt/promptConfirm.js.map +1 -0
- package/dist/modules/prompt/promptInput.d.ts +6 -0
- package/dist/modules/prompt/promptInput.d.ts.map +1 -0
- package/dist/modules/prompt/promptInput.js +14 -0
- package/dist/modules/prompt/promptInput.js.map +1 -0
- package/dist/modules/providers/providerDetect.d.ts +6 -0
- package/dist/modules/providers/providerDetect.d.ts.map +1 -0
- package/dist/modules/providers/providerDetect.js +43 -0
- package/dist/modules/providers/providerDetect.js.map +1 -0
- package/dist/modules/providers/providerDetect.spec.d.ts +2 -0
- package/dist/modules/providers/providerDetect.spec.d.ts.map +1 -0
- package/dist/modules/providers/providerDetect.spec.js +76 -0
- package/dist/modules/providers/providerDetect.spec.js.map +1 -0
- package/dist/modules/providers/providerModelSelect.d.ts +12 -0
- package/dist/modules/providers/providerModelSelect.d.ts.map +1 -0
- package/dist/modules/providers/providerModelSelect.js +134 -0
- package/dist/modules/providers/providerModelSelect.js.map +1 -0
- package/dist/modules/providers/providerModelSelect.spec.d.ts +2 -0
- package/dist/modules/providers/providerModelSelect.spec.d.ts.map +1 -0
- package/dist/modules/providers/providerModelSelect.spec.js +68 -0
- package/dist/modules/providers/providerModelSelect.spec.js.map +1 -0
- package/dist/modules/providers/providerModelsGet.d.ts +7 -0
- package/dist/modules/providers/providerModelsGet.d.ts.map +1 -0
- package/dist/modules/providers/providerModelsGet.js +100 -0
- package/dist/modules/providers/providerModelsGet.js.map +1 -0
- package/dist/modules/providers/providerModelsGet.spec.d.ts +2 -0
- package/dist/modules/providers/providerModelsGet.spec.d.ts.map +1 -0
- package/dist/modules/providers/providerModelsGet.spec.js +88 -0
- package/dist/modules/providers/providerModelsGet.spec.js.map +1 -0
- package/dist/modules/providers/providerPriorityList.d.ts +6 -0
- package/dist/modules/providers/providerPriorityList.d.ts.map +1 -0
- package/dist/modules/providers/providerPriorityList.js +16 -0
- package/dist/modules/providers/providerPriorityList.js.map +1 -0
- package/dist/modules/providers/providerPriorityList.spec.d.ts +2 -0
- package/dist/modules/providers/providerPriorityList.spec.d.ts.map +1 -0
- package/dist/modules/providers/providerPriorityList.spec.js +19 -0
- package/dist/modules/providers/providerPriorityList.spec.js.map +1 -0
- package/dist/modules/providers/providerTypes.d.ts +21 -0
- package/dist/modules/providers/providerTypes.d.ts.map +1 -0
- package/dist/modules/providers/providerTypes.js +2 -0
- package/dist/modules/providers/providerTypes.js.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.d.ts +17 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.js +88 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.js.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.d.ts +2 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.js +70 -0
- package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.js.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceGet.d.ts +12 -0
- package/dist/modules/sandbox/sandboxInferenceGet.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceGet.js +18 -0
- package/dist/modules/sandbox/sandboxInferenceGet.js.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceGet.spec.d.ts +2 -0
- package/dist/modules/sandbox/sandboxInferenceGet.spec.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceGet.spec.js +65 -0
- package/dist/modules/sandbox/sandboxInferenceGet.spec.js.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceTypes.d.ts +7 -0
- package/dist/modules/sandbox/sandboxInferenceTypes.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxInferenceTypes.js +2 -0
- package/dist/modules/sandbox/sandboxInferenceTypes.js.map +1 -0
- package/dist/modules/sandbox/sandboxTypes.d.ts +4 -0
- package/dist/modules/sandbox/sandboxTypes.d.ts.map +1 -0
- package/dist/modules/sandbox/sandboxTypes.js +2 -0
- package/dist/modules/sandbox/sandboxTypes.js.map +1 -0
- package/dist/modules/util/commandRun.d.ts +22 -0
- package/dist/modules/util/commandRun.d.ts.map +1 -0
- package/dist/modules/util/commandRun.js +112 -0
- package/dist/modules/util/commandRun.js.map +1 -0
- package/dist/modules/util/commandRun.spec.d.ts +2 -0
- package/dist/modules/util/commandRun.spec.d.ts.map +1 -0
- package/dist/modules/util/commandRun.spec.js +43 -0
- package/dist/modules/util/commandRun.spec.js.map +1 -0
- package/dist/modules/util/pathResolveFromInitCwd.d.ts +6 -0
- package/dist/modules/util/pathResolveFromInitCwd.d.ts.map +1 -0
- package/dist/modules/util/pathResolveFromInitCwd.js +10 -0
- package/dist/modules/util/pathResolveFromInitCwd.js.map +1 -0
- package/dist/release/releaseRun.d.ts +6 -0
- package/dist/release/releaseRun.d.ts.map +1 -0
- package/dist/release/releaseRun.js +153 -0
- package/dist/release/releaseRun.js.map +1 -0
- package/dist/release/releaseVersionIncrement.d.ts +7 -0
- package/dist/release/releaseVersionIncrement.d.ts.map +1 -0
- package/dist/release/releaseVersionIncrement.js +23 -0
- package/dist/release/releaseVersionIncrement.js.map +1 -0
- package/dist/release/releaseVersionIncrement.spec.d.ts +2 -0
- package/dist/release/releaseVersionIncrement.spec.d.ts.map +1 -0
- package/dist/release/releaseVersionIncrement.spec.js +20 -0
- package/dist/release/releaseVersionIncrement.spec.js.map +1 -0
- package/dist/release/releaseVersionPrompt.d.ts +6 -0
- package/dist/release/releaseVersionPrompt.d.ts.map +1 -0
- package/dist/release/releaseVersionPrompt.js +55 -0
- package/dist/release/releaseVersionPrompt.js.map +1 -0
- package/dist/text/all.txt +85 -0
- package/dist/text/text.d.ts +7 -0
- package/dist/text/text.d.ts.map +1 -0
- package/dist/text/text.js +34 -0
- package/dist/text/text.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workflows/steps/generateCommitMessage.d.ts +13 -0
- package/dist/workflows/steps/generateCommitMessage.d.ts.map +1 -0
- package/dist/workflows/steps/generateCommitMessage.js +25 -0
- package/dist/workflows/steps/generateCommitMessage.js.map +1 -0
- package/dist/workflows/steps/generateCommitMessage.spec.d.ts +2 -0
- package/dist/workflows/steps/generateCommitMessage.spec.d.ts.map +1 -0
- package/dist/workflows/steps/generateCommitMessage.spec.js +28 -0
- package/dist/workflows/steps/generateCommitMessage.spec.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { afterAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
const spawnMock = vi.hoisted(() => vi.fn());
|
|
4
|
+
vi.mock("node:child_process", () => ({
|
|
5
|
+
spawn: spawnMock
|
|
6
|
+
}));
|
|
7
|
+
import { commandRun } from "@/modules/util/commandRun.js";
|
|
8
|
+
function spawnSuccessChild() {
|
|
9
|
+
const child = new EventEmitter();
|
|
10
|
+
child.stdout = new EventEmitter();
|
|
11
|
+
child.stderr = new EventEmitter();
|
|
12
|
+
child.stdin = {
|
|
13
|
+
write: () => undefined,
|
|
14
|
+
end: () => undefined
|
|
15
|
+
};
|
|
16
|
+
child.kill = () => undefined;
|
|
17
|
+
queueMicrotask(() => {
|
|
18
|
+
child.emit("close", 0);
|
|
19
|
+
});
|
|
20
|
+
return child;
|
|
21
|
+
}
|
|
22
|
+
describe("commandRun", () => {
|
|
23
|
+
const initCwd = process.env.INIT_CWD;
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
spawnMock.mockReset();
|
|
26
|
+
process.env.INIT_CWD = "/tmp/holdmybeer-invocation";
|
|
27
|
+
spawnMock.mockImplementation(() => spawnSuccessChild());
|
|
28
|
+
});
|
|
29
|
+
it("uses INIT_CWD as default cwd when options.cwd is not provided", async () => {
|
|
30
|
+
await commandRun("echo", ["ok"]);
|
|
31
|
+
expect(spawnMock).toHaveBeenCalledTimes(1);
|
|
32
|
+
expect(spawnMock.mock.calls[0]?.[2]?.cwd).toBe("/tmp/holdmybeer-invocation");
|
|
33
|
+
});
|
|
34
|
+
it("uses explicit options.cwd when provided", async () => {
|
|
35
|
+
await commandRun("echo", ["ok"], { cwd: "/tmp/explicit-cwd" });
|
|
36
|
+
expect(spawnMock).toHaveBeenCalledTimes(1);
|
|
37
|
+
expect(spawnMock.mock.calls[0]?.[2]?.cwd).toBe("/tmp/explicit-cwd");
|
|
38
|
+
});
|
|
39
|
+
afterAll(() => {
|
|
40
|
+
process.env.INIT_CWD = initCwd;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=commandRun.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandRun.spec.js","sourceRoot":"","sources":["../../../sources/modules/util/commandRun.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAExE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5C,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,KAAK,EAAE,SAAS;CACjB,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,SAAS,iBAAiB;IAMxB,MAAM,KAAK,GAAG,IAAI,YAAY,EAK7B,CAAC;IAEF,KAAK,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,KAAK,CAAC,KAAK,GAAG;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;QACtB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;KACrB,CAAC;IACF,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;IAE7B,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAErC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,4BAA4B,CAAC;QACpD,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathResolveFromInitCwd.d.ts","sourceRoot":"","sources":["../../../sources/modules/util/pathResolveFromInitCwd.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a path using INIT_CWD when invoked through Yarn.
|
|
4
|
+
* Falls back to process.cwd() for direct execution.
|
|
5
|
+
*/
|
|
6
|
+
export function pathResolveFromInitCwd(inputPath) {
|
|
7
|
+
const baseDir = process.env.INIT_CWD ?? process.cwd();
|
|
8
|
+
return path.resolve(baseDir, inputPath);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=pathResolveFromInitCwd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathResolveFromInitCwd.js","sourceRoot":"","sources":["../../../sources/modules/util/pathResolveFromInitCwd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseRun.d.ts","sourceRoot":"","sources":["../../sources/release/releaseRun.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqEhD"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { beerLog, text } from "@text";
|
|
6
|
+
import { commandRun } from "@/modules/util/commandRun.js";
|
|
7
|
+
import { releaseVersionPrompt } from "@/release/releaseVersionPrompt.js";
|
|
8
|
+
const scriptDirectory = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const packageDirectory = resolve(scriptDirectory, "../..");
|
|
10
|
+
const repositoryDirectory = resolve(packageDirectory, "../..");
|
|
11
|
+
const packageManifestPath = resolve(packageDirectory, "package.json");
|
|
12
|
+
const packageManifestRelativePath = "packages/holdmybeer/package.json";
|
|
13
|
+
const npmRegistry = "https://registry.npmjs.org/";
|
|
14
|
+
/**
|
|
15
|
+
* Runs the holdmybeer publish flow from repository root.
|
|
16
|
+
* Expects: clean git working tree and npm credentials already configured.
|
|
17
|
+
*/
|
|
18
|
+
export async function releaseRun() {
|
|
19
|
+
beerLog("release_start");
|
|
20
|
+
await releaseWorkingTreeAssertClean();
|
|
21
|
+
beerLog("release_git_clean");
|
|
22
|
+
const currentVersion = releasePackageVersionRead();
|
|
23
|
+
const nextVersion = await releaseVersionPrompt(currentVersion, process.argv[2], process.argv[3]);
|
|
24
|
+
const commitMessage = `chore(release): holdmybeer ${nextVersion}`;
|
|
25
|
+
const tagName = `holdmybeer@${nextVersion}`;
|
|
26
|
+
let releaseCommitHash = null;
|
|
27
|
+
let tagCreated = false;
|
|
28
|
+
beerLog("release_version_current", { version: currentVersion });
|
|
29
|
+
beerLog("release_version_selected", { version: nextVersion });
|
|
30
|
+
await releaseTagMissingAssert(tagName);
|
|
31
|
+
try {
|
|
32
|
+
beerLog("release_install");
|
|
33
|
+
await releaseCommandRun("yarn", ["install", "--frozen-lockfile"], repositoryDirectory);
|
|
34
|
+
beerLog("release_version_bump", { version: nextVersion });
|
|
35
|
+
await releaseCommandRun("npm", [
|
|
36
|
+
"version",
|
|
37
|
+
nextVersion,
|
|
38
|
+
"--no-git-tag-version",
|
|
39
|
+
"--registry",
|
|
40
|
+
npmRegistry,
|
|
41
|
+
"--no-package-lock"
|
|
42
|
+
], packageDirectory, releaseNpmEnv());
|
|
43
|
+
beerLog("release_commit_creating", { version: nextVersion });
|
|
44
|
+
await releaseCommandRun("git", ["add", packageManifestRelativePath], repositoryDirectory);
|
|
45
|
+
await releaseCommandRun("git", ["commit", "-m", commitMessage], repositoryDirectory);
|
|
46
|
+
releaseCommitHash = await releaseCommandOutput("git", ["rev-parse", "HEAD"], repositoryDirectory);
|
|
47
|
+
beerLog("release_test");
|
|
48
|
+
await releaseCommandRun("yarn", ["test"], repositoryDirectory);
|
|
49
|
+
beerLog("release_build");
|
|
50
|
+
await releaseCommandRun("yarn", ["build"], repositoryDirectory);
|
|
51
|
+
beerLog("release_tag_creating", { tag: tagName });
|
|
52
|
+
await releaseCommandRun("git", ["tag", tagName], repositoryDirectory);
|
|
53
|
+
tagCreated = true;
|
|
54
|
+
await releasePublish();
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
await releaseRollback(releaseCommitHash, tagName, tagCreated);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
beerLog("release_push_commit");
|
|
61
|
+
await releaseCommandRun("git", ["push", "origin", "HEAD"], repositoryDirectory);
|
|
62
|
+
beerLog("release_push_tag", { tag: tagName });
|
|
63
|
+
await releaseCommandRun("git", ["push", "origin", tagName], repositoryDirectory);
|
|
64
|
+
beerLog("release_done");
|
|
65
|
+
}
|
|
66
|
+
async function releaseWorkingTreeAssertClean() {
|
|
67
|
+
const status = await commandRun("git", ["status", "--porcelain"], {
|
|
68
|
+
cwd: repositoryDirectory
|
|
69
|
+
});
|
|
70
|
+
if (status.stdout.trim().length > 0) {
|
|
71
|
+
throw new Error(text["error_release_git_dirty"]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function releasePackageVersionRead() {
|
|
75
|
+
const raw = readFileSync(packageManifestPath, "utf8");
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
const version = parsed.version?.trim();
|
|
78
|
+
if (!version) {
|
|
79
|
+
throw new Error(text["error_release_version_missing"]);
|
|
80
|
+
}
|
|
81
|
+
return version;
|
|
82
|
+
}
|
|
83
|
+
async function releaseTagMissingAssert(tagName) {
|
|
84
|
+
const output = await releaseCommandOutput("git", ["tag", "--list", "--format=%(refname:strip=2)", tagName], repositoryDirectory);
|
|
85
|
+
if (output.split("\n").some((line) => line.trim() === tagName)) {
|
|
86
|
+
throw new Error(text["error_release_tag_exists"]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function releaseCommandRun(command, args, cwd, env = {}) {
|
|
90
|
+
await commandRun(command, args, {
|
|
91
|
+
cwd,
|
|
92
|
+
env,
|
|
93
|
+
onStdoutText: (line) => process.stdout.write(line),
|
|
94
|
+
onStderrText: (line) => process.stderr.write(line)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async function releaseCommandOutput(command, args, cwd) {
|
|
98
|
+
const result = await commandRun(command, args, {
|
|
99
|
+
cwd,
|
|
100
|
+
onStderrText: (line) => process.stderr.write(line)
|
|
101
|
+
});
|
|
102
|
+
return result.stdout.trim();
|
|
103
|
+
}
|
|
104
|
+
function releaseNpmEnv() {
|
|
105
|
+
return {
|
|
106
|
+
npm_config_package_lock: "false",
|
|
107
|
+
NPM_CONFIG_PACKAGE_LOCK: "false"
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
async function releaseRollback(releaseCommitHash, tagName, tagCreated) {
|
|
111
|
+
if (!releaseCommitHash) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
beerLog("release_rollback_start");
|
|
115
|
+
if (tagCreated) {
|
|
116
|
+
beerLog("release_rollback_tag", { tag: tagName });
|
|
117
|
+
await releaseCommandRun("git", ["tag", "-d", tagName], repositoryDirectory);
|
|
118
|
+
}
|
|
119
|
+
beerLog("release_rollback_commit");
|
|
120
|
+
await releaseCommandRun("git", ["reset", "--hard", `${releaseCommitHash}^`], repositoryDirectory);
|
|
121
|
+
}
|
|
122
|
+
async function releasePublish() {
|
|
123
|
+
beerLog("release_publish");
|
|
124
|
+
const publishArgs = [
|
|
125
|
+
"publish",
|
|
126
|
+
"--access",
|
|
127
|
+
"public",
|
|
128
|
+
"--registry",
|
|
129
|
+
npmRegistry,
|
|
130
|
+
"--no-package-lock"
|
|
131
|
+
];
|
|
132
|
+
await releaseCommandRunInteractive("npm", publishArgs, packageDirectory, releaseNpmEnv());
|
|
133
|
+
}
|
|
134
|
+
async function releaseCommandRunInteractive(command, args, cwd, env = {}) {
|
|
135
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
136
|
+
const child = spawn(command, args, {
|
|
137
|
+
cwd,
|
|
138
|
+
stdio: "inherit",
|
|
139
|
+
env: { ...process.env, ...env }
|
|
140
|
+
});
|
|
141
|
+
child.on("error", (error) => {
|
|
142
|
+
reject(error);
|
|
143
|
+
});
|
|
144
|
+
child.on("close", (code) => {
|
|
145
|
+
resolve(code ?? 1);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
if (exitCode !== 0) {
|
|
149
|
+
throw new Error(`Command failed (${exitCode}): ${command} ${args.join(" ")}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
await releaseRun();
|
|
153
|
+
//# sourceMappingURL=releaseRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseRun.js","sourceRoot":"","sources":["../../sources/release/releaseRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type ReleaseVersionIncrementKind = "major" | "minor" | "patch";
|
|
2
|
+
/**
|
|
3
|
+
* Increments a semantic version using major, minor, or patch semantics.
|
|
4
|
+
* Expects: value is a valid semantic version.
|
|
5
|
+
*/
|
|
6
|
+
export declare function releaseVersionIncrement(value: string, kind: ReleaseVersionIncrementKind): string;
|
|
7
|
+
//# sourceMappingURL=releaseVersionIncrement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionIncrement.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,2BAA2B,GAChC,MAAM,CAkBR"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
2
|
+
/**
|
|
3
|
+
* Increments a semantic version using major, minor, or patch semantics.
|
|
4
|
+
* Expects: value is a valid semantic version.
|
|
5
|
+
*/
|
|
6
|
+
export function releaseVersionIncrement(value, kind) {
|
|
7
|
+
const match = SEMVER_PATTERN.exec(value.trim());
|
|
8
|
+
if (!match) {
|
|
9
|
+
throw new Error(`Invalid semantic version: ${value}`);
|
|
10
|
+
}
|
|
11
|
+
const major = Number(match[1]);
|
|
12
|
+
const minor = Number(match[2]);
|
|
13
|
+
const patch = Number(match[3]);
|
|
14
|
+
switch (kind) {
|
|
15
|
+
case "major":
|
|
16
|
+
return `${major + 1}.0.0`;
|
|
17
|
+
case "minor":
|
|
18
|
+
return `${major}.${minor + 1}.0`;
|
|
19
|
+
case "patch":
|
|
20
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=releaseVersionIncrement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionIncrement.js","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAClB,2HAA2H,CAAC;AAI9H;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,IAAiC;IAEjC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionIncrement.spec.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { releaseVersionIncrement } from "./releaseVersionIncrement.js";
|
|
3
|
+
describe("releaseVersionIncrement", () => {
|
|
4
|
+
it("increments patch versions", () => {
|
|
5
|
+
expect(releaseVersionIncrement("1.2.3", "patch")).toBe("1.2.4");
|
|
6
|
+
});
|
|
7
|
+
it("increments minor versions and resets patch", () => {
|
|
8
|
+
expect(releaseVersionIncrement("1.2.3", "minor")).toBe("1.3.0");
|
|
9
|
+
});
|
|
10
|
+
it("increments major versions and resets minor and patch", () => {
|
|
11
|
+
expect(releaseVersionIncrement("1.2.3", "major")).toBe("2.0.0");
|
|
12
|
+
});
|
|
13
|
+
it("accepts prerelease inputs and returns stable increments", () => {
|
|
14
|
+
expect(releaseVersionIncrement("1.2.3-beta.1+build.42", "patch")).toBe("1.2.4");
|
|
15
|
+
});
|
|
16
|
+
it("throws for invalid semver values", () => {
|
|
17
|
+
expect(() => releaseVersionIncrement("v1.2.3", "patch")).toThrow("Invalid semantic version: v1.2.3");
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=releaseVersionIncrement.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionIncrement.spec.js","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CACpE,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAC9D,kCAAkC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the next package version using patch/minor/major/custom mode.
|
|
3
|
+
* Expects: currentVersion is a valid semantic version.
|
|
4
|
+
*/
|
|
5
|
+
export declare function releaseVersionPrompt(currentVersion: string, modeArg?: string, customVersionArg?: string): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=releaseVersionPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionPrompt.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionPrompt.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { text, textFormat } from "@text";
|
|
2
|
+
import { promptInput } from "@/modules/prompt/promptInput.js";
|
|
3
|
+
import { releaseVersionIncrement } from "@/release/releaseVersionIncrement.js";
|
|
4
|
+
const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the next package version using patch/minor/major/custom mode.
|
|
7
|
+
* Expects: currentVersion is a valid semantic version.
|
|
8
|
+
*/
|
|
9
|
+
export async function releaseVersionPrompt(currentVersion, modeArg, customVersionArg) {
|
|
10
|
+
const nextVersions = {
|
|
11
|
+
patch: releaseVersionIncrement(currentVersion, "patch"),
|
|
12
|
+
minor: releaseVersionIncrement(currentVersion, "minor"),
|
|
13
|
+
major: releaseVersionIncrement(currentVersion, "major")
|
|
14
|
+
};
|
|
15
|
+
const mode = await releaseVersionModeResolve(modeArg, nextVersions.patch);
|
|
16
|
+
if (mode !== "custom") {
|
|
17
|
+
return nextVersions[mode];
|
|
18
|
+
}
|
|
19
|
+
const customVersion = await releaseVersionCustomResolve(customVersionArg, nextVersions.patch);
|
|
20
|
+
const normalizedVersion = customVersion.trim();
|
|
21
|
+
if (!SEMVER_PATTERN.test(normalizedVersion)) {
|
|
22
|
+
throw new Error(textFormat(text["error_release_version_invalid"], {
|
|
23
|
+
version: normalizedVersion
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
if (normalizedVersion === currentVersion) {
|
|
27
|
+
throw new Error(text["error_release_version_same"]);
|
|
28
|
+
}
|
|
29
|
+
return normalizedVersion;
|
|
30
|
+
}
|
|
31
|
+
async function releaseVersionModeResolve(modeArg, patchVersion) {
|
|
32
|
+
if (!modeArg && !process.stdin.isTTY) {
|
|
33
|
+
throw new Error(text["error_release_mode_required_non_tty"]);
|
|
34
|
+
}
|
|
35
|
+
const modeInput = modeArg?.trim().toLowerCase() ||
|
|
36
|
+
(await promptInput(textFormat(text["prompt_release_mode"], { patch: patchVersion }), "patch"))
|
|
37
|
+
.trim()
|
|
38
|
+
.toLowerCase();
|
|
39
|
+
if (!releaseVersionModeIsValid(modeInput)) {
|
|
40
|
+
throw new Error(textFormat(text["error_release_mode_invalid"], { mode: modeInput }));
|
|
41
|
+
}
|
|
42
|
+
return modeInput;
|
|
43
|
+
}
|
|
44
|
+
async function releaseVersionCustomResolve(customVersionArg, patchVersion) {
|
|
45
|
+
const value = customVersionArg?.trim() ||
|
|
46
|
+
(await promptInput(text["prompt_release_custom"], patchVersion)).trim();
|
|
47
|
+
if (!value) {
|
|
48
|
+
throw new Error(text["error_release_custom_missing"]);
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function releaseVersionModeIsValid(value) {
|
|
53
|
+
return value === "patch" || value === "minor" || value === "major" || value === "custom";
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=releaseVersionPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseVersionPrompt.js","sourceRoot":"","sources":["../../sources/release/releaseVersionPrompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Bootstrap
|
|
2
|
+
|
|
3
|
+
bootstrap_start = 🚀 Starting bootstrap
|
|
4
|
+
bootstrap_github_check = 🔐 Checking GitHub CLI authentication
|
|
5
|
+
bootstrap_settings_loaded = ⚙️ Loaded settings: {path}
|
|
6
|
+
bootstrap_settings_saved = 💾 Saved settings: {path}
|
|
7
|
+
bootstrap_detected_providers = 🔎 Detected providers: {providers}
|
|
8
|
+
bootstrap_detected_models = 🧩 Detected models: {models}
|
|
9
|
+
bootstrap_invalid_repo = ❌ Invalid repository format — try owner/repo or a GitHub URL
|
|
10
|
+
bootstrap_repo_not_found = ❌ Repository not found or inaccessible: {repo}
|
|
11
|
+
bootstrap_source_selected = 📦 Selected source repo: {repo}
|
|
12
|
+
bootstrap_publish_owners = 🌐 Publish owner options: {owners}
|
|
13
|
+
bootstrap_repo_collision = ⚠️ {requested} already contains code — using {resolved}
|
|
14
|
+
bootstrap_publish_selected = 🚀 Selected publish repo: {repo}
|
|
15
|
+
bootstrap_repo_creating = 🆕 Creating repository: {repo} ({visibility})
|
|
16
|
+
bootstrap_original_checkout_start = 📥 Checking out source repository
|
|
17
|
+
bootstrap_original_checkout = 📥 Checked out original source to: {path}
|
|
18
|
+
bootstrap_readme_generating = 🧠 Generating README.md
|
|
19
|
+
bootstrap_readme_generated = 📝 Generated README.md with {provider}
|
|
20
|
+
bootstrap_commit_generating = 🧠 Generating initial commit message
|
|
21
|
+
bootstrap_commit_ready = 💬 Generated commit message: {message}
|
|
22
|
+
bootstrap_remote_ensuring = 🔗 Ensuring git remote origin: {url}
|
|
23
|
+
bootstrap_commit_creating = 🧾 Creating initial commit
|
|
24
|
+
bootstrap_no_changes = ✅ No changes to commit
|
|
25
|
+
bootstrap_commit_created = ✅ Created initial commit
|
|
26
|
+
bootstrap_push_start = ⬆️ Pushing to {remote}/{branch}
|
|
27
|
+
bootstrap_push_done = ✅ Push complete
|
|
28
|
+
bootstrap_source_repo = 📦 Source repo: {repo}
|
|
29
|
+
bootstrap_publish_repo = 🚀 Publish repo: {repo}
|
|
30
|
+
bootstrap_settings_path = ⚙️ Settings: {path}
|
|
31
|
+
bootstrap_readme_provider = 📝 README provider: {provider}
|
|
32
|
+
bootstrap_commit_message = 💬 Commit message: {message}
|
|
33
|
+
bootstrap_skipping_source = ✔️ Source repo already set: {repo}
|
|
34
|
+
bootstrap_skipping_publish = ✔️ Publish repo already set: {repo}
|
|
35
|
+
|
|
36
|
+
# Release
|
|
37
|
+
|
|
38
|
+
release_start = 🚀 Starting release
|
|
39
|
+
release_git_clean = ✅ Git working tree is clean
|
|
40
|
+
release_version_current = 🏷️ Current version: {version}
|
|
41
|
+
release_version_selected = 🧭 Selected version: {version}
|
|
42
|
+
release_install = 📦 Installing dependencies
|
|
43
|
+
release_version_bump = 🔢 Bumping version to {version}
|
|
44
|
+
release_commit_creating = 🧾 Creating release commit for {version}
|
|
45
|
+
release_test = 🧪 Running tests
|
|
46
|
+
release_build = 🏗️ Building package
|
|
47
|
+
release_tag_creating = 🏷️ Creating tag {tag}
|
|
48
|
+
release_publish = 📤 Publishing @slopus/beer to npm
|
|
49
|
+
release_push_commit = ⬆️ Pushing release commit
|
|
50
|
+
release_push_tag = ⬆️ Pushing tag {tag}
|
|
51
|
+
release_rollback_start = ↩️ Release failed, rolling back git changes
|
|
52
|
+
release_rollback_tag = 🏷️ Removing tag {tag}
|
|
53
|
+
release_rollback_commit = 🧹 Reverting release commit
|
|
54
|
+
release_done = ✅ Release completed
|
|
55
|
+
|
|
56
|
+
# Prompts
|
|
57
|
+
|
|
58
|
+
prompt_source_repo = 📦 Source repository (GitHub URL or owner/repo)
|
|
59
|
+
prompt_publish_owner = 🌐 Publish owner/org
|
|
60
|
+
prompt_publish_repo_name = 🏷️ Publish repository name
|
|
61
|
+
prompt_create_repo = 🆕 Repository {repo} does not exist. Create it now?
|
|
62
|
+
prompt_create_private = 🔐 Create as private repository?
|
|
63
|
+
prompt_release_mode = Select release increment (patch/minor/major/custom). patch -> {patch}
|
|
64
|
+
prompt_release_custom = Enter custom semantic version
|
|
65
|
+
|
|
66
|
+
# Errors
|
|
67
|
+
|
|
68
|
+
error_gh_required = ❌ GitHub CLI (gh) is required — install it and authenticate with `gh auth login`
|
|
69
|
+
error_gh_user_resolve = ❌ Unable to resolve authenticated GitHub user from gh
|
|
70
|
+
error_repo_status_check = ❌ Unable to check repository status for {repo}: {detail}
|
|
71
|
+
error_command_timeout = ⏰ Command timed out after {ms}ms: {command}
|
|
72
|
+
error_command_failed = 💥 Command failed ({code}): {command}
|
|
73
|
+
error_context_not_initialized = ❌ Context is not initialized — run contextInitialize() first
|
|
74
|
+
error_repo_name_invalid = ❌ Publish repository name is invalid
|
|
75
|
+
error_repo_name_exhausted = ❌ Unable to resolve an available publish repository name after 100 attempts
|
|
76
|
+
error_bootstrap_cancelled = 🚫 Bootstrap cancelled — publish repository is required
|
|
77
|
+
error_source_dir_invalid = ❌ Source directory does not exist or is not a directory: {dir}
|
|
78
|
+
error_release_git_dirty = ❌ Release requires a clean git working tree. Commit pending changes first.
|
|
79
|
+
error_release_mode_invalid = ❌ Invalid release mode: {mode}. Use patch, minor, major, or custom.
|
|
80
|
+
error_release_mode_required_non_tty = ❌ Release mode is required in non-interactive shells. Use: yarn release -- <patch|minor|major|custom> [version]
|
|
81
|
+
error_release_custom_missing = ❌ Custom version is required for custom release mode.
|
|
82
|
+
error_release_version_invalid = ❌ Invalid semantic version: {version}
|
|
83
|
+
error_release_version_same = ❌ New version must differ from current version.
|
|
84
|
+
error_release_version_missing = ❌ Could not read current version from packages/holdmybeer/package.json
|
|
85
|
+
error_release_tag_exists = ❌ Release tag already exists. Delete the existing tag or choose a different version.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** All user-facing text strings, keyed by identifier. */
|
|
2
|
+
export declare const text: Record<string, string>;
|
|
3
|
+
/** Replaces {key} placeholders in a template with provided values. */
|
|
4
|
+
export declare function textFormat(template: string, values: Record<string, string | number>): string;
|
|
5
|
+
/** Logs a message with optional template substitution. */
|
|
6
|
+
export declare function beerLog(key: string, values?: Record<string, string | number>): void;
|
|
7
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../sources/text/text.ts"],"names":[],"mappings":"AAsBA,yDAAyD;AACzD,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEvC,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACtC,MAAM,CAKR;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACvC,IAAI,CAON"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
/** Parses key = value lines from a text catalog, skipping comments and blanks. */
|
|
5
|
+
function textParse(raw) {
|
|
6
|
+
const entries = {};
|
|
7
|
+
for (const line of raw.split("\n")) {
|
|
8
|
+
const trimmed = line.trim();
|
|
9
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
10
|
+
continue;
|
|
11
|
+
const eq = trimmed.indexOf("=");
|
|
12
|
+
if (eq === -1)
|
|
13
|
+
continue;
|
|
14
|
+
entries[trimmed.slice(0, eq).trim()] = trimmed.slice(eq + 1).trim();
|
|
15
|
+
}
|
|
16
|
+
return entries;
|
|
17
|
+
}
|
|
18
|
+
const txtPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "all.txt");
|
|
19
|
+
/** All user-facing text strings, keyed by identifier. */
|
|
20
|
+
export const text = textParse(readFileSync(txtPath, "utf-8"));
|
|
21
|
+
/** Replaces {key} placeholders in a template with provided values. */
|
|
22
|
+
export function textFormat(template, values) {
|
|
23
|
+
return template.replace(/\{(\w+)\}/g, (_, k) => String(values[k] ?? `{${k}}`));
|
|
24
|
+
}
|
|
25
|
+
/** Logs a message with optional template substitution. */
|
|
26
|
+
export function beerLog(key, values) {
|
|
27
|
+
const template = text[key];
|
|
28
|
+
if (!template) {
|
|
29
|
+
console.log(key);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(values ? textFormat(template, values) : template);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../sources/text/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,kFAAkF;AAClF,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,SAAS,CACV,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,IAAI,GAA2B,SAAS,CACnD,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAC/B,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,MAAuC;IAEvC,OAAO,QAAQ,CAAC,OAAO,CACrB,YAAY,EACZ,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CACrB,GAAW,EACX,MAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { BeerSettings, ProviderDetection } from "@/modules/beer/beerSettingsTypes.js";
|
|
2
|
+
export type { Context, ContextInferTextInput } from "@/modules/context/contextTypes.js";
|
|
3
|
+
export type { GitHubRepoRef, GitHubRepoStatus } from "@/modules/github/githubTypes.js";
|
|
4
|
+
export type { ProviderId, ProviderModel, ProviderModelSelectionMode } from "@/modules/providers/providerTypes.js";
|
|
5
|
+
export type { InferenceWritePolicy } from "@/modules/sandbox/sandboxInferenceTypes.js";
|
|
6
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC3F,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACvF,YAAY,EACV,UAAU,EACV,aAAa,EACb,0BAA0B,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Context } from "@/types";
|
|
2
|
+
export interface GenerateCommitMessageOptions {
|
|
3
|
+
showProgress?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Generates an Angular-style initial commit message for bootstrap workflow.
|
|
7
|
+
* Expects: sourceFullName is a valid owner/repo string.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateCommitMessage(context: Context, sourceFullName: string, options?: GenerateCommitMessageOptions): Promise<{
|
|
10
|
+
provider?: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=generateCommitMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCommitMessage.d.ts","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { generate } from "@/modules/ai/generate.js";
|
|
2
|
+
/**
|
|
3
|
+
* Generates an Angular-style initial commit message for bootstrap workflow.
|
|
4
|
+
* Expects: sourceFullName is a valid owner/repo string.
|
|
5
|
+
*/
|
|
6
|
+
export async function generateCommitMessage(context, sourceFullName, options = {}) {
|
|
7
|
+
const prompt = [
|
|
8
|
+
"Generate one Angular-style git commit message for initial bootstrap.",
|
|
9
|
+
"Return a single line only.",
|
|
10
|
+
`Context: bootstrap project for source repository ${sourceFullName}.`
|
|
11
|
+
].join("\n");
|
|
12
|
+
const result = await generate(context, prompt, {
|
|
13
|
+
showProgress: options.showProgress,
|
|
14
|
+
modelSelectionMode: "fast"
|
|
15
|
+
});
|
|
16
|
+
const firstLine = result.text.split("\n")[0]?.trim();
|
|
17
|
+
if (!firstLine) {
|
|
18
|
+
throw new Error("Inference returned empty commit message.");
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
provider: result.provider,
|
|
22
|
+
text: firstLine
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=generateCommitMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCommitMessage.js","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAMpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAgB,EAChB,cAAsB,EACtB,UAAwC,EAAE;IAE1C,MAAM,MAAM,GAAG;QACb,sEAAsE;QACtE,4BAA4B;QAC5B,oDAAoD,cAAc,GAAG;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;QAC7C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,kBAAkB,EAAE,MAAM;KAC3B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCommitMessage.spec.d.ts","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.spec.ts"],"names":[],"mappings":""}
|