@invarn/cibuild 2.7.6 → 2.7.7

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 (32) hide show
  1. package/dist/cli.cjs +9 -9
  2. package/dist/src/commands/run.d.ts.map +1 -1
  3. package/dist/src/commands/run.js +1 -1
  4. package/dist/src/runner.d.ts +15 -1
  5. package/dist/src/runner.d.ts.map +1 -1
  6. package/dist/src/runner.js +24 -1
  7. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +18 -0
  8. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +1 -0
  9. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +66 -0
  10. package/dist/src/yaml/converter.d.ts +22 -0
  11. package/dist/src/yaml/converter.d.ts.map +1 -1
  12. package/dist/src/yaml/converter.js +26 -0
  13. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +16 -0
  14. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +1 -0
  15. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +126 -0
  16. package/dist/src/yaml/step-validator.d.ts.map +1 -1
  17. package/dist/src/yaml/step-validator.js +6 -2
  18. package/dist/src/yaml/steps/android.js +3 -3
  19. package/dist/src/yaml/steps/base.d.ts +6 -1
  20. package/dist/src/yaml/steps/base.d.ts.map +1 -1
  21. package/dist/src/yaml/steps/base.js +6 -1
  22. package/dist/src/yaml/steps/bitrise-android-tools.js +1 -1
  23. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +16 -0
  24. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +1 -0
  25. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +127 -0
  26. package/dist/src/yaml/steps/git-clone.d.ts +1 -1
  27. package/dist/src/yaml/steps/git-clone.d.ts.map +1 -1
  28. package/dist/src/yaml/steps/git-clone.js +56 -2
  29. package/dist/src/yaml/steps/xcode.js +5 -5
  30. package/dist/src/yaml/validation-types.d.ts +7 -1
  31. package/dist/src/yaml/validation-types.d.ts.map +1 -1
  32. package/package.json +1 -1
@@ -0,0 +1,127 @@
1
+ /**
2
+ * `git-clone` reads none of its inputs, and said nothing about it.
3
+ *
4
+ * The step does not clone. By the time it runs, the runner has already checked
5
+ * the dispatched ref out — `git-clone` locates that checkout and republishes
6
+ * its commit metadata. `execute()` takes `_inputs` and never opens it. So
7
+ * `branch: release/2.0` parsed, validated, ran green, and built `main`; a
8
+ * Bitrise-migrated `git-clone@8` carried `clone_depth: 0`, `fetch_tags` and
9
+ * `submodule_update_depth` through the converter and into nothing.
10
+ *
11
+ * Accepting configuration that has no effect is the defect. The step now names
12
+ * every input it was handed, at warning severity: every pipeline written to
13
+ * date carries some of these, and all of them must keep building.
14
+ */
15
+ import { describe, test, expect } from '@jest/globals';
16
+ import './index.js';
17
+ import { GitCloneStepExecutor } from './git-clone.js';
18
+ import { testConfig } from './test-config.js';
19
+ import { StepValidator } from '../step-validator.js';
20
+ import { loadConfig } from '../../config.js';
21
+ const config = loadConfig();
22
+ /** A one-step workflow, so the only issues are `git-clone`'s. */
23
+ function clonePipeline(inputs) {
24
+ return {
25
+ format_version: '1',
26
+ meta: { invarn: { stack: 'macos-xcode-26.4' } },
27
+ workflows: {
28
+ primary: {
29
+ steps: [{ 'git-clone@1.0.0': { inputs } }],
30
+ },
31
+ },
32
+ };
33
+ }
34
+ async function validate(inputs) {
35
+ const validator = new StepValidator(clonePipeline(inputs), 'primary', config);
36
+ return validator.validateWorkflow();
37
+ }
38
+ function warningsOf(issues) {
39
+ return issues.filter((i) => i.requirement.severity === 'warning');
40
+ }
41
+ /** Everything the warning puts in front of a reader, as one string. */
42
+ function textOf(issue) {
43
+ return [
44
+ issue.requirement.description,
45
+ issue.result.message ?? '',
46
+ issue.requirement.hint ?? '',
47
+ ].join('\n');
48
+ }
49
+ describe('git-clone names the inputs it ignores', () => {
50
+ test('a step given nothing says nothing', async () => {
51
+ const result = await validate({});
52
+ expect(warningsOf(result.issues)).toHaveLength(0);
53
+ expect(result.counts.warnings).toBe(0);
54
+ });
55
+ test('one warning names every input present', async () => {
56
+ const result = await validate({ branch: 'release/2.0', clone_depth: 50 });
57
+ const warnings = warningsOf(result.issues);
58
+ expect(warnings).toHaveLength(1);
59
+ const text = textOf(warnings[0]);
60
+ expect(text).toContain('branch');
61
+ expect(text).toContain('clone_depth');
62
+ });
63
+ test('each of the five declared inputs raises the warning on its own', async () => {
64
+ for (const input of [
65
+ 'repository',
66
+ 'clone_url',
67
+ 'branch',
68
+ 'clone_depth',
69
+ 'clone_into_dir',
70
+ ]) {
71
+ const result = await validate({ [input]: 'anything' });
72
+ const warnings = warningsOf(result.issues);
73
+ expect(warnings).toHaveLength(1);
74
+ expect(textOf(warnings[0])).toContain(input);
75
+ }
76
+ });
77
+ test('an input the converter migrated from Bitrise is named too', async () => {
78
+ // `git-clone@8`'s inputs survive the name split and land in `inputs`
79
+ // unchanged. They are ignored exactly as thoroughly as the declared five,
80
+ // so a warning that only knew the five would let these vanish quietly.
81
+ const result = await validate({ fetch_tags: 'yes', submodule_update_depth: 1 });
82
+ const warnings = warningsOf(result.issues);
83
+ expect(warnings).toHaveLength(1);
84
+ const text = textOf(warnings[0]);
85
+ expect(text).toContain('fetch_tags');
86
+ expect(text).toContain('submodule_update_depth');
87
+ });
88
+ test('the warning does not fail validation', async () => {
89
+ const result = await validate({ branch: 'main', clone_depth: 1 });
90
+ // Every curated template and every pipeline created before this release
91
+ // carries these. An error would stop all of them building.
92
+ expect(result.valid).toBe(true);
93
+ expect(result.counts.errors).toBe(0);
94
+ });
95
+ test('the message names the mechanism rather than calling the inputs deprecated', async () => {
96
+ const result = await validate({ branch: 'main' });
97
+ const text = textOf(warningsOf(result.issues)[0]);
98
+ // What the runner does instead — a reader must be able to act on this
99
+ // without already knowing how the checkout works.
100
+ expect(text).toMatch(/runner/i);
101
+ expect(text).toMatch(/dispatched/i);
102
+ // Since the runner learned to recurse submodules, the message can say so
103
+ // honestly — and must not overclaim the rest, which is still a gap.
104
+ expect(text).toMatch(/submodule/i);
105
+ expect(text).toMatch(/tags/i);
106
+ expect(text).not.toMatch(/deprecat/i);
107
+ });
108
+ test('the requirement is warning-severity and reports itself unmet', async () => {
109
+ // Unit-level: the executor is what other callers reach for, and an issue
110
+ // only reaches a log when the requirement's own check reports `passed:
111
+ // false`. A requirement that quietly passes would print nothing.
112
+ const executor = new GitCloneStepExecutor();
113
+ const requirements = executor.getValidationRequirements({ branch: 'main' }, {}, testConfig);
114
+ const ignored = requirements.filter((r) => r.severity === 'warning');
115
+ expect(ignored).toHaveLength(1);
116
+ expect(ignored[0].timing).toBe('pre-execution');
117
+ const checked = await ignored[0].check();
118
+ expect(checked.passed).toBe(false);
119
+ });
120
+ test('git is still required', async () => {
121
+ const executor = new GitCloneStepExecutor();
122
+ const requirements = executor.getValidationRequirements({}, {}, testConfig);
123
+ expect(requirements.filter((r) => r.name === 'git' && r.severity === 'error'))
124
+ .toHaveLength(1);
125
+ });
126
+ });
127
+ //# sourceMappingURL=git-clone-names-the-inputs-it-ignores.test.js.map
@@ -25,7 +25,7 @@ export interface GitCloneInputs {
25
25
  * of them is read.
26
26
  */
27
27
  export declare class GitCloneStepExecutor extends BaseStepExecutor {
28
- getValidationRequirements(_inputs: GitCloneInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
28
+ getValidationRequirements(inputs: GitCloneInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
29
29
  getOutputs(): StepOutput[];
30
30
  execute(_inputs: GitCloneInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"git-clone.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/git-clone.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,yBAAyB,CACvB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAU1B,UAAU,IAAI,UAAU,EAAE;IAkDpB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAqD1G"}
1
+ {"version":3,"file":"git-clone.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/git-clone.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAkCD;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,yBAAyB,CACvB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAsC1B,UAAU,IAAI,UAAU,EAAE;IAkDpB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAqD1G"}
@@ -2,6 +2,35 @@
2
2
  * Git clone step implementation
3
3
  */
4
4
  import { BaseStepExecutor } from './base.js';
5
+ /**
6
+ * The inputs this step declares, in the order a warning should name them.
7
+ * Declared so existing YAML keeps parsing; read by nothing.
8
+ */
9
+ const DECLARED_INPUTS = [
10
+ 'repository',
11
+ 'clone_url',
12
+ 'branch',
13
+ 'clone_depth',
14
+ 'clone_into_dir',
15
+ ];
16
+ /**
17
+ * Every input the step was handed — all of which it ignores.
18
+ *
19
+ * Not limited to `DECLARED_INPUTS`: a `git-clone@8` migrated from Bitrise
20
+ * arrives with `fetch_tags` and `submodule_update_depth`, which the name split
21
+ * carries through untouched and `execute()` ignores just as completely. A
22
+ * warning that only knew the declared five would let exactly those vanish
23
+ * quietly. Declared names come first; the rest keep their document order.
24
+ */
25
+ function ignoredInputNames(inputs) {
26
+ const present = Object.entries(inputs ?? {})
27
+ .filter(([, value]) => value !== undefined && value !== null)
28
+ .map(([name]) => name);
29
+ return [
30
+ ...DECLARED_INPUTS.filter((name) => present.includes(name)),
31
+ ...present.filter((name) => !DECLARED_INPUTS.includes(name)),
32
+ ];
33
+ }
5
34
  /**
6
35
  * git-clone step executor.
7
36
  *
@@ -13,10 +42,35 @@ import { BaseStepExecutor } from './base.js';
13
42
  * of them is read.
14
43
  */
15
44
  export class GitCloneStepExecutor extends BaseStepExecutor {
16
- getValidationRequirements(_inputs, _env, _config) {
17
- return [
45
+ getValidationRequirements(inputs, _env, _config) {
46
+ const requirements = [
18
47
  this.requireCommand('git', 'Git is required', 'Install git: brew install git (macOS) or apt install git (Linux)'),
19
48
  ];
49
+ // Silently accepting configuration that has no effect is the defect: a
50
+ // `branch: release/2.0` validated, ran green, and built whatever was
51
+ // dispatched. One warning, naming what was given — never an error, because
52
+ // every pipeline written before this release carries some of these and all
53
+ // of them must keep building.
54
+ const ignored = ignoredInputNames(inputs);
55
+ if (ignored.length > 0) {
56
+ const named = ignored.join(', ');
57
+ requirements.push({
58
+ category: 'input',
59
+ name: 'git-clone',
60
+ description: `git-clone ignores ${named}`,
61
+ timing: 'pre-execution',
62
+ severity: 'warning',
63
+ check: async () => ({
64
+ passed: false,
65
+ message: 'The runner checks out the dispatched ref, submodules included, ' +
66
+ 'before cibuild starts; git-clone only records the commit already ' +
67
+ 'on disk and reads none of its inputs. That checkout fetches no ' +
68
+ 'tags, no LFS objects and no history beyond the dispatched commit.',
69
+ }),
70
+ hint: `Remove ${named} from the step. To build a different ref, dispatch that ref.`,
71
+ });
72
+ }
73
+ return requirements;
20
74
  }
21
75
  getOutputs() {
22
76
  return [
@@ -19,7 +19,7 @@ export class XcodeBuildStepExecutor extends BaseStepExecutor {
19
19
  requirements.push(this.requireInput('scheme', inputs, 'Xcode scheme name', 'Provide scheme input in YAML'));
20
20
  // Project file - runtime check only if it doesn't already exist locally
21
21
  if (inputs.project_path && !existsSync(inputs.project_path)) {
22
- requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'git-clone'));
22
+ requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'the checkout'));
23
23
  }
24
24
  if (inputs.destination === 'auto') {
25
25
  requirements.push(this.requireCommand('xcrun', 'xcrun is required to resolve destination: auto via xcrun simctl', 'Install Xcode and run: xcode-select --install'));
@@ -151,7 +151,7 @@ export class XcodeTestStepExecutor extends BaseStepExecutor {
151
151
  requirements.push(this.requireInput('scheme', inputs, 'Xcode scheme name', 'Provide scheme input in YAML'));
152
152
  // Project file - runtime check only if it doesn't already exist locally
153
153
  if (inputs.project_path && !existsSync(inputs.project_path)) {
154
- requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'git-clone'));
154
+ requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'the checkout'));
155
155
  }
156
156
  if (inputs.destination === 'auto') {
157
157
  requirements.push(this.requireCommand('xcrun', 'xcrun is required to resolve destination: auto via xcrun simctl', 'Install Xcode and run: xcode-select --install'));
@@ -224,7 +224,7 @@ export class XcodeArchiveStepExecutor extends BaseStepExecutor {
224
224
  requirements.push(this.requireInput('scheme', inputs, 'Xcode scheme name', 'Provide scheme input in YAML'));
225
225
  // Project file - runtime check only if it doesn't already exist locally
226
226
  if (inputs.project_path && !existsSync(inputs.project_path)) {
227
- requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'git-clone'));
227
+ requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'the checkout'));
228
228
  }
229
229
  return requirements;
230
230
  }
@@ -771,7 +771,7 @@ export class XcodeBuildForTestStepExecutor extends BaseStepExecutor {
771
771
  requirements.push(this.requireInput('project_path', inputs, 'Path to .xcodeproj or .xcworkspace'));
772
772
  requirements.push(this.requireInput('scheme', inputs, 'Xcode scheme name'));
773
773
  if (inputs.project_path && !existsSync(inputs.project_path)) {
774
- requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'git-clone'));
774
+ requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'the checkout'));
775
775
  }
776
776
  if (inputs.destination === 'auto') {
777
777
  requirements.push(this.requireCommand('xcrun', 'xcrun is required to resolve destination: auto via xcrun simctl', 'Install Xcode and run: xcode-select --install'));
@@ -973,7 +973,7 @@ export class XcodeBuildForSimulatorStepExecutor extends BaseStepExecutor {
973
973
  requirements.push(this.requireInput('project_path', inputs, 'Path to .xcodeproj or .xcworkspace'));
974
974
  requirements.push(this.requireInput('scheme', inputs, 'Xcode scheme name'));
975
975
  if (inputs.project_path && !existsSync(inputs.project_path)) {
976
- requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'git-clone'));
976
+ requirements.push(this.runtimeRequirement(inputs.project_path, 'Xcode project/workspace file', 'file', 'the checkout'));
977
977
  }
978
978
  if (inputs.destination === 'auto') {
979
979
  requirements.push(this.requireCommand('xcrun', 'xcrun is required to resolve destination: auto via xcrun simctl', 'Install Xcode and run: xcode-select --install'));
@@ -47,7 +47,13 @@ export interface ValidationRequirement {
47
47
  check?: () => Promise<ValidationCheckResult>;
48
48
  /** Hint on how to fix if validation fails */
49
49
  hint?: string;
50
- /** If this is a dependency, which step provides it? */
50
+ /**
51
+ * Where this will come from, as prose for the reader — a step name, or
52
+ * `the checkout` for anything the runner puts on disk before step 1. Only
53
+ * a requirement named after a declared step *output* can be matched against
54
+ * the pipeline; for one named after a path or a command this is the whole
55
+ * answer.
56
+ */
51
57
  providedBy?: string;
52
58
  }
53
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validation-types.d.ts","sourceRoot":"","sources":["../../../src/yaml/validation-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,aAAa,GACb,MAAM,GACN,WAAW,GACX,OAAO,GACP,YAAY,GACZ,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAE7B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IAEzB,+CAA+C;IAC/C,QAAQ,EAAE,kBAAkB,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,WAAW,EAAE,qBAAqB,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IAEf,wCAAwC;IACxC,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B,6BAA6B;IAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7C,iCAAiC;IACjC,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7D,oCAAoC;IACpC,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;IAE3C,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"validation-types.d.ts","sourceRoot":"","sources":["../../../src/yaml/validation-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,SAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,aAAa,GACb,MAAM,GACN,WAAW,GACX,OAAO,GACP,YAAY,GACZ,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAE7B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IAEzB,+CAA+C;IAC/C,QAAQ,EAAE,kBAAkB,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,WAAW,EAAE,qBAAqB,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IAEf,wCAAwC;IACxC,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B,6BAA6B;IAC7B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7C,iCAAiC;IACjC,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7D,oCAAoC;IACpC,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;IAE3C,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@invarn/cibuild",
3
- "version": "2.7.6",
3
+ "version": "2.7.7",
4
4
  "description": "CI Build CLI — local pipeline orchestration and validation",
5
5
  "type": "module",
6
6
  "main": "dist/cli.cjs",