@invarn/cibuild 2.2.5 → 2.2.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.
- package/dist/cli.cjs +16 -10
- package/dist/src/yaml/steps/index.d.ts.map +1 -1
- package/dist/src/yaml/steps/index.js +29 -2
- package/dist/src/yaml/steps/structural-facts.d.ts.map +1 -1
- package/dist/src/yaml/steps/structural-facts.js +0 -0
- package/dist/src/yaml/steps/structural-facts.test.js +35 -9
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +38 -0
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +1 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.js +171 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +179 -1
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts +21 -0
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +1 -1
- package/dist/src/yaml/steps/ui-fidelity-render.js +66 -3
- package/dist/src/yaml/steps/ui-fidelity-render.test.js +55 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4CH;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAq7C7C"}
|
|
@@ -24,8 +24,8 @@ import { BitriseSlackStepExecutor } from './bitrise-slack.js';
|
|
|
24
24
|
import { BitriseApkInfoStepExecutor } from './bitrise-apk-info.js';
|
|
25
25
|
import { GooglePlayDeployStepExecutor } from './google-play-deploy.js';
|
|
26
26
|
import { AppStoreDeployStepExecutor } from './app-store-deploy.js';
|
|
27
|
-
import { UiFidelityRenderStepExecutor, DEFAULT_RENDER_SIZE, DEFAULT_SCALE, DEFAULT_PACKAGE_SOURCE, } from './ui-fidelity-render.js';
|
|
28
|
-
import { UiFidelityRenderAndroidStepExecutor, DEFAULT_GRADLE_TASK, } from './ui-fidelity-render-android.js';
|
|
27
|
+
import { UiFidelityRenderStepExecutor, DEFAULT_RENDER_SIZE, DEFAULT_SCALE, DEFAULT_PACKAGE_SOURCE, DEFAULT_REFERENCE_SOURCE, } from './ui-fidelity-render.js';
|
|
28
|
+
import { UiFidelityRenderAndroidStepExecutor, DEFAULT_GRADLE_TASK, DEFAULT_PACKAGE_SOURCE as DEFAULT_ANDROID_PACKAGE_SOURCE, DEFAULT_REFERENCE_SOURCE as DEFAULT_ANDROID_REFERENCE_SOURCE, } from './ui-fidelity-render-android.js';
|
|
29
29
|
/**
|
|
30
30
|
* Initializes the step registry with all available steps
|
|
31
31
|
* This function should be called once at application startup
|
|
@@ -771,6 +771,13 @@ export function initializeStepRegistry() {
|
|
|
771
771
|
required: false,
|
|
772
772
|
default: DEFAULT_PACKAGE_SOURCE,
|
|
773
773
|
},
|
|
774
|
+
reference_source: {
|
|
775
|
+
description: "Where each screen's reference image comes from: 'inputs' (default — a " +
|
|
776
|
+
"basename in the run-inputs directory) or 'repo' (a repo-relative path to " +
|
|
777
|
+
'a committed reference, resolved against the checkout)',
|
|
778
|
+
required: false,
|
|
779
|
+
default: DEFAULT_REFERENCE_SOURCE,
|
|
780
|
+
},
|
|
774
781
|
package_path: {
|
|
775
782
|
description: "Path to the user's SwiftPM package containing the screens. " +
|
|
776
783
|
"Required when package_source is 'repo' (the default); ignored with 'inputs'",
|
|
@@ -804,6 +811,26 @@ export function initializeStepRegistry() {
|
|
|
804
811
|
'via Roborazzi + Robolectric on the JVM (no device, no emulator)',
|
|
805
812
|
platform: 'android',
|
|
806
813
|
inputs: {
|
|
814
|
+
package_source: {
|
|
815
|
+
description: "Where the Gradle render project comes from: 'inputs' (default — " +
|
|
816
|
+
"package.tar.gz shipped in the run-inputs directory) or 'repo' " +
|
|
817
|
+
'(package_path in the checkout, rendered directly without an upload)',
|
|
818
|
+
required: false,
|
|
819
|
+
default: DEFAULT_ANDROID_PACKAGE_SOURCE,
|
|
820
|
+
},
|
|
821
|
+
reference_source: {
|
|
822
|
+
description: "Where each screen's reference image comes from: 'inputs' (default — a " +
|
|
823
|
+
"basename in the run-inputs directory) or 'repo' (a repo-relative path to " +
|
|
824
|
+
'a committed reference, resolved against the checkout)',
|
|
825
|
+
required: false,
|
|
826
|
+
default: DEFAULT_ANDROID_REFERENCE_SOURCE,
|
|
827
|
+
},
|
|
828
|
+
package_path: {
|
|
829
|
+
description: 'Repo-relative path to the committed Gradle render project. Required ' +
|
|
830
|
+
"when package_source is 'repo'; ignored with 'inputs'",
|
|
831
|
+
required: false,
|
|
832
|
+
inputType: 'path',
|
|
833
|
+
},
|
|
807
834
|
scale: {
|
|
808
835
|
description: 'Display scale factor used when reporting logical points; must match the ' +
|
|
809
836
|
'density qualifier the render test pins (xhdpi = 2)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural-facts.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/structural-facts.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"structural-facts.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/structural-facts.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -646,24 +646,49 @@ describe('buildStructuralBlock — appearance container (Signal C, additive)', (
|
|
|
646
646
|
// appearance arg is threaded.
|
|
647
647
|
expect(without).toEqual(withC);
|
|
648
648
|
});
|
|
649
|
-
test('with a figma appearanceReference →
|
|
649
|
+
test('with a figma appearanceReference → container rides along, Signal A/B untouched (issue 04: no presence noise)', () => {
|
|
650
650
|
// dump node ids: node-1, banner, voucher, copy; reference declares banner+voucher.
|
|
651
|
+
// Presence is gated to the previous_render baseline (see the issue-04 test
|
|
652
|
+
// below), so the figma path no longer flags copy/node-1 as element_extra.
|
|
651
653
|
const block = buildStructuralBlock(HUB_PROMO_DUMP, HUB_PROMO_REFERENCE, 2, undefined, {
|
|
652
654
|
baseline: 'figma',
|
|
653
655
|
elementIds: ['banner', 'voucher'],
|
|
654
656
|
});
|
|
655
657
|
expect(block.appearance).toEqual({
|
|
656
658
|
baseline: 'figma',
|
|
657
|
-
facts: [
|
|
658
|
-
{ kind: 'element_extra', elementId: 'copy' },
|
|
659
|
-
{ kind: 'element_extra', elementId: 'node-1' },
|
|
660
|
-
],
|
|
659
|
+
facts: [],
|
|
661
660
|
rendered: { elementIds: ['banner', 'copy', 'node-1', 'voucher'] },
|
|
662
661
|
});
|
|
663
662
|
// Additive: the existing Signal A facts and Signal B geometry are untouched.
|
|
664
663
|
expect(block.facts).toEqual(buildStructuralBlock(HUB_PROMO_DUMP, HUB_PROMO_REFERENCE, 2).facts);
|
|
665
664
|
expect(block.geometry).toEqual(buildStructuralBlock(HUB_PROMO_DUMP, HUB_PROMO_REFERENCE, 2).geometry);
|
|
666
665
|
});
|
|
666
|
+
test('a figma appearanceReference emits NO presence facts — reference_geometry is a partial annotation, not the element inventory (issue 04)', () => {
|
|
667
|
+
// The figma baseline's ids come from reference_geometry (only the load-bearing
|
|
668
|
+
// tagged elements). Deriving presence against that partial set falsely flags
|
|
669
|
+
// every untagged rendered element as element_extra (the e2e noise: copy,
|
|
670
|
+
// node-1). Presence requires the COMPLETE inventory, which figma lacks here.
|
|
671
|
+
const block = buildStructuralBlock(HUB_PROMO_DUMP, HUB_PROMO_REFERENCE, 2, undefined, {
|
|
672
|
+
baseline: 'figma',
|
|
673
|
+
elementIds: ['banner', 'voucher'],
|
|
674
|
+
});
|
|
675
|
+
expect(block.appearance?.baseline).toBe('figma');
|
|
676
|
+
expect(block.appearance?.facts).toEqual([]);
|
|
677
|
+
// The container still rode along (Signal C ran) with the render's snapshot.
|
|
678
|
+
expect(block.appearance?.rendered?.elementIds).toEqual(['banner', 'copy', 'node-1', 'voucher']);
|
|
679
|
+
});
|
|
680
|
+
test('a previous_render appearanceReference still emits presence facts keyed on the previous render id set (issue 04)', () => {
|
|
681
|
+
// The previous_render baseline carries the COMPLETE prior-render inventory, so
|
|
682
|
+
// missing/extra are meaningful: `legacyBadge` was in the prior render and is
|
|
683
|
+
// gone (missing); `copy`/`node-1` are in the prior render too (not extra).
|
|
684
|
+
const block = buildStructuralBlock(HUB_PROMO_DUMP, null, 2, undefined, {
|
|
685
|
+
baseline: 'previous_render',
|
|
686
|
+
elementIds: ['banner', 'voucher', 'copy', 'node-1', 'legacyBadge'],
|
|
687
|
+
});
|
|
688
|
+
expect(block.appearance?.facts).toEqual([
|
|
689
|
+
{ kind: 'element_missing', elementId: 'legacyBadge' },
|
|
690
|
+
]);
|
|
691
|
+
});
|
|
667
692
|
test('an appearanceReference matching the render → ran-and-clean (baseline, zero facts)', () => {
|
|
668
693
|
const block = buildStructuralBlock(HUB_PROMO_DUMP, null, 2, undefined, {
|
|
669
694
|
baseline: 'figma',
|
|
@@ -686,7 +711,10 @@ describe('buildStructuralBlock — appearance container (Signal C, additive)', (
|
|
|
686
711
|
{ id: 'debugOverlay', bounds: { left: 0, top: 60, right: 100, bottom: 80 }, parentId: null, clipsChildren: false },
|
|
687
712
|
],
|
|
688
713
|
};
|
|
689
|
-
test('with reference text → copy facts
|
|
714
|
+
test('with reference text → copy facts derive on the figma path (no presence noise, issue 04)', () => {
|
|
715
|
+
// Copy facts still fire on the figma baseline (reference text present); only
|
|
716
|
+
// presence is gated off, so `debugOverlay` (rendered, not in the reference) is
|
|
717
|
+
// no longer flagged element_extra — just the genuine copy drift remains.
|
|
690
718
|
const block = buildStructuralBlock(COPY_DUMP, null, 2, undefined, {
|
|
691
719
|
baseline: 'figma',
|
|
692
720
|
elementIds: ['title', 'cta'],
|
|
@@ -695,9 +723,7 @@ describe('buildStructuralBlock — appearance container (Signal C, additive)', (
|
|
|
695
723
|
expect(block.appearance).toEqual({
|
|
696
724
|
baseline: 'figma',
|
|
697
725
|
facts: [
|
|
698
|
-
//
|
|
699
|
-
{ kind: 'element_extra', elementId: 'debugOverlay' },
|
|
700
|
-
// then copy (sorted by id: cta missing, title mismatched)
|
|
726
|
+
// copy only (sorted by id: cta missing, title mismatched)
|
|
701
727
|
{ kind: 'text_missing', elementId: 'cta', reference: 'Shop now' },
|
|
702
728
|
{ kind: 'text_mismatch', elementId: 'title', rendered: '5 EUR', reference: '5 EUR off' },
|
|
703
729
|
],
|
|
@@ -70,6 +70,23 @@ export interface UiFidelityRenderAndroidInputs {
|
|
|
70
70
|
* it in whichever subproject declares it.
|
|
71
71
|
*/
|
|
72
72
|
export declare const DEFAULT_GRADLE_TASK = "recordRoborazziDebug";
|
|
73
|
+
/** Valid values for the package_source input. */
|
|
74
|
+
export declare const PACKAGE_SOURCES: readonly ["repo", "inputs"];
|
|
75
|
+
export type PackageSource = (typeof PACKAGE_SOURCES)[number];
|
|
76
|
+
/**
|
|
77
|
+
* Default package source: the Gradle project ships as package.tar.gz in the
|
|
78
|
+
* run-inputs directory (the agent-upload path). "repo" instead renders the
|
|
79
|
+
* committed project at package_path, for a triggered (agent-less) run.
|
|
80
|
+
*/
|
|
81
|
+
export declare const DEFAULT_PACKAGE_SOURCE: PackageSource;
|
|
82
|
+
/** Valid values for the reference_source input. */
|
|
83
|
+
export declare const REFERENCE_SOURCES: readonly ["repo", "inputs"];
|
|
84
|
+
export type ReferenceSource = (typeof REFERENCE_SOURCES)[number];
|
|
85
|
+
/**
|
|
86
|
+
* Default reference source: references arrive as run inputs (a plain basename
|
|
87
|
+
* under `.ci/inputs`), matching the agent-upload path.
|
|
88
|
+
*/
|
|
89
|
+
export declare const DEFAULT_REFERENCE_SOURCE: ReferenceSource;
|
|
73
90
|
/** Basename of the shipped Gradle-project archive inside the run-inputs dir. */
|
|
74
91
|
export declare const PACKAGE_ARCHIVE_BASENAME = "package.tar.gz";
|
|
75
92
|
/** Renderer identifier recorded in protocol-result.json. */
|
|
@@ -84,10 +101,31 @@ export declare function isValidGradleTask(task: string): boolean;
|
|
|
84
101
|
export interface AndroidRenderScriptConfig {
|
|
85
102
|
scale: number;
|
|
86
103
|
gradleTask: string;
|
|
104
|
+
/**
|
|
105
|
+
* Only present (and only ever "repo") when package_source was explicitly set
|
|
106
|
+
* to "repo". When absent, the project ships as package.tar.gz and is
|
|
107
|
+
* extracted/validated exactly as the default, byte-identical script.
|
|
108
|
+
*/
|
|
109
|
+
packageSource?: PackageSource;
|
|
110
|
+
/**
|
|
111
|
+
* Repo-relative path to the committed Gradle project. Present (and required)
|
|
112
|
+
* only with packageSource "repo"; ignored otherwise.
|
|
113
|
+
*/
|
|
114
|
+
packagePath?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Only present (and only ever "repo") when reference_source was explicitly set
|
|
117
|
+
* to "repo". When absent, references are read from `.ci/inputs/<basename>` and
|
|
118
|
+
* the generated reference-sourcing code is byte-identical to the default.
|
|
119
|
+
*/
|
|
120
|
+
referenceSource?: ReferenceSource;
|
|
87
121
|
}
|
|
88
122
|
/**
|
|
89
123
|
* Generates the self-contained runtime node script for the step. Pure function
|
|
90
124
|
* of its config — exported so tests can execute the script directly.
|
|
125
|
+
*
|
|
126
|
+
* When config.referenceSource is absent the reference block is byte-identical
|
|
127
|
+
* to the default (JSON.stringify drops the undefined key, and the unpatched
|
|
128
|
+
* runtime is used).
|
|
91
129
|
*/
|
|
92
130
|
export declare function generateAndroidRenderScript(config: AndroidRenderScriptConfig): string;
|
|
93
131
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-fidelity-render-android.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ui-fidelity-render-android.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;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,MAAM,wBAAwB,CAAC;AAKpE,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,8EAA8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-fidelity-render-android.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ui-fidelity-render-android.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;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,MAAM,wBAAwB,CAAC;AAKpE,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D,iDAAiD;AACjD,eAAO,MAAM,eAAe,6BAA8B,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAAwB,CAAC;AAE9D,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,6BAA8B,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAA0B,CAAC;AAElE,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,8EAA8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAq5BD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAoBrF;AAED;;;GAGG;AACH,qBAAa,mCAAoC,SAAQ,gBAAgB;IACvE,yBAAyB,CACvB,OAAO,EAAE,6BAA6B,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAepB,OAAO,CACX,MAAM,EAAE,6BAA6B,EACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CA0EpB"}
|
|
@@ -56,6 +56,21 @@ import { RENDER_SCRIPT_FACTS_STAGE, RENDER_SCRIPT_GEOMETRY_STAGE } from './struc
|
|
|
56
56
|
* it in whichever subproject declares it.
|
|
57
57
|
*/
|
|
58
58
|
export const DEFAULT_GRADLE_TASK = 'recordRoborazziDebug';
|
|
59
|
+
/** Valid values for the package_source input. */
|
|
60
|
+
export const PACKAGE_SOURCES = ['repo', 'inputs'];
|
|
61
|
+
/**
|
|
62
|
+
* Default package source: the Gradle project ships as package.tar.gz in the
|
|
63
|
+
* run-inputs directory (the agent-upload path). "repo" instead renders the
|
|
64
|
+
* committed project at package_path, for a triggered (agent-less) run.
|
|
65
|
+
*/
|
|
66
|
+
export const DEFAULT_PACKAGE_SOURCE = 'inputs';
|
|
67
|
+
/** Valid values for the reference_source input. */
|
|
68
|
+
export const REFERENCE_SOURCES = ['repo', 'inputs'];
|
|
69
|
+
/**
|
|
70
|
+
* Default reference source: references arrive as run inputs (a plain basename
|
|
71
|
+
* under `.ci/inputs`), matching the agent-upload path.
|
|
72
|
+
*/
|
|
73
|
+
export const DEFAULT_REFERENCE_SOURCE = 'inputs';
|
|
59
74
|
/** Basename of the shipped Gradle-project archive inside the run-inputs dir. */
|
|
60
75
|
export const PACKAGE_ARCHIVE_BASENAME = 'package.tar.gz';
|
|
61
76
|
/** Renderer identifier recorded in protocol-result.json. */
|
|
@@ -863,11 +878,122 @@ try {
|
|
|
863
878
|
}
|
|
864
879
|
process.exit(exitCode);
|
|
865
880
|
`;
|
|
881
|
+
/**
|
|
882
|
+
* Replaces exactly one occurrence of `anchor` in `source`. Throws when the
|
|
883
|
+
* anchor is missing or ambiguous, so any drift between the default runtime text
|
|
884
|
+
* and a *_source variant fails loudly at module load.
|
|
885
|
+
*/
|
|
886
|
+
function replaceOnce(source, anchor, replacement) {
|
|
887
|
+
const first = source.indexOf(anchor);
|
|
888
|
+
if (first === -1 || source.indexOf(anchor, first + anchor.length) !== -1) {
|
|
889
|
+
throw new Error('ui-fidelity-render-android: expected exactly one occurrence of anchor: ' + anchor);
|
|
890
|
+
}
|
|
891
|
+
return source.slice(0, first) + replacement + source.slice(first + anchor.length);
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Builds the runtime main for package_source "repo" by patching the default
|
|
895
|
+
* (inputs) runtime text: the result document records package_source "repo", and
|
|
896
|
+
* the project is resolved from the committed checkout at package_path instead of
|
|
897
|
+
* being extracted from a shipped tarball. ANDROID_RENDER_SCRIPT_MAIN itself is
|
|
898
|
+
* never modified, so omitting package_source keeps the generated script
|
|
899
|
+
* byte-identical to the default. Mirrors the iOS package_source patch.
|
|
900
|
+
*/
|
|
901
|
+
function buildAndroidPackageRepoMain(base) {
|
|
902
|
+
let main = base;
|
|
903
|
+
// The result document advertises the repo package source.
|
|
904
|
+
main = replaceOnce(main, "package_source: 'inputs',", "package_source: 'repo',");
|
|
905
|
+
// Render directly from the committed project at package_path; no archive
|
|
906
|
+
// extract/validate. A missing or non-Gradle directory is a clean per-build
|
|
907
|
+
// error (the same exit-on-buildError path the inputs archive validation uses).
|
|
908
|
+
main = replaceOnce(main, ' // 3. Extract + validate the shipped Gradle project, then render the\n' +
|
|
909
|
+
' // renderable screens. The project stage runs even when no screen is\n' +
|
|
910
|
+
' // renderable, so packaging mistakes are always reported.\n' +
|
|
911
|
+
' var renderable = currentEntries.filter(function (entry) { return entry.error === null; });\n' +
|
|
912
|
+
' try {\n' +
|
|
913
|
+
' var projectRoot = prepareShippedProject();\n' +
|
|
914
|
+
' if (projectRoot !== null) {\n' +
|
|
915
|
+
' if (renderable.length > 0) {\n' +
|
|
916
|
+
' renderScreens(renderable, projectRoot);\n' +
|
|
917
|
+
' } else if (currentEntries.length > 0) {\n' +
|
|
918
|
+
" log('no renderable screens, skipping render');\n" +
|
|
919
|
+
' }\n' +
|
|
920
|
+
' }\n' +
|
|
921
|
+
' } finally {\n' +
|
|
922
|
+
' cleanupShippedProject();\n' +
|
|
923
|
+
' }', ' // 3. Resolve the committed Gradle project at package_path and render the\n' +
|
|
924
|
+
' // renderable screens directly from the checkout (no archive extract).\n' +
|
|
925
|
+
' var renderable = currentEntries.filter(function (entry) { return entry.error === null; });\n' +
|
|
926
|
+
' var projectRoot = path.resolve(CONFIG.packagePath);\n' +
|
|
927
|
+
' registerPathReplacement(\n' +
|
|
928
|
+
' projectRoot,\n' +
|
|
929
|
+
" path.isAbsolute(CONFIG.packagePath) ? '<package_path>' : CONFIG.packagePath\n" +
|
|
930
|
+
' );\n' +
|
|
931
|
+
' if (!fs.existsSync(projectRoot)) {\n' +
|
|
932
|
+
" setBuildError('ANDROID_PROJECT_MISSING', 'package_path does not exist: ' + projectRoot);\n" +
|
|
933
|
+
' } else if (!hasSettings(projectRoot)) {\n' +
|
|
934
|
+
' setBuildError(\n' +
|
|
935
|
+
" 'ANDROID_PROJECT_ROOT_MISSING',\n" +
|
|
936
|
+
" 'no settings.gradle(.kts) at the top of package_path: ' + projectRoot\n" +
|
|
937
|
+
' );\n' +
|
|
938
|
+
' } else if (renderable.length > 0) {\n' +
|
|
939
|
+
' renderScreens(renderable, projectRoot);\n' +
|
|
940
|
+
' } else if (currentEntries.length > 0) {\n' +
|
|
941
|
+
" log('no renderable screens, skipping render');\n" +
|
|
942
|
+
' }');
|
|
943
|
+
return main;
|
|
944
|
+
}
|
|
945
|
+
const ANDROID_RENDER_SCRIPT_MAIN_REPO = buildAndroidPackageRepoMain(ANDROID_RENDER_SCRIPT_MAIN);
|
|
946
|
+
/**
|
|
947
|
+
* Patches the reference-sourcing block to read each screen's reference from a
|
|
948
|
+
* repo-relative path (resolved against the checkout) instead of a plain basename
|
|
949
|
+
* under `.ci/inputs/`. Mirrors the iOS reference_source: repo patch. The
|
|
950
|
+
* downstream stat/copy/provenance logic is unchanged; only how `source` is
|
|
951
|
+
* computed differs, so a triggered (agent-less) run can point at a committed
|
|
952
|
+
* reference that lives in the cloned repo.
|
|
953
|
+
*/
|
|
954
|
+
function buildAndroidReferenceRepoMain(base) {
|
|
955
|
+
return replaceOnce(base, 'var basename = params.screens[entry.screen];\n' +
|
|
956
|
+
' if (\n' +
|
|
957
|
+
" typeof basename !== 'string' || basename === '' ||\n" +
|
|
958
|
+
" basename === '.' || basename === '..' ||\n" +
|
|
959
|
+
' basename !== path.basename(basename)\n' +
|
|
960
|
+
' ) {\n' +
|
|
961
|
+
' setError(\n' +
|
|
962
|
+
' entry,\n' +
|
|
963
|
+
" 'REFERENCE_MISSING',\n" +
|
|
964
|
+
" 'reference for ' + entry.screen + ' must be a plain file basename inside ' +\n" +
|
|
965
|
+
" inputsDir + ', got: ' + JSON.stringify(basename)\n" +
|
|
966
|
+
' );\n' +
|
|
967
|
+
' return;\n' +
|
|
968
|
+
' }\n' +
|
|
969
|
+
' var source = path.join(inputsDir, basename);', 'var refPath = params.screens[entry.screen];\n' +
|
|
970
|
+
" if (typeof refPath !== 'string' || refPath === '') {\n" +
|
|
971
|
+
' setError(\n' +
|
|
972
|
+
' entry,\n' +
|
|
973
|
+
" 'REFERENCE_MISSING',\n" +
|
|
974
|
+
" 'reference for ' + entry.screen + ' must be a non-empty repo-relative path, got: ' +\n" +
|
|
975
|
+
' JSON.stringify(refPath)\n' +
|
|
976
|
+
' );\n' +
|
|
977
|
+
' return;\n' +
|
|
978
|
+
' }\n' +
|
|
979
|
+
' var source = path.resolve(refPath);');
|
|
980
|
+
}
|
|
866
981
|
/**
|
|
867
982
|
* Generates the self-contained runtime node script for the step. Pure function
|
|
868
983
|
* of its config — exported so tests can execute the script directly.
|
|
984
|
+
*
|
|
985
|
+
* When config.referenceSource is absent the reference block is byte-identical
|
|
986
|
+
* to the default (JSON.stringify drops the undefined key, and the unpatched
|
|
987
|
+
* runtime is used).
|
|
869
988
|
*/
|
|
870
989
|
export function generateAndroidRenderScript(config) {
|
|
990
|
+
let main = config.packageSource === 'repo' ? ANDROID_RENDER_SCRIPT_MAIN_REPO : ANDROID_RENDER_SCRIPT_MAIN;
|
|
991
|
+
// Reference-from-repo is an independent dimension layered on top of whichever
|
|
992
|
+
// package base applies. Absent → byte-identical reference block (default
|
|
993
|
+
// basename behaviour).
|
|
994
|
+
if (config.referenceSource === 'repo') {
|
|
995
|
+
main = buildAndroidReferenceRepoMain(main);
|
|
996
|
+
}
|
|
871
997
|
return [
|
|
872
998
|
"'use strict';",
|
|
873
999
|
'// ui-fidelity-render-android runtime script (generated by cibuild at YAML conversion time)',
|
|
@@ -877,7 +1003,7 @@ export function generateAndroidRenderScript(config) {
|
|
|
877
1003
|
RENDER_SCRIPT_TRIM_STAGE,
|
|
878
1004
|
RENDER_SCRIPT_FACTS_STAGE,
|
|
879
1005
|
RENDER_SCRIPT_GEOMETRY_STAGE,
|
|
880
|
-
|
|
1006
|
+
main,
|
|
881
1007
|
].join('\n');
|
|
882
1008
|
}
|
|
883
1009
|
/**
|
|
@@ -899,7 +1025,51 @@ export class UiFidelityRenderAndroidStepExecutor extends BaseStepExecutor {
|
|
|
899
1025
|
throw new Error(`Invalid gradle_task '${gradleTask}' for step '${stepName}': ` +
|
|
900
1026
|
'expected a Gradle task path (letters, digits, and : - _)');
|
|
901
1027
|
}
|
|
1028
|
+
// package_source: validate when provided, but only record (and patch the
|
|
1029
|
+
// script for) the non-default "repo" so omitting it — or setting the default
|
|
1030
|
+
// "inputs" — keeps the default archive-extract script byte-identical. In
|
|
1031
|
+
// repo mode package_path is required (the committed project to render).
|
|
1032
|
+
const rawPackageSource = this.getInput(inputs, 'package_source', undefined);
|
|
1033
|
+
let packageSource;
|
|
1034
|
+
if (rawPackageSource !== undefined) {
|
|
1035
|
+
const value = String(rawPackageSource);
|
|
1036
|
+
if (!PACKAGE_SOURCES.includes(value)) {
|
|
1037
|
+
throw new Error(`Invalid package_source '${value}' for step '${stepName}': ` +
|
|
1038
|
+
`expected one of: ${PACKAGE_SOURCES.join(', ')}`);
|
|
1039
|
+
}
|
|
1040
|
+
if (value === 'repo') {
|
|
1041
|
+
packageSource = 'repo';
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
let packagePath;
|
|
1045
|
+
if (packageSource === 'repo') {
|
|
1046
|
+
packagePath = String(this.getRequiredInput(inputs, 'package_path', stepName));
|
|
1047
|
+
}
|
|
1048
|
+
// reference_source: validate when provided, but only record (and patch the
|
|
1049
|
+
// script for) the non-default "repo" so omitting it — or setting the default
|
|
1050
|
+
// "inputs" — keeps the default basename reference block intact.
|
|
1051
|
+
const rawReferenceSource = this.getInput(inputs, 'reference_source', undefined);
|
|
1052
|
+
let referenceSource;
|
|
1053
|
+
if (rawReferenceSource !== undefined) {
|
|
1054
|
+
const value = String(rawReferenceSource);
|
|
1055
|
+
if (!REFERENCE_SOURCES.includes(value)) {
|
|
1056
|
+
throw new Error(`Invalid reference_source '${value}' for step '${stepName}': ` +
|
|
1057
|
+
`expected one of: ${REFERENCE_SOURCES.join(', ')}`);
|
|
1058
|
+
}
|
|
1059
|
+
if (value === 'repo') {
|
|
1060
|
+
referenceSource = 'repo';
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
902
1063
|
const config = { scale, gradleTask };
|
|
1064
|
+
if (packageSource !== undefined) {
|
|
1065
|
+
config.packageSource = packageSource;
|
|
1066
|
+
}
|
|
1067
|
+
if (packagePath !== undefined) {
|
|
1068
|
+
config.packagePath = packagePath;
|
|
1069
|
+
}
|
|
1070
|
+
if (referenceSource !== undefined) {
|
|
1071
|
+
config.referenceSource = referenceSource;
|
|
1072
|
+
}
|
|
903
1073
|
const script = generateAndroidRenderScript(config);
|
|
904
1074
|
return this.createNodeStep(script, stepName);
|
|
905
1075
|
}
|