Add CI workflow
This commit is contained in:
		
							
								
								
									
										186
									
								
								.gitea/workflows/publish.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								.gitea/workflows/publish.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,186 @@ | ||||
| name: 🚀 Créer une nouvelle version | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       tag: | ||||
|         description: 'Nom du tag (ex: v1.2.3)' | ||||
|         required: true | ||||
|       branche: | ||||
|         description: 'Branche cible (ex: master)' | ||||
|         default: 'master' | ||||
|         required: true | ||||
|       build_apk: | ||||
|         description: 'Compiler et publier l’APK ?' | ||||
|         required: true | ||||
|         default: 'oui' | ||||
|         type: choice | ||||
|         options: | ||||
|           - oui | ||||
|           - non | ||||
|  | ||||
|  | ||||
| jobs: | ||||
|   release: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - name: 📦 Cloner le dépôt | ||||
|         uses: actions/checkout@v3 | ||||
|         with: | ||||
|           fetch-depth: 0  # important pour récupérer tout l'historique | ||||
|  | ||||
|       - name: 🔧 Préparation de Git (tags) | ||||
|         run: git fetch --tags | ||||
|  | ||||
|       - name: 🔖 Détection du tag précédent | ||||
|         id: tag-precedent | ||||
|         run: | | ||||
|           CURRENT_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="" | ||||
|           FOUND=false | ||||
|  | ||||
|           for tag in $TAGS; do | ||||
|             if [ "$FOUND" = true ]; then | ||||
|               PREV_TAG=$tag | ||||
|               break | ||||
|             fi | ||||
|             if [ "$tag" = "$CURRENT_TAG" ]; then | ||||
|               FOUND=true | ||||
|             fi | ||||
|           done | ||||
|  | ||||
|           echo "tag_precedent=$PREV_TAG" >> $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éer le tag si nécessaire | ||||
|         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." | ||||
|           else | ||||
|             git config user.name "github-actions" | ||||
|             git config user.email "github-actions@github.com" | ||||
|             git tag "$TAG" | ||||
|             git push origin "$TAG" | ||||
|           fi | ||||
|  | ||||
|       - name: 📦 Création de la version 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 }}" | ||||
|           BRANCHE="${{ github.event.inputs.branche }}" | ||||
|            | ||||
|           # Échappement du contenu pour JSON | ||||
|           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\", | ||||
|               \"target\": \"$BRANCHE\", | ||||
|               \"name\": \"Version $TAG_NAME\", | ||||
|               \"body\": $ESCAPED_DESCRIPTION | ||||
|             }") | ||||
|  | ||||
|           echo "$REPONSE" | ||||
|  | ||||
|           ID_RELEASE=$(echo "$REPONSE" | jq -r .id) | ||||
|           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" >> $GITHUB_OUTPUT | ||||
|           echo "compile_sdk_version=$COMPILE_SDK_VERSION" >> $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.compile_sdk_version }} | ||||
|           build-tools-version: ${{ steps.extraire-info-gradle.outputs.compile_sdk_version }}.0.3 | ||||
|  | ||||
|       - name: 🛠️ Compilation de l’application (APK) | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         run: ./gradlew assembleRelease | ||||
|  | ||||
|       - 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")                          # ex: app-release-unsigned.apk | ||||
|             SUFFIX=${BASENAME#app}                              # ex: -release-unsigned.apk | ||||
|             NEW_NAME="${APP_NAME}${SUFFIX%\.apk}_${TAG}.apk"   # ex: MonApp-release-unsigned_v1.2.3.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: 📤 Téléversement de l’APK dans la version | ||||
|         if: ${{ github.event.inputs.build_apk == 'oui' }} | ||||
|         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 | ||||
		Reference in New Issue
	
	Block a user
	 lionel
					lionel