diff --git a/.gitea/workflows/publish.yml b/.gitea/workflows/publish.yml index 98249ea..098b6b2 100644 --- a/.gitea/workflows/publish.yml +++ b/.gitea/workflows/publish.yml @@ -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 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 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<> $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 }}