capacitor-android: inietta versionName/versionCode da package.json #5

Closed
opened 2026-08-11 06:50:51 +00:00 by LucaZanni · 0 comments
Owner

Problema

capacitor-android.yml legge la versione da package.json (step app-info) ma la usa solo per nominare l'artefatto. Il build.gradle non viene mai toccato, con due conseguenze:

  1. Sui repo dove android/ è gitignorato (es. capacitor-vue-board, capacitor-vue-crm) la piattaforma è rigenerata da npx cap add android a ogni run, quindi la build usa i default Capacitor: versionName "1.0", versionCode 1. L'APK si chiama app-1.0.1-release.apk ma dentro dichiara 1.0.
  2. versionCode resta 1 su tutta la flotta. Google Play rifiuta ogni upload con versionCode non strettamente crescente: release.yml produce un AAB per lo Store, quindi dalla seconda release in poi la pubblicazione fallisce.

Anche sui repo dove android/ è versionato il valore è duplicato a mano e può ri-divergere da package.json.

Soluzione

Nuovo step Inject Android version dopo Sync Capacitor, che riscrive versionName e versionCode in android/app/build.gradle prima della build.

  • versionName = versione di package.json, senza trasformazioni
  • versionCode = major*10000 + minor*100 + patch, derivato dalla stessa versione (pre-release e build metadata scartati dal calcolo, ma mantenuti nel versionName)
  • nuovo input version-code per forzare un valore esplicito quando la formula non basta
  • supporta sia Groovy (build.gradle) sia Kotlin DSL (build.gradle.kts)
  • fallisce con messaggio esplicito se: la piattaforma Android non esiste, la versione non è semver, minor/patch superano 99, o l'iniezione non produce il valore atteso

Monotonia verificata: 0.1.1→101, 0.2.0→200, 1.0.0→10000, 1.0.1→10001, 1.2.3→10203, 2.0.0→20000.

La modifica è applicata a entrambe le varianti (capacitor-android.yml e capacitor-android-github.yml), mantenute identiche nel corpo dello step.

## Problema `capacitor-android.yml` legge la versione da `package.json` (step `app-info`) ma la usa **solo per nominare l'artefatto**. Il `build.gradle` non viene mai toccato, con due conseguenze: 1. **Sui repo dove `android/` è gitignorato** (es. `capacitor-vue-board`, `capacitor-vue-crm`) la piattaforma è rigenerata da `npx cap add android` a ogni run, quindi la build usa i default Capacitor: `versionName "1.0"`, `versionCode 1`. L'APK si chiama `app-1.0.1-release.apk` ma **dentro dichiara 1.0**. 2. **`versionCode` resta 1 su tutta la flotta.** Google Play rifiuta ogni upload con `versionCode` non strettamente crescente: `release.yml` produce un AAB per lo Store, quindi dalla seconda release in poi la pubblicazione fallisce. Anche sui repo dove `android/` è versionato il valore è duplicato a mano e può ri-divergere da `package.json`. ## Soluzione Nuovo step `Inject Android version` dopo `Sync Capacitor`, che riscrive `versionName` e `versionCode` in `android/app/build.gradle` prima della build. - `versionName` = versione di `package.json`, senza trasformazioni - `versionCode` = `major*10000 + minor*100 + patch`, derivato dalla stessa versione (pre-release e build metadata scartati dal calcolo, ma mantenuti nel `versionName`) - nuovo input `version-code` per forzare un valore esplicito quando la formula non basta - supporta sia Groovy (`build.gradle`) sia Kotlin DSL (`build.gradle.kts`) - fallisce con messaggio esplicito se: la piattaforma Android non esiste, la versione non è semver, `minor`/`patch` superano 99, o l'iniezione non produce il valore atteso Monotonia verificata: `0.1.1`→101, `0.2.0`→200, `1.0.0`→10000, `1.0.1`→10001, `1.2.3`→10203, `2.0.0`→20000. La modifica è applicata a entrambe le varianti (`capacitor-android.yml` e `capacitor-android-github.yml`), mantenute identiche nel corpo dello step.
LucaZanni added spent time 1 hour 30 minutes 2026-08-11 06:51:04 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Total Time Spent: 1 hour 30 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: devops/shared-actions#5