UNPKG

rn-build-version

Version:

A powerful React Native CLI tool for version management, build automation, and changelog generation for Android and iOS apps.

176 lines (136 loc) 5.8 kB
# rn-build-version A React Native tool for managing `versionCode` and `versionName` in your Android `build.gradle` file, with support for building APKs and AABs. It simplifies version management by providing interactive prompts and automates backups and changelog updates. ## 🚀 Features - **Version Management**: - Increment patch (e.g., `0.0.1``0.0.2`), minor (e.g., `0.0.1``0.1.0`), or major (e.g., `0.0.1``1.0.0`) versions. - Set custom `versionCode` and `versionName`. - Skip version updates for local testing builds. - **Automation**: - Backup `build.gradle` before modifications. - Generate or update a `CHANGELOG.md` file with version details. - **Flexibility**: - Custom Gradle file path support via CLI option. - Dry-run mode to simulate changes without applying them. ## 📌 Prerequisites - Ensure your build.gradle contains `versionCode` and `versionName` (e.g., in `defaultConfig`). - Configure signing in `build.gradle` for release builds. ### ⚠️ Notes - The tool assumes a standard React Native Android project structure. - Run `chmod +x android/gradlew` on macOS/Linux if Gradle permissions are an issue. ## 📦 Installation Install the package globally or as a development dependency in your React Native project: ```bash # Globally npm install -g rn-build-version # As a dev dependency npm install --save-dev rn-build-version # Using yarn yarn add --dev rn-build-version ``` ## 🔧 Usage ### 1️⃣ Add Scripts to Your `package.json` Integrate the tool into your React Native project by adding these scripts: ```json { "scripts": { "build:android:apk": "rn-build-version && cd android && ./gradlew clean assembleRelease", "build:android:aab": "rn-build-version && cd android && ./gradlew clean bundleRelease", "build:android:apk:fast": "rn-build-version && cd android && ./gradlew assembleRelease", "build:android:aab:fast": "rn-build-version && cd android && ./gradlew bundleRelease", "build:android:apk:local": "cd android && ./gradlew clean assembleRelease", "build:android:aab:local": "cd android && ./gradlew clean bundleRelease", "build:android:apk:local:fast": "cd android && ./gradlew assembleRelease", "build:android:aab:local:fast": "cd android && ./gradlew bundleRelease" } } ``` ### 2️⃣ Run the Commands #### 🚀 Production Builds (with Version Management) ```bash npm run build:android:apk npm run build:android:aab yarn build:android:apk yarn build:android:aab ``` These commands prompt you to update the version before building. #### 🛠️ Local Testing Builds (No Version Change) ```bash npm run build:android:apk:local npm run build:android:aab:local yarn build:android:apk:local yarn build:android:aab:local ``` These skip version prompts and build with the current version. #### ⚡ Fast Builds (No Clean, for Quicker Iteration) ```bash npm run build:android:apk:fast npm run build:android:aab:fast npm run build:android:apk:local:fast npm run build:android:aab:local:fast yarn build:android:apk:fast yarn build:android:aab:fast yarn build:android:apk:local:fast yarn build:android:aab:local:fast ``` ## 📊 When to Use Each Command | Command | Use Case | |---------|---------| | `yarn build:android:apk` | Full build with version update and clean (ideal for production APK). | | `yarn build:android:aab` | Full build with version update and clean (ideal for production AAB). | | `yarn build:android:apk:fast` | Quick build with version update, no clean (faster for testing APK). | | `yarn build:android:aab:fast` | Quick build with version update, no clean (faster for testing AAB). | | `yarn build:android:apk:local` | Local build with clean, no version update (fresh APK for local use). | | `yarn build:android:aab:local` | Local build with clean, no version update (fresh AAB for local use). | | `yarn build:android:apk:local:fast` | Fast local build, no clean or version update (quick APK iteration). | | `yarn build:android:aab:local:fast` | Fast local build, no clean or version update (quick AAB iteration). | ## 🖥️ CLI Usage Run the tool directly with options: ```bash rn-build-version [options] ``` | Option | Description | Default | |--------|-------------|---------| | `-g, --gradle <path>` | Path to your `build.gradle` file | `android/app/build.gradle` | | `-d, --dry-run` | Simulate changes without applying them | `false` | ### 📌 Examples - Use a custom Gradle path: ```bash rn-build-version --gradle ./custom/path/build.gradle ``` - Simulate changes (dry-run): ```bash rn-build-version --dry-run ``` - Combine options: ```bash rn-build-version --gradle ./android/app/build.gradle --dry-run ``` ## ✨ Example Interaction When you run `rn-build-version` or a build script with it, you’ll see: ``` Current versionCode: 1 Current versionName: 0.0.1 ? What do you want to do with the version? (Use arrow keys) > Increment patch (e.g., 0.0.1 -> 0.0.2) Increment minor (e.g., 0.0.1 -> 0.1.0) Increment major (e.g., 0.0.1 -> 1.0.0) Set custom version Skip (no increment) ``` - Choosing **"Increment patch"**: - Updates `versionCode: 2`, `versionName: "0.0.2"`. - Creates a backup (`build.gradle.bak`). - Appends to `CHANGELOG.md`. - Choosing **"Set custom version"**: - Prompts for new `versionName` and `versionCode`. - Example: Set `versionName: "1.2.3"`, `versionCode: 123`. --- 💡 **Enjoy hassle-free versioning in your React Native projects! 🚀** --- ### Screenshots <p align="center"> <img src="https://github.com/user-attachments/assets/09587298-f6a0-457f-b9cd-522cf5577ff2" width="45%" /> <img src="https://github.com/user-attachments/assets/e2b31f89-f11f-423f-819f-6aeb670210ae" width="45%" /> </p> --- Fixed: Now this will work all type of version naming convension.