@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.
Files changed (117) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +10 -0
  3. package/README.md +560 -0
  4. package/dist/bin/release-automation.d.ts +3 -0
  5. package/dist/bin/release-automation.d.ts.map +1 -0
  6. package/dist/bin/release-automation.js +7 -0
  7. package/dist/bin/release-automation.js.map +1 -0
  8. package/dist/src/cli/commands/check.d.ts +3 -0
  9. package/dist/src/cli/commands/check.d.ts.map +1 -0
  10. package/dist/src/cli/commands/check.js +77 -0
  11. package/dist/src/cli/commands/check.js.map +1 -0
  12. package/dist/src/cli/commands/generate.d.ts +3 -0
  13. package/dist/src/cli/commands/generate.d.ts.map +1 -0
  14. package/dist/src/cli/commands/generate.js +100 -0
  15. package/dist/src/cli/commands/generate.js.map +1 -0
  16. package/dist/src/cli/commands/index.d.ts +3 -0
  17. package/dist/src/cli/commands/index.d.ts.map +1 -0
  18. package/dist/src/cli/commands/index.js +3 -0
  19. package/dist/src/cli/commands/index.js.map +1 -0
  20. package/dist/src/cli/index.d.ts +2 -0
  21. package/dist/src/cli/index.d.ts.map +1 -0
  22. package/dist/src/cli/index.js +15 -0
  23. package/dist/src/cli/index.js.map +1 -0
  24. package/dist/src/cli/utils/exit-codes.d.ts +11 -0
  25. package/dist/src/cli/utils/exit-codes.d.ts.map +1 -0
  26. package/dist/src/cli/utils/exit-codes.js +10 -0
  27. package/dist/src/cli/utils/exit-codes.js.map +1 -0
  28. package/dist/src/cli/utils/index.d.ts +3 -0
  29. package/dist/src/cli/utils/index.d.ts.map +1 -0
  30. package/dist/src/cli/utils/index.js +3 -0
  31. package/dist/src/cli/utils/index.js.map +1 -0
  32. package/dist/src/cli/utils/logger.d.ts +6 -0
  33. package/dist/src/cli/utils/logger.d.ts.map +1 -0
  34. package/dist/src/cli/utils/logger.js +17 -0
  35. package/dist/src/cli/utils/logger.js.map +1 -0
  36. package/dist/src/index.d.ts +3 -0
  37. package/dist/src/index.d.ts.map +1 -0
  38. package/dist/src/index.js +3 -0
  39. package/dist/src/index.js.map +1 -0
  40. package/dist/src/lib/changelog/generator.d.ts +10 -0
  41. package/dist/src/lib/changelog/generator.d.ts.map +1 -0
  42. package/dist/src/lib/changelog/generator.js +47 -0
  43. package/dist/src/lib/changelog/generator.js.map +1 -0
  44. package/dist/src/lib/changelog/index.d.ts +3 -0
  45. package/dist/src/lib/changelog/index.d.ts.map +1 -0
  46. package/dist/src/lib/changelog/index.js +3 -0
  47. package/dist/src/lib/changelog/index.js.map +1 -0
  48. package/dist/src/lib/changelog/providers/anthropic-api.d.ts +9 -0
  49. package/dist/src/lib/changelog/providers/anthropic-api.d.ts.map +1 -0
  50. package/dist/src/lib/changelog/providers/anthropic-api.js +77 -0
  51. package/dist/src/lib/changelog/providers/anthropic-api.js.map +1 -0
  52. package/dist/src/lib/changelog/providers/claude-cli.d.ts +7 -0
  53. package/dist/src/lib/changelog/providers/claude-cli.d.ts.map +1 -0
  54. package/dist/src/lib/changelog/providers/claude-cli.js +63 -0
  55. package/dist/src/lib/changelog/providers/claude-cli.js.map +1 -0
  56. package/dist/src/lib/changelog/providers/index.d.ts +4 -0
  57. package/dist/src/lib/changelog/providers/index.d.ts.map +1 -0
  58. package/dist/src/lib/changelog/providers/index.js +4 -0
  59. package/dist/src/lib/changelog/providers/index.js.map +1 -0
  60. package/dist/src/lib/changelog/providers/simple.d.ts +7 -0
  61. package/dist/src/lib/changelog/providers/simple.d.ts.map +1 -0
  62. package/dist/src/lib/changelog/providers/simple.js +33 -0
  63. package/dist/src/lib/changelog/providers/simple.js.map +1 -0
  64. package/dist/src/lib/changeset/index.d.ts +4 -0
  65. package/dist/src/lib/changeset/index.d.ts.map +1 -0
  66. package/dist/src/lib/changeset/index.js +4 -0
  67. package/dist/src/lib/changeset/index.js.map +1 -0
  68. package/dist/src/lib/changeset/parser.d.ts +18 -0
  69. package/dist/src/lib/changeset/parser.d.ts.map +1 -0
  70. package/dist/src/lib/changeset/parser.js +52 -0
  71. package/dist/src/lib/changeset/parser.js.map +1 -0
  72. package/dist/src/lib/changeset/semver.d.ts +15 -0
  73. package/dist/src/lib/changeset/semver.d.ts.map +1 -0
  74. package/dist/src/lib/changeset/semver.js +29 -0
  75. package/dist/src/lib/changeset/semver.js.map +1 -0
  76. package/dist/src/lib/changeset/writer.d.ts +17 -0
  77. package/dist/src/lib/changeset/writer.d.ts.map +1 -0
  78. package/dist/src/lib/changeset/writer.js +33 -0
  79. package/dist/src/lib/changeset/writer.js.map +1 -0
  80. package/dist/src/lib/config/index.d.ts +3 -0
  81. package/dist/src/lib/config/index.d.ts.map +1 -0
  82. package/dist/src/lib/config/index.js +2 -0
  83. package/dist/src/lib/config/index.js.map +1 -0
  84. package/dist/src/lib/config/loader.d.ts +23 -0
  85. package/dist/src/lib/config/loader.d.ts.map +1 -0
  86. package/dist/src/lib/config/loader.js +89 -0
  87. package/dist/src/lib/config/loader.js.map +1 -0
  88. package/dist/src/lib/config/types.d.ts +6 -0
  89. package/dist/src/lib/config/types.d.ts.map +1 -0
  90. package/dist/src/lib/config/types.js +2 -0
  91. package/dist/src/lib/config/types.js.map +1 -0
  92. package/dist/src/lib/git/commits.d.ts +33 -0
  93. package/dist/src/lib/git/commits.d.ts.map +1 -0
  94. package/dist/src/lib/git/commits.js +174 -0
  95. package/dist/src/lib/git/commits.js.map +1 -0
  96. package/dist/src/lib/git/index.d.ts +2 -0
  97. package/dist/src/lib/git/index.d.ts.map +1 -0
  98. package/dist/src/lib/git/index.js +2 -0
  99. package/dist/src/lib/git/index.js.map +1 -0
  100. package/dist/src/lib/index.d.ts +6 -0
  101. package/dist/src/lib/index.d.ts.map +1 -0
  102. package/dist/src/lib/index.js +6 -0
  103. package/dist/src/lib/index.js.map +1 -0
  104. package/dist/src/lib/packages/discovery.d.ts +18 -0
  105. package/dist/src/lib/packages/discovery.d.ts.map +1 -0
  106. package/dist/src/lib/packages/discovery.js +76 -0
  107. package/dist/src/lib/packages/discovery.js.map +1 -0
  108. package/dist/src/lib/packages/index.d.ts +2 -0
  109. package/dist/src/lib/packages/index.d.ts.map +1 -0
  110. package/dist/src/lib/packages/index.js +2 -0
  111. package/dist/src/lib/packages/index.js.map +1 -0
  112. package/dist/src/types/index.d.ts +54 -0
  113. package/dist/src/types/index.d.ts.map +1 -0
  114. package/dist/src/types/index.js +2 -0
  115. package/dist/src/types/index.js.map +1 -0
  116. package/dist/tsconfig.tsbuildinfo +1 -0
  117. 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,3 @@
1
+ export { getDefaultConfig, loadConfig, loadConfigFile, loadConfigFromEnv, mergeConfig } from './loader.js';
2
+ export type { ConfigFile, ReleaseConfig } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { getDefaultConfig, loadConfig, loadConfigFile, loadConfigFromEnv, mergeConfig } from './loader.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ import type { ReleaseConfig } from '../../types/index.js';
2
+ export type { ReleaseConfig };
3
+ export interface ConfigFile {
4
+ releaseAutomation?: Partial<ReleaseConfig>;
5
+ }
6
+ //# sourceMappingURL=types.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ export { getAllCommits, getCommitMessage, getCommitsInRange, getCommitsSinceLastChangeset, getCommitsSinceLastTag, getLastChangesetCommit, getLastReleaseTag, isGitRepository, } from './commits.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { getAllCommits, getCommitMessage, getCommitsInRange, getCommitsSinceLastChangeset, getCommitsSinceLastTag, getLastChangesetCommit, getLastReleaseTag, isGitRepository, } from './commits.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ export * from './changelog/index.js';
2
+ export * from './changeset/index.js';
3
+ export * from './config/index.js';
4
+ export * from './git/index.js';
5
+ export * from './packages/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ export * from './changelog/index.js';
2
+ export * from './changeset/index.js';
3
+ export * from './config/index.js';
4
+ export * from './git/index.js';
5
+ export * from './packages/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -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"}