swipium 1.4.0 → 2.0.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/CHANGELOG.md +313 -0
- package/README.md +175 -219
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +39 -26
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +68 -20
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +31 -5
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +23 -5
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +44 -8
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +24 -6
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/fsWalk.js +19 -2
- package/dist/appMap/fsWalk.js.map +1 -1
- package/dist/appMap/issues.js +10 -30
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +6 -6
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +83 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +21 -5
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +12 -5
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +6 -2
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +151 -39
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +58 -85
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +34 -12
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +49 -12
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +41 -14
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +112 -30
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +6 -2
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +71 -23
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +15 -5
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +22 -28
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +14 -8
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +9 -3
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +16 -8
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +6 -6
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +288 -121
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +76 -27
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +278 -107
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/automationGen/run.js +388 -0
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +17 -10
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +52 -12
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +235 -31
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +39 -18
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +36 -15
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +7 -7
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +55 -18
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +22 -8
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +10 -8
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +160 -39
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +317 -43
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +124 -8
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +365 -55
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +7 -3
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +15 -6
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/memory.js +4 -1
- package/dist/explore/memory.js.map +1 -1
- package/dist/explore/planner.js +54 -9
- package/dist/explore/planner.js.map +1 -1
- package/dist/explore/policy.js +11 -6
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +363 -190
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +4 -2
- package/dist/explore/signatures.js.map +1 -1
- package/dist/explore/suite.js +3 -1
- package/dist/explore/suite.js.map +1 -1
- package/dist/featureTesting/executionBootstrap.js +137 -29
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +6 -3
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +101 -20
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +44 -15
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +15 -11
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +16 -8
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +8 -5
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +8 -2
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +32 -4
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +27 -15
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +34 -12
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +9 -6
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +16 -13
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +92 -31
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +25 -15
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +45 -11
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +72 -9
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +68 -17
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/lint.js +88 -14
- package/dist/flows/lint.js.map +1 -1
- package/dist/flows/pack.js +21 -5
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +176 -37
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +308 -99
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +107 -25
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +8 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/ios/signing.js +32 -3
- package/dist/ios/signing.js.map +1 -1
- package/dist/issues/classify.js +28 -20
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +35 -9
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +93 -46
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +6 -5
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +12 -8
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +40 -9
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +84 -8
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +53 -12
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +12 -3
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +399 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/needsInput.js +9 -6
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +4 -3
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +94 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +7 -5
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +6 -3
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +78 -17
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +321 -25
- package/dist/lib/wda.js.map +1 -1
- package/dist/lib/wdaConfig.js +12 -5
- package/dist/lib/wdaConfig.js.map +1 -1
- package/dist/lib/wdaTune.js +52 -23
- package/dist/lib/wdaTune.js.map +1 -1
- package/dist/mobileAudit/checks.js +150 -28
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +121 -20
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +9 -4
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +214 -35
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +1085 -145
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +148 -26
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +148 -19
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +7 -13
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +167 -0
- package/dist/orchestration/testThis/execute.js.map +1 -0
- package/dist/orchestration/testThis/pipeline.js +413 -0
- package/dist/orchestration/testThis/pipeline.js.map +1 -0
- package/dist/orchestration/testThis/plan.js +519 -0
- package/dist/orchestration/testThis/plan.js.map +1 -0
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +136 -0
- package/dist/orchestration/testThis/terminal.js.map +1 -0
- package/dist/orchestration/testThis/types.js +12 -0
- package/dist/orchestration/testThis/types.js.map +1 -0
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/coverage.js +0 -1
- package/dist/report/coverage.js.map +1 -1
- package/dist/report/evidence.js.map +1 -1
- package/dist/report/export.js +449 -72
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/flake.js +13 -14
- package/dist/report/flake.js.map +1 -1
- package/dist/report/history.js +72 -38
- package/dist/report/history.js.map +1 -1
- package/dist/report/policy.js +18 -7
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +10 -16
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/readiness.js +42 -12
- package/dist/report/readiness.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/timing.js +23 -23
- package/dist/report/timing.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +501 -69
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +10 -4
- package/dist/services/build.js.map +1 -1
- package/dist/services/flowGenerate.js +75 -0
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +40 -8
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +92 -18
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +94 -17
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +271 -80
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +68 -22
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +43 -6
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +78 -33
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +284 -4
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +433 -0
- package/dist/session/processRegistry.js.map +1 -0
- package/dist/session/progress.js +1 -1
- package/dist/session/progress.js.map +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +459 -59
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +60 -10
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +30 -12
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +36 -6
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +82 -11
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +15 -6
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +22 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +75 -44
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +15 -11
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +7 -3
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +43 -14
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +13 -7
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +21 -16
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +12 -4
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +868 -174
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +521 -112
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +82 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +393 -189
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +92 -51
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +141 -40
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +98 -18
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +108 -19
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +98 -35
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +110 -42
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +152 -130
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +94 -66
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +347 -132
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +42 -10
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +199 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/getArtifact.js +37 -8
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +17 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +148 -194
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +256 -171
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +55 -11
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +84 -38
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +83 -26
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +36 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +31 -17
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +31 -14
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +193 -47
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +16 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +12 -12
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +81 -18
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +85 -20
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +42 -18
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +29 -12
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +157 -107
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +117 -84
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +391 -310
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +112 -36
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +35 -802
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +698 -116
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -23
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +312 -54
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +37 -64
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +65 -8
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +87 -15
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +210 -104
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +808 -217
- package/package.json +16 -6
- package/dist/appMap/diff.js +0 -60
- package/dist/appMap/diff.js.map +0 -1
- package/dist/automation/maestroIr.js +0 -282
- package/dist/automation/maestroIr.js.map +0 -1
- package/dist/interop/maestro.js +0 -151
- package/dist/interop/maestro.js.map +0 -1
- package/dist/tools/assertVisual.js +0 -74
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js +0 -394
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -209
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js +0 -55
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -56
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/idling.js +0 -104
- package/dist/tools/idling.js.map +0 -1
- package/dist/tools/inputCapabilities.js +0 -30
- package/dist/tools/inputCapabilities.js.map +0 -1
- package/dist/tools/locator.js +0 -57
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/maestro.js +0 -78
- package/dist/tools/maestro.js.map +0 -1
- package/dist/tools/permissions.js +0 -149
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -49
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -70
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -101
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -170
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -61
- package/dist/tools/visualText.js.map +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Checks (
|
|
1
|
+
// Generated-code validation. Pure: validates emitted files WITHOUT a device.
|
|
2
|
+
// Checks (formerly qa_automation_validate; now run via qa_generate + acceptance criteria):
|
|
3
3
|
// - no inlined secrets (env-only),
|
|
4
4
|
// - locator durability threshold (fails on brittle-only above threshold unless candidate-only),
|
|
5
5
|
// - capability config presence,
|
|
6
6
|
// - lightweight syntax sanity (brace balance for JS/TS),
|
|
7
7
|
// - no empty essential files.
|
|
8
|
-
|
|
8
|
+
import { findSecretLeaks } from '../suite/secretGuard.js';
|
|
9
|
+
// password = "literal" / token: 'literal' etc., but NOT process.env / os.environ references.
|
|
9
10
|
const SECRET_ASSIGN_RE = /(password|passwd|secret|token|api[_-]?key|apikey|bearer|credential|pwd)\s*[:=]\s*(["'])(?!\s*\2)([^"']{3,})\2/i;
|
|
10
11
|
const ENV_REF_RE = /(process\.env|os\.environ|getenv|\$\{?env)/i;
|
|
11
12
|
function scanSecrets(files, secrets) {
|
|
@@ -21,13 +22,23 @@ function scanSecrets(files, secrets) {
|
|
|
21
22
|
return;
|
|
22
23
|
const m = SECRET_ASSIGN_RE.exec(line);
|
|
23
24
|
if (m) {
|
|
24
|
-
findings.push({
|
|
25
|
+
findings.push({
|
|
26
|
+
code: 'INLINED_SECRET',
|
|
27
|
+
severity: 'error',
|
|
28
|
+
file: f.path,
|
|
29
|
+
message: `possible inlined secret at line ${i + 1}: ${m[1]} assigned a literal; read from the environment instead`,
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
// Explicit: a known secret env-var name assigned a literal value.
|
|
27
33
|
for (const s of secrets) {
|
|
28
34
|
const re = new RegExp(`${s}\\s*[:=]\\s*["'][^"']+["']`);
|
|
29
35
|
if (re.test(line) && !ENV_REF_RE.test(line)) {
|
|
30
|
-
findings.push({
|
|
36
|
+
findings.push({
|
|
37
|
+
code: 'INLINED_SECRET',
|
|
38
|
+
severity: 'error',
|
|
39
|
+
file: f.path,
|
|
40
|
+
message: `secret var ${s} assigned a literal at line ${i + 1}`,
|
|
41
|
+
});
|
|
31
42
|
}
|
|
32
43
|
}
|
|
33
44
|
});
|
|
@@ -39,14 +50,23 @@ function braceBalance(files) {
|
|
|
39
50
|
for (const f of files) {
|
|
40
51
|
if (!/\.(ts|js)$/.test(f.path))
|
|
41
52
|
continue;
|
|
42
|
-
const pairs = [
|
|
53
|
+
const pairs = [
|
|
54
|
+
['{', '}', 'braces'],
|
|
55
|
+
['(', ')', 'parens'],
|
|
56
|
+
['[', ']', 'brackets'],
|
|
57
|
+
];
|
|
43
58
|
// Strip strings/comments crudely to avoid counting literals.
|
|
44
59
|
const stripped = stripJs(f.content);
|
|
45
60
|
for (const [open, close, name] of pairs) {
|
|
46
61
|
const o = countChar(stripped, open);
|
|
47
62
|
const c = countChar(stripped, close);
|
|
48
63
|
if (o !== c)
|
|
49
|
-
findings.push({
|
|
64
|
+
findings.push({
|
|
65
|
+
code: 'UNBALANCED_SYNTAX',
|
|
66
|
+
severity: 'error',
|
|
67
|
+
file: f.path,
|
|
68
|
+
message: `unbalanced ${name} (${o} ${open} vs ${c} ${close})`,
|
|
69
|
+
});
|
|
50
70
|
}
|
|
51
71
|
}
|
|
52
72
|
return findings;
|
|
@@ -97,8 +117,20 @@ function capabilityPresence(files) {
|
|
|
97
117
|
if (!capFile) {
|
|
98
118
|
return [{ code: 'NO_CAPABILITIES', severity: 'warning', message: 'no capabilities/conftest file found in the generated suite' }];
|
|
99
119
|
}
|
|
100
|
-
|
|
101
|
-
|
|
120
|
+
// JS/TS capabilities spell out `platformName`; Appium-Python-Client uses typed options objects
|
|
121
|
+
// (UiAutomator2Options / XCUITestOptions set platformName + automationName themselves).
|
|
122
|
+
const platformSet = /platformName|platform_name/i.test(capFile.content) || /\b(UiAutomator2Options|XCUITestOptions)\s*\(/.test(capFile.content);
|
|
123
|
+
const ok = platformSet && /(UiAutomator2|XCUITest)/.test(capFile.content);
|
|
124
|
+
return ok
|
|
125
|
+
? []
|
|
126
|
+
: [
|
|
127
|
+
{
|
|
128
|
+
code: 'INVALID_CAPABILITIES',
|
|
129
|
+
severity: 'error',
|
|
130
|
+
file: capFile.path,
|
|
131
|
+
message: 'capability config missing platformName/automationName',
|
|
132
|
+
},
|
|
133
|
+
];
|
|
102
134
|
}
|
|
103
135
|
function emptyEssentials(files) {
|
|
104
136
|
const findings = [];
|
|
@@ -115,7 +147,15 @@ export function validateGeneratedSuite(files, opts = {}) {
|
|
|
115
147
|
const brittleThreshold = opts.brittleThreshold ?? 40;
|
|
116
148
|
const candidateOnly = opts.candidateOnly ?? false;
|
|
117
149
|
const findings = [];
|
|
118
|
-
const secretFindings =
|
|
150
|
+
const secretFindings = [
|
|
151
|
+
...scanSecrets(files, opts.secrets ?? []),
|
|
152
|
+
...findSecretLeaks(files, opts.secretValues, { structural: opts.structural }).map((l) => ({
|
|
153
|
+
code: 'SECRET_IN_GENERATED_OUTPUT',
|
|
154
|
+
severity: 'error',
|
|
155
|
+
file: l.path,
|
|
156
|
+
message: `registered secret value written in plaintext at line ${l.line}; must be an environment variable`,
|
|
157
|
+
})),
|
|
158
|
+
];
|
|
119
159
|
findings.push(...secretFindings);
|
|
120
160
|
findings.push(...braceBalance(files));
|
|
121
161
|
findings.push(...capabilityPresence(files));
|
|
@@ -126,14 +166,14 @@ export function validateGeneratedSuite(files, opts = {}) {
|
|
|
126
166
|
findings.push({
|
|
127
167
|
code: 'BRITTLE_OVER_THRESHOLD',
|
|
128
168
|
severity: 'error',
|
|
129
|
-
message: `brittle locators ${brittlePct}% exceed the ${brittleThreshold}% threshold
|
|
169
|
+
message: `brittle locators ${brittlePct}% exceed the ${brittleThreshold}% threshold; add durable locators or label the suite candidate-only`,
|
|
130
170
|
});
|
|
131
171
|
}
|
|
132
172
|
else if (brittlePct > brittleThreshold && candidateOnly) {
|
|
133
173
|
findings.push({
|
|
134
174
|
code: 'BRITTLE_OVER_THRESHOLD',
|
|
135
175
|
severity: 'warning',
|
|
136
|
-
message: `brittle locators ${brittlePct}% exceed the ${brittleThreshold}% threshold
|
|
176
|
+
message: `brittle locators ${brittlePct}% exceed the ${brittleThreshold}% threshold; suite is labeled candidate-only`,
|
|
137
177
|
});
|
|
138
178
|
}
|
|
139
179
|
const ok = !findings.some((f) => f.severity === 'error');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/automationGen/validation.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/automationGen/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Build-failure log parsing (Dev2 plan §4 "framework-specific build log parsing"). A build
|
|
2
|
-
// that exits non-zero is an ENVIRONMENT/BUILD failure, never an app QA failure
|
|
2
|
+
// that exits non-zero is an ENVIRONMENT/BUILD failure, never an app QA failure. But "build
|
|
3
3
|
// failed" is useless to a developer. This module turns the captured build log into a typed
|
|
4
4
|
// blocker with the LIKELY OWNER (app dev vs environment vs user) and a CONCRETE fix, plus the
|
|
5
5
|
// relevant log tail (the lines that actually mention the error, not the whole transcript).
|
|
@@ -30,38 +30,192 @@ export function buildLogTool(step) {
|
|
|
30
30
|
// Ordered most-specific-first. Expo/Flutter android builds delegate to Gradle, so Gradle
|
|
31
31
|
// signatures are also consulted for those tools (see SIGNATURES_BY_TOOL wiring below).
|
|
32
32
|
const GRADLE_SIGNATURES = [
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
{
|
|
34
|
+
name: 'sdk-location',
|
|
35
|
+
test: /SDK location not found|ANDROID_HOME .* not|local\.properties/i,
|
|
36
|
+
failureCode: 'GRADLE_FAILED',
|
|
37
|
+
owner: 'environment',
|
|
38
|
+
reason: 'Android SDK location not configured.',
|
|
39
|
+
fix: 'Set ANDROID_HOME / sdk.dir (local.properties) to a valid Android SDK, then rebuild.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'sdk-platform-missing',
|
|
43
|
+
test: /Failed to find target with hash string|Failed to find Build Tools|Could not (?:find|determine) .*(?:platforms|build-tools)|install the (?:missing )?platform/i,
|
|
44
|
+
failureCode: 'GRADLE_FAILED',
|
|
45
|
+
owner: 'environment',
|
|
46
|
+
reason: 'Required Android SDK platform/build-tools are missing.',
|
|
47
|
+
fix: 'Install the required SDK platform + build-tools via Android Studio SDK Manager or `sdkmanager`, then rebuild.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'sdk-license',
|
|
51
|
+
test: /have not accepted the license|licenses? (?:have )?not.*accepted|to accept the SDK license/i,
|
|
52
|
+
failureCode: 'GRADLE_FAILED',
|
|
53
|
+
owner: 'environment',
|
|
54
|
+
reason: 'Android SDK licenses are not accepted.',
|
|
55
|
+
fix: 'Run `sdkmanager --licenses` (or accept licenses in Android Studio), then rebuild.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'ndk-missing',
|
|
59
|
+
test: /NDK (?:is )?not configured|No version of NDK matched|Failed to install the following Android SDK packages.*ndk/i,
|
|
60
|
+
failureCode: 'GRADLE_FAILED',
|
|
61
|
+
owner: 'environment',
|
|
62
|
+
reason: 'Required Android NDK is missing.',
|
|
63
|
+
fix: 'Install the NDK version the project requests (SDK Manager / ndkVersion), then rebuild.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'signing',
|
|
67
|
+
test: /Keystore file .* not found|Failed to read key .* from store|Could not (?:read|find) keystore|SigningConfig .* (?:is )?invalid|Failed to load signing config|keystore password was incorrect/i,
|
|
68
|
+
failureCode: 'ANDROID_SIGNING_FAILED',
|
|
69
|
+
owner: 'environment',
|
|
70
|
+
reason: 'Gradle signing config (keystore) is missing or invalid.',
|
|
71
|
+
fix: 'Provide a valid keystore + credentials, or build a debug variant (auto-signed with the debug keystore) for emulator QA.',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'dependency-resolve',
|
|
75
|
+
test: /Could not resolve|Could not find [^\n]*\.(?:jar|aar|pom)|Could not download|Failed to resolve:|Could not GET/i,
|
|
76
|
+
failureCode: 'GRADLE_FAILED',
|
|
77
|
+
owner: 'app',
|
|
78
|
+
reason: 'A Gradle dependency could not be resolved/downloaded.',
|
|
79
|
+
fix: 'Check the missing coordinate/repository and network access; fix the dependency declaration, then rebuild.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'compile',
|
|
83
|
+
test: /error: cannot find symbol|Compilation (?:error|failed)|e: .*\.kt:|\.java:\d+: error:/i,
|
|
84
|
+
failureCode: 'GRADLE_FAILED',
|
|
85
|
+
owner: 'app',
|
|
86
|
+
reason: 'A compile error in the app sources failed the Gradle build.',
|
|
87
|
+
fix: 'Open the reported file/line in the log and fix the compile error, then rebuild.',
|
|
88
|
+
},
|
|
40
89
|
];
|
|
41
90
|
const XCODE_SIGNATURES = [
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
91
|
+
{
|
|
92
|
+
name: 'scheme-missing',
|
|
93
|
+
test: /does not contain a scheme named|Scheme .* is not currently configured|The project .* does not contain a scheme/i,
|
|
94
|
+
failureCode: 'XCODEBUILD_FAILED',
|
|
95
|
+
owner: 'environment',
|
|
96
|
+
reason: 'The requested Xcode scheme was not found.',
|
|
97
|
+
fix: 'Pass the correct -scheme/-workspace (run `xcodebuild -list` to see schemes), then rebuild.',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'signing',
|
|
101
|
+
test: /Code Sign(?:ing)? error|requires a (?:development team|provisioning profile)|No (?:signing certificate|profiles for|account for team)|Signing for .* requires a development team/i,
|
|
102
|
+
failureCode: 'XCODEBUILD_FAILED',
|
|
103
|
+
owner: 'user',
|
|
104
|
+
reason: 'Xcode code signing / provisioning is not configured.',
|
|
105
|
+
fix: 'Set a development team and provisioning settings only if your simulator build configuration requires them.',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'simulator-runtime',
|
|
109
|
+
test: /Unable to find a destination|no simulator runtime|cannot be located on disk.*iphonesimulator|iOS \d+\.\d+ (?:simulator )?runtime (?:is )?not (?:installed|available)|Unsupported SDK/i,
|
|
110
|
+
failureCode: 'SIMULATOR_RUNTIME_MISSING',
|
|
111
|
+
owner: 'environment',
|
|
112
|
+
reason: 'No usable iOS simulator runtime/destination for the build.',
|
|
113
|
+
fix: 'Install a matching iOS simulator runtime in Xcode (Settings > Platforms) or pick an available destination, then rebuild.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'compile',
|
|
117
|
+
test: /error: .*\.(?:m|mm|swift|h|c|cpp):|Command CompileC failed|Swift Compiler Error|fatal error: '.*' file not found/i,
|
|
118
|
+
failureCode: 'XCODEBUILD_FAILED',
|
|
119
|
+
owner: 'app',
|
|
120
|
+
reason: 'A compile error in the iOS sources failed the build.',
|
|
121
|
+
fix: 'Open the reported file/line in the xcodebuild log and fix the compile error, then rebuild.',
|
|
122
|
+
},
|
|
46
123
|
];
|
|
47
124
|
const COCOAPODS_SIGNATURES = [
|
|
48
|
-
{
|
|
49
|
-
|
|
125
|
+
{
|
|
126
|
+
name: 'pods-incompatible',
|
|
127
|
+
test: /CocoaPods could not find compatible versions|Unable to find a specification for|could not find compatible versions for pod/i,
|
|
128
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
129
|
+
owner: 'app',
|
|
130
|
+
reason: 'CocoaPods could not resolve compatible pod versions.',
|
|
131
|
+
fix: 'Run `pod repo update` then `pod install`; adjust the Podfile constraints if the conflict persists.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'pods-out-of-sync',
|
|
135
|
+
test: /sandbox is not in sync|run .?pod install.?|The .* Pods directory/i,
|
|
136
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
137
|
+
owner: 'environment',
|
|
138
|
+
reason: 'CocoaPods sandbox is out of sync with the Podfile.',
|
|
139
|
+
fix: 'Run `pod install` in the ios/ directory, then rebuild.',
|
|
140
|
+
},
|
|
50
141
|
];
|
|
51
142
|
const FLUTTER_SIGNATURES = [
|
|
52
|
-
{
|
|
53
|
-
|
|
54
|
-
|
|
143
|
+
{
|
|
144
|
+
name: 'sdk-missing',
|
|
145
|
+
test: /Flutter SDK not found|command not found: flutter|Unable to locate the Flutter SDK|flutter: command not found/i,
|
|
146
|
+
failureCode: 'BUILD_COMMAND_UNAVAILABLE',
|
|
147
|
+
owner: 'environment',
|
|
148
|
+
reason: 'The Flutter SDK is not available on PATH.',
|
|
149
|
+
fix: 'Install Flutter and ensure `flutter` is on PATH (`flutter doctor`), then rebuild.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
name: 'pub-solve',
|
|
153
|
+
test: /version solving failed|Because .* depends on|pub get failed|Could not (?:resolve|find package)/i,
|
|
154
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
155
|
+
owner: 'app',
|
|
156
|
+
reason: 'Dart/Flutter package resolution (pub get) failed.',
|
|
157
|
+
fix: 'Fix the pubspec.yaml version constraints, run `flutter pub get`, then rebuild.',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'gradle-delegate',
|
|
161
|
+
test: /Gradle task assemble\w+ failed|A problem occurred (?:configuring|evaluating) (?:root )?project/i,
|
|
162
|
+
failureCode: 'GRADLE_FAILED',
|
|
163
|
+
owner: 'app',
|
|
164
|
+
reason: 'The Android Gradle build inside `flutter build` failed.',
|
|
165
|
+
fix: 'Open the Gradle output in the log, fix the Android build error (SDK/dependency/signing), then rebuild.',
|
|
166
|
+
},
|
|
55
167
|
];
|
|
56
168
|
const EXPO_SIGNATURES = [
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
169
|
+
{
|
|
170
|
+
name: 'prebuild-required',
|
|
171
|
+
test: /No native (?:android|ios) (?:project|directory)|run (?:npx )?expo prebuild|CNG|Continuous Native Generation|android.*directory.*(?:missing|not exist)/i,
|
|
172
|
+
failureCode: 'EXPO_PREBUILD_REQUIRED',
|
|
173
|
+
owner: 'swipium',
|
|
174
|
+
reason: 'Expo project has no native directory to build.',
|
|
175
|
+
fix: 'Run `npx expo prebuild` (or `npx expo run:*`, which prebuilds) to generate the native project, then rebuild.',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'metro',
|
|
179
|
+
test: /Unable to resolve module|Metro (?:bundler )?(?:has )?encountered|Cannot find module .* from .* Metro|Bundling failed/i,
|
|
180
|
+
failureCode: 'METRO_FAILED',
|
|
181
|
+
owner: 'app',
|
|
182
|
+
reason: 'Metro bundling failed during the Expo build.',
|
|
183
|
+
fix: 'Fix the unresolved module / bundling error (check imports + `node_modules`), then rebuild.',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'config',
|
|
187
|
+
test: /Invalid (?:app\.json|app config|Expo config)|ConfigError|Failed to read the app config/i,
|
|
188
|
+
failureCode: 'BUILD_FAILED',
|
|
189
|
+
owner: 'app',
|
|
190
|
+
reason: 'Expo app config (app.json/app.config) is invalid.',
|
|
191
|
+
fix: 'Fix the Expo config error reported in the log, then rebuild.',
|
|
192
|
+
},
|
|
60
193
|
];
|
|
61
194
|
const NODE_INSTALL_SIGNATURES = [
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
195
|
+
{
|
|
196
|
+
name: 'peer-conflict',
|
|
197
|
+
test: /ERESOLVE|peer dep|unable to resolve dependency tree/i,
|
|
198
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
199
|
+
owner: 'app',
|
|
200
|
+
reason: 'JS dependency resolution failed (peer/version conflict).',
|
|
201
|
+
fix: 'Resolve the dependency conflict (align versions, or install with the appropriate flag), then re-run.',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'network',
|
|
205
|
+
test: /ETIMEDOUT|ENOTFOUND|network.*(?:error|timeout)|registry\.npmjs\.org/i,
|
|
206
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
207
|
+
owner: 'environment',
|
|
208
|
+
reason: 'JS dependency install failed to reach the registry.',
|
|
209
|
+
fix: 'Restore network/registry access, then re-run the dependency install.',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'generic',
|
|
213
|
+
test: /npm ERR!|error Command failed|ERR_PNPM|Cannot find module/i,
|
|
214
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
215
|
+
owner: 'environment',
|
|
216
|
+
reason: 'JS dependency install failed.',
|
|
217
|
+
fix: 'Read the install error in the log, fix it, then re-run the dependency install.',
|
|
218
|
+
},
|
|
65
219
|
];
|
|
66
220
|
const SIGNATURES_BY_TOOL = {
|
|
67
221
|
gradle: GRADLE_SIGNATURES,
|
|
@@ -77,13 +231,55 @@ const SIGNATURES_BY_TOOL = {
|
|
|
77
231
|
/** Tool-default code/owner/fix when no specific signature matched. */
|
|
78
232
|
function toolDefault(tool) {
|
|
79
233
|
switch (tool) {
|
|
80
|
-
case 'gradle':
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
234
|
+
case 'gradle':
|
|
235
|
+
return {
|
|
236
|
+
failureCode: 'GRADLE_FAILED',
|
|
237
|
+
owner: 'app',
|
|
238
|
+
reason: 'Gradle build failed.',
|
|
239
|
+
fix: 'Open the Gradle log artifact and fix the reported error (SDK/dependency/compile/signing), then rebuild.',
|
|
240
|
+
};
|
|
241
|
+
case 'xcodebuild':
|
|
242
|
+
return {
|
|
243
|
+
failureCode: 'XCODEBUILD_FAILED',
|
|
244
|
+
owner: 'app',
|
|
245
|
+
reason: 'xcodebuild failed.',
|
|
246
|
+
fix: 'Open the xcodebuild log artifact and fix the reported error (scheme/signing/simulator/compile), then rebuild.',
|
|
247
|
+
};
|
|
248
|
+
case 'flutter':
|
|
249
|
+
return {
|
|
250
|
+
failureCode: 'FLUTTER_BUILD_FAILED',
|
|
251
|
+
owner: 'app',
|
|
252
|
+
reason: 'flutter build failed.',
|
|
253
|
+
fix: 'Open the flutter build log artifact and fix the reported error, then rebuild.',
|
|
254
|
+
};
|
|
255
|
+
case 'cocoapods':
|
|
256
|
+
return {
|
|
257
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
258
|
+
owner: 'environment',
|
|
259
|
+
reason: 'CocoaPods install failed.',
|
|
260
|
+
fix: 'Run `pod install` in the ios/ directory and resolve the reported error, then rebuild.',
|
|
261
|
+
};
|
|
262
|
+
case 'expo':
|
|
263
|
+
return {
|
|
264
|
+
failureCode: 'BUILD_FAILED',
|
|
265
|
+
owner: 'app',
|
|
266
|
+
reason: 'Expo build failed.',
|
|
267
|
+
fix: 'Open the build log artifact and fix the reported error, then rebuild.',
|
|
268
|
+
};
|
|
269
|
+
case 'node-install':
|
|
270
|
+
return {
|
|
271
|
+
failureCode: 'DEPENDENCY_INSTALL_REQUIRED',
|
|
272
|
+
owner: 'environment',
|
|
273
|
+
reason: 'Dependency install failed.',
|
|
274
|
+
fix: 'Read the install error in the log, fix it, then re-run.',
|
|
275
|
+
};
|
|
276
|
+
default:
|
|
277
|
+
return {
|
|
278
|
+
failureCode: 'BUILD_FAILED',
|
|
279
|
+
owner: 'app',
|
|
280
|
+
reason: 'Build from source failed.',
|
|
281
|
+
fix: 'Open the build log artifact, fix the compile/config error, then re-run. A build failure is NOT a test failure.',
|
|
282
|
+
};
|
|
87
283
|
}
|
|
88
284
|
}
|
|
89
285
|
/**
|
|
@@ -106,7 +302,15 @@ export function analyzeBuildFailure(opts) {
|
|
|
106
302
|
const tool = buildLogTool(opts.step);
|
|
107
303
|
const relevantTail = relevantLogTail(opts.log);
|
|
108
304
|
if (opts.timedOut) {
|
|
109
|
-
return {
|
|
305
|
+
return {
|
|
306
|
+
failureCode: 'BUILD_TIMED_OUT',
|
|
307
|
+
owner: 'environment',
|
|
308
|
+
reason: 'Build exceeded its time budget.',
|
|
309
|
+
tool,
|
|
310
|
+
signal: 'timeout',
|
|
311
|
+
relevantTail,
|
|
312
|
+
fix: 'Increase the build timeout, warm caches, or build once manually then re-run against the artifact.',
|
|
313
|
+
};
|
|
110
314
|
}
|
|
111
315
|
for (const sig of SIGNATURES_BY_TOOL[tool]) {
|
|
112
316
|
if (sig.test.test(opts.log)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBuildLog.js","sourceRoot":"","sources":["../../src/build/parseBuildLog.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,
|
|
1
|
+
{"version":3,"file":"parseBuildLog.js","sourceRoot":"","sources":["../../src/build/parseBuildLog.ts"],"names":[],"mappings":"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"}
|