MaJ workflow publication pour versionName et versionCode
This commit is contained in:
		| @ -2,43 +2,137 @@ on: | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       tag: | ||||
|         description: 'Nom du tag (ex: v1.2.3)' | ||||
|         description: 'Numéro de version (ex: 2.1)' | ||||
|         required: true | ||||
|       build_apk: | ||||
|         description: 'Compiler et publier l’APK ?' | ||||
|         required: true | ||||
|         default: 'oui' | ||||
|         type: choice | ||||
|         options: | ||||
|           - oui | ||||
|           - non | ||||
|  | ||||
| jobs: | ||||
|   release: | ||||
|     name: 🚀 Créer une nouvelle version | ||||
|     name: 🚀 Publier une nouvelle version | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - name: 🔐 Vérification du nom de tag | ||||
|         run: | | ||||
|           TAG="${{ github.event.inputs.tag }}" | ||||
|           if ! [[ "$TAG" =~ ^[0-9]+\.[0-9]+$ ]]; then | ||||
|             echo "❌ Format de tag invalide : $TAG" | ||||
|             exit 1 | ||||
|           fi | ||||
|  | ||||
|       - name: 📦 Cloner le dépôt | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|  | ||||
|       - name: 🔧 Préparation de Git (tags) | ||||
|         run: git fetch --tags | ||||
|       - name: 🔧 Préparation de Git | ||||
|         run: | | ||||
|           git fetch --tags | ||||
|           git config user.name "github-actions" | ||||
|           git config user.email "." | ||||
|  | ||||
|       - name: 🏷️ Créer le tag si nécessaire | ||||
|       - name: 🔎 Vérifier si le tag existe déjà | ||||
|         id: tag-existant | ||||
|         run: | | ||||
|           TAG="${{ github.event.inputs.tag }}" | ||||
|           if git rev-parse "$TAG" >/dev/null 2>&1; then | ||||
|             echo "Le tag $TAG existe déjà, pas besoin de le créer." | ||||
|             echo "❌ Le tag '$TAG' existe déjà." | ||||
|             exit 1 | ||||
|           else | ||||
|             git config user.name "github-actions" | ||||
|             git config user.email "github-actions@github.com" | ||||
|             git tag "$TAG" | ||||
|             git push origin "$TAG" | ||||
|             echo "✅ Le tag '$TAG' n'existe pas encore, on continue." | ||||
|           fi | ||||
|  | ||||
|       - name: 🔍️ Extraire les informations de l’application | ||||
|         id: extraire-info-gradle | ||||
|         run: | | ||||
|           APP_NAME=$(grep 'rootProject.name' settings.gradle | sed -E 's/.*= "(.*)"/\1/') | ||||
|           COMPILE_SDK_VERSION=$(grep 'compileSdk' app/build.gradle | grep -oE '[0-9]+') | ||||
|  | ||||
|           { | ||||
|             echo "app_name=$APP_NAME" | ||||
|             echo "sdk=$COMPILE_SDK_VERSION" | ||||
|           } | tee -a $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: ☕ Configurer Java | ||||
|         uses: actions/setup-java@v3 | ||||
|         with: | ||||
|           distribution: 'temurin' | ||||
|           java-version: '17' | ||||
|  | ||||
|       - name: 🤖 Installer Android SDK | ||||
|         uses: android-actions/setup-android@v3 | ||||
|         with: | ||||
|           api-level: ${{ steps.extraire-info-gradle.outputs.sdk }} | ||||
|           build-tools-version: ${{ steps.extraire-info-gradle.outputs.sdk }}.0.3 | ||||
|  | ||||
|       - name: 🔐 Récupérer et décoder le keystore | ||||
|         id: decode-keystore | ||||
|         env: | ||||
|           KEYSTORE_B64: ${{ secrets.KEYSTORE_B64 }} | ||||
|         run: | | ||||
|           echo "$KEYSTORE_B64" | base64 -d > app/keystore.jks | ||||
|           ls -1 app/keystore.jks | ||||
|           echo "keystore_path=$(realpath app/keystore.jks)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: 📝 Mise à jour de versionName et versionCode | ||||
|         run: | | ||||
|           TAG="${{ github.event.inputs.tag }}" | ||||
|           BUILD_GRADLE_FILE="app/build.gradle" | ||||
|  | ||||
|           # Récupérer tous les tags valides au format vX.Y.Z | ||||
|           VALID_TAGS=$(git tag -l 'v[0-9]*.[0-9]*.[0-9]*' | wc -l) | ||||
|           VERSION_CODE=$((VALID_TAGS + 1)) | ||||
|  | ||||
|           echo "🔢 versionCode (depuis nombre de tag) : $VERSION_CODE" | ||||
|           echo "🏷️ versionName (depuis nom du tag)    : $TAG" | ||||
|  | ||||
|           # Mise à jour dans build.gradle | ||||
|           sed -i "s/versionCode [0-9]\+/versionCode $VERSION_CODE/" "$BUILD_GRADLE_FILE" | ||||
|           sed -i "s/versionName \".*\"/versionName \"$TAG\"/" "$BUILD_GRADLE_FILE" | ||||
|  | ||||
|       - name: 🛠️ Compilation signée de l’application (APK) | ||||
|         env: | ||||
|           KEYSTORE_FILE: ${{ steps.decode-keystore.outputs.keystore_path }} | ||||
|           KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | ||||
|           KEY_ALIAS: ${{ secrets.KEYSTORE_ALIAS }} | ||||
|           KEY_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | ||||
|         run: | | ||||
|           ./gradlew assembleRelease \ | ||||
|             -Pandroid.injected.signing.store.file=$KEYSTORE_FILE \ | ||||
|             -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \ | ||||
|             -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ | ||||
|             -Pandroid.injected.signing.key.password=$KEY_PASSWORD | ||||
|  | ||||
|       - name: 💾 Commit des modifications de version | ||||
|         run: | | ||||
|           TAG="${{ github.event.inputs.tag }}" | ||||
|           git add app/build.gradle | ||||
|           git commit -m "🔖 Bump versionCode et versionName pour $TAG" | ||||
|           git push origin HEAD | ||||
|  | ||||
|       - name: 🏷️ Créer le tag | ||||
|         run: | | ||||
|           TAG="${{ github.event.inputs.tag }}" | ||||
|           git tag "$TAG" | ||||
|           git push origin "$TAG" | ||||
|  | ||||
|       - name: 🏷️ Renommer l’APK avec le nom de l’application et le tag | ||||
|         id: renommer-apk | ||||
|         run: | | ||||
|           APP_NAME=${{ steps.extraire-info-gradle.outputs.app_name }} | ||||
|           TAG=${{ github.event.inputs.tag }} | ||||
|           APK_DIR="app/build/outputs/apk/release" | ||||
|  | ||||
|           APKs="" | ||||
|           for apk in "$APK_DIR"/*.apk; do | ||||
|             BASENAME=$(basename "$apk") | ||||
|             SUFFIX=${BASENAME#app} | ||||
|             NEW_NAME="${APP_NAME}${SUFFIX%\.apk}_${TAG}.apk" | ||||
|             mv "$apk" "$APK_DIR/$NEW_NAME" | ||||
|             APKs+=" $APK_DIR/$NEW_NAME" | ||||
|           done | ||||
|           echo "📦 Liste des apks : $APKs" | ||||
|           echo "apk_files=$APKs" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: 🔖 Détection du tag précédent | ||||
|         id: tag-precedent | ||||
|         run: | | ||||
| @ -78,8 +172,8 @@ jobs: | ||||
|               LOG=$(git log "$PREV_TAG"..HEAD --oneline) | ||||
|             fi | ||||
|           fi | ||||
|           echo "$LOG" | ||||
|  | ||||
|           echo "$LOG" | ||||
|           echo "modifications<<EOF" >> $GITHUB_OUTPUT | ||||
|           echo "$LOG" >> $GITHUB_OUTPUT | ||||
|           echo "EOF" >> $GITHUB_OUTPUT | ||||
| @ -109,82 +203,12 @@ jobs: | ||||
|  | ||||
|           ID_RELEASE=$(echo "$REPONSE" | jq -r .id) | ||||
|           if [ -z "$ID_RELEASE" ] || [ "$ID_RELEASE" = "null" ]; then | ||||
|             echo "❌ Échec : impossible de récupérer l’ID de la version depuis Gitea." | ||||
|             echo "❌ Échec : impossible de récupérer l’ID de la publication depuis Gitea." | ||||
|             exit 1 | ||||
|           fi | ||||
|           echo "id_release=$ID_RELEASE" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: 🔍️ Extraire les informations de l’application | ||||
|         id: extraire-info-gradle | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         run: | | ||||
|           APP_NAME=$(grep 'rootProject.name' settings.gradle | sed -E 's/.*= "(.*)"/\1/') | ||||
|           COMPILE_SDK_VERSION=$(grep 'compileSdk' app/build.gradle | grep -oE '[0-9]+') | ||||
|  | ||||
|           { | ||||
|             echo "app_name=$APP_NAME" | ||||
|             echo "sdk=$COMPILE_SDK_VERSION" | ||||
|           } | tee -a $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: ☕ Configurer Java | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         uses: actions/setup-java@v3 | ||||
|         with: | ||||
|           distribution: 'temurin' | ||||
|           java-version: '17' | ||||
|  | ||||
|       - name: 🤖 Installer Android SDK | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         uses: android-actions/setup-android@v3 | ||||
|         with: | ||||
|           api-level: ${{ steps.extraire-info-gradle.outputs.sdk }} | ||||
|           build-tools-version: ${{ steps.extraire-info-gradle.outputs.sdk }}.0.3 | ||||
|  | ||||
|       - name: 🔐 Récupérer et décoder le keystore | ||||
|         id: decode-keystore | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         env: | ||||
|           KEYSTORE_B64: ${{ secrets.KEYSTORE_B64 }} | ||||
|         run: | | ||||
|           echo "$KEYSTORE_B64" | base64 -d > app/keystore.jks | ||||
|           ls -1 app/keystore.jks | ||||
|           echo "keystore_path=$(realpath app/keystore.jks)" >> $GITHUB_OUTPUT | ||||
|  | ||||
|       - name: 🛠️ Compilation signée de l’application (APK) | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         env: | ||||
|           KEYSTORE_FILE: ${{ steps.decode-keystore.outputs.keystore_path }} | ||||
|           KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | ||||
|           KEY_ALIAS: ${{ secrets.KEYSTORE_ALIAS }} | ||||
|           KEY_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | ||||
|         run: | | ||||
|           ./gradlew assembleRelease \ | ||||
|             -Pandroid.injected.signing.store.file=$KEYSTORE_FILE \ | ||||
|             -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \ | ||||
|             -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ | ||||
|             -Pandroid.injected.signing.key.password=$KEY_PASSWORD | ||||
|  | ||||
|       - name: 🏷️ Renommer l’APK avec le nom de l’application et le tag | ||||
|         id: renommer-apk | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         run: | | ||||
|           APP_NAME=${{ steps.extraire-info-gradle.outputs.app_name }} | ||||
|           TAG=${{ github.event.inputs.tag }} | ||||
|           APK_DIR="app/build/outputs/apk/release" | ||||
|  | ||||
|           APKs="" | ||||
|           for apk in "$APK_DIR"/*.apk; do | ||||
|             BASENAME=$(basename "$apk") | ||||
|             SUFFIX=${BASENAME#app} | ||||
|             NEW_NAME="${APP_NAME}${SUFFIX%\.apk}_${TAG}.apk" | ||||
|             mv "$apk" "$APK_DIR/$NEW_NAME" | ||||
|             APKs+=" $APK_DIR/$NEW_NAME" | ||||
|           done | ||||
|           echo "📦 Liste des apks : $APKs" | ||||
|           echo "apk_files=$APKs" >> $GITHUB_OUTPUT | ||||
|           echo "id_release=$ID_RELEASE" >> $GITHUB_OUTPUT    | ||||
|  | ||||
|       - name: 📤 Ajout de l’APK sur la publication | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         env: | ||||
|           REGISTRY_URL: ${{ vars.REGISTRY_URL }} | ||||
|           REPO: ${{ vars.REGISTRY_REPOSITORY }} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 lionel
					lionel