@stackbilt/git 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/dist/__tests__/risk.test.d.ts +2 -0
- package/dist/__tests__/risk.test.d.ts.map +1 -0
- package/dist/__tests__/risk.test.js +53 -0
- package/dist/__tests__/risk.test.js.map +1 -0
- package/dist/__tests__/trailers.test.d.ts +2 -0
- package/dist/__tests__/trailers.test.d.ts.map +1 -0
- package/dist/__tests__/trailers.test.js +56 -0
- package/dist/__tests__/trailers.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/risk.d.ts +19 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +101 -0
- package/dist/risk.js.map +1 -0
- package/dist/trailers.d.ts +29 -0
- package/dist/trailers.d.ts.map +1 -0
- package/dist/trailers.js +55 -0
- package/dist/trailers.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/risk.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const risk_1 = require("../risk");
|
|
5
|
+
(0, vitest_1.describe)('assessCommitRisk', () => {
|
|
6
|
+
(0, vitest_1.describe)('file-based assessment', () => {
|
|
7
|
+
(0, vitest_1.it)('returns HIGH for worker/handlers/ paths', () => {
|
|
8
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['worker/handlers/auth.ts'], '')).toBe('HIGH');
|
|
9
|
+
});
|
|
10
|
+
(0, vitest_1.it)('returns HIGH for migration files', () => {
|
|
11
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['migrations/001.sql'], '')).toBe('HIGH');
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.it)('returns HIGH for .sql files', () => {
|
|
14
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['schema.sql'], '')).toBe('HIGH');
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('returns MEDIUM for components/ paths', () => {
|
|
17
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['components/Button.tsx'], '')).toBe('MEDIUM');
|
|
18
|
+
});
|
|
19
|
+
(0, vitest_1.it)('returns MEDIUM for lib/ paths', () => {
|
|
20
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['lib/utils.ts'], '')).toBe('MEDIUM');
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)('returns LOW for markdown files', () => {
|
|
23
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['README.md'], '')).toBe('LOW');
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('returns LOW for json files', () => {
|
|
26
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['package.json'], '')).toBe('LOW');
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('HIGH takes precedence over MEDIUM', () => {
|
|
29
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(['worker/handlers/x.ts', 'components/y.tsx'], '')).toBe('HIGH');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.describe)('message-based fallback', () => {
|
|
33
|
+
(0, vitest_1.it)('returns HIGH for "migration" keyword', () => {
|
|
34
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(undefined, 'run database migration')).toBe('HIGH');
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('returns HIGH for "security" keyword', () => {
|
|
37
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(undefined, 'fix security vulnerability')).toBe('HIGH');
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)('returns MEDIUM for "refactor" keyword', () => {
|
|
40
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(undefined, 'refactor auth module')).toBe('MEDIUM');
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('returns MEDIUM for "component" keyword', () => {
|
|
43
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(undefined, 'update component styles')).toBe('MEDIUM');
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('returns LOW for generic messages', () => {
|
|
46
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)(undefined, 'fix typo')).toBe('LOW');
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)('falls back to message when files array is empty', () => {
|
|
49
|
+
(0, vitest_1.expect)((0, risk_1.assessCommitRisk)([], 'run database migration')).toBe('HIGH');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=risk.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.test.js","sourceRoot":"","sources":["../../src/__tests__/risk.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/trailers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const trailers_1 = require("../trailers");
|
|
5
|
+
(0, vitest_1.describe)('parseTrailersFromMessage', () => {
|
|
6
|
+
(0, vitest_1.it)('parses Governed-By trailer', () => {
|
|
7
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('abc123', 'feat: add auth\n\nGoverned-By: ADR-001');
|
|
8
|
+
(0, vitest_1.expect)(result.governedBy).toEqual([{ commitSha: 'abc123', reference: 'ADR-001' }]);
|
|
9
|
+
(0, vitest_1.expect)(result.resolvesRequest).toEqual([]);
|
|
10
|
+
});
|
|
11
|
+
(0, vitest_1.it)('parses Resolves-Request trailer', () => {
|
|
12
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('def456', 'fix: resolve issue\n\nResolves-Request: REQ-042');
|
|
13
|
+
(0, vitest_1.expect)(result.resolvesRequest).toEqual([{ commitSha: 'def456', reference: 'REQ-042' }]);
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('parses both trailers from same message', () => {
|
|
16
|
+
const message = 'feat: migration\n\nGoverned-By: ADR-003\nResolves-Request: REQ-010';
|
|
17
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('aaa', message);
|
|
18
|
+
(0, vitest_1.expect)(result.governedBy).toHaveLength(1);
|
|
19
|
+
(0, vitest_1.expect)(result.resolvesRequest).toHaveLength(1);
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('is case-insensitive', () => {
|
|
22
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('bbb', 'chore\n\ngoverned-by: ADR-005');
|
|
23
|
+
(0, vitest_1.expect)(result.governedBy).toHaveLength(1);
|
|
24
|
+
(0, vitest_1.expect)(result.governedBy[0].reference).toBe('ADR-005');
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('returns empty arrays when no trailers present', () => {
|
|
27
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('ccc', 'fix: typo in readme');
|
|
28
|
+
(0, vitest_1.expect)(result.governedBy).toEqual([]);
|
|
29
|
+
(0, vitest_1.expect)(result.resolvesRequest).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('handles multiple Governed-By trailers', () => {
|
|
32
|
+
const message = 'feat: big change\n\nGoverned-By: ADR-001\nGoverned-By: ADR-002';
|
|
33
|
+
const result = (0, trailers_1.parseTrailersFromMessage)('ddd', message);
|
|
34
|
+
(0, vitest_1.expect)(result.governedBy).toHaveLength(2);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.describe)('parseAllTrailers', () => {
|
|
38
|
+
(0, vitest_1.it)('combines trailers from multiple commits', () => {
|
|
39
|
+
const commits = [
|
|
40
|
+
{ sha: 'a1', message: 'feat: x\n\nGoverned-By: ADR-001', author: 'dev', timestamp: '2025-01-01' },
|
|
41
|
+
{ sha: 'b2', message: 'fix: y\n\nResolves-Request: REQ-001', author: 'dev', timestamp: '2025-01-02' },
|
|
42
|
+
];
|
|
43
|
+
const result = (0, trailers_1.parseAllTrailers)(commits);
|
|
44
|
+
(0, vitest_1.expect)(result.governedBy).toHaveLength(1);
|
|
45
|
+
(0, vitest_1.expect)(result.resolvesRequest).toHaveLength(1);
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('returns empty arrays for commits with no trailers', () => {
|
|
48
|
+
const commits = [
|
|
49
|
+
{ sha: 'c3', message: 'chore: update deps', author: 'dev', timestamp: '2025-01-01' },
|
|
50
|
+
];
|
|
51
|
+
const result = (0, trailers_1.parseAllTrailers)(commits);
|
|
52
|
+
(0, vitest_1.expect)(result.governedBy).toEqual([]);
|
|
53
|
+
(0, vitest_1.expect)(result.resolvesRequest).toEqual([]);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=trailers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailers.test.js","sourceRoot":"","sources":["../../src/__tests__/trailers.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateSuggestions = exports.assessCommitRisk = exports.parseAllTrailers = exports.parseTrailersFromMessage = void 0;
|
|
4
|
+
var trailers_1 = require("./trailers");
|
|
5
|
+
Object.defineProperty(exports, "parseTrailersFromMessage", { enumerable: true, get: function () { return trailers_1.parseTrailersFromMessage; } });
|
|
6
|
+
Object.defineProperty(exports, "parseAllTrailers", { enumerable: true, get: function () { return trailers_1.parseAllTrailers; } });
|
|
7
|
+
var risk_1 = require("./risk");
|
|
8
|
+
Object.defineProperty(exports, "assessCommitRisk", { enumerable: true, get: function () { return risk_1.assessCommitRisk; } });
|
|
9
|
+
Object.defineProperty(exports, "generateSuggestions", { enumerable: true, get: function () { return risk_1.generateSuggestions; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAwE;AAA/D,oHAAA,wBAAwB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AACnD,+BAA+D;AAAtD,wGAAA,gBAAgB,OAAA;AAAE,2GAAA,mBAAmB,OAAA"}
|
package/dist/risk.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commit Risk Assessment
|
|
3
|
+
*
|
|
4
|
+
* Assesses the risk level of commits based on changed files and message content.
|
|
5
|
+
* Used to determine which commits should have governance trailers.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from Charter Cloud (RFC-2025-004).
|
|
8
|
+
*/
|
|
9
|
+
import type { CommitRiskLevel, GitValidationTrailers, UnlinkedCommit } from '@stackbilt/types';
|
|
10
|
+
/**
|
|
11
|
+
* Assess the risk level of a commit based on changed files.
|
|
12
|
+
* Falls back to commit message keyword analysis if no files provided.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assessCommitRisk(filesChanged: string[] | undefined, commitMessage: string): CommitRiskLevel;
|
|
15
|
+
/**
|
|
16
|
+
* Generate overall suggestions based on validation results.
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateSuggestions(trailers: GitValidationTrailers, unlinkedCommits: UnlinkedCommit[], totalCommits: number): string[];
|
|
19
|
+
//# sourceMappingURL=risk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiC/F;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,EAClC,aAAa,EAAE,MAAM,GACpB,eAAe,CA4BjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,EAAE,cAAc,EAAE,EACjC,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CA+BV"}
|
package/dist/risk.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Commit Risk Assessment
|
|
4
|
+
*
|
|
5
|
+
* Assesses the risk level of commits based on changed files and message content.
|
|
6
|
+
* Used to determine which commits should have governance trailers.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from Charter Cloud (RFC-2025-004).
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.assessCommitRisk = assessCommitRisk;
|
|
12
|
+
exports.generateSuggestions = generateSuggestions;
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Risk Patterns (configurable per-project in future)
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const HIGH_RISK_PATTERNS = [
|
|
17
|
+
/^worker\/handlers\//,
|
|
18
|
+
/^worker\/services\//,
|
|
19
|
+
/^worker\/mcp\//,
|
|
20
|
+
/^migrations\//,
|
|
21
|
+
/\.sql$/
|
|
22
|
+
];
|
|
23
|
+
const MEDIUM_RISK_PATTERNS = [
|
|
24
|
+
/^worker\/lib\//,
|
|
25
|
+
/^worker\/utils\//,
|
|
26
|
+
/^components\//,
|
|
27
|
+
/^context\//,
|
|
28
|
+
/^lib\//
|
|
29
|
+
];
|
|
30
|
+
const LOW_RISK_PATTERNS = [
|
|
31
|
+
/^templates\//,
|
|
32
|
+
/\.md$/,
|
|
33
|
+
/\.json$/,
|
|
34
|
+
/\.ya?ml$/,
|
|
35
|
+
/^\.github\//,
|
|
36
|
+
/^test/i,
|
|
37
|
+
/\.test\./,
|
|
38
|
+
/\.spec\./
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Assess the risk level of a commit based on changed files.
|
|
42
|
+
* Falls back to commit message keyword analysis if no files provided.
|
|
43
|
+
*/
|
|
44
|
+
function assessCommitRisk(filesChanged, commitMessage) {
|
|
45
|
+
if (!filesChanged || filesChanged.length === 0) {
|
|
46
|
+
const msg = commitMessage.toLowerCase();
|
|
47
|
+
if (msg.includes('migration') || msg.includes('handler') || msg.includes('security')) {
|
|
48
|
+
return 'HIGH';
|
|
49
|
+
}
|
|
50
|
+
if (msg.includes('component') || msg.includes('refactor') || msg.includes('lib')) {
|
|
51
|
+
return 'MEDIUM';
|
|
52
|
+
}
|
|
53
|
+
return 'LOW';
|
|
54
|
+
}
|
|
55
|
+
let hasHigh = false;
|
|
56
|
+
let hasMedium = false;
|
|
57
|
+
for (const file of filesChanged) {
|
|
58
|
+
if (HIGH_RISK_PATTERNS.some(p => p.test(file))) {
|
|
59
|
+
hasHigh = true;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (MEDIUM_RISK_PATTERNS.some(p => p.test(file))) {
|
|
63
|
+
hasMedium = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (hasHigh)
|
|
67
|
+
return 'HIGH';
|
|
68
|
+
if (hasMedium)
|
|
69
|
+
return 'MEDIUM';
|
|
70
|
+
return 'LOW';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generate overall suggestions based on validation results.
|
|
74
|
+
*/
|
|
75
|
+
function generateSuggestions(trailers, unlinkedCommits, totalCommits) {
|
|
76
|
+
const suggestions = [];
|
|
77
|
+
const linkedCommits = new Set();
|
|
78
|
+
trailers.governed_by.forEach(t => linkedCommits.add(t.commit_sha));
|
|
79
|
+
trailers.resolves_request.forEach(t => linkedCommits.add(t.commit_sha));
|
|
80
|
+
const coverage = linkedCommits.size / totalCommits;
|
|
81
|
+
if (coverage === 0) {
|
|
82
|
+
suggestions.push('No commits have governance trailers. Consider linking significant changes to ADRs.');
|
|
83
|
+
}
|
|
84
|
+
else if (coverage < 0.5) {
|
|
85
|
+
suggestions.push(`Only ${Math.round(coverage * 100)}% of commits have governance trailers.`);
|
|
86
|
+
}
|
|
87
|
+
const invalidGoverned = trailers.governed_by.filter(t => !t.valid);
|
|
88
|
+
const invalidRequests = trailers.resolves_request.filter(t => !t.valid);
|
|
89
|
+
if (invalidGoverned.length > 0) {
|
|
90
|
+
suggestions.push(`${invalidGoverned.length} Governed-By reference(s) could not be resolved.`);
|
|
91
|
+
}
|
|
92
|
+
if (invalidRequests.length > 0) {
|
|
93
|
+
suggestions.push(`${invalidRequests.length} Resolves-Request reference(s) could not be resolved.`);
|
|
94
|
+
}
|
|
95
|
+
const highRiskUnlinked = unlinkedCommits.filter(c => c.risk_level === 'HIGH');
|
|
96
|
+
if (highRiskUnlinked.length > 0) {
|
|
97
|
+
suggestions.push(`${highRiskUnlinked.length} HIGH-risk commit(s) lack governance trailers.`);
|
|
98
|
+
}
|
|
99
|
+
return suggestions;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=risk.js.map
|
package/dist/risk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../src/risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Trailer Parsing
|
|
3
|
+
*
|
|
4
|
+
* Parses governance trailers from commit messages.
|
|
5
|
+
* Supports: Governed-By, Resolves-Request
|
|
6
|
+
*
|
|
7
|
+
* Extracted from Charter Cloud (RFC-2025-004).
|
|
8
|
+
*/
|
|
9
|
+
import type { GitCommit } from '@stackbilt/types';
|
|
10
|
+
interface ParsedTrailers {
|
|
11
|
+
governedBy: Array<{
|
|
12
|
+
commitSha: string;
|
|
13
|
+
reference: string;
|
|
14
|
+
}>;
|
|
15
|
+
resolvesRequest: Array<{
|
|
16
|
+
commitSha: string;
|
|
17
|
+
reference: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse governance trailers from a single commit message.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseTrailersFromMessage(commitSha: string, message: string): ParsedTrailers;
|
|
24
|
+
/**
|
|
25
|
+
* Parse trailers from all commits in a PR.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseAllTrailers(commits: GitCommit[]): ParsedTrailers;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=trailers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailers.d.ts","sourceRoot":"","sources":["../src/trailers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,UAAU,cAAc;IACtB,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CA2B3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,cAAc,CAarE"}
|
package/dist/trailers.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git Trailer Parsing
|
|
4
|
+
*
|
|
5
|
+
* Parses governance trailers from commit messages.
|
|
6
|
+
* Supports: Governed-By, Resolves-Request
|
|
7
|
+
*
|
|
8
|
+
* Extracted from Charter Cloud (RFC-2025-004).
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.parseTrailersFromMessage = parseTrailersFromMessage;
|
|
12
|
+
exports.parseAllTrailers = parseAllTrailers;
|
|
13
|
+
/**
|
|
14
|
+
* Parse governance trailers from a single commit message.
|
|
15
|
+
*/
|
|
16
|
+
function parseTrailersFromMessage(commitSha, message) {
|
|
17
|
+
const result = {
|
|
18
|
+
governedBy: [],
|
|
19
|
+
resolvesRequest: []
|
|
20
|
+
};
|
|
21
|
+
const lines = message.split('\n');
|
|
22
|
+
for (const line of lines) {
|
|
23
|
+
const governedByMatch = line.match(/^Governed-By:\s*(.+)$/i);
|
|
24
|
+
if (governedByMatch) {
|
|
25
|
+
result.governedBy.push({
|
|
26
|
+
commitSha,
|
|
27
|
+
reference: governedByMatch[1].trim()
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const resolvesMatch = line.match(/^Resolves-Request:\s*(.+)$/i);
|
|
31
|
+
if (resolvesMatch) {
|
|
32
|
+
result.resolvesRequest.push({
|
|
33
|
+
commitSha,
|
|
34
|
+
reference: resolvesMatch[1].trim()
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse trailers from all commits in a PR.
|
|
42
|
+
*/
|
|
43
|
+
function parseAllTrailers(commits) {
|
|
44
|
+
const combined = {
|
|
45
|
+
governedBy: [],
|
|
46
|
+
resolvesRequest: []
|
|
47
|
+
};
|
|
48
|
+
for (const commit of commits) {
|
|
49
|
+
const parsed = parseTrailersFromMessage(commit.sha, commit.message);
|
|
50
|
+
combined.governedBy.push(...parsed.governedBy);
|
|
51
|
+
combined.resolvesRequest.push(...parsed.resolvesRequest);
|
|
52
|
+
}
|
|
53
|
+
return combined;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=trailers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailers.js","sourceRoot":"","sources":["../src/trailers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAYH,4DA2BC;AAKD,4CAaC;AAhDD;;GAEG;AACH,SAAgB,wBAAwB,CAAC,SAAiB,EAAE,OAAe;IACzE,MAAM,MAAM,GAAmB;QAC7B,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;KACpB,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7D,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gBACrB,SAAS;gBACT,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aACrC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAChE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,SAAS;gBACT,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,OAAoB;IACnD,MAAM,QAAQ,GAAmB;QAC/B,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;KACpB,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACpE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/C,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stackbilt/git",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Git trailer parsing, commit risk scoring, and PR validation",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/Stackbilt-dev/charter.git",
|
|
24
|
+
"directory": "packages/git"
|
|
25
|
+
},
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/Stackbilt-dev/charter/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/Stackbilt-dev/charter#readme",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@stackbilt/types": "workspace:*"
|
|
32
|
+
},
|
|
33
|
+
"license": "Apache-2.0"
|
|
34
|
+
}
|