@invarn/cibuild 2.9.4 → 2.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-35SI42CD.mjs +1 -0
- package/dist/chunk-IC45KVLJ.mjs +1 -0
- package/dist/chunk-XDY4V23V.mjs +1 -0
- package/dist/cli.cjs +14 -14
- package/dist/commands.mjs +1 -0
- package/dist/lib.mjs +3934 -0
- package/package.json +6 -10
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -399
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts +0 -38
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.js +0 -222
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts +0 -41
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js +0 -324
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts +0 -2
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map +0 -1
- package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.js +0 -382
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts +0 -29
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts.map +0 -1
- package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.js +0 -160
- package/dist/src/commands/android-gms-guard.test.d.ts +0 -9
- package/dist/src/commands/android-gms-guard.test.d.ts.map +0 -1
- package/dist/src/commands/android-gms-guard.test.js +0 -78
- package/dist/src/commands/android-java-version.test.d.ts +0 -12
- package/dist/src/commands/android-java-version.test.d.ts.map +0 -1
- package/dist/src/commands/android-java-version.test.js +0 -209
- package/dist/src/commands/android-scanner-java.test.d.ts +0 -2
- package/dist/src/commands/android-scanner-java.test.d.ts.map +0 -1
- package/dist/src/commands/android-scanner-java.test.js +0 -130
- package/dist/src/commands/android-scanner.d.ts +0 -250
- package/dist/src/commands/android-scanner.d.ts.map +0 -1
- package/dist/src/commands/android-scanner.js +0 -1639
- package/dist/src/commands/build.d.ts +0 -215
- package/dist/src/commands/build.d.ts.map +0 -1
- package/dist/src/commands/build.js +0 -1433
- package/dist/src/commands/build.test.d.ts +0 -13
- package/dist/src/commands/build.test.d.ts.map +0 -1
- package/dist/src/commands/build.test.js +0 -121
- package/dist/src/commands/detect-platform.d.ts +0 -13
- package/dist/src/commands/detect-platform.d.ts.map +0 -1
- package/dist/src/commands/detect-platform.js +0 -51
- package/dist/src/commands/detect-project.d.ts +0 -7
- package/dist/src/commands/detect-project.d.ts.map +0 -1
- package/dist/src/commands/detect-project.js +0 -12
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts +0 -26
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts.map +0 -1
- package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.js +0 -196
- package/dist/src/commands/edit.d.ts +0 -12
- package/dist/src/commands/edit.d.ts.map +0 -1
- package/dist/src/commands/edit.js +0 -652
- package/dist/src/commands/edit.test.d.ts +0 -6
- package/dist/src/commands/edit.test.d.ts.map +0 -1
- package/dist/src/commands/edit.test.js +0 -45
- package/dist/src/commands/fidelity-trim.d.ts +0 -13
- package/dist/src/commands/fidelity-trim.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.js +0 -21
- package/dist/src/commands/fidelity-trim.test.d.ts +0 -8
- package/dist/src/commands/fidelity-trim.test.d.ts.map +0 -1
- package/dist/src/commands/fidelity-trim.test.js +0 -79
- package/dist/src/commands/file-secret-collector.d.ts +0 -50
- package/dist/src/commands/file-secret-collector.d.ts.map +0 -1
- package/dist/src/commands/file-secret-collector.js +0 -217
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts +0 -38
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts.map +0 -1
- package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.js +0 -300
- package/dist/src/commands/github-workflow.d.ts +0 -5
- package/dist/src/commands/github-workflow.d.ts.map +0 -1
- package/dist/src/commands/github-workflow.js +0 -45
- package/dist/src/commands/index.d.ts +0 -33
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js +0 -33
- package/dist/src/commands/init.d.ts +0 -20
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/init.js +0 -264
- package/dist/src/commands/ios-scanner.d.ts +0 -104
- package/dist/src/commands/ios-scanner.d.ts.map +0 -1
- package/dist/src/commands/ios-scanner.js +0 -492
- package/dist/src/commands/ios-scheme-ranking.test.d.ts +0 -2
- package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +0 -1
- package/dist/src/commands/ios-scheme-ranking.test.js +0 -264
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts +0 -30
- package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts.map +0 -1
- package/dist/src/commands/local-properties-reaches-every-workflow.test.js +0 -146
- package/dist/src/commands/reset.d.ts +0 -7
- package/dist/src/commands/reset.d.ts.map +0 -1
- package/dist/src/commands/reset.js +0 -81
- package/dist/src/commands/run.d.ts +0 -22
- package/dist/src/commands/run.d.ts.map +0 -1
- package/dist/src/commands/run.js +0 -141
- package/dist/src/commands/secrets-sync-workflow.d.ts +0 -15
- package/dist/src/commands/secrets-sync-workflow.d.ts.map +0 -1
- package/dist/src/commands/secrets-sync-workflow.js +0 -255
- package/dist/src/commands/secrets-upload.d.ts +0 -21
- package/dist/src/commands/secrets-upload.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.js +0 -177
- package/dist/src/commands/secrets-upload.test.d.ts +0 -5
- package/dist/src/commands/secrets-upload.test.d.ts.map +0 -1
- package/dist/src/commands/secrets-upload.test.js +0 -60
- package/dist/src/commands/validate.d.ts +0 -10
- package/dist/src/commands/validate.d.ts.map +0 -1
- package/dist/src/commands/validate.js +0 -46
- package/dist/src/config.d.ts +0 -3
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -47
- package/dist/src/envman/cli.d.ts +0 -21
- package/dist/src/envman/cli.d.ts.map +0 -1
- package/dist/src/envman/cli.js +0 -240
- package/dist/src/envman/envman.d.ts +0 -83
- package/dist/src/envman/envman.d.ts.map +0 -1
- package/dist/src/envman/envman.js +0 -361
- package/dist/src/envman/envman.test.d.ts +0 -5
- package/dist/src/envman/envman.test.d.ts.map +0 -1
- package/dist/src/envman/envman.test.js +0 -236
- package/dist/src/envman/envstore-round-trip.test.d.ts +0 -27
- package/dist/src/envman/envstore-round-trip.test.d.ts.map +0 -1
- package/dist/src/envman/envstore-round-trip.test.js +0 -130
- package/dist/src/envman/index.d.ts +0 -23
- package/dist/src/envman/index.d.ts.map +0 -1
- package/dist/src/envman/index.js +0 -23
- package/dist/src/envman/shim.d.ts +0 -16
- package/dist/src/envman/shim.d.ts.map +0 -1
- package/dist/src/envman/shim.js +0 -66
- package/dist/src/envman/types.d.ts +0 -55
- package/dist/src/envman/types.d.ts.map +0 -1
- package/dist/src/envman/types.js +0 -12
- package/dist/src/lib.d.ts +0 -33
- package/dist/src/lib.d.ts.map +0 -1
- package/dist/src/lib.js +0 -37
- package/dist/src/pipeline.d.ts +0 -3
- package/dist/src/pipeline.d.ts.map +0 -1
- package/dist/src/pipeline.js +0 -57
- package/dist/src/runner-node-step.test.d.ts +0 -12
- package/dist/src/runner-node-step.test.d.ts.map +0 -1
- package/dist/src/runner-node-step.test.js +0 -61
- package/dist/src/runner.d.ts +0 -31
- package/dist/src/runner.d.ts.map +0 -1
- package/dist/src/runner.js +0 -240
- package/dist/src/shared/detect-project.d.ts +0 -57
- package/dist/src/shared/detect-project.d.ts.map +0 -1
- package/dist/src/shared/detect-project.js +0 -219
- package/dist/src/shared/detect-project.test.d.ts +0 -2
- package/dist/src/shared/detect-project.test.d.ts.map +0 -1
- package/dist/src/shared/detect-project.test.js +0 -161
- package/dist/src/shared/git.d.ts +0 -25
- package/dist/src/shared/git.d.ts.map +0 -1
- package/dist/src/shared/git.js +0 -53
- package/dist/src/shared/git.test.d.ts +0 -9
- package/dist/src/shared/git.test.d.ts.map +0 -1
- package/dist/src/shared/git.test.js +0 -66
- package/dist/src/shared/gitignore.d.ts +0 -6
- package/dist/src/shared/gitignore.d.ts.map +0 -1
- package/dist/src/shared/gitignore.js +0 -26
- package/dist/src/shared/gradle-settings.d.ts +0 -49
- package/dist/src/shared/gradle-settings.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.js +0 -138
- package/dist/src/shared/gradle-settings.test.d.ts +0 -2
- package/dist/src/shared/gradle-settings.test.d.ts.map +0 -1
- package/dist/src/shared/gradle-settings.test.js +0 -65
- package/dist/src/shared/prompts.d.ts +0 -30
- package/dist/src/shared/prompts.d.ts.map +0 -1
- package/dist/src/shared/prompts.js +0 -121
- package/dist/src/shared/xcode-container.test.d.ts +0 -2
- package/dist/src/shared/xcode-container.test.d.ts.map +0 -1
- package/dist/src/shared/xcode-container.test.js +0 -123
- package/dist/src/step-marker.d.ts +0 -12
- package/dist/src/step-marker.d.ts.map +0 -1
- package/dist/src/step-marker.js +0 -29
- package/dist/src/step-marker.test.d.ts +0 -11
- package/dist/src/step-marker.test.d.ts.map +0 -1
- package/dist/src/step-marker.test.js +0 -45
- package/dist/src/types.d.ts +0 -58
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts +0 -28
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts.map +0 -1
- package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.js +0 -223
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts +0 -20
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.js +0 -201
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts +0 -37
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map +0 -1
- package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.js +0 -255
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts +0 -32
- package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts.map +0 -1
- package/dist/src/yaml/a-missing-credential-is-loud.test.js +0 -301
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +0 -18
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +0 -1
- package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +0 -66
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts +0 -34
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.js +0 -218
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts +0 -27
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts.map +0 -1
- package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.js +0 -126
- package/dist/src/yaml/bitrise-compat.d.ts +0 -65
- package/dist/src/yaml/bitrise-compat.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.js +0 -206
- package/dist/src/yaml/bitrise-compat.test.d.ts +0 -5
- package/dist/src/yaml/bitrise-compat.test.d.ts.map +0 -1
- package/dist/src/yaml/bitrise-compat.test.js +0 -347
- package/dist/src/yaml/cache-key-missing-file.test.d.ts +0 -12
- package/dist/src/yaml/cache-key-missing-file.test.d.ts.map +0 -1
- package/dist/src/yaml/cache-key-missing-file.test.js +0 -116
- package/dist/src/yaml/converter.d.ts +0 -103
- package/dist/src/yaml/converter.d.ts.map +0 -1
- package/dist/src/yaml/converter.js +0 -420
- package/dist/src/yaml/converter.test.d.ts +0 -5
- package/dist/src/yaml/converter.test.d.ts.map +0 -1
- package/dist/src/yaml/converter.test.js +0 -548
- package/dist/src/yaml/e2e.test.d.ts +0 -6
- package/dist/src/yaml/e2e.test.d.ts.map +0 -1
- package/dist/src/yaml/e2e.test.js +0 -446
- package/dist/src/yaml/env-resolver.d.ts +0 -218
- package/dist/src/yaml/env-resolver.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.js +0 -591
- package/dist/src/yaml/env-resolver.test.d.ts +0 -5
- package/dist/src/yaml/env-resolver.test.d.ts.map +0 -1
- package/dist/src/yaml/env-resolver.test.js +0 -502
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +0 -16
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +0 -1
- package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +0 -126
- package/dist/src/yaml/fidelity-input-digest.d.ts +0 -37
- package/dist/src/yaml/fidelity-input-digest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.js +0 -208
- package/dist/src/yaml/fidelity-input-digest.test.d.ts +0 -2
- package/dist/src/yaml/fidelity-input-digest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-input-digest.test.js +0 -167
- package/dist/src/yaml/fidelity-manifest.d.ts +0 -126
- package/dist/src/yaml/fidelity-manifest.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.js +0 -134
- package/dist/src/yaml/fidelity-manifest.test.d.ts +0 -12
- package/dist/src/yaml/fidelity-manifest.test.d.ts.map +0 -1
- package/dist/src/yaml/fidelity-manifest.test.js +0 -251
- package/dist/src/yaml/interactive-prompts.d.ts +0 -71
- package/dist/src/yaml/interactive-prompts.d.ts.map +0 -1
- package/dist/src/yaml/interactive-prompts.js +0 -260
- package/dist/src/yaml/meta-helpers.d.ts +0 -28
- package/dist/src/yaml/meta-helpers.d.ts.map +0 -1
- package/dist/src/yaml/meta-helpers.js +0 -46
- package/dist/src/yaml/missing-env-handler.d.ts +0 -45
- package/dist/src/yaml/missing-env-handler.d.ts.map +0 -1
- package/dist/src/yaml/missing-env-handler.js +0 -64
- package/dist/src/yaml/parser.d.ts +0 -33
- package/dist/src/yaml/parser.d.ts.map +0 -1
- package/dist/src/yaml/parser.js +0 -148
- package/dist/src/yaml/parser.test.d.ts +0 -5
- package/dist/src/yaml/parser.test.d.ts.map +0 -1
- package/dist/src/yaml/parser.test.js +0 -83
- package/dist/src/yaml/pipeline-with-secrets.d.ts +0 -25
- package/dist/src/yaml/pipeline-with-secrets.d.ts.map +0 -1
- package/dist/src/yaml/pipeline-with-secrets.js +0 -76
- package/dist/src/yaml/platform-detector.d.ts +0 -83
- package/dist/src/yaml/platform-detector.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.js +0 -189
- package/dist/src/yaml/platform-detector.test.d.ts +0 -5
- package/dist/src/yaml/platform-detector.test.d.ts.map +0 -1
- package/dist/src/yaml/platform-detector.test.js +0 -525
- package/dist/src/yaml/preflight-validation.d.ts +0 -29
- package/dist/src/yaml/preflight-validation.d.ts.map +0 -1
- package/dist/src/yaml/preflight-validation.js +0 -21
- package/dist/src/yaml/secrets-manager.d.ts +0 -87
- package/dist/src/yaml/secrets-manager.d.ts.map +0 -1
- package/dist/src/yaml/secrets-manager.js +0 -230
- package/dist/src/yaml/shell-assignments.d.ts +0 -40
- package/dist/src/yaml/shell-assignments.d.ts.map +0 -1
- package/dist/src/yaml/shell-assignments.js +0 -77
- package/dist/src/yaml/step-validator-check-failure.test.d.ts +0 -24
- package/dist/src/yaml/step-validator-check-failure.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-check-failure.test.js +0 -130
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts +0 -23
- package/dist/src/yaml/step-validator-self-assigned.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator-self-assigned.test.js +0 -191
- package/dist/src/yaml/step-validator.d.ts +0 -67
- package/dist/src/yaml/step-validator.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.js +0 -466
- package/dist/src/yaml/step-validator.test.d.ts +0 -18
- package/dist/src/yaml/step-validator.test.d.ts.map +0 -1
- package/dist/src/yaml/step-validator.test.js +0 -140
- package/dist/src/yaml/steps/android-sign.d.ts +0 -35
- package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-sign.js +0 -147
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
- package/dist/src/yaml/steps/android-version.d.ts +0 -26
- package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.js +0 -128
- package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
- package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/android-version.test.js +0 -196
- package/dist/src/yaml/steps/android.d.ts +0 -156
- package/dist/src/yaml/steps/android.d.ts.map +0 -1
- package/dist/src/yaml/steps/android.js +0 -1084
- package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
- package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/app-store-deploy.js +0 -167
- package/dist/src/yaml/steps/base.d.ts +0 -263
- package/dist/src/yaml/steps/base.d.ts.map +0 -1
- package/dist/src/yaml/steps/base.js +0 -380
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
- package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
- package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.js +0 -280
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
- package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
- package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
- package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
- package/dist/src/yaml/steps/cache.d.ts +0 -59
- package/dist/src/yaml/steps/cache.d.ts.map +0 -1
- package/dist/src/yaml/steps/cache.js +0 -1027
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
- package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
- package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
- package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
- package/dist/src/yaml/steps/fastlane.d.ts +0 -27
- package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
- package/dist/src/yaml/steps/fastlane.js +0 -79
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
- package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
- package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
- package/dist/src/yaml/steps/file.d.ts +0 -52
- package/dist/src/yaml/steps/file.d.ts.map +0 -1
- package/dist/src/yaml/steps/file.js +0 -108
- package/dist/src/yaml/steps/flutter.d.ts +0 -63
- package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
- package/dist/src/yaml/steps/flutter.js +0 -215
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
- package/dist/src/yaml/steps/git-clone.d.ts +0 -32
- package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-clone.js +0 -171
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
- package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
- package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
- package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
- package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
- package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.js +0 -193
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
- package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
- package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.js +0 -311
- package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-memory.test.js +0 -297
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
- package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
- package/dist/src/yaml/steps/index.d.ts +0 -10
- package/dist/src/yaml/steps/index.d.ts.map +0 -1
- package/dist/src/yaml/steps/index.js +0 -1461
- package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
- package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.js +0 -279
- package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
- package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-deps.test.js +0 -90
- package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
- package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-signing.js +0 -144
- package/dist/src/yaml/steps/ios-version.d.ts +0 -47
- package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
- package/dist/src/yaml/steps/ios-version.js +0 -151
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
- package/dist/src/yaml/steps/linting.d.ts +0 -47
- package/dist/src/yaml/steps/linting.d.ts.map +0 -1
- package/dist/src/yaml/steps/linting.js +0 -148
- package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase2.test.js +0 -197
- package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase3.test.js +0 -144
- package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
- package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase4.test.js +0 -166
- package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
- package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/phase5.test.js +0 -263
- package/dist/src/yaml/steps/registry.d.ts +0 -88
- package/dist/src/yaml/steps/registry.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.js +0 -125
- package/dist/src/yaml/steps/registry.test.d.ts +0 -5
- package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/registry.test.js +0 -235
- package/dist/src/yaml/steps/release.d.ts +0 -50
- package/dist/src/yaml/steps/release.d.ts.map +0 -1
- package/dist/src/yaml/steps/release.js +0 -154
- package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
- package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.js +0 -270
- package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
- package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
- package/dist/src/yaml/steps/script.d.ts +0 -23
- package/dist/src/yaml/steps/script.d.ts.map +0 -1
- package/dist/src/yaml/steps/script.js +0 -63
- package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
- package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/spec-validation.test.js +0 -130
- package/dist/src/yaml/steps/steps.test.d.ts +0 -6
- package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/steps.test.js +0 -881
- package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
- package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.js +0 -3276
- package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
- package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
- package/dist/src/yaml/steps/test-config.d.ts +0 -5
- package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
- package/dist/src/yaml/steps/test-config.js +0 -25
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
- package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
- package/dist/src/yaml/steps/trim-align.d.ts +0 -87
- package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.js +0 -367
- package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
- package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/trim-align.test.js +0 -261
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
- package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
- package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
- package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
- package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
- package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
- package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
- package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
- package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.js +0 -247
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
- package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
- package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -253
- package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
- package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.js +0 -202
- package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
- package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
- package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-new.test.js +0 -211
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
- package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
- package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
- package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
- package/dist/src/yaml/steps/xcode.d.ts +0 -230
- package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
- package/dist/src/yaml/steps/xcode.js +0 -1340
- package/dist/src/yaml/types.d.ts +0 -76
- package/dist/src/yaml/types.d.ts.map +0 -1
- package/dist/src/yaml/types.js +0 -5
- package/dist/src/yaml/validation-types.d.ts +0 -102
- package/dist/src/yaml/validation-types.d.ts.map +0 -1
- package/dist/src/yaml/validation-types.js +0 -8
- package/dist/src/yaml/yaml-updater.d.ts +0 -24
- package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
- package/dist/src/yaml/yaml-updater.js +0 -128
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A Gemfile.lock names the bundler that must run it, and the step has to run
|
|
3
|
-
* that one.
|
|
4
|
-
*
|
|
5
|
-
* `BUNDLED WITH 2.3.21` is routine. The step found `bundle` on PATH — on a mac
|
|
6
|
-
* guest that is /usr/bin/bundle, system Ruby 2.6 — and ran `bundle install`,
|
|
7
|
-
* and RubyGems refused to start any bundler but the locked one:
|
|
8
|
-
*
|
|
9
|
-
* Could not find 'bundler' (2.3.21) required by your Gemfile.lock.
|
|
10
|
-
* (Gem::GemNotFoundException)
|
|
11
|
-
*
|
|
12
|
-
* System Ruby cannot `gem install` without sudo either, so nothing in the step
|
|
13
|
-
* could recover. These tests run the generated script against stand-in `gem`,
|
|
14
|
-
* `bundle`, `pod` and `brew` executables and read back what it invoked.
|
|
15
|
-
*/
|
|
16
|
-
import { execFileSync } from 'node:child_process';
|
|
17
|
-
import { chmodSync, mkdirSync, mkdtempSync, readFileSync, existsSync, writeFileSync } from 'node:fs';
|
|
18
|
-
import { tmpdir } from 'node:os';
|
|
19
|
-
import { join } from 'node:path';
|
|
20
|
-
import { describe, test, expect } from '@jest/globals';
|
|
21
|
-
import { CocoapodsInstallStepExecutor } from './ios-deps.js';
|
|
22
|
-
import { testConfig } from './test-config.js';
|
|
23
|
-
const LOCK_WITH_BUNDLER = `GEM
|
|
24
|
-
remote: https://rubygems.org/
|
|
25
|
-
specs:
|
|
26
|
-
cocoapods (1.15.2)
|
|
27
|
-
|
|
28
|
-
PLATFORMS
|
|
29
|
-
ruby
|
|
30
|
-
|
|
31
|
-
DEPENDENCIES
|
|
32
|
-
cocoapods
|
|
33
|
-
|
|
34
|
-
BUNDLED WITH
|
|
35
|
-
2.3.21
|
|
36
|
-
`;
|
|
37
|
-
const executable = (path, body) => {
|
|
38
|
-
writeFileSync(path, `#!/bin/bash\n${body}\n`);
|
|
39
|
-
chmodSync(path, 0o755);
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Runs the step in a fresh project directory. `installed` lists the bundler
|
|
43
|
-
* versions the stand-in `gem` reports as already present.
|
|
44
|
-
*/
|
|
45
|
-
const run = async (opts) => {
|
|
46
|
-
const root = mkdtempSync(join(tmpdir(), 'cibuild-bundler-'));
|
|
47
|
-
const project = join(root, 'repo');
|
|
48
|
-
const bin = join(root, 'bin');
|
|
49
|
-
const scratch = join(root, 'scratch');
|
|
50
|
-
const log = join(root, 'calls.log');
|
|
51
|
-
mkdirSync(project);
|
|
52
|
-
mkdirSync(bin);
|
|
53
|
-
mkdirSync(scratch);
|
|
54
|
-
writeFileSync(join(project, 'Podfile'), "platform :ios, '15.0'\n");
|
|
55
|
-
if (opts.lock !== undefined)
|
|
56
|
-
writeFileSync(join(project, 'Gemfile.lock'), opts.lock);
|
|
57
|
-
writeFileSync(join(project, 'Gemfile'), opts.gemfile ?? "gem 'cocoapods'\n");
|
|
58
|
-
if (opts.rubyVersionFile !== undefined) {
|
|
59
|
-
writeFileSync(join(project, '.ruby-version'), opts.rubyVersionFile);
|
|
60
|
-
}
|
|
61
|
-
const installed = (opts.installed ?? []).join(' ');
|
|
62
|
-
executable(join(bin, 'gem'), `echo "gem $*" >> '${log}'
|
|
63
|
-
if [ "$1" = "list" ]; then
|
|
64
|
-
for v in ${installed}; do [ "$v" = "$5" ] && exit 0; done
|
|
65
|
-
exit 1
|
|
66
|
-
fi
|
|
67
|
-
if [ "$1" = "install" ]; then
|
|
68
|
-
${opts.gemInstallFails ? 'exit 1' : 'mkdir -p "$GEM_HOME/bin"; cp "$(dirname "$0")/bundle" "$GEM_HOME/bin/bundle"; exit 0'}
|
|
69
|
-
fi`);
|
|
70
|
-
executable(join(bin, 'bundle'), `echo "bundle $* (GEM_HOME=$GEM_HOME)" >> '${log}'`);
|
|
71
|
-
executable(join(bin, 'pod'), `echo "pod $*" >> '${log}'`);
|
|
72
|
-
executable(join(bin, 'ruby'), `echo "ruby $*" >> '${log}'; printf '2.6.10'`);
|
|
73
|
-
if (opts.brewRuby || opts.ruby33) {
|
|
74
|
-
const brewVersion = opts.brewRubyVersion ?? '3.4.1';
|
|
75
|
-
const keg = join(root, 'homebrew-ruby');
|
|
76
|
-
const keg33 = join(root, 'homebrew-ruby@3.3');
|
|
77
|
-
if (opts.brewRuby) {
|
|
78
|
-
mkdirSync(join(keg, 'bin'), { recursive: true });
|
|
79
|
-
executable(join(keg, 'bin', 'ruby'), `echo "brew-ruby $*" >> '${log}'; printf '${brewVersion}'`);
|
|
80
|
-
}
|
|
81
|
-
if (opts.ruby33) {
|
|
82
|
-
mkdirSync(join(keg33, 'bin'), { recursive: true });
|
|
83
|
-
executable(join(keg33, 'bin', 'ruby'), `echo "ruby33 $*" >> '${log}'; printf '3.3.10'`);
|
|
84
|
-
}
|
|
85
|
-
executable(join(bin, 'brew'), [
|
|
86
|
-
`if [ "$*" = "--prefix --installed ruby" ]; then ${opts.brewRuby ? `echo '${keg}'; exit 0` : 'exit 1'}; fi`,
|
|
87
|
-
`if [ "$*" = "list --versions ruby" ]; then ${opts.brewRuby ? `echo 'ruby ${brewVersion}'; exit 0` : 'exit 1'}; fi`,
|
|
88
|
-
`if [ "$*" = "--prefix --installed ruby@3.3" ]; then ${opts.ruby33 ? `echo '${keg33}'; exit 0` : 'exit 1'}; fi`,
|
|
89
|
-
'exit 1',
|
|
90
|
-
].join('\n'));
|
|
91
|
-
}
|
|
92
|
-
const script = (await new CocoapodsInstallStepExecutor().execute({ source_root_path: project }, {}, testConfig)).script;
|
|
93
|
-
const scriptPath = join(root, 'step.sh');
|
|
94
|
-
writeFileSync(scriptPath, script);
|
|
95
|
-
let output = '';
|
|
96
|
-
try {
|
|
97
|
-
output = execFileSync('bash', [scriptPath], {
|
|
98
|
-
cwd: root,
|
|
99
|
-
env: { PATH: `${bin}:/usr/bin:/bin`, HOME: root, CIBUILD_SCRATCH: scratch },
|
|
100
|
-
stdio: 'pipe',
|
|
101
|
-
}).toString();
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
output = `${err.stdout ?? ''}${err.stderr ?? ''}\nEXIT ${err.status}`;
|
|
105
|
-
}
|
|
106
|
-
const calls = existsSync(log) ? readFileSync(log, 'utf-8').trim().split('\n') : [];
|
|
107
|
-
return { calls, output, gemHome: join(scratch, 'cibuild-gems'), scratch };
|
|
108
|
-
};
|
|
109
|
-
describe('cocoapods-install runs the bundler Gemfile.lock names', () => {
|
|
110
|
-
test('installs the locked bundler when it is missing', async () => {
|
|
111
|
-
const { calls } = await run({ lock: LOCK_WITH_BUNDLER });
|
|
112
|
-
expect(calls).toContain('gem install bundler -v 2.3.21 --no-document');
|
|
113
|
-
});
|
|
114
|
-
test('installs it into a writable GEM_HOME outside the checkout', async () => {
|
|
115
|
-
const { calls, gemHome } = await run({ lock: LOCK_WITH_BUNDLER });
|
|
116
|
-
const install = calls.find((c) => c.startsWith('bundle _2.3.21_ install'));
|
|
117
|
-
expect(install).toBeDefined();
|
|
118
|
-
expect(install).toContain(`GEM_HOME=${gemHome}`);
|
|
119
|
-
});
|
|
120
|
-
test('runs install and pod through that exact version', async () => {
|
|
121
|
-
const { calls } = await run({ lock: LOCK_WITH_BUNDLER });
|
|
122
|
-
expect(calls.some((c) => c.startsWith('bundle _2.3.21_ install'))).toBe(true);
|
|
123
|
-
expect(calls.some((c) => c.startsWith('bundle _2.3.21_ exec pod install'))).toBe(true);
|
|
124
|
-
// Never an unversioned bundle, which is what RubyGems refused.
|
|
125
|
-
expect(calls.some((c) => /^bundle (install|exec)/.test(c))).toBe(false);
|
|
126
|
-
});
|
|
127
|
-
test('does not reinstall a bundler that is already there', async () => {
|
|
128
|
-
const { calls } = await run({ lock: LOCK_WITH_BUNDLER, installed: ['2.3.21'] });
|
|
129
|
-
expect(calls.some((c) => c.startsWith('gem install'))).toBe(false);
|
|
130
|
-
expect(calls.some((c) => c.startsWith('bundle _2.3.21_ exec pod install'))).toBe(true);
|
|
131
|
-
});
|
|
132
|
-
test('a lockfile without BUNDLED WITH keeps plain bundle', async () => {
|
|
133
|
-
const { calls } = await run({ lock: LOCK_WITH_BUNDLER.replace(/BUNDLED WITH\n.*\n/, '') });
|
|
134
|
-
expect(calls.some((c) => c.startsWith('gem install'))).toBe(false);
|
|
135
|
-
expect(calls.some((c) => c.startsWith('bundle exec pod install'))).toBe(true);
|
|
136
|
-
});
|
|
137
|
-
test('a Gemfile with no lock keeps plain bundle', async () => {
|
|
138
|
-
const { calls } = await run({});
|
|
139
|
-
expect(calls.some((c) => c.startsWith('bundle install'))).toBe(true);
|
|
140
|
-
expect(calls.some((c) => c.startsWith('bundle exec pod install'))).toBe(true);
|
|
141
|
-
});
|
|
142
|
-
test('a project without cocoapods in its Gemfile runs pod directly', async () => {
|
|
143
|
-
const { calls } = await run({ gemfile: "gem 'fastlane'\n" });
|
|
144
|
-
expect(calls).toContain('pod install');
|
|
145
|
-
expect(calls.some((c) => c.startsWith('bundle'))).toBe(false);
|
|
146
|
-
});
|
|
147
|
-
test('says which bundler it could not install, and fails', async () => {
|
|
148
|
-
const { output } = await run({ lock: LOCK_WITH_BUNDLER, gemInstallFails: true });
|
|
149
|
-
expect(output).toContain('bundler 2.3.21');
|
|
150
|
-
expect(output).toContain('BUNDLED WITH');
|
|
151
|
-
expect(output).toMatch(/EXIT [1-9]/);
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
// Issue 08 preferred Homebrew's Ruby whenever it was installed. On the mac
|
|
155
|
-
// image that is Ruby 4, and an old lockfile's gems do not load there: rake
|
|
156
|
-
// 13.0.6 requires `ostruct`, which stopped being a default gem in Ruby 4.0,
|
|
157
|
-
// so a native-extension build died inside rake. The lockfile decides instead:
|
|
158
|
-
// its `RUBY VERSION`, then `.ruby-version`, and system Ruby when neither names
|
|
159
|
-
// one. Homebrew's Ruby only when the named Ruby is 3 or newer.
|
|
160
|
-
describe('cocoapods-install runs the Ruby the project names', () => {
|
|
161
|
-
const usedBrew = (calls) => calls.some((c) => c.startsWith('brew-ruby'));
|
|
162
|
-
const usedSystem = (calls) => calls.some((c) => c.startsWith('ruby '));
|
|
163
|
-
const lockWithRuby = (v) => LOCK_WITH_BUNDLER.replace('BUNDLED WITH', `RUBY VERSION\n ruby ${v}\n\nBUNDLED WITH`);
|
|
164
|
-
test('a lock that names no Ruby runs system Ruby, with the locked bundler', async () => {
|
|
165
|
-
const { calls, output, gemHome } = await run({ lock: LOCK_WITH_BUNDLER, brewRuby: true });
|
|
166
|
-
expect(usedSystem(calls)).toBe(true);
|
|
167
|
-
expect(usedBrew(calls)).toBe(false);
|
|
168
|
-
expect(calls).toContain('gem install bundler -v 2.3.21 --no-document');
|
|
169
|
-
expect(calls.find((c) => c.startsWith('bundle _2.3.21_ install'))).toContain(`GEM_HOME=${gemHome}`);
|
|
170
|
-
expect(output).toMatch(/^Ruby: .*\(2\.6\.10\), GEM_HOME: .* — system: lockfile names no Ruby, and no Ruby 3\.3 is installed$/m);
|
|
171
|
-
});
|
|
172
|
-
test('a lock whose RUBY VERSION is 3 or newer runs Homebrew Ruby', async () => {
|
|
173
|
-
const { calls, output } = await run({ lock: lockWithRuby('3.3.4p94'), brewRuby: true });
|
|
174
|
-
expect(usedBrew(calls)).toBe(true);
|
|
175
|
-
expect(usedSystem(calls)).toBe(false);
|
|
176
|
-
expect(output).toMatch(/^Ruby: .*homebrew-ruby\/bin\/ruby \(3\.4\.1\), .* — from Gemfile\.lock RUBY VERSION 3\.3\.4$/m);
|
|
177
|
-
});
|
|
178
|
-
test('a lock whose RUBY VERSION is 2.x runs system Ruby', async () => {
|
|
179
|
-
const { calls, output } = await run({ lock: lockWithRuby('2.7.2p137'), brewRuby: true });
|
|
180
|
-
expect(usedBrew(calls)).toBe(false);
|
|
181
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 2.7.2');
|
|
182
|
-
});
|
|
183
|
-
test('the lock outranks .ruby-version', async () => {
|
|
184
|
-
const { calls, output } = await run({
|
|
185
|
-
lock: lockWithRuby('3.3.4p94'),
|
|
186
|
-
rubyVersionFile: '2.7.6\n',
|
|
187
|
-
brewRuby: true,
|
|
188
|
-
});
|
|
189
|
-
expect(usedBrew(calls)).toBe(true);
|
|
190
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 3.3.4');
|
|
191
|
-
});
|
|
192
|
-
test('.ruby-version of 3 or newer runs Homebrew Ruby when the lock names none', async () => {
|
|
193
|
-
const { calls, output } = await run({ lock: LOCK_WITH_BUNDLER, rubyVersionFile: 'ruby-3.2.2\n', brewRuby: true });
|
|
194
|
-
expect(usedBrew(calls)).toBe(true);
|
|
195
|
-
expect(output).toContain('— from .ruby-version 3.2.2');
|
|
196
|
-
});
|
|
197
|
-
test('.ruby-version of 2.7 runs system Ruby, and says so', async () => {
|
|
198
|
-
const { calls, output } = await run({ lock: LOCK_WITH_BUNDLER, rubyVersionFile: '2.7.6\n', brewRuby: true });
|
|
199
|
-
expect(usedBrew(calls)).toBe(false);
|
|
200
|
-
expect(usedSystem(calls)).toBe(true);
|
|
201
|
-
expect(output).toContain('— from .ruby-version 2.7.6');
|
|
202
|
-
});
|
|
203
|
-
test('a .ruby-version that names no version is ignored', async () => {
|
|
204
|
-
const { calls, output } = await run({ lock: LOCK_WITH_BUNDLER, rubyVersionFile: 'system\n', brewRuby: true });
|
|
205
|
-
expect(usedBrew(calls)).toBe(false);
|
|
206
|
-
expect(output).toContain('— system: lockfile names no Ruby');
|
|
207
|
-
});
|
|
208
|
-
test('Ruby 3 named, no Homebrew Ruby installed: system Ruby, and says so', async () => {
|
|
209
|
-
const { calls, output } = await run({ lock: lockWithRuby('3.3.4p94') });
|
|
210
|
-
expect(usedSystem(calls)).toBe(true);
|
|
211
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 3.3.4, but no Homebrew Ruby is installed');
|
|
212
|
-
});
|
|
213
|
-
test('a project without cocoapods in its Gemfile never picks a Ruby', async () => {
|
|
214
|
-
const { calls } = await run({ gemfile: "gem 'fastlane'\n", rubyVersionFile: '3.3.0\n', brewRuby: true });
|
|
215
|
-
expect(calls).toContain('pod install');
|
|
216
|
-
expect(usedBrew(calls)).toBe(false);
|
|
217
|
-
expect(usedSystem(calls)).toBe(false);
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
// With the lock naming no Ruby, the step chose system Ruby 2.6 as above, and the build still died:
|
|
221
|
-
// the Xcode 26.4 SDK's Ruby 2.6 headers have no `ruby/config.h`, so no native extension (json, ffi)
|
|
222
|
-
// compiles. Homebrew's Ruby is 4, where the lock's rake 13.0.6 cannot load. So a Ruby 3.3 runs when
|
|
223
|
-
// the lock names no Ruby or one below 3; a named 3.x runs 3.3 unless Homebrew's matches it better; a
|
|
224
|
-
// named 4.x runs Homebrew's. A machine without 3.3 behaves as before.
|
|
225
|
-
describe('cocoapods-install runs Ruby 3.3 where system Ruby cannot build native gems', () => {
|
|
226
|
-
const used33 = (calls) => calls.some((c) => c.startsWith('ruby33'));
|
|
227
|
-
const usedBrew = (calls) => calls.some((c) => c.startsWith('brew-ruby'));
|
|
228
|
-
const usedSystem = (calls) => calls.some((c) => c.startsWith('ruby '));
|
|
229
|
-
const lockWithRuby = (v) => LOCK_WITH_BUNDLER.replace('BUNDLED WITH', `RUBY VERSION\n ruby ${v}\n\nBUNDLED WITH`);
|
|
230
|
-
const image = { brewRuby: true, brewRubyVersion: '4.0.2', ruby33: true };
|
|
231
|
-
test('a lock that names no Ruby runs 3.3, with the locked bundler', async () => {
|
|
232
|
-
const { calls, output, gemHome } = await run({ lock: LOCK_WITH_BUNDLER, ...image });
|
|
233
|
-
expect(used33(calls)).toBe(true);
|
|
234
|
-
expect(usedSystem(calls)).toBe(false);
|
|
235
|
-
expect(usedBrew(calls)).toBe(false);
|
|
236
|
-
expect(calls).toContain('gem install bundler -v 2.3.21 --no-document');
|
|
237
|
-
expect(calls.find((c) => c.startsWith('bundle _2.3.21_ install'))).toContain(`GEM_HOME=${gemHome}`);
|
|
238
|
-
expect(output).toMatch(/^Ruby: .*homebrew-ruby@3\.3\/bin\/ruby \(3\.3\.10\), GEM_HOME: .* — Ruby 3\.3: lockfile names no Ruby, and system Ruby 2\.6 cannot build native gems$/m);
|
|
239
|
-
});
|
|
240
|
-
test('a lock whose RUBY VERSION is 2.x runs 3.3', async () => {
|
|
241
|
-
const { calls, output } = await run({ lock: lockWithRuby('2.7.2p137'), ...image });
|
|
242
|
-
expect(used33(calls)).toBe(true);
|
|
243
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 2.7.2, run on Ruby 3.3: system Ruby 2.6 cannot build native gems');
|
|
244
|
-
});
|
|
245
|
-
test('a 2.x .ruby-version runs 3.3', async () => {
|
|
246
|
-
const { calls } = await run({ lock: LOCK_WITH_BUNDLER, rubyVersionFile: '2.7.6\n', ...image });
|
|
247
|
-
expect(used33(calls)).toBe(true);
|
|
248
|
-
});
|
|
249
|
-
test('a named 3.x that Homebrew does not match runs 3.3', async () => {
|
|
250
|
-
const { calls, output } = await run({ lock: lockWithRuby('3.2.2'), ...image });
|
|
251
|
-
expect(used33(calls)).toBe(true);
|
|
252
|
-
expect(usedBrew(calls)).toBe(false);
|
|
253
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 3.2.2, run on Ruby 3.3');
|
|
254
|
-
});
|
|
255
|
-
test('a named 3.3 runs 3.3 and needs no aside', async () => {
|
|
256
|
-
const { calls, output } = await run({ lock: lockWithRuby('3.3.4p94'), ...image });
|
|
257
|
-
expect(used33(calls)).toBe(true);
|
|
258
|
-
expect(output).toMatch(/— from Gemfile\.lock RUBY VERSION 3\.3\.4$/m);
|
|
259
|
-
});
|
|
260
|
-
test('a named 3.x that Homebrew matches runs Homebrew Ruby', async () => {
|
|
261
|
-
const { calls, output } = await run({ lock: lockWithRuby('3.4.1'), brewRuby: true, brewRubyVersion: '3.4.7', ruby33: true });
|
|
262
|
-
expect(usedBrew(calls)).toBe(true);
|
|
263
|
-
expect(used33(calls)).toBe(false);
|
|
264
|
-
expect(output).toMatch(/— from Gemfile\.lock RUBY VERSION 3\.4\.1$/m);
|
|
265
|
-
});
|
|
266
|
-
test('a named 4.x runs Homebrew Ruby', async () => {
|
|
267
|
-
const { calls } = await run({ lock: lockWithRuby('4.0.1'), ...image });
|
|
268
|
-
expect(usedBrew(calls)).toBe(true);
|
|
269
|
-
expect(used33(calls)).toBe(false);
|
|
270
|
-
});
|
|
271
|
-
test('without 3.3, a lock that names no Ruby runs system Ruby, and says 3.3 is missing', async () => {
|
|
272
|
-
const { calls, output } = await run({ lock: LOCK_WITH_BUNDLER, brewRuby: true, brewRubyVersion: '4.0.2' });
|
|
273
|
-
expect(usedSystem(calls)).toBe(true);
|
|
274
|
-
expect(output).toContain('— system: lockfile names no Ruby, and no Ruby 3.3 is installed');
|
|
275
|
-
});
|
|
276
|
-
test('without 3.3, a 2.x lock runs system Ruby, and says 3.3 is missing', async () => {
|
|
277
|
-
const { calls, output } = await run({ lock: lockWithRuby('2.7.2p137'), brewRuby: true });
|
|
278
|
-
expect(usedSystem(calls)).toBe(true);
|
|
279
|
-
expect(output).toContain('— from Gemfile.lock RUBY VERSION 2.7.2, and no Ruby 3.3 is installed');
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
//# sourceMappingURL=cocoapods-locked-bundler.test.js.map
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `cocoapods-install` can be asked to skip a project that has no Podfile.
|
|
3
|
-
*
|
|
4
|
-
* The default stays a hard failure, because a pipeline that names this step is
|
|
5
|
-
* asserting the project uses CocoaPods and a missing Podfile is a real error.
|
|
6
|
-
*
|
|
7
|
-
* The iOS template needs the other behaviour: it serves every iOS project and a
|
|
8
|
-
* large share of them resolve dependencies through Swift Package Manager, where
|
|
9
|
-
* "Podfile not found" would be a CocoaPods error in a project that does not use
|
|
10
|
-
* CocoaPods. Until this input existed the template could not use this step at
|
|
11
|
-
* all, so it ran `pod install` from an inline `script@1.0.0` — which put it out
|
|
12
|
-
* of reach of the refused-fetch retry this step carries. That is the gap this
|
|
13
|
-
* closes, and it is why the release order matters: this must ship before the
|
|
14
|
-
* template is pointed at the step, or every SPM-only iOS repo breaks.
|
|
15
|
-
*/
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=cocoapods-skip-if-absent.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cocoapods-skip-if-absent.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/cocoapods-skip-if-absent.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `cocoapods-install` can be asked to skip a project that has no Podfile.
|
|
3
|
-
*
|
|
4
|
-
* The default stays a hard failure, because a pipeline that names this step is
|
|
5
|
-
* asserting the project uses CocoaPods and a missing Podfile is a real error.
|
|
6
|
-
*
|
|
7
|
-
* The iOS template needs the other behaviour: it serves every iOS project and a
|
|
8
|
-
* large share of them resolve dependencies through Swift Package Manager, where
|
|
9
|
-
* "Podfile not found" would be a CocoaPods error in a project that does not use
|
|
10
|
-
* CocoaPods. Until this input existed the template could not use this step at
|
|
11
|
-
* all, so it ran `pod install` from an inline `script@1.0.0` — which put it out
|
|
12
|
-
* of reach of the refused-fetch retry this step carries. That is the gap this
|
|
13
|
-
* closes, and it is why the release order matters: this must ship before the
|
|
14
|
-
* template is pointed at the step, or every SPM-only iOS repo breaks.
|
|
15
|
-
*/
|
|
16
|
-
import { describe, test, expect } from '@jest/globals';
|
|
17
|
-
import { CocoapodsInstallStepExecutor } from './ios-deps.js';
|
|
18
|
-
import { testConfig } from './test-config.js';
|
|
19
|
-
const build = async (inputs = {}) => {
|
|
20
|
-
const executor = new CocoapodsInstallStepExecutor();
|
|
21
|
-
const result = await executor.execute(inputs, {}, testConfig);
|
|
22
|
-
return result.script;
|
|
23
|
-
};
|
|
24
|
-
/** The body of the `if [ ! -f "Podfile" ]` branch, which is what changes. */
|
|
25
|
-
const absentBranch = (script) => {
|
|
26
|
-
const lines = script.split('\n');
|
|
27
|
-
const start = lines.findIndex((l) => l.includes('if [ ! -f "Podfile" ]'));
|
|
28
|
-
expect(start).toBeGreaterThanOrEqual(0);
|
|
29
|
-
const end = lines.findIndex((l, i) => i > start && l.trim() === 'fi');
|
|
30
|
-
return lines.slice(start, end + 1).join('\n');
|
|
31
|
-
};
|
|
32
|
-
describe('by default a missing Podfile is still an error', () => {
|
|
33
|
-
test('exits non-zero', async () => {
|
|
34
|
-
expect(absentBranch(await build())).toContain('exit 1');
|
|
35
|
-
});
|
|
36
|
-
test('says what was not found', async () => {
|
|
37
|
-
expect(absentBranch(await build())).toContain('Podfile not found');
|
|
38
|
-
});
|
|
39
|
-
test('an explicit false is the same as omitting it', async () => {
|
|
40
|
-
expect(absentBranch(await build({ skip_if_absent: false }))).toContain('exit 1');
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe('skip_if_absent turns it into a clean no-op', () => {
|
|
44
|
-
test('exits zero instead of one', async () => {
|
|
45
|
-
const branch = absentBranch(await build({ skip_if_absent: true }));
|
|
46
|
-
expect(branch).toContain('exit 0');
|
|
47
|
-
expect(branch).not.toContain('exit 1');
|
|
48
|
-
});
|
|
49
|
-
test('says it skipped rather than that something failed', async () => {
|
|
50
|
-
const branch = absentBranch(await build({ skip_if_absent: true }));
|
|
51
|
-
expect(branch).toContain('skipping CocoaPods install');
|
|
52
|
-
expect(branch).not.toContain('Error');
|
|
53
|
-
});
|
|
54
|
-
test('still runs pod install when a Podfile IS present', async () => {
|
|
55
|
-
// The skip is a branch, not a mode — the rest of the step is untouched.
|
|
56
|
-
const script = await build({ skip_if_absent: true });
|
|
57
|
-
expect(script).toContain('POD_INVOCATION');
|
|
58
|
-
expect(script).toContain('$POD_INVOCATION $POD_CMD');
|
|
59
|
-
});
|
|
60
|
-
test('still wraps the pod fetch in the refused-fetch retry', async () => {
|
|
61
|
-
// This is the entire point of letting the template use the step.
|
|
62
|
-
const script = await build({ skip_if_absent: true });
|
|
63
|
-
expect(script).toContain('cibuild_fetch_was_refused');
|
|
64
|
-
expect(script).toContain('CIBUILD_FETCH_MAX_ATTEMPTS');
|
|
65
|
-
});
|
|
66
|
-
test('still chooses between bundle exec and bare pod', async () => {
|
|
67
|
-
const script = await build({ skip_if_absent: true });
|
|
68
|
-
expect(script).toContain('USE_BUNDLE_EXEC');
|
|
69
|
-
expect(script).toContain('$BUNDLE_CMD exec pod');
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
/**
|
|
73
|
-
* The inline script the template used did two things, not one: it skipped a
|
|
74
|
-
* project with no Podfile, AND it looked for that Podfile beside the Xcode
|
|
75
|
-
* project rather than at the repository root. Both have to exist as inputs or
|
|
76
|
-
* the template cannot be switched — about a quarter of iOS repositories keep
|
|
77
|
-
* the app one directory down, and template inputs interpolate variables, not
|
|
78
|
-
* `$(dirname …)`.
|
|
79
|
-
*/
|
|
80
|
-
describe('project_path finds the Podfile beside the project', () => {
|
|
81
|
-
test('changes into the project directory, not the repo root', async () => {
|
|
82
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace' });
|
|
83
|
-
expect(script).toContain(`WORK_DIR="$(dirname 'ios/MyApp.xcworkspace')"`);
|
|
84
|
-
expect(script).toContain('cd "$WORK_DIR"');
|
|
85
|
-
});
|
|
86
|
-
test('does not fall back to CIBUILD_SOURCE_DIR when it is given', async () => {
|
|
87
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace' });
|
|
88
|
-
expect(script).not.toContain('cd "$CIBUILD_SOURCE_DIR"');
|
|
89
|
-
});
|
|
90
|
-
test('still falls back to CIBUILD_SOURCE_DIR when nothing is given', async () => {
|
|
91
|
-
expect(await build()).toContain('cd "$CIBUILD_SOURCE_DIR"');
|
|
92
|
-
});
|
|
93
|
-
test('an explicit source_root_path still wins over project_path', async () => {
|
|
94
|
-
const script = await build({
|
|
95
|
-
project_path: 'ios/MyApp.xcworkspace',
|
|
96
|
-
source_root_path: 'somewhere/else',
|
|
97
|
-
});
|
|
98
|
-
expect(script).toContain(`cd 'somewhere/else'`);
|
|
99
|
-
expect(script).not.toContain('dirname');
|
|
100
|
-
});
|
|
101
|
-
test('composes with skip_if_absent, which is how the template uses it', async () => {
|
|
102
|
-
const script = await build({ project_path: 'ios/MyApp.xcworkspace', skip_if_absent: true });
|
|
103
|
-
expect(script).toContain(`WORK_DIR="$(dirname 'ios/MyApp.xcworkspace')"`);
|
|
104
|
-
expect(absentBranch(script)).toContain('exit 0');
|
|
105
|
-
expect(script).toContain('cibuild_fetch_was_refused');
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
/**
|
|
109
|
-
* The exact input combination the iOS template sends. Pinned here because the
|
|
110
|
-
* template lives in another repository and deploys on a different cadence, so
|
|
111
|
-
* nothing else would notice this step drifting away from what it sends.
|
|
112
|
-
*/
|
|
113
|
-
describe('the iOS template combination', () => {
|
|
114
|
-
const templateInputs = {
|
|
115
|
-
project_path: 'MyApp.xcworkspace',
|
|
116
|
-
skip_if_absent: true,
|
|
117
|
-
command: 'install --repo-update',
|
|
118
|
-
};
|
|
119
|
-
test('produces pod install --repo-update, flags intact', async () => {
|
|
120
|
-
const script = await build(templateInputs);
|
|
121
|
-
expect(script).toContain('POD_CMD="install --repo-update"');
|
|
122
|
-
});
|
|
123
|
-
test('runs that under the refused-fetch retry, exactly once', async () => {
|
|
124
|
-
const script = await build(templateInputs);
|
|
125
|
-
expect(script).toContain('$POD_INVOCATION $POD_CMD');
|
|
126
|
-
expect(script.split('CIBUILD_FETCH_MAX_ATTEMPTS=').length - 1).toBe(1);
|
|
127
|
-
});
|
|
128
|
-
test('skips instead of failing when the repo has no Podfile', async () => {
|
|
129
|
-
expect(absentBranch(await build(templateInputs))).toContain('exit 0');
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
//# sourceMappingURL=cocoapods-skip-if-absent.test.js.map
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The envstore loader carried by every generated step.
|
|
3
|
-
*
|
|
4
|
-
* These tests drive the *reader* — the preamble `createBashScript` prepends —
|
|
5
|
-
* directly, with hostile envstore content written by hand. Going through a
|
|
6
|
-
* producer such as git-clone would only prove the one value that producer
|
|
7
|
-
* happens to write; the defect lives in the reader, so the reader is what gets
|
|
8
|
-
* the hostile input.
|
|
9
|
-
*
|
|
10
|
-
* Each case actually runs bash. Assertions are made on files the script body
|
|
11
|
-
* writes with `printf '%s'`, not on stdout, so a value's own newlines and
|
|
12
|
-
* quoting cannot be confused with the test's framing.
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=envstore-loader.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"envstore-loader.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/envstore-loader.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The envstore loader carried by every generated step.
|
|
3
|
-
*
|
|
4
|
-
* These tests drive the *reader* — the preamble `createBashScript` prepends —
|
|
5
|
-
* directly, with hostile envstore content written by hand. Going through a
|
|
6
|
-
* producer such as git-clone would only prove the one value that producer
|
|
7
|
-
* happens to write; the defect lives in the reader, so the reader is what gets
|
|
8
|
-
* the hostile input.
|
|
9
|
-
*
|
|
10
|
-
* Each case actually runs bash. Assertions are made on files the script body
|
|
11
|
-
* writes with `printf '%s'`, not on stdout, so a value's own newlines and
|
|
12
|
-
* quoting cannot be confused with the test's framing.
|
|
13
|
-
*/
|
|
14
|
-
import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
|
|
15
|
-
import { spawnSync } from 'child_process';
|
|
16
|
-
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync, existsSync } from 'fs';
|
|
17
|
-
import { join } from 'path';
|
|
18
|
-
import { tmpdir } from 'os';
|
|
19
|
-
import { BaseStepExecutor } from './base.js';
|
|
20
|
-
/** Exposes the protected preamble builder so the reader can be tested on its own. */
|
|
21
|
-
class PreambleProbe extends BaseStepExecutor {
|
|
22
|
-
async execute(_inputs, _env, _config) {
|
|
23
|
-
throw new Error('not used');
|
|
24
|
-
}
|
|
25
|
-
build(scriptContent) {
|
|
26
|
-
return this.createBashScript(scriptContent, 'envstore-loader-probe');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
describe('envstore loader', () => {
|
|
30
|
-
let workDir;
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
workDir = mkdtempSync(join(tmpdir(), 'envstore-loader-'));
|
|
33
|
-
});
|
|
34
|
-
afterEach(() => {
|
|
35
|
-
rmSync(workDir, { recursive: true, force: true });
|
|
36
|
-
});
|
|
37
|
-
/**
|
|
38
|
-
* Writes an envstore, runs the generated preamble over it, and captures the
|
|
39
|
-
* named variables as the step body sees them.
|
|
40
|
-
*/
|
|
41
|
-
function run(envs, capture, extraBody = '') {
|
|
42
|
-
const storePath = join(workDir, 'envstore.json');
|
|
43
|
-
const outDir = join(workDir, 'captured');
|
|
44
|
-
mkdirSync(outDir, { recursive: true });
|
|
45
|
-
writeFileSync(storePath, JSON.stringify({ envs: envs.map(e => ({ ...e, sensitive: false })) }), 'utf-8');
|
|
46
|
-
const body = [
|
|
47
|
-
...capture.map(name => `printf '%s' "\${${name}-}" > "$CAPTURE_DIR/${name}"`),
|
|
48
|
-
extraBody,
|
|
49
|
-
].join('\n');
|
|
50
|
-
const scriptPath = join(workDir, 'step.sh');
|
|
51
|
-
writeFileSync(scriptPath, new PreambleProbe().build(body), 'utf-8');
|
|
52
|
-
const proc = spawnSync('bash', [scriptPath], {
|
|
53
|
-
cwd: workDir,
|
|
54
|
-
encoding: 'utf-8',
|
|
55
|
-
env: {
|
|
56
|
-
...process.env,
|
|
57
|
-
ENVMAN_ENVSTORE_PATH: storePath,
|
|
58
|
-
CAPTURE_DIR: outDir,
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
return {
|
|
62
|
-
status: proc.status,
|
|
63
|
-
stderr: proc.stderr ?? '',
|
|
64
|
-
captured(name) {
|
|
65
|
-
const file = join(outDir, name);
|
|
66
|
-
return existsSync(file) ? readFileSync(file, 'utf-8') : undefined;
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
test('a value containing newlines round-trips byte for byte', () => {
|
|
71
|
-
const body = 'first line\nsecond line\nthird line';
|
|
72
|
-
const result = run([{ key: 'GIT_CLONE_COMMIT_MESSAGE_BODY', value: body }], ['GIT_CLONE_COMMIT_MESSAGE_BODY']);
|
|
73
|
-
expect(result.status).toBe(0);
|
|
74
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_BODY')).toBe(body);
|
|
75
|
-
});
|
|
76
|
-
test('security: a value whose lines look like assignments sets nothing', () => {
|
|
77
|
-
const hostile = 'looks harmless\nPATH=/tmp/attacker-controlled\nNODE_OPTIONS=--require=/tmp/evil.js';
|
|
78
|
-
const result = run([{ key: 'GIT_CLONE_COMMIT_MESSAGE_BODY', value: hostile }], ['GIT_CLONE_COMMIT_MESSAGE_BODY', 'PATH', 'NODE_OPTIONS']);
|
|
79
|
-
expect(result.status).toBe(0);
|
|
80
|
-
// The value arrives intact...
|
|
81
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_BODY')).toBe(hostile);
|
|
82
|
-
// ...and none of its lines became a variable. Both are compared against
|
|
83
|
-
// what the parent environment held, which is what "unchanged" means here:
|
|
84
|
-
// the test runner itself sets NODE_OPTIONS.
|
|
85
|
-
expect(result.captured('PATH')).toBe(process.env.PATH ?? '');
|
|
86
|
-
expect(result.captured('NODE_OPTIONS')).toBe(process.env.NODE_OPTIONS ?? '');
|
|
87
|
-
expect(result.captured('NODE_OPTIONS')).not.toContain('/tmp/evil.js');
|
|
88
|
-
});
|
|
89
|
-
test('awkward bytes in a value all survive unchanged', () => {
|
|
90
|
-
const cases = [
|
|
91
|
-
{ key: 'HAS_EQUALS', value: 'a=b=c' },
|
|
92
|
-
{ key: 'HAS_QUOTES', value: `single ' double " both '"` },
|
|
93
|
-
{ key: 'HAS_BACKTICKS', value: 'a `whoami` b' },
|
|
94
|
-
{ key: 'HAS_SUBSHELL', value: 'a $(whoami) b ${HOME} c' },
|
|
95
|
-
{ key: 'HAS_TRAILING_NEWLINE', value: 'ends with a newline\n' },
|
|
96
|
-
{ key: 'HAS_LONE_CR', value: 'before\rafter' },
|
|
97
|
-
{ key: 'HAS_BACKSLASHES', value: 'C:\\path\\to\\thing and \\n literal' },
|
|
98
|
-
{ key: 'HAS_LEADING_SPACE', value: ' padded ' },
|
|
99
|
-
];
|
|
100
|
-
const result = run(cases, cases.map(c => c.key));
|
|
101
|
-
expect(result.status).toBe(0);
|
|
102
|
-
for (const { key, value } of cases) {
|
|
103
|
-
expect({ key, value: result.captured(key) }).toEqual({ key, value });
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
test('a non-identifier key is skipped without failing the step under set -e', () => {
|
|
107
|
-
const result = run([
|
|
108
|
-
{ key: 'not a valid identifier', value: 'x' },
|
|
109
|
-
{ key: '2_LEADING_DIGIT', value: 'x' },
|
|
110
|
-
{ key: '', value: 'x' },
|
|
111
|
-
{ key: 'GOOD_KEY', value: 'kept' },
|
|
112
|
-
], ['GOOD_KEY'], 'echo reached-the-end');
|
|
113
|
-
expect(result.status).toBe(0);
|
|
114
|
-
expect(result.captured('GOOD_KEY')).toBe('kept');
|
|
115
|
-
expect(result.stderr).not.toContain('not a valid identifier');
|
|
116
|
-
});
|
|
117
|
-
test('regression: a multi-line commit message does not end the step', () => {
|
|
118
|
-
// The shape that killed the first real proof on 2026-08-30: git-clone
|
|
119
|
-
// publishes the commit body, and every later step died loading it.
|
|
120
|
-
const result = run([
|
|
121
|
-
{ key: 'GIT_CLONE_COMMIT_MESSAGE_SUBJECT', value: 'Add Invarn pipeline' },
|
|
122
|
-
{
|
|
123
|
-
key: 'GIT_CLONE_COMMIT_MESSAGE_BODY',
|
|
124
|
-
value: 'cibuild sets CIBUILD_GIT_BRANCH, so pre-execution validation asked for a\nvalue nothing provides.\n\nSecond paragraph.',
|
|
125
|
-
},
|
|
126
|
-
], ['GIT_CLONE_COMMIT_MESSAGE_SUBJECT'], 'echo step-completed');
|
|
127
|
-
expect(result.status).toBe(0);
|
|
128
|
-
expect(result.captured('GIT_CLONE_COMMIT_MESSAGE_SUBJECT')).toBe('Add Invarn pipeline');
|
|
129
|
-
expect(result.stderr).not.toContain('not a valid identifier');
|
|
130
|
-
});
|
|
131
|
-
test('an absent envstore leaves the step to run normally', () => {
|
|
132
|
-
const scriptPath = join(workDir, 'no-store.sh');
|
|
133
|
-
writeFileSync(scriptPath, new PreambleProbe().build('echo ran'), 'utf-8');
|
|
134
|
-
const proc = spawnSync('bash', [scriptPath], {
|
|
135
|
-
cwd: workDir,
|
|
136
|
-
encoding: 'utf-8',
|
|
137
|
-
env: { ...process.env, ENVMAN_ENVSTORE_PATH: join(workDir, 'missing.json') },
|
|
138
|
-
});
|
|
139
|
-
expect(proc.status).toBe(0);
|
|
140
|
-
expect(proc.stdout).toContain('ran');
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
//# sourceMappingURL=envstore-loader.test.js.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fastlane step: run a fastlane lane
|
|
3
|
-
*/
|
|
4
|
-
import { BaseStepExecutor } from './base.js';
|
|
5
|
-
import type { StepDef, CIConfig } from '../../types.js';
|
|
6
|
-
import type { ValidationRequirement, StepOutput } from '../validation-types.js';
|
|
7
|
-
export interface FastlaneInputs {
|
|
8
|
-
/** Fastlane lane to run (required) */
|
|
9
|
-
lane?: string;
|
|
10
|
-
/** Working directory (parent of fastlane directory) */
|
|
11
|
-
work_dir?: string;
|
|
12
|
-
/** Update fastlane gem before run (true/false) */
|
|
13
|
-
update_fastlane?: string;
|
|
14
|
-
/** Enable verbose logging (yes/no) */
|
|
15
|
-
verbose_log?: string;
|
|
16
|
-
/** Enable collecting cache files (yes/no) */
|
|
17
|
-
enable_cache?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Runs a fastlane lane with Gemfile detection and optional gem update.
|
|
21
|
-
*/
|
|
22
|
-
export declare class FastlaneStepExecutor extends BaseStepExecutor {
|
|
23
|
-
getValidationRequirements(_inputs: FastlaneInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
24
|
-
getOutputs(): StepOutput[];
|
|
25
|
-
execute(inputs: FastlaneInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=fastlane.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastlane.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/fastlane.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,yBAAyB,CACvB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAM1B,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAuEzG"}
|