@teambit/ci 1.0.533 → 1.0.534
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/ci.docs.mdx +12 -1
- package/dist/ci.docs.mdx +12 -1
- package/dist/ci.main.runtime.d.ts +0 -5
- package/dist/ci.main.runtime.js +56 -49
- package/dist/ci.main.runtime.js.map +1 -1
- package/dist/lane-archive-guard.d.ts +118 -0
- package/dist/lane-archive-guard.js +314 -0
- package/dist/lane-archive-guard.js.map +1 -0
- package/dist/lane-archive-guard.spec.d.ts +1 -0
- package/dist/lane-archive-guard.spec.js +439 -0
- package/dist/lane-archive-guard.spec.js.map +1 -0
- package/dist/lane-cleanup.d.ts +28 -0
- package/dist/lane-cleanup.js +124 -0
- package/dist/lane-cleanup.js.map +1 -0
- package/dist/lane-cleanup.spec.d.ts +1 -0
- package/dist/lane-cleanup.spec.js +167 -0
- package/dist/lane-cleanup.spec.js.map +1 -0
- package/dist/{preview-1787772816768.js → preview-1787776855233.js} +1 -1
- package/package.json +12 -11
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LaneCleanup = void 0;
|
|
7
|
+
function _cli() {
|
|
8
|
+
const data = require("@teambit/cli");
|
|
9
|
+
_cli = function () {
|
|
10
|
+
return data;
|
|
11
|
+
};
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
function _sourceBranchDetector() {
|
|
15
|
+
const data = require("./source-branch-detector");
|
|
16
|
+
_sourceBranchDetector = function () {
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
21
|
+
function _laneArchiveGuard() {
|
|
22
|
+
const data = require("./lane-archive-guard");
|
|
23
|
+
_laneArchiveGuard = function () {
|
|
24
|
+
return data;
|
|
25
|
+
};
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The last step of `bit ci merge`: find the lane the merged pull request came from and archive it —
|
|
30
|
+
* unless the lane still carries components of other scopes that have not reached their own main
|
|
31
|
+
* (see `lane-archive-guard`).
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
class LaneCleanup {
|
|
35
|
+
constructor(deps) {
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Performs lane cleanup by attempting to detect and archive the source lane after a successful
|
|
41
|
+
* merge, even when running on the main branch.
|
|
42
|
+
*/
|
|
43
|
+
async run(currentLane, explicitLaneName, initialCommitSha) {
|
|
44
|
+
const {
|
|
45
|
+
logger
|
|
46
|
+
} = this.deps;
|
|
47
|
+
logger.console((0, _cli().formatTitle)('Lane Cleanup'));
|
|
48
|
+
|
|
49
|
+
// If we already have a current lane, use it
|
|
50
|
+
if (currentLane) {
|
|
51
|
+
logger.console((0, _cli().formatHint)(`Found current lane: ${currentLane.name}`));
|
|
52
|
+
await this.archiveIfFullyReleased(currentLane.toLaneId());
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// If no current lane but explicit lane name provided, try to archive it
|
|
57
|
+
if (explicitLaneName) {
|
|
58
|
+
logger.console((0, _cli().formatHint)(`Using explicitly provided lane name: ${explicitLaneName}`));
|
|
59
|
+
try {
|
|
60
|
+
const laneId = await this.deps.parseLaneId(explicitLaneName);
|
|
61
|
+
await this.archiveIfFullyReleased(laneId);
|
|
62
|
+
return;
|
|
63
|
+
} catch (e) {
|
|
64
|
+
logger.console((0, _cli().formatWarningSummary)(`Failed to parse lane name '${explicitLaneName}': ${e.message}`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Try to auto-detect source branch/lane name using the dedicated detector
|
|
69
|
+
const sourceBranchDetector = new (_sourceBranchDetector().SourceBranchDetector)(logger);
|
|
70
|
+
const sourceBranchName = await sourceBranchDetector.getSourceBranchName(initialCommitSha);
|
|
71
|
+
if (!sourceBranchName) {
|
|
72
|
+
logger.console((0, _cli().formatWarningSummary)('No current lane and unable to detect source branch - skipping lane cleanup'));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const laneIdStr = this.deps.convertBranchToLaneId(sourceBranchName);
|
|
77
|
+
logger.console((0, _cli().formatHint)(`Attempting to archive lane based on source branch: ${sourceBranchName} -> ${laneIdStr}`));
|
|
78
|
+
const laneId = await this.deps.parseLaneId(laneIdStr);
|
|
79
|
+
await this.archiveIfFullyReleased(laneId);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
logger.console((0, _cli().formatWarningSummary)(`Error during lane cleanup for source branch '${sourceBranchName}': ${e.message}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Archives the lane unless it still carries components of other scopes whose lane heads are not
|
|
87
|
+
* on their own main yet. Each scope's repository releases its own slice, so the last release is
|
|
88
|
+
* the one that archives; an earlier archive would strand the other slices on an unreadable lane
|
|
89
|
+
* and make every other repository's `bit ci sync` close its mirror pull request.
|
|
90
|
+
*/
|
|
91
|
+
async archiveIfFullyReleased(laneId) {
|
|
92
|
+
const {
|
|
93
|
+
logger
|
|
94
|
+
} = this.deps;
|
|
95
|
+
const decision = await (0, _laneArchiveGuard().laneArchiveDecision)(laneId, this.deps.defaultScope, this.deps);
|
|
96
|
+
if (decision.summary) {
|
|
97
|
+
logger.console(decision.archive ? (0, _cli().formatSuccessSummary)(decision.summary) : (0, _cli().formatWarningSummary)(decision.summary));
|
|
98
|
+
}
|
|
99
|
+
if (!decision.archive) return 'kept';
|
|
100
|
+
if (decision.fingerprint !== undefined) {
|
|
101
|
+
// an existing lane with no entries fingerprints to '' and still deserves the re-read
|
|
102
|
+
// Re-read right before the forced removal: a writer may have exported to the lane since the
|
|
103
|
+
// decision was made. The window between this read and the removal remains, but it no longer
|
|
104
|
+
// spans the object imports and history checks above. A failed re-read keeps the lane open,
|
|
105
|
+
// like every other unreadable state; a lane that is gone falls through to archiveLane, which
|
|
106
|
+
// reports not-found as it always has.
|
|
107
|
+
let lane;
|
|
108
|
+
try {
|
|
109
|
+
lane = await (0, _laneArchiveGuard().readRemoteLane)(laneId, this.deps);
|
|
110
|
+
} catch (e) {
|
|
111
|
+
logger.console((0, _cli().formatWarningSummary)((0, _laneArchiveGuard().laneUnreadableBeforeArchiveSummary)(laneId.toString(), e.message)));
|
|
112
|
+
return 'kept';
|
|
113
|
+
}
|
|
114
|
+
if (lane && (0, _laneArchiveGuard().laneFingerprint)(lane) !== decision.fingerprint) {
|
|
115
|
+
logger.console((0, _cli().formatWarningSummary)((0, _laneArchiveGuard().laneMovedSummary)(laneId.toString())));
|
|
116
|
+
return 'kept';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return this.deps.archiveLane(laneId.toString());
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.LaneCleanup = LaneCleanup;
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=lane-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_cli","data","require","_sourceBranchDetector","_laneArchiveGuard","LaneCleanup","constructor","deps","run","currentLane","explicitLaneName","initialCommitSha","logger","console","formatTitle","formatHint","name","archiveIfFullyReleased","toLaneId","laneId","parseLaneId","e","formatWarningSummary","message","sourceBranchDetector","SourceBranchDetector","sourceBranchName","getSourceBranchName","laneIdStr","convertBranchToLaneId","decision","laneArchiveDecision","defaultScope","summary","archive","formatSuccessSummary","fingerprint","undefined","lane","readRemoteLane","laneUnreadableBeforeArchiveSummary","toString","laneFingerprint","laneMovedSummary","archiveLane","exports"],"sources":["lane-cleanup.ts"],"sourcesContent":["/**\n * The last step of `bit ci merge`: find the lane the merged pull request came from and archive it —\n * unless the lane still carries components of other scopes that have not reached their own main\n * (see `lane-archive-guard`).\n */\nimport { formatHint, formatSuccessSummary, formatTitle, formatWarningSummary } from '@teambit/cli';\nimport type { Logger } from '@teambit/logger';\nimport type { LaneId } from '@teambit/lane-id';\nimport type { Lane } from '@teambit/objects';\nimport { SourceBranchDetector } from './source-branch-detector';\nimport {\n laneArchiveDecision,\n laneFingerprint,\n laneMovedSummary,\n laneUnreadableBeforeArchiveSummary,\n readRemoteLane,\n} from './lane-archive-guard';\nimport type { LaneArchiveDeps } from './lane-archive-guard';\n\nexport type LaneCleanupDeps = LaneArchiveDeps & {\n logger: Logger;\n defaultScope: string;\n parseLaneId(idStr: string): Promise<LaneId>;\n /** `{defaultScope}/{sanitized branch}` — the lane a branch maps to when nothing else says */\n convertBranchToLaneId(branchName: string): string;\n archiveLane(laneId: string): Promise<'deleted' | 'not-found' | 'error'>;\n};\n\nexport class LaneCleanup {\n constructor(private deps: LaneCleanupDeps) {}\n\n /**\n * Performs lane cleanup by attempting to detect and archive the source lane after a successful\n * merge, even when running on the main branch.\n */\n async run(currentLane: Lane | undefined, explicitLaneName?: string, initialCommitSha?: string) {\n const { logger } = this.deps;\n logger.console(formatTitle('Lane Cleanup'));\n\n // If we already have a current lane, use it\n if (currentLane) {\n logger.console(formatHint(`Found current lane: ${currentLane.name}`));\n await this.archiveIfFullyReleased(currentLane.toLaneId());\n return;\n }\n\n // If no current lane but explicit lane name provided, try to archive it\n if (explicitLaneName) {\n logger.console(formatHint(`Using explicitly provided lane name: ${explicitLaneName}`));\n try {\n const laneId = await this.deps.parseLaneId(explicitLaneName);\n await this.archiveIfFullyReleased(laneId);\n return;\n } catch (e: any) {\n logger.console(formatWarningSummary(`Failed to parse lane name '${explicitLaneName}': ${e.message}`));\n }\n }\n\n // Try to auto-detect source branch/lane name using the dedicated detector\n const sourceBranchDetector = new SourceBranchDetector(logger);\n const sourceBranchName = await sourceBranchDetector.getSourceBranchName(initialCommitSha);\n if (!sourceBranchName) {\n logger.console(\n formatWarningSummary('No current lane and unable to detect source branch - skipping lane cleanup')\n );\n return;\n }\n try {\n const laneIdStr = this.deps.convertBranchToLaneId(sourceBranchName);\n logger.console(\n formatHint(`Attempting to archive lane based on source branch: ${sourceBranchName} -> ${laneIdStr}`)\n );\n const laneId = await this.deps.parseLaneId(laneIdStr);\n await this.archiveIfFullyReleased(laneId);\n } catch (e: any) {\n logger.console(\n formatWarningSummary(`Error during lane cleanup for source branch '${sourceBranchName}': ${e.message}`)\n );\n }\n }\n\n /**\n * Archives the lane unless it still carries components of other scopes whose lane heads are not\n * on their own main yet. Each scope's repository releases its own slice, so the last release is\n * the one that archives; an earlier archive would strand the other slices on an unreadable lane\n * and make every other repository's `bit ci sync` close its mirror pull request.\n */\n private async archiveIfFullyReleased(laneId: LaneId): Promise<'deleted' | 'not-found' | 'error' | 'kept'> {\n const { logger } = this.deps;\n const decision = await laneArchiveDecision(laneId, this.deps.defaultScope, this.deps);\n if (decision.summary) {\n logger.console(\n decision.archive ? formatSuccessSummary(decision.summary) : formatWarningSummary(decision.summary)\n );\n }\n if (!decision.archive) return 'kept';\n if (decision.fingerprint !== undefined) {\n // an existing lane with no entries fingerprints to '' and still deserves the re-read\n // Re-read right before the forced removal: a writer may have exported to the lane since the\n // decision was made. The window between this read and the removal remains, but it no longer\n // spans the object imports and history checks above. A failed re-read keeps the lane open,\n // like every other unreadable state; a lane that is gone falls through to archiveLane, which\n // reports not-found as it always has.\n let lane;\n try {\n lane = await readRemoteLane(laneId, this.deps);\n } catch (e: any) {\n logger.console(formatWarningSummary(laneUnreadableBeforeArchiveSummary(laneId.toString(), e.message)));\n return 'kept';\n }\n if (lane && laneFingerprint(lane) !== decision.fingerprint) {\n logger.console(formatWarningSummary(laneMovedSummary(laneId.toString())));\n return 'kept';\n }\n }\n return this.deps.archiveLane(laneId.toString());\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _chai() {
|
|
4
|
+
const data = require("chai");
|
|
5
|
+
_chai = function () {
|
|
6
|
+
return data;
|
|
7
|
+
};
|
|
8
|
+
return data;
|
|
9
|
+
}
|
|
10
|
+
function _laneCleanup() {
|
|
11
|
+
const data = require("./lane-cleanup");
|
|
12
|
+
_laneCleanup = function () {
|
|
13
|
+
return data;
|
|
14
|
+
};
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
20
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
21
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
22
|
+
describe('LaneCleanup', () => {
|
|
23
|
+
const laneId = {
|
|
24
|
+
scope: 'acme.cards',
|
|
25
|
+
name: 'feature',
|
|
26
|
+
toString: () => 'acme.cards/feature'
|
|
27
|
+
};
|
|
28
|
+
const entry = (id, head) => ({
|
|
29
|
+
id: {
|
|
30
|
+
scope: id.split('/')[0],
|
|
31
|
+
toStringWithoutVersion: () => id,
|
|
32
|
+
changeVersion: () => ({})
|
|
33
|
+
},
|
|
34
|
+
head
|
|
35
|
+
});
|
|
36
|
+
const lane = (heads, hidden = {}, readme) => ({
|
|
37
|
+
components: Object.entries(heads).map(([id, head]) => entry(id, head)),
|
|
38
|
+
updateDependents: Object.entries(hidden).map(([id, head]) => entry(id, head)),
|
|
39
|
+
readme
|
|
40
|
+
});
|
|
41
|
+
function cleanup(lanes, overrides = {}) {
|
|
42
|
+
const calls = [];
|
|
43
|
+
const reads = [...lanes];
|
|
44
|
+
const deps = _objectSpread({
|
|
45
|
+
logger: {
|
|
46
|
+
console: line => calls.push(`log:${line.split('\n')[0]}`)
|
|
47
|
+
},
|
|
48
|
+
defaultScope: 'acme.cards',
|
|
49
|
+
parseLaneId: async () => laneId,
|
|
50
|
+
convertBranchToLaneId: b => `acme.cards/${b}`,
|
|
51
|
+
archiveLane: async id => {
|
|
52
|
+
calls.push(`archive:${id}`);
|
|
53
|
+
return 'deleted';
|
|
54
|
+
},
|
|
55
|
+
readLane: async () => {
|
|
56
|
+
const next = reads.shift() ?? lanes[lanes.length - 1];
|
|
57
|
+
if (next instanceof Error) throw next;
|
|
58
|
+
return next;
|
|
59
|
+
},
|
|
60
|
+
importMainObjects: async () => {},
|
|
61
|
+
getModelComponent: async () => undefined,
|
|
62
|
+
importObjectsByHashes: async () => {},
|
|
63
|
+
releasedHeadByThisRun: () => undefined,
|
|
64
|
+
objects: {},
|
|
65
|
+
warn: () => {}
|
|
66
|
+
}, overrides);
|
|
67
|
+
return {
|
|
68
|
+
run: () => new (_laneCleanup().LaneCleanup)(deps).run(undefined, 'acme.cards/feature'),
|
|
69
|
+
calls
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
it('archives a lane of this scope only when it is unchanged between the decision and the archive', async () => {
|
|
73
|
+
const own = lane({
|
|
74
|
+
'acme.cards/ui/card': 'aaa'
|
|
75
|
+
});
|
|
76
|
+
const {
|
|
77
|
+
run,
|
|
78
|
+
calls
|
|
79
|
+
} = cleanup([own, own]);
|
|
80
|
+
await run();
|
|
81
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.deep.equal(['archive:acme.cards/feature']);
|
|
82
|
+
});
|
|
83
|
+
it('leaves the lane open when it changed between the decision and the archive', async () => {
|
|
84
|
+
const {
|
|
85
|
+
run,
|
|
86
|
+
calls
|
|
87
|
+
} = cleanup([lane({
|
|
88
|
+
'acme.cards/ui/card': 'aaa'
|
|
89
|
+
}), lane({
|
|
90
|
+
'acme.cards/ui/card': 'bbb'
|
|
91
|
+
})]);
|
|
92
|
+
await run();
|
|
93
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
94
|
+
(0, _chai().expect)(calls.join('\n')).to.include('changed while the release was checking it');
|
|
95
|
+
});
|
|
96
|
+
it('leaves the lane open when it cannot be re-read before the archive', async () => {
|
|
97
|
+
const {
|
|
98
|
+
run,
|
|
99
|
+
calls
|
|
100
|
+
} = cleanup([lane({
|
|
101
|
+
'acme.cards/ui/card': 'aaa'
|
|
102
|
+
}), new Error('ECONNRESET')]);
|
|
103
|
+
await run();
|
|
104
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
105
|
+
(0, _chai().expect)(calls.join('\n')).to.include('Could not re-read lane acme.cards/feature before archiving it');
|
|
106
|
+
});
|
|
107
|
+
it('leaves the lane open when only a hidden updateDependents entry moved before the archive', async () => {
|
|
108
|
+
const own = {
|
|
109
|
+
'acme.cards/ui/card': 'aaa'
|
|
110
|
+
};
|
|
111
|
+
// the hidden dependent was tagged by this run at h1; by the archive it has moved to h2
|
|
112
|
+
const {
|
|
113
|
+
run,
|
|
114
|
+
calls
|
|
115
|
+
} = cleanup([lane(own, {
|
|
116
|
+
'acme.cards/ui/row': 'h1'
|
|
117
|
+
}), lane(own, {
|
|
118
|
+
'acme.cards/ui/row': 'h2'
|
|
119
|
+
})], {
|
|
120
|
+
releasedHeadByThisRun: () => 'h1'
|
|
121
|
+
});
|
|
122
|
+
await run();
|
|
123
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
124
|
+
(0, _chai().expect)(calls.join('\n')).to.include('changed while the release was checking it');
|
|
125
|
+
});
|
|
126
|
+
it('re-reads an empty lane too, and leaves it open when work arrived before the archive', async () => {
|
|
127
|
+
const {
|
|
128
|
+
run,
|
|
129
|
+
calls
|
|
130
|
+
} = cleanup([lane({}), lane({
|
|
131
|
+
'acme.cards/ui/card': 'new'
|
|
132
|
+
})]);
|
|
133
|
+
await run();
|
|
134
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
135
|
+
(0, _chai().expect)(calls.join('\n')).to.include('changed while the release was checking it');
|
|
136
|
+
});
|
|
137
|
+
it('leaves the lane open when its readme changed before the archive', async () => {
|
|
138
|
+
const own = {
|
|
139
|
+
'acme.cards/ui/card': 'aaa'
|
|
140
|
+
};
|
|
141
|
+
const {
|
|
142
|
+
run,
|
|
143
|
+
calls
|
|
144
|
+
} = cleanup([lane(own, {}, 'acme.cards/docs/readme@r1'), lane(own, {}, 'acme.cards/docs/readme@r2')]);
|
|
145
|
+
await run();
|
|
146
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
147
|
+
});
|
|
148
|
+
it('leaves the lane open when an entry moved between the visible and hidden buckets before the archive', async () => {
|
|
149
|
+
const {
|
|
150
|
+
run,
|
|
151
|
+
calls
|
|
152
|
+
} = cleanup([lane({
|
|
153
|
+
'acme.cards/ui/card': 'aaa'
|
|
154
|
+
}, {
|
|
155
|
+
'acme.cards/ui/row': 'h1'
|
|
156
|
+
}), lane({
|
|
157
|
+
'acme.cards/ui/card': 'aaa',
|
|
158
|
+
'acme.cards/ui/row': 'h1'
|
|
159
|
+
})], {
|
|
160
|
+
releasedHeadByThisRun: () => 'h1'
|
|
161
|
+
});
|
|
162
|
+
await run();
|
|
163
|
+
(0, _chai().expect)(calls.filter(c => c.startsWith('archive:'))).to.be.empty;
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
//# sourceMappingURL=lane-cleanup.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_chai","data","require","_laneCleanup","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","describe","laneId","scope","name","toString","entry","id","head","split","toStringWithoutVersion","changeVersion","lane","heads","hidden","readme","components","entries","map","updateDependents","cleanup","lanes","overrides","calls","reads","deps","logger","console","line","defaultScope","parseLaneId","convertBranchToLaneId","b","archiveLane","readLane","next","shift","Error","importMainObjects","getModelComponent","undefined","importObjectsByHashes","releasedHeadByThisRun","objects","warn","run","LaneCleanup","it","own","expect","c","startsWith","to","deep","equal","be","empty","join","include"],"sources":["lane-cleanup.spec.ts"],"sourcesContent":["import { expect } from 'chai';\nimport { LaneCleanup } from './lane-cleanup';\nimport type { LaneCleanupDeps } from './lane-cleanup';\n\ndescribe('LaneCleanup', () => {\n const laneId = { scope: 'acme.cards', name: 'feature', toString: () => 'acme.cards/feature' } as any;\n const entry = (id: string, head: string) => ({\n id: { scope: id.split('/')[0], toStringWithoutVersion: () => id, changeVersion: () => ({}) },\n head,\n });\n const lane = (heads: Record<string, string>, hidden: Record<string, string> = {}, readme?: string) =>\n ({\n components: Object.entries(heads).map(([id, head]) => entry(id, head)),\n updateDependents: Object.entries(hidden).map(([id, head]) => entry(id, head)),\n readme,\n }) as any;\n\n function cleanup(lanes: Array<any | Error>, overrides: Partial<LaneCleanupDeps> = {}) {\n const calls: string[] = [];\n const reads = [...lanes];\n const deps: LaneCleanupDeps = {\n logger: { console: (line: string) => calls.push(`log:${line.split('\\n')[0]}`) } as any,\n defaultScope: 'acme.cards',\n parseLaneId: async () => laneId,\n convertBranchToLaneId: (b) => `acme.cards/${b}`,\n archiveLane: async (id) => {\n calls.push(`archive:${id}`);\n return 'deleted';\n },\n readLane: async () => {\n const next = reads.shift() ?? lanes[lanes.length - 1];\n if (next instanceof Error) throw next;\n return next;\n },\n importMainObjects: async () => {},\n getModelComponent: async () => undefined,\n importObjectsByHashes: async () => {},\n releasedHeadByThisRun: () => undefined,\n objects: {} as any,\n warn: () => {},\n ...overrides,\n };\n return { run: () => new LaneCleanup(deps).run(undefined, 'acme.cards/feature'), calls };\n }\n\n it('archives a lane of this scope only when it is unchanged between the decision and the archive', async () => {\n const own = lane({ 'acme.cards/ui/card': 'aaa' });\n const { run, calls } = cleanup([own, own]);\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.deep.equal(['archive:acme.cards/feature']);\n });\n\n it('leaves the lane open when it changed between the decision and the archive', async () => {\n const { run, calls } = cleanup([lane({ 'acme.cards/ui/card': 'aaa' }), lane({ 'acme.cards/ui/card': 'bbb' })]);\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n expect(calls.join('\\n')).to.include('changed while the release was checking it');\n });\n\n it('leaves the lane open when it cannot be re-read before the archive', async () => {\n const { run, calls } = cleanup([lane({ 'acme.cards/ui/card': 'aaa' }), new Error('ECONNRESET')]);\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n expect(calls.join('\\n')).to.include('Could not re-read lane acme.cards/feature before archiving it');\n });\n\n it('leaves the lane open when only a hidden updateDependents entry moved before the archive', async () => {\n const own = { 'acme.cards/ui/card': 'aaa' };\n // the hidden dependent was tagged by this run at h1; by the archive it has moved to h2\n const { run, calls } = cleanup(\n [lane(own, { 'acme.cards/ui/row': 'h1' }), lane(own, { 'acme.cards/ui/row': 'h2' })],\n { releasedHeadByThisRun: () => 'h1' }\n );\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n expect(calls.join('\\n')).to.include('changed while the release was checking it');\n });\n\n it('re-reads an empty lane too, and leaves it open when work arrived before the archive', async () => {\n const { run, calls } = cleanup([lane({}), lane({ 'acme.cards/ui/card': 'new' })]);\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n expect(calls.join('\\n')).to.include('changed while the release was checking it');\n });\n\n it('leaves the lane open when its readme changed before the archive', async () => {\n const own = { 'acme.cards/ui/card': 'aaa' };\n const { run, calls } = cleanup([\n lane(own, {}, 'acme.cards/docs/readme@r1'),\n lane(own, {}, 'acme.cards/docs/readme@r2'),\n ]);\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n });\n\n it('leaves the lane open when an entry moved between the visible and hidden buckets before the archive', async () => {\n const { run, calls } = cleanup(\n [\n lane({ 'acme.cards/ui/card': 'aaa' }, { 'acme.cards/ui/row': 'h1' }),\n lane({ 'acme.cards/ui/card': 'aaa', 'acme.cards/ui/row': 'h1' }),\n ],\n { releasedHeadByThisRun: () => 'h1' }\n );\n await run();\n expect(calls.filter((c) => c.startsWith('archive:'))).to.be.empty;\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
;
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.git_ci@1.0.
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.git_ci@1.0.534/dist/ci.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [];
|
|
5
5
|
export const overview = [overview_0];
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/ci",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.534",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/git/ci",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.git",
|
|
8
8
|
"name": "ci",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.534"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"chalk": "4.1.2",
|
|
@@ -16,32 +16,33 @@
|
|
|
16
16
|
"simple-git": "^3.28.0",
|
|
17
17
|
"fs-extra": "10.0.0",
|
|
18
18
|
"@teambit/harmony": "0.4.12",
|
|
19
|
-
"@teambit/component-id": "1.2.4",
|
|
20
|
-
"@teambit/harmony.modules.concurrency": "0.0.43",
|
|
21
|
-
"@teambit/lane-id": "0.0.312",
|
|
22
|
-
"@teambit/toolbox.promise.map-pool": "0.0.19",
|
|
23
|
-
"@teambit/toolbox.string.random": "0.0.18",
|
|
24
|
-
"@teambit/bit-error": "0.0.404",
|
|
25
|
-
"@teambit/legacy.constants": "0.0.42",
|
|
26
|
-
"@teambit/toolbox.crypto.sha1": "0.0.20",
|
|
27
19
|
"@teambit/cli": "0.0.1378",
|
|
28
20
|
"@teambit/logger": "0.0.1471",
|
|
29
21
|
"@teambit/workspace": "1.0.1136",
|
|
30
22
|
"@teambit/builder": "1.0.1136",
|
|
31
23
|
"@teambit/checkout": "1.0.1138",
|
|
24
|
+
"@teambit/component-id": "1.2.4",
|
|
32
25
|
"@teambit/component.modules.merge-helper": "0.0.94",
|
|
33
26
|
"@teambit/component.snap-distance": "0.0.152",
|
|
34
27
|
"@teambit/config-merger": "0.0.1003",
|
|
35
28
|
"@teambit/dependency-resolver": "1.0.1136",
|
|
36
29
|
"@teambit/export": "1.0.1136",
|
|
30
|
+
"@teambit/harmony.modules.concurrency": "0.0.43",
|
|
37
31
|
"@teambit/importer": "1.0.1136",
|
|
32
|
+
"@teambit/lane-id": "0.0.312",
|
|
38
33
|
"@teambit/lanes": "1.0.1158",
|
|
39
34
|
"@teambit/legacy.consumer-component": "0.0.152",
|
|
35
|
+
"@teambit/legacy.scope-api": "0.0.206",
|
|
40
36
|
"@teambit/objects": "0.0.643",
|
|
41
37
|
"@teambit/snapping": "1.0.1136",
|
|
42
38
|
"@teambit/status": "1.0.1162",
|
|
39
|
+
"@teambit/toolbox.promise.map-pool": "0.0.19",
|
|
40
|
+
"@teambit/toolbox.string.random": "0.0.18",
|
|
41
|
+
"@teambit/bit-error": "0.0.404",
|
|
42
|
+
"@teambit/legacy.constants": "0.0.42",
|
|
43
43
|
"@teambit/legacy.scope": "0.0.151",
|
|
44
|
-
"@teambit/legacy.bit-map": "0.0.208"
|
|
44
|
+
"@teambit/legacy.bit-map": "0.0.208",
|
|
45
|
+
"@teambit/toolbox.crypto.sha1": "0.0.20"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
48
|
"@types/lodash": "4.14.165",
|