@invarn/cibuild 1.3.15 → 1.3.17
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/cli.cjs +1 -1
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +987 -0
- package/dist/src/commands/android-scanner.d.ts +32 -0
- package/dist/src/commands/android-scanner.d.ts.map +1 -0
- package/dist/src/commands/android-scanner.js +667 -0
- package/dist/src/commands/build.d.ts +5 -0
- package/dist/src/commands/build.d.ts.map +1 -0
- package/dist/src/commands/build.js +1096 -0
- package/dist/src/commands/edit.d.ts +3 -0
- package/dist/src/commands/edit.d.ts.map +1 -0
- package/dist/src/commands/edit.js +651 -0
- package/dist/src/commands/file-secret-collector.d.ts +37 -0
- package/dist/src/commands/file-secret-collector.d.ts.map +1 -0
- package/dist/src/commands/file-secret-collector.js +199 -0
- package/dist/src/commands/github-workflow.d.ts +5 -0
- package/dist/src/commands/github-workflow.d.ts.map +1 -0
- package/dist/src/commands/github-workflow.js +45 -0
- package/dist/src/commands/ios-scanner.d.ts +27 -0
- package/dist/src/commands/ios-scanner.d.ts.map +1 -0
- package/dist/src/commands/ios-scanner.js +337 -0
- package/dist/src/commands/reset.d.ts +7 -0
- package/dist/src/commands/reset.d.ts.map +1 -0
- package/dist/src/commands/reset.js +81 -0
- package/dist/src/commands/secrets-sync-workflow.d.ts +15 -0
- package/dist/src/commands/secrets-sync-workflow.d.ts.map +1 -0
- package/dist/src/commands/secrets-sync-workflow.js +255 -0
- package/dist/src/commands/secrets-upload.d.ts +21 -0
- package/dist/src/commands/secrets-upload.d.ts.map +1 -0
- package/dist/src/commands/secrets-upload.js +177 -0
- package/dist/src/commands/secrets-upload.test.d.ts +5 -0
- package/dist/src/commands/secrets-upload.test.d.ts.map +1 -0
- package/dist/src/commands/secrets-upload.test.js +60 -0
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +46 -0
- package/dist/src/envman/cli.d.ts +21 -0
- package/dist/src/envman/cli.d.ts.map +1 -0
- package/dist/src/envman/cli.js +240 -0
- package/dist/src/envman/envman.d.ts +83 -0
- package/dist/src/envman/envman.d.ts.map +1 -0
- package/dist/src/envman/envman.js +361 -0
- package/dist/src/envman/envman.test.d.ts +5 -0
- package/dist/src/envman/envman.test.d.ts.map +1 -0
- package/dist/src/envman/envman.test.js +236 -0
- package/dist/src/envman/index.d.ts +23 -0
- package/dist/src/envman/index.d.ts.map +1 -0
- package/dist/src/envman/index.js +23 -0
- package/dist/src/envman/types.d.ts +55 -0
- package/dist/src/envman/types.d.ts.map +1 -0
- package/dist/src/envman/types.js +12 -0
- package/dist/src/lib.d.ts +27 -0
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/src/lib.js +32 -0
- package/dist/src/pipeline.d.ts +3 -0
- package/dist/src/pipeline.d.ts.map +1 -0
- package/dist/src/pipeline.js +57 -0
- package/dist/src/runner.d.ts +17 -0
- package/dist/src/runner.d.ts.map +1 -0
- package/dist/src/runner.js +234 -0
- package/dist/src/types.d.ts +57 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/yaml/bitrise-compat.d.ts +65 -0
- package/dist/src/yaml/bitrise-compat.d.ts.map +1 -0
- package/dist/src/yaml/bitrise-compat.js +206 -0
- package/dist/src/yaml/bitrise-compat.test.d.ts +5 -0
- package/dist/src/yaml/bitrise-compat.test.d.ts.map +1 -0
- package/dist/src/yaml/bitrise-compat.test.js +347 -0
- package/dist/src/yaml/converter.d.ts +33 -0
- package/dist/src/yaml/converter.d.ts.map +1 -0
- package/dist/src/yaml/converter.js +222 -0
- package/dist/src/yaml/converter.test.d.ts +5 -0
- package/dist/src/yaml/converter.test.d.ts.map +1 -0
- package/dist/src/yaml/converter.test.js +348 -0
- package/dist/src/yaml/e2e.test.d.ts +6 -0
- package/dist/src/yaml/e2e.test.d.ts.map +1 -0
- package/dist/src/yaml/e2e.test.js +446 -0
- package/dist/src/yaml/env-resolver.d.ts +120 -0
- package/dist/src/yaml/env-resolver.d.ts.map +1 -0
- package/dist/src/yaml/env-resolver.js +405 -0
- package/dist/src/yaml/env-resolver.test.d.ts +5 -0
- package/dist/src/yaml/env-resolver.test.d.ts.map +1 -0
- package/dist/src/yaml/env-resolver.test.js +502 -0
- package/dist/src/yaml/interactive-prompts.d.ts +71 -0
- package/dist/src/yaml/interactive-prompts.d.ts.map +1 -0
- package/dist/src/yaml/interactive-prompts.js +258 -0
- package/dist/src/yaml/missing-env-handler.d.ts +45 -0
- package/dist/src/yaml/missing-env-handler.d.ts.map +1 -0
- package/dist/src/yaml/missing-env-handler.js +64 -0
- package/dist/src/yaml/parser.d.ts +33 -0
- package/dist/src/yaml/parser.d.ts.map +1 -0
- package/dist/src/yaml/parser.js +145 -0
- package/dist/src/yaml/pipeline-with-secrets.d.ts +25 -0
- package/dist/src/yaml/pipeline-with-secrets.d.ts.map +1 -0
- package/dist/src/yaml/pipeline-with-secrets.js +76 -0
- package/dist/src/yaml/platform-detector.d.ts +83 -0
- package/dist/src/yaml/platform-detector.d.ts.map +1 -0
- package/dist/src/yaml/platform-detector.js +188 -0
- package/dist/src/yaml/platform-detector.test.d.ts +5 -0
- package/dist/src/yaml/platform-detector.test.d.ts.map +1 -0
- package/dist/src/yaml/platform-detector.test.js +414 -0
- package/dist/src/yaml/preflight-validation.d.ts +40 -0
- package/dist/src/yaml/preflight-validation.d.ts.map +1 -0
- package/dist/src/yaml/preflight-validation.js +152 -0
- package/dist/src/yaml/secrets-manager.d.ts +77 -0
- package/dist/src/yaml/secrets-manager.d.ts.map +1 -0
- package/dist/src/yaml/secrets-manager.js +219 -0
- package/dist/src/yaml/step-validator.d.ts +54 -0
- package/dist/src/yaml/step-validator.d.ts.map +1 -0
- package/dist/src/yaml/step-validator.js +403 -0
- package/dist/src/yaml/steps/android-sign.d.ts +35 -0
- package/dist/src/yaml/steps/android-sign.d.ts.map +1 -0
- package/dist/src/yaml/steps/android-sign.js +147 -0
- package/dist/src/yaml/steps/android-version.d.ts +26 -0
- package/dist/src/yaml/steps/android-version.d.ts.map +1 -0
- package/dist/src/yaml/steps/android-version.js +128 -0
- package/dist/src/yaml/steps/android-version.test.d.ts +5 -0
- package/dist/src/yaml/steps/android-version.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/android-version.test.js +196 -0
- package/dist/src/yaml/steps/android.d.ts +95 -0
- package/dist/src/yaml/steps/android.d.ts.map +1 -0
- package/dist/src/yaml/steps/android.js +916 -0
- package/dist/src/yaml/steps/app-store-deploy.d.ts +48 -0
- package/dist/src/yaml/steps/app-store-deploy.d.ts.map +1 -0
- package/dist/src/yaml/steps/app-store-deploy.js +162 -0
- package/dist/src/yaml/steps/base.d.ts +238 -0
- package/dist/src/yaml/steps/base.d.ts.map +1 -0
- package/dist/src/yaml/steps/base.js +345 -0
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts +26 -0
- package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-android-tools.js +198 -0
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +5 -0
- package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-android-tools.test.js +280 -0
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts +22 -0
- package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-apk-info.js +144 -0
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +5 -0
- package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-apk-info.test.js +331 -0
- package/dist/src/yaml/steps/bitrise-slack.d.ts +49 -0
- package/dist/src/yaml/steps/bitrise-slack.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-slack.js +280 -0
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts +5 -0
- package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-slack.test.js +484 -0
- package/dist/src/yaml/steps/bitrise-ssh.d.ts +27 -0
- package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-ssh.js +134 -0
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +5 -0
- package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/bitrise-ssh.test.js +205 -0
- package/dist/src/yaml/steps/cache.d.ts +52 -0
- package/dist/src/yaml/steps/cache.d.ts.map +1 -0
- package/dist/src/yaml/steps/cache.js +351 -0
- package/dist/src/yaml/steps/fastlane.d.ts +27 -0
- package/dist/src/yaml/steps/fastlane.d.ts.map +1 -0
- package/dist/src/yaml/steps/fastlane.js +79 -0
- package/dist/src/yaml/steps/file.d.ts +27 -0
- package/dist/src/yaml/steps/file.d.ts.map +1 -0
- package/dist/src/yaml/steps/file.js +35 -0
- package/dist/src/yaml/steps/flutter.d.ts +63 -0
- package/dist/src/yaml/steps/flutter.d.ts.map +1 -0
- package/dist/src/yaml/steps/flutter.js +215 -0
- package/dist/src/yaml/steps/git-clone.d.ts +26 -0
- package/dist/src/yaml/steps/git-clone.d.ts.map +1 -0
- package/dist/src/yaml/steps/git-clone.js +111 -0
- package/dist/src/yaml/steps/google-play-deploy.d.ts +37 -0
- package/dist/src/yaml/steps/google-play-deploy.d.ts.map +1 -0
- package/dist/src/yaml/steps/google-play-deploy.js +193 -0
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts +5 -0
- package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/google-play-deploy.test.js +310 -0
- package/dist/src/yaml/steps/index.d.ts +10 -0
- package/dist/src/yaml/steps/index.d.ts.map +1 -0
- package/dist/src/yaml/steps/index.js +1361 -0
- package/dist/src/yaml/steps/ios-deps.d.ts +43 -0
- package/dist/src/yaml/steps/ios-deps.d.ts.map +1 -0
- package/dist/src/yaml/steps/ios-deps.js +141 -0
- package/dist/src/yaml/steps/ios-deps.test.d.ts +5 -0
- package/dist/src/yaml/steps/ios-deps.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/ios-deps.test.js +90 -0
- package/dist/src/yaml/steps/ios-signing.d.ts +31 -0
- package/dist/src/yaml/steps/ios-signing.d.ts.map +1 -0
- package/dist/src/yaml/steps/ios-signing.js +144 -0
- package/dist/src/yaml/steps/ios-version.d.ts +47 -0
- package/dist/src/yaml/steps/ios-version.d.ts.map +1 -0
- package/dist/src/yaml/steps/ios-version.js +151 -0
- package/dist/src/yaml/steps/linting.d.ts +47 -0
- package/dist/src/yaml/steps/linting.d.ts.map +1 -0
- package/dist/src/yaml/steps/linting.js +148 -0
- package/dist/src/yaml/steps/phase2.test.d.ts +6 -0
- package/dist/src/yaml/steps/phase2.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/phase2.test.js +197 -0
- package/dist/src/yaml/steps/phase3.test.d.ts +5 -0
- package/dist/src/yaml/steps/phase3.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/phase3.test.js +144 -0
- package/dist/src/yaml/steps/phase4.test.d.ts +5 -0
- package/dist/src/yaml/steps/phase4.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/phase4.test.js +166 -0
- package/dist/src/yaml/steps/phase5.test.d.ts +6 -0
- package/dist/src/yaml/steps/phase5.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/phase5.test.js +263 -0
- package/dist/src/yaml/steps/registry.d.ts +88 -0
- package/dist/src/yaml/steps/registry.d.ts.map +1 -0
- package/dist/src/yaml/steps/registry.js +125 -0
- package/dist/src/yaml/steps/registry.test.d.ts +5 -0
- package/dist/src/yaml/steps/registry.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/registry.test.js +235 -0
- package/dist/src/yaml/steps/release.d.ts +50 -0
- package/dist/src/yaml/steps/release.d.ts.map +1 -0
- package/dist/src/yaml/steps/release.js +154 -0
- package/dist/src/yaml/steps/script.d.ts +23 -0
- package/dist/src/yaml/steps/script.d.ts.map +1 -0
- package/dist/src/yaml/steps/script.js +63 -0
- package/dist/src/yaml/steps/spec-validation.test.d.ts +6 -0
- package/dist/src/yaml/steps/spec-validation.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/spec-validation.test.js +130 -0
- package/dist/src/yaml/steps/steps.test.d.ts +6 -0
- package/dist/src/yaml/steps/steps.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/steps.test.js +474 -0
- package/dist/src/yaml/steps/test-config.d.ts +3 -0
- package/dist/src/yaml/steps/test-config.d.ts.map +1 -0
- package/dist/src/yaml/steps/test-config.js +16 -0
- package/dist/src/yaml/steps/xcode-new.test.d.ts +5 -0
- package/dist/src/yaml/steps/xcode-new.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/xcode-new.test.js +211 -0
- package/dist/src/yaml/steps/xcode.d.ts +222 -0
- package/dist/src/yaml/steps/xcode.d.ts.map +1 -0
- package/dist/src/yaml/steps/xcode.js +999 -0
- package/dist/src/yaml/types.d.ts +68 -0
- package/dist/src/yaml/types.d.ts.map +1 -0
- package/dist/src/yaml/types.js +5 -0
- package/dist/src/yaml/validation-types.d.ts +96 -0
- package/dist/src/yaml/validation-types.d.ts.map +1 -0
- package/dist/src/yaml/validation-types.js +8 -0
- package/dist/src/yaml/yaml-updater.d.ts +24 -0
- package/dist/src/yaml/yaml-updater.d.ts.map +1 -0
- package/dist/src/yaml/yaml-updater.js +128 -0
- package/package.json +16 -4
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS dependency management steps: cocoapods-install, carthage
|
|
3
|
+
*/
|
|
4
|
+
import { BaseStepExecutor } from './base.js';
|
|
5
|
+
import type { StepDef, CIConfig } from '../../types.js';
|
|
6
|
+
import type { ValidationRequirement } from '../validation-types.js';
|
|
7
|
+
export interface CocoapodsInstallInputs {
|
|
8
|
+
/** CocoaPods command: install | update */
|
|
9
|
+
command?: string;
|
|
10
|
+
/** Directory containing Podfile (and optionally Gemfile) */
|
|
11
|
+
source_root_path?: string;
|
|
12
|
+
/** Explicit path to Podfile (overrides source_root_path) */
|
|
13
|
+
podfile_path?: string;
|
|
14
|
+
/** Enable verbose CocoaPods logging */
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Runs `pod install` or `pod update`.
|
|
19
|
+
* Auto-detects Gemfile and uses `bundle exec pod` when appropriate.
|
|
20
|
+
* Determines CocoaPods version from Podfile.lock or Gemfile.lock.
|
|
21
|
+
*/
|
|
22
|
+
export declare class CocoapodsInstallStepExecutor extends BaseStepExecutor {
|
|
23
|
+
getValidationRequirements(_inputs: CocoapodsInstallInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
24
|
+
execute(inputs: CocoapodsInstallInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
25
|
+
}
|
|
26
|
+
export interface CarthageInputs {
|
|
27
|
+
/** Carthage command: bootstrap | update | build */
|
|
28
|
+
carthage_command?: string;
|
|
29
|
+
/** Additional options for the carthage command */
|
|
30
|
+
carthage_options?: string;
|
|
31
|
+
/** GitHub personal access token (avoids rate limits) */
|
|
32
|
+
github_access_token?: string;
|
|
33
|
+
/** Enable verbose logging */
|
|
34
|
+
verbose?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Runs a Carthage command (bootstrap/update/build) to manage dependencies.
|
|
38
|
+
*/
|
|
39
|
+
export declare class CarthageStepExecutor extends BaseStepExecutor {
|
|
40
|
+
getValidationRequirements(_inputs: CarthageInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
41
|
+
execute(inputs: CarthageInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ios-deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios-deps.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-deps.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,EAAc,MAAM,wBAAwB,CAAC;AAMhF,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,yBAAyB,CACvB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAUpB,OAAO,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CAuEpB;AAMD,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;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;IAUpB,OAAO,CACX,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CAyDpB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS dependency management steps: cocoapods-install, carthage
|
|
3
|
+
*/
|
|
4
|
+
import { BaseStepExecutor } from './base.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runs `pod install` or `pod update`.
|
|
7
|
+
* Auto-detects Gemfile and uses `bundle exec pod` when appropriate.
|
|
8
|
+
* Determines CocoaPods version from Podfile.lock or Gemfile.lock.
|
|
9
|
+
*/
|
|
10
|
+
export class CocoapodsInstallStepExecutor extends BaseStepExecutor {
|
|
11
|
+
getValidationRequirements(_inputs, _env, _config) {
|
|
12
|
+
return [
|
|
13
|
+
this.requireCommand('pod', 'CocoaPods is required', 'Install: gem install cocoapods (or use Gemfile)'),
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
async execute(inputs, _env, _config) {
|
|
17
|
+
const stepName = 'cocoapods-install';
|
|
18
|
+
const command = this.getInput(inputs, 'command', 'install');
|
|
19
|
+
const sourceRootPath = this.getInput(inputs, 'source_root_path', '');
|
|
20
|
+
const podfilePath = this.getInput(inputs, 'podfile_path', '');
|
|
21
|
+
const verbose = this.getInput(inputs, 'verbose', false);
|
|
22
|
+
const commands = [];
|
|
23
|
+
commands.push('# cocoapods-install');
|
|
24
|
+
commands.push('echo "🔧 Running CocoaPods..."');
|
|
25
|
+
commands.push('');
|
|
26
|
+
// Determine working directory
|
|
27
|
+
if (podfilePath) {
|
|
28
|
+
commands.push(`# Use directory from explicit Podfile path`);
|
|
29
|
+
commands.push(`WORK_DIR="$(dirname '${this.escapeBash(podfilePath)}')""`);
|
|
30
|
+
commands.push(`cd "$WORK_DIR"`);
|
|
31
|
+
}
|
|
32
|
+
else if (sourceRootPath) {
|
|
33
|
+
commands.push(`cd '${this.escapeBash(sourceRootPath)}'`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
commands.push('# Use CIBUILD_SOURCE_DIR if set, otherwise current directory');
|
|
37
|
+
commands.push('if [ -n "$CIBUILD_SOURCE_DIR" ]; then');
|
|
38
|
+
commands.push(' cd "$CIBUILD_SOURCE_DIR"');
|
|
39
|
+
commands.push('fi');
|
|
40
|
+
}
|
|
41
|
+
commands.push('');
|
|
42
|
+
// Check for Podfile
|
|
43
|
+
commands.push('if [ ! -f "Podfile" ]; then');
|
|
44
|
+
commands.push(' echo "❌ Error: Podfile not found in $(pwd)"');
|
|
45
|
+
commands.push(' exit 1');
|
|
46
|
+
commands.push('fi');
|
|
47
|
+
commands.push('');
|
|
48
|
+
// Determine whether to use bundle exec
|
|
49
|
+
commands.push('# Detect Gemfile with cocoapods gem → use bundle exec');
|
|
50
|
+
commands.push('USE_BUNDLE_EXEC="false"');
|
|
51
|
+
commands.push('if [ -f "Gemfile.lock" ] && grep -q "cocoapods" "Gemfile.lock" 2>/dev/null; then');
|
|
52
|
+
commands.push(' if command -v bundle &>/dev/null; then');
|
|
53
|
+
commands.push(' USE_BUNDLE_EXEC="true"');
|
|
54
|
+
commands.push(' echo "Detected cocoapods in Gemfile.lock — using bundle exec"');
|
|
55
|
+
commands.push(' bundle install --quiet');
|
|
56
|
+
commands.push(' fi');
|
|
57
|
+
commands.push('elif [ -f "Gemfile" ] && grep -q "cocoapods" "Gemfile" 2>/dev/null; then');
|
|
58
|
+
commands.push(' if command -v bundle &>/dev/null; then');
|
|
59
|
+
commands.push(' USE_BUNDLE_EXEC="true"');
|
|
60
|
+
commands.push(' echo "Detected cocoapods in Gemfile — using bundle exec"');
|
|
61
|
+
commands.push(' bundle install --quiet');
|
|
62
|
+
commands.push(' fi');
|
|
63
|
+
commands.push('fi');
|
|
64
|
+
commands.push('');
|
|
65
|
+
// Build pod command
|
|
66
|
+
const verboseFlag = verbose ? ' --verbose' : '';
|
|
67
|
+
commands.push(`POD_CMD="${this.escapeBash(command)}${verboseFlag}"`);
|
|
68
|
+
commands.push('');
|
|
69
|
+
commands.push('if [ "$USE_BUNDLE_EXEC" = "true" ]; then');
|
|
70
|
+
commands.push(' echo "Running: bundle exec pod $POD_CMD"');
|
|
71
|
+
commands.push(' bundle exec pod $POD_CMD');
|
|
72
|
+
commands.push('else');
|
|
73
|
+
commands.push(' echo "Running: pod $POD_CMD"');
|
|
74
|
+
commands.push(' pod $POD_CMD');
|
|
75
|
+
commands.push('fi');
|
|
76
|
+
commands.push('');
|
|
77
|
+
commands.push('echo "✅ CocoaPods ${POD_CMD%% *} completed"');
|
|
78
|
+
const script = this.createBashScriptFromCommands(commands, stepName);
|
|
79
|
+
return this.createScriptStep(script, stepName);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Runs a Carthage command (bootstrap/update/build) to manage dependencies.
|
|
84
|
+
*/
|
|
85
|
+
export class CarthageStepExecutor extends BaseStepExecutor {
|
|
86
|
+
getValidationRequirements(_inputs, _env, _config) {
|
|
87
|
+
return [
|
|
88
|
+
this.requireCommand('carthage', 'Carthage is required', 'Install: brew install carthage'),
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
async execute(inputs, _env, _config) {
|
|
92
|
+
const stepName = 'carthage';
|
|
93
|
+
const carthageCommand = this.getInput(inputs, 'carthage_command', 'bootstrap');
|
|
94
|
+
const carthageOptions = this.getInput(inputs, 'carthage_options', '');
|
|
95
|
+
const githubAccessToken = this.getInput(inputs, 'github_access_token', '');
|
|
96
|
+
const verbose = this.getInput(inputs, 'verbose', false);
|
|
97
|
+
const commands = [];
|
|
98
|
+
commands.push('# carthage');
|
|
99
|
+
commands.push(`echo "🔧 Running Carthage ${this.escapeBash(carthageCommand)}..."`);
|
|
100
|
+
commands.push('');
|
|
101
|
+
// Navigate to source dir if available
|
|
102
|
+
commands.push('if [ -n "$CIBUILD_SOURCE_DIR" ]; then');
|
|
103
|
+
commands.push(' cd "$CIBUILD_SOURCE_DIR"');
|
|
104
|
+
commands.push('fi');
|
|
105
|
+
commands.push('');
|
|
106
|
+
// Check for Cartfile
|
|
107
|
+
commands.push('if [ ! -f "Cartfile" ]; then');
|
|
108
|
+
commands.push(' echo "❌ Error: Cartfile not found in $(pwd)"');
|
|
109
|
+
commands.push(' exit 1');
|
|
110
|
+
commands.push('fi');
|
|
111
|
+
commands.push('');
|
|
112
|
+
// Set GitHub access token if provided
|
|
113
|
+
if (githubAccessToken) {
|
|
114
|
+
commands.push('# Set GitHub access token to avoid rate limiting');
|
|
115
|
+
commands.push(`export GITHUB_ACCESS_TOKEN='${this.escapeBash(githubAccessToken)}'`);
|
|
116
|
+
commands.push('');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
commands.push('# Use GITHUB_ACCESS_TOKEN from env if available');
|
|
120
|
+
commands.push('if [ -n "$GITHUB_ACCESS_TOKEN" ]; then');
|
|
121
|
+
commands.push(' echo "Using GitHub access token from environment"');
|
|
122
|
+
commands.push('fi');
|
|
123
|
+
commands.push('');
|
|
124
|
+
}
|
|
125
|
+
// Build command
|
|
126
|
+
let cmd = `carthage ${this.escapeBash(carthageCommand)}`;
|
|
127
|
+
if (carthageOptions) {
|
|
128
|
+
cmd += ` ${carthageOptions}`;
|
|
129
|
+
}
|
|
130
|
+
if (verbose) {
|
|
131
|
+
cmd += ' --verbose';
|
|
132
|
+
}
|
|
133
|
+
commands.push(`echo "Running: ${cmd}"`);
|
|
134
|
+
commands.push(cmd);
|
|
135
|
+
commands.push('');
|
|
136
|
+
commands.push(`echo "✅ Carthage ${this.escapeBash(carthageCommand)} completed"`);
|
|
137
|
+
const script = this.createBashScriptFromCommands(commands, stepName);
|
|
138
|
+
return this.createScriptStep(script, stepName);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=ios-deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios-deps.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-deps.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for iOS dependency management steps: cocoapods-install, carthage
|
|
3
|
+
*/
|
|
4
|
+
import { describe, test, expect } from '@jest/globals';
|
|
5
|
+
import { CocoapodsInstallStepExecutor, CarthageStepExecutor } from './ios-deps.js';
|
|
6
|
+
import { testConfig } from './test-config.js';
|
|
7
|
+
describe('CocoapodsInstallStepExecutor', () => {
|
|
8
|
+
test('should generate pod install script', async () => {
|
|
9
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
10
|
+
const result = await executor.execute({}, {}, testConfig);
|
|
11
|
+
expect(result.kind).toBe('script');
|
|
12
|
+
expect(result.name).toBe('cocoapods-install');
|
|
13
|
+
expect(result.script).toContain('pod');
|
|
14
|
+
expect(result.script).toContain('install');
|
|
15
|
+
expect(result.script).toContain('Podfile');
|
|
16
|
+
});
|
|
17
|
+
test('should support pod update command', async () => {
|
|
18
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
19
|
+
const result = await executor.execute({ command: 'update' }, {}, testConfig);
|
|
20
|
+
expect(result.script).toContain('update');
|
|
21
|
+
});
|
|
22
|
+
test('should support verbose mode', async () => {
|
|
23
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
24
|
+
const result = await executor.execute({ verbose: true }, {}, testConfig);
|
|
25
|
+
expect(result.script).toContain('--verbose');
|
|
26
|
+
});
|
|
27
|
+
test('should detect Gemfile and use bundle exec', async () => {
|
|
28
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
29
|
+
const result = await executor.execute({}, {}, testConfig);
|
|
30
|
+
expect(result.script).toContain('bundle exec');
|
|
31
|
+
expect(result.script).toContain('Gemfile');
|
|
32
|
+
});
|
|
33
|
+
test('should support custom source root path', async () => {
|
|
34
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
35
|
+
const result = await executor.execute({ source_root_path: '/path/to/project' }, {}, testConfig);
|
|
36
|
+
expect(result.script).toContain('/path/to/project');
|
|
37
|
+
});
|
|
38
|
+
test('should support explicit podfile path', async () => {
|
|
39
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
40
|
+
const result = await executor.execute({ podfile_path: '/path/to/Podfile' }, {}, testConfig);
|
|
41
|
+
expect(result.script).toContain('/path/to/Podfile');
|
|
42
|
+
});
|
|
43
|
+
test('should check for Podfile existence', async () => {
|
|
44
|
+
const executor = new CocoapodsInstallStepExecutor();
|
|
45
|
+
const result = await executor.execute({}, {}, testConfig);
|
|
46
|
+
expect(result.script).toContain('Podfile not found');
|
|
47
|
+
expect(result.script).toContain('exit 1');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('CarthageStepExecutor', () => {
|
|
51
|
+
test('should generate carthage bootstrap script', async () => {
|
|
52
|
+
const executor = new CarthageStepExecutor();
|
|
53
|
+
const result = await executor.execute({}, {}, testConfig);
|
|
54
|
+
expect(result.kind).toBe('script');
|
|
55
|
+
expect(result.name).toBe('carthage');
|
|
56
|
+
expect(result.script).toContain('carthage bootstrap');
|
|
57
|
+
});
|
|
58
|
+
test('should support update command', async () => {
|
|
59
|
+
const executor = new CarthageStepExecutor();
|
|
60
|
+
const result = await executor.execute({ carthage_command: 'update' }, {}, testConfig);
|
|
61
|
+
expect(result.script).toContain('carthage update');
|
|
62
|
+
});
|
|
63
|
+
test('should support build command', async () => {
|
|
64
|
+
const executor = new CarthageStepExecutor();
|
|
65
|
+
const result = await executor.execute({ carthage_command: 'build' }, {}, testConfig);
|
|
66
|
+
expect(result.script).toContain('carthage build');
|
|
67
|
+
});
|
|
68
|
+
test('should support additional options', async () => {
|
|
69
|
+
const executor = new CarthageStepExecutor();
|
|
70
|
+
const result = await executor.execute({ carthage_options: '--platform ios --use-xcframeworks' }, {}, testConfig);
|
|
71
|
+
expect(result.script).toContain('--platform ios --use-xcframeworks');
|
|
72
|
+
});
|
|
73
|
+
test('should support verbose mode', async () => {
|
|
74
|
+
const executor = new CarthageStepExecutor();
|
|
75
|
+
const result = await executor.execute({ verbose: true }, {}, testConfig);
|
|
76
|
+
expect(result.script).toContain('--verbose');
|
|
77
|
+
});
|
|
78
|
+
test('should support GitHub access token', async () => {
|
|
79
|
+
const executor = new CarthageStepExecutor();
|
|
80
|
+
const result = await executor.execute({ github_access_token: 'ghp_test123' }, {}, testConfig);
|
|
81
|
+
expect(result.script).toContain('GITHUB_ACCESS_TOKEN');
|
|
82
|
+
});
|
|
83
|
+
test('should check for Cartfile existence', async () => {
|
|
84
|
+
const executor = new CarthageStepExecutor();
|
|
85
|
+
const result = await executor.execute({}, {}, testConfig);
|
|
86
|
+
expect(result.script).toContain('Cartfile not found');
|
|
87
|
+
expect(result.script).toContain('exit 1');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=ios-deps.test.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS code signing step: certificate-installer
|
|
3
|
+
* Installs .p12 certificates and provisioning profiles into the macOS keychain.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseStepExecutor } from './base.js';
|
|
6
|
+
import type { StepDef, CIConfig } from '../../types.js';
|
|
7
|
+
import type { ValidationRequirement, StepOutput } from '../validation-types.js';
|
|
8
|
+
export interface CertificateInstallerInputs {
|
|
9
|
+
/** URL(s) to .p12 certificate files (pipe-separated). Supports file:// */
|
|
10
|
+
certificate_url?: string;
|
|
11
|
+
/** Certificate passphrase(s), pipe-separated to match certificate_url count */
|
|
12
|
+
certificate_passphrase?: string;
|
|
13
|
+
/** URL(s) to provisioning profile files (pipe-separated). Supports file:// */
|
|
14
|
+
provisioning_profile_url?: string;
|
|
15
|
+
/** Path to the keychain to use */
|
|
16
|
+
keychain_path?: string;
|
|
17
|
+
/** Password for the keychain */
|
|
18
|
+
keychain_password?: string;
|
|
19
|
+
/** Enable verbose logging */
|
|
20
|
+
verbose?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Installs Apple code signing certificates (.p12) and provisioning profiles
|
|
24
|
+
* into the macOS keychain for Xcode builds.
|
|
25
|
+
*/
|
|
26
|
+
export declare class CertificateInstallerStepExecutor extends BaseStepExecutor {
|
|
27
|
+
getValidationRequirements(_inputs: CertificateInstallerInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
28
|
+
getOutputs(): StepOutput[];
|
|
29
|
+
execute(inputs: CertificateInstallerInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ios-signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios-signing.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-signing.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,0BAA0B;IACzC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,gBAAgB;IACpE,yBAAyB,CACvB,OAAO,EAAE,0BAA0B,EACnC,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,0BAA0B,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAwIrH"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS code signing step: certificate-installer
|
|
3
|
+
* Installs .p12 certificates and provisioning profiles into the macOS keychain.
|
|
4
|
+
*/
|
|
5
|
+
import { BaseStepExecutor } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Installs Apple code signing certificates (.p12) and provisioning profiles
|
|
8
|
+
* into the macOS keychain for Xcode builds.
|
|
9
|
+
*/
|
|
10
|
+
export class CertificateInstallerStepExecutor extends BaseStepExecutor {
|
|
11
|
+
getValidationRequirements(_inputs, _env, _config) {
|
|
12
|
+
return [
|
|
13
|
+
this.requireCommand('security', 'macOS security command is required for keychain operations'),
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
getOutputs() {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
async execute(inputs, _env, _config) {
|
|
20
|
+
const stepName = 'certificate-installer';
|
|
21
|
+
const certificateUrl = this.getInput(inputs, 'certificate_url', '$CIBUILD_CERTIFICATE_URL');
|
|
22
|
+
const certificatePassphrase = this.getInput(inputs, 'certificate_passphrase', '$CIBUILD_CERTIFICATE_PASSPHRASE');
|
|
23
|
+
const provisioningProfileUrl = this.getInput(inputs, 'provisioning_profile_url', '$CIBUILD_PROVISION_URL');
|
|
24
|
+
const keychainPath = this.getInput(inputs, 'keychain_path', '$HOME/Library/Keychains/login.keychain');
|
|
25
|
+
const keychainPassword = this.getInput(inputs, 'keychain_password', '$CIBUILD_KEYCHAIN_PASSWORD');
|
|
26
|
+
const verbose = this.getInput(inputs, 'verbose', 'false') === 'true';
|
|
27
|
+
const commands = [];
|
|
28
|
+
commands.push('# certificate-installer — install certs & profiles into keychain');
|
|
29
|
+
commands.push('echo "🔐 Installing certificates and provisioning profiles..."');
|
|
30
|
+
commands.push('');
|
|
31
|
+
// Keychain setup
|
|
32
|
+
commands.push(`KEYCHAIN_PATH='${this.escapeBash(keychainPath)}'`);
|
|
33
|
+
commands.push(`KEYCHAIN_PASSWORD='${this.escapeBash(keychainPassword)}'`);
|
|
34
|
+
commands.push('');
|
|
35
|
+
// Ensure keychain exists and is unlocked
|
|
36
|
+
commands.push('# Unlock keychain');
|
|
37
|
+
commands.push('if [ ! -f "$KEYCHAIN_PATH" ]; then');
|
|
38
|
+
commands.push(' echo "Keychain not found at $KEYCHAIN_PATH — creating..."');
|
|
39
|
+
commands.push(' security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"');
|
|
40
|
+
commands.push('fi');
|
|
41
|
+
commands.push('security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"');
|
|
42
|
+
commands.push('');
|
|
43
|
+
// Set keychain settings — keep it unlocked
|
|
44
|
+
commands.push('# Set keychain settings');
|
|
45
|
+
commands.push('security set-keychain-settings -lut 7200 "$KEYCHAIN_PATH"');
|
|
46
|
+
commands.push('');
|
|
47
|
+
// Add keychain to search list
|
|
48
|
+
commands.push('# Add keychain to search list');
|
|
49
|
+
commands.push('EXISTING_KEYCHAINS=$(security list-keychains -d user | tr -d \'"\' | tr \'\\n\' \' \')');
|
|
50
|
+
commands.push('security list-keychains -d user -s $EXISTING_KEYCHAINS "$KEYCHAIN_PATH"');
|
|
51
|
+
commands.push('security default-keychain -s "$KEYCHAIN_PATH"');
|
|
52
|
+
commands.push('');
|
|
53
|
+
// Install certificates
|
|
54
|
+
commands.push('# Install certificates');
|
|
55
|
+
commands.push(`CERT_URLS='${this.escapeBash(certificateUrl)}'`);
|
|
56
|
+
commands.push(`CERT_PASSPHRASES='${this.escapeBash(certificatePassphrase)}'`);
|
|
57
|
+
commands.push('');
|
|
58
|
+
commands.push('if [ -n "$CERT_URLS" ]; then');
|
|
59
|
+
commands.push(' IFS="|" read -ra URL_ARRAY <<< "$CERT_URLS"');
|
|
60
|
+
commands.push(' IFS="|" read -ra PASS_ARRAY <<< "$CERT_PASSPHRASES"');
|
|
61
|
+
commands.push(' CERT_INDEX=0');
|
|
62
|
+
commands.push(' for CERT_URL in "${URL_ARRAY[@]}"; do');
|
|
63
|
+
commands.push(' CERT_URL=$(echo "$CERT_URL" | xargs)');
|
|
64
|
+
commands.push(' [ -z "$CERT_URL" ] && continue');
|
|
65
|
+
commands.push(' CERT_PASS="${PASS_ARRAY[$CERT_INDEX]:-}"');
|
|
66
|
+
commands.push(' CERT_FILE=$(mktemp /tmp/cert_XXXXXX.p12)');
|
|
67
|
+
commands.push(' ');
|
|
68
|
+
commands.push(' if [[ "$CERT_URL" == file://* ]]; then');
|
|
69
|
+
commands.push(' LOCAL_PATH="${CERT_URL#file://}"');
|
|
70
|
+
commands.push(' cp "$LOCAL_PATH" "$CERT_FILE"');
|
|
71
|
+
commands.push(' else');
|
|
72
|
+
if (verbose) {
|
|
73
|
+
commands.push(' echo "Downloading certificate from: $CERT_URL"');
|
|
74
|
+
}
|
|
75
|
+
commands.push(' curl -fsSL "$CERT_URL" -o "$CERT_FILE"');
|
|
76
|
+
commands.push(' fi');
|
|
77
|
+
commands.push(' ');
|
|
78
|
+
commands.push(' echo "Installing certificate $((CERT_INDEX + 1))..."');
|
|
79
|
+
commands.push(' security import "$CERT_FILE" -k "$KEYCHAIN_PATH" -P "$CERT_PASS" -T /usr/bin/codesign -T /usr/bin/security');
|
|
80
|
+
commands.push(' rm -f "$CERT_FILE"');
|
|
81
|
+
commands.push(' CERT_INDEX=$((CERT_INDEX + 1))');
|
|
82
|
+
commands.push(' done');
|
|
83
|
+
commands.push(' echo "Installed $CERT_INDEX certificate(s)"');
|
|
84
|
+
commands.push('fi');
|
|
85
|
+
commands.push('');
|
|
86
|
+
// Allow codesign to access the keychain without prompt
|
|
87
|
+
commands.push('# Allow codesign access without prompt');
|
|
88
|
+
commands.push('security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" 2>/dev/null || true');
|
|
89
|
+
commands.push('');
|
|
90
|
+
// Install provisioning profiles
|
|
91
|
+
commands.push('# Install provisioning profiles');
|
|
92
|
+
commands.push(`PROFILE_URLS='${this.escapeBash(provisioningProfileUrl)}'`);
|
|
93
|
+
commands.push('PROFILES_DIR="$HOME/Library/MobileDevice/Provisioning Profiles"');
|
|
94
|
+
commands.push('mkdir -p "$PROFILES_DIR"');
|
|
95
|
+
commands.push('');
|
|
96
|
+
commands.push('if [ -n "$PROFILE_URLS" ]; then');
|
|
97
|
+
commands.push(' IFS="|" read -ra PROFILE_URL_ARRAY <<< "$PROFILE_URLS"');
|
|
98
|
+
commands.push(' PROFILE_INDEX=0');
|
|
99
|
+
commands.push(' for PROFILE_URL in "${PROFILE_URL_ARRAY[@]}"; do');
|
|
100
|
+
commands.push(' PROFILE_URL=$(echo "$PROFILE_URL" | xargs)');
|
|
101
|
+
commands.push(' [ -z "$PROFILE_URL" ] && continue');
|
|
102
|
+
commands.push(' PROFILE_FILE=$(mktemp /tmp/profile_XXXXXX.mobileprovision)');
|
|
103
|
+
commands.push(' ');
|
|
104
|
+
commands.push(' if [[ "$PROFILE_URL" == file://* ]]; then');
|
|
105
|
+
commands.push(' LOCAL_PATH="${PROFILE_URL#file://}"');
|
|
106
|
+
commands.push(' cp "$LOCAL_PATH" "$PROFILE_FILE"');
|
|
107
|
+
commands.push(' else');
|
|
108
|
+
if (verbose) {
|
|
109
|
+
commands.push(' echo "Downloading provisioning profile from: $PROFILE_URL"');
|
|
110
|
+
}
|
|
111
|
+
commands.push(' curl -fsSL "$PROFILE_URL" -o "$PROFILE_FILE"');
|
|
112
|
+
commands.push(' fi');
|
|
113
|
+
commands.push(' ');
|
|
114
|
+
commands.push(' # Extract UUID from profile and install');
|
|
115
|
+
commands.push(' PROFILE_UUID=$(/usr/libexec/PlistBuddy -c "Print :UUID" /dev/stdin <<< "$(security cms -D -i "$PROFILE_FILE" 2>/dev/null)" 2>/dev/null || true)');
|
|
116
|
+
commands.push(' if [ -n "$PROFILE_UUID" ]; then');
|
|
117
|
+
commands.push(' cp "$PROFILE_FILE" "$PROFILES_DIR/$PROFILE_UUID.mobileprovision"');
|
|
118
|
+
commands.push(' echo "Installed profile $((PROFILE_INDEX + 1)): $PROFILE_UUID"');
|
|
119
|
+
commands.push(' else');
|
|
120
|
+
commands.push(' echo "⚠️ Warning: Could not extract UUID from profile $((PROFILE_INDEX + 1))"');
|
|
121
|
+
commands.push(' # Install with original name as fallback');
|
|
122
|
+
commands.push(' cp "$PROFILE_FILE" "$PROFILES_DIR/"');
|
|
123
|
+
commands.push(' fi');
|
|
124
|
+
commands.push(' rm -f "$PROFILE_FILE"');
|
|
125
|
+
commands.push(' PROFILE_INDEX=$((PROFILE_INDEX + 1))');
|
|
126
|
+
commands.push(' done');
|
|
127
|
+
commands.push(' echo "Installed $PROFILE_INDEX provisioning profile(s)"');
|
|
128
|
+
commands.push('fi');
|
|
129
|
+
commands.push('');
|
|
130
|
+
// Verify
|
|
131
|
+
if (verbose) {
|
|
132
|
+
commands.push('# List installed identities');
|
|
133
|
+
commands.push('echo "Installed signing identities:"');
|
|
134
|
+
commands.push('security find-identity -v -p codesigning "$KEYCHAIN_PATH"');
|
|
135
|
+
commands.push('');
|
|
136
|
+
commands.push('echo "Installed provisioning profiles:"');
|
|
137
|
+
commands.push('ls -la "$PROFILES_DIR/"');
|
|
138
|
+
}
|
|
139
|
+
commands.push('echo "✅ Certificate and profile installation complete"');
|
|
140
|
+
const script = this.createBashScriptFromCommands(commands, stepName);
|
|
141
|
+
return this.createScriptStep(script, stepName);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=ios-signing.js.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS version management steps: set-xcode-build-number, set-ios-version
|
|
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 SetXcodeBuildNumberInputs {
|
|
8
|
+
/** Path to .xcodeproj or .xcworkspace */
|
|
9
|
+
project_path?: string;
|
|
10
|
+
/** Xcode scheme name */
|
|
11
|
+
scheme?: string;
|
|
12
|
+
/** Target name (optional — uses scheme's default target if empty) */
|
|
13
|
+
target?: string;
|
|
14
|
+
/** Build number value (CFBundleVersion / CURRENT_PROJECT_VERSION) */
|
|
15
|
+
build_version?: string;
|
|
16
|
+
/** Offset added to build_version */
|
|
17
|
+
build_version_offset?: string;
|
|
18
|
+
/** Marketing version (CFBundleShortVersionString / MARKETING_VERSION) */
|
|
19
|
+
build_short_version_string?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Updates the Xcode project's build number (CFBundleVersion) and optionally
|
|
23
|
+
* the marketing version (CFBundleShortVersionString) using agvtool and PlistBuddy.
|
|
24
|
+
*/
|
|
25
|
+
export declare class SetXcodeBuildNumberStepExecutor extends BaseStepExecutor {
|
|
26
|
+
getValidationRequirements(inputs: SetXcodeBuildNumberInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
27
|
+
getOutputs(): StepOutput[];
|
|
28
|
+
execute(inputs: SetXcodeBuildNumberInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
29
|
+
}
|
|
30
|
+
export interface SetIosVersionInputs {
|
|
31
|
+
/** Path to Info.plist file */
|
|
32
|
+
info_plist_file?: string;
|
|
33
|
+
/** CFBundleVersion (build number) */
|
|
34
|
+
bundle_version?: string;
|
|
35
|
+
/** CFBundleShortVersionString (marketing version) */
|
|
36
|
+
bundle_version_short?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Directly edits an Info.plist file to set CFBundleVersion and/or
|
|
40
|
+
* CFBundleShortVersionString using PlistBuddy.
|
|
41
|
+
*/
|
|
42
|
+
export declare class SetIosVersionStepExecutor extends BaseStepExecutor {
|
|
43
|
+
getValidationRequirements(inputs: SetIosVersionInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
44
|
+
getOutputs(): StepOutput[];
|
|
45
|
+
execute(inputs: SetIosVersionInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ios-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios-version.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-version.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;AAMhF,MAAM,WAAW,yBAAyB;IACxC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yEAAyE;IACzE,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,gBAAgB;IACnE,yBAAyB,CACvB,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAM1B,UAAU,IAAI,UAAU,EAAE;IAMpB,OAAO,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAqFpH;AAMD,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;IAC7D,yBAAyB,CACvB,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAM1B,UAAU,IAAI,UAAU,EAAE;IAOpB,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CA0C9G"}
|