@invarn/cibuild 2.9.5 → 2.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-35SI42CD.mjs +1 -0
- package/dist/chunk-IC45KVLJ.mjs +1 -0
- package/dist/chunk-XDY4V23V.mjs +1 -0
- package/dist/cli.cjs +14 -14
- package/dist/commands.mjs +1 -0
- package/dist/lib.mjs +3934 -0
- package/package.json +6 -10
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -399
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts +0 -38
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.js +0 -222
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts +0 -41
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js +0 -324
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts +0 -2
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map +0 -1
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.js +0 -382
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts +0 -29
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts.map +0 -1
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.js +0 -160
- package/dist/src/commands/android-gms-guard.test.d.ts +0 -9
- package/dist/src/commands/android-gms-guard.test.d.ts.map +0 -1
- package/dist/src/commands/android-gms-guard.test.js +0 -78
- package/dist/src/commands/android-java-version.test.d.ts +0 -12
- package/dist/src/commands/android-java-version.test.d.ts.map +0 -1
- package/dist/src/commands/android-java-version.test.js +0 -209
- package/dist/src/commands/android-scanner-java.test.d.ts +0 -2
- package/dist/src/commands/android-scanner-java.test.d.ts.map +0 -1
- package/dist/src/commands/android-scanner-java.test.js +0 -130
- package/dist/src/commands/android-scanner.d.ts +0 -250
- package/dist/src/commands/android-scanner.d.ts.map +0 -1
- package/dist/src/commands/android-scanner.js +0 -1639
- package/dist/src/commands/build.d.ts +0 -215
- package/dist/src/commands/build.d.ts.map +0 -1
- package/dist/src/commands/build.js +0 -1433
- package/dist/src/commands/build.test.d.ts +0 -13
- package/dist/src/commands/build.test.d.ts.map +0 -1
- package/dist/src/commands/build.test.js +0 -121
- package/dist/src/commands/detect-platform.d.ts +0 -13
- package/dist/src/commands/detect-platform.d.ts.map +0 -1
- package/dist/src/commands/detect-platform.js +0 -51
- package/dist/src/commands/detect-project.d.ts +0 -7
- package/dist/src/commands/detect-project.d.ts.map +0 -1
- package/dist/src/commands/detect-project.js +0 -12
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts +0 -26
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts.map +0 -1
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.js +0 -196
- package/dist/src/commands/edit.d.ts +0 -12
- package/dist/src/commands/edit.d.ts.map +0 -1
- package/dist/src/commands/edit.js +0 -652
- package/dist/src/commands/edit.test.d.ts +0 -6
- package/dist/src/commands/edit.test.d.ts.map +0 -1
- package/dist/src/commands/edit.test.js +0 -45
- package/dist/src/commands/fidelity-trim.d.ts +0 -13
- package/dist/src/commands/fidelity-trim.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.js +0 -21
- package/dist/src/commands/fidelity-trim.test.d.ts +0 -8
- package/dist/src/commands/fidelity-trim.test.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.test.js +0 -79
- package/dist/src/commands/file-secret-collector.d.ts +0 -50
- package/dist/src/commands/file-secret-collector.d.ts.map +0 -1
- package/dist/src/commands/file-secret-collector.js +0 -217
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts +0 -38
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts.map +0 -1
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.js +0 -300
- package/dist/src/commands/github-workflow.d.ts +0 -5
- package/dist/src/commands/github-workflow.d.ts.map +0 -1
- package/dist/src/commands/github-workflow.js +0 -45
- package/dist/src/commands/index.d.ts +0 -33
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js +0 -33
- package/dist/src/commands/init.d.ts +0 -20
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/init.js +0 -264
- package/dist/src/commands/ios-scanner.d.ts +0 -104
- package/dist/src/commands/ios-scanner.d.ts.map +0 -1
- package/dist/src/commands/ios-scanner.js +0 -492
- package/dist/src/commands/ios-scheme-ranking.test.d.ts +0 -2
- package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +0 -1
- package/dist/src/commands/ios-scheme-ranking.test.js +0 -264
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts +0 -30
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/local-properties-reaches-every-workflow.test.js +0 -146
- package/dist/src/commands/reset.d.ts +0 -7
- package/dist/src/commands/reset.d.ts.map +0 -1
- package/dist/src/commands/reset.js +0 -81
- package/dist/src/commands/run.d.ts +0 -22
- package/dist/src/commands/run.d.ts.map +0 -1
- package/dist/src/commands/run.js +0 -141
- package/dist/src/commands/secrets-sync-workflow.d.ts +0 -15
- package/dist/src/commands/secrets-sync-workflow.d.ts.map +0 -1
- package/dist/src/commands/secrets-sync-workflow.js +0 -255
- package/dist/src/commands/secrets-upload.d.ts +0 -21
- package/dist/src/commands/secrets-upload.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.js +0 -177
- package/dist/src/commands/secrets-upload.test.d.ts +0 -5
- package/dist/src/commands/secrets-upload.test.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.test.js +0 -60
- package/dist/src/commands/validate.d.ts +0 -10
- package/dist/src/commands/validate.d.ts.map +0 -1
- package/dist/src/commands/validate.js +0 -46
- package/dist/src/config.d.ts +0 -3
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -47
- package/dist/src/envman/cli.d.ts +0 -21
- package/dist/src/envman/cli.d.ts.map +0 -1
- package/dist/src/envman/cli.js +0 -240
- package/dist/src/envman/envman.d.ts +0 -83
- package/dist/src/envman/envman.d.ts.map +0 -1
- package/dist/src/envman/envman.js +0 -361
- package/dist/src/envman/envman.test.d.ts +0 -5
- package/dist/src/envman/envman.test.d.ts.map +0 -1
- package/dist/src/envman/envman.test.js +0 -236
- package/dist/src/envman/envstore-round-trip.test.d.ts +0 -27
- package/dist/src/envman/envstore-round-trip.test.d.ts.map +0 -1
- package/dist/src/envman/envstore-round-trip.test.js +0 -130
- package/dist/src/envman/index.d.ts +0 -23
- package/dist/src/envman/index.d.ts.map +0 -1
- package/dist/src/envman/index.js +0 -23
- package/dist/src/envman/shim.d.ts +0 -16
- package/dist/src/envman/shim.d.ts.map +0 -1
- package/dist/src/envman/shim.js +0 -66
- package/dist/src/envman/types.d.ts +0 -55
- package/dist/src/envman/types.d.ts.map +0 -1
- package/dist/src/envman/types.js +0 -12
- package/dist/src/lib.d.ts +0 -33
- package/dist/src/lib.d.ts.map +0 -1
- package/dist/src/lib.js +0 -37
- package/dist/src/pipeline.d.ts +0 -3
- package/dist/src/pipeline.d.ts.map +0 -1
- package/dist/src/pipeline.js +0 -57
- package/dist/src/runner-node-step.test.d.ts +0 -12
- package/dist/src/runner-node-step.test.d.ts.map +0 -1
- package/dist/src/runner-node-step.test.js +0 -61
- package/dist/src/runner.d.ts +0 -31
- package/dist/src/runner.d.ts.map +0 -1
- package/dist/src/runner.js +0 -240
- package/dist/src/shared/detect-project.d.ts +0 -57
- package/dist/src/shared/detect-project.d.ts.map +0 -1
- package/dist/src/shared/detect-project.js +0 -219
- package/dist/src/shared/detect-project.test.d.ts +0 -2
- package/dist/src/shared/detect-project.test.d.ts.map +0 -1
- package/dist/src/shared/detect-project.test.js +0 -161
- package/dist/src/shared/git.d.ts +0 -25
- package/dist/src/shared/git.d.ts.map +0 -1
- package/dist/src/shared/git.js +0 -53
- package/dist/src/shared/git.test.d.ts +0 -9
- package/dist/src/shared/git.test.d.ts.map +0 -1
- package/dist/src/shared/git.test.js +0 -66
- package/dist/src/shared/gitignore.d.ts +0 -6
- package/dist/src/shared/gitignore.d.ts.map +0 -1
- package/dist/src/shared/gitignore.js +0 -26
- package/dist/src/shared/gradle-settings.d.ts +0 -49
- package/dist/src/shared/gradle-settings.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.js +0 -138
- package/dist/src/shared/gradle-settings.test.d.ts +0 -2
- package/dist/src/shared/gradle-settings.test.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.test.js +0 -65
- package/dist/src/shared/prompts.d.ts +0 -30
- package/dist/src/shared/prompts.d.ts.map +0 -1
- package/dist/src/shared/prompts.js +0 -121
- package/dist/src/shared/xcode-container.test.d.ts +0 -2
- package/dist/src/shared/xcode-container.test.d.ts.map +0 -1
- package/dist/src/shared/xcode-container.test.js +0 -123
- package/dist/src/step-marker.d.ts +0 -12
- package/dist/src/step-marker.d.ts.map +0 -1
- package/dist/src/step-marker.js +0 -29
- package/dist/src/step-marker.test.d.ts +0 -11
- package/dist/src/step-marker.test.d.ts.map +0 -1
- package/dist/src/step-marker.test.js +0 -45
- package/dist/src/types.d.ts +0 -58
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts +0 -28
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts.map +0 -1
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.js +0 -223
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts +0 -20
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.js +0 -201
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts +0 -37
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.js +0 -255
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts +0 -32
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts.map +0 -1
- package/dist/src/yaml/a-missing-credential-is-loud.test.js +0 -301
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +0 -18
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +0 -1
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +0 -66
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts +0 -34
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.js +0 -218
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts +0 -27
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.js +0 -126
- package/dist/src/yaml/bitrise-compat.d.ts +0 -65
- package/dist/src/yaml/bitrise-compat.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.js +0 -206
- package/dist/src/yaml/bitrise-compat.test.d.ts +0 -5
- package/dist/src/yaml/bitrise-compat.test.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.test.js +0 -347
- package/dist/src/yaml/cache-key-missing-file.test.d.ts +0 -12
- package/dist/src/yaml/cache-key-missing-file.test.d.ts.map +0 -1
- package/dist/src/yaml/cache-key-missing-file.test.js +0 -116
- package/dist/src/yaml/converter.d.ts +0 -103
- package/dist/src/yaml/converter.d.ts.map +0 -1
- package/dist/src/yaml/converter.js +0 -420
- package/dist/src/yaml/converter.test.d.ts +0 -5
- package/dist/src/yaml/converter.test.d.ts.map +0 -1
- package/dist/src/yaml/converter.test.js +0 -548
- package/dist/src/yaml/e2e.test.d.ts +0 -6
- package/dist/src/yaml/e2e.test.d.ts.map +0 -1
- package/dist/src/yaml/e2e.test.js +0 -446
- package/dist/src/yaml/env-resolver.d.ts +0 -218
- package/dist/src/yaml/env-resolver.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.js +0 -591
- package/dist/src/yaml/env-resolver.test.d.ts +0 -5
- package/dist/src/yaml/env-resolver.test.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.test.js +0 -502
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +0 -16
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +0 -1
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +0 -126
- package/dist/src/yaml/fidelity-input-digest.d.ts +0 -37
- package/dist/src/yaml/fidelity-input-digest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.js +0 -208
- package/dist/src/yaml/fidelity-input-digest.test.d.ts +0 -2
- package/dist/src/yaml/fidelity-input-digest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.test.js +0 -167
- package/dist/src/yaml/fidelity-manifest.d.ts +0 -126
- package/dist/src/yaml/fidelity-manifest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.js +0 -134
- package/dist/src/yaml/fidelity-manifest.test.d.ts +0 -12
- package/dist/src/yaml/fidelity-manifest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.test.js +0 -251
- package/dist/src/yaml/interactive-prompts.d.ts +0 -71
- package/dist/src/yaml/interactive-prompts.d.ts.map +0 -1
- package/dist/src/yaml/interactive-prompts.js +0 -260
- package/dist/src/yaml/meta-helpers.d.ts +0 -28
- package/dist/src/yaml/meta-helpers.d.ts.map +0 -1
- package/dist/src/yaml/meta-helpers.js +0 -46
- package/dist/src/yaml/missing-env-handler.d.ts +0 -45
- package/dist/src/yaml/missing-env-handler.d.ts.map +0 -1
- package/dist/src/yaml/missing-env-handler.js +0 -64
- package/dist/src/yaml/parser.d.ts +0 -33
- package/dist/src/yaml/parser.d.ts.map +0 -1
- package/dist/src/yaml/parser.js +0 -148
- package/dist/src/yaml/parser.test.d.ts +0 -5
- package/dist/src/yaml/parser.test.d.ts.map +0 -1
- package/dist/src/yaml/parser.test.js +0 -83
- package/dist/src/yaml/pipeline-with-secrets.d.ts +0 -25
- package/dist/src/yaml/pipeline-with-secrets.d.ts.map +0 -1
- package/dist/src/yaml/pipeline-with-secrets.js +0 -76
- package/dist/src/yaml/platform-detector.d.ts +0 -83
- package/dist/src/yaml/platform-detector.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.js +0 -189
- package/dist/src/yaml/platform-detector.test.d.ts +0 -5
- package/dist/src/yaml/platform-detector.test.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.test.js +0 -525
- package/dist/src/yaml/preflight-validation.d.ts +0 -29
- package/dist/src/yaml/preflight-validation.d.ts.map +0 -1
- package/dist/src/yaml/preflight-validation.js +0 -21
- package/dist/src/yaml/secrets-manager.d.ts +0 -87
- package/dist/src/yaml/secrets-manager.d.ts.map +0 -1
- package/dist/src/yaml/secrets-manager.js +0 -230
- package/dist/src/yaml/shell-assignments.d.ts +0 -40
- package/dist/src/yaml/shell-assignments.d.ts.map +0 -1
- package/dist/src/yaml/shell-assignments.js +0 -77
- package/dist/src/yaml/step-validator-check-failure.test.d.ts +0 -24
- package/dist/src/yaml/step-validator-check-failure.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-check-failure.test.js +0 -130
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts +0 -23
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-self-assigned.test.js +0 -191
- package/dist/src/yaml/step-validator.d.ts +0 -67
- package/dist/src/yaml/step-validator.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.js +0 -466
- package/dist/src/yaml/step-validator.test.d.ts +0 -18
- package/dist/src/yaml/step-validator.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.test.js +0 -140
- package/dist/src/yaml/steps/android-sign.d.ts +0 -35
- package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-sign.js +0 -147
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
- package/dist/src/yaml/steps/android-version.d.ts +0 -26
- package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.js +0 -128
- package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
- package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.test.js +0 -196
- package/dist/src/yaml/steps/android.d.ts +0 -156
- package/dist/src/yaml/steps/android.d.ts.map +0 -1
- package/dist/src/yaml/steps/android.js +0 -1092
- package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
- package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/app-store-deploy.js +0 -167
- package/dist/src/yaml/steps/base.d.ts +0 -263
- package/dist/src/yaml/steps/base.d.ts.map +0 -1
- package/dist/src/yaml/steps/base.js +0 -380
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
- package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
- package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.js +0 -280
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
- package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
- package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
- package/dist/src/yaml/steps/cache.d.ts +0 -59
- package/dist/src/yaml/steps/cache.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache.js +0 -1027
- package/dist/src/yaml/steps/capture-injection.d.ts +0 -30
- package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
- package/dist/src/yaml/steps/capture-injection.js +0 -88
- package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
- package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/capture-injection.test.js +0 -163
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
- package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
- package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
- package/dist/src/yaml/steps/fastlane.d.ts +0 -27
- package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
- package/dist/src/yaml/steps/fastlane.js +0 -79
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
- package/dist/src/yaml/steps/file.d.ts +0 -52
- package/dist/src/yaml/steps/file.d.ts.map +0 -1
- package/dist/src/yaml/steps/file.js +0 -108
- package/dist/src/yaml/steps/flutter.d.ts +0 -63
- package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
- package/dist/src/yaml/steps/flutter.js +0 -215
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
- package/dist/src/yaml/steps/git-clone.d.ts +0 -32
- package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone.js +0 -171
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
- package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
- package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
- package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
- package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.js +0 -193
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
- package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
- package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.js +0 -386
- package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
- package/dist/src/yaml/steps/index.d.ts +0 -10
- package/dist/src/yaml/steps/index.d.ts.map +0 -1
- package/dist/src/yaml/steps/index.js +0 -1461
- package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
- package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.js +0 -279
- package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
- package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.test.js +0 -90
- package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
- package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-signing.js +0 -144
- package/dist/src/yaml/steps/ios-version.d.ts +0 -47
- package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-version.js +0 -151
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
- package/dist/src/yaml/steps/linting.d.ts +0 -47
- package/dist/src/yaml/steps/linting.d.ts.map +0 -1
- package/dist/src/yaml/steps/linting.js +0 -148
- package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase2.test.js +0 -197
- package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase3.test.js +0 -144
- package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase4.test.js +0 -166
- package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase5.test.js +0 -263
- package/dist/src/yaml/steps/registry.d.ts +0 -88
- package/dist/src/yaml/steps/registry.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.js +0 -125
- package/dist/src/yaml/steps/registry.test.d.ts +0 -5
- package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.test.js +0 -235
- package/dist/src/yaml/steps/release.d.ts +0 -50
- package/dist/src/yaml/steps/release.d.ts.map +0 -1
- package/dist/src/yaml/steps/release.js +0 -154
- package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
- package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.js +0 -270
- package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
- package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
- package/dist/src/yaml/steps/script.d.ts +0 -23
- package/dist/src/yaml/steps/script.d.ts.map +0 -1
- package/dist/src/yaml/steps/script.js +0 -63
- package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
- package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/spec-validation.test.js +0 -130
- package/dist/src/yaml/steps/steps.test.d.ts +0 -6
- package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/steps.test.js +0 -881
- package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
- package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.js +0 -3276
- package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
- package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
- package/dist/src/yaml/steps/test-config.d.ts +0 -5
- package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
- package/dist/src/yaml/steps/test-config.js +0 -25
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
- package/dist/src/yaml/steps/trim-align.d.ts +0 -87
- package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.js +0 -367
- package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
- package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.test.js +0 -261
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
- package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
- package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.js +0 -247
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
- package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
- package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.js +0 -202
- package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
- package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
- package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-new.test.js +0 -211
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
- package/dist/src/yaml/steps/xcode.d.ts +0 -230
- package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode.js +0 -1350
- package/dist/src/yaml/types.d.ts +0 -76
- package/dist/src/yaml/types.d.ts.map +0 -1
- package/dist/src/yaml/types.js +0 -5
- package/dist/src/yaml/validation-types.d.ts +0 -102
- package/dist/src/yaml/validation-types.d.ts.map +0 -1
- package/dist/src/yaml/validation-types.js +0 -8
- package/dist/src/yaml/yaml-updater.d.ts +0 -24
- package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
- package/dist/src/yaml/yaml-updater.js +0 -128
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Which scheme an iOS pipeline builds.
|
|
3
|
-
*
|
|
4
|
-
* It used to be the first `.xcscheme` the filesystem listed, and that has a
|
|
5
|
-
* rule: a space (0x20) sorts before a period (0x2E), so
|
|
6
|
-
* `"<App> <Suffix>.xcscheme"` always lists before `"<App>.xcscheme"`. An app
|
|
7
|
-
* named after its project loses to its own extension or tvOS companion every
|
|
8
|
-
* time. Four of the eight iOS rows that built in the thirty-app study got a
|
|
9
|
-
* non-app scheme:
|
|
10
|
-
*
|
|
11
|
-
* Stay → "Stay Extension" → "There are no test bundles available to test"
|
|
12
|
-
* Swiftfin → "Swiftfin tvOS" → "Unable to find a destination matching … iOS Simulator"
|
|
13
|
-
* wikipedia → "ContinueReadingWidget" (masked by an earlier failure)
|
|
14
|
-
* pocketcasts → "NotificationContent" (masked by an earlier failure)
|
|
15
|
-
*
|
|
16
|
-
* The `.xcscheme` XML says what each scheme is, so the ranking reads it.
|
|
17
|
-
*/
|
|
18
|
-
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from "node:fs";
|
|
19
|
-
import { join } from "node:path";
|
|
20
|
-
import { tmpdir } from "node:os";
|
|
21
|
-
import { rankSchemes } from "./ios-scanner.js";
|
|
22
|
-
let root;
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
root = mkdtempSync(join(tmpdir(), "cibuild-scheme-"));
|
|
25
|
-
});
|
|
26
|
-
afterEach(() => {
|
|
27
|
-
rmSync(root, { recursive: true, force: true });
|
|
28
|
-
});
|
|
29
|
-
/** An `.xcscheme` with the parts the ranking reads, in Xcode's own shape. */
|
|
30
|
-
function scheme(project, name, { runnable, testable, appExtension }) {
|
|
31
|
-
const dir = join(root, `${project}.xcodeproj`, "xcshareddata", "xcschemes");
|
|
32
|
-
mkdirSync(dir, { recursive: true });
|
|
33
|
-
// A `.xcodeproj` is its `project.pbxproj`; without one Xcode refuses to open
|
|
34
|
-
// it and the scanners now skip it, so a fixture that omits it is describing
|
|
35
|
-
// a directory that cannot exist outside a test. Content is irrelevant here —
|
|
36
|
-
// the scheme XML is what the ranking reads — but it has to be there.
|
|
37
|
-
writeFileSync(join(root, `${project}.xcodeproj`, "project.pbxproj"), "// !$*UTF8*$!\n");
|
|
38
|
-
writeFileSync(join(dir, `${name}.xcscheme`), `<?xml version="1.0" encoding="UTF-8"?>
|
|
39
|
-
<Scheme LastUpgradeVersion = "1600"${appExtension ? `\n wasCreatedForAppExtension = "YES"` : ""} version = "1.7">
|
|
40
|
-
<TestAction buildConfiguration = "Debug">
|
|
41
|
-
<Testables>${testable
|
|
42
|
-
? `
|
|
43
|
-
<TestableReference skipped = "NO">
|
|
44
|
-
<BuildableReference BuildableName = "${name}Tests.xctest" />
|
|
45
|
-
</TestableReference>`
|
|
46
|
-
: ""}
|
|
47
|
-
</Testables>
|
|
48
|
-
</TestAction>
|
|
49
|
-
<LaunchAction buildConfiguration = "Debug">${runnable
|
|
50
|
-
? `
|
|
51
|
-
<BuildableProductRunnable runnableDebuggingMode = "0">
|
|
52
|
-
<BuildableReference
|
|
53
|
-
BuildableIdentifier = "primary"
|
|
54
|
-
BuildableName = "${runnable}"
|
|
55
|
-
BlueprintName = "${name}"
|
|
56
|
-
ReferencedContainer = "container:${project}.xcodeproj">
|
|
57
|
-
</BuildableReference>
|
|
58
|
-
</BuildableProductRunnable>`
|
|
59
|
-
: ""}
|
|
60
|
-
</LaunchAction>
|
|
61
|
-
</Scheme>
|
|
62
|
-
`);
|
|
63
|
-
}
|
|
64
|
-
/** The ranking, given the order `readdirSync` happens to produce. */
|
|
65
|
-
const pick = (projectPath, names) => rankSchemes(root, projectPath, names)[0];
|
|
66
|
-
describe("rankSchemes", () => {
|
|
67
|
-
// shenruisi/Stay. "Stay Extension" listed first and was written into the
|
|
68
|
-
// pipeline; the app is named after its project.
|
|
69
|
-
test("prefers the scheme named after the project", () => {
|
|
70
|
-
scheme("Stay", "Stay", { runnable: "Stay.app", testable: true });
|
|
71
|
-
scheme("Stay", "Stay Extension", { runnable: "Stay.app" });
|
|
72
|
-
expect(pick("Stay.xcodeproj", ["Stay Extension", "Stay"])).toBe("Stay");
|
|
73
|
-
});
|
|
74
|
-
// jellyfin/Swiftfin. Every destination "Swiftfin tvOS" offered was tvOS.
|
|
75
|
-
test("prefers the project's own name over a platform companion", () => {
|
|
76
|
-
scheme("Swiftfin", "Swiftfin", { runnable: "Swiftfin iOS.app" });
|
|
77
|
-
scheme("Swiftfin", "Swiftfin tvOS", { runnable: "Swiftfin tvOS.app" });
|
|
78
|
-
expect(pick("Swiftfin.xcodeproj", ["Swiftfin tvOS", "Swiftfin"])).toBe("Swiftfin");
|
|
79
|
-
});
|
|
80
|
-
// Finb/Bark builds from a workspace; the schemes live in the project inside.
|
|
81
|
-
test("matches the workspace basename too", () => {
|
|
82
|
-
scheme("Bark", "Bark", { runnable: "Bark.app", testable: true });
|
|
83
|
-
scheme("Bark", "NotificationContentExtension", { runnable: "Bark.app" });
|
|
84
|
-
expect(pick("Bark.xcworkspace", ["Bark", "NotificationContentExtension"])).toBe("Bark");
|
|
85
|
-
});
|
|
86
|
-
// Automattic/pocket-casts-ios: the scheme is `pocketcasts`, the project is
|
|
87
|
-
// `podcasts.xcodeproj`, so no name matches. What separates them is that one
|
|
88
|
-
// launches an app and has tests, and the others are extensions.
|
|
89
|
-
test("falls back to an app scheme with tests when no name matches", () => {
|
|
90
|
-
scheme("podcasts", "pocketcasts", { runnable: "podcasts.app", testable: true });
|
|
91
|
-
scheme("podcasts", "NotificationContent", { runnable: "podcasts.app" });
|
|
92
|
-
scheme("podcasts", "PocketCastsWatch", { runnable: "PocketCastsWatch.app" });
|
|
93
|
-
expect(pick("podcasts.xcodeproj", ["NotificationContent", "PocketCastsWatch", "pocketcasts"])).toBe("pocketcasts");
|
|
94
|
-
});
|
|
95
|
-
// thebaselab/codeapp: `Code App` launches `Code.app` and declares no tests
|
|
96
|
-
// at all; `Code UI` has two test bundles and launches `CodeUI.app`. The
|
|
97
|
-
// product named after the project is the app; tests are a weaker signal.
|
|
98
|
-
test("prefers the product named after the project over one with tests", () => {
|
|
99
|
-
scheme("Code", "Code App", { runnable: "Code.app" });
|
|
100
|
-
scheme("Code", "Code UI", { runnable: "CodeUI.app", testable: true });
|
|
101
|
-
scheme("Code", "extension", { runnable: "CodeUI.app" });
|
|
102
|
-
expect(pick("Code.xcodeproj", ["Code App", "Code UI", "extension"])).toBe("Code App");
|
|
103
|
-
});
|
|
104
|
-
// oblador/hush: `Hush iOS` and `Hush macOS`, project `Hush.xcodeproj`.
|
|
105
|
-
test("prefers the iOS variant over the macOS one", () => {
|
|
106
|
-
scheme("Hush", "Hush iOS", { runnable: "Hush.app", testable: true });
|
|
107
|
-
scheme("Hush", "Hush macOS", { runnable: "Hush.app" });
|
|
108
|
-
expect(pick("Hush.xcodeproj", ["Hush iOS", "Hush macOS"])).toBe("Hush iOS");
|
|
109
|
-
});
|
|
110
|
-
// home-assistant/iOS: App-Debug and App-Release, both runnable, both with
|
|
111
|
-
// tests. Debug is what the template builds.
|
|
112
|
-
test("prefers the debug configuration when two app schemes tie", () => {
|
|
113
|
-
scheme("HomeAssistant", "App-Debug", { runnable: "Home Assistant.app", testable: true });
|
|
114
|
-
scheme("HomeAssistant", "App-Release", { runnable: "Home Assistant.app", testable: true });
|
|
115
|
-
expect(pick("HomeAssistant.xcodeproj", ["App-Debug", "App-Release"])).toBe("App-Debug");
|
|
116
|
-
});
|
|
117
|
-
test("prefers the shortest name when nothing else separates them", () => {
|
|
118
|
-
scheme("Demo", "App", { runnable: "App.app", testable: true });
|
|
119
|
-
scheme("Demo", "App With A Longer Name", { runnable: "App.app", testable: true });
|
|
120
|
-
expect(pick("Demo.xcodeproj", ["App With A Longer Name", "App"])).toBe("App");
|
|
121
|
-
});
|
|
122
|
-
// The whole defect: a space sorts before a period, so the companion is
|
|
123
|
-
// always listed first. The answer must not depend on that.
|
|
124
|
-
test("gives the same answer whatever order the filesystem lists", () => {
|
|
125
|
-
scheme("Stay", "Stay", { runnable: "Stay.app", testable: true });
|
|
126
|
-
scheme("Stay", "Stay Extension", { runnable: "Stay.app" });
|
|
127
|
-
scheme("Stay", "Stay Widget", { runnable: "Stay.app" });
|
|
128
|
-
const orders = [
|
|
129
|
-
["Stay Extension", "Stay Widget", "Stay"],
|
|
130
|
-
["Stay", "Stay Extension", "Stay Widget"],
|
|
131
|
-
["Stay Widget", "Stay", "Stay Extension"],
|
|
132
|
-
];
|
|
133
|
-
for (const order of orders) {
|
|
134
|
-
expect([order.join(","), pick("Stay.xcodeproj", order)]).toEqual([
|
|
135
|
-
order.join(","),
|
|
136
|
-
"Stay",
|
|
137
|
-
]);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
test("keeps every scheme in the list, only reordered", () => {
|
|
141
|
-
scheme("Stay", "Stay", { runnable: "Stay.app", testable: true });
|
|
142
|
-
scheme("Stay", "Stay Extension", { runnable: "Stay.app" });
|
|
143
|
-
const ranked = rankSchemes(root, "Stay.xcodeproj", ["Stay Extension", "Stay"]);
|
|
144
|
-
expect([...ranked].sort()).toEqual(["Stay", "Stay Extension"]);
|
|
145
|
-
});
|
|
146
|
-
test("leaves a single scheme alone", () => {
|
|
147
|
-
scheme("Solo", "Solo", { runnable: "Solo.app", testable: true });
|
|
148
|
-
expect(pick("Solo.xcodeproj", ["Solo"])).toBe("Solo");
|
|
149
|
-
});
|
|
150
|
-
// A scheme with no shared `.xcscheme` on disk — `detectSchemes` falls back
|
|
151
|
-
// to the project name — must still come out first, not be ranked below a
|
|
152
|
-
// companion it cannot read.
|
|
153
|
-
test("keeps the order it was given when nothing can be read", () => {
|
|
154
|
-
expect(pick("Solo.xcodeproj", ["Solo", "Other"])).toBe("Solo");
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
/**
|
|
158
|
-
* An app extension is launched *through its host app*, so an extension scheme's
|
|
159
|
-
* LaunchAction runnable is the host `.app` — the same value the app's own
|
|
160
|
-
* scheme carries. Launching the app binary is therefore not sufficient to be
|
|
161
|
-
* the app scheme, and no name blocklist reaches the case: `Today` names nothing.
|
|
162
|
-
*
|
|
163
|
-
* Xcode states the fact itself, on the `<Scheme>` element of any scheme it
|
|
164
|
-
* created for an extension target. Measured across all 125 shared schemes in
|
|
165
|
-
* the thirty-app study's clones: 29 carry `wasCreatedForAppExtension`, all 29
|
|
166
|
-
* are extension schemes, and 27 of them build the host `.app` too — which is
|
|
167
|
-
* why "require an `.app` among the BuildAction entries" does not separate them.
|
|
168
|
-
*/
|
|
169
|
-
describe("rankSchemes and app-extension schemes", () => {
|
|
170
|
-
/**
|
|
171
|
-
* `mozilla-mobile/firefox-ios`, all thirteen schemes of
|
|
172
|
-
* `firefox-ios/Client.xcodeproj`, read off the clone. The project is
|
|
173
|
-
* `Client.xcodeproj`, so five schemes launch `Client.app` and land in the
|
|
174
|
-
* same tier; none carries an `iOS` or `Debug` token, so the tie fell to name
|
|
175
|
-
* length and `Today` (5) beat `Fennec` (6). The build then failed compiling
|
|
176
|
-
* `ActionExtension` — `bld_b1b38dda58f4111080415283`.
|
|
177
|
-
*/
|
|
178
|
-
const FIREFOX_IOS = [
|
|
179
|
-
["Account", { runnable: "libAccount.a", testable: true }],
|
|
180
|
-
["Fennec", { runnable: "Client.app", testable: true }],
|
|
181
|
-
["Fennec_Enterprise", { runnable: "Client.app", testable: true }],
|
|
182
|
-
["Firefox", { runnable: "Client.app", testable: true }],
|
|
183
|
-
["FirefoxBeta", { runnable: "Client.app", testable: true }],
|
|
184
|
-
["FirefoxStaging", { runnable: "Client.app", testable: true }],
|
|
185
|
-
["L10nSnapshotTests", { runnable: "L10nSnapshotTests.xctest", testable: true }],
|
|
186
|
-
["Periphery", {}],
|
|
187
|
-
["ShareTo", { runnable: "ShareTo.appex", appExtension: true }],
|
|
188
|
-
["Storage", { runnable: "libStorage.a", testable: true }],
|
|
189
|
-
["Sync", { runnable: "Sync.framework", testable: true }],
|
|
190
|
-
["Telemetry", { runnable: "libSyncTelemetry.a", testable: true }],
|
|
191
|
-
["Today", { runnable: "Client.app", testable: true, appExtension: true }],
|
|
192
|
-
];
|
|
193
|
-
function firefoxIos() {
|
|
194
|
-
for (const [name, shape] of FIREFOX_IOS)
|
|
195
|
-
scheme("Client", name, shape);
|
|
196
|
-
return FIREFOX_IOS.map(([name]) => name);
|
|
197
|
-
}
|
|
198
|
-
test("picks the browser, not its widget", () => {
|
|
199
|
-
const names = firefoxIos();
|
|
200
|
-
expect(pick("Client.xcodeproj", names)).toBe("Fennec");
|
|
201
|
-
});
|
|
202
|
-
// The defect only became visible because a five-character extension name won
|
|
203
|
-
// a length tiebreak. The answer must not depend on the order either.
|
|
204
|
-
test("picks the browser whatever order the filesystem lists", () => {
|
|
205
|
-
const names = firefoxIos();
|
|
206
|
-
const orders = [
|
|
207
|
-
names,
|
|
208
|
-
[...names].reverse(),
|
|
209
|
-
["Today", ...names.filter((n) => n !== "Today")],
|
|
210
|
-
["ShareTo", "Today", ...names.filter((n) => n !== "Today" && n !== "ShareTo")],
|
|
211
|
-
];
|
|
212
|
-
for (const order of orders) {
|
|
213
|
-
expect([order[0], pick("Client.xcodeproj", order)]).toEqual([order[0], "Fennec"]);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
test("still keeps every scheme in the list", () => {
|
|
217
|
-
const names = firefoxIos();
|
|
218
|
-
expect([...rankSchemes(root, "Client.xcodeproj", names)].sort()).toEqual([...names].sort());
|
|
219
|
-
});
|
|
220
|
-
// The narrow statement, without the other twelve schemes around it.
|
|
221
|
-
test("an extension scheme launching the host app is not the app scheme", () => {
|
|
222
|
-
scheme("Client", "Fennec", { runnable: "Client.app", testable: true });
|
|
223
|
-
scheme("Client", "Today", { runnable: "Client.app", testable: true, appExtension: true });
|
|
224
|
-
expect(pick("Client.xcodeproj", ["Today", "Fennec"])).toBe("Fennec");
|
|
225
|
-
});
|
|
226
|
-
// Xcode's own word about the target outranks a name coincidence, so it
|
|
227
|
-
// disqualifies the name-match tier too.
|
|
228
|
-
test("outranks a scheme named exactly after the project", () => {
|
|
229
|
-
scheme("Widget", "Widget", { runnable: "Host.app", appExtension: true });
|
|
230
|
-
scheme("Widget", "HostApp", { runnable: "Host.app", testable: true });
|
|
231
|
-
expect(pick("Widget.xcodeproj", ["Widget", "HostApp"])).toBe("HostApp");
|
|
232
|
-
});
|
|
233
|
-
/**
|
|
234
|
-
* The attribute is a sufficient signal, not a necessary one — a hand-written
|
|
235
|
-
* or pre-Xcode-10 scheme may omit it. Its absence must change nothing, or
|
|
236
|
-
* every scheme that ranked correctly before this could regress.
|
|
237
|
-
*
|
|
238
|
-
* `chenqi92/primuse` is the row that makes the point concrete: its `Primuse`
|
|
239
|
-
* scheme is the real app scheme and builds two widget `.appex` bundles
|
|
240
|
-
* alongside `Primuse.app`, so "demote anything that builds an extension"
|
|
241
|
-
* would have taken the wrong one.
|
|
242
|
-
*/
|
|
243
|
-
test("an untagged app scheme ranks exactly as it did before", () => {
|
|
244
|
-
scheme("Primuse", "Primuse", { runnable: "Primuse.app", testable: true });
|
|
245
|
-
scheme("Primuse", "PrimuseWidgets", { runnable: "Primuse.app" });
|
|
246
|
-
expect(pick("Primuse.xcodeproj", ["PrimuseWidgets", "Primuse"])).toBe("Primuse");
|
|
247
|
-
});
|
|
248
|
-
// When every candidate is an extension scheme there is no app scheme to
|
|
249
|
-
// find. Both land in the bottom tier, nothing is filtered out, and the
|
|
250
|
-
// pre-existing within-tier rule decides — so the caller still gets a
|
|
251
|
-
// deterministic answer rather than one that depends on the directory order.
|
|
252
|
-
test("still answers deterministically when every scheme is an extension", () => {
|
|
253
|
-
scheme("Client", "ShareTo", { runnable: "ShareTo.appex", appExtension: true });
|
|
254
|
-
scheme("Client", "Today", { runnable: "Client.app", appExtension: true });
|
|
255
|
-
for (const order of [
|
|
256
|
-
["Today", "ShareTo"],
|
|
257
|
-
["ShareTo", "Today"],
|
|
258
|
-
]) {
|
|
259
|
-
expect([order[0], pick("Client.xcodeproj", order)]).toEqual([order[0], "Today"]);
|
|
260
|
-
}
|
|
261
|
-
expect(rankSchemes(root, "Client.xcodeproj", ["ShareTo", "Today"])).toHaveLength(2);
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
//# sourceMappingURL=ios-scheme-ranking.test.js.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A properties file the Secrets Gradle Plugin reads is a credential like any
|
|
3
|
-
* other, and it has to reach every workflow that builds — not just `release`.
|
|
4
|
-
*
|
|
5
|
-
* The scanner has always found this one: it emits a `secrets-plugin` warning
|
|
6
|
-
* whenever a build file applies the plugin and the properties file it reads is
|
|
7
|
-
* gitignored, and `ci init` prints *"The file is gitignored — inject it as a
|
|
8
|
-
* file step before building"* along with the exact step to write. Then it
|
|
9
|
-
* generates a pipeline without that step. The advice was correct and nobody
|
|
10
|
-
* acted on it, so the pipeline it wrote could not configure Gradle at all.
|
|
11
|
-
*
|
|
12
|
-
* Measured, not supposed: the first build in the record to consume an uploaded
|
|
13
|
-
* credential (`bld_f5167b731b95974e61350390`, 2026-09-09) got past
|
|
14
|
-
* google-services and died four steps later on
|
|
15
|
-
*
|
|
16
|
-
* A problem occurred configuring project ':analytics'.
|
|
17
|
-
* > The file '<repo>/local.properties' could not be found
|
|
18
|
-
*
|
|
19
|
-
* on a repository whose `release` workflow had a `file@` step for it and whose
|
|
20
|
-
* `primary` and `pull-request` did not. The plugin's evaluation listener runs
|
|
21
|
-
* for every variant, so a debug build needs the file exactly as much as a
|
|
22
|
-
* release one does.
|
|
23
|
-
*
|
|
24
|
-
* Declaring the slot matters as much as the step. `unsetEnvKeys` — what
|
|
25
|
-
* `invarn setup` searches by — reads `envs`, not step inputs, so an undeclared
|
|
26
|
-
* `LOCAL_PROPERTIES` is never discovered on the developer's machine and never
|
|
27
|
-
* offered for upload, however many steps name it.
|
|
28
|
-
*/
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=local-properties-reaches-every-workflow.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-properties-reaches-every-workflow.test.d.ts","sourceRoot":"","sources":["../../../src/commands/local-properties-reaches-every-workflow.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A properties file the Secrets Gradle Plugin reads is a credential like any
|
|
3
|
-
* other, and it has to reach every workflow that builds — not just `release`.
|
|
4
|
-
*
|
|
5
|
-
* The scanner has always found this one: it emits a `secrets-plugin` warning
|
|
6
|
-
* whenever a build file applies the plugin and the properties file it reads is
|
|
7
|
-
* gitignored, and `ci init` prints *"The file is gitignored — inject it as a
|
|
8
|
-
* file step before building"* along with the exact step to write. Then it
|
|
9
|
-
* generates a pipeline without that step. The advice was correct and nobody
|
|
10
|
-
* acted on it, so the pipeline it wrote could not configure Gradle at all.
|
|
11
|
-
*
|
|
12
|
-
* Measured, not supposed: the first build in the record to consume an uploaded
|
|
13
|
-
* credential (`bld_f5167b731b95974e61350390`, 2026-09-09) got past
|
|
14
|
-
* google-services and died four steps later on
|
|
15
|
-
*
|
|
16
|
-
* A problem occurred configuring project ':analytics'.
|
|
17
|
-
* > The file '<repo>/local.properties' could not be found
|
|
18
|
-
*
|
|
19
|
-
* on a repository whose `release` workflow had a `file@` step for it and whose
|
|
20
|
-
* `primary` and `pull-request` did not. The plugin's evaluation listener runs
|
|
21
|
-
* for every variant, so a debug build needs the file exactly as much as a
|
|
22
|
-
* release one does.
|
|
23
|
-
*
|
|
24
|
-
* Declaring the slot matters as much as the step. `unsetEnvKeys` — what
|
|
25
|
-
* `invarn setup` searches by — reads `envs`, not step inputs, so an undeclared
|
|
26
|
-
* `LOCAL_PROPERTIES` is never discovered on the developer's machine and never
|
|
27
|
-
* offered for upload, however many steps name it.
|
|
28
|
-
*/
|
|
29
|
-
import { describe, test, expect } from '@jest/globals';
|
|
30
|
-
import { load } from 'js-yaml';
|
|
31
|
-
import { generateAndroidPipeline, detectSetupNeeds } from './build.js';
|
|
32
|
-
const BASE = {
|
|
33
|
-
keystore: false,
|
|
34
|
-
keystoreProperties: false,
|
|
35
|
-
googleServices: false,
|
|
36
|
-
googlePlayDeploy: false,
|
|
37
|
-
googlePlayPackageName: '',
|
|
38
|
-
artifactType: 'apk',
|
|
39
|
-
keystorePaths: {},
|
|
40
|
-
googleServicesPaths: {},
|
|
41
|
-
workflowFlavors: {},
|
|
42
|
-
secretsProperties: false,
|
|
43
|
-
secretsPropertiesPath: 'local.properties',
|
|
44
|
-
};
|
|
45
|
-
function parse(yaml) {
|
|
46
|
-
return load(yaml);
|
|
47
|
-
}
|
|
48
|
-
function envs(parsed) {
|
|
49
|
-
return Object.assign({}, ...(parsed.app?.envs ?? []));
|
|
50
|
-
}
|
|
51
|
-
function stepNames(parsed, workflow) {
|
|
52
|
-
return (parsed.workflows?.[workflow]?.steps ?? []).map((s) => Object.keys(s)[0]);
|
|
53
|
-
}
|
|
54
|
-
function fileStepsOf(parsed, workflow) {
|
|
55
|
-
return (parsed.workflows?.[workflow]?.steps ?? [])
|
|
56
|
-
.filter((s) => Object.keys(s)[0] === 'file@1.0.0')
|
|
57
|
-
.map((s) => s['file@1.0.0']);
|
|
58
|
-
}
|
|
59
|
-
describe('a properties file the build reads at configuration time', () => {
|
|
60
|
-
test('is declared once and written in every workflow that builds', () => {
|
|
61
|
-
const parsed = parse(generateAndroidPipeline(17, { ...BASE, secretsProperties: true }));
|
|
62
|
-
expect(envs(parsed).LOCAL_PROPERTIES).toBe('');
|
|
63
|
-
// One object per workflow so a failure names the workflow that lost it.
|
|
64
|
-
const written = ['primary', 'pull-request', 'release'].map((workflow) => {
|
|
65
|
-
const step = fileStepsOf(parsed, workflow).find((s) => s.inputs.var_name === 'LOCAL_PROPERTIES');
|
|
66
|
-
return {
|
|
67
|
-
workflow,
|
|
68
|
-
target: step?.inputs.target_path,
|
|
69
|
-
// Text, not binary: re-encoding a properties file as base64 would
|
|
70
|
-
// write base64 to disk and the plugin would read gibberish.
|
|
71
|
-
base64: step?.inputs.base64_encoded,
|
|
72
|
-
};
|
|
73
|
-
});
|
|
74
|
-
expect(written).toEqual([
|
|
75
|
-
{ workflow: 'primary', target: 'local.properties', base64: undefined },
|
|
76
|
-
{ workflow: 'pull-request', target: 'local.properties', base64: undefined },
|
|
77
|
-
{ workflow: 'release', target: 'local.properties', base64: undefined },
|
|
78
|
-
]);
|
|
79
|
-
});
|
|
80
|
-
test('is written before anything that could read it', () => {
|
|
81
|
-
const parsed = parse(generateAndroidPipeline(17, { ...BASE, secretsProperties: true }));
|
|
82
|
-
const order = ['primary', 'pull-request', 'release'].map((workflow) => {
|
|
83
|
-
const names = stepNames(parsed, workflow);
|
|
84
|
-
const wrote = names.indexOf('file@1.0.0');
|
|
85
|
-
const firstBuildTool = names.findIndex((n) => /^(gradle-build|android-lint|android-unit-test)@/.test(n));
|
|
86
|
-
return { workflow, writesBeforeBuilding: wrote >= 0 && firstBuildTool > wrote };
|
|
87
|
-
});
|
|
88
|
-
expect(order).toEqual([
|
|
89
|
-
{ workflow: 'primary', writesBeforeBuilding: true },
|
|
90
|
-
{ workflow: 'pull-request', writesBeforeBuilding: true },
|
|
91
|
-
{ workflow: 'release', writesBeforeBuilding: true },
|
|
92
|
-
]);
|
|
93
|
-
});
|
|
94
|
-
test('follows the plugin to a properties file that is not local.properties', () => {
|
|
95
|
-
const parsed = parse(generateAndroidPipeline(17, {
|
|
96
|
-
...BASE,
|
|
97
|
-
secretsProperties: true,
|
|
98
|
-
secretsPropertiesPath: 'config/secrets.properties',
|
|
99
|
-
}));
|
|
100
|
-
const written = fileStepsOf(parsed, 'primary').find((s) => s.inputs.var_name === 'LOCAL_PROPERTIES');
|
|
101
|
-
expect(written.inputs.target_path).toBe('config/secrets.properties');
|
|
102
|
-
});
|
|
103
|
-
test('appears nowhere in a repository that does not use the plugin', () => {
|
|
104
|
-
// The whole point of scanning: a pipeline must not declare a slot the
|
|
105
|
-
// build never reads. After issue 03 a declared-and-empty slot fails the
|
|
106
|
-
// build, so an unnecessary one turns a working repository red.
|
|
107
|
-
const yaml = generateAndroidPipeline(17, BASE);
|
|
108
|
-
expect(yaml).not.toContain('LOCAL_PROPERTIES');
|
|
109
|
-
expect(fileStepsOf(parse(yaml), 'primary')).toEqual([]);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe('the scan that decides it', () => {
|
|
113
|
-
const warning = (over) => ({
|
|
114
|
-
category: 'secrets-plugin',
|
|
115
|
-
severity: 'warning',
|
|
116
|
-
message: 'Secrets plugin key: MAPS_API_KEY',
|
|
117
|
-
location: 'local.properties',
|
|
118
|
-
...over,
|
|
119
|
-
});
|
|
120
|
-
test('takes the properties file from the per-key warning', () => {
|
|
121
|
-
const needs = detectSetupNeeds([warning({})]);
|
|
122
|
-
expect(needs.secretsProperties).toBe(true);
|
|
123
|
-
expect(needs.secretsPropertiesPath).toBe('local.properties');
|
|
124
|
-
});
|
|
125
|
-
test('takes it from the message when the warning has no defaults file', () => {
|
|
126
|
-
// The two `secrets-plugin` warnings disagree about `location`: the
|
|
127
|
-
// per-key one carries the properties file, the fallback one carries the
|
|
128
|
-
// *build file* that applies the plugin. Reading the wrong one would point
|
|
129
|
-
// the step at `app/build.gradle.kts`.
|
|
130
|
-
const needs = detectSetupNeeds([
|
|
131
|
-
warning({
|
|
132
|
-
message: "Google Secrets Gradle Plugin reads 'config/secrets.properties' which is absent in CI",
|
|
133
|
-
location: 'app/build.gradle.kts',
|
|
134
|
-
}),
|
|
135
|
-
]);
|
|
136
|
-
expect(needs.secretsProperties).toBe(true);
|
|
137
|
-
expect(needs.secretsPropertiesPath).toBe('config/secrets.properties');
|
|
138
|
-
});
|
|
139
|
-
test('is off when nothing reports the plugin', () => {
|
|
140
|
-
const needs = detectSetupNeeds([
|
|
141
|
-
{ category: 'missing-file', severity: 'warning', message: 'keystore.properties not found' },
|
|
142
|
-
]);
|
|
143
|
-
expect(needs.secretsProperties).toBe(false);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
//# sourceMappingURL=local-properties-reaches-every-workflow.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzF"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reset command — removes all files and folders created by cibuild.
|
|
3
|
-
*/
|
|
4
|
-
import { existsSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
|
|
5
|
-
import { resolve } from 'node:path';
|
|
6
|
-
import prompts from 'prompts';
|
|
7
|
-
/** Paths that cibuild creates, relative to project root. */
|
|
8
|
-
const CIBUILD_PATHS = [
|
|
9
|
-
'.ci',
|
|
10
|
-
'.cibuild-secrets.json',
|
|
11
|
-
'.ci-builds',
|
|
12
|
-
'.ci-cache',
|
|
13
|
-
'ci.config.json',
|
|
14
|
-
];
|
|
15
|
-
/** Lines that `ci init` appends to .gitignore. */
|
|
16
|
-
const GITIGNORE_ENTRIES = [
|
|
17
|
-
'.cibuild-secrets.json',
|
|
18
|
-
'.ci/.envstore.json',
|
|
19
|
-
'.ci/keys/',
|
|
20
|
-
];
|
|
21
|
-
export async function handleResetCommand(options = {}) {
|
|
22
|
-
const cwd = process.cwd();
|
|
23
|
-
// Discover what actually exists
|
|
24
|
-
const existing = CIBUILD_PATHS
|
|
25
|
-
.map((p) => ({ rel: p, abs: resolve(cwd, p) }))
|
|
26
|
-
.filter(({ abs }) => existsSync(abs));
|
|
27
|
-
const gitignorePath = resolve(cwd, '.gitignore');
|
|
28
|
-
const hasGitignoreEntries = existsSync(gitignorePath) && hasAnyEntry(gitignorePath);
|
|
29
|
-
if (existing.length === 0 && !hasGitignoreEntries) {
|
|
30
|
-
console.log('Nothing to reset — no cibuild files found.');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Show what will be removed
|
|
34
|
-
console.log('\nThe following will be removed:\n');
|
|
35
|
-
for (const { rel } of existing) {
|
|
36
|
-
console.log(` • ${rel}`);
|
|
37
|
-
}
|
|
38
|
-
if (hasGitignoreEntries) {
|
|
39
|
-
console.log(' • cibuild entries from .gitignore');
|
|
40
|
-
}
|
|
41
|
-
console.log('');
|
|
42
|
-
// Confirm unless --force
|
|
43
|
-
if (!options.force) {
|
|
44
|
-
const { confirmed } = await prompts({
|
|
45
|
-
type: 'confirm',
|
|
46
|
-
name: 'confirmed',
|
|
47
|
-
message: 'Are you sure? This cannot be undone.',
|
|
48
|
-
initial: false,
|
|
49
|
-
});
|
|
50
|
-
if (!confirmed) {
|
|
51
|
-
console.log('\n❌ Cancelled');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Remove paths
|
|
56
|
-
for (const { rel, abs } of existing) {
|
|
57
|
-
rmSync(abs, { recursive: true, force: true });
|
|
58
|
-
console.log(` Removed ${rel}`);
|
|
59
|
-
}
|
|
60
|
-
// Clean .gitignore
|
|
61
|
-
if (hasGitignoreEntries) {
|
|
62
|
-
cleanGitignore(gitignorePath);
|
|
63
|
-
console.log(' Cleaned .gitignore');
|
|
64
|
-
}
|
|
65
|
-
console.log('\n✅ Reset complete\n');
|
|
66
|
-
}
|
|
67
|
-
function hasAnyEntry(gitignorePath) {
|
|
68
|
-
const content = readFileSync(gitignorePath, 'utf-8');
|
|
69
|
-
return GITIGNORE_ENTRIES.some((entry) => content.split('\n').includes(entry));
|
|
70
|
-
}
|
|
71
|
-
function cleanGitignore(gitignorePath) {
|
|
72
|
-
const lines = readFileSync(gitignorePath, 'utf-8').split('\n');
|
|
73
|
-
const filtered = lines.filter((line) => !GITIGNORE_ENTRIES.includes(line));
|
|
74
|
-
// Remove trailing blank lines left over from removal
|
|
75
|
-
while (filtered.length > 0 && filtered[filtered.length - 1] === '') {
|
|
76
|
-
filtered.pop();
|
|
77
|
-
}
|
|
78
|
-
const result = filtered.length > 0 ? filtered.join('\n') + '\n' : '';
|
|
79
|
-
writeFileSync(gitignorePath, result);
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=reset.js.map
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface RunOptions {
|
|
2
|
-
/**
|
|
3
|
-
* Absolute path to the pipeline file. If omitted, the handler looks
|
|
4
|
-
* inside `./.ci/pipelines/` and prompts when multiple files exist.
|
|
5
|
-
*/
|
|
6
|
-
pipelinePath?: string;
|
|
7
|
-
workflow?: string;
|
|
8
|
-
validateOnly?: boolean;
|
|
9
|
-
production?: boolean;
|
|
10
|
-
skipValidation?: boolean;
|
|
11
|
-
local?: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Run a pipeline locally. Mirrors `ci run <path>`.
|
|
15
|
-
*
|
|
16
|
-
* - `.yml` / `.yaml` → parse, validate, optionally prompt for missing
|
|
17
|
-
* env vars, then execute via `PipelineRunner`.
|
|
18
|
-
* - `.ts` / `.js` → dynamic-import the module, use its default export
|
|
19
|
-
* as the `PipelineDef`, then execute.
|
|
20
|
-
*/
|
|
21
|
-
export declare function handleRunCommand(opts?: RunOptions): Promise<void>;
|
|
22
|
-
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJ3E"}
|