MaJ workflow publication pour versionName et versionCode

This commit is contained in:
lionel
2025-07-14 22:56:10 +02:00
parent 52ac2c4419
commit 1edbf0bd43

View File

@ -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 lAPK ?'
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 lapplication
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 X.Y
VALID_TAGS=$(git tag -l '[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 lapplication (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 lAPK avec le nom de lapplication 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 lID de la version depuis Gitea."
echo "❌ Échec : impossible de récupérer lID de la publication depuis Gitea."
exit 1
fi
echo "id_release=$ID_RELEASE" >> $GITHUB_OUTPUT
- name: 🔍️ Extraire les informations de lapplication
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 lapplication (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 lAPK avec le nom de lapplication 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 lAPK sur la publication
if: ${{ github.event.inputs.build_apk == 'oui' }}
env:
REGISTRY_URL: ${{ vars.REGISTRY_URL }}
REPO: ${{ vars.REGISTRY_REPOSITORY }}