@invarn/cibuild 1.3.16 → 1.3.18
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 +47 -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 +58 -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 +352 -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 +505 -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 +17 -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,1361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step registry initialization
|
|
3
|
+
* Registers all available YAML steps
|
|
4
|
+
*/
|
|
5
|
+
import { registerStep } from './registry.js';
|
|
6
|
+
import { GitCloneStepExecutor } from './git-clone.js';
|
|
7
|
+
import { ScriptStepExecutor } from './script.js';
|
|
8
|
+
import { FileStepExecutor } from './file.js';
|
|
9
|
+
import { CachePullStepExecutor, CachePushStepExecutor } from './cache.js';
|
|
10
|
+
import { XcodeBuildStepExecutor, XcodeTestStepExecutor, IosArchiveStepExecutor, XcodeArchiveStepExecutor, OtaInstallStepExecutor, XcodeBuildForTestStepExecutor, XcodeTestWithoutBuildingStepExecutor, XcodeBuildForSimulatorStepExecutor, ExportXcarchiveStepExecutor } from './xcode.js';
|
|
11
|
+
import { SwiftlintStepExecutor, DetektStepExecutor } from './linting.js';
|
|
12
|
+
import { FlutterInstallerStepExecutor, FlutterBuildStepExecutor, FlutterTestStepExecutor } from './flutter.js';
|
|
13
|
+
import { GenerateChangelogStepExecutor, GithubReleaseStepExecutor } from './release.js';
|
|
14
|
+
import { CocoapodsInstallStepExecutor, CarthageStepExecutor } from './ios-deps.js';
|
|
15
|
+
import { SetJavaVersionStepExecutor, GradleBuildStepExecutor, AndroidLintStepExecutor, AndroidUnitTestStepExecutor, AndroidBuildForUITestingStepExecutor, } from './android.js';
|
|
16
|
+
import { SignApkStepExecutor } from './android-sign.js';
|
|
17
|
+
import { SetXcodeBuildNumberStepExecutor, SetIosVersionStepExecutor } from './ios-version.js';
|
|
18
|
+
import { CertificateInstallerStepExecutor } from './ios-signing.js';
|
|
19
|
+
import { FastlaneStepExecutor } from './fastlane.js';
|
|
20
|
+
import { BitriseSSHStepExecutor } from './bitrise-ssh.js';
|
|
21
|
+
import { BitriseAndroidToolsStepExecutor } from './bitrise-android-tools.js';
|
|
22
|
+
import { ChangeAndroidVersionStepExecutor } from './android-version.js';
|
|
23
|
+
import { BitriseSlackStepExecutor } from './bitrise-slack.js';
|
|
24
|
+
import { BitriseApkInfoStepExecutor } from './bitrise-apk-info.js';
|
|
25
|
+
import { GooglePlayDeployStepExecutor } from './google-play-deploy.js';
|
|
26
|
+
import { AppStoreDeployStepExecutor } from './app-store-deploy.js';
|
|
27
|
+
/**
|
|
28
|
+
* Initializes the step registry with all available steps
|
|
29
|
+
* This function should be called once at application startup
|
|
30
|
+
*/
|
|
31
|
+
export function initializeStepRegistry() {
|
|
32
|
+
// Git steps
|
|
33
|
+
registerStep('git-clone', new GitCloneStepExecutor(), {
|
|
34
|
+
name: 'git-clone',
|
|
35
|
+
description: 'Clone a git repository',
|
|
36
|
+
platform: 'all',
|
|
37
|
+
inputs: {
|
|
38
|
+
repository: {
|
|
39
|
+
description: 'Git repository URL',
|
|
40
|
+
required: false,
|
|
41
|
+
default: '$CIBUILD_GIT_REPOSITORY_URL',
|
|
42
|
+
},
|
|
43
|
+
branch: {
|
|
44
|
+
description: 'Git branch to clone',
|
|
45
|
+
required: false,
|
|
46
|
+
default: '$CIBUILD_GIT_BRANCH or main',
|
|
47
|
+
},
|
|
48
|
+
clone_depth: {
|
|
49
|
+
description: 'Clone depth (0 for full clone)',
|
|
50
|
+
required: false,
|
|
51
|
+
default: 0,
|
|
52
|
+
},
|
|
53
|
+
clone_into_dir: {
|
|
54
|
+
description: 'Directory to clone into',
|
|
55
|
+
required: false,
|
|
56
|
+
default: '.',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
// File step — writes a secret file to a target path at runtime
|
|
61
|
+
registerStep('file', new FileStepExecutor(), {
|
|
62
|
+
name: 'file',
|
|
63
|
+
description: 'Write a secret file to a path at runtime',
|
|
64
|
+
platform: 'all',
|
|
65
|
+
inputs: {
|
|
66
|
+
target_path: {
|
|
67
|
+
description: 'Target path in project (relative to project root)',
|
|
68
|
+
required: true,
|
|
69
|
+
inputType: 'path',
|
|
70
|
+
},
|
|
71
|
+
var_name: {
|
|
72
|
+
description: 'Secret variable name',
|
|
73
|
+
required: true,
|
|
74
|
+
inputType: 'text',
|
|
75
|
+
deriveFrom: 'target_path',
|
|
76
|
+
deriveTransform: 'filename-to-env-var',
|
|
77
|
+
},
|
|
78
|
+
content: {
|
|
79
|
+
description: 'File content (stored as a CI secret, not written to YAML)',
|
|
80
|
+
required: true,
|
|
81
|
+
inputType: 'multiline',
|
|
82
|
+
isSetupSecret: true,
|
|
83
|
+
secretKeyField: 'var_name',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
// Script step
|
|
88
|
+
registerStep('script', new ScriptStepExecutor(), {
|
|
89
|
+
name: 'script',
|
|
90
|
+
description: 'Execute a custom script',
|
|
91
|
+
platform: 'all',
|
|
92
|
+
inputs: {
|
|
93
|
+
content: {
|
|
94
|
+
description: 'Script content to execute',
|
|
95
|
+
required: true,
|
|
96
|
+
},
|
|
97
|
+
working_dir: {
|
|
98
|
+
description: 'Working directory for script execution',
|
|
99
|
+
required: false,
|
|
100
|
+
default: '',
|
|
101
|
+
},
|
|
102
|
+
runner_bin: {
|
|
103
|
+
description: 'Script runner (bash, python, ruby, node)',
|
|
104
|
+
required: false,
|
|
105
|
+
default: 'bash',
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// Cache steps
|
|
110
|
+
registerStep('cache-pull', new CachePullStepExecutor(), {
|
|
111
|
+
name: 'cache-pull',
|
|
112
|
+
description: 'Restore cached files',
|
|
113
|
+
platform: 'all',
|
|
114
|
+
inputs: {
|
|
115
|
+
cache_key: {
|
|
116
|
+
description: 'Cache key identifier',
|
|
117
|
+
required: false,
|
|
118
|
+
default: '',
|
|
119
|
+
},
|
|
120
|
+
cache_paths: {
|
|
121
|
+
description: 'Paths to restore from cache',
|
|
122
|
+
required: false,
|
|
123
|
+
default: [],
|
|
124
|
+
},
|
|
125
|
+
is_debug_mode: {
|
|
126
|
+
description: 'Enable debug output',
|
|
127
|
+
required: false,
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
registerStep('cache-push', new CachePushStepExecutor(), {
|
|
133
|
+
name: 'cache-push',
|
|
134
|
+
description: 'Save files to cache',
|
|
135
|
+
platform: 'all',
|
|
136
|
+
inputs: {
|
|
137
|
+
cache_key: {
|
|
138
|
+
description: 'Cache key identifier',
|
|
139
|
+
required: false,
|
|
140
|
+
default: '',
|
|
141
|
+
},
|
|
142
|
+
cache_paths: {
|
|
143
|
+
description: 'Paths to cache',
|
|
144
|
+
required: true,
|
|
145
|
+
},
|
|
146
|
+
is_debug_mode: {
|
|
147
|
+
description: 'Enable debug output',
|
|
148
|
+
required: false,
|
|
149
|
+
default: false,
|
|
150
|
+
},
|
|
151
|
+
ignore_check_on_paths: {
|
|
152
|
+
description: 'Ignore missing path warnings',
|
|
153
|
+
required: false,
|
|
154
|
+
default: false,
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// iOS/Xcode steps
|
|
159
|
+
registerStep('xcodebuild', new XcodeBuildStepExecutor(), {
|
|
160
|
+
name: 'xcodebuild',
|
|
161
|
+
description: 'Build iOS/macOS project with Xcode',
|
|
162
|
+
platform: 'ios',
|
|
163
|
+
inputs: {
|
|
164
|
+
project_path: {
|
|
165
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
166
|
+
required: true,
|
|
167
|
+
},
|
|
168
|
+
scheme: {
|
|
169
|
+
description: 'Xcode scheme name',
|
|
170
|
+
required: true,
|
|
171
|
+
},
|
|
172
|
+
configuration: {
|
|
173
|
+
description: 'Build configuration (Debug/Release)',
|
|
174
|
+
required: false,
|
|
175
|
+
default: 'Release',
|
|
176
|
+
},
|
|
177
|
+
destination: {
|
|
178
|
+
description: 'Build destination',
|
|
179
|
+
required: false,
|
|
180
|
+
default: 'generic/platform=iOS',
|
|
181
|
+
},
|
|
182
|
+
xcconfig_content: {
|
|
183
|
+
description: 'Custom xcconfig file content',
|
|
184
|
+
required: false,
|
|
185
|
+
},
|
|
186
|
+
output_dir: {
|
|
187
|
+
description: 'Build output directory',
|
|
188
|
+
required: false,
|
|
189
|
+
default: 'build',
|
|
190
|
+
},
|
|
191
|
+
is_clean_build: {
|
|
192
|
+
description: 'Perform clean before build',
|
|
193
|
+
required: false,
|
|
194
|
+
default: false,
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
registerStep('xcode-test', new XcodeTestStepExecutor(), {
|
|
199
|
+
name: 'xcode-test',
|
|
200
|
+
description: 'Run iOS/macOS tests with Xcode',
|
|
201
|
+
platform: 'ios',
|
|
202
|
+
inputs: {
|
|
203
|
+
project_path: {
|
|
204
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
205
|
+
required: true,
|
|
206
|
+
},
|
|
207
|
+
scheme: {
|
|
208
|
+
description: 'Xcode scheme name',
|
|
209
|
+
required: true,
|
|
210
|
+
},
|
|
211
|
+
destination: {
|
|
212
|
+
description: 'Test destination',
|
|
213
|
+
required: false,
|
|
214
|
+
default: 'platform=iOS Simulator,name=iPhone 14,OS=latest',
|
|
215
|
+
},
|
|
216
|
+
test_plan: {
|
|
217
|
+
description: 'Test plan name',
|
|
218
|
+
required: false,
|
|
219
|
+
},
|
|
220
|
+
is_code_coverage_enabled: {
|
|
221
|
+
description: 'Enable code coverage',
|
|
222
|
+
required: false,
|
|
223
|
+
default: false,
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
registerStep('ios-archive', new IosArchiveStepExecutor(), {
|
|
228
|
+
name: 'ios-archive',
|
|
229
|
+
description: 'Create IPA from .app bundle',
|
|
230
|
+
platform: 'ios',
|
|
231
|
+
inputs: {
|
|
232
|
+
app_path: {
|
|
233
|
+
description: 'Path to .app bundle',
|
|
234
|
+
required: true,
|
|
235
|
+
},
|
|
236
|
+
output_path: {
|
|
237
|
+
description: 'Output directory for IPA file',
|
|
238
|
+
required: false,
|
|
239
|
+
default: 'artifacts',
|
|
240
|
+
},
|
|
241
|
+
output_name: {
|
|
242
|
+
description: 'Output IPA name (without .ipa extension)',
|
|
243
|
+
required: false,
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
registerStep('xcode-archive', new XcodeArchiveStepExecutor(), {
|
|
248
|
+
name: 'xcode-archive',
|
|
249
|
+
description: 'Archive and export iOS app to IPA (compatible with bitrise xcode-archive@5)',
|
|
250
|
+
platform: 'ios',
|
|
251
|
+
inputs: {
|
|
252
|
+
project_path: {
|
|
253
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
254
|
+
required: true,
|
|
255
|
+
},
|
|
256
|
+
scheme: {
|
|
257
|
+
description: 'Xcode scheme name',
|
|
258
|
+
required: true,
|
|
259
|
+
},
|
|
260
|
+
configuration: {
|
|
261
|
+
description: 'Build configuration (e.g. Release)',
|
|
262
|
+
required: false,
|
|
263
|
+
default: 'Release',
|
|
264
|
+
},
|
|
265
|
+
distribution_method: {
|
|
266
|
+
description: 'Export method: development | app-store | ad-hoc | enterprise',
|
|
267
|
+
required: false,
|
|
268
|
+
default: 'development',
|
|
269
|
+
},
|
|
270
|
+
perform_clean_action: {
|
|
271
|
+
description: 'Execute clean action before archive: yes | no',
|
|
272
|
+
required: false,
|
|
273
|
+
default: 'no',
|
|
274
|
+
},
|
|
275
|
+
automatic_code_signing: {
|
|
276
|
+
description: 'Code signing method: off | api-key | apple-id',
|
|
277
|
+
required: false,
|
|
278
|
+
default: 'off',
|
|
279
|
+
},
|
|
280
|
+
compile_bitcode: {
|
|
281
|
+
description: 'Recompile from bitcode (non-App Store): yes | no',
|
|
282
|
+
required: false,
|
|
283
|
+
default: 'yes',
|
|
284
|
+
},
|
|
285
|
+
upload_bitcode: {
|
|
286
|
+
description: 'Include bitcode in App Store export: yes | no',
|
|
287
|
+
required: false,
|
|
288
|
+
default: 'yes',
|
|
289
|
+
},
|
|
290
|
+
xcconfig_content: {
|
|
291
|
+
description: 'xcconfig overrides applied during archive',
|
|
292
|
+
required: false,
|
|
293
|
+
default: 'COMPILER_INDEX_STORE_ENABLE = NO',
|
|
294
|
+
},
|
|
295
|
+
xcodebuild_options: {
|
|
296
|
+
description: 'Additional xcodebuild flags',
|
|
297
|
+
required: false,
|
|
298
|
+
},
|
|
299
|
+
export_options_plist_content: {
|
|
300
|
+
description: 'Custom ExportOptions.plist content (overrides generated plist)',
|
|
301
|
+
required: false,
|
|
302
|
+
},
|
|
303
|
+
output_dir: {
|
|
304
|
+
description: 'Output directory for IPA, dSYM, xcarchive',
|
|
305
|
+
required: false,
|
|
306
|
+
default: 'build/ipa',
|
|
307
|
+
},
|
|
308
|
+
artifact_name: {
|
|
309
|
+
description: 'Basename for generated files (defaults to scheme name)',
|
|
310
|
+
required: false,
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
registerStep('ota-install', new OtaInstallStepExecutor(), {
|
|
315
|
+
name: 'ota-install',
|
|
316
|
+
description: 'Generate OTA install manifest.plist and QR code for iOS distribution via itms-services://',
|
|
317
|
+
platform: 'ios',
|
|
318
|
+
inputs: {
|
|
319
|
+
ipa_url: {
|
|
320
|
+
description: 'HTTPS URL where the IPA file will be hosted',
|
|
321
|
+
required: true,
|
|
322
|
+
inputType: 'text',
|
|
323
|
+
},
|
|
324
|
+
manifest_url: {
|
|
325
|
+
description: 'HTTPS URL where manifest.plist will be hosted (defaults to dirname(ipa_url)/manifest.plist)',
|
|
326
|
+
required: false,
|
|
327
|
+
inputType: 'text',
|
|
328
|
+
},
|
|
329
|
+
bundle_id: {
|
|
330
|
+
description: 'iOS bundle identifier (e.g. com.example.app)',
|
|
331
|
+
required: true,
|
|
332
|
+
inputType: 'text',
|
|
333
|
+
},
|
|
334
|
+
bundle_version: {
|
|
335
|
+
description: 'App version string (e.g. 1.2.3)',
|
|
336
|
+
required: true,
|
|
337
|
+
inputType: 'text',
|
|
338
|
+
},
|
|
339
|
+
title: {
|
|
340
|
+
description: 'App display name shown during install prompt',
|
|
341
|
+
required: true,
|
|
342
|
+
inputType: 'text',
|
|
343
|
+
},
|
|
344
|
+
ipa_path: {
|
|
345
|
+
description: 'Local IPA path; defaults to $CIBUILD_IPA_PATH env var',
|
|
346
|
+
required: false,
|
|
347
|
+
inputType: 'path',
|
|
348
|
+
},
|
|
349
|
+
output_dir: {
|
|
350
|
+
description: 'Directory to write manifest.plist',
|
|
351
|
+
required: false,
|
|
352
|
+
default: '.ci/artifacts',
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
});
|
|
356
|
+
// App Store Connect deploy
|
|
357
|
+
registerStep('app-store-deploy', new AppStoreDeployStepExecutor(), {
|
|
358
|
+
name: 'app-store-deploy',
|
|
359
|
+
description: 'Upload IPA to App Store Connect / TestFlight via fastlane deliver',
|
|
360
|
+
platform: 'ios',
|
|
361
|
+
inputs: {
|
|
362
|
+
ipa_path: {
|
|
363
|
+
description: 'Path to IPA file; defaults to $CIBUILD_IPA_PATH',
|
|
364
|
+
required: false,
|
|
365
|
+
inputType: 'path',
|
|
366
|
+
},
|
|
367
|
+
api_key_id: {
|
|
368
|
+
description: 'App Store Connect API key ID; defaults to $APPLE_API_KEY_ID',
|
|
369
|
+
required: false,
|
|
370
|
+
inputType: 'text',
|
|
371
|
+
},
|
|
372
|
+
api_issuer: {
|
|
373
|
+
description: 'API key issuer UUID; defaults to $APPLE_API_ISSUER_ID',
|
|
374
|
+
required: false,
|
|
375
|
+
inputType: 'text',
|
|
376
|
+
},
|
|
377
|
+
api_key_path: {
|
|
378
|
+
description: 'Base64-encoded .p8 key content; defaults to $APPLE_API_KEY_PATH',
|
|
379
|
+
required: false,
|
|
380
|
+
inputType: 'text',
|
|
381
|
+
},
|
|
382
|
+
team_id: {
|
|
383
|
+
description: 'Apple Team ID; defaults to $APPLE_TEAM_ID',
|
|
384
|
+
required: false,
|
|
385
|
+
inputType: 'text',
|
|
386
|
+
},
|
|
387
|
+
app_id: {
|
|
388
|
+
description: 'Numeric App Store Connect Apple ID (optional)',
|
|
389
|
+
required: false,
|
|
390
|
+
inputType: 'text',
|
|
391
|
+
},
|
|
392
|
+
bundle_id: {
|
|
393
|
+
description: 'App bundle ID (optional); defaults to $APP_BUNDLE_ID',
|
|
394
|
+
required: false,
|
|
395
|
+
inputType: 'text',
|
|
396
|
+
},
|
|
397
|
+
platform: {
|
|
398
|
+
description: 'Platform (ios / macos / appletvos)',
|
|
399
|
+
required: false,
|
|
400
|
+
default: 'ios',
|
|
401
|
+
},
|
|
402
|
+
skip_metadata: {
|
|
403
|
+
description: 'Skip metadata upload (yes/no)',
|
|
404
|
+
required: false,
|
|
405
|
+
default: 'yes',
|
|
406
|
+
},
|
|
407
|
+
skip_screenshots: {
|
|
408
|
+
description: 'Skip screenshot upload (yes/no)',
|
|
409
|
+
required: false,
|
|
410
|
+
default: 'yes',
|
|
411
|
+
},
|
|
412
|
+
submit_for_review: {
|
|
413
|
+
description: 'Auto-submit for review after upload (yes/no)',
|
|
414
|
+
required: false,
|
|
415
|
+
default: 'no',
|
|
416
|
+
},
|
|
417
|
+
options: {
|
|
418
|
+
description: 'Extra fastlane deliver flags',
|
|
419
|
+
required: false,
|
|
420
|
+
inputType: 'text',
|
|
421
|
+
},
|
|
422
|
+
verbose_log: {
|
|
423
|
+
description: 'Enable verbose fastlane output (yes/no)',
|
|
424
|
+
required: false,
|
|
425
|
+
default: 'no',
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
});
|
|
429
|
+
// iOS dependency management
|
|
430
|
+
registerStep('cocoapods-install', new CocoapodsInstallStepExecutor(), {
|
|
431
|
+
name: 'cocoapods-install',
|
|
432
|
+
description: 'Run CocoaPods pod install or pod update',
|
|
433
|
+
platform: 'ios',
|
|
434
|
+
inputs: {
|
|
435
|
+
command: {
|
|
436
|
+
description: 'CocoaPods command (install or update)',
|
|
437
|
+
required: false,
|
|
438
|
+
default: 'install',
|
|
439
|
+
},
|
|
440
|
+
source_root_path: {
|
|
441
|
+
description: 'Directory containing the Podfile',
|
|
442
|
+
required: false,
|
|
443
|
+
},
|
|
444
|
+
podfile_path: {
|
|
445
|
+
description: 'Explicit path to Podfile',
|
|
446
|
+
required: false,
|
|
447
|
+
},
|
|
448
|
+
verbose: {
|
|
449
|
+
description: 'Enable verbose CocoaPods logging',
|
|
450
|
+
required: false,
|
|
451
|
+
default: false,
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
});
|
|
455
|
+
registerStep('carthage', new CarthageStepExecutor(), {
|
|
456
|
+
name: 'carthage',
|
|
457
|
+
description: 'Run Carthage bootstrap, update, or build',
|
|
458
|
+
platform: 'ios',
|
|
459
|
+
inputs: {
|
|
460
|
+
carthage_command: {
|
|
461
|
+
description: 'Carthage command (bootstrap, update, or build)',
|
|
462
|
+
required: false,
|
|
463
|
+
default: 'bootstrap',
|
|
464
|
+
},
|
|
465
|
+
carthage_options: {
|
|
466
|
+
description: 'Additional options for the carthage command',
|
|
467
|
+
required: false,
|
|
468
|
+
},
|
|
469
|
+
github_access_token: {
|
|
470
|
+
description: 'GitHub personal access token to avoid rate limits',
|
|
471
|
+
required: false,
|
|
472
|
+
},
|
|
473
|
+
verbose: {
|
|
474
|
+
description: 'Enable verbose Carthage logging',
|
|
475
|
+
required: false,
|
|
476
|
+
default: false,
|
|
477
|
+
},
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
// Xcode build-for-test, test-without-building, build-for-simulator
|
|
481
|
+
registerStep('xcode-build-for-test', new XcodeBuildForTestStepExecutor(), {
|
|
482
|
+
name: 'xcode-build-for-test',
|
|
483
|
+
description: 'Build app and tests without running them (build-for-testing)',
|
|
484
|
+
platform: 'ios',
|
|
485
|
+
inputs: {
|
|
486
|
+
project_path: {
|
|
487
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
488
|
+
required: true,
|
|
489
|
+
},
|
|
490
|
+
scheme: {
|
|
491
|
+
description: 'Xcode scheme name',
|
|
492
|
+
required: true,
|
|
493
|
+
},
|
|
494
|
+
configuration: {
|
|
495
|
+
description: 'Build configuration',
|
|
496
|
+
required: false,
|
|
497
|
+
default: 'Debug',
|
|
498
|
+
},
|
|
499
|
+
destination: {
|
|
500
|
+
description: 'Xcodebuild destination specifier',
|
|
501
|
+
required: false,
|
|
502
|
+
default: 'generic/platform=iOS Simulator',
|
|
503
|
+
},
|
|
504
|
+
test_plan: {
|
|
505
|
+
description: 'Test Plan to build for',
|
|
506
|
+
required: false,
|
|
507
|
+
},
|
|
508
|
+
xcconfig_content: {
|
|
509
|
+
description: 'Extra xcconfig settings',
|
|
510
|
+
required: false,
|
|
511
|
+
},
|
|
512
|
+
xcodebuild_options: {
|
|
513
|
+
description: 'Additional xcodebuild flags',
|
|
514
|
+
required: false,
|
|
515
|
+
},
|
|
516
|
+
output_dir: {
|
|
517
|
+
description: 'Directory for build artifacts',
|
|
518
|
+
required: false,
|
|
519
|
+
default: 'build',
|
|
520
|
+
},
|
|
521
|
+
},
|
|
522
|
+
});
|
|
523
|
+
registerStep('xcode-test-without-building', new XcodeTestWithoutBuildingStepExecutor(), {
|
|
524
|
+
name: 'xcode-test-without-building',
|
|
525
|
+
description: 'Run pre-compiled tests from an .xctestrun file',
|
|
526
|
+
platform: 'ios',
|
|
527
|
+
inputs: {
|
|
528
|
+
xctestrun: {
|
|
529
|
+
description: 'Path to .xctestrun file',
|
|
530
|
+
required: false,
|
|
531
|
+
default: '$CIBUILD_XCTESTRUN_FILE_PATH',
|
|
532
|
+
},
|
|
533
|
+
destination: {
|
|
534
|
+
description: 'Device destination specifier',
|
|
535
|
+
required: false,
|
|
536
|
+
default: 'platform=iOS Simulator,name=iPhone 15,OS=latest',
|
|
537
|
+
},
|
|
538
|
+
only_testing: {
|
|
539
|
+
description: 'Test identifiers to run (newline-separated)',
|
|
540
|
+
required: false,
|
|
541
|
+
},
|
|
542
|
+
skip_testing: {
|
|
543
|
+
description: 'Test identifiers to skip (newline-separated)',
|
|
544
|
+
required: false,
|
|
545
|
+
},
|
|
546
|
+
test_repetition_mode: {
|
|
547
|
+
description: 'Repeat mode: none | until_failure | retry_on_failure',
|
|
548
|
+
required: false,
|
|
549
|
+
default: 'none',
|
|
550
|
+
},
|
|
551
|
+
maximum_test_repetitions: {
|
|
552
|
+
description: 'Max test repetitions',
|
|
553
|
+
required: false,
|
|
554
|
+
default: '3',
|
|
555
|
+
},
|
|
556
|
+
xcodebuild_options: {
|
|
557
|
+
description: 'Additional xcodebuild flags',
|
|
558
|
+
required: false,
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
});
|
|
562
|
+
registerStep('xcode-build-for-simulator', new XcodeBuildForSimulatorStepExecutor(), {
|
|
563
|
+
name: 'xcode-build-for-simulator',
|
|
564
|
+
description: 'Build iOS app for simulator (.app bundle)',
|
|
565
|
+
platform: 'ios',
|
|
566
|
+
inputs: {
|
|
567
|
+
project_path: {
|
|
568
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
569
|
+
required: true,
|
|
570
|
+
},
|
|
571
|
+
scheme: {
|
|
572
|
+
description: 'Xcode scheme name',
|
|
573
|
+
required: true,
|
|
574
|
+
},
|
|
575
|
+
configuration: {
|
|
576
|
+
description: 'Build configuration',
|
|
577
|
+
required: false,
|
|
578
|
+
},
|
|
579
|
+
destination: {
|
|
580
|
+
description: 'Simulator destination specifier',
|
|
581
|
+
required: false,
|
|
582
|
+
default: 'generic/platform=iOS Simulator',
|
|
583
|
+
},
|
|
584
|
+
perform_clean_action: {
|
|
585
|
+
description: 'Run clean before build (yes/no)',
|
|
586
|
+
required: false,
|
|
587
|
+
default: 'no',
|
|
588
|
+
},
|
|
589
|
+
xcconfig_content: {
|
|
590
|
+
description: 'Extra xcconfig settings (default disables code signing)',
|
|
591
|
+
required: false,
|
|
592
|
+
default: 'CODE_SIGNING_ALLOWED=NO',
|
|
593
|
+
},
|
|
594
|
+
xcodebuild_options: {
|
|
595
|
+
description: 'Additional xcodebuild flags',
|
|
596
|
+
required: false,
|
|
597
|
+
},
|
|
598
|
+
output_dir: {
|
|
599
|
+
description: 'Directory for build artifacts',
|
|
600
|
+
required: false,
|
|
601
|
+
default: 'build',
|
|
602
|
+
},
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
// iOS version management
|
|
606
|
+
registerStep('set-xcode-build-number', new SetXcodeBuildNumberStepExecutor(), {
|
|
607
|
+
name: 'set-xcode-build-number',
|
|
608
|
+
description: 'Set Xcode project build number and marketing version',
|
|
609
|
+
platform: 'ios',
|
|
610
|
+
inputs: {
|
|
611
|
+
project_path: {
|
|
612
|
+
description: 'Path to .xcodeproj or .xcworkspace',
|
|
613
|
+
required: false,
|
|
614
|
+
},
|
|
615
|
+
scheme: {
|
|
616
|
+
description: 'Xcode scheme name',
|
|
617
|
+
required: false,
|
|
618
|
+
},
|
|
619
|
+
target: {
|
|
620
|
+
description: 'Xcode target name',
|
|
621
|
+
required: false,
|
|
622
|
+
},
|
|
623
|
+
build_version: {
|
|
624
|
+
description: 'Build number (CFBundleVersion)',
|
|
625
|
+
required: false,
|
|
626
|
+
default: '$CIBUILD_BUILD_NUMBER',
|
|
627
|
+
},
|
|
628
|
+
build_version_offset: {
|
|
629
|
+
description: 'Offset added to build_version',
|
|
630
|
+
required: false,
|
|
631
|
+
},
|
|
632
|
+
build_short_version_string: {
|
|
633
|
+
description: 'Marketing version (CFBundleShortVersionString)',
|
|
634
|
+
required: false,
|
|
635
|
+
},
|
|
636
|
+
},
|
|
637
|
+
});
|
|
638
|
+
registerStep('set-ios-version', new SetIosVersionStepExecutor(), {
|
|
639
|
+
name: 'set-ios-version',
|
|
640
|
+
description: 'Set Info.plist version via PlistBuddy',
|
|
641
|
+
platform: 'ios',
|
|
642
|
+
inputs: {
|
|
643
|
+
info_plist_file: {
|
|
644
|
+
description: 'Path to Info.plist file',
|
|
645
|
+
required: true,
|
|
646
|
+
},
|
|
647
|
+
bundle_version: {
|
|
648
|
+
description: 'CFBundleVersion to set',
|
|
649
|
+
required: false,
|
|
650
|
+
},
|
|
651
|
+
bundle_version_short: {
|
|
652
|
+
description: 'CFBundleShortVersionString to set',
|
|
653
|
+
required: false,
|
|
654
|
+
},
|
|
655
|
+
},
|
|
656
|
+
});
|
|
657
|
+
// iOS code signing
|
|
658
|
+
registerStep('certificate-installer', new CertificateInstallerStepExecutor(), {
|
|
659
|
+
name: 'certificate-installer',
|
|
660
|
+
description: 'Install Apple code signing certificates and provisioning profiles',
|
|
661
|
+
platform: 'ios',
|
|
662
|
+
inputs: {
|
|
663
|
+
certificate_url: {
|
|
664
|
+
description: 'URL(s) to .p12 certificate files (pipe-separated)',
|
|
665
|
+
required: false,
|
|
666
|
+
default: '$CIBUILD_CERTIFICATE_URL',
|
|
667
|
+
},
|
|
668
|
+
certificate_passphrase: {
|
|
669
|
+
description: 'Certificate passphrase(s), pipe-separated',
|
|
670
|
+
required: false,
|
|
671
|
+
},
|
|
672
|
+
provisioning_profile_url: {
|
|
673
|
+
description: 'URL(s) to provisioning profiles (pipe-separated)',
|
|
674
|
+
required: false,
|
|
675
|
+
},
|
|
676
|
+
keychain_path: {
|
|
677
|
+
description: 'Path to the keychain',
|
|
678
|
+
required: false,
|
|
679
|
+
default: '$HOME/Library/Keychains/login.keychain',
|
|
680
|
+
},
|
|
681
|
+
keychain_password: {
|
|
682
|
+
description: 'Keychain password',
|
|
683
|
+
required: false,
|
|
684
|
+
},
|
|
685
|
+
verbose: {
|
|
686
|
+
description: 'Enable verbose logging',
|
|
687
|
+
required: false,
|
|
688
|
+
default: 'false',
|
|
689
|
+
},
|
|
690
|
+
},
|
|
691
|
+
});
|
|
692
|
+
// Fastlane
|
|
693
|
+
registerStep('fastlane', new FastlaneStepExecutor(), {
|
|
694
|
+
name: 'fastlane',
|
|
695
|
+
description: 'Run a fastlane lane',
|
|
696
|
+
platform: 'all',
|
|
697
|
+
inputs: {
|
|
698
|
+
lane: {
|
|
699
|
+
description: 'Fastlane lane to run',
|
|
700
|
+
required: true,
|
|
701
|
+
},
|
|
702
|
+
work_dir: {
|
|
703
|
+
description: 'Working directory (parent of fastlane directory)',
|
|
704
|
+
required: false,
|
|
705
|
+
},
|
|
706
|
+
update_fastlane: {
|
|
707
|
+
description: 'Update fastlane gem before run',
|
|
708
|
+
required: false,
|
|
709
|
+
default: 'true',
|
|
710
|
+
},
|
|
711
|
+
verbose_log: {
|
|
712
|
+
description: 'Enable verbose logging',
|
|
713
|
+
required: false,
|
|
714
|
+
default: 'no',
|
|
715
|
+
},
|
|
716
|
+
enable_cache: {
|
|
717
|
+
description: 'Collect cache files',
|
|
718
|
+
required: false,
|
|
719
|
+
default: 'yes',
|
|
720
|
+
},
|
|
721
|
+
},
|
|
722
|
+
});
|
|
723
|
+
// Linting — iOS
|
|
724
|
+
registerStep('swiftlint', new SwiftlintStepExecutor(), {
|
|
725
|
+
name: 'swiftlint',
|
|
726
|
+
description: 'Run SwiftLint on Swift code',
|
|
727
|
+
platform: 'ios',
|
|
728
|
+
inputs: {
|
|
729
|
+
linting_path: {
|
|
730
|
+
description: 'Path where SwiftLint should lint',
|
|
731
|
+
required: false,
|
|
732
|
+
default: '.',
|
|
733
|
+
},
|
|
734
|
+
lint_range: {
|
|
735
|
+
description: 'Range: all | changed',
|
|
736
|
+
required: false,
|
|
737
|
+
default: 'all',
|
|
738
|
+
},
|
|
739
|
+
lint_config_file: {
|
|
740
|
+
description: 'Path to .swiftlint.yml config',
|
|
741
|
+
required: false,
|
|
742
|
+
},
|
|
743
|
+
reporter: {
|
|
744
|
+
description: 'Reporter style',
|
|
745
|
+
required: false,
|
|
746
|
+
default: 'xcode',
|
|
747
|
+
},
|
|
748
|
+
strict: {
|
|
749
|
+
description: 'Strict mode (yes/no)',
|
|
750
|
+
required: false,
|
|
751
|
+
default: 'no',
|
|
752
|
+
},
|
|
753
|
+
quiet: {
|
|
754
|
+
description: 'Quiet mode (yes/no)',
|
|
755
|
+
required: false,
|
|
756
|
+
default: 'no',
|
|
757
|
+
},
|
|
758
|
+
},
|
|
759
|
+
});
|
|
760
|
+
// Export xcarchive
|
|
761
|
+
registerStep('export-xcarchive', new ExportXcarchiveStepExecutor(), {
|
|
762
|
+
name: 'export-xcarchive',
|
|
763
|
+
description: 'Export IPA from existing .xcarchive',
|
|
764
|
+
platform: 'ios',
|
|
765
|
+
inputs: {
|
|
766
|
+
archive_path: {
|
|
767
|
+
description: 'Path to .xcarchive file',
|
|
768
|
+
required: true,
|
|
769
|
+
default: '$CIBUILD_XCARCHIVE_PATH',
|
|
770
|
+
},
|
|
771
|
+
product: {
|
|
772
|
+
description: 'Product to export: app | app-clip',
|
|
773
|
+
required: false,
|
|
774
|
+
default: 'app',
|
|
775
|
+
},
|
|
776
|
+
distribution_method: {
|
|
777
|
+
description: 'Export method: development | app-store | ad-hoc | enterprise',
|
|
778
|
+
required: false,
|
|
779
|
+
default: 'development',
|
|
780
|
+
},
|
|
781
|
+
compile_bitcode: {
|
|
782
|
+
description: 'Recompile from bitcode (yes/no)',
|
|
783
|
+
required: false,
|
|
784
|
+
default: 'yes',
|
|
785
|
+
},
|
|
786
|
+
upload_bitcode: {
|
|
787
|
+
description: 'Include bitcode (yes/no)',
|
|
788
|
+
required: false,
|
|
789
|
+
default: 'yes',
|
|
790
|
+
},
|
|
791
|
+
export_options_plist_content: {
|
|
792
|
+
description: 'Custom ExportOptions.plist content',
|
|
793
|
+
required: false,
|
|
794
|
+
},
|
|
795
|
+
verbose_log: {
|
|
796
|
+
description: 'Enable verbose logging (yes/no)',
|
|
797
|
+
required: false,
|
|
798
|
+
default: 'no',
|
|
799
|
+
},
|
|
800
|
+
},
|
|
801
|
+
});
|
|
802
|
+
// Android steps
|
|
803
|
+
registerStep('set-java-version', new SetJavaVersionStepExecutor(), {
|
|
804
|
+
name: 'set-java-version',
|
|
805
|
+
description: 'Set Java version for Android builds',
|
|
806
|
+
platform: 'android',
|
|
807
|
+
inputs: {
|
|
808
|
+
java_version: {
|
|
809
|
+
description: 'Java version to use',
|
|
810
|
+
required: false,
|
|
811
|
+
default: '17',
|
|
812
|
+
},
|
|
813
|
+
},
|
|
814
|
+
});
|
|
815
|
+
registerStep('gradle-build', new GradleBuildStepExecutor(), {
|
|
816
|
+
name: 'gradle-build',
|
|
817
|
+
description: 'Build Android project with Gradle',
|
|
818
|
+
platform: 'android',
|
|
819
|
+
inputs: {
|
|
820
|
+
project_location: {
|
|
821
|
+
description: 'Android project location',
|
|
822
|
+
required: false,
|
|
823
|
+
default: '.',
|
|
824
|
+
},
|
|
825
|
+
build_type: {
|
|
826
|
+
description: 'Build type (Debug/Release)',
|
|
827
|
+
required: false,
|
|
828
|
+
default: 'Release',
|
|
829
|
+
},
|
|
830
|
+
gradle_task: {
|
|
831
|
+
description: 'Gradle task to run',
|
|
832
|
+
required: false,
|
|
833
|
+
default: 'assembleRelease',
|
|
834
|
+
},
|
|
835
|
+
gradle_options: {
|
|
836
|
+
description: 'Additional Gradle options',
|
|
837
|
+
required: false,
|
|
838
|
+
},
|
|
839
|
+
},
|
|
840
|
+
});
|
|
841
|
+
// Register android-build as alias for gradle-build (Bitrise compatibility)
|
|
842
|
+
registerStep('android-build', new GradleBuildStepExecutor(), {
|
|
843
|
+
name: 'android-build',
|
|
844
|
+
description: 'Build Android project with Gradle (Bitrise android-build step)',
|
|
845
|
+
platform: 'android',
|
|
846
|
+
inputs: {
|
|
847
|
+
project_location: {
|
|
848
|
+
description: 'Android project location',
|
|
849
|
+
required: false,
|
|
850
|
+
default: '.',
|
|
851
|
+
},
|
|
852
|
+
variant: {
|
|
853
|
+
description: 'Build variant (debug, release, etc.)',
|
|
854
|
+
required: false,
|
|
855
|
+
default: 'release',
|
|
856
|
+
},
|
|
857
|
+
module: {
|
|
858
|
+
description: 'Module to build',
|
|
859
|
+
required: false,
|
|
860
|
+
default: 'app',
|
|
861
|
+
},
|
|
862
|
+
build_type: {
|
|
863
|
+
description: 'Build type (apk or aab)',
|
|
864
|
+
required: false,
|
|
865
|
+
default: 'apk',
|
|
866
|
+
},
|
|
867
|
+
gradle_task: {
|
|
868
|
+
description: 'Gradle task to run (overrides variant/build_type)',
|
|
869
|
+
required: false,
|
|
870
|
+
},
|
|
871
|
+
gradle_options: {
|
|
872
|
+
description: 'Additional Gradle options',
|
|
873
|
+
required: false,
|
|
874
|
+
},
|
|
875
|
+
},
|
|
876
|
+
});
|
|
877
|
+
registerStep('android-lint', new AndroidLintStepExecutor(), {
|
|
878
|
+
name: 'android-lint',
|
|
879
|
+
description: 'Run Android lint checks',
|
|
880
|
+
platform: 'android',
|
|
881
|
+
inputs: {
|
|
882
|
+
project_location: {
|
|
883
|
+
description: 'Android project location',
|
|
884
|
+
required: false,
|
|
885
|
+
default: '.',
|
|
886
|
+
},
|
|
887
|
+
module: {
|
|
888
|
+
description: 'Module to lint',
|
|
889
|
+
required: false,
|
|
890
|
+
default: 'app',
|
|
891
|
+
},
|
|
892
|
+
variant: {
|
|
893
|
+
description: 'Build variant',
|
|
894
|
+
required: false,
|
|
895
|
+
default: 'debug',
|
|
896
|
+
},
|
|
897
|
+
},
|
|
898
|
+
});
|
|
899
|
+
registerStep('android-unit-test', new AndroidUnitTestStepExecutor(), {
|
|
900
|
+
name: 'android-unit-test',
|
|
901
|
+
description: 'Run Android unit tests',
|
|
902
|
+
platform: 'android',
|
|
903
|
+
inputs: {
|
|
904
|
+
project_location: {
|
|
905
|
+
description: 'Android project location',
|
|
906
|
+
required: false,
|
|
907
|
+
default: '.',
|
|
908
|
+
},
|
|
909
|
+
module: {
|
|
910
|
+
description: 'Module to test',
|
|
911
|
+
required: false,
|
|
912
|
+
default: 'app',
|
|
913
|
+
},
|
|
914
|
+
variant: {
|
|
915
|
+
description: 'Build variant',
|
|
916
|
+
required: false,
|
|
917
|
+
default: 'debug',
|
|
918
|
+
},
|
|
919
|
+
test_filter: {
|
|
920
|
+
description: 'Test filter pattern',
|
|
921
|
+
required: false,
|
|
922
|
+
},
|
|
923
|
+
},
|
|
924
|
+
});
|
|
925
|
+
// Linting — Android
|
|
926
|
+
registerStep('detekt', new DetektStepExecutor(), {
|
|
927
|
+
name: 'detekt',
|
|
928
|
+
description: 'Run detekt Kotlin static analysis via Gradle',
|
|
929
|
+
platform: 'android',
|
|
930
|
+
inputs: {
|
|
931
|
+
project_location: {
|
|
932
|
+
description: 'Root directory of the Android project',
|
|
933
|
+
required: false,
|
|
934
|
+
default: '.',
|
|
935
|
+
},
|
|
936
|
+
module: {
|
|
937
|
+
description: 'Module to run detekt on',
|
|
938
|
+
required: false,
|
|
939
|
+
},
|
|
940
|
+
report_path_pattern: {
|
|
941
|
+
description: 'Glob pattern to find report files',
|
|
942
|
+
required: false,
|
|
943
|
+
default: '*/build/reports/detekt/detekt*.html',
|
|
944
|
+
},
|
|
945
|
+
arguments: {
|
|
946
|
+
description: 'Additional Gradle arguments',
|
|
947
|
+
required: false,
|
|
948
|
+
},
|
|
949
|
+
},
|
|
950
|
+
});
|
|
951
|
+
// Android signing
|
|
952
|
+
registerStep('sign-apk', new SignApkStepExecutor(), {
|
|
953
|
+
name: 'sign-apk',
|
|
954
|
+
description: 'Sign APK/AAB with keystore',
|
|
955
|
+
platform: 'android',
|
|
956
|
+
inputs: {
|
|
957
|
+
android_app: {
|
|
958
|
+
description: 'Path(s) to APK or AAB files (pipe-separated)',
|
|
959
|
+
required: false,
|
|
960
|
+
default: '$CIBUILD_APK_PATH',
|
|
961
|
+
},
|
|
962
|
+
keystore_url: {
|
|
963
|
+
description: 'Keystore file URL or local path',
|
|
964
|
+
required: true,
|
|
965
|
+
},
|
|
966
|
+
keystore_password: {
|
|
967
|
+
description: 'Keystore password',
|
|
968
|
+
required: true,
|
|
969
|
+
},
|
|
970
|
+
keystore_alias: {
|
|
971
|
+
description: 'Key alias inside the keystore',
|
|
972
|
+
required: true,
|
|
973
|
+
},
|
|
974
|
+
private_key_password: {
|
|
975
|
+
description: 'Private key password',
|
|
976
|
+
required: false,
|
|
977
|
+
},
|
|
978
|
+
signer_tool: {
|
|
979
|
+
description: 'Signing tool: automatic | apksigner | jarsigner',
|
|
980
|
+
required: false,
|
|
981
|
+
default: 'automatic',
|
|
982
|
+
},
|
|
983
|
+
output_name: {
|
|
984
|
+
description: 'Custom output artifact name',
|
|
985
|
+
required: false,
|
|
986
|
+
},
|
|
987
|
+
},
|
|
988
|
+
});
|
|
989
|
+
// Android UI testing build
|
|
990
|
+
registerStep('android-build-for-ui-testing', new AndroidBuildForUITestingStepExecutor(), {
|
|
991
|
+
name: 'android-build-for-ui-testing',
|
|
992
|
+
description: 'Build app and test APKs for instrumented testing',
|
|
993
|
+
platform: 'android',
|
|
994
|
+
inputs: {
|
|
995
|
+
project_location: {
|
|
996
|
+
description: 'Root directory of the Android project',
|
|
997
|
+
required: false,
|
|
998
|
+
default: '.',
|
|
999
|
+
},
|
|
1000
|
+
module: {
|
|
1001
|
+
description: 'Module to build',
|
|
1002
|
+
required: false,
|
|
1003
|
+
default: 'app',
|
|
1004
|
+
},
|
|
1005
|
+
variant: {
|
|
1006
|
+
description: 'Build variant',
|
|
1007
|
+
required: false,
|
|
1008
|
+
default: 'Debug',
|
|
1009
|
+
},
|
|
1010
|
+
arguments: {
|
|
1011
|
+
description: 'Additional Gradle arguments',
|
|
1012
|
+
required: false,
|
|
1013
|
+
},
|
|
1014
|
+
},
|
|
1015
|
+
});
|
|
1016
|
+
// Flutter steps
|
|
1017
|
+
registerStep('flutter-installer', new FlutterInstallerStepExecutor(), {
|
|
1018
|
+
name: 'flutter-installer',
|
|
1019
|
+
description: 'Install or activate Flutter SDK',
|
|
1020
|
+
platform: 'all',
|
|
1021
|
+
inputs: {
|
|
1022
|
+
version: {
|
|
1023
|
+
description: 'Flutter version or channel (stable, beta, master)',
|
|
1024
|
+
required: false,
|
|
1025
|
+
default: 'stable',
|
|
1026
|
+
},
|
|
1027
|
+
installation_path: {
|
|
1028
|
+
description: 'Path to install Flutter SDK',
|
|
1029
|
+
required: false,
|
|
1030
|
+
default: '$HOME/flutter',
|
|
1031
|
+
},
|
|
1032
|
+
},
|
|
1033
|
+
});
|
|
1034
|
+
registerStep('flutter-build', new FlutterBuildStepExecutor(), {
|
|
1035
|
+
name: 'flutter-build',
|
|
1036
|
+
description: 'Build Flutter project for iOS/Android',
|
|
1037
|
+
platform: 'all',
|
|
1038
|
+
inputs: {
|
|
1039
|
+
project_location: {
|
|
1040
|
+
description: 'Root directory of the Flutter project',
|
|
1041
|
+
required: false,
|
|
1042
|
+
default: '.',
|
|
1043
|
+
},
|
|
1044
|
+
platform: {
|
|
1045
|
+
description: 'Platform to build: ios | android | both',
|
|
1046
|
+
required: false,
|
|
1047
|
+
default: 'both',
|
|
1048
|
+
},
|
|
1049
|
+
additional_build_params: {
|
|
1050
|
+
description: 'Additional flutter build parameters',
|
|
1051
|
+
required: false,
|
|
1052
|
+
},
|
|
1053
|
+
ios_output_type: {
|
|
1054
|
+
description: 'iOS output: app | archive',
|
|
1055
|
+
required: false,
|
|
1056
|
+
default: 'app',
|
|
1057
|
+
},
|
|
1058
|
+
android_output_type: {
|
|
1059
|
+
description: 'Android output: apk | appbundle',
|
|
1060
|
+
required: false,
|
|
1061
|
+
default: 'apk',
|
|
1062
|
+
},
|
|
1063
|
+
ios_additional_params: {
|
|
1064
|
+
description: 'Additional iOS build params',
|
|
1065
|
+
required: false,
|
|
1066
|
+
default: '--release',
|
|
1067
|
+
},
|
|
1068
|
+
android_additional_params: {
|
|
1069
|
+
description: 'Additional Android build params',
|
|
1070
|
+
required: false,
|
|
1071
|
+
default: '--release',
|
|
1072
|
+
},
|
|
1073
|
+
is_debug_mode: {
|
|
1074
|
+
description: 'Enable debug mode',
|
|
1075
|
+
required: false,
|
|
1076
|
+
default: 'false',
|
|
1077
|
+
},
|
|
1078
|
+
},
|
|
1079
|
+
});
|
|
1080
|
+
registerStep('flutter-test', new FlutterTestStepExecutor(), {
|
|
1081
|
+
name: 'flutter-test',
|
|
1082
|
+
description: 'Run Flutter tests',
|
|
1083
|
+
platform: 'all',
|
|
1084
|
+
inputs: {
|
|
1085
|
+
project_location: {
|
|
1086
|
+
description: 'Root directory of the Flutter project',
|
|
1087
|
+
required: false,
|
|
1088
|
+
default: '.',
|
|
1089
|
+
},
|
|
1090
|
+
additional_params: {
|
|
1091
|
+
description: 'Additional flutter test parameters',
|
|
1092
|
+
required: false,
|
|
1093
|
+
},
|
|
1094
|
+
generate_code_coverage_files: {
|
|
1095
|
+
description: 'Enable coverage (true/false)',
|
|
1096
|
+
required: false,
|
|
1097
|
+
default: 'false',
|
|
1098
|
+
},
|
|
1099
|
+
},
|
|
1100
|
+
});
|
|
1101
|
+
// Release steps
|
|
1102
|
+
registerStep('generate-changelog', new GenerateChangelogStepExecutor(), {
|
|
1103
|
+
name: 'generate-changelog',
|
|
1104
|
+
description: 'Generate changelog from git history',
|
|
1105
|
+
platform: 'all',
|
|
1106
|
+
inputs: {
|
|
1107
|
+
changelog_path: {
|
|
1108
|
+
description: 'Path to write the changelog',
|
|
1109
|
+
required: false,
|
|
1110
|
+
default: './CHANGELOG.md',
|
|
1111
|
+
},
|
|
1112
|
+
working_dir: {
|
|
1113
|
+
description: 'Working directory',
|
|
1114
|
+
required: false,
|
|
1115
|
+
default: '.',
|
|
1116
|
+
},
|
|
1117
|
+
},
|
|
1118
|
+
});
|
|
1119
|
+
registerStep('github-release', new GithubReleaseStepExecutor(), {
|
|
1120
|
+
name: 'github-release',
|
|
1121
|
+
description: 'Create GitHub release with artifact attachments',
|
|
1122
|
+
platform: 'all',
|
|
1123
|
+
inputs: {
|
|
1124
|
+
tag: {
|
|
1125
|
+
description: 'Release tag name',
|
|
1126
|
+
required: true,
|
|
1127
|
+
},
|
|
1128
|
+
name: {
|
|
1129
|
+
description: 'Release title',
|
|
1130
|
+
required: false,
|
|
1131
|
+
},
|
|
1132
|
+
body: {
|
|
1133
|
+
description: 'Release notes',
|
|
1134
|
+
required: false,
|
|
1135
|
+
},
|
|
1136
|
+
changelog_path: {
|
|
1137
|
+
description: 'Changelog file for notes',
|
|
1138
|
+
required: false,
|
|
1139
|
+
},
|
|
1140
|
+
draft: {
|
|
1141
|
+
description: 'Draft release (true/false)',
|
|
1142
|
+
required: false,
|
|
1143
|
+
default: 'false',
|
|
1144
|
+
},
|
|
1145
|
+
pre_release: {
|
|
1146
|
+
description: 'Pre-release (true/false)',
|
|
1147
|
+
required: false,
|
|
1148
|
+
default: 'false',
|
|
1149
|
+
},
|
|
1150
|
+
files_to_upload: {
|
|
1151
|
+
description: 'Files to attach (newline-separated)',
|
|
1152
|
+
required: false,
|
|
1153
|
+
},
|
|
1154
|
+
api_token: {
|
|
1155
|
+
description: 'GitHub API token',
|
|
1156
|
+
required: false,
|
|
1157
|
+
default: '$GITHUB_TOKEN',
|
|
1158
|
+
},
|
|
1159
|
+
},
|
|
1160
|
+
});
|
|
1161
|
+
// Bitrise compatibility steps
|
|
1162
|
+
// Map all Bitrise version numbers (@1, @2, @3, @4) to single CI Build implementation
|
|
1163
|
+
const bitriseSteps = [
|
|
1164
|
+
{
|
|
1165
|
+
name: 'activate-ssh-key',
|
|
1166
|
+
executor: new BitriseSSHStepExecutor(),
|
|
1167
|
+
metadata: {
|
|
1168
|
+
name: 'activate-ssh-key',
|
|
1169
|
+
description: 'Bitrise: Activate SSH key for git operations',
|
|
1170
|
+
platform: 'all',
|
|
1171
|
+
inputs: {
|
|
1172
|
+
ssh_rsa_private_key: {
|
|
1173
|
+
description: 'SSH private key (read from SSH_RSA_PRIVATE_KEY env)',
|
|
1174
|
+
required: false,
|
|
1175
|
+
},
|
|
1176
|
+
ssh_key_save_path: {
|
|
1177
|
+
description: 'Path to save SSH key',
|
|
1178
|
+
required: false,
|
|
1179
|
+
default: '~/.ssh/id_rsa',
|
|
1180
|
+
},
|
|
1181
|
+
},
|
|
1182
|
+
},
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
name: 'install-missing-android-tools',
|
|
1186
|
+
executor: new BitriseAndroidToolsStepExecutor(),
|
|
1187
|
+
metadata: {
|
|
1188
|
+
name: 'install-missing-android-tools',
|
|
1189
|
+
description: 'Bitrise: Install missing Android SDK tools',
|
|
1190
|
+
platform: 'android',
|
|
1191
|
+
inputs: {
|
|
1192
|
+
gradlew_path: {
|
|
1193
|
+
description: 'Path to gradlew file',
|
|
1194
|
+
required: false,
|
|
1195
|
+
default: './gradlew',
|
|
1196
|
+
},
|
|
1197
|
+
},
|
|
1198
|
+
},
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
name: 'change-android-versioncode-and-versionname',
|
|
1202
|
+
executor: new ChangeAndroidVersionStepExecutor(),
|
|
1203
|
+
metadata: {
|
|
1204
|
+
name: 'change-android-versioncode-and-versionname',
|
|
1205
|
+
description: 'Update versionCode and versionName in build.gradle before building',
|
|
1206
|
+
platform: 'android',
|
|
1207
|
+
inputs: {
|
|
1208
|
+
build_gradle_path: {
|
|
1209
|
+
description: 'Path to build.gradle file containing versionCode/versionName',
|
|
1210
|
+
required: true,
|
|
1211
|
+
default: '$PROJECT_LOCATION/app/build.gradle',
|
|
1212
|
+
inputType: 'path',
|
|
1213
|
+
},
|
|
1214
|
+
new_version_name: {
|
|
1215
|
+
description: 'New versionName to set (e.g. "1.2.3"). Leave empty to keep existing.',
|
|
1216
|
+
required: false,
|
|
1217
|
+
},
|
|
1218
|
+
new_version_code: {
|
|
1219
|
+
description: 'New versionCode integer. Leave empty to keep existing.',
|
|
1220
|
+
required: false,
|
|
1221
|
+
},
|
|
1222
|
+
version_code_offset: {
|
|
1223
|
+
description: 'Integer offset added to new_version_code (or current code if new_version_code is empty)',
|
|
1224
|
+
required: false,
|
|
1225
|
+
},
|
|
1226
|
+
},
|
|
1227
|
+
},
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
name: 'slack',
|
|
1231
|
+
executor: new BitriseSlackStepExecutor(),
|
|
1232
|
+
metadata: {
|
|
1233
|
+
name: 'slack',
|
|
1234
|
+
description: 'Bitrise: Send Slack notification',
|
|
1235
|
+
platform: 'all',
|
|
1236
|
+
inputs: {
|
|
1237
|
+
webhook_url: {
|
|
1238
|
+
description: 'Slack webhook URL',
|
|
1239
|
+
required: true,
|
|
1240
|
+
},
|
|
1241
|
+
channel: {
|
|
1242
|
+
description: 'Slack channel',
|
|
1243
|
+
required: false,
|
|
1244
|
+
},
|
|
1245
|
+
text: {
|
|
1246
|
+
description: 'Message text',
|
|
1247
|
+
required: false,
|
|
1248
|
+
},
|
|
1249
|
+
message: {
|
|
1250
|
+
description: 'Message (alternative to text)',
|
|
1251
|
+
required: false,
|
|
1252
|
+
},
|
|
1253
|
+
color: {
|
|
1254
|
+
description: 'Message color',
|
|
1255
|
+
required: false,
|
|
1256
|
+
},
|
|
1257
|
+
},
|
|
1258
|
+
},
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
name: 'apk-info',
|
|
1262
|
+
executor: new BitriseApkInfoStepExecutor(),
|
|
1263
|
+
metadata: {
|
|
1264
|
+
name: 'apk-info',
|
|
1265
|
+
description: 'Bitrise: Extract APK information',
|
|
1266
|
+
platform: 'android',
|
|
1267
|
+
inputs: {
|
|
1268
|
+
apk_path: {
|
|
1269
|
+
description: 'Path to APK file (auto-detected if not provided)',
|
|
1270
|
+
required: false,
|
|
1271
|
+
},
|
|
1272
|
+
},
|
|
1273
|
+
},
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
name: 'google-play-deploy',
|
|
1277
|
+
executor: new GooglePlayDeployStepExecutor(),
|
|
1278
|
+
metadata: {
|
|
1279
|
+
name: 'google-play-deploy',
|
|
1280
|
+
description: 'Upload APK/AAB to Google Play via fastlane supply',
|
|
1281
|
+
platform: 'android',
|
|
1282
|
+
inputs: {
|
|
1283
|
+
service_account_json_var: {
|
|
1284
|
+
description: 'Secret env var name containing the service account JSON content',
|
|
1285
|
+
required: false,
|
|
1286
|
+
default: 'GOOGLE_PLAY_SERVICE_ACCOUNT_JSON',
|
|
1287
|
+
},
|
|
1288
|
+
service_account_json_key_path: {
|
|
1289
|
+
description: 'Path to service account JSON key file (alternative to service_account_json_var)',
|
|
1290
|
+
required: false,
|
|
1291
|
+
},
|
|
1292
|
+
package_name: {
|
|
1293
|
+
description: 'Android app package name',
|
|
1294
|
+
required: true,
|
|
1295
|
+
},
|
|
1296
|
+
app_path: {
|
|
1297
|
+
description: 'Path to APK or AAB file',
|
|
1298
|
+
required: false,
|
|
1299
|
+
default: '$CIBUILD_APK_PATH\n$CIBUILD_AAB_PATH',
|
|
1300
|
+
},
|
|
1301
|
+
track: {
|
|
1302
|
+
description: 'Deployment track (internal/alpha/beta/production)',
|
|
1303
|
+
required: false,
|
|
1304
|
+
default: 'alpha',
|
|
1305
|
+
},
|
|
1306
|
+
user_fraction: {
|
|
1307
|
+
description: 'Staged rollout fraction (0.0-1.0)',
|
|
1308
|
+
required: false,
|
|
1309
|
+
},
|
|
1310
|
+
status: {
|
|
1311
|
+
description: 'Release status',
|
|
1312
|
+
required: false,
|
|
1313
|
+
},
|
|
1314
|
+
update_priority: {
|
|
1315
|
+
description: 'In-app update priority (0-5)',
|
|
1316
|
+
required: false,
|
|
1317
|
+
default: '0',
|
|
1318
|
+
},
|
|
1319
|
+
whatsnews_dir: {
|
|
1320
|
+
description: "Directory of localized release notes (what's new files)",
|
|
1321
|
+
required: false,
|
|
1322
|
+
},
|
|
1323
|
+
mapping_file: {
|
|
1324
|
+
description: 'ProGuard mapping file path',
|
|
1325
|
+
required: false,
|
|
1326
|
+
default: '$CIBUILD_MAPPING_PATH',
|
|
1327
|
+
},
|
|
1328
|
+
retry_without_sending_to_review: {
|
|
1329
|
+
description: 'Retry without sending to review on failure',
|
|
1330
|
+
required: false,
|
|
1331
|
+
default: 'false',
|
|
1332
|
+
},
|
|
1333
|
+
ack_bundle_installation_warning: {
|
|
1334
|
+
description: 'Acknowledge bundle installation warning',
|
|
1335
|
+
required: false,
|
|
1336
|
+
default: 'false',
|
|
1337
|
+
},
|
|
1338
|
+
dry_run: {
|
|
1339
|
+
description: 'Validate without creating a release',
|
|
1340
|
+
required: false,
|
|
1341
|
+
default: 'false',
|
|
1342
|
+
},
|
|
1343
|
+
verbose_log: {
|
|
1344
|
+
description: 'Enable verbose logging',
|
|
1345
|
+
required: false,
|
|
1346
|
+
default: 'false',
|
|
1347
|
+
},
|
|
1348
|
+
},
|
|
1349
|
+
},
|
|
1350
|
+
},
|
|
1351
|
+
];
|
|
1352
|
+
// Register each Bitrise step with version mapping
|
|
1353
|
+
// This maps @1, @2, @3, @4 versions to the same implementation
|
|
1354
|
+
for (const step of bitriseSteps) {
|
|
1355
|
+
// Register base step name
|
|
1356
|
+
registerStep(step.name, step.executor, step.metadata);
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1359
|
+
// Auto-initialize on module import
|
|
1360
|
+
initializeStepRegistry();
|
|
1361
|
+
//# sourceMappingURL=index.js.map
|