Files
androidApp/.gitea/workflows/publish.yml

223 lines
7.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

on:
workflow_dispatch:
inputs:
tag:
description: 'Numéro de version (ex: v1.2.3)'
required: true
jobs:
release:
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" =~ ^v[0-9]+\.[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
run: |
git fetch --tags
git config user.name "github-actions"
git config user.email "."
- 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à."
exit 1
else
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 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 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: |
TARGET_TAG="${{ github.event.inputs.tag }}"
TAGS=$(git tag --sort=creatordate)
if [ -z "$TAGS" ]; then
echo "Aucun tag existant détecté."
echo "tag_precedent=" >> $GITHUB_OUTPUT
exit 0
fi
PREV_TAG=""
for tag in $TAGS; do
if [ "$tag" != "$TARGET_TAG" ]; then
PREV_TAG=$tag
else
break
fi
done
echo "tag_precedent=$PREV_TAG" | tee -a $GITHUB_OUTPUT
- name: 📝 Liste des modifications
id: changelog
run: |
PREV_TAG="${{ steps.tag-precedent.outputs.tag_precedent }}"
TARGET_TAG="${{ github.event.inputs.tag }}"
if [ -z "$PREV_TAG" ]; then
LOG=$(git log --oneline)
else
if git rev-parse "$TARGET_TAG" >/dev/null 2>&1; then
LOG=$(git log "$PREV_TAG".."$TARGET_TAG" --oneline)
else
LOG=$(git log "$PREV_TAG"..HEAD --oneline)
fi
fi
echo "$LOG"
echo "modifications<<EOF" >> $GITHUB_OUTPUT
echo "$LOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: 📦 Création de la publication sur Gitea
id: creation-release
env:
REGISTRY_URL: ${{ vars.REGISTRY_URL }}
REPO: ${{ vars.REGISTRY_REPOSITORY }}
TOKEN: ${{ secrets.REGISTRY_PASSWORD }}
COMMITS: ${{ steps.changelog.outputs.modifications }}
run: |
TAG_NAME="${{ github.event.inputs.tag }}"
DESCRIPTION="Changelog:"$'\n'"$COMMITS"
ESCAPED_DESCRIPTION=$(printf '%s\n' "$DESCRIPTION" | jq -Rsa .)
REPONSE=$(curl -s -X POST "https://$REGISTRY_URL/api/v1/repos/$REPO/releases" \
-H "Content-Type: application/json" \
-H "Authorization: token $TOKEN" \
-d "{
\"tag_name\": \"$TAG_NAME\",
\"name\": \"Version $TAG_NAME\",
\"body\": $ESCAPED_DESCRIPTION
}")
echo "$REPONSE"
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 publication depuis Gitea."
exit 1
fi
echo "id_release=$ID_RELEASE" >> $GITHUB_OUTPUT
- name: 📤 Ajout de lAPK sur la publication
env:
REGISTRY_URL: ${{ vars.REGISTRY_URL }}
REPO: ${{ vars.REGISTRY_REPOSITORY }}
TOKEN: ${{ secrets.REGISTRY_PASSWORD }}
RELEASE_ID: ${{ steps.creation-release.outputs.id_release }}
run: |
for apk in ${{ steps.renommer-apk.outputs.apk_files }}; do
curl -s -X POST "https://$REGISTRY_URL/api/v1/repos/$REPO/releases/$RELEASE_ID/assets" \
-H "Authorization: token $TOKEN" \
-F attachment=@"$apk"
done