@invarn/cibuild 1.6.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1 -1
- package/dist/src/commands/build.d.ts +43 -0
- package/dist/src/commands/build.d.ts.map +1 -1
- package/dist/src/commands/build.js +6 -6
- package/dist/src/commands/build.test.d.ts +13 -0
- package/dist/src/commands/build.test.d.ts.map +1 -0
- package/dist/src/commands/build.test.js +59 -0
- package/dist/src/commands/edit.d.ts +9 -0
- package/dist/src/commands/edit.d.ts.map +1 -1
- package/dist/src/commands/edit.js +5 -4
- package/dist/src/commands/edit.test.d.ts +6 -0
- package/dist/src/commands/edit.test.d.ts.map +1 -0
- package/dist/src/commands/edit.test.js +45 -0
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +3 -1
- package/dist/src/yaml/converter.d.ts.map +1 -1
- package/dist/src/yaml/converter.js +5 -4
- package/dist/src/yaml/converter.test.js +51 -0
- package/dist/src/yaml/meta-helpers.d.ts +19 -0
- package/dist/src/yaml/meta-helpers.d.ts.map +1 -0
- package/dist/src/yaml/meta-helpers.js +20 -0
- package/dist/src/yaml/parser.d.ts.map +1 -1
- package/dist/src/yaml/parser.js +23 -20
- package/dist/src/yaml/parser.test.d.ts +5 -0
- package/dist/src/yaml/parser.test.d.ts.map +1 -0
- package/dist/src/yaml/parser.test.js +83 -0
- package/dist/src/yaml/platform-detector.d.ts +1 -1
- package/dist/src/yaml/platform-detector.d.ts.map +1 -1
- package/dist/src/yaml/platform-detector.js +7 -6
- package/dist/src/yaml/platform-detector.test.js +111 -0
- package/dist/src/yaml/types.d.ts +1 -0
- package/dist/src/yaml/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../../src/yaml/platform-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"platform-detector.d.ts","sourceRoot":"","sources":["../../../src/yaml/platform-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlG,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAS;gBAEjB,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM;IAMhF;;;;;;;;OAQG;IACH,WAAW,IAAI,QAAQ;IAmBvB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC;;;OAGG;IACH,eAAe,IAAI,YAAY;IAQ/B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAchC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAOtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CAQrF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAQ7F"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Platform detection logic for YAML pipelines
|
|
3
3
|
* Implements 3-tier priority detection: stack → platform → auto-detect from steps
|
|
4
4
|
*/
|
|
5
|
+
import { getInvarnMeta } from './meta-helpers.js';
|
|
5
6
|
export class PlatformDetectionError extends Error {
|
|
6
7
|
constructor(message) {
|
|
7
8
|
super(message);
|
|
@@ -25,7 +26,7 @@ export class PlatformDetector {
|
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Detects the platform using 3-tier priority detection
|
|
28
|
-
* Priority 1: meta.cibuild.io.stack
|
|
29
|
+
* Priority 1: meta.invarn.stack (preferred), falling back to meta.cibuild.io.stack
|
|
29
30
|
* Priority 2: meta.platform
|
|
30
31
|
* Priority 3: auto-detect from workflow steps
|
|
31
32
|
*
|
|
@@ -33,9 +34,9 @@ export class PlatformDetector {
|
|
|
33
34
|
* @throws PlatformDetectionError if detection fails or mixed platforms detected
|
|
34
35
|
*/
|
|
35
36
|
getPlatform() {
|
|
36
|
-
// Priority 1: Extract from meta
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
// Priority 1: Extract from stack on the Invarn-owned meta block
|
|
38
|
+
const stack = getInvarnMeta(this.pipeline)?.stack;
|
|
39
|
+
if (stack) {
|
|
39
40
|
const platform = this.extractPlatformFromStack(stack);
|
|
40
41
|
if (platform) {
|
|
41
42
|
return platform;
|
|
@@ -53,14 +54,14 @@ export class PlatformDetector {
|
|
|
53
54
|
* @returns Stack identifier (e.g., 'macos-xcode-26.4') or null
|
|
54
55
|
*/
|
|
55
56
|
getStack() {
|
|
56
|
-
return this.pipeline
|
|
57
|
+
return getInvarnMeta(this.pipeline)?.stack ?? null;
|
|
57
58
|
}
|
|
58
59
|
/**
|
|
59
60
|
* Gets the machine type if specified
|
|
60
61
|
* @returns Machine type ('standard' or 'performance') or null
|
|
61
62
|
*/
|
|
62
63
|
getMachineType() {
|
|
63
|
-
return this.pipeline
|
|
64
|
+
return getInvarnMeta(this.pipeline)?.machine_type ?? null;
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Gets complete platform information
|
|
@@ -46,6 +46,117 @@ describe('PlatformDetector', () => {
|
|
|
46
46
|
expect(detector.getMachineType()).toBe('standard');
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
|
+
describe('Priority 1: Extract from meta.invarn.stack', () => {
|
|
50
|
+
test('should detect macOS from meta.invarn stack when only invarn is present', () => {
|
|
51
|
+
const pipeline = {
|
|
52
|
+
format_version: '4',
|
|
53
|
+
meta: {
|
|
54
|
+
invarn: {
|
|
55
|
+
stack: 'macos-xcode-26.4',
|
|
56
|
+
machine_type: 'standard',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
workflows: {
|
|
60
|
+
primary: {
|
|
61
|
+
steps: [{ 'script@1.0.0': { inputs: { content: 'echo "test"' } } }],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
66
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
67
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
68
|
+
expect(detector.getMachineType()).toBe('standard');
|
|
69
|
+
});
|
|
70
|
+
test('should prefer meta.invarn over meta.cibuild.io when both are present', () => {
|
|
71
|
+
const pipeline = {
|
|
72
|
+
format_version: '4',
|
|
73
|
+
meta: {
|
|
74
|
+
invarn: {
|
|
75
|
+
stack: 'macos-xcode-26.4',
|
|
76
|
+
machine_type: 'performance',
|
|
77
|
+
},
|
|
78
|
+
'cibuild.io': {
|
|
79
|
+
stack: 'linux-docker-android-22.04',
|
|
80
|
+
machine_type: 'standard',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
workflows: {
|
|
84
|
+
primary: {
|
|
85
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
90
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
91
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
92
|
+
expect(detector.getMachineType()).toBe('performance');
|
|
93
|
+
});
|
|
94
|
+
test('should expose meta.invarn fields via getPlatformInfo()', () => {
|
|
95
|
+
const pipeline = {
|
|
96
|
+
format_version: '4',
|
|
97
|
+
meta: {
|
|
98
|
+
invarn: {
|
|
99
|
+
stack: 'linux-docker-android-22.04',
|
|
100
|
+
machine_type: 'performance',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
workflows: {
|
|
104
|
+
primary: {
|
|
105
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
110
|
+
const info = detector.getPlatformInfo();
|
|
111
|
+
expect(info.platform).toBe('linux');
|
|
112
|
+
expect(info.stack).toBe('linux-docker-android-22.04');
|
|
113
|
+
expect(info.machineType).toBe('performance');
|
|
114
|
+
});
|
|
115
|
+
test('should treat a partial meta.invarn block as the sole source — meta.cibuild.io is ignored field-by-field', () => {
|
|
116
|
+
// PRD: "When both are present, meta.invarn wins." Block-level precedence — once
|
|
117
|
+
// meta.invarn appears, the legacy meta.cibuild.io block is treated as stale and ignored.
|
|
118
|
+
const pipeline = {
|
|
119
|
+
format_version: '4',
|
|
120
|
+
meta: {
|
|
121
|
+
invarn: {
|
|
122
|
+
stack: 'macos-xcode-26.4',
|
|
123
|
+
},
|
|
124
|
+
'cibuild.io': {
|
|
125
|
+
stack: 'linux-docker-android-22.04',
|
|
126
|
+
machine_type: 'performance',
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
workflows: {
|
|
130
|
+
primary: {
|
|
131
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
136
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
137
|
+
expect(detector.getMachineType()).toBeNull();
|
|
138
|
+
});
|
|
139
|
+
test('should fall back to meta.cibuild.io when meta.invarn is absent (backward-compat lock-in)', () => {
|
|
140
|
+
const pipeline = {
|
|
141
|
+
format_version: '4',
|
|
142
|
+
meta: {
|
|
143
|
+
'cibuild.io': {
|
|
144
|
+
stack: 'macos-xcode-26.4',
|
|
145
|
+
machine_type: 'performance',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
workflows: {
|
|
149
|
+
primary: {
|
|
150
|
+
steps: [{ 'script@1.0.0': { inputs: {} } }],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
const detector = new PlatformDetector(pipeline, pipeline.workflows.primary, 'primary');
|
|
155
|
+
expect(detector.getPlatform()).toBe('macos');
|
|
156
|
+
expect(detector.getStack()).toBe('macos-xcode-26.4');
|
|
157
|
+
expect(detector.getMachineType()).toBe('performance');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
49
160
|
describe('Priority 2: Use meta.platform field', () => {
|
|
50
161
|
test('should use meta.platform when stack not specified', () => {
|
|
51
162
|
const pipeline = {
|
package/dist/src/yaml/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/yaml/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAGD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAGD,MAAM,WAAW,QAAQ;IACvB,CAAC,mBAAmB,EAAE,MAAM,GAAG;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAGD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAGD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/yaml/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAGD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAGD,MAAM,WAAW,QAAQ;IACvB,CAAC,mBAAmB,EAAE,MAAM,GAAG;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAGD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAGD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|