@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.
@@ -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.533/dist/ci.docs.mdx';
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.533",
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.533"
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",