@invarn/cibuild 2.9.6 → 2.9.8
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/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts +0 -2
- package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.js +0 -96
- 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 -1100
- 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 -91
- package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.js +0 -495
- 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/kotlin-metadata-compiles-on-a-daemon.test.d.ts +0 -2
- package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.js +0 -139
- 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,492 +0,0 @@
|
|
|
1
|
-
import { resolve, relative } from "node:path";
|
|
2
|
-
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
3
|
-
import { xcodeContainersIn } from "../shared/detect-project.js";
|
|
4
|
-
// ---------------------------------------------------------------------------
|
|
5
|
-
// File discovery
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
function safeRead(filePath) {
|
|
8
|
-
try {
|
|
9
|
-
return readFileSync(filePath, "utf-8");
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
return "";
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
function relPath(root, filePath) {
|
|
16
|
-
return relative(root, filePath);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Finds the primary Xcode project path.
|
|
20
|
-
* Prefers .xcworkspace over .xcodeproj (CocoaPods projects use workspace).
|
|
21
|
-
* Returns the relative path from root, or empty string if not found.
|
|
22
|
-
*
|
|
23
|
-
* A candidate must be a real container — `isXcodeContainer` — and not merely
|
|
24
|
-
* a directory with the right suffix. `Uwi0/Oakane` ships `iosApp.xcodeproj`
|
|
25
|
-
* with no `project.pbxproj` beside the `oakane.xcodeproj` that has one, and
|
|
26
|
-
* this function returned the husk because it was first.
|
|
27
|
-
*/
|
|
28
|
-
function findXcodeProjectPath(root) {
|
|
29
|
-
const containers = xcodeContainersIn(root);
|
|
30
|
-
const workspaces = containers.filter((e) => e.endsWith(".xcworkspace"));
|
|
31
|
-
const projects = containers.filter((e) => e.endsWith(".xcodeproj"));
|
|
32
|
-
// Prefer workspace (CocoaPods / multi-package setups use these)
|
|
33
|
-
if (workspaces.length > 0)
|
|
34
|
-
return workspaces[0];
|
|
35
|
-
if (projects.length > 0)
|
|
36
|
-
return projects[0];
|
|
37
|
-
return "";
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Names a scheme carries when it builds something beside the app rather than
|
|
41
|
-
* the app: an extension, a widget, a watch or TV companion, a test or
|
|
42
|
-
* screenshot harness. Matched case-insensitively on the whole name.
|
|
43
|
-
*/
|
|
44
|
-
const COMPANION_SCHEME = /(extension|widget|clip|intents?|notification|tvos|macos|watchos|visionos|tests?|screenshots?|staging|prototype|codegen)/i;
|
|
45
|
-
function readSchemeFacts(root, name) {
|
|
46
|
-
for (const entry of xcodeContainersIn(root)) {
|
|
47
|
-
if (!entry.endsWith(".xcodeproj"))
|
|
48
|
-
continue;
|
|
49
|
-
const path = resolve(root, entry, "xcshareddata", "xcschemes", `${name}.xcscheme`);
|
|
50
|
-
if (!existsSync(path))
|
|
51
|
-
continue;
|
|
52
|
-
const xml = safeRead(path);
|
|
53
|
-
if (!xml)
|
|
54
|
-
continue;
|
|
55
|
-
const launch = /<LaunchAction[\s\S]*?<\/LaunchAction>/.exec(xml)?.[0] ?? "";
|
|
56
|
-
// Attribute values carry no `>`, so the opening tag alone is a safe scope
|
|
57
|
-
// and no attribute deeper in the document can be mistaken for it.
|
|
58
|
-
const schemeTag = /<Scheme\b[^>]*>/.exec(xml)?.[0] ?? "";
|
|
59
|
-
return {
|
|
60
|
-
runnable: /BuildableName\s*=\s*"([^"]+)"/.exec(launch)?.[1],
|
|
61
|
-
testable: /<TestableReference/.test(xml),
|
|
62
|
-
appExtension: /wasCreatedForAppExtension\s*=\s*"YES"/.test(schemeTag),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return undefined;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* The detected schemes, best first.
|
|
69
|
-
*
|
|
70
|
-
* `detectedSchemes[0]` is what every caller writes into `IOS_SCHEME`, and it
|
|
71
|
-
* used to be whatever `readdirSync` returned first. A space (0x20) sorts
|
|
72
|
-
* before a period (0x2E), so `"<App> <Suffix>.xcscheme"` **always** lists
|
|
73
|
-
* before `"<App>.xcscheme"`: an app named after its own project loses to its
|
|
74
|
-
* extension or its tvOS companion every time. Four of the eight iOS rows that
|
|
75
|
-
* built in the thirty-app study were given a non-app scheme that way — Stay
|
|
76
|
-
* built its extension and reported "no test bundles available to test";
|
|
77
|
-
* Swiftfin built its tvOS scheme and could not find an iOS Simulator
|
|
78
|
-
* destination.
|
|
79
|
-
*
|
|
80
|
-
* The order, in the terms the scheme XML actually states:
|
|
81
|
-
*
|
|
82
|
-
* 1. named after the project or workspace — the commonest case, and
|
|
83
|
-
* unambiguous;
|
|
84
|
-
* 2. launches the product named after the project, and is not a companion.
|
|
85
|
-
* `thebaselab/codeapp` is why this outranks the next one: its `Code App`
|
|
86
|
-
* scheme launches `Code.app` and declares no tests at all, while `Code UI`
|
|
87
|
-
* has two test bundles and launches `CodeUI.app`;
|
|
88
|
-
* 3. launches an `.app`, declares tests (the template runs them), and is not a
|
|
89
|
-
* companion; among several, the iOS or Debug one, then the shortest;
|
|
90
|
-
* 4. launches an `.app` and is not a companion;
|
|
91
|
-
* 5. whatever order it came in.
|
|
92
|
-
*
|
|
93
|
-
* Every scheme stays in the list — this reorders, it does not filter, so a
|
|
94
|
-
* caller wanting the extension can still find it.
|
|
95
|
-
*
|
|
96
|
-
* **What "companion" has to mean, and why a name is not enough.**
|
|
97
|
-
* `mozilla-mobile/firefox-ios` broke tiers 1-4 without touching the directory
|
|
98
|
-
* order this function was written for. Its project is `Client.xcodeproj`, so
|
|
99
|
-
* `projectName` is `Client`. An app extension is launched *through its host
|
|
100
|
-
* app*, so the `Today` widget scheme's LaunchAction runnable is `Client.app` —
|
|
101
|
-
* identical to `Fennec`'s. Both landed in tier 1, neither name carries an `iOS`
|
|
102
|
-
* or `Debug` token, and the tie fell to name length:
|
|
103
|
-
*
|
|
104
|
-
* "Today" -> 5 characters <- won
|
|
105
|
-
* "Fennec" -> 6 characters
|
|
106
|
-
*
|
|
107
|
-
* The build then failed compiling `ActionExtension` rather than the browser
|
|
108
|
-
* (`bld_b1b38dda58f4111080415283`).
|
|
109
|
-
*
|
|
110
|
-
* Launching the app binary is therefore not sufficient, and the answer is not a
|
|
111
|
-
* longer name blocklist either — `Today` names nothing. Xcode states the fact
|
|
112
|
-
* outright: it writes `wasCreatedForAppExtension = "YES"` onto the `<Scheme>`
|
|
113
|
-
* element of a scheme it created for an extension target, so that is what is
|
|
114
|
-
* read.
|
|
115
|
-
*
|
|
116
|
-
* Measured over all 125 shared schemes in the thirty-app study's clones: 29
|
|
117
|
-
* carry the attribute, and **all 29 are extension schemes** — no false
|
|
118
|
-
* positive. It is also the only signal that would have worked. Two that were
|
|
119
|
-
* considered and are wrong on this same evidence:
|
|
120
|
-
*
|
|
121
|
-
* - *require an `.app` among the BuildAction entries.* 27 of the 29 extension
|
|
122
|
-
* schemes build the host app too — `Today` builds
|
|
123
|
-
* `["Today.appex", "Client.app"]` — so this demotes 2 of 29 and leaves
|
|
124
|
-
* firefox-ios picking `Today`.
|
|
125
|
-
* - *demote anything building an `.appex`.* `chenqi92/primuse`'s `Primuse`
|
|
126
|
-
* scheme is the real app scheme and builds two widget extensions alongside
|
|
127
|
-
* `Primuse.app`.
|
|
128
|
-
*
|
|
129
|
-
* The attribute is a sufficient signal, not a necessary one: a hand-written or
|
|
130
|
-
* pre-Xcode-10 scheme may omit it, and its absence changes nothing, so nothing
|
|
131
|
-
* that ranked before can regress on a scheme that does not carry it.
|
|
132
|
-
*/
|
|
133
|
-
export function rankSchemes(root, projectPath, schemes) {
|
|
134
|
-
return rankSchemesWithReason(root, projectPath, schemes).schemes;
|
|
135
|
-
}
|
|
136
|
-
/** The ranking, plus the sentence explaining its first entry. */
|
|
137
|
-
export function rankSchemesWithReason(root, projectPath, schemes) {
|
|
138
|
-
if (schemes.length < 2)
|
|
139
|
-
return { schemes };
|
|
140
|
-
const projectName = projectPath.replace(/\.(xcodeproj|xcworkspace)$/, "").split("/").pop();
|
|
141
|
-
const scored = schemes.map((name, index) => {
|
|
142
|
-
const facts = readSchemeFacts(root, name);
|
|
143
|
-
// Two ways to be a companion: the name says so, or Xcode does. Xcode's
|
|
144
|
-
// word outranks a name match, so it disqualifies tier 0 as well.
|
|
145
|
-
const companion = COMPANION_SCHEME.test(name) || (facts?.appExtension ?? false);
|
|
146
|
-
const app = facts?.runnable?.endsWith(".app") ?? false;
|
|
147
|
-
let tier = 4;
|
|
148
|
-
if (name === projectName && !facts?.appExtension)
|
|
149
|
-
tier = 0;
|
|
150
|
-
else if (facts?.runnable === `${projectName}.app` && !companion)
|
|
151
|
-
tier = 1;
|
|
152
|
-
else if (app && facts?.testable && !companion)
|
|
153
|
-
tier = 2;
|
|
154
|
-
else if (app && !companion)
|
|
155
|
-
tier = 3;
|
|
156
|
-
return {
|
|
157
|
-
name,
|
|
158
|
-
index,
|
|
159
|
-
tier,
|
|
160
|
-
// Within a tier: an iOS or Debug variant first, then the shorter name.
|
|
161
|
-
preferred: /(^|[^A-Za-z])(iOS|Debug)([^A-Za-z]|$)/i.test(name) ? 0 : 1,
|
|
162
|
-
length: name.length,
|
|
163
|
-
};
|
|
164
|
-
});
|
|
165
|
-
scored.sort((a, b) => a.tier - b.tier ||
|
|
166
|
-
a.preferred - b.preferred ||
|
|
167
|
-
a.length - b.length ||
|
|
168
|
-
a.index - b.index);
|
|
169
|
-
const best = scored[0];
|
|
170
|
-
const others = scored.length - 1;
|
|
171
|
-
const why = [
|
|
172
|
-
"named after the project",
|
|
173
|
-
`launches ${projectName}.app`,
|
|
174
|
-
"the app scheme that runs the tests",
|
|
175
|
-
"the only app scheme that is not a companion",
|
|
176
|
-
"first in the list, and nothing here separates them",
|
|
177
|
-
][best.tier];
|
|
178
|
-
return {
|
|
179
|
-
schemes: scored.map((s) => s.name),
|
|
180
|
-
reason: `${best.name} — ${why}; ${others} other scheme${others === 1 ? "" : "s"} here`,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Detects Xcode schemes by reading *.xcscheme files from the
|
|
185
|
-
* xcshareddata/xcschemes/ directory inside a .xcodeproj bundle.
|
|
186
|
-
* Falls back to deriving the scheme name from the project file name.
|
|
187
|
-
*/
|
|
188
|
-
function detectSchemes(root) {
|
|
189
|
-
const schemes = new Set();
|
|
190
|
-
// Real projects only. The fallback below invents a scheme from the
|
|
191
|
-
// directory's name, so a husk with no shared schemes contributes a scheme
|
|
192
|
-
// named after a project that cannot be opened — which is how `Uwi0/Oakane`
|
|
193
|
-
// got `IOS_SCHEME: iosApp` as well as `IOS_PROJECT_PATH: iosApp.xcodeproj`.
|
|
194
|
-
const entries = xcodeContainersIn(root);
|
|
195
|
-
for (const entry of entries) {
|
|
196
|
-
if (!entry.endsWith(".xcodeproj"))
|
|
197
|
-
continue;
|
|
198
|
-
const schemesDir = resolve(root, entry, "xcshareddata", "xcschemes");
|
|
199
|
-
let schemeFiles;
|
|
200
|
-
try {
|
|
201
|
-
schemeFiles = readdirSync(schemesDir);
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
// No shared schemes — fall back to project name
|
|
205
|
-
const projectName = entry.replace(/\.xcodeproj$/, "");
|
|
206
|
-
schemes.add(projectName);
|
|
207
|
-
continue;
|
|
208
|
-
}
|
|
209
|
-
for (const sf of schemeFiles) {
|
|
210
|
-
if (sf.endsWith(".xcscheme")) {
|
|
211
|
-
schemes.add(sf.replace(/\.xcscheme$/, ""));
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return Array.from(schemes);
|
|
216
|
-
}
|
|
217
|
-
// ---------------------------------------------------------------------------
|
|
218
|
-
// xcconfig env var detection
|
|
219
|
-
// ---------------------------------------------------------------------------
|
|
220
|
-
/**
|
|
221
|
-
* Recursively finds all *.xcconfig files under root, skipping build/DerivedData/Pods.
|
|
222
|
-
*/
|
|
223
|
-
const SKIP_XCCONFIG_DIRS = new Set(["build", "DerivedData", "Pods", ".git", ".ci", "node_modules"]);
|
|
224
|
-
function findXcconfigFiles(dir) {
|
|
225
|
-
const results = [];
|
|
226
|
-
let entries;
|
|
227
|
-
try {
|
|
228
|
-
entries = readdirSync(dir, { withFileTypes: true });
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
return results;
|
|
232
|
-
}
|
|
233
|
-
for (const entry of entries) {
|
|
234
|
-
if (entry.isDirectory()) {
|
|
235
|
-
if (!SKIP_XCCONFIG_DIRS.has(entry.name)) {
|
|
236
|
-
results.push(...findXcconfigFiles(resolve(dir, entry.name)));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else if (entry.name.endsWith(".xcconfig")) {
|
|
240
|
-
results.push(resolve(dir, entry.name));
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return results;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Extract environment variable references from xcconfig content.
|
|
247
|
-
* xcconfig uses $(VAR_NAME) syntax.
|
|
248
|
-
*/
|
|
249
|
-
function extractXcconfigEnvRefs(content) {
|
|
250
|
-
const results = [];
|
|
251
|
-
// Match $(VAR_NAME) — only uppercase + underscore patterns (likely env vars)
|
|
252
|
-
const re = /\$\(([A-Z][A-Z0-9_]+)\)/g;
|
|
253
|
-
const known = new Set(["SRCROOT", "PROJECT_DIR", "CONFIGURATION", "PRODUCT_NAME", "TARGET_NAME", "BUILT_PRODUCTS_DIR"]);
|
|
254
|
-
let m;
|
|
255
|
-
while ((m = re.exec(content)) !== null) {
|
|
256
|
-
const name = m[1];
|
|
257
|
-
if (!known.has(name)) {
|
|
258
|
-
results.push(name);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return [...new Set(results)];
|
|
262
|
-
}
|
|
263
|
-
// ---------------------------------------------------------------------------
|
|
264
|
-
// Signing config detection
|
|
265
|
-
// ---------------------------------------------------------------------------
|
|
266
|
-
/**
|
|
267
|
-
* Returns true if project.pbxproj indicates manual (non-automatic) code signing.
|
|
268
|
-
* Automatic signing sets PROVISIONING_PROFILE_SPECIFIER = "" and
|
|
269
|
-
* CODE_SIGN_STYLE = Automatic.
|
|
270
|
-
*/
|
|
271
|
-
function detectManualSigning(root) {
|
|
272
|
-
let entries;
|
|
273
|
-
try {
|
|
274
|
-
entries = readdirSync(root);
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
return false;
|
|
278
|
-
}
|
|
279
|
-
for (const entry of entries) {
|
|
280
|
-
if (!entry.endsWith(".xcodeproj"))
|
|
281
|
-
continue;
|
|
282
|
-
const pbxprojPath = resolve(root, entry, "project.pbxproj");
|
|
283
|
-
const content = safeRead(pbxprojPath);
|
|
284
|
-
if (!content)
|
|
285
|
-
continue;
|
|
286
|
-
// Automatic signing sets CODE_SIGN_STYLE = Automatic
|
|
287
|
-
const isAutomatic = /CODE_SIGN_STYLE\s*=\s*Automatic/.test(content);
|
|
288
|
-
// Manual signing has a non-empty PROVISIONING_PROFILE_SPECIFIER or explicit identity.
|
|
289
|
-
// Modern Xcode emits "Apple Development" / "Apple Distribution"; older projects
|
|
290
|
-
// still use the legacy "iPhone Developer" / "iPhone Distribution" names.
|
|
291
|
-
const hasProvisioningSpecifier = /PROVISIONING_PROFILE_SPECIFIER\s*=\s*"[^"]+"\s*;/.test(content);
|
|
292
|
-
const hasExplicitIdentity = /CODE_SIGN_IDENTITY\s*=\s*"(?:iPhone|Apple) (?:Developer|Development|Distribution)"/.test(content);
|
|
293
|
-
if (!isAutomatic && (hasProvisioningSpecifier || hasExplicitIdentity)) {
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Extracts the DEVELOPMENT_TEAM value from project.pbxproj.
|
|
301
|
-
* Returns the first non-empty team ID found, or empty string.
|
|
302
|
-
*/
|
|
303
|
-
function detectDevelopmentTeam(root) {
|
|
304
|
-
let entries;
|
|
305
|
-
try {
|
|
306
|
-
entries = readdirSync(root);
|
|
307
|
-
}
|
|
308
|
-
catch {
|
|
309
|
-
return "";
|
|
310
|
-
}
|
|
311
|
-
for (const entry of entries) {
|
|
312
|
-
if (!entry.endsWith(".xcodeproj"))
|
|
313
|
-
continue;
|
|
314
|
-
const pbxprojPath = resolve(root, entry, "project.pbxproj");
|
|
315
|
-
const content = safeRead(pbxprojPath);
|
|
316
|
-
if (!content)
|
|
317
|
-
continue;
|
|
318
|
-
const match = content.match(/DEVELOPMENT_TEAM\s*=\s*([A-Z0-9]{10})\s*;/);
|
|
319
|
-
if (match)
|
|
320
|
-
return match[1];
|
|
321
|
-
}
|
|
322
|
-
return "";
|
|
323
|
-
}
|
|
324
|
-
// ---------------------------------------------------------------------------
|
|
325
|
-
// Gitignore check
|
|
326
|
-
// ---------------------------------------------------------------------------
|
|
327
|
-
const IOS_RELEVANT_GITIGNORE_PATTERNS = [
|
|
328
|
-
{ pattern: /^Pods\/$|^\/Pods\//, label: "Pods/ (CocoaPods dependencies)" },
|
|
329
|
-
{ pattern: /\*\.p12|\*\.cer/, label: "certificates (*.p12, *.cer)" },
|
|
330
|
-
{ pattern: /\*\.mobileprovision/, label: "provisioning profiles (*.mobileprovision)" },
|
|
331
|
-
{ pattern: /\.env$|\*\.env/, label: ".env files" },
|
|
332
|
-
];
|
|
333
|
-
function checkGitignore(root) {
|
|
334
|
-
const gitignorePath = resolve(root, ".gitignore");
|
|
335
|
-
if (!existsSync(gitignorePath))
|
|
336
|
-
return [];
|
|
337
|
-
const content = safeRead(gitignorePath);
|
|
338
|
-
const lines = content.split("\n").map((l) => l.trim()).filter((l) => l && !l.startsWith("#"));
|
|
339
|
-
const found = [];
|
|
340
|
-
for (const { pattern, label } of IOS_RELEVANT_GITIGNORE_PATTERNS) {
|
|
341
|
-
if (lines.some((l) => pattern.test(l))) {
|
|
342
|
-
found.push(label);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return found;
|
|
346
|
-
}
|
|
347
|
-
// ---------------------------------------------------------------------------
|
|
348
|
-
// Main scanner
|
|
349
|
-
// ---------------------------------------------------------------------------
|
|
350
|
-
export async function scanIosProject(projectRoot) {
|
|
351
|
-
const warnings = [];
|
|
352
|
-
// 1. Find project path
|
|
353
|
-
const projectPath = findXcodeProjectPath(projectRoot);
|
|
354
|
-
// 2. Detect schemes, best first — `detectedSchemes[0]` is what becomes
|
|
355
|
-
// IOS_SCHEME, and the filesystem's order is not a ranking.
|
|
356
|
-
const ranked = rankSchemesWithReason(projectRoot, projectPath, detectSchemes(projectRoot));
|
|
357
|
-
const detectedSchemes = ranked.schemes;
|
|
358
|
-
// 3. CocoaPods
|
|
359
|
-
const hasCocoaPods = existsSync(resolve(projectRoot, "Podfile"));
|
|
360
|
-
// 4. SPM
|
|
361
|
-
const hasSPM = existsSync(resolve(projectRoot, "Package.swift"));
|
|
362
|
-
// 5. Signing config + team ID
|
|
363
|
-
const hasSigningConfig = detectManualSigning(projectRoot);
|
|
364
|
-
const developmentTeam = detectDevelopmentTeam(projectRoot);
|
|
365
|
-
// 6. CocoaPods warnings
|
|
366
|
-
const gitignoreItems = checkGitignore(projectRoot);
|
|
367
|
-
const podsGitignored = gitignoreItems.some((i) => i.includes("Pods/"));
|
|
368
|
-
if (hasCocoaPods) {
|
|
369
|
-
if (podsGitignored) {
|
|
370
|
-
warnings.push({
|
|
371
|
-
category: "cocoapods",
|
|
372
|
-
severity: "info",
|
|
373
|
-
message: "Pods/ is gitignored — pod install will run on CI",
|
|
374
|
-
hint: "The generated pipeline includes a pod install step",
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
if (!existsSync(resolve(projectRoot, "Podfile.lock"))) {
|
|
378
|
-
warnings.push({
|
|
379
|
-
category: "cocoapods",
|
|
380
|
-
severity: "warning",
|
|
381
|
-
message: "Podfile.lock not found",
|
|
382
|
-
hint: "Run 'pod install' locally and commit Podfile.lock for reproducible builds",
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
// 7. Signing warnings
|
|
387
|
-
if (hasSigningConfig) {
|
|
388
|
-
warnings.push({
|
|
389
|
-
category: "signing-config",
|
|
390
|
-
severity: "warning",
|
|
391
|
-
message: "Manual code signing detected in project.pbxproj",
|
|
392
|
-
hint: "Provide CERTIFICATE_P12, CERTIFICATE_PASSWORD, and PROVISIONING_PROFILE as secrets",
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
// 8. xcconfig env var warnings
|
|
396
|
-
const seenEnvVars = new Set();
|
|
397
|
-
const xcconfigFiles = findXcconfigFiles(projectRoot);
|
|
398
|
-
for (const xcconfigPath of xcconfigFiles) {
|
|
399
|
-
const content = safeRead(xcconfigPath);
|
|
400
|
-
const rel = relPath(projectRoot, xcconfigPath);
|
|
401
|
-
for (const varName of extractXcconfigEnvRefs(content)) {
|
|
402
|
-
if (!seenEnvVars.has(varName)) {
|
|
403
|
-
seenEnvVars.add(varName);
|
|
404
|
-
warnings.push({
|
|
405
|
-
category: "env-var",
|
|
406
|
-
severity: "warning",
|
|
407
|
-
message: `Environment variable referenced: ${varName}`,
|
|
408
|
-
hint: `Add via: ci secrets add ${varName}`,
|
|
409
|
-
location: rel,
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
// 9. Gitignore cross-check for certs / profiles
|
|
415
|
-
for (const item of gitignoreItems) {
|
|
416
|
-
if (item.includes("certificate") || item.includes("provisioning")) {
|
|
417
|
-
warnings.push({
|
|
418
|
-
category: "missing-file",
|
|
419
|
-
severity: "info",
|
|
420
|
-
message: `${item} is in .gitignore — likely absent in CI`,
|
|
421
|
-
hint: "Provide as secrets (CERTIFICATE_P12, PROVISIONING_PROFILE)",
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
return {
|
|
426
|
-
warnings,
|
|
427
|
-
detectedSchemes,
|
|
428
|
-
...(ranked.reason ? { schemeChoiceReason: ranked.reason } : {}),
|
|
429
|
-
hasCocoaPods,
|
|
430
|
-
hasSPM,
|
|
431
|
-
projectPath,
|
|
432
|
-
hasSigningConfig,
|
|
433
|
-
developmentTeam,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
// ---------------------------------------------------------------------------
|
|
437
|
-
// Formatter
|
|
438
|
-
// ---------------------------------------------------------------------------
|
|
439
|
-
const CATEGORY_LABELS = {
|
|
440
|
-
"missing-file": "Missing files",
|
|
441
|
-
"env-var": "Environment variables referenced in xcconfig files",
|
|
442
|
-
"signing-config": "Code signing configuration",
|
|
443
|
-
"cocoapods": "CocoaPods",
|
|
444
|
-
};
|
|
445
|
-
export function formatIosScanResult(result) {
|
|
446
|
-
const lines = [];
|
|
447
|
-
const sep = "─".repeat(50);
|
|
448
|
-
if (result.detectedSchemes.length > 0) {
|
|
449
|
-
lines.push(`ℹ Detected schemes: ${result.detectedSchemes.join(", ")}`);
|
|
450
|
-
lines.push("");
|
|
451
|
-
}
|
|
452
|
-
if (result.hasSPM) {
|
|
453
|
-
lines.push("ℹ Swift Package Manager detected — dependencies resolved automatically by Xcode");
|
|
454
|
-
lines.push("");
|
|
455
|
-
}
|
|
456
|
-
if (result.warnings.length === 0) {
|
|
457
|
-
lines.push("✅ No potential unknowns detected.");
|
|
458
|
-
return lines.join("\n") + "\n";
|
|
459
|
-
}
|
|
460
|
-
lines.push("⚠ iOS Project Scan — Potential Unknowns");
|
|
461
|
-
lines.push(sep);
|
|
462
|
-
lines.push("");
|
|
463
|
-
const byCategory = new Map();
|
|
464
|
-
for (const w of result.warnings) {
|
|
465
|
-
if (!byCategory.has(w.category))
|
|
466
|
-
byCategory.set(w.category, []);
|
|
467
|
-
byCategory.get(w.category).push(w);
|
|
468
|
-
}
|
|
469
|
-
for (const [cat, items] of byCategory) {
|
|
470
|
-
lines.push(`${CATEGORY_LABELS[cat]}:`);
|
|
471
|
-
for (const w of items) {
|
|
472
|
-
const icon = w.severity === "warning" ? "⚠ " : "ℹ ";
|
|
473
|
-
const loc = w.location ? ` (${w.location})` : "";
|
|
474
|
-
lines.push(` ${icon} ${w.message}${loc}`);
|
|
475
|
-
if (w.hint) {
|
|
476
|
-
lines.push(` Hint: ${w.hint}`);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
lines.push("");
|
|
480
|
-
}
|
|
481
|
-
lines.push(sep);
|
|
482
|
-
const warnCount = result.warnings.filter((w) => w.severity === "warning").length;
|
|
483
|
-
const infoCount = result.warnings.filter((w) => w.severity === "info").length;
|
|
484
|
-
const parts = [];
|
|
485
|
-
if (warnCount > 0)
|
|
486
|
-
parts.push(`${warnCount} warning(s)`);
|
|
487
|
-
if (infoCount > 0)
|
|
488
|
-
parts.push(`${infoCount} info`);
|
|
489
|
-
lines.push(`${parts.join(", ")} found. Review before running on CI.`);
|
|
490
|
-
return lines.join("\n");
|
|
491
|
-
}
|
|
492
|
-
//# sourceMappingURL=ios-scanner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ios-scheme-ranking.test.d.ts","sourceRoot":"","sources":["../../../src/commands/ios-scheme-ranking.test.ts"],"names":[],"mappings":""}
|