@auto-engineer/release-automation 0.24.0
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/CHANGELOG.md +26 -0
- package/LICENSE +10 -0
- package/README.md +560 -0
- package/dist/bin/release-automation.d.ts +3 -0
- package/dist/bin/release-automation.d.ts.map +1 -0
- package/dist/bin/release-automation.js +7 -0
- package/dist/bin/release-automation.js.map +1 -0
- package/dist/src/cli/commands/check.d.ts +3 -0
- package/dist/src/cli/commands/check.d.ts.map +1 -0
- package/dist/src/cli/commands/check.js +77 -0
- package/dist/src/cli/commands/check.js.map +1 -0
- package/dist/src/cli/commands/generate.d.ts +3 -0
- package/dist/src/cli/commands/generate.d.ts.map +1 -0
- package/dist/src/cli/commands/generate.js +100 -0
- package/dist/src/cli/commands/generate.js.map +1 -0
- package/dist/src/cli/commands/index.d.ts +3 -0
- package/dist/src/cli/commands/index.d.ts.map +1 -0
- package/dist/src/cli/commands/index.js +3 -0
- package/dist/src/cli/commands/index.js.map +1 -0
- package/dist/src/cli/index.d.ts +2 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +15 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/utils/exit-codes.d.ts +11 -0
- package/dist/src/cli/utils/exit-codes.d.ts.map +1 -0
- package/dist/src/cli/utils/exit-codes.js +10 -0
- package/dist/src/cli/utils/exit-codes.js.map +1 -0
- package/dist/src/cli/utils/index.d.ts +3 -0
- package/dist/src/cli/utils/index.d.ts.map +1 -0
- package/dist/src/cli/utils/index.js +3 -0
- package/dist/src/cli/utils/index.js.map +1 -0
- package/dist/src/cli/utils/logger.d.ts +6 -0
- package/dist/src/cli/utils/logger.d.ts.map +1 -0
- package/dist/src/cli/utils/logger.js +17 -0
- package/dist/src/cli/utils/logger.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/changelog/generator.d.ts +10 -0
- package/dist/src/lib/changelog/generator.d.ts.map +1 -0
- package/dist/src/lib/changelog/generator.js +47 -0
- package/dist/src/lib/changelog/generator.js.map +1 -0
- package/dist/src/lib/changelog/index.d.ts +3 -0
- package/dist/src/lib/changelog/index.d.ts.map +1 -0
- package/dist/src/lib/changelog/index.js +3 -0
- package/dist/src/lib/changelog/index.js.map +1 -0
- package/dist/src/lib/changelog/providers/anthropic-api.d.ts +9 -0
- package/dist/src/lib/changelog/providers/anthropic-api.d.ts.map +1 -0
- package/dist/src/lib/changelog/providers/anthropic-api.js +77 -0
- package/dist/src/lib/changelog/providers/anthropic-api.js.map +1 -0
- package/dist/src/lib/changelog/providers/claude-cli.d.ts +7 -0
- package/dist/src/lib/changelog/providers/claude-cli.d.ts.map +1 -0
- package/dist/src/lib/changelog/providers/claude-cli.js +63 -0
- package/dist/src/lib/changelog/providers/claude-cli.js.map +1 -0
- package/dist/src/lib/changelog/providers/index.d.ts +4 -0
- package/dist/src/lib/changelog/providers/index.d.ts.map +1 -0
- package/dist/src/lib/changelog/providers/index.js +4 -0
- package/dist/src/lib/changelog/providers/index.js.map +1 -0
- package/dist/src/lib/changelog/providers/simple.d.ts +7 -0
- package/dist/src/lib/changelog/providers/simple.d.ts.map +1 -0
- package/dist/src/lib/changelog/providers/simple.js +33 -0
- package/dist/src/lib/changelog/providers/simple.js.map +1 -0
- package/dist/src/lib/changeset/index.d.ts +4 -0
- package/dist/src/lib/changeset/index.d.ts.map +1 -0
- package/dist/src/lib/changeset/index.js +4 -0
- package/dist/src/lib/changeset/index.js.map +1 -0
- package/dist/src/lib/changeset/parser.d.ts +18 -0
- package/dist/src/lib/changeset/parser.d.ts.map +1 -0
- package/dist/src/lib/changeset/parser.js +52 -0
- package/dist/src/lib/changeset/parser.js.map +1 -0
- package/dist/src/lib/changeset/semver.d.ts +15 -0
- package/dist/src/lib/changeset/semver.d.ts.map +1 -0
- package/dist/src/lib/changeset/semver.js +29 -0
- package/dist/src/lib/changeset/semver.js.map +1 -0
- package/dist/src/lib/changeset/writer.d.ts +17 -0
- package/dist/src/lib/changeset/writer.d.ts.map +1 -0
- package/dist/src/lib/changeset/writer.js +33 -0
- package/dist/src/lib/changeset/writer.js.map +1 -0
- package/dist/src/lib/config/index.d.ts +3 -0
- package/dist/src/lib/config/index.d.ts.map +1 -0
- package/dist/src/lib/config/index.js +2 -0
- package/dist/src/lib/config/index.js.map +1 -0
- package/dist/src/lib/config/loader.d.ts +23 -0
- package/dist/src/lib/config/loader.d.ts.map +1 -0
- package/dist/src/lib/config/loader.js +89 -0
- package/dist/src/lib/config/loader.js.map +1 -0
- package/dist/src/lib/config/types.d.ts +6 -0
- package/dist/src/lib/config/types.d.ts.map +1 -0
- package/dist/src/lib/config/types.js +2 -0
- package/dist/src/lib/config/types.js.map +1 -0
- package/dist/src/lib/git/commits.d.ts +33 -0
- package/dist/src/lib/git/commits.d.ts.map +1 -0
- package/dist/src/lib/git/commits.js +174 -0
- package/dist/src/lib/git/commits.js.map +1 -0
- package/dist/src/lib/git/index.d.ts +2 -0
- package/dist/src/lib/git/index.d.ts.map +1 -0
- package/dist/src/lib/git/index.js +2 -0
- package/dist/src/lib/git/index.js.map +1 -0
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +6 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/packages/discovery.d.ts +18 -0
- package/dist/src/lib/packages/discovery.d.ts.map +1 -0
- package/dist/src/lib/packages/discovery.js +76 -0
- package/dist/src/lib/packages/discovery.js.map +1 -0
- package/dist/src/lib/packages/index.d.ts +2 -0
- package/dist/src/lib/packages/index.d.ts.map +1 -0
- package/dist/src/lib/packages/index.js +2 -0
- package/dist/src/lib/packages/index.js.map +1 -0
- package/dist/src/types/index.d.ts +54 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { extractBreakingChange, isConventionalCommit, parseConventionalCommit, parseConventionalCommits, } from './parser.js';
|
|
2
|
+
export { determineBumpType, hasBreakingChanges, hasFeatures } from './semver.js';
|
|
3
|
+
export { createChangesetFile, generateChangesetFilename, generateChangesetFrontmatter } from './writer.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/changeset/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { extractBreakingChange, isConventionalCommit, parseConventionalCommit, parseConventionalCommits, } from './parser.js';
|
|
2
|
+
export { determineBumpType, hasBreakingChanges, hasFeatures } from './semver.js';
|
|
3
|
+
export { createChangesetFile, generateChangesetFilename, generateChangesetFrontmatter } from './writer.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/changeset/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ConventionalCommit } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a conventional commit message
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseConventionalCommit(hash: string, getMessage?: (hash: string) => string): ConventionalCommit | null;
|
|
6
|
+
/**
|
|
7
|
+
* Parse multiple commits
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseConventionalCommits(hashes: string[], getMessage?: (hash: string) => string): ConventionalCommit[];
|
|
10
|
+
/**
|
|
11
|
+
* Validate conventional commit format
|
|
12
|
+
*/
|
|
13
|
+
export declare function isConventionalCommit(message: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Extract breaking change info from commit
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractBreakingChange(message: string): boolean;
|
|
18
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/changeset/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK3E;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAyB,GACtD,kBAAkB,GAAG,IAAI,CA4B3B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACpC,kBAAkB,EAAE,CAItB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getCommitMessage } from '../git/commits.js';
|
|
2
|
+
const CONVENTIONAL_PATTERN = /^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(([^)]+)\))?: (.+)/;
|
|
3
|
+
/**
|
|
4
|
+
* Parse a conventional commit message
|
|
5
|
+
*/
|
|
6
|
+
export function parseConventionalCommit(hash, getMessage = getCommitMessage) {
|
|
7
|
+
try {
|
|
8
|
+
const fullMessage = getMessage(hash);
|
|
9
|
+
// Parse conventional commit format: type(scope): subject
|
|
10
|
+
const match = fullMessage.match(CONVENTIONAL_PATTERN);
|
|
11
|
+
if (!match) {
|
|
12
|
+
return null; // Not a conventional commit
|
|
13
|
+
}
|
|
14
|
+
const [, type, , scope, subject] = match;
|
|
15
|
+
const body = fullMessage.split('\n').slice(1).join('\n').trim();
|
|
16
|
+
const breaking = extractBreakingChange(fullMessage);
|
|
17
|
+
return {
|
|
18
|
+
hash,
|
|
19
|
+
type: type,
|
|
20
|
+
scope,
|
|
21
|
+
subject,
|
|
22
|
+
body,
|
|
23
|
+
breaking,
|
|
24
|
+
fullMessage,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.warn(`Warning: Could not parse commit ${hash}:`, error.message);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse multiple commits
|
|
34
|
+
*/
|
|
35
|
+
export function parseConventionalCommits(hashes, getMessage) {
|
|
36
|
+
return hashes
|
|
37
|
+
.map((hash) => parseConventionalCommit(hash, getMessage))
|
|
38
|
+
.filter((c) => c !== null);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate conventional commit format
|
|
42
|
+
*/
|
|
43
|
+
export function isConventionalCommit(message) {
|
|
44
|
+
return CONVENTIONAL_PATTERN.test(message);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract breaking change info from commit
|
|
48
|
+
*/
|
|
49
|
+
export function extractBreakingChange(message) {
|
|
50
|
+
return message.includes('BREAKING CHANGE:') || message.includes('!:');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/lib/changeset/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,oBAAoB,GAAG,qFAAqF,CAAC;AAEnH;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,aAAuC,gBAAgB;IAEvD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAErC,yDAAyD;QACzD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,4BAA4B;QAC3C,CAAC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,AAAD,EAAG,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;QACzC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEpD,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,IAAkB;YACxB,KAAK;YACL,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,WAAW;SACZ,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mCAAmC,IAAI,GAAG,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAgB,EAChB,UAAqC;IAErC,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SACxD,MAAM,CAAC,CAAC,CAAC,EAA2B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BumpType, ConventionalCommit } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Determine the semver bump type from commits
|
|
4
|
+
* Priority: breaking > feat > fix
|
|
5
|
+
*/
|
|
6
|
+
export declare function determineBumpType(commits: ConventionalCommit[]): BumpType;
|
|
7
|
+
/**
|
|
8
|
+
* Check if commits contain breaking changes
|
|
9
|
+
*/
|
|
10
|
+
export declare function hasBreakingChanges(commits: ConventionalCommit[]): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Check if commits contain features
|
|
13
|
+
*/
|
|
14
|
+
export declare function hasFeatures(commits: ConventionalCommit[]): boolean;
|
|
15
|
+
//# sourceMappingURL=semver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../../../src/lib/changeset/semver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,QAAQ,CAazE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAEzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAElE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determine the semver bump type from commits
|
|
3
|
+
* Priority: breaking > feat > fix
|
|
4
|
+
*/
|
|
5
|
+
export function determineBumpType(commits) {
|
|
6
|
+
// Check for breaking changes
|
|
7
|
+
if (hasBreakingChanges(commits)) {
|
|
8
|
+
return 'major';
|
|
9
|
+
}
|
|
10
|
+
// Check for features
|
|
11
|
+
if (hasFeatures(commits)) {
|
|
12
|
+
return 'minor';
|
|
13
|
+
}
|
|
14
|
+
// Default to patch
|
|
15
|
+
return 'patch';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if commits contain breaking changes
|
|
19
|
+
*/
|
|
20
|
+
export function hasBreakingChanges(commits) {
|
|
21
|
+
return commits.some((c) => c.breaking);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if commits contain features
|
|
25
|
+
*/
|
|
26
|
+
export function hasFeatures(commits) {
|
|
27
|
+
return commits.some((c) => c.type === 'feat');
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=semver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.js","sourceRoot":"","sources":["../../../../src/lib/changeset/semver.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA6B;IAC7D,6BAA6B;IAC7B,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mBAAmB;IACnB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC9D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAA6B;IACvD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BumpType, ChangesetData } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a changeset file
|
|
4
|
+
*/
|
|
5
|
+
export declare function createChangesetFile(data: ChangesetData, packages: string[], changesetDir?: string): {
|
|
6
|
+
path: string;
|
|
7
|
+
filename: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Generate changeset frontmatter
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateChangesetFrontmatter(packages: string[], bumpType: BumpType): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate unique changeset filename
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateChangesetFilename(): string;
|
|
17
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/lib/changeset/writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,SAAe,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBpC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAI3F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Create a changeset file
|
|
6
|
+
*/
|
|
7
|
+
export function createChangesetFile(data, packages, changesetDir = '.changeset') {
|
|
8
|
+
const changesetPath = join(process.cwd(), changesetDir);
|
|
9
|
+
if (!existsSync(changesetPath)) {
|
|
10
|
+
mkdirSync(changesetPath, { recursive: true });
|
|
11
|
+
}
|
|
12
|
+
const filename = generateChangesetFilename();
|
|
13
|
+
const filepath = join(changesetPath, filename);
|
|
14
|
+
const frontmatter = generateChangesetFrontmatter(packages, data.bumpType);
|
|
15
|
+
const content = `${frontmatter}\n${data.description}\n`;
|
|
16
|
+
writeFileSync(filepath, content);
|
|
17
|
+
return { path: filepath, filename };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate changeset frontmatter
|
|
21
|
+
*/
|
|
22
|
+
export function generateChangesetFrontmatter(packages, bumpType) {
|
|
23
|
+
const packageEntries = packages.map((pkg) => `"${pkg}": ${bumpType}`).join('\n');
|
|
24
|
+
return `---\n${packageEntries}\n---\n`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate unique changeset filename
|
|
28
|
+
*/
|
|
29
|
+
export function generateChangesetFilename() {
|
|
30
|
+
const hash = crypto.randomBytes(4).toString('hex');
|
|
31
|
+
return `auto-${hash}.md`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../../src/lib/changeset/writer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAmB,EACnB,QAAkB,EAClB,YAAY,GAAG,YAAY;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,yBAAyB,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,GAAG,WAAW,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC;IAExD,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAkB,EAAE,QAAkB;IACjF,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjF,OAAO,QAAQ,cAAc,SAAS,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO,QAAQ,IAAI,KAAK,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3G,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReleaseConfig } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Load release configuration from multiple sources
|
|
4
|
+
* Priority: overrides > env > config file > defaults
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadConfig(overrides?: Partial<ReleaseConfig>): Promise<ReleaseConfig>;
|
|
7
|
+
/**
|
|
8
|
+
* Load from .release-automation.json or package.json
|
|
9
|
+
*/
|
|
10
|
+
export declare function loadConfigFile(): Promise<Partial<ReleaseConfig>>;
|
|
11
|
+
/**
|
|
12
|
+
* Load from environment variables
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadConfigFromEnv(): Partial<ReleaseConfig>;
|
|
15
|
+
/**
|
|
16
|
+
* Merge configuration from multiple sources
|
|
17
|
+
*/
|
|
18
|
+
export declare function mergeConfig(...configs: Partial<ReleaseConfig>[]): ReleaseConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Get default configuration
|
|
21
|
+
*/
|
|
22
|
+
export declare function getDefaultConfig(): ReleaseConfig;
|
|
23
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAM3F;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CA0BtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CA4B1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,aAAa,CAQ/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAOhD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Load release configuration from multiple sources
|
|
5
|
+
* Priority: overrides > env > config file > defaults
|
|
6
|
+
*/
|
|
7
|
+
export async function loadConfig(overrides) {
|
|
8
|
+
const defaults = getDefaultConfig();
|
|
9
|
+
const fromEnv = loadConfigFromEnv();
|
|
10
|
+
const fromFile = await loadConfigFile();
|
|
11
|
+
return mergeConfig(defaults, fromFile, fromEnv, overrides || {});
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Load from .release-automation.json or package.json
|
|
15
|
+
*/
|
|
16
|
+
export async function loadConfigFile() {
|
|
17
|
+
// Try .release-automation.json first
|
|
18
|
+
const configPath = join(process.cwd(), '.release-automation.json');
|
|
19
|
+
if (existsSync(configPath)) {
|
|
20
|
+
try {
|
|
21
|
+
const content = readFileSync(configPath, 'utf8');
|
|
22
|
+
const config = JSON.parse(content);
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.warn('Warning: Failed to parse .release-automation.json:', error.message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Try package.json
|
|
30
|
+
const packagePath = join(process.cwd(), 'package.json');
|
|
31
|
+
if (existsSync(packagePath)) {
|
|
32
|
+
try {
|
|
33
|
+
const content = readFileSync(packagePath, 'utf8');
|
|
34
|
+
const pkg = JSON.parse(content);
|
|
35
|
+
return pkg.releaseAutomation || {};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.warn('Warning: Failed to parse package.json:', error.message);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load from environment variables
|
|
45
|
+
*/
|
|
46
|
+
export function loadConfigFromEnv() {
|
|
47
|
+
const config = {};
|
|
48
|
+
if (process.env.AUTO_CHANGESET_CONFIG_PATH) {
|
|
49
|
+
config.changesetConfigPath = process.env.AUTO_CHANGESET_CONFIG_PATH;
|
|
50
|
+
}
|
|
51
|
+
if (process.env.AUTO_CHANGESET_PROVIDER) {
|
|
52
|
+
config.changelogProvider = process.env.AUTO_CHANGESET_PROVIDER;
|
|
53
|
+
}
|
|
54
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
55
|
+
config.anthropicApiKey = process.env.ANTHROPIC_API_KEY;
|
|
56
|
+
}
|
|
57
|
+
if (process.env.AUTO_CHANGESET_DIR) {
|
|
58
|
+
config.changesetDir = process.env.AUTO_CHANGESET_DIR;
|
|
59
|
+
}
|
|
60
|
+
if (process.env.AUTO_CHANGESET_AMEND !== undefined) {
|
|
61
|
+
config.autoAmend = process.env.AUTO_CHANGESET_AMEND === 'true';
|
|
62
|
+
}
|
|
63
|
+
if (process.env.AUTO_CHANGESET_PACKAGES) {
|
|
64
|
+
config.packages = process.env.AUTO_CHANGESET_PACKAGES.split(',').map((p) => p.trim());
|
|
65
|
+
}
|
|
66
|
+
return config;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Merge configuration from multiple sources
|
|
70
|
+
*/
|
|
71
|
+
export function mergeConfig(...configs) {
|
|
72
|
+
const merged = {};
|
|
73
|
+
for (const config of configs) {
|
|
74
|
+
Object.assign(merged, config);
|
|
75
|
+
}
|
|
76
|
+
return merged;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get default configuration
|
|
80
|
+
*/
|
|
81
|
+
export function getDefaultConfig() {
|
|
82
|
+
return {
|
|
83
|
+
changesetConfigPath: '.changeset/config.json',
|
|
84
|
+
changelogProvider: 'auto',
|
|
85
|
+
autoAmend: true,
|
|
86
|
+
changesetDir: '.changeset',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/lib/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get all commits since the last changeset was created
|
|
3
|
+
*/
|
|
4
|
+
export declare function getCommitsSinceLastChangeset(changesetDir?: string): string[];
|
|
5
|
+
/**
|
|
6
|
+
* Get commits in a specific range
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCommitsInRange(since: string, until?: string): string[];
|
|
9
|
+
/**
|
|
10
|
+
* Get all commits in the repository
|
|
11
|
+
*/
|
|
12
|
+
export declare function getAllCommits(): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Get commits since the last release tag
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCommitsSinceLastTag(): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Get the most recent changeset commit hash
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLastChangesetCommit(changesetDir?: string): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Get the most recent release tag
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLastReleaseTag(): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get commit message for a specific hash
|
|
27
|
+
*/
|
|
28
|
+
export declare function getCommitMessage(hash: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Check if we're in a git repository
|
|
31
|
+
*/
|
|
32
|
+
export declare function isGitRepository(): boolean;
|
|
33
|
+
//# sourceMappingURL=commits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../../../../src/lib/git/commits.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,SAAe,GAAG,MAAM,EAAE,CAsClF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG,MAAM,EAAE,CAezE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAexC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAYjD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,SAAe,GAAG,MAAM,GAAG,IAAI,CAkCjF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAWjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWrD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAWzC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Get all commits since the last changeset was created
|
|
6
|
+
*/
|
|
7
|
+
export function getCommitsSinceLastChangeset(changesetDir = '.changeset') {
|
|
8
|
+
try {
|
|
9
|
+
const changesetPath = join(process.cwd(), changesetDir);
|
|
10
|
+
if (!existsSync(changesetPath)) {
|
|
11
|
+
// Changeset directory doesn't exist, get all commits
|
|
12
|
+
return getAllCommits();
|
|
13
|
+
}
|
|
14
|
+
const files = readdirSync(changesetPath).filter((f) => f.endsWith('.md') && f !== 'README.md');
|
|
15
|
+
if (files.length === 0) {
|
|
16
|
+
// No changesets exist, fallback to last tag
|
|
17
|
+
return getCommitsSinceLastTag();
|
|
18
|
+
}
|
|
19
|
+
// Get the most recent changeset file by git commit time
|
|
20
|
+
const latestChangeset = files
|
|
21
|
+
.map((f) => ({
|
|
22
|
+
file: f,
|
|
23
|
+
time: execSync(`git log -1 --format=%ct -- ${changesetDir}/${f}`, {
|
|
24
|
+
encoding: 'utf8',
|
|
25
|
+
cwd: process.cwd(),
|
|
26
|
+
}).trim(),
|
|
27
|
+
}))
|
|
28
|
+
.sort((a, b) => Number(b.time) - Number(a.time))[0];
|
|
29
|
+
// Get commits since that changeset was added
|
|
30
|
+
const changesetCommit = execSync(`git log -1 --format=%H -- ${changesetDir}/${latestChangeset.file}`, {
|
|
31
|
+
encoding: 'utf8',
|
|
32
|
+
cwd: process.cwd(),
|
|
33
|
+
}).trim();
|
|
34
|
+
return getCommitsInRange(changesetCommit, 'HEAD');
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.warn('Warning: Could not get commits since last changeset:', error.message);
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get commits in a specific range
|
|
43
|
+
*/
|
|
44
|
+
export function getCommitsInRange(since, until = 'HEAD') {
|
|
45
|
+
try {
|
|
46
|
+
const commits = execSync(`git log ${since}..${until} --format=%H`, {
|
|
47
|
+
encoding: 'utf8',
|
|
48
|
+
cwd: process.cwd(),
|
|
49
|
+
})
|
|
50
|
+
.trim()
|
|
51
|
+
.split('\n')
|
|
52
|
+
.filter(Boolean);
|
|
53
|
+
return commits;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.warn(`Warning: Could not get commits in range ${since}..${until}:`, error.message);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get all commits in the repository
|
|
62
|
+
*/
|
|
63
|
+
export function getAllCommits() {
|
|
64
|
+
try {
|
|
65
|
+
const commits = execSync('git log --format=%H', {
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
cwd: process.cwd(),
|
|
68
|
+
})
|
|
69
|
+
.trim()
|
|
70
|
+
.split('\n')
|
|
71
|
+
.filter(Boolean);
|
|
72
|
+
return commits;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.warn('Warning: Could not get all commits:', error.message);
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get commits since the last release tag
|
|
81
|
+
*/
|
|
82
|
+
export function getCommitsSinceLastTag() {
|
|
83
|
+
try {
|
|
84
|
+
const lastTag = execSync('git describe --tags --abbrev=0', {
|
|
85
|
+
encoding: 'utf8',
|
|
86
|
+
cwd: process.cwd(),
|
|
87
|
+
}).trim();
|
|
88
|
+
return getCommitsInRange(lastTag, 'HEAD');
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// No tags exist, get all commits
|
|
92
|
+
return getAllCommits();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the most recent changeset commit hash
|
|
97
|
+
*/
|
|
98
|
+
export function getLastChangesetCommit(changesetDir = '.changeset') {
|
|
99
|
+
try {
|
|
100
|
+
const changesetPath = join(process.cwd(), changesetDir);
|
|
101
|
+
if (!existsSync(changesetPath)) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const files = readdirSync(changesetPath).filter((f) => f.endsWith('.md') && f !== 'README.md');
|
|
105
|
+
if (files.length === 0) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
// Get the most recent changeset file
|
|
109
|
+
const latestChangeset = files
|
|
110
|
+
.map((f) => ({
|
|
111
|
+
file: f,
|
|
112
|
+
time: execSync(`git log -1 --format=%ct -- ${changesetDir}/${f}`, {
|
|
113
|
+
encoding: 'utf8',
|
|
114
|
+
cwd: process.cwd(),
|
|
115
|
+
}).trim(),
|
|
116
|
+
}))
|
|
117
|
+
.sort((a, b) => Number(b.time) - Number(a.time))[0];
|
|
118
|
+
const commit = execSync(`git log -1 --format=%H -- ${changesetDir}/${latestChangeset.file}`, {
|
|
119
|
+
encoding: 'utf8',
|
|
120
|
+
cwd: process.cwd(),
|
|
121
|
+
}).trim();
|
|
122
|
+
return commit;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the most recent release tag
|
|
130
|
+
*/
|
|
131
|
+
export function getLastReleaseTag() {
|
|
132
|
+
try {
|
|
133
|
+
const tag = execSync('git describe --tags --abbrev=0', {
|
|
134
|
+
encoding: 'utf8',
|
|
135
|
+
cwd: process.cwd(),
|
|
136
|
+
}).trim();
|
|
137
|
+
return tag;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get commit message for a specific hash
|
|
145
|
+
*/
|
|
146
|
+
export function getCommitMessage(hash) {
|
|
147
|
+
try {
|
|
148
|
+
const message = execSync(`git log -1 --format=%B ${hash}`, {
|
|
149
|
+
encoding: 'utf8',
|
|
150
|
+
cwd: process.cwd(),
|
|
151
|
+
}).trim();
|
|
152
|
+
return message;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
throw new Error(`Failed to get commit message for ${hash}: ${error.message}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if we're in a git repository
|
|
160
|
+
*/
|
|
161
|
+
export function isGitRepository() {
|
|
162
|
+
try {
|
|
163
|
+
execSync('git rev-parse --git-dir', {
|
|
164
|
+
encoding: 'utf8',
|
|
165
|
+
cwd: process.cwd(),
|
|
166
|
+
stdio: 'pipe',
|
|
167
|
+
});
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=commits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../../../../src/lib/git/commits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|