@invarn/cibuild 2.9.4 → 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 -1084
- 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/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 -311
- 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 -297
- 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 -253
- 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 -1340
- 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,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which built `.app` belongs to the scheme that was built.
|
|
3
|
-
*
|
|
4
|
-
* A simulator build leaves every application bundle its graph produced under
|
|
5
|
-
* `DerivedData/Build/Products/<configuration>-<platform>/`, and a scheme that
|
|
6
|
-
* builds a watchOS or tvOS companion alongside the app produces two. Taking
|
|
7
|
-
* whichever one a directory scan reaches first is a coin toss, and it lands the
|
|
8
|
-
* wrong way often enough to matter: a project whose scheme builds both an iOS
|
|
9
|
-
* app and a watch companion exported the 588 KB watch bundle as the app under
|
|
10
|
-
* test. The build was green, the artifact manifest was non-empty, and the
|
|
11
|
-
* thing a user downloaded could not be installed on the device they built for.
|
|
12
|
-
* That is worse than delivering nothing, because nothing is visibly wrong and
|
|
13
|
-
* a plausible wrong answer is not.
|
|
14
|
-
*
|
|
15
|
-
* The scheme already knows. A shared `.xcscheme` lists its build entries with a
|
|
16
|
-
* `BuildableName` whose extension IS the product type, and `buildForRunning`
|
|
17
|
-
* separates what the scheme builds from what it merely references — a scheme
|
|
18
|
-
* may list several `.app` entries it does not build, so "mentions an app" is
|
|
19
|
-
* not the question and a check that asked it would pick just as badly.
|
|
20
|
-
*
|
|
21
|
-
* Where the scheme gives no answer this falls back rather than failing. A
|
|
22
|
-
* project with no shared scheme at all is ordinary — plenty of them never
|
|
23
|
-
* commit one — and those builds work. Absence of evidence is not evidence, so
|
|
24
|
-
* the destination's own platform directory decides, and failing to resolve an
|
|
25
|
-
* app is left to the caller's existing guard.
|
|
26
|
-
*
|
|
27
|
-
* The whole resolver runs on the machine that did the build, against the
|
|
28
|
-
* products that build actually produced, so it needs nothing from the step
|
|
29
|
-
* generator but the scheme name and the destination.
|
|
30
|
-
*/
|
|
31
|
-
/** A built application bundle, as found under `Build/Products`. */
|
|
32
|
-
export interface BuiltApp {
|
|
33
|
-
/** The `<configuration>-<platform>` directory, or `''` directly under Products. */
|
|
34
|
-
platform: string;
|
|
35
|
-
/** The bundle's own name, e.g. `MyApp.app`. */
|
|
36
|
-
name: string;
|
|
37
|
-
/** Absolute path to the bundle. */
|
|
38
|
-
path: string;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* The SDK suffix the Products directory carries for a given destination.
|
|
42
|
-
*
|
|
43
|
-
* `-destination 'generic/platform=iOS Simulator'` builds into
|
|
44
|
-
* `Debug-iphonesimulator`; the watchOS and tvOS spellings are the ones that
|
|
45
|
-
* matter here, because a companion target is exactly what produces the second
|
|
46
|
-
* bundle this resolver exists to skip past.
|
|
47
|
-
*/
|
|
48
|
-
export declare function platformSuffixForDestination(destination: string): string;
|
|
49
|
-
/**
|
|
50
|
-
* The application bundles a scheme's build action actually builds.
|
|
51
|
-
*
|
|
52
|
-
* `buildForRunning="NO"` entries are listed and not built. A scheme can carry
|
|
53
|
-
* three `.app` entries that are API-compatibility testers in other containers
|
|
54
|
-
* beside the one framework it really produces, so the attribute is the whole
|
|
55
|
-
* filter rather than a refinement of one.
|
|
56
|
-
*
|
|
57
|
-
* Returns an empty list for a file that cannot be read or carries no build
|
|
58
|
-
* action — no evidence, which the caller must not read as "builds no app".
|
|
59
|
-
*/
|
|
60
|
-
export declare function runnableAppProducts(schemeXml: string | null): string[];
|
|
61
|
-
/**
|
|
62
|
-
* The bundle to export, given everything that was built and what the scheme
|
|
63
|
-
* says it builds.
|
|
64
|
-
*
|
|
65
|
-
* In order: the scheme's own product on the destination's platform, the
|
|
66
|
-
* scheme's own product anywhere, anything on the destination's platform,
|
|
67
|
-
* anything at all. The last two are the no-shared-scheme path, and they are
|
|
68
|
-
* what keeps a project that never committed a scheme building exactly as it
|
|
69
|
-
* did before.
|
|
70
|
-
*/
|
|
71
|
-
export declare function chooseAppProduct(apps: BuiltApp[], schemeProducts: string[], destination: string): BuiltApp | null;
|
|
72
|
-
/**
|
|
73
|
-
* The resolver as it runs on the build machine: dependency-free CommonJS,
|
|
74
|
-
* written to a temp file and invoked with
|
|
75
|
-
* `node <file> <productsDir> <projectPath> <scheme> <destination>`.
|
|
76
|
-
*
|
|
77
|
-
* It prints the chosen bundle's path and nothing else, and exits non-zero with
|
|
78
|
-
* no output when it cannot choose — which is the signal for the caller's
|
|
79
|
-
* existing scan to take over, so a machine without a usable node is no worse
|
|
80
|
-
* off than before this existed.
|
|
81
|
-
*
|
|
82
|
-
* Kept as source text rather than bundled because the step ships a shell
|
|
83
|
-
* script, not a module graph. The three functions above are the same rules in
|
|
84
|
-
* testable form, and `xcode-app-product.test.ts` holds them to each other.
|
|
85
|
-
*
|
|
86
|
-
* Must contain no backtick and no dollar-brace: it is emitted into a bash
|
|
87
|
-
* heredoc, and it is a TypeScript template literal on the way there.
|
|
88
|
-
*/
|
|
89
|
-
export declare const APP_PRODUCT_RESOLVER_SOURCE: string;
|
|
90
|
-
//# sourceMappingURL=xcode-app-product.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xcode-app-product.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode-app-product.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAatE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,cAAc,EAAE,MAAM,EAAE,EACxB,WAAW,EAAE,MAAM,GAClB,QAAQ,GAAG,IAAI,CAOjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAqIzC,CAAC"}
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which built `.app` belongs to the scheme that was built.
|
|
3
|
-
*
|
|
4
|
-
* A simulator build leaves every application bundle its graph produced under
|
|
5
|
-
* `DerivedData/Build/Products/<configuration>-<platform>/`, and a scheme that
|
|
6
|
-
* builds a watchOS or tvOS companion alongside the app produces two. Taking
|
|
7
|
-
* whichever one a directory scan reaches first is a coin toss, and it lands the
|
|
8
|
-
* wrong way often enough to matter: a project whose scheme builds both an iOS
|
|
9
|
-
* app and a watch companion exported the 588 KB watch bundle as the app under
|
|
10
|
-
* test. The build was green, the artifact manifest was non-empty, and the
|
|
11
|
-
* thing a user downloaded could not be installed on the device they built for.
|
|
12
|
-
* That is worse than delivering nothing, because nothing is visibly wrong and
|
|
13
|
-
* a plausible wrong answer is not.
|
|
14
|
-
*
|
|
15
|
-
* The scheme already knows. A shared `.xcscheme` lists its build entries with a
|
|
16
|
-
* `BuildableName` whose extension IS the product type, and `buildForRunning`
|
|
17
|
-
* separates what the scheme builds from what it merely references — a scheme
|
|
18
|
-
* may list several `.app` entries it does not build, so "mentions an app" is
|
|
19
|
-
* not the question and a check that asked it would pick just as badly.
|
|
20
|
-
*
|
|
21
|
-
* Where the scheme gives no answer this falls back rather than failing. A
|
|
22
|
-
* project with no shared scheme at all is ordinary — plenty of them never
|
|
23
|
-
* commit one — and those builds work. Absence of evidence is not evidence, so
|
|
24
|
-
* the destination's own platform directory decides, and failing to resolve an
|
|
25
|
-
* app is left to the caller's existing guard.
|
|
26
|
-
*
|
|
27
|
-
* The whole resolver runs on the machine that did the build, against the
|
|
28
|
-
* products that build actually produced, so it needs nothing from the step
|
|
29
|
-
* generator but the scheme name and the destination.
|
|
30
|
-
*/
|
|
31
|
-
/**
|
|
32
|
-
* The SDK suffix the Products directory carries for a given destination.
|
|
33
|
-
*
|
|
34
|
-
* `-destination 'generic/platform=iOS Simulator'` builds into
|
|
35
|
-
* `Debug-iphonesimulator`; the watchOS and tvOS spellings are the ones that
|
|
36
|
-
* matter here, because a companion target is exactly what produces the second
|
|
37
|
-
* bundle this resolver exists to skip past.
|
|
38
|
-
*/
|
|
39
|
-
export function platformSuffixForDestination(destination) {
|
|
40
|
-
const d = String(destination ?? '').toLowerCase();
|
|
41
|
-
if (d.includes('watchos'))
|
|
42
|
-
return '-watchsimulator';
|
|
43
|
-
if (d.includes('tvos'))
|
|
44
|
-
return '-appletvsimulator';
|
|
45
|
-
if (d.includes('visionos') || d.includes('xros'))
|
|
46
|
-
return '-xrsimulator';
|
|
47
|
-
return '-iphonesimulator';
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* The application bundles a scheme's build action actually builds.
|
|
51
|
-
*
|
|
52
|
-
* `buildForRunning="NO"` entries are listed and not built. A scheme can carry
|
|
53
|
-
* three `.app` entries that are API-compatibility testers in other containers
|
|
54
|
-
* beside the one framework it really produces, so the attribute is the whole
|
|
55
|
-
* filter rather than a refinement of one.
|
|
56
|
-
*
|
|
57
|
-
* Returns an empty list for a file that cannot be read or carries no build
|
|
58
|
-
* action — no evidence, which the caller must not read as "builds no app".
|
|
59
|
-
*/
|
|
60
|
-
export function runnableAppProducts(schemeXml) {
|
|
61
|
-
if (!schemeXml)
|
|
62
|
-
return [];
|
|
63
|
-
const build = /<BuildAction\b[\s\S]*?<\/BuildAction>/.exec(schemeXml);
|
|
64
|
-
if (!build)
|
|
65
|
-
return [];
|
|
66
|
-
const products = [];
|
|
67
|
-
for (const entry of build[0].matchAll(/<BuildActionEntry\b([\s\S]*?)<\/BuildActionEntry>/g)) {
|
|
68
|
-
const attrs = entry[1];
|
|
69
|
-
if (!/buildForRunning\s*=\s*"YES"/.test(attrs))
|
|
70
|
-
continue;
|
|
71
|
-
for (const ref of attrs.matchAll(/BuildableName\s*=\s*"([^"]*)"/g)) {
|
|
72
|
-
if (ref[1].endsWith('.app'))
|
|
73
|
-
products.push(ref[1]);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return products;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* The bundle to export, given everything that was built and what the scheme
|
|
80
|
-
* says it builds.
|
|
81
|
-
*
|
|
82
|
-
* In order: the scheme's own product on the destination's platform, the
|
|
83
|
-
* scheme's own product anywhere, anything on the destination's platform,
|
|
84
|
-
* anything at all. The last two are the no-shared-scheme path, and they are
|
|
85
|
-
* what keeps a project that never committed a scheme building exactly as it
|
|
86
|
-
* did before.
|
|
87
|
-
*/
|
|
88
|
-
export function chooseAppProduct(apps, schemeProducts, destination) {
|
|
89
|
-
if (apps.length === 0)
|
|
90
|
-
return null;
|
|
91
|
-
const suffix = platformSuffixForDestination(destination);
|
|
92
|
-
const onPlatform = apps.filter((a) => a.platform.endsWith(suffix));
|
|
93
|
-
const named = (list) => list.find((a) => schemeProducts.includes(a.name)) ?? null;
|
|
94
|
-
return named(onPlatform) ?? named(apps) ?? onPlatform[0] ?? apps[0] ?? null;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* The resolver as it runs on the build machine: dependency-free CommonJS,
|
|
98
|
-
* written to a temp file and invoked with
|
|
99
|
-
* `node <file> <productsDir> <projectPath> <scheme> <destination>`.
|
|
100
|
-
*
|
|
101
|
-
* It prints the chosen bundle's path and nothing else, and exits non-zero with
|
|
102
|
-
* no output when it cannot choose — which is the signal for the caller's
|
|
103
|
-
* existing scan to take over, so a machine without a usable node is no worse
|
|
104
|
-
* off than before this existed.
|
|
105
|
-
*
|
|
106
|
-
* Kept as source text rather than bundled because the step ships a shell
|
|
107
|
-
* script, not a module graph. The three functions above are the same rules in
|
|
108
|
-
* testable form, and `xcode-app-product.test.ts` holds them to each other.
|
|
109
|
-
*
|
|
110
|
-
* Must contain no backtick and no dollar-brace: it is emitted into a bash
|
|
111
|
-
* heredoc, and it is a TypeScript template literal on the way there.
|
|
112
|
-
*/
|
|
113
|
-
export const APP_PRODUCT_RESOLVER_SOURCE = String.raw `
|
|
114
|
-
var fs = require('fs');
|
|
115
|
-
var path = require('path');
|
|
116
|
-
|
|
117
|
-
var productsDir = process.argv[2];
|
|
118
|
-
var projectPath = process.argv[3] || '';
|
|
119
|
-
var scheme = process.argv[4] || '';
|
|
120
|
-
var destination = process.argv[5] || '';
|
|
121
|
-
|
|
122
|
-
// Every .app under Products, both directly and one platform directory down,
|
|
123
|
-
// which is where -derivedDataPath leaves them.
|
|
124
|
-
function builtApps(dir) {
|
|
125
|
-
var out = [];
|
|
126
|
-
var entries = readDir(dir);
|
|
127
|
-
for (var i = 0; i < entries.length; i++) {
|
|
128
|
-
var entry = entries[i];
|
|
129
|
-
if (!entry.isDirectory()) continue;
|
|
130
|
-
var full = path.join(dir, entry.name);
|
|
131
|
-
if (/\.app$/.test(entry.name)) {
|
|
132
|
-
out.push({ platform: '', name: entry.name, path: full });
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
var inner = readDir(full);
|
|
136
|
-
for (var j = 0; j < inner.length; j++) {
|
|
137
|
-
if (inner[j].isDirectory() && /\.app$/.test(inner[j].name)) {
|
|
138
|
-
out.push({
|
|
139
|
-
platform: entry.name,
|
|
140
|
-
name: inner[j].name,
|
|
141
|
-
path: path.join(full, inner[j].name)
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return out;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function readDir(dir) {
|
|
150
|
-
try {
|
|
151
|
-
return fs.readdirSync(dir, { withFileTypes: true });
|
|
152
|
-
} catch (err) {
|
|
153
|
-
return [];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Shared schemes only. A scheme under xcuserdata belongs to one developer's
|
|
158
|
-
// checkout and is not in the repository, which is also what xcodebuild -list
|
|
159
|
-
// would see here.
|
|
160
|
-
function sharedSchemeFiles(dir, depth, found) {
|
|
161
|
-
var entries = readDir(dir);
|
|
162
|
-
for (var i = 0; i < entries.length; i++) {
|
|
163
|
-
var entry = entries[i];
|
|
164
|
-
var full = path.join(dir, entry.name);
|
|
165
|
-
if (!entry.isDirectory()) {
|
|
166
|
-
if (/\.xcscheme$/.test(entry.name)) found.push(full);
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
if (entry.name === 'xcuserdata' || entry.name === 'node_modules') continue;
|
|
170
|
-
if (entry.name.charAt(0) === '.') continue;
|
|
171
|
-
var container = /\.(xcodeproj|xcworkspace)$/.test(entry.name);
|
|
172
|
-
if (depth > 0 || container || entry.name === 'xcshareddata' || entry.name === 'xcschemes') {
|
|
173
|
-
sharedSchemeFiles(full, depth - 1, found);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return found;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// The products a scheme's build action RUNS. buildForRunning="NO" entries are
|
|
180
|
-
// listed and not built, so a scheme naming three .app targets it merely
|
|
181
|
-
// references must not be read as building any of them.
|
|
182
|
-
function runnableAppProducts(schemeFile) {
|
|
183
|
-
var xml;
|
|
184
|
-
try {
|
|
185
|
-
xml = fs.readFileSync(schemeFile, 'utf-8');
|
|
186
|
-
} catch (err) {
|
|
187
|
-
return [];
|
|
188
|
-
}
|
|
189
|
-
var build = /<BuildAction\b[\s\S]*?<\/BuildAction>/.exec(xml);
|
|
190
|
-
if (!build) return [];
|
|
191
|
-
var products = [];
|
|
192
|
-
var entryRe = /<BuildActionEntry\b([\s\S]*?)<\/BuildActionEntry>/g;
|
|
193
|
-
var entry;
|
|
194
|
-
while ((entry = entryRe.exec(build[0])) !== null) {
|
|
195
|
-
if (!/buildForRunning\s*=\s*"YES"/.test(entry[1])) continue;
|
|
196
|
-
var nameRe = /BuildableName\s*=\s*"([^"]*)"/g;
|
|
197
|
-
var ref;
|
|
198
|
-
while ((ref = nameRe.exec(entry[1])) !== null) {
|
|
199
|
-
if (/\.app$/.test(ref[1])) products.push(ref[1]);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
return products;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function platformSuffix(dest) {
|
|
206
|
-
var d = String(dest).toLowerCase();
|
|
207
|
-
if (d.indexOf('watchos') !== -1) return '-watchsimulator';
|
|
208
|
-
if (d.indexOf('tvos') !== -1) return '-appletvsimulator';
|
|
209
|
-
if (d.indexOf('visionos') !== -1 || d.indexOf('xros') !== -1) return '-xrsimulator';
|
|
210
|
-
return '-iphonesimulator';
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function endsWith(text, suffix) {
|
|
214
|
-
return suffix.length <= text.length && text.slice(text.length - suffix.length) === suffix;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
var apps = builtApps(productsDir);
|
|
218
|
-
if (apps.length === 0) process.exit(1);
|
|
219
|
-
|
|
220
|
-
var schemeProducts = [];
|
|
221
|
-
if (scheme) {
|
|
222
|
-
var searchRoot = path.dirname(path.resolve(projectPath || '.'));
|
|
223
|
-
var files = sharedSchemeFiles(searchRoot, 3, []);
|
|
224
|
-
for (var k = 0; k < files.length; k++) {
|
|
225
|
-
if (path.basename(files[k]) !== scheme + '.xcscheme') continue;
|
|
226
|
-
var named = runnableAppProducts(files[k]);
|
|
227
|
-
for (var n = 0; n < named.length; n++) {
|
|
228
|
-
if (schemeProducts.indexOf(named[n]) === -1) schemeProducts.push(named[n]);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
var suffix = platformSuffix(destination);
|
|
234
|
-
var onPlatform = apps.filter(function (a) { return endsWith(a.platform, suffix); });
|
|
235
|
-
|
|
236
|
-
function firstNamed(list) {
|
|
237
|
-
for (var i = 0; i < list.length; i++) {
|
|
238
|
-
if (schemeProducts.indexOf(list[i].name) !== -1) return list[i];
|
|
239
|
-
}
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
var pick = firstNamed(onPlatform) || firstNamed(apps) || onPlatform[0] || apps[0];
|
|
244
|
-
if (!pick) process.exit(1);
|
|
245
|
-
process.stdout.write(pick.path);
|
|
246
|
-
`;
|
|
247
|
-
//# sourceMappingURL=xcode-app-product.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xcode-app-product.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode-app-product.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The simulator build must export the app the scheme builds.
|
|
3
|
-
*
|
|
4
|
-
* A project whose scheme builds an iOS app and a watchOS companion produces two
|
|
5
|
-
* bundles under Products, and the step took whichever a directory scan reached
|
|
6
|
-
* first. It reached the watch companion: a green build whose artifact manifest
|
|
7
|
-
* held a 588 KB watch app and not the application the scheme is named after.
|
|
8
|
-
* An empty manifest is visibly wrong; a plausible wrong answer is not, and a
|
|
9
|
-
* watch companion is common enough that this would not have stayed rare.
|
|
10
|
-
*
|
|
11
|
-
* Two halves are tested here — the rules, directly, and the resolver script
|
|
12
|
-
* that runs on the build machine, by running it against a real directory tree.
|
|
13
|
-
* The second is what the step actually ships, so the first alone would be a
|
|
14
|
-
* test of a description.
|
|
15
|
-
*/
|
|
16
|
-
import { execFileSync } from 'node:child_process';
|
|
17
|
-
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
18
|
-
import { tmpdir } from 'node:os';
|
|
19
|
-
import { join } from 'node:path';
|
|
20
|
-
import { APP_PRODUCT_RESOLVER_SOURCE, chooseAppProduct, platformSuffixForDestination, runnableAppProducts, } from './xcode-app-product.js';
|
|
21
|
-
const app = (platform, name) => ({
|
|
22
|
-
platform,
|
|
23
|
-
name,
|
|
24
|
-
path: `/tmp/Products/${platform}/${name}`,
|
|
25
|
-
});
|
|
26
|
-
/** A scheme whose build action runs `products`, with `listed` merely referenced. */
|
|
27
|
-
const schemeXml = (products, listed = []) => {
|
|
28
|
-
const entry = (name, runs) => `
|
|
29
|
-
<BuildActionEntry buildForRunning = "${runs ? 'YES' : 'NO'}" buildForArchiving = "${runs ? 'YES' : 'NO'}">
|
|
30
|
-
<BuildableReference BuildableName = "${name}"></BuildableReference>
|
|
31
|
-
</BuildActionEntry>`;
|
|
32
|
-
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
33
|
-
<Scheme version = "1.7">
|
|
34
|
-
<BuildAction parallelizeBuildables = "YES">
|
|
35
|
-
<BuildActionEntries>${products.map((p) => entry(p, true)).join('')}${listed
|
|
36
|
-
.map((p) => entry(p, false))
|
|
37
|
-
.join('')}
|
|
38
|
-
</BuildActionEntries>
|
|
39
|
-
</BuildAction>
|
|
40
|
-
</Scheme>
|
|
41
|
-
`;
|
|
42
|
-
};
|
|
43
|
-
describe('platformSuffixForDestination', () => {
|
|
44
|
-
test('an iOS simulator destination names the iphonesimulator products', () => {
|
|
45
|
-
expect(platformSuffixForDestination('generic/platform=iOS Simulator')).toBe('-iphonesimulator');
|
|
46
|
-
});
|
|
47
|
-
test.each([
|
|
48
|
-
['generic/platform=watchOS Simulator', '-watchsimulator'],
|
|
49
|
-
['generic/platform=tvOS Simulator', '-appletvsimulator'],
|
|
50
|
-
['generic/platform=visionOS Simulator', '-xrsimulator'],
|
|
51
|
-
])('%s builds into %s', (destination, suffix) => {
|
|
52
|
-
expect(platformSuffixForDestination(destination)).toBe(suffix);
|
|
53
|
-
});
|
|
54
|
-
// The default matters: an unrecognised or empty destination must not send the
|
|
55
|
-
// resolver looking in a directory nothing built into.
|
|
56
|
-
test('an unreadable destination falls back to iOS rather than to nothing', () => {
|
|
57
|
-
expect(platformSuffixForDestination('')).toBe('-iphonesimulator');
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe('runnableAppProducts', () => {
|
|
61
|
-
test('reads the application bundles a scheme builds', () => {
|
|
62
|
-
expect(runnableAppProducts(schemeXml(['MyApp.app']))).toEqual(['MyApp.app']);
|
|
63
|
-
});
|
|
64
|
-
// A scheme can carry several .app entries that are compatibility testers in
|
|
65
|
-
// other containers, beside the one product it really builds. "Mentions an
|
|
66
|
-
// app" would pick just as badly as a directory scan does.
|
|
67
|
-
test('ignores an entry the scheme lists but does not build', () => {
|
|
68
|
-
const xml = schemeXml(['MyApp.app'], ['APITester.app', 'ObjCAPITester.app']);
|
|
69
|
-
expect(runnableAppProducts(xml)).toEqual(['MyApp.app']);
|
|
70
|
-
});
|
|
71
|
-
test('ignores a product that is not an application bundle', () => {
|
|
72
|
-
expect(runnableAppProducts(schemeXml(['MyLib.framework', 'MyApp.app']))).toEqual(['MyApp.app']);
|
|
73
|
-
});
|
|
74
|
-
// No evidence, which the caller must not read as "builds no app".
|
|
75
|
-
test.each([
|
|
76
|
-
['a file that could not be read', null],
|
|
77
|
-
['a scheme with no build action', '<?xml version="1.0"?><Scheme></Scheme>'],
|
|
78
|
-
])('%s yields nothing rather than an answer', (_label, xml) => {
|
|
79
|
-
expect(runnableAppProducts(xml)).toEqual([]);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
describe('chooseAppProduct', () => {
|
|
83
|
-
const IOS = 'generic/platform=iOS Simulator';
|
|
84
|
-
// The defect, in one assertion.
|
|
85
|
-
test('takes the scheme’s own app over a companion built beside it', () => {
|
|
86
|
-
const built = [
|
|
87
|
-
app('Debug-watchsimulator', 'Companion Watch App.app'),
|
|
88
|
-
app('Debug-iphonesimulator', 'MyApp.app'),
|
|
89
|
-
];
|
|
90
|
-
expect(chooseAppProduct(built, ['MyApp.app'], IOS)?.name).toBe('MyApp.app');
|
|
91
|
-
});
|
|
92
|
-
// And it must not depend on scan order, which is the property the old code
|
|
93
|
-
// had no opinion about at all.
|
|
94
|
-
test('takes it whichever order the products were found in', () => {
|
|
95
|
-
const built = [
|
|
96
|
-
app('Debug-iphonesimulator', 'MyApp.app'),
|
|
97
|
-
app('Debug-watchsimulator', 'Companion Watch App.app'),
|
|
98
|
-
];
|
|
99
|
-
expect(chooseAppProduct(built, ['MyApp.app'], IOS)?.name).toBe('MyApp.app');
|
|
100
|
-
});
|
|
101
|
-
// The single-target shape, which must not regress.
|
|
102
|
-
test('takes the only app there is', () => {
|
|
103
|
-
const built = [app('Debug-iphonesimulator', 'Contributions.app')];
|
|
104
|
-
expect(chooseAppProduct(built, ['Contributions.app'], IOS)?.name).toBe('Contributions.app');
|
|
105
|
-
});
|
|
106
|
-
// Absence of evidence is not evidence: a project with no shared scheme is
|
|
107
|
-
// ordinary, and those builds worked before this resolver existed.
|
|
108
|
-
test('still resolves an app when the scheme says nothing', () => {
|
|
109
|
-
const built = [
|
|
110
|
-
app('Debug-watchsimulator', 'Watch.app'),
|
|
111
|
-
app('Debug-iphonesimulator', 'MyApp.app'),
|
|
112
|
-
];
|
|
113
|
-
expect(chooseAppProduct(built, [], IOS)?.name).toBe('MyApp.app');
|
|
114
|
-
});
|
|
115
|
-
test('falls back to any platform when none matches the destination', () => {
|
|
116
|
-
const built = [app('Debug-maccatalyst', 'MyApp.app')];
|
|
117
|
-
expect(chooseAppProduct(built, [], IOS)?.name).toBe('MyApp.app');
|
|
118
|
-
});
|
|
119
|
-
// The scheme outranks the platform directory, not the other way round: a
|
|
120
|
-
// watchOS-only scheme built for watchOS still gets its own product.
|
|
121
|
-
test('honours the scheme when the destination is the companion’s', () => {
|
|
122
|
-
const built = [
|
|
123
|
-
app('Debug-iphonesimulator', 'MyApp.app'),
|
|
124
|
-
app('Debug-watchsimulator', 'Watch.app'),
|
|
125
|
-
];
|
|
126
|
-
const watch = 'generic/platform=watchOS Simulator';
|
|
127
|
-
expect(chooseAppProduct(built, ['Watch.app'], watch)?.name).toBe('Watch.app');
|
|
128
|
-
});
|
|
129
|
-
test('has no answer when nothing was built', () => {
|
|
130
|
-
expect(chooseAppProduct([], ['MyApp.app'], IOS)).toBeNull();
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
/**
|
|
134
|
-
* The script the step actually ships, run against a real tree.
|
|
135
|
-
*
|
|
136
|
-
* The rules above are a description of what should happen; this is the thing
|
|
137
|
-
* that happens. A resolver that is correct and unshippable — a syntax error, a
|
|
138
|
-
* heredoc that swallows a character, a path assumption that only holds in the
|
|
139
|
-
* unit test — passes every assertion above and delivers the watch app.
|
|
140
|
-
*/
|
|
141
|
-
describe('the resolver script, as the build machine runs it', () => {
|
|
142
|
-
let root;
|
|
143
|
-
beforeEach(() => {
|
|
144
|
-
root = mkdtempSync(join(tmpdir(), 'cibuild-app-product-'));
|
|
145
|
-
});
|
|
146
|
-
afterEach(() => {
|
|
147
|
-
rmSync(root, { recursive: true, force: true });
|
|
148
|
-
});
|
|
149
|
-
const products = () => join(root, 'build', 'DerivedData', 'Build', 'Products');
|
|
150
|
-
function builtApp(platform, name) {
|
|
151
|
-
const dir = join(products(), platform, name);
|
|
152
|
-
mkdirSync(dir, { recursive: true });
|
|
153
|
-
writeFileSync(join(dir, 'Info.plist'), '<plist/>\n');
|
|
154
|
-
}
|
|
155
|
-
/** A shared scheme where Xcode puts one, inside the project bundle. */
|
|
156
|
-
function sharedScheme(project, name, xml) {
|
|
157
|
-
const dir = join(root, project, 'xcshareddata', 'xcschemes');
|
|
158
|
-
mkdirSync(dir, { recursive: true });
|
|
159
|
-
writeFileSync(join(dir, `${name}.xcscheme`), xml);
|
|
160
|
-
}
|
|
161
|
-
function resolve(scheme, destination = 'generic/platform=iOS Simulator') {
|
|
162
|
-
const script = join(root, 'resolver.cjs');
|
|
163
|
-
writeFileSync(script, APP_PRODUCT_RESOLVER_SOURCE);
|
|
164
|
-
try {
|
|
165
|
-
return execFileSync(process.execPath, [script, products(), join(root, 'MyApp.xcodeproj'), scheme, destination], { encoding: 'utf-8' });
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
return '';
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
test('exports the app under test, not the watch companion beside it', () => {
|
|
172
|
-
builtApp('Debug-watchsimulator', 'MyApp Watch App.app');
|
|
173
|
-
builtApp('Debug-iphonesimulator', 'MyApp.app');
|
|
174
|
-
sharedScheme('MyApp.xcodeproj', 'MyApp', schemeXml(['MyApp.app']));
|
|
175
|
-
expect(resolve('MyApp')).toBe(join(products(), 'Debug-iphonesimulator', 'MyApp.app'));
|
|
176
|
-
});
|
|
177
|
-
test('exports the only app of a single-target project', () => {
|
|
178
|
-
builtApp('Debug-iphonesimulator', 'Contributions.app');
|
|
179
|
-
sharedScheme('MyApp.xcodeproj', 'MyApp', schemeXml(['Contributions.app']));
|
|
180
|
-
expect(resolve('MyApp')).toBe(join(products(), 'Debug-iphonesimulator', 'Contributions.app'));
|
|
181
|
-
});
|
|
182
|
-
test('still resolves an app for a project with no shared scheme at all', () => {
|
|
183
|
-
builtApp('Debug-iphonesimulator', 'MyApp.app');
|
|
184
|
-
expect(resolve('MyApp')).toBe(join(products(), 'Debug-iphonesimulator', 'MyApp.app'));
|
|
185
|
-
});
|
|
186
|
-
test('reads a scheme shared by a sibling project in the same directory', () => {
|
|
187
|
-
builtApp('Debug-iphonesimulator', 'MyApp.app');
|
|
188
|
-
builtApp('Debug-watchsimulator', 'MyApp Watch App.app');
|
|
189
|
-
sharedScheme('Other.xcodeproj', 'MyApp', schemeXml(['MyApp.app']));
|
|
190
|
-
expect(resolve('MyApp')).toBe(join(products(), 'Debug-iphonesimulator', 'MyApp.app'));
|
|
191
|
-
});
|
|
192
|
-
// Nothing built is the caller's guard to report, not this script's to guess
|
|
193
|
-
// at: it must say nothing rather than print a path that does not exist.
|
|
194
|
-
test('prints nothing when the build produced no app', () => {
|
|
195
|
-
mkdirSync(products(), { recursive: true });
|
|
196
|
-
expect(resolve('MyApp')).toBe('');
|
|
197
|
-
});
|
|
198
|
-
test('prints nothing when there is no Products directory', () => {
|
|
199
|
-
expect(resolve('MyApp')).toBe('');
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
//# sourceMappingURL=xcode-app-product.test.js.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Products go under a derived data path, never into one flat directory.
|
|
3
|
-
*
|
|
4
|
-
* `CONFIGURATION_BUILD_DIR` overrides the per-configuration/per-platform
|
|
5
|
-
* product separation xcodebuild provides under
|
|
6
|
-
* `DerivedData/Build/Products/<config>-<platform>/`, flattening every target in
|
|
7
|
-
* the graph into a single directory. Two build tasks for the same target then
|
|
8
|
-
* declare the same absolute output path and xcodebuild refuses the entire build
|
|
9
|
-
* with "Multiple commands produce". The notes it prints name the SAME target
|
|
10
|
-
* twice, which is the tell: one target built twice into one directory, not two
|
|
11
|
-
* packages colliding on a name.
|
|
12
|
-
*
|
|
13
|
-
* Measured 2026-09-09 on the iOS corpus rows, all on the template's must-pass
|
|
14
|
-
* "Build App" step: 16 collisions on jellyfin/Swiftfin, 266 on
|
|
15
|
-
* Automattic/pocket-casts-ios, 425 on home-assistant/iOS.
|
|
16
|
-
*
|
|
17
|
-
* A fourth row failed differently for the same reason. CocoaPods derives
|
|
18
|
-
* `PODS_CONFIGURATION_BUILD_DIR` from `BUILD_DIR`, which `CONFIGURATION_BUILD_DIR`
|
|
19
|
-
* does NOT override — so pod products land in the flat directory while every
|
|
20
|
-
* generated copy-resources script and linker search path still points into
|
|
21
|
-
* DerivedData. shenruisi/Stay reported "Resource SDWebImage.bundle not found.
|
|
22
|
-
* Run pod install" for a bundle that had been built two directories away.
|
|
23
|
-
*
|
|
24
|
-
* Proved by control on a runner guest, same repo and image and flags with only
|
|
25
|
-
* this setting differing: `CONFIGURATION_BUILD_DIR` reproduced the collision and
|
|
26
|
-
* exit 65 with no .app, `-derivedDataPath` reached BUILD SUCCEEDED in 2m06s and
|
|
27
|
-
* left both `Debug` and `Debug-iphonesimulator` under Products.
|
|
28
|
-
*/
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=xcode-derived-data.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xcode-derived-data.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode-derived-data.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
|