@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,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Android version code and version name step implementation
|
|
3
|
+
* Updates versionCode and versionName in build.gradle
|
|
4
|
+
*/
|
|
5
|
+
import { BaseStepExecutor } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Change Android versionCode and versionName step executor
|
|
8
|
+
* Modifies build.gradle in-place using sed before the build runs
|
|
9
|
+
*/
|
|
10
|
+
export class ChangeAndroidVersionStepExecutor extends BaseStepExecutor {
|
|
11
|
+
getOutputs() {
|
|
12
|
+
return [
|
|
13
|
+
{ name: 'ANDROID_VERSION_CODE', type: 'environment', description: 'Final versionCode set in build.gradle' },
|
|
14
|
+
{ name: 'ANDROID_VERSION_NAME', type: 'environment', description: 'Final versionName set in build.gradle' },
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
getValidationRequirements(inputs, _env, _config) {
|
|
18
|
+
return [
|
|
19
|
+
this.requireInput('build_gradle_path', inputs, 'Path to build.gradle file'),
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
async execute(inputs, _env, _config) {
|
|
23
|
+
const stepName = 'change-android-versioncode-and-versionname';
|
|
24
|
+
const commands = [];
|
|
25
|
+
const buildGradlePath = this.getInput(inputs, 'build_gradle_path', '$PROJECT_LOCATION/app/build.gradle');
|
|
26
|
+
const newVersionName = this.getInput(inputs, 'new_version_name', '');
|
|
27
|
+
const newVersionCode = this.getInput(inputs, 'new_version_code', '');
|
|
28
|
+
const versionCodeOffset = this.getInput(inputs, 'version_code_offset', '');
|
|
29
|
+
commands.push('# change-android-versioncode-and-versionname step');
|
|
30
|
+
commands.push('echo "📝 Updating Android version in build.gradle..."');
|
|
31
|
+
commands.push('');
|
|
32
|
+
// Set variables
|
|
33
|
+
commands.push(`BUILD_GRADLE="${this.escapeBash(buildGradlePath)}"`);
|
|
34
|
+
commands.push(`NEW_VERSION_NAME="${this.escapeBash(newVersionName)}"`);
|
|
35
|
+
commands.push(`NEW_VERSION_CODE="${this.escapeBash(newVersionCode)}"`);
|
|
36
|
+
commands.push(`VERSION_CODE_OFFSET="${this.escapeBash(versionCodeOffset)}"`);
|
|
37
|
+
commands.push('');
|
|
38
|
+
// Validate build_gradle_path
|
|
39
|
+
commands.push('if [ -z "$BUILD_GRADLE" ]; then');
|
|
40
|
+
commands.push(' echo "❌ Error: build_gradle_path is required"');
|
|
41
|
+
commands.push(' exit 1');
|
|
42
|
+
commands.push('fi');
|
|
43
|
+
commands.push('');
|
|
44
|
+
commands.push('# Auto-detect Kotlin DSL (.kts) if plain .gradle not found');
|
|
45
|
+
commands.push('if [ ! -f "$BUILD_GRADLE" ] && [ -f "${BUILD_GRADLE}.kts" ]; then');
|
|
46
|
+
commands.push(' BUILD_GRADLE="${BUILD_GRADLE}.kts"');
|
|
47
|
+
commands.push(' echo "Auto-detected Kotlin DSL: $BUILD_GRADLE"');
|
|
48
|
+
commands.push('fi');
|
|
49
|
+
commands.push('');
|
|
50
|
+
commands.push('if [ ! -f "$BUILD_GRADLE" ]; then');
|
|
51
|
+
commands.push(' echo "❌ Error: build.gradle not found: $BUILD_GRADLE"');
|
|
52
|
+
commands.push(' exit 1');
|
|
53
|
+
commands.push('fi');
|
|
54
|
+
commands.push('');
|
|
55
|
+
commands.push('echo "build.gradle: $BUILD_GRADLE"');
|
|
56
|
+
commands.push('');
|
|
57
|
+
// When version_code_offset is used alone (without new_version_code), we must read the
|
|
58
|
+
// current versionCode from the file — it must be a direct integer for that to work.
|
|
59
|
+
commands.push('# Validate direct integer only when version_code_offset is used without new_version_code');
|
|
60
|
+
commands.push('if [ -n "$VERSION_CODE_OFFSET" ] && [ -z "$NEW_VERSION_CODE" ]; then');
|
|
61
|
+
commands.push(' VCODE_LINE=$(grep -E "^[[:space:]]*versionCode" "$BUILD_GRADLE" | grep -v \'//\' | head -n 1)');
|
|
62
|
+
commands.push(' VCODE_DIRECT=$(echo "$VCODE_LINE" | grep -E "^[[:space:]]*versionCode[[:space:]]*(=[[:space:]]*)?[0-9]+[[:space:]]*$" || true)');
|
|
63
|
+
commands.push(' if [ -z "$VCODE_DIRECT" ]; then');
|
|
64
|
+
commands.push(' VCODE_FOUND=$(echo "$VCODE_LINE" | sed -E \'s/^[[:space:]]*versionCode[[:space:]]*(=[[:space:]]*)?//\')');
|
|
65
|
+
commands.push(' echo "❌ Error: version_code_offset requires a direct integer versionCode in the file"');
|
|
66
|
+
commands.push(' echo " Found: $VCODE_FOUND"');
|
|
67
|
+
commands.push(' echo " Only direct values work with version_code_offset, e.g.: versionCode = 42"');
|
|
68
|
+
commands.push(' echo " Use new_version_code instead to set an explicit value."');
|
|
69
|
+
commands.push(' exit 1');
|
|
70
|
+
commands.push(' fi');
|
|
71
|
+
commands.push('fi');
|
|
72
|
+
commands.push('');
|
|
73
|
+
// Handle version_code_offset: if no new_version_code, read current from file
|
|
74
|
+
commands.push('# Resolve version code with optional offset');
|
|
75
|
+
commands.push('if [ -n "$VERSION_CODE_OFFSET" ] && [ -z "$NEW_VERSION_CODE" ]; then');
|
|
76
|
+
commands.push(' CURRENT_CODE=$(grep -E "^[[:space:]]*versionCode" "$BUILD_GRADLE" | grep -v \'//\' | sed -E \'s/.*versionCode[[:space:]]*(=[[:space:]]*)?([0-9]+).*/\\2/\' | head -n 1)');
|
|
77
|
+
commands.push(' if [ -z "$CURRENT_CODE" ]; then');
|
|
78
|
+
commands.push(' echo "❌ Error: Could not read current versionCode from $BUILD_GRADLE"');
|
|
79
|
+
commands.push(' exit 1');
|
|
80
|
+
commands.push(' fi');
|
|
81
|
+
commands.push(' NEW_VERSION_CODE=$((CURRENT_CODE + VERSION_CODE_OFFSET))');
|
|
82
|
+
commands.push(' echo "Applied offset $VERSION_CODE_OFFSET to current versionCode $CURRENT_CODE → $NEW_VERSION_CODE"');
|
|
83
|
+
commands.push('elif [ -n "$VERSION_CODE_OFFSET" ] && [ -n "$NEW_VERSION_CODE" ]; then');
|
|
84
|
+
commands.push(' NEW_VERSION_CODE=$((NEW_VERSION_CODE + VERSION_CODE_OFFSET))');
|
|
85
|
+
commands.push(' echo "Applied offset $VERSION_CODE_OFFSET → final versionCode: $NEW_VERSION_CODE"');
|
|
86
|
+
commands.push('fi');
|
|
87
|
+
commands.push('');
|
|
88
|
+
// Update versionCode
|
|
89
|
+
commands.push('# Update versionCode if provided');
|
|
90
|
+
commands.push('if [ -n "$NEW_VERSION_CODE" ]; then');
|
|
91
|
+
commands.push(' sed -i.bak -E "s/(^[[:space:]]*versionCode[[:space:]]*(=[[:space:]]*)?).*$/\\1${NEW_VERSION_CODE}/" "$BUILD_GRADLE"');
|
|
92
|
+
commands.push(' rm -f "${BUILD_GRADLE}.bak"');
|
|
93
|
+
commands.push(' echo "Updated versionCode to: $NEW_VERSION_CODE"');
|
|
94
|
+
commands.push('else');
|
|
95
|
+
commands.push(' echo "versionCode: not changed (new_version_code not set)"');
|
|
96
|
+
commands.push('fi');
|
|
97
|
+
commands.push('');
|
|
98
|
+
// Update versionName
|
|
99
|
+
commands.push('# Update versionName if provided');
|
|
100
|
+
commands.push('if [ -n "$NEW_VERSION_NAME" ]; then');
|
|
101
|
+
commands.push(' sed -i.bak -E "s/(^[[:space:]]*versionName[[:space:]]*(=[[:space:]]*)?).*$/\\1\\"${NEW_VERSION_NAME}\\"/" "$BUILD_GRADLE"');
|
|
102
|
+
commands.push(' rm -f "${BUILD_GRADLE}.bak"');
|
|
103
|
+
commands.push(' echo "Updated versionName to: $NEW_VERSION_NAME"');
|
|
104
|
+
commands.push('else');
|
|
105
|
+
commands.push(' echo "versionName: not changed (new_version_name not set)"');
|
|
106
|
+
commands.push('fi');
|
|
107
|
+
commands.push('');
|
|
108
|
+
// Read back final values
|
|
109
|
+
commands.push('# Read back final values from file');
|
|
110
|
+
commands.push('FINAL_VERSION_CODE=$(grep -E "^[[:space:]]*versionCode" "$BUILD_GRADLE" | grep -v \'//\' | sed -E \'s/.*versionCode[[:space:]]*(=[[:space:]]*)?([0-9]+).*/\\2/\' | head -n 1)');
|
|
111
|
+
commands.push('FINAL_VERSION_NAME=$(grep -E "^[[:space:]]*versionName" "$BUILD_GRADLE" | grep -v \'//\' | sed -E \'s/.*versionName[[:space:]]*(=[[:space:]]*)?"([^"]*)".*/\\2/\' | head -n 1)');
|
|
112
|
+
commands.push('');
|
|
113
|
+
commands.push('echo ""');
|
|
114
|
+
commands.push('echo "Final versionCode: $FINAL_VERSION_CODE"');
|
|
115
|
+
commands.push('echo "Final versionName: $FINAL_VERSION_NAME"');
|
|
116
|
+
commands.push('');
|
|
117
|
+
// Export via envman
|
|
118
|
+
commands.push('# Export as environment variables for subsequent steps');
|
|
119
|
+
commands.push('envman add --key ANDROID_VERSION_CODE --value "$FINAL_VERSION_CODE"');
|
|
120
|
+
commands.push('envman add --key ANDROID_VERSION_NAME --value "$FINAL_VERSION_NAME"');
|
|
121
|
+
commands.push('');
|
|
122
|
+
commands.push('echo ""');
|
|
123
|
+
commands.push('echo "✅ Android version updated successfully"');
|
|
124
|
+
const script = this.createBashScriptFromCommands(commands, stepName);
|
|
125
|
+
return this.createScriptStep(script, stepName);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=android-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-version.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/android-version.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for change-android-versioncode-and-versionname step
|
|
3
|
+
*/
|
|
4
|
+
import { describe, test, expect } from '@jest/globals';
|
|
5
|
+
import { ChangeAndroidVersionStepExecutor } from './android-version.js';
|
|
6
|
+
describe('ChangeAndroidVersionStepExecutor', () => {
|
|
7
|
+
const mockConfig = {
|
|
8
|
+
artifactsDir: '/ci/artifacts',
|
|
9
|
+
interpreters: {
|
|
10
|
+
python: '/usr/bin/python3',
|
|
11
|
+
ruby: '/usr/bin/ruby',
|
|
12
|
+
node: '/usr/bin/node',
|
|
13
|
+
bash: '/bin/bash',
|
|
14
|
+
},
|
|
15
|
+
maxConcurrentJobs: 4,
|
|
16
|
+
paths: {
|
|
17
|
+
buildsDir: '/ci/builds',
|
|
18
|
+
cacheDir: '/ci/cache',
|
|
19
|
+
derivedDataDir: '/ci/derived_data',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
describe('Basic functionality', () => {
|
|
23
|
+
test('should create a script step with correct name', async () => {
|
|
24
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
25
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
26
|
+
expect(result.kind).toBe('script');
|
|
27
|
+
expect(result.name).toBe('change-android-versioncode-and-versionname');
|
|
28
|
+
});
|
|
29
|
+
test('should include step label comment', async () => {
|
|
30
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
31
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
32
|
+
expect(result.script).toContain('change-android-versioncode-and-versionname step');
|
|
33
|
+
});
|
|
34
|
+
test('isSkippedInLocalMode should return false', () => {
|
|
35
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
36
|
+
expect(executor.isSkippedInLocalMode()).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('Script structure', () => {
|
|
40
|
+
test('should include bash error handling directives', async () => {
|
|
41
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
42
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
43
|
+
expect(result.script).toContain('#!/bin/bash');
|
|
44
|
+
expect(result.script).toContain('set -e');
|
|
45
|
+
expect(result.script).toContain('set -o pipefail');
|
|
46
|
+
});
|
|
47
|
+
test('should include success message', async () => {
|
|
48
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
49
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
50
|
+
expect(result.script).toContain('Android version updated successfully');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('Validation', () => {
|
|
54
|
+
test('should error if build_gradle_path is empty', async () => {
|
|
55
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
56
|
+
const result = await executor.execute({}, {}, mockConfig);
|
|
57
|
+
expect(result.script).toContain('build_gradle_path is required');
|
|
58
|
+
expect(result.script).toContain('exit 1');
|
|
59
|
+
});
|
|
60
|
+
test('should check that build.gradle file exists on disk', async () => {
|
|
61
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
62
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
63
|
+
expect(result.script).toContain('build.gradle not found');
|
|
64
|
+
expect(result.script).toContain('if [ ! -f "$BUILD_GRADLE" ]');
|
|
65
|
+
});
|
|
66
|
+
test('should set BUILD_GRADLE variable from input', async () => {
|
|
67
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
68
|
+
const result = await executor.execute({ build_gradle_path: '/my/project/app/build.gradle' }, {}, mockConfig);
|
|
69
|
+
expect(result.script).toContain('/my/project/app/build.gradle');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('Default build_gradle_path', () => {
|
|
73
|
+
test('should default to $PROJECT_LOCATION/app/build.gradle', async () => {
|
|
74
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
75
|
+
const result = await executor.execute({}, {}, mockConfig);
|
|
76
|
+
expect(result.script).toContain('$PROJECT_LOCATION/app/build.gradle');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('versionCode update', () => {
|
|
80
|
+
test('should include sed command when new_version_code is provided', async () => {
|
|
81
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
82
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_code: '42' }, {}, mockConfig);
|
|
83
|
+
expect(result.script).toContain('sed -i.bak');
|
|
84
|
+
expect(result.script).toContain('versionCode');
|
|
85
|
+
});
|
|
86
|
+
test('should skip versionCode update when not provided', async () => {
|
|
87
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
88
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
89
|
+
expect(result.script).toContain('versionCode: not changed');
|
|
90
|
+
});
|
|
91
|
+
test('should set NEW_VERSION_CODE variable', async () => {
|
|
92
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
93
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_code: '100' }, {}, mockConfig);
|
|
94
|
+
expect(result.script).toContain('NEW_VERSION_CODE="100"');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('versionName update', () => {
|
|
98
|
+
test('should include sed command when new_version_name is provided', async () => {
|
|
99
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
100
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_name: '2.0.0' }, {}, mockConfig);
|
|
101
|
+
expect(result.script).toContain('sed -i.bak');
|
|
102
|
+
expect(result.script).toContain('versionName');
|
|
103
|
+
});
|
|
104
|
+
test('should skip versionName update when not provided', async () => {
|
|
105
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
106
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
107
|
+
expect(result.script).toContain('versionName: not changed');
|
|
108
|
+
});
|
|
109
|
+
test('should set NEW_VERSION_NAME variable', async () => {
|
|
110
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
111
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_name: '1.5.3' }, {}, mockConfig);
|
|
112
|
+
expect(result.script).toContain('NEW_VERSION_NAME="1.5.3"');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('version_code_offset', () => {
|
|
116
|
+
test('should apply offset to new_version_code when both are provided', async () => {
|
|
117
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
118
|
+
const result = await executor.execute({
|
|
119
|
+
build_gradle_path: '/app/build.gradle',
|
|
120
|
+
new_version_code: '100',
|
|
121
|
+
version_code_offset: '5',
|
|
122
|
+
}, {}, mockConfig);
|
|
123
|
+
expect(result.script).toContain('VERSION_CODE_OFFSET="5"');
|
|
124
|
+
expect(result.script).toContain('NEW_VERSION_CODE=$((NEW_VERSION_CODE + VERSION_CODE_OFFSET))');
|
|
125
|
+
});
|
|
126
|
+
test('should read current versionCode from file when only offset is provided', async () => {
|
|
127
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
128
|
+
const result = await executor.execute({
|
|
129
|
+
build_gradle_path: '/app/build.gradle',
|
|
130
|
+
version_code_offset: '1',
|
|
131
|
+
}, {}, mockConfig);
|
|
132
|
+
expect(result.script).toContain('CURRENT_CODE=$(grep');
|
|
133
|
+
expect(result.script).toContain('NEW_VERSION_CODE=$((CURRENT_CODE + VERSION_CODE_OFFSET))');
|
|
134
|
+
});
|
|
135
|
+
test('should error if offset-only and current code cannot be read', async () => {
|
|
136
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
137
|
+
const result = await executor.execute({
|
|
138
|
+
build_gradle_path: '/app/build.gradle',
|
|
139
|
+
version_code_offset: '1',
|
|
140
|
+
}, {}, mockConfig);
|
|
141
|
+
expect(result.script).toContain('Could not read current versionCode');
|
|
142
|
+
expect(result.script).toContain('exit 1');
|
|
143
|
+
});
|
|
144
|
+
test('should not apply offset when not provided', async () => {
|
|
145
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
146
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_code: '50' }, {}, mockConfig);
|
|
147
|
+
expect(result.script).toContain('VERSION_CODE_OFFSET=""');
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('Outputs exported via envman', () => {
|
|
151
|
+
test('should export ANDROID_VERSION_CODE', async () => {
|
|
152
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
153
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
154
|
+
expect(result.script).toContain('envman add --key ANDROID_VERSION_CODE');
|
|
155
|
+
});
|
|
156
|
+
test('should export ANDROID_VERSION_NAME', async () => {
|
|
157
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
158
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
159
|
+
expect(result.script).toContain('envman add --key ANDROID_VERSION_NAME');
|
|
160
|
+
});
|
|
161
|
+
test('should read back final values before exporting', async () => {
|
|
162
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
163
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle' }, {}, mockConfig);
|
|
164
|
+
expect(result.script).toContain('FINAL_VERSION_CODE=$(grep');
|
|
165
|
+
expect(result.script).toContain('FINAL_VERSION_NAME=$(grep');
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('getOutputs', () => {
|
|
169
|
+
test('should declare ANDROID_VERSION_CODE output', () => {
|
|
170
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
171
|
+
const outputs = executor.getOutputs();
|
|
172
|
+
expect(outputs.some(o => o.name === 'ANDROID_VERSION_CODE')).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
test('should declare ANDROID_VERSION_NAME output', () => {
|
|
175
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
176
|
+
const outputs = executor.getOutputs();
|
|
177
|
+
expect(outputs.some(o => o.name === 'ANDROID_VERSION_NAME')).toBe(true);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('getValidationRequirements', () => {
|
|
181
|
+
test('should require build_gradle_path input', () => {
|
|
182
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
183
|
+
const requirements = executor.getValidationRequirements({}, {}, mockConfig);
|
|
184
|
+
const inputReqs = requirements.filter(r => r.category === 'input');
|
|
185
|
+
expect(inputReqs.some(r => r.name === 'build_gradle_path')).toBe(true);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('Cleanup', () => {
|
|
189
|
+
test('should remove .bak backup files after sed', async () => {
|
|
190
|
+
const executor = new ChangeAndroidVersionStepExecutor();
|
|
191
|
+
const result = await executor.execute({ build_gradle_path: '/app/build.gradle', new_version_code: '1' }, {}, mockConfig);
|
|
192
|
+
expect(result.script).toContain('rm -f "${BUILD_GRADLE}.bak"');
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
//# sourceMappingURL=android-version.test.js.map
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Android step implementations (set-java-version, gradle-build, android-lint, android-unit-test)
|
|
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
|
+
/**
|
|
8
|
+
* Inputs for set-java-version step
|
|
9
|
+
*/
|
|
10
|
+
export interface SetJavaVersionInputs {
|
|
11
|
+
java_version?: string | number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Inputs for gradle-build step
|
|
15
|
+
*/
|
|
16
|
+
export interface GradleBuildInputs {
|
|
17
|
+
project_location?: string;
|
|
18
|
+
build_type?: string;
|
|
19
|
+
gradle_task?: string;
|
|
20
|
+
gradle_options?: string;
|
|
21
|
+
variant?: string;
|
|
22
|
+
module?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Inputs for android-lint step
|
|
26
|
+
*/
|
|
27
|
+
export interface AndroidLintInputs {
|
|
28
|
+
project_location?: string;
|
|
29
|
+
module?: string;
|
|
30
|
+
variant?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Inputs for android-unit-test step
|
|
34
|
+
*/
|
|
35
|
+
export interface AndroidUnitTestInputs {
|
|
36
|
+
project_location?: string;
|
|
37
|
+
module?: string;
|
|
38
|
+
variant?: string;
|
|
39
|
+
test_filter?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set Java version step executor
|
|
43
|
+
* Sets the Java version to use for Android builds
|
|
44
|
+
*/
|
|
45
|
+
export declare class SetJavaVersionStepExecutor extends BaseStepExecutor {
|
|
46
|
+
getValidationRequirements(inputs: SetJavaVersionInputs, _env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
47
|
+
/**
|
|
48
|
+
* Check Java version including Homebrew installations
|
|
49
|
+
* Matches the logic in execute() method
|
|
50
|
+
*/
|
|
51
|
+
private checkJavaVersionWithHomebrew;
|
|
52
|
+
getOutputs(): StepOutput[];
|
|
53
|
+
execute(inputs: SetJavaVersionInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Gradle build step executor
|
|
57
|
+
* Builds Android projects using Gradle
|
|
58
|
+
*/
|
|
59
|
+
export declare class GradleBuildStepExecutor extends BaseStepExecutor {
|
|
60
|
+
getOutputs(): StepOutput[];
|
|
61
|
+
getValidationRequirements(_inputs: GradleBuildInputs, env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
62
|
+
execute(inputs: GradleBuildInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Android lint step executor
|
|
66
|
+
* Runs Android lint checks
|
|
67
|
+
*/
|
|
68
|
+
export declare class AndroidLintStepExecutor extends BaseStepExecutor {
|
|
69
|
+
getValidationRequirements(_inputs: AndroidLintInputs, env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
70
|
+
execute(inputs: AndroidLintInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Android unit test step executor
|
|
74
|
+
* Runs Android unit tests
|
|
75
|
+
*/
|
|
76
|
+
export declare class AndroidUnitTestStepExecutor extends BaseStepExecutor {
|
|
77
|
+
getValidationRequirements(_inputs: AndroidUnitTestInputs, env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
78
|
+
execute(inputs: AndroidUnitTestInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
|
|
79
|
+
}
|
|
80
|
+
export interface AndroidBuildForUITestingInputs {
|
|
81
|
+
project_location?: string;
|
|
82
|
+
module?: string;
|
|
83
|
+
variant?: string;
|
|
84
|
+
arguments?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Builds app APK and test APK for Android instrumented (UI) tests.
|
|
88
|
+
* Runs assembleVariant and assembleVariantAndroidTest gradle tasks.
|
|
89
|
+
*/
|
|
90
|
+
export declare class AndroidBuildForUITestingStepExecutor extends BaseStepExecutor {
|
|
91
|
+
getValidationRequirements(_inputs: AndroidBuildForUITestingInputs, env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
|
|
92
|
+
getOutputs(): StepOutput[];
|
|
93
|
+
execute(inputs: AndroidBuildForUITestingInputs, _env: Record<string, string>, _config: CIConfig): Promise<StepDef>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=android.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/android.ts"],"names":[],"mappings":"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"}
|