# SETUP CODEPUSH OTA **codepush** merupakan salah satu service dari appcenter yang digunakan untuk melakukan update OTA (over the air) pada aplikasi android dan ios tanpa harus melakukan release ke playstore/appstore. appcenter dashboard: https://appcenter.ms/sign-in ### INSTALL APPCENTER 1. install appcenter CLI di global pake NPM: ```npm install -g appcenter-cli``` 2. login appcenter: ```appcenter login``` (akun minta pak David) appcenter dashboard: https://appcenter.ms/sign-in ### APPS NAME IN CODEPUSH App name yang digunakan untuk OTA adalah **\<app_name>** yang sudah ada di appcenter: - **brambang-android**: app android production - **brambang-android-dev**: app android staging - **brambang-ios**: app ios production - **brambang-ios-dev**: app ios staging dan **\<ownerName>** di appcenter adalah: - PT-Bursa-Interaktif-Gemilang sehingga untuk melakukan publish OTA app staging dengan sintak **\<ownerName>/<app_name>** adalah: ``` -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev ``` ### APP VERSION (SEMVER RANGE EXPRESSION) sistem codepush secara default hanya akan update ke user dengan versi app (binary android/ios) yang sama. sehingga tidak perlu lagi buat server OTA baru jika ada perubahan yang akan membuat client crash karena ada perubahan pada native code. Artinya jika versi sebelumnya ingin mendapatkan update OTA terbaru, maka perlu ada setup tambahan ketika ingin publish/release OTA. setup ini menggunakan format **semver range expression**, oleh sebab itu maka perlu penetapan standar yang lebih ketat dalam pembuatan versi app agar tidak terjadi *app crash karena update OTA yang tidak sesuai*. Format app version sebagai berikut: X.Y.Z - X = major version - Y = minor version - Z = patch version jika update OTA hanya pada sisi JS/assets maka **minor/patch version yang akan dinaikkan**, dan gunakan setup semver range expression agar versi sebelumnya bisa mendapatkan update OTA terbaru. ``` appcenter codepush release-react -a <ownerName>/<app_name> -d <deploymentName> -x --target-binary-version "<semverRange>" ``` Contoh kita ingin melakukan publish OTA semua versi >=6.1.0 <=6.8.8: ``` appcenter codepush release-react -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev -d Staging -x --target-binary-version ">=6.1.0 <=6.8.8" ``` jika OTA update ada perubahan pada sisi native code maka **major version yang akan dinaikkan**, sehingga app versi sebelumnya tidak perlu mendapatkan update OTA terbaru. Publish OTA tanpa setup semver range expression: ``` appcenter codepush release-react -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev -d Staging ``` *dokumentasi publish OTA dengan semver range expression bisa baca disini:* https://github.com/microsoft/code-push/tree/v2.1.4/cli#target-binary-version-parameter *untuk memahami semver range expression bisa coba simulasi disini:* https://semver.npmjs.com/ ### PUBLISH OTA 1. masuk ke folder project 2. jalankan perintah: *karena ada issue ini:* https://github.com/microsoft/react-native-code-push/issues/2585#issuecomment-1749375271 maka kita perlu tambahkan parameter ```-x``` untuk set OTA disabled ketika di publish, dan kita perlu enable OTA tersebut sekitar 3 menit kemudian. ``` appcenter codepush release-react -a <ownerName>/<app_name> -d <deploymentName> -x ``` contoh: ``` appcenter codepush release-react -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev -d Staging -x ``` setup semver range expression diperlukan jika app versi sebelumnya perlu mendapatkan update OTA yg sama, maka kita perlu tambahkan parameter --target-binary-version. Contoh: ``` appcenter codepush release-react -a <ownerName>/<app_name> -d <deploymentName> --target-binary-version "<semverRange>" -x ``` contoh: ``` // <semverRange> wajib ada " (kutip) dan spasi diantara expression // 6.1.0 - 6.8.8 appcenter codepush release-react -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev -d Staging --target-binary-version "6.1.0 - 6.8.8" -x // >=6.1.0 <6.2.0 appcenter codepush release-react -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev -d Staging --target-binary-version "~6.1.0" -x ``` *untuk mengetahui semver logic bisa pake simulasi ini:* https://semver.npmjs.com/ ##### NOTE: - perubahan versi android dan versi OTA yang dulu tetep dilakukan seperti biasa - **perhatikan target-binary-version yang digunakan OTA, agar bisa dilakukan rollback jika terjadi kesalahan maka formatnya harus sama dengan OTA sebelumnya.** - **pastikan versi tertinggi dari target-binary-version sesuai versi yang sedang di OTA, agar versi diatasnya nanti tidak mendapatkan OTA tersebut.** ### PATCH OTA Lalu untuk set enable OTA nya, jalankan perintah: ``` appcenter codepush patch -a <ownerName>/<app_name> <deploymentName> -l <releaseLabel> -x false ``` contoh: ``` appcenter codepush patch -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev Staging -l v2 -x false ``` untuk mendapatkan **\<releaseLabel> cek history dengan perintah: ``` appcenter codepush deployment history -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev Staging ``` ##### NOTE: - perubahan versi android dan versi OTA yang dulu tetep dilakukan seperti biasa - **perhatikan target-binary-version yang digunakan OTA, agar bisa dilakukan rollback jika terjadi kesalahan maka formatnya harus sama dengan OTA sebelumnya.** - **pastikan versi tertinggi dari target-binary-version sesuai versi yang sedang di OTA, agar versi diatasnya nanti tidak mendapatkan OTA tersebut.** ### ROLL BACK OTA 1. masuk ke folder project 2. jalankan perintah: ``` appcenter codepush rollback -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev Staging ``` Jika menginginkan ke versi tertentu, maka tambahkan parameter --target-release ```<version>```: ``` appcenter codepush rollback -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev Staging --target-release v34 ``` untuk cek history release bisa pake perintah: ``` appcenter codepush deployment history -a PT-Bursa-Interaktif-Gemilang/brambang-android-dev Staging ``` ### CLI DOC detail penggunaan appcenter codepush cli bisa dilihat disini: https://learn.microsoft.com/en-us/appcenter/distribution/codepush/cli --- ### USING CODEPUSH.SH Bash file ini sudah include semua perintah codepush yang sering digunakan, sehingga tidak perlu lagi mengetik perintah codepush secara manual. Dan app_name dan env sudah sesuai project masing-masing apakah Production atau Staging. ``` // CEK HISTORY ./codepush.sh history // PUBLISH OTA // Please specify the target binary version to publish, ex: "7.0.0 - 7.0.4" ./codepush.sh publish "7.0.0 - 7.0.4" // PATCH OTA (set enable) // Please specify the release label to patch ./codepush.sh publish-enable v11 // ROLLBACK OTA // Please specify the release label to be the destination of rollback ./codepush.sh rollback v10 ```