@invarn/cibuild 2.9.5 → 2.9.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/chunk-35SI42CD.mjs +1 -0
- package/dist/chunk-IC45KVLJ.mjs +1 -0
- package/dist/chunk-XDY4V23V.mjs +1 -0
- package/dist/cli.cjs +14 -14
- package/dist/commands.mjs +1 -0
- package/dist/lib.mjs +3934 -0
- package/package.json +6 -10
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -399
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts +0 -38
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.js +0 -222
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts +0 -41
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js +0 -324
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts +0 -2
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map +0 -1
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.js +0 -382
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts +0 -29
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts.map +0 -1
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.js +0 -160
- package/dist/src/commands/android-gms-guard.test.d.ts +0 -9
- package/dist/src/commands/android-gms-guard.test.d.ts.map +0 -1
- package/dist/src/commands/android-gms-guard.test.js +0 -78
- package/dist/src/commands/android-java-version.test.d.ts +0 -12
- package/dist/src/commands/android-java-version.test.d.ts.map +0 -1
- package/dist/src/commands/android-java-version.test.js +0 -209
- package/dist/src/commands/android-scanner-java.test.d.ts +0 -2
- package/dist/src/commands/android-scanner-java.test.d.ts.map +0 -1
- package/dist/src/commands/android-scanner-java.test.js +0 -130
- package/dist/src/commands/android-scanner.d.ts +0 -250
- package/dist/src/commands/android-scanner.d.ts.map +0 -1
- package/dist/src/commands/android-scanner.js +0 -1639
- package/dist/src/commands/build.d.ts +0 -215
- package/dist/src/commands/build.d.ts.map +0 -1
- package/dist/src/commands/build.js +0 -1433
- package/dist/src/commands/build.test.d.ts +0 -13
- package/dist/src/commands/build.test.d.ts.map +0 -1
- package/dist/src/commands/build.test.js +0 -121
- package/dist/src/commands/detect-platform.d.ts +0 -13
- package/dist/src/commands/detect-platform.d.ts.map +0 -1
- package/dist/src/commands/detect-platform.js +0 -51
- package/dist/src/commands/detect-project.d.ts +0 -7
- package/dist/src/commands/detect-project.d.ts.map +0 -1
- package/dist/src/commands/detect-project.js +0 -12
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts +0 -26
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts.map +0 -1
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.js +0 -196
- package/dist/src/commands/edit.d.ts +0 -12
- package/dist/src/commands/edit.d.ts.map +0 -1
- package/dist/src/commands/edit.js +0 -652
- package/dist/src/commands/edit.test.d.ts +0 -6
- package/dist/src/commands/edit.test.d.ts.map +0 -1
- package/dist/src/commands/edit.test.js +0 -45
- package/dist/src/commands/fidelity-trim.d.ts +0 -13
- package/dist/src/commands/fidelity-trim.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.js +0 -21
- package/dist/src/commands/fidelity-trim.test.d.ts +0 -8
- package/dist/src/commands/fidelity-trim.test.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.test.js +0 -79
- package/dist/src/commands/file-secret-collector.d.ts +0 -50
- package/dist/src/commands/file-secret-collector.d.ts.map +0 -1
- package/dist/src/commands/file-secret-collector.js +0 -217
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts +0 -38
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts.map +0 -1
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.js +0 -300
- package/dist/src/commands/github-workflow.d.ts +0 -5
- package/dist/src/commands/github-workflow.d.ts.map +0 -1
- package/dist/src/commands/github-workflow.js +0 -45
- package/dist/src/commands/index.d.ts +0 -33
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js +0 -33
- package/dist/src/commands/init.d.ts +0 -20
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/init.js +0 -264
- package/dist/src/commands/ios-scanner.d.ts +0 -104
- package/dist/src/commands/ios-scanner.d.ts.map +0 -1
- package/dist/src/commands/ios-scanner.js +0 -492
- package/dist/src/commands/ios-scheme-ranking.test.d.ts +0 -2
- package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +0 -1
- package/dist/src/commands/ios-scheme-ranking.test.js +0 -264
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts +0 -30
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/local-properties-reaches-every-workflow.test.js +0 -146
- package/dist/src/commands/reset.d.ts +0 -7
- package/dist/src/commands/reset.d.ts.map +0 -1
- package/dist/src/commands/reset.js +0 -81
- package/dist/src/commands/run.d.ts +0 -22
- package/dist/src/commands/run.d.ts.map +0 -1
- package/dist/src/commands/run.js +0 -141
- package/dist/src/commands/secrets-sync-workflow.d.ts +0 -15
- package/dist/src/commands/secrets-sync-workflow.d.ts.map +0 -1
- package/dist/src/commands/secrets-sync-workflow.js +0 -255
- package/dist/src/commands/secrets-upload.d.ts +0 -21
- package/dist/src/commands/secrets-upload.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.js +0 -177
- package/dist/src/commands/secrets-upload.test.d.ts +0 -5
- package/dist/src/commands/secrets-upload.test.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.test.js +0 -60
- package/dist/src/commands/validate.d.ts +0 -10
- package/dist/src/commands/validate.d.ts.map +0 -1
- package/dist/src/commands/validate.js +0 -46
- package/dist/src/config.d.ts +0 -3
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -47
- package/dist/src/envman/cli.d.ts +0 -21
- package/dist/src/envman/cli.d.ts.map +0 -1
- package/dist/src/envman/cli.js +0 -240
- package/dist/src/envman/envman.d.ts +0 -83
- package/dist/src/envman/envman.d.ts.map +0 -1
- package/dist/src/envman/envman.js +0 -361
- package/dist/src/envman/envman.test.d.ts +0 -5
- package/dist/src/envman/envman.test.d.ts.map +0 -1
- package/dist/src/envman/envman.test.js +0 -236
- package/dist/src/envman/envstore-round-trip.test.d.ts +0 -27
- package/dist/src/envman/envstore-round-trip.test.d.ts.map +0 -1
- package/dist/src/envman/envstore-round-trip.test.js +0 -130
- package/dist/src/envman/index.d.ts +0 -23
- package/dist/src/envman/index.d.ts.map +0 -1
- package/dist/src/envman/index.js +0 -23
- package/dist/src/envman/shim.d.ts +0 -16
- package/dist/src/envman/shim.d.ts.map +0 -1
- package/dist/src/envman/shim.js +0 -66
- package/dist/src/envman/types.d.ts +0 -55
- package/dist/src/envman/types.d.ts.map +0 -1
- package/dist/src/envman/types.js +0 -12
- package/dist/src/lib.d.ts +0 -33
- package/dist/src/lib.d.ts.map +0 -1
- package/dist/src/lib.js +0 -37
- package/dist/src/pipeline.d.ts +0 -3
- package/dist/src/pipeline.d.ts.map +0 -1
- package/dist/src/pipeline.js +0 -57
- package/dist/src/runner-node-step.test.d.ts +0 -12
- package/dist/src/runner-node-step.test.d.ts.map +0 -1
- package/dist/src/runner-node-step.test.js +0 -61
- package/dist/src/runner.d.ts +0 -31
- package/dist/src/runner.d.ts.map +0 -1
- package/dist/src/runner.js +0 -240
- package/dist/src/shared/detect-project.d.ts +0 -57
- package/dist/src/shared/detect-project.d.ts.map +0 -1
- package/dist/src/shared/detect-project.js +0 -219
- package/dist/src/shared/detect-project.test.d.ts +0 -2
- package/dist/src/shared/detect-project.test.d.ts.map +0 -1
- package/dist/src/shared/detect-project.test.js +0 -161
- package/dist/src/shared/git.d.ts +0 -25
- package/dist/src/shared/git.d.ts.map +0 -1
- package/dist/src/shared/git.js +0 -53
- package/dist/src/shared/git.test.d.ts +0 -9
- package/dist/src/shared/git.test.d.ts.map +0 -1
- package/dist/src/shared/git.test.js +0 -66
- package/dist/src/shared/gitignore.d.ts +0 -6
- package/dist/src/shared/gitignore.d.ts.map +0 -1
- package/dist/src/shared/gitignore.js +0 -26
- package/dist/src/shared/gradle-settings.d.ts +0 -49
- package/dist/src/shared/gradle-settings.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.js +0 -138
- package/dist/src/shared/gradle-settings.test.d.ts +0 -2
- package/dist/src/shared/gradle-settings.test.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.test.js +0 -65
- package/dist/src/shared/prompts.d.ts +0 -30
- package/dist/src/shared/prompts.d.ts.map +0 -1
- package/dist/src/shared/prompts.js +0 -121
- package/dist/src/shared/xcode-container.test.d.ts +0 -2
- package/dist/src/shared/xcode-container.test.d.ts.map +0 -1
- package/dist/src/shared/xcode-container.test.js +0 -123
- package/dist/src/step-marker.d.ts +0 -12
- package/dist/src/step-marker.d.ts.map +0 -1
- package/dist/src/step-marker.js +0 -29
- package/dist/src/step-marker.test.d.ts +0 -11
- package/dist/src/step-marker.test.d.ts.map +0 -1
- package/dist/src/step-marker.test.js +0 -45
- package/dist/src/types.d.ts +0 -58
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts +0 -28
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts.map +0 -1
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.js +0 -223
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts +0 -20
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.js +0 -201
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts +0 -37
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.js +0 -255
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts +0 -32
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts.map +0 -1
- package/dist/src/yaml/a-missing-credential-is-loud.test.js +0 -301
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +0 -18
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +0 -1
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +0 -66
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts +0 -34
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.js +0 -218
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts +0 -27
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.js +0 -126
- package/dist/src/yaml/bitrise-compat.d.ts +0 -65
- package/dist/src/yaml/bitrise-compat.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.js +0 -206
- package/dist/src/yaml/bitrise-compat.test.d.ts +0 -5
- package/dist/src/yaml/bitrise-compat.test.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.test.js +0 -347
- package/dist/src/yaml/cache-key-missing-file.test.d.ts +0 -12
- package/dist/src/yaml/cache-key-missing-file.test.d.ts.map +0 -1
- package/dist/src/yaml/cache-key-missing-file.test.js +0 -116
- package/dist/src/yaml/converter.d.ts +0 -103
- package/dist/src/yaml/converter.d.ts.map +0 -1
- package/dist/src/yaml/converter.js +0 -420
- package/dist/src/yaml/converter.test.d.ts +0 -5
- package/dist/src/yaml/converter.test.d.ts.map +0 -1
- package/dist/src/yaml/converter.test.js +0 -548
- package/dist/src/yaml/e2e.test.d.ts +0 -6
- package/dist/src/yaml/e2e.test.d.ts.map +0 -1
- package/dist/src/yaml/e2e.test.js +0 -446
- package/dist/src/yaml/env-resolver.d.ts +0 -218
- package/dist/src/yaml/env-resolver.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.js +0 -591
- package/dist/src/yaml/env-resolver.test.d.ts +0 -5
- package/dist/src/yaml/env-resolver.test.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.test.js +0 -502
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +0 -16
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +0 -1
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +0 -126
- package/dist/src/yaml/fidelity-input-digest.d.ts +0 -37
- package/dist/src/yaml/fidelity-input-digest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.js +0 -208
- package/dist/src/yaml/fidelity-input-digest.test.d.ts +0 -2
- package/dist/src/yaml/fidelity-input-digest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.test.js +0 -167
- package/dist/src/yaml/fidelity-manifest.d.ts +0 -126
- package/dist/src/yaml/fidelity-manifest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.js +0 -134
- package/dist/src/yaml/fidelity-manifest.test.d.ts +0 -12
- package/dist/src/yaml/fidelity-manifest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.test.js +0 -251
- package/dist/src/yaml/interactive-prompts.d.ts +0 -71
- package/dist/src/yaml/interactive-prompts.d.ts.map +0 -1
- package/dist/src/yaml/interactive-prompts.js +0 -260
- package/dist/src/yaml/meta-helpers.d.ts +0 -28
- package/dist/src/yaml/meta-helpers.d.ts.map +0 -1
- package/dist/src/yaml/meta-helpers.js +0 -46
- package/dist/src/yaml/missing-env-handler.d.ts +0 -45
- package/dist/src/yaml/missing-env-handler.d.ts.map +0 -1
- package/dist/src/yaml/missing-env-handler.js +0 -64
- package/dist/src/yaml/parser.d.ts +0 -33
- package/dist/src/yaml/parser.d.ts.map +0 -1
- package/dist/src/yaml/parser.js +0 -148
- package/dist/src/yaml/parser.test.d.ts +0 -5
- package/dist/src/yaml/parser.test.d.ts.map +0 -1
- package/dist/src/yaml/parser.test.js +0 -83
- package/dist/src/yaml/pipeline-with-secrets.d.ts +0 -25
- package/dist/src/yaml/pipeline-with-secrets.d.ts.map +0 -1
- package/dist/src/yaml/pipeline-with-secrets.js +0 -76
- package/dist/src/yaml/platform-detector.d.ts +0 -83
- package/dist/src/yaml/platform-detector.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.js +0 -189
- package/dist/src/yaml/platform-detector.test.d.ts +0 -5
- package/dist/src/yaml/platform-detector.test.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.test.js +0 -525
- package/dist/src/yaml/preflight-validation.d.ts +0 -29
- package/dist/src/yaml/preflight-validation.d.ts.map +0 -1
- package/dist/src/yaml/preflight-validation.js +0 -21
- package/dist/src/yaml/secrets-manager.d.ts +0 -87
- package/dist/src/yaml/secrets-manager.d.ts.map +0 -1
- package/dist/src/yaml/secrets-manager.js +0 -230
- package/dist/src/yaml/shell-assignments.d.ts +0 -40
- package/dist/src/yaml/shell-assignments.d.ts.map +0 -1
- package/dist/src/yaml/shell-assignments.js +0 -77
- package/dist/src/yaml/step-validator-check-failure.test.d.ts +0 -24
- package/dist/src/yaml/step-validator-check-failure.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-check-failure.test.js +0 -130
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts +0 -23
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-self-assigned.test.js +0 -191
- package/dist/src/yaml/step-validator.d.ts +0 -67
- package/dist/src/yaml/step-validator.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.js +0 -466
- package/dist/src/yaml/step-validator.test.d.ts +0 -18
- package/dist/src/yaml/step-validator.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.test.js +0 -140
- package/dist/src/yaml/steps/android-sign.d.ts +0 -35
- package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-sign.js +0 -147
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
- package/dist/src/yaml/steps/android-version.d.ts +0 -26
- package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.js +0 -128
- package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
- package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.test.js +0 -196
- package/dist/src/yaml/steps/android.d.ts +0 -156
- package/dist/src/yaml/steps/android.d.ts.map +0 -1
- package/dist/src/yaml/steps/android.js +0 -1092
- package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
- package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/app-store-deploy.js +0 -167
- package/dist/src/yaml/steps/base.d.ts +0 -263
- package/dist/src/yaml/steps/base.d.ts.map +0 -1
- package/dist/src/yaml/steps/base.js +0 -380
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
- package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
- package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.js +0 -280
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
- package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
- package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
- package/dist/src/yaml/steps/cache.d.ts +0 -59
- package/dist/src/yaml/steps/cache.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache.js +0 -1027
- package/dist/src/yaml/steps/capture-injection.d.ts +0 -30
- package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
- package/dist/src/yaml/steps/capture-injection.js +0 -88
- package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
- package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/capture-injection.test.js +0 -163
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
- package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
- package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
- package/dist/src/yaml/steps/fastlane.d.ts +0 -27
- package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
- package/dist/src/yaml/steps/fastlane.js +0 -79
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
- package/dist/src/yaml/steps/file.d.ts +0 -52
- package/dist/src/yaml/steps/file.d.ts.map +0 -1
- package/dist/src/yaml/steps/file.js +0 -108
- package/dist/src/yaml/steps/flutter.d.ts +0 -63
- package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
- package/dist/src/yaml/steps/flutter.js +0 -215
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
- package/dist/src/yaml/steps/git-clone.d.ts +0 -32
- package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone.js +0 -171
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
- package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
- package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
- package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
- package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.js +0 -193
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
- package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
- package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.js +0 -386
- package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
- package/dist/src/yaml/steps/index.d.ts +0 -10
- package/dist/src/yaml/steps/index.d.ts.map +0 -1
- package/dist/src/yaml/steps/index.js +0 -1461
- package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
- package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.js +0 -279
- package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
- package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.test.js +0 -90
- package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
- package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-signing.js +0 -144
- package/dist/src/yaml/steps/ios-version.d.ts +0 -47
- package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-version.js +0 -151
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
- package/dist/src/yaml/steps/linting.d.ts +0 -47
- package/dist/src/yaml/steps/linting.d.ts.map +0 -1
- package/dist/src/yaml/steps/linting.js +0 -148
- package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase2.test.js +0 -197
- package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase3.test.js +0 -144
- package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase4.test.js +0 -166
- package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase5.test.js +0 -263
- package/dist/src/yaml/steps/registry.d.ts +0 -88
- package/dist/src/yaml/steps/registry.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.js +0 -125
- package/dist/src/yaml/steps/registry.test.d.ts +0 -5
- package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.test.js +0 -235
- package/dist/src/yaml/steps/release.d.ts +0 -50
- package/dist/src/yaml/steps/release.d.ts.map +0 -1
- package/dist/src/yaml/steps/release.js +0 -154
- package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
- package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.js +0 -270
- package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
- package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
- package/dist/src/yaml/steps/script.d.ts +0 -23
- package/dist/src/yaml/steps/script.d.ts.map +0 -1
- package/dist/src/yaml/steps/script.js +0 -63
- package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
- package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/spec-validation.test.js +0 -130
- package/dist/src/yaml/steps/steps.test.d.ts +0 -6
- package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/steps.test.js +0 -881
- package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
- package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.js +0 -3276
- package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
- package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
- package/dist/src/yaml/steps/test-config.d.ts +0 -5
- package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
- package/dist/src/yaml/steps/test-config.js +0 -25
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
- package/dist/src/yaml/steps/trim-align.d.ts +0 -87
- package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.js +0 -367
- package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
- package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.test.js +0 -261
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
- package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
- package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.js +0 -247
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
- package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
- package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.js +0 -202
- package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
- package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
- package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-new.test.js +0 -211
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
- package/dist/src/yaml/steps/xcode.d.ts +0 -230
- package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode.js +0 -1350
- package/dist/src/yaml/types.d.ts +0 -76
- package/dist/src/yaml/types.d.ts.map +0 -1
- package/dist/src/yaml/types.js +0 -5
- package/dist/src/yaml/validation-types.d.ts +0 -102
- package/dist/src/yaml/validation-types.d.ts.map +0 -1
- package/dist/src/yaml/validation-types.js +0 -8
- package/dist/src/yaml/yaml-updater.d.ts +0 -24
- package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
- package/dist/src/yaml/yaml-updater.js +0 -128
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `cocoapods-install` can be asked to skip a project that has no Podfile.
|
|
3
|
-
*
|
|
4
|
-
* The default stays a hard failure, because a pipeline that names this step is
|
|
5
|
-
* asserting the project uses CocoaPods and a missing Podfile is a real error.
|
|
6
|
-
*
|
|
7
|
-
* The iOS template needs the other behaviour: it serves every iOS project and a
|
|
8
|
-
* large share of them resolve dependencies through Swift Package Manager, where
|
|
9
|
-
* "Podfile not found" would be a CocoaPods error in a project that does not use
|
|
10
|
-
* CocoaPods. Until this input existed the template could not use this step at
|
|
11
|
-
* all, so it ran `pod install` from an inline `script@1.0.0` — which put it out
|
|
12
|
-
* of reach of the refused-fetch retry this step carries. That is the gap this
|
|
13
|
-
* closes, and it is why the release order matters: this must ship before the
|
|
14
|
-
* template is pointed at the step, or every SPM-only iOS repo breaks.
|
|
15
|
-
*/
|
|
16
|
-
import { describe, test, expect } from '@jest/globals';
|
|
17
|
-
import { CocoapodsInstallStepExecutor } from './ios-deps.js';
|
|
18
|
-
import { testConfig } from './test-config.js';
|
|
19
|
-
const build = async (inputs = {}) => {
|
|
20
|
-
const executor = new CocoapodsInstallStepExecutor();
|
|
21
|
-
const result = await executor.execute(inputs, {}, testConfig);
|
|
22
|
-
return result.script;
|
|
23
|
-
};
|
|
24
|
-
/** The body of the `if [ ! -f "Podfile" ]` branch, which is what changes. */
|
|
25
|
-
const absentBranch = (script) => {
|
|
26
|
-
const lines = script.split('\n');
|
|
27
|
-
const start = lines.findIndex((l) => l.includes('if [ ! -f "Podfile" ]'));
|
|
28
|
-
expect(start).toBeGreaterThanOrEqual(0);
|
|
29
|
-
const end = lines.findIndex((l, i) => i > start && l.trim() === 'fi');
|
|
30
|
-
return lines.slice(start, end + 1).join('\n');
|
|
31
|
-
};
|
|
32
|
-
describe('by default a missing Podfile is still an error', () => {
|
|
33
|
-
test('exits non-zero', async () => {
|
|
34
|
-
expect(absentBranch(await build())).toContain('exit 1');
|
|
35
|
-
});
|
|
36
|
-
test('says what was not found', async () => {
|
|
37
|
-
expect(absentBranch(await build())).toContain('Podfile not found');
|
|
38
|
-
});
|
|
39
|
-
test('an explicit false is the same as omitting it', async () => {
|
|
40
|
-
expect(absentBranch(await build({ skip_if_absent: false }))).toContain('exit 1');
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('skip_if_absent turns it into a clean no-op', () => {
|
|
44
|
-
test('exits zero instead of one', async () => {
|
|
45
|
-
const branch = absentBranch(await build({ skip_if_absent: true }));
|
|
46
|
-
expect(branch).toContain('exit 0');
|
|
47
|
-
expect(branch).not.toContain('exit 1');
|
|
48
|
-
});
|
|
49
|
-
test('says it skipped rather than that something failed', async () => {
|
|
50
|
-
const branch = absentBranch(await build({ skip_if_absent: true }));
|
|
51
|
-
expect(branch).toContain('skipping CocoaPods install');
|
|
52
|
-
expect(branch).not.toContain('Error');
|
|
53
|
-
});
|
|
54
|
-
test('still runs pod install when a Podfile IS present', async () => {
|
|
55
|
-
// The skip is a branch, not a mode — the rest of the step is untouched.
|
|
56
|
-
const script = await build({ skip_if_absent: true });
|
|
57
|
-
expect(script).toContain('POD_INVOCATION');
|
|
58
|
-
expect(script).toContain('$POD_INVOCATION $POD_CMD');
|
|
59
|
-
});
|
|
60
|
-
test('still wraps the pod fetch in the refused-fetch retry', async () => {
|
|
61
|
-
// This is the entire point of letting the template use the step.
|
|
62
|
-
const script = await build({ skip_if_absent: true });
|
|
63
|
-
expect(script).toContain('cibuild_fetch_was_refused');
|
|
64
|
-
expect(script).toContain('CIBUILD_FETCH_MAX_ATTEMPTS');
|
|
65
|
-
});
|
|
66
|
-
test('still chooses between bundle exec and bare pod', async () => {
|
|
67
|
-
const script = await build({ skip_if_absent: true });
|
|
68
|
-
expect(script).toContain('USE_BUNDLE_EXEC');
|
|
69
|
-
expect(script).toContain('$BUNDLE_CMD exec pod');
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
/**
|
|
73
|
-
* The inline script the template used did two things, not one: it skipped a
|
|
74
|
-
* project with no Podfile, AND it looked for that Podfile beside the Xcode
|
|
75
|
-
* project rather than at the repository root. Both have to exist as inputs or
|
|
76
|
-
* the template cannot be switched — about a quarter of iOS repositories keep
|
|
77
|
-
* the app one directory down, and template inputs interpolate variables, not
|
|
78
|
-
* `$(dirname …)`.
|
|
79
|
-
*/
|
|
80
|
-
describe('project_path finds the Podfile beside the project', () => {
|
|
81
|
-
test('changes into the project directory, not the repo root', async () => {
|
|
82
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace' });
|
|
83
|
-
expect(script).toContain(`WORK_DIR="$(dirname 'ios/MyApp.xcworkspace')"`);
|
|
84
|
-
expect(script).toContain('cd "$WORK_DIR"');
|
|
85
|
-
});
|
|
86
|
-
test('does not fall back to CIBUILD_SOURCE_DIR when it is given', async () => {
|
|
87
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace' });
|
|
88
|
-
expect(script).not.toContain('cd "$CIBUILD_SOURCE_DIR"');
|
|
89
|
-
});
|
|
90
|
-
test('still falls back to CIBUILD_SOURCE_DIR when nothing is given', async () => {
|
|
91
|
-
expect(await build()).toContain('cd "$CIBUILD_SOURCE_DIR"');
|
|
92
|
-
});
|
|
93
|
-
test('an explicit source_root_path still wins over project_path', async () => {
|
|
94
|
-
const script = await build({
|
|
95
|
-
project_path: 'ios/MyApp.xcworkspace',
|
|
96
|
-
source_root_path: 'somewhere/else',
|
|
97
|
-
});
|
|
98
|
-
expect(script).toContain(`cd 'somewhere/else'`);
|
|
99
|
-
expect(script).not.toContain('dirname');
|
|
100
|
-
});
|
|
101
|
-
test('composes with skip_if_absent, which is how the template uses it', async () => {
|
|
102
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace', skip_if_absent: true });
|
|
103
|
-
expect(script).toContain(`WORK_DIR="$(dirname 'ios/MyApp.xcworkspace')"`);
|
|
104
|
-
expect(absentBranch(script)).toContain('exit 0');
|
|
105
|
-
expect(script).toContain('cibuild_fetch_was_refused');
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
/**
|
|
109
|
-
* The exact input combination the iOS template sends. Pinned here because the
|
|
110
|
-
* template lives in another repository and deploys on a different cadence, so
|
|
111
|
-
* nothing else would notice this step drifting away from what it sends.
|
|
112
|
-
*/
|
|
113
|
-
describe('the iOS template combination', () => {
|
|
114
|
-
const templateInputs = {
|
|
115
|
-
project_path: 'MyApp.xcworkspace',
|
|
116
|
-
skip_if_absent: true,
|
|
117
|
-
command: 'install --repo-update',
|
|
118
|
-
};
|
|
119
|
-
test('produces pod install --repo-update, flags intact', async () => {
|
|
120
|
-
const script = await build(templateInputs);
|
|
121
|
-
expect(script).toContain('POD_CMD="install --repo-update"');
|
|
122
|
-
});
|
|
123
|
-
test('runs that under the refused-fetch retry, exactly once', async () => {
|
|
124
|
-
const script = await build(templateInputs);
|
|
125
|
-
expect(script).toContain('$POD_INVOCATION $POD_CMD');
|
|
126
|
-
expect(script.split('CIBUILD_FETCH_MAX_ATTEMPTS=').length - 1).toBe(1);
|
|
127
|
-
});
|
|
128
|
-
test('skips instead of failing when the repo has no Podfile', async () => {
|
|
129
|
-
expect(absentBranch(await build(templateInputs))).toContain('exit 0');
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=cocoapods-skip-if-absent.test.js.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The envstore loader carried by every generated step.
|
|
3
|
-
*
|
|
4
|
-
* These tests drive the *reader* — the preamble `createBashScript` prepends —
|
|
5
|
-
* directly, with hostile envstore content written by hand. Going through a
|
|
6
|
-
* producer such as git-clone would only prove the one value that producer
|
|
7
|
-
* happens to write; the defect lives in the reader, so the reader is what gets
|
|
8
|
-
* the hostile input.
|
|
9
|
-
*
|
|
10
|
-
* Each case actually runs bash. Assertions are made on files the script body
|
|
11
|
-
* writes with `printf '%s'`, not on stdout, so a value's own newlines and
|
|
12
|
-
* quoting cannot be confused with the test's framing.
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=envstore-loader.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"envstore-loader.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/envstore-loader.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The envstore loader carried by every generated step.
|
|
3
|
-
*
|
|
4
|
-
* These tests drive the *reader* — the preamble `createBashScript` prepends —
|
|
5
|
-
* directly, with hostile envstore content written by hand. Going through a
|
|
6
|
-
* producer such as git-clone would only prove the one value that producer
|
|
7
|
-
* happens to write; the defect lives in the reader, so the reader is what gets
|
|
8
|
-
* the hostile input.
|
|
9
|
-
*
|
|
10
|
-
* Each case actually runs bash. Assertions are made on files the script body
|
|
11
|
-
* writes with `printf '%s'`, not on stdout, so a value's own newlines and
|
|
12
|
-
* quoting cannot be confused with the test's framing.
|
|
13
|
-
*/
|
|
14
|
-
import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
|
|
15
|
-
import { spawnSync } from 'child_process';
|
|
16
|
-
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync, existsSync } from 'fs';
|
|
17
|
-
import { join } from 'path';
|
|
18
|
-
import { tmpdir } from 'os';
|
|
19
|
-
import { BaseStepExecutor } from './base.js';
|
|
20
|
-
/** Exposes the protected preamble builder so the reader can be tested on its own. */
|
|
21
|
-
class PreambleProbe extends BaseStepExecutor {
|
|
22
|
-
async execute(_inputs, _env, _config) {
|
|
23
|
-
throw new Error('not used');
|
|
24
|
-
}
|
|
25
|
-
build(scriptContent) {
|
|
26
|
-
return this.createBashScript(scriptContent, 'envstore-loader-probe');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
describe('envstore loader', () => {
|
|
30
|
-
let workDir;
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
workDir = mkdtempSync(join(tmpdir(), 'envstore-loader-'));
|
|
33
|
-
});
|
|
34
|
-
afterEach(() => {
|
|
35
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
36
|
-
});
|
|
37
|
-
/**
|
|
38
|
-
* Writes an envstore, runs the generated preamble over it, and captures the
|
|
39
|
-
* named variables as the step body sees them.
|
|
40
|
-
*/
|
|
41
|
-
function run(envs, capture, extraBody = '') {
|
|
42
|
-
const storePath = join(workDir, 'envstore.json');
|
|
43
|
-
const outDir = join(workDir, 'captured');
|
|
44
|
-
mkdirSync(outDir, { recursive: true });
|
|
45
|
-
writeFileSync(storePath, JSON.stringify({ envs: envs.map(e => ({ ...e, sensitive: false })) }), 'utf-8');
|
|
46
|
-
const body = [
|
|
47
|
-
...capture.map(name => `printf '%s' "\${${name}-}" > "$CAPTURE_DIR/${name}"`),
|
|
48
|
-
extraBody,
|
|
49
|
-
].join('\n');
|
|
50
|
-
const scriptPath = join(workDir, 'step.sh');
|
|
51
|
-
writeFileSync(scriptPath, new PreambleProbe().build(body), 'utf-8');
|
|
52
|
-
const proc = spawnSync('bash', [scriptPath], {
|
|
53
|
-
cwd: workDir,
|
|
54
|
-
encoding: 'utf-8',
|
|
55
|
-
env: {
|
|
56
|
-
...process.env,
|
|
57
|
-
ENVMAN_ENVSTORE_PATH: storePath,
|
|
58
|
-
CAPTURE_DIR: outDir,
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
return {
|
|
62
|
-
status: proc.status,
|
|
63
|
-
stderr: proc.stderr ?? '',
|
|
64
|
-
captured(name) {
|
|
65
|
-
const file = join(outDir, name);
|
|
66
|
-
return existsSync(file) ? readFileSync(file, 'utf-8') : undefined;
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
test('a value containing newlines round-trips byte for byte', () => {
|
|
71
|
-
const body = 'first line\nsecond line\nthird line';
|
|
72
|
-
const result = run([{ key: 'GIT_CLONE_COMMIT_MESSAGE_BODY', value: body }], ['GIT_CLONE_COMMIT_MESSAGE_BODY']);
|
|
73
|
-
expect(result.status).toBe(0);
|
|
74
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_BODY')).toBe(body);
|
|
75
|
-
});
|
|
76
|
-
test('security: a value whose lines look like assignments sets nothing', () => {
|
|
77
|
-
const hostile = 'looks harmless\nPATH=/tmp/attacker-controlled\nNODE_OPTIONS=--require=/tmp/evil.js';
|
|
78
|
-
const result = run([{ key: 'GIT_CLONE_COMMIT_MESSAGE_BODY', value: hostile }], ['GIT_CLONE_COMMIT_MESSAGE_BODY', 'PATH', 'NODE_OPTIONS']);
|
|
79
|
-
expect(result.status).toBe(0);
|
|
80
|
-
// The value arrives intact...
|
|
81
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_BODY')).toBe(hostile);
|
|
82
|
-
// ...and none of its lines became a variable. Both are compared against
|
|
83
|
-
// what the parent environment held, which is what "unchanged" means here:
|
|
84
|
-
// the test runner itself sets NODE_OPTIONS.
|
|
85
|
-
expect(result.captured('PATH')).toBe(process.env.PATH ?? '');
|
|
86
|
-
expect(result.captured('NODE_OPTIONS')).toBe(process.env.NODE_OPTIONS ?? '');
|
|
87
|
-
expect(result.captured('NODE_OPTIONS')).not.toContain('/tmp/evil.js');
|
|
88
|
-
});
|
|
89
|
-
test('awkward bytes in a value all survive unchanged', () => {
|
|
90
|
-
const cases = [
|
|
91
|
-
{ key: 'HAS_EQUALS', value: 'a=b=c' },
|
|
92
|
-
{ key: 'HAS_QUOTES', value: `single ' double " both '"` },
|
|
93
|
-
{ key: 'HAS_BACKTICKS', value: 'a `whoami` b' },
|
|
94
|
-
{ key: 'HAS_SUBSHELL', value: 'a $(whoami) b ${HOME} c' },
|
|
95
|
-
{ key: 'HAS_TRAILING_NEWLINE', value: 'ends with a newline\n' },
|
|
96
|
-
{ key: 'HAS_LONE_CR', value: 'before\rafter' },
|
|
97
|
-
{ key: 'HAS_BACKSLASHES', value: 'C:\\path\\to\\thing and \\n literal' },
|
|
98
|
-
{ key: 'HAS_LEADING_SPACE', value: ' padded ' },
|
|
99
|
-
];
|
|
100
|
-
const result = run(cases, cases.map(c => c.key));
|
|
101
|
-
expect(result.status).toBe(0);
|
|
102
|
-
for (const { key, value } of cases) {
|
|
103
|
-
expect({ key, value: result.captured(key) }).toEqual({ key, value });
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
test('a non-identifier key is skipped without failing the step under set -e', () => {
|
|
107
|
-
const result = run([
|
|
108
|
-
{ key: 'not a valid identifier', value: 'x' },
|
|
109
|
-
{ key: '2_LEADING_DIGIT', value: 'x' },
|
|
110
|
-
{ key: '', value: 'x' },
|
|
111
|
-
{ key: 'GOOD_KEY', value: 'kept' },
|
|
112
|
-
], ['GOOD_KEY'], 'echo reached-the-end');
|
|
113
|
-
expect(result.status).toBe(0);
|
|
114
|
-
expect(result.captured('GOOD_KEY')).toBe('kept');
|
|
115
|
-
expect(result.stderr).not.toContain('not a valid identifier');
|
|
116
|
-
});
|
|
117
|
-
test('regression: a multi-line commit message does not end the step', () => {
|
|
118
|
-
// The shape that killed the first real proof on 2026-08-30: git-clone
|
|
119
|
-
// publishes the commit body, and every later step died loading it.
|
|
120
|
-
const result = run([
|
|
121
|
-
{ key: 'GIT_CLONE_COMMIT_MESSAGE_SUBJECT', value: 'Add Invarn pipeline' },
|
|
122
|
-
{
|
|
123
|
-
key: 'GIT_CLONE_COMMIT_MESSAGE_BODY',
|
|
124
|
-
value: 'cibuild sets CIBUILD_GIT_BRANCH, so pre-execution validation asked for a\nvalue nothing provides.\n\nSecond paragraph.',
|
|
125
|
-
},
|
|
126
|
-
], ['GIT_CLONE_COMMIT_MESSAGE_SUBJECT'], 'echo step-completed');
|
|
127
|
-
expect(result.status).toBe(0);
|
|
128
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_SUBJECT')).toBe('Add Invarn pipeline');
|
|
129
|
-
expect(result.stderr).not.toContain('not a valid identifier');
|
|
130
|
-
});
|
|
131
|
-
test('an absent envstore leaves the step to run normally', () => {
|
|
132
|
-
const scriptPath = join(workDir, 'no-store.sh');
|
|
133
|
-
writeFileSync(scriptPath, new PreambleProbe().build('echo ran'), 'utf-8');
|
|
134
|
-
const proc = spawnSync('bash', [scriptPath], {
|
|
135
|
-
cwd: workDir,
|
|
136
|
-
encoding: 'utf-8',
|
|
137
|
-
env: { ...process.env, ENVMAN_ENVSTORE_PATH: join(workDir, 'missing.json') },
|
|
138
|
-
});
|
|
139
|
-
expect(proc.status).toBe(0);
|
|
140
|
-
expect(proc.stdout).toContain('ran');
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
//# sourceMappingURL=envstore-loader.test.js.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fastlane step: run a fastlane lane
|
|
3
|
-
*/
|
|
4
|
-
import { BaseStepExecutor } from './base.js';
|
|
5
|
-
import type { StepDef, CIConfig } from '../../types.js';
|
|
6
|
-
import type { ValidationRequirement, StepOutput } from '../validation-types.js';
|
|
7
|
-
export interface FastlaneInputs {
|
|
8
|
-
/** Fastlane lane to run (required) */
|
|
9
|
-
lane?: string;
|
|
10
|
-
/** Working directory (parent of fastlane directory) */
|
|
11
|
-
work_dir?: string;
|
|
12
|
-
/** Update fastlane gem before run (true/false) */
|
|
13
|
-
update_fastlane?: string;
|
|
14
|
-
/** Enable verbose logging (yes/no) */
|
|
15
|
-
verbose_log?: string;
|
|
16
|
-
/** Enable collecting cache files (yes/no) */
|
|
17
|
-
enable_cache?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Runs a fastlane lane with Gemfile detection and optional gem update.
|
|
21
|
-
*/
|
|
22
|
-
export declare class FastlaneStepExecutor extends BaseStepExecutor {
|
|
23
|
-
getValidationRequirements(_inputs: FastlaneInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
24
|
-
getOutputs(): StepOutput[];
|
|
25
|
-
execute(inputs: FastlaneInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=fastlane.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastlane.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/fastlane.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,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;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;IAM1B,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAuEzG"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fastlane step: run a fastlane lane
|
|
3
|
-
*/
|
|
4
|
-
import { BaseStepExecutor } from './base.js';
|
|
5
|
-
/**
|
|
6
|
-
* Runs a fastlane lane with Gemfile detection and optional gem update.
|
|
7
|
-
*/
|
|
8
|
-
export class FastlaneStepExecutor extends BaseStepExecutor {
|
|
9
|
-
getValidationRequirements(_inputs, _env, _config) {
|
|
10
|
-
return [
|
|
11
|
-
this.requireCommand('fastlane', 'fastlane is required (install via gem install fastlane or Bundler)'),
|
|
12
|
-
];
|
|
13
|
-
}
|
|
14
|
-
getOutputs() {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
async execute(inputs, _env, _config) {
|
|
18
|
-
const stepName = 'fastlane';
|
|
19
|
-
const lane = this.getRequiredInput(inputs, 'lane', stepName);
|
|
20
|
-
const workDir = this.getInput(inputs, 'work_dir', '');
|
|
21
|
-
const updateFastlane = this.getInput(inputs, 'update_fastlane', 'true') === 'true';
|
|
22
|
-
const verboseLog = ['yes', 'true'].includes(this.getInput(inputs, 'verbose_log', 'no'));
|
|
23
|
-
const enableCache = ['yes', 'true'].includes(this.getInput(inputs, 'enable_cache', 'yes'));
|
|
24
|
-
const commands = [];
|
|
25
|
-
commands.push('# fastlane — run a fastlane lane');
|
|
26
|
-
commands.push('echo "🚀 Running fastlane..."');
|
|
27
|
-
commands.push('');
|
|
28
|
-
// Change to working directory if specified
|
|
29
|
-
if (workDir) {
|
|
30
|
-
commands.push(`cd '${this.escapeBash(workDir)}'`);
|
|
31
|
-
commands.push('');
|
|
32
|
-
}
|
|
33
|
-
// Detect Gemfile for bundle exec
|
|
34
|
-
commands.push('# Detect Gemfile for bundle exec');
|
|
35
|
-
commands.push('USE_BUNDLE_EXEC="false"');
|
|
36
|
-
commands.push('if [ -f "Gemfile" ] || [ -f "Gemfile.lock" ]; then');
|
|
37
|
-
commands.push(' if grep -q "fastlane" Gemfile.lock 2>/dev/null || grep -q "fastlane" Gemfile 2>/dev/null; then');
|
|
38
|
-
commands.push(' USE_BUNDLE_EXEC="true"');
|
|
39
|
-
commands.push(' echo "Gemfile detected with fastlane — using bundle exec"');
|
|
40
|
-
commands.push(' fi');
|
|
41
|
-
commands.push('fi');
|
|
42
|
-
commands.push('');
|
|
43
|
-
// Optionally update fastlane
|
|
44
|
-
if (updateFastlane) {
|
|
45
|
-
commands.push('# Update fastlane gem (skipped if Gemfile manages it)');
|
|
46
|
-
commands.push('if [ "$USE_BUNDLE_EXEC" = "true" ]; then');
|
|
47
|
-
commands.push(' echo "Gemfile present — running bundle install instead of gem update"');
|
|
48
|
-
commands.push(' bundle install');
|
|
49
|
-
commands.push('else');
|
|
50
|
-
commands.push(' echo "Updating fastlane gem..."');
|
|
51
|
-
commands.push(' gem install fastlane --no-document');
|
|
52
|
-
commands.push('fi');
|
|
53
|
-
commands.push('');
|
|
54
|
-
}
|
|
55
|
-
// Build the fastlane command
|
|
56
|
-
const verboseFlag = verboseLog ? ' --verbose' : '';
|
|
57
|
-
commands.push('# Run fastlane');
|
|
58
|
-
commands.push('if [ "$USE_BUNDLE_EXEC" = "true" ]; then');
|
|
59
|
-
commands.push(` bundle exec fastlane ${this.escapeBash(lane)}${verboseFlag}`);
|
|
60
|
-
commands.push('else');
|
|
61
|
-
commands.push(` fastlane ${this.escapeBash(lane)}${verboseFlag}`);
|
|
62
|
-
commands.push('fi');
|
|
63
|
-
commands.push('');
|
|
64
|
-
// Cache collection
|
|
65
|
-
if (enableCache) {
|
|
66
|
-
commands.push('# Collect cache paths');
|
|
67
|
-
commands.push('if [ -f "Podfile.lock" ]; then');
|
|
68
|
-
commands.push(' echo "Cache: Pods directory detected"');
|
|
69
|
-
commands.push('fi');
|
|
70
|
-
commands.push('if [ -f "Cartfile.resolved" ]; then');
|
|
71
|
-
commands.push(' echo "Cache: Carthage directory detected"');
|
|
72
|
-
commands.push('fi');
|
|
73
|
-
}
|
|
74
|
-
commands.push('echo "✅ fastlane lane complete"');
|
|
75
|
-
const script = this.createBashScriptFromCommands(commands, stepName);
|
|
76
|
-
return this.createScriptStep(script, stepName);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=fastlane.js.map
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fidelity aspect-ratio guard.
|
|
3
|
-
*
|
|
4
|
-
* One named composable per state is the authoring norm; the failure this
|
|
5
|
-
* catches is the opposite — several states stacked into one composable, which
|
|
6
|
-
* renders far taller (or wider) than the single-state reference it is paired
|
|
7
|
-
* against. That shows up as a sharp divergence between the rendered and
|
|
8
|
-
* reference aspect ratios, well before a human reads the diff.
|
|
9
|
-
*
|
|
10
|
-
* The guard is a pure comparison over the dimensions the render already
|
|
11
|
-
* reports (`rendered_px`, `reference_px`). It emits a WARNING when the
|
|
12
|
-
* divergence exceeds a documented fold factor — it never fails the render, and
|
|
13
|
-
* it stays silent when there is no reference to compare against.
|
|
14
|
-
*/
|
|
15
|
-
/** Pixel dimensions as `[width, height]`. */
|
|
16
|
-
export type PixelSize = [number, number];
|
|
17
|
-
/**
|
|
18
|
-
* Fold factor beyond which a rendered/reference aspect-ratio divergence is
|
|
19
|
-
* worth a warning. A faithful single-state wrapper sits near 1.0; trim and
|
|
20
|
-
* reference alignment nudge it a few percent; a re-stacked 2-up wrapper roughly
|
|
21
|
-
* doubles one dimension and lands near 2.0. 1.5 catches the stack while
|
|
22
|
-
* tolerating the wobble.
|
|
23
|
-
*/
|
|
24
|
-
export declare const ASPECT_RATIO_WARN_FACTOR = 1.5;
|
|
25
|
-
/** The outcome of comparing a rendered aspect ratio to its reference. */
|
|
26
|
-
export interface AspectRatioCheck {
|
|
27
|
-
/** True only when both sizes are present and strictly positive. */
|
|
28
|
-
comparable: boolean;
|
|
29
|
-
/** Rendered width/height, or null when not comparable. */
|
|
30
|
-
renderedAspect: number | null;
|
|
31
|
-
/** Reference width/height, or null when not comparable. */
|
|
32
|
-
referenceAspect: number | null;
|
|
33
|
-
/**
|
|
34
|
-
* Symmetric divergence `max(r/ref, ref/r)` (≥ 1), or null when not
|
|
35
|
-
* comparable. 1.0 means identical proportions.
|
|
36
|
-
*/
|
|
37
|
-
divergence: number | null;
|
|
38
|
-
/** True when comparable and the divergence exceeds the fold factor. */
|
|
39
|
-
warn: boolean;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Compares a rendered size against its reference size. Returns a
|
|
43
|
-
* non-warning, non-comparable result when either size is missing or
|
|
44
|
-
* non-positive — the guard only speaks when it has two real frames to compare.
|
|
45
|
-
*/
|
|
46
|
-
export declare function evaluateAspectRatio(renderedPx: PixelSize | null, referencePx: PixelSize | null, factor?: number): AspectRatioCheck;
|
|
47
|
-
/**
|
|
48
|
-
* Human/agent-readable warning line for a divergent screen, or null when the
|
|
49
|
-
* screen does not warrant one. The caller decides where to surface it (preview
|
|
50
|
-
* result, preflight output) — it is advisory, never a failure.
|
|
51
|
-
*/
|
|
52
|
-
export declare function formatAspectRatioWarning(screen: string, check: AspectRatioCheck): string | null;
|
|
53
|
-
//# sourceMappingURL=fidelity-aspect-guard.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fidelity-aspect-guard.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/fidelity-aspect-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,uEAAuE;IACvE,IAAI,EAAE,OAAO,CAAC;CACf;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,SAAS,GAAG,IAAI,EAC5B,WAAW,EAAE,SAAS,GAAG,IAAI,EAC7B,MAAM,GAAE,MAAiC,GACxC,gBAAgB,CAyBlB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,MAAM,GAAG,IAAI,CAUf"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fidelity aspect-ratio guard.
|
|
3
|
-
*
|
|
4
|
-
* One named composable per state is the authoring norm; the failure this
|
|
5
|
-
* catches is the opposite — several states stacked into one composable, which
|
|
6
|
-
* renders far taller (or wider) than the single-state reference it is paired
|
|
7
|
-
* against. That shows up as a sharp divergence between the rendered and
|
|
8
|
-
* reference aspect ratios, well before a human reads the diff.
|
|
9
|
-
*
|
|
10
|
-
* The guard is a pure comparison over the dimensions the render already
|
|
11
|
-
* reports (`rendered_px`, `reference_px`). It emits a WARNING when the
|
|
12
|
-
* divergence exceeds a documented fold factor — it never fails the render, and
|
|
13
|
-
* it stays silent when there is no reference to compare against.
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Fold factor beyond which a rendered/reference aspect-ratio divergence is
|
|
17
|
-
* worth a warning. A faithful single-state wrapper sits near 1.0; trim and
|
|
18
|
-
* reference alignment nudge it a few percent; a re-stacked 2-up wrapper roughly
|
|
19
|
-
* doubles one dimension and lands near 2.0. 1.5 catches the stack while
|
|
20
|
-
* tolerating the wobble.
|
|
21
|
-
*/
|
|
22
|
-
export const ASPECT_RATIO_WARN_FACTOR = 1.5;
|
|
23
|
-
function isPositiveSize(size) {
|
|
24
|
-
return (Array.isArray(size) &&
|
|
25
|
-
size.length === 2 &&
|
|
26
|
-
Number.isFinite(size[0]) &&
|
|
27
|
-
Number.isFinite(size[1]) &&
|
|
28
|
-
size[0] > 0 &&
|
|
29
|
-
size[1] > 0);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Compares a rendered size against its reference size. Returns a
|
|
33
|
-
* non-warning, non-comparable result when either size is missing or
|
|
34
|
-
* non-positive — the guard only speaks when it has two real frames to compare.
|
|
35
|
-
*/
|
|
36
|
-
export function evaluateAspectRatio(renderedPx, referencePx, factor = ASPECT_RATIO_WARN_FACTOR) {
|
|
37
|
-
if (!isPositiveSize(renderedPx) || !isPositiveSize(referencePx)) {
|
|
38
|
-
return {
|
|
39
|
-
comparable: false,
|
|
40
|
-
renderedAspect: null,
|
|
41
|
-
referenceAspect: null,
|
|
42
|
-
divergence: null,
|
|
43
|
-
warn: false,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
const renderedAspect = renderedPx[0] / renderedPx[1];
|
|
47
|
-
const referenceAspect = referencePx[0] / referencePx[1];
|
|
48
|
-
const divergence = Math.max(renderedAspect / referenceAspect, referenceAspect / renderedAspect);
|
|
49
|
-
return {
|
|
50
|
-
comparable: true,
|
|
51
|
-
renderedAspect,
|
|
52
|
-
referenceAspect,
|
|
53
|
-
divergence,
|
|
54
|
-
warn: divergence > factor,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Human/agent-readable warning line for a divergent screen, or null when the
|
|
59
|
-
* screen does not warrant one. The caller decides where to surface it (preview
|
|
60
|
-
* result, preflight output) — it is advisory, never a failure.
|
|
61
|
-
*/
|
|
62
|
-
export function formatAspectRatioWarning(screen, check) {
|
|
63
|
-
if (!check.warn || check.divergence === null)
|
|
64
|
-
return null;
|
|
65
|
-
const r = check.renderedAspect?.toFixed(2);
|
|
66
|
-
const ref = check.referenceAspect?.toFixed(2);
|
|
67
|
-
return (`Screen "${screen}" renders at aspect ratio ${r}:1 but its reference is ` +
|
|
68
|
-
`${ref}:1 (${check.divergence.toFixed(1)}× divergence). This often means ` +
|
|
69
|
-
`multiple states were stacked into one composable — author one named ` +
|
|
70
|
-
`composable per state instead.`);
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=fidelity-aspect-guard.js.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for the fidelity aspect-ratio guard.
|
|
3
|
-
*
|
|
4
|
-
* A wrapper that stacks several states into one composable renders far taller
|
|
5
|
-
* (or wider) than its single-state reference, so its aspect ratio diverges
|
|
6
|
-
* sharply from the reference's. The guard is the early warning for that
|
|
7
|
-
* re-stacking: it compares the rendered vs reference aspect ratios and flags a
|
|
8
|
-
* divergence beyond a documented fold factor — a WARNING, never a failure.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=fidelity-aspect-guard.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fidelity-aspect-guard.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/fidelity-aspect-guard.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for the fidelity aspect-ratio guard.
|
|
3
|
-
*
|
|
4
|
-
* A wrapper that stacks several states into one composable renders far taller
|
|
5
|
-
* (or wider) than its single-state reference, so its aspect ratio diverges
|
|
6
|
-
* sharply from the reference's. The guard is the early warning for that
|
|
7
|
-
* re-stacking: it compares the rendered vs reference aspect ratios and flags a
|
|
8
|
-
* divergence beyond a documented fold factor — a WARNING, never a failure.
|
|
9
|
-
*/
|
|
10
|
-
import { describe, test, expect } from '@jest/globals';
|
|
11
|
-
import { evaluateAspectRatio, ASPECT_RATIO_WARN_FACTOR, } from './fidelity-aspect-guard.js';
|
|
12
|
-
describe('evaluateAspectRatio', () => {
|
|
13
|
-
test('does not warn when rendered and reference aspect ratios match', () => {
|
|
14
|
-
// A faithful single-state banner: same proportions as its reference.
|
|
15
|
-
const check = evaluateAspectRatio([720, 1280], [360, 640]);
|
|
16
|
-
expect(check.comparable).toBe(true);
|
|
17
|
-
expect(check.warn).toBe(false);
|
|
18
|
-
expect(check.divergence).toBeCloseTo(1, 5);
|
|
19
|
-
});
|
|
20
|
-
test('warns when a stacked render is far off the reference aspect ratio', () => {
|
|
21
|
-
// The canonical miss: two banner states stacked in one Column render at
|
|
22
|
-
// ~2.2:1, judged against a single-state ~4.76:1 reference.
|
|
23
|
-
const rendered = [880, 400]; // 2.2:1
|
|
24
|
-
const reference = [952, 200]; // 4.76:1
|
|
25
|
-
const check = evaluateAspectRatio(rendered, reference);
|
|
26
|
-
expect(check.comparable).toBe(true);
|
|
27
|
-
expect(check.warn).toBe(true);
|
|
28
|
-
expect(check.divergence).toBeCloseTo(4.76 / 2.2, 1);
|
|
29
|
-
});
|
|
30
|
-
test('tolerates a small alignment/trim wobble within the fold factor', () => {
|
|
31
|
-
// Trim + reference alignment can nudge dimensions a few percent; that must
|
|
32
|
-
// not trip the warning.
|
|
33
|
-
const check = evaluateAspectRatio([726, 1280], [360, 640]);
|
|
34
|
-
expect(check.warn).toBe(false);
|
|
35
|
-
});
|
|
36
|
-
test('is not comparable when there is no reference', () => {
|
|
37
|
-
const check = evaluateAspectRatio([720, 1280], null);
|
|
38
|
-
expect(check.comparable).toBe(false);
|
|
39
|
-
expect(check.warn).toBe(false);
|
|
40
|
-
});
|
|
41
|
-
test('is not comparable when a dimension is zero or negative', () => {
|
|
42
|
-
expect(evaluateAspectRatio([720, 0], [360, 640]).comparable).toBe(false);
|
|
43
|
-
expect(evaluateAspectRatio([720, 1280], [0, 640]).comparable).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
test('exposes a sane default fold factor', () => {
|
|
46
|
-
expect(ASPECT_RATIO_WARN_FACTOR).toBeGreaterThan(1);
|
|
47
|
-
expect(ASPECT_RATIO_WARN_FACTOR).toBeLessThan(2);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
//# sourceMappingURL=fidelity-aspect-guard.test.js.map
|