From 83fa6efcd6e45035802f6553ddcbc708fb39df63 Mon Sep 17 00:00:00 2001 From: scith Date: Sat, 14 Jan 2017 04:00:27 +0100 Subject: [PATCH 01/12] Calcul du niveau MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ces modifications rajoutent les niveaux: https://forum.yunohost.org/t/redaction-de-regles-pour-passer-une-app-en-officielle/2256/26 Chaque niveau peut être testé par package_check (option "auto") ou écrasé (1 ou 0). Les niveaux manuels (4,8,9,10) doivent obligatoirement être définis (1 ou 0) car ils ne sont pas testables par package_check. Le script affiche le niveau maximal ainsi que l'état de chaque niveau. --- package_check.sh | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/package_check.sh b/package_check.sh index 7d8380a..9883f83 100755 --- a/package_check.sh +++ b/package_check.sh @@ -439,6 +439,74 @@ TEST_RESULTS () { fi ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note" ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/21\n\n" "white" "bold" + + # Affiche le niveau final + ECHO_FORMAT "Niveau de l'application: $level\n" + for i in {1..10}; do + ECHO_FORMAT "\t Niveau $i: ${level[i]}\n" + done +} + +# Cette fonctionne détermine le niveau final de l'application, en prenant en compte d'éventuels forçages +APP_LEVEL () { + level=0 # Initialise le niveau final à 0 + + # Niveau 1: L'application ne s'installe pas ou ne fonctionne pas après installation. + if [ "${level[1]}" == "auto" ]; then + if [ "$GLOBAL_CHECK_SETUP" -eq 1 ] && [ "$GLOBAL_CHECK_REMOVE" -eq 1 ] + then level[1]=1 ; else level[1]=0 ; fi + fi + + # Niveau 2: L'application s'installe et se désinstalle dans toutes les configurations communes. + if [ "${level[2]}" == "auto" ]; then + if [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ + [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] + then level[2]=1 ; else level[2]=0 ; fi + fi + + # Niveau 3: L'application supporte l'upgrade depuis une ancienne version du package. + if [ "${level[3]}" == "auto" ]; then + if [ "$GLOBAL_CHECK_UPGRADE" -eq 1 ] + then level[3]=1 ; else level[3]=0 ; fi + fi + + # Niveau 4: L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement + + # Niveau 5: Aucune erreur dans package_linter. + if [ "${level[5]}" == "auto" ]; then + if [ "$GLOBAL_LINTER" -eq 1 ] + then level[5]=1 ; else level[5]=0 ; fi + fi + + # Niveau 6: L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. + if [ "${level[6]}" == "auto" ]; then + if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ] && [ "$GLOBAL_CHECK_RESTORE" -eq 1 ] + then level[6]=1 ; else level[6]=0 ; fi + fi + + # Niveau 7: Aucune erreur dans package check. + if [ "${level[7]}" == "auto" ]; then + if [ "$note" -ge 20 ] + then level[7]=1 ; else level[7]=0 ; fi + fi + + # Niveau 8: L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement + + # Niveau 9: L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement + + # Niveau 10: L'application est jugée parfaite. -- Doit être vérifié manuellement + + # Calcule le niveau final + for i in {1..10}; do + if [ "${level[i]}" -eq 1 ]; then level=$i + else break; fi + done + } INIT_VAR() { @@ -497,6 +565,17 @@ INIT_VAR() { fail_download_source=0 port_already_use=0 final_path_already_use=0 + + level[1]="auto" # L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check + level[2]="auto" # L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check + level[3]="auto" # L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check + level[4]=0 # L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement + level[5]="auto" # Aucune erreur dans package_linter. -- Peut être vérifié par package_check + level[6]="auto" # L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. -- Peut être vérifié par package_check + level[7]="auto" # Aucune erreur dans package check. -- Peut être vérifié par package_check + level[8]=0 # L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement + level[9]=0 # L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement + level[10]=0 # L'application est jugée parfaite. -- Doit être vérifié manuellement } INIT_VAR @@ -744,6 +823,7 @@ TESTING_PROCESS if [ "$no_lxc" -eq 0 ]; then LXC_TURNOFF fi +APP_LEVEL TEST_RESULTS echo "Le log complet des installations et suppressions est disponible dans le fichier $COMPLETE_LOG" From e8de4f5b57b4ce30716471df8bd6afbc736cdf4c Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Sun, 15 Jan 2017 23:13:20 +0100 Subject: [PATCH 02/12] Quelques modifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correction pour le niveau 1, c'est une erreur du côté du testing_process avec le test NO_URL (Je teste sur minidlna). Il ne changeait pas la bonne variable. Les variables GLOBAL_CHECK_SETUP et GLOBAL_CHECK_REMOVE sont un vrai casse tête ! --- sub_scripts/testing_process.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sub_scripts/testing_process.sh b/sub_scripts/testing_process.sh index de2f8bc..0b59b13 100644 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -306,7 +306,7 @@ CHECK_SETUP_NO_URL () { note=$((note+1)) fi GLOBAL_CHECK_SETUP=1 # Installation réussie - GLOBAL_CHECK_SUB_DIR=1 + GLOBAL_CHECK_ROOT=1 else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then @@ -327,7 +327,8 @@ CHECK_SETUP_NO_URL () { if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then note=$((note+1)) fi - GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression réussie + GLOBAL_CHECK_REMOVE=1 # Suppression réussie + GLOBAL_CHECK_REMOVE_ROOT=1 else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then From 37249a1d334962f06f770c28f38625a1f7f833de Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Mon, 16 Jan 2017 00:33:53 +0100 Subject: [PATCH 03/12] Tests multiples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pas mal de petites modif. Déjà j'ai pas réécrit tout ton code, je l'ai déplacé avant TEST_RESULTS pour l'appeler au début de la fonction. Ça évite d'appeler la fonction 2 fois, puisqu'il y a 2 appel de TEST_RESULTS. J'ai modifié le résultat final, ligne 505-513 pour afficher le 1 en gras. Juste pour le mettre en avant. Ainsi que le résultat global. J'ai ajouté la gestion des tests multiples, puisque que le check process peut comporter plusieurs séries de tests successifs. Donc un niveau réussi est marqué à 2, pour le dissocier d'un forçage à 1. (C'est pour cette raison aussi que les résultats sont affichés en dur, afficher 1 même si c'est 2). Le niveau 1 est inchangé, car ces tests doivent toujours être fait. Le niveau 2 ne comptant que les échec, il ne change pas non plus. Par contre les suivants sont modifié au niveau du if. Si le niveau est à 2, il a été validé avant, il passe à 0 seulement si les tests échouent. J'ai testé ça, ça marche bien. Je pense qu'on peux merger même sans le parsing du check_process (il y a peu de check_process en circulation...) Merci pour ce boulot scith, ça va vraiment aider! --- package_check.sh | 136 ++++++++++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 66 deletions(-) diff --git a/package_check.sh b/package_check.sh index 9883f83..10c5af0 100755 --- a/package_check.sh +++ b/package_check.sh @@ -231,7 +231,68 @@ fi +# Cette fonctionne détermine le niveau final de l'application, en prenant en compte d'éventuels forçages +APP_LEVEL () { + level=0 # Initialise le niveau final à 0 + # Niveau 1: L'application ne s'installe pas ou ne fonctionne pas après installation. + if [ "${level[1]}" == "auto" ] || [ "${level[1]}" -eq 2 ]; then + if [ "$GLOBAL_CHECK_SETUP" -eq 1 ] && [ "$GLOBAL_CHECK_REMOVE" -eq 1 ] + then level[1]=2 ; else level[1]=0 ; fi + fi + + # Niveau 2: L'application s'installe et se désinstalle dans toutes les configurations communes. + if [ "${level[2]}" == "auto" ] || [ "${level[2]}" -eq 2 ]; then + if [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ + [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] + then level[2]=2 ; else level[2]=0 ; fi + fi + + # Niveau 3: L'application supporte l'upgrade depuis une ancienne version du package. + if [ "${level[3]}" == "auto" ] || [ "${level[3]}" == "2" ]; then + if [ "$GLOBAL_CHECK_UPGRADE" -eq 1 ] || ( [ "${level[3]}" == "2" ] && [ "$GLOBAL_CHECK_UPGRADE" -ne -1 ] ) + then level[3]=2 ; else level[3]=0 ; fi + fi + + # Niveau 4: L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement + + # Niveau 5: Aucune erreur dans package_linter. + if [ "${level[5]}" == "auto" ] || [ "${level[5]}" == "2" ]; then + if [ "$GLOBAL_LINTER" -eq 1 ] || ( [ "${level[5]}" == "2" ] && [ "$GLOBAL_LINTER" -ne -1 ] ) + then level[5]=2 ; else level[5]=0 ; fi + fi + + # Niveau 6: L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. + if [ "${level[6]}" == "auto" ] || [ "${level[6]}" == "2" ]; then + if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ] && [ "$GLOBAL_CHECK_RESTORE" -eq 1 ] || ( [ "${level[6]}" == "2" ] && [ "$GLOBAL_CHECK_BACKUP" -ne -1 ] && [ "$GLOBAL_CHECK_RESTORE" -ne -1 ] ) + then level[6]=2 ; else level[6]=0 ; fi + fi + + # Niveau 7: Aucune erreur dans package check. + if [ "${level[7]}" == "auto" ] || [ "${level[7]}" == "2" ]; then + if [ "$note" -ge 20 ] + then level[7]=2 ; else level[7]=0 ; fi + fi + + # Niveau 8: L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement + + # Niveau 9: L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement + + # Niveau 10: L'application est jugée parfaite. -- Doit être vérifié manuellement + + # Calcule le niveau final + for i in {1..10}; do + if [ "${level[i]}" -ge 1 ]; then level=$i + else break; fi + done +} + TEST_RESULTS () { + APP_LEVEL ECHO_FORMAT "\n\nPackage linter: " if [ "$GLOBAL_LINTER" -eq 1 ]; then ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" @@ -441,74 +502,18 @@ TEST_RESULTS () { ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/21\n\n" "white" "bold" # Affiche le niveau final - ECHO_FORMAT "Niveau de l'application: $level\n" - for i in {1..10}; do - ECHO_FORMAT "\t Niveau $i: ${level[i]}\n" + ECHO_FORMAT "Niveau de l'application: $level\n" "white" "bold" + for i in {1..10} + do + ECHO_FORMAT "\t Niveau $i: " + if [ "${level[i]}" -ge 1 ]; then + ECHO_FORMAT "1\n" "white" "bold" + else + ECHO_FORMAT "0\n" + fi done } -# Cette fonctionne détermine le niveau final de l'application, en prenant en compte d'éventuels forçages -APP_LEVEL () { - level=0 # Initialise le niveau final à 0 - - # Niveau 1: L'application ne s'installe pas ou ne fonctionne pas après installation. - if [ "${level[1]}" == "auto" ]; then - if [ "$GLOBAL_CHECK_SETUP" -eq 1 ] && [ "$GLOBAL_CHECK_REMOVE" -eq 1 ] - then level[1]=1 ; else level[1]=0 ; fi - fi - - # Niveau 2: L'application s'installe et se désinstalle dans toutes les configurations communes. - if [ "${level[2]}" == "auto" ]; then - if [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ - [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ - [ "$GLOBAL_CHECK_ROOT" -ne -1 ] && \ - [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ - [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ - [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ - [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] - then level[2]=1 ; else level[2]=0 ; fi - fi - - # Niveau 3: L'application supporte l'upgrade depuis une ancienne version du package. - if [ "${level[3]}" == "auto" ]; then - if [ "$GLOBAL_CHECK_UPGRADE" -eq 1 ] - then level[3]=1 ; else level[3]=0 ; fi - fi - - # Niveau 4: L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement - - # Niveau 5: Aucune erreur dans package_linter. - if [ "${level[5]}" == "auto" ]; then - if [ "$GLOBAL_LINTER" -eq 1 ] - then level[5]=1 ; else level[5]=0 ; fi - fi - - # Niveau 6: L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. - if [ "${level[6]}" == "auto" ]; then - if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ] && [ "$GLOBAL_CHECK_RESTORE" -eq 1 ] - then level[6]=1 ; else level[6]=0 ; fi - fi - - # Niveau 7: Aucune erreur dans package check. - if [ "${level[7]}" == "auto" ]; then - if [ "$note" -ge 20 ] - then level[7]=1 ; else level[7]=0 ; fi - fi - - # Niveau 8: L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement - - # Niveau 9: L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement - - # Niveau 10: L'application est jugée parfaite. -- Doit être vérifié manuellement - - # Calcule le niveau final - for i in {1..10}; do - if [ "${level[i]}" -eq 1 ]; then level=$i - else break; fi - done - -} - INIT_VAR() { GLOBAL_LINTER=0 GLOBAL_CHECK_SETUP=0 @@ -823,7 +828,6 @@ TESTING_PROCESS if [ "$no_lxc" -eq 0 ]; then LXC_TURNOFF fi -APP_LEVEL TEST_RESULTS echo "Le log complet des installations et suppressions est disponible dans le fichier $COMPLETE_LOG" From f2462856fcfa15a33d6754850f2e8190f74a835c Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Mon, 16 Jan 2017 15:47:46 +0100 Subject: [PATCH 04/12] =?UTF-8?q?Init=20level=20s=C3=A9par=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avec un seul appel avant de parser le check_process --- package_check.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package_check.sh b/package_check.sh index 10c5af0..c186a36 100755 --- a/package_check.sh +++ b/package_check.sh @@ -570,7 +570,9 @@ INIT_VAR() { fail_download_source=0 port_already_use=0 final_path_already_use=0 +} +INIT_LEVEL() { level[1]="auto" # L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check level[2]="auto" # L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check level[3]="auto" # L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check @@ -584,6 +586,7 @@ INIT_VAR() { } INIT_VAR +INIT_LEVEL echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse if [ "$no_lxc" -eq 0 ]; then From 52969ffff6478e8db8e69ad1f379f328f50d0520 Mon Sep 17 00:00:00 2001 From: scith Date: Tue, 17 Jan 2017 14:31:30 +0100 Subject: [PATCH 05/12] Parsing de check_process --- README.md | 26 ++++++++++++++++++++++++++ check_process | 11 +++++++++++ package_check.sh | 16 ++++++++++++++-- 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f2f46b3..cc45848 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,17 @@ package_check/package_check.sh APP_ynh fail_download_source=0 port_already_use=1 (XXXX) final_path_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 ``` ### `;; Nom du test` Nom du scénario de test qui sera effectué. @@ -117,6 +128,21 @@ Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à Le numéro de port doit alors être noté entre parenthèse, il servira au test de port. - `final_path_already_use`: *Non implémenté pour le moment...* +### `;;; Levels` +Permet de choisir comment [chaque niveau](https://forum.yunohost.org/t/redaction-de-regles-pour-passer-une-app-en-officielle/2256/26) est déterminé. +Chaque niveau fixé à auto sera déterminé par le script. Il est également possible de fixer le niveau à 1 ou à 0 pour respectivement le valider ou l'invalider. +Il est à noter que les niveaux 4, 8, 9 et 10 ne peuvent être fixés à "auto" car ils ne peuvent être testés par le script et nécessitent une vérification manuelle. +- Niveau 1 : L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check +- Niveau 2 : L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check +- Niveau 3 : L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check +- Niveau 4 : L'application prend en charge de LDAP et/ou HTTP Auth. -- Doit être vérifié manuellement +- Niveau 5 : Aucune erreur dans package_linter. -- Peut être vérifié par package_check +- Niveau 6 : L'application peut-être sauvegardée et restaurée sans erreurs sur la même machine ou une autre. -- Peut être vérifié par package_check +- Niveau 7 : Aucune erreur dans package check. -- Peut être vérifié par package_check +- Niveau 8 : L'application respecte toutes les YEP recommandées. -- Doit être vérifié manuellement +- Niveau 9 : L'application respecte toutes les YEP optionnelles. -- Doit être vérifié manuellement +- Niveau 10 : L'application est jugée parfaite. -- Doit être vérifié manuellement + --- Le script `package_check.sh` accepte 6 arguments en plus du package à tester. - `--bash-mode`: Rend le script autonome. Aucune intervention de l'utilisateur ne sera nécessaire. diff --git a/check_process b/check_process index 353c504..421c303 100644 --- a/check_process +++ b/check_process @@ -27,3 +27,14 @@ fail_download_source=0 port_already_use=1 (66) final_path_already_use=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 diff --git a/package_check.sh b/package_check.sh index c186a36..e58bdca 100755 --- a/package_check.sh +++ b/package_check.sh @@ -538,6 +538,7 @@ INIT_VAR() { IN_PROCESS=0 MANIFEST=0 CHECKS=0 + IN_LEVELS=1 auto_remove=1 install_pass=0 note=0 @@ -607,7 +608,12 @@ then # Si le fichier check_process est trouvé if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove auto_remove=$(echo "$LIGNE" | cut -d '=' -f2) fi - if echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test + if echo "$LIGNE" | grep -q "^;;; Levels"; then # Définition des variables de niveaux + IN_PROCESS=0 + MANIFEST=0 + CHECKS=0 + IN_LEVELS=1 + elif echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario. TESTING_PROCESS TEST_RESULTS @@ -620,8 +626,14 @@ then # Si le fichier check_process est trouvé IN_PROCESS=1 MANIFEST=0 CHECKS=0 + IN_LEVELS=0 fi - if [ "$IN_PROCESS" -eq 1 ] + if [ "$IN_LEVELS" -eq 1 ] + then + if echo "$LIGNE" | grep -q "Level "; then # Définition d'un niveau + level[$(echo "$LIGNE" | cut -d '=' -f1 | cut -d ' ' -f2)]=$(echo "$LIGNE" | cut -d '=' -f2) + fi + elif [ "$IN_PROCESS" -eq 1 ] then # Analyse des arguments du scenario de test if echo "$LIGNE" | grep -q "^; Manifest"; then # Arguments du manifest MANIFEST=1 From 28c1b6efb2c074b3b8e507809fa4a53951677d46 Mon Sep 17 00:00:00 2001 From: scith Date: Tue, 17 Jan 2017 16:31:53 +0100 Subject: [PATCH 06/12] Niveau 4 optionnel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si le niveau 4 est à 0, il est ignoré (par exemple si l'app ne permet pas LDPA/SSO). Ainsi, le niveau 4 reste à 0 mais cela n'empêche pas l'app d'obtenir un niveau plus élevé. --- package_check.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package_check.sh b/package_check.sh index e58bdca..6161727 100755 --- a/package_check.sh +++ b/package_check.sh @@ -287,7 +287,7 @@ APP_LEVEL () { # Calcule le niveau final for i in {1..10}; do if [ "${level[i]}" -ge 1 ]; then level=$i - else break; fi + elif [ $i -ne 4 ]; then break; fi done } From 9b50654505767a480309f5a196ac65fc5590c346 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 17 Jan 2017 16:38:12 +0100 Subject: [PATCH 07/12] =?UTF-8?q?Parsing=20level=20dissoci=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sans faire une fonction j'ai juste dissocié le parsing du level du reste de la boucle. Mais j'ai pas testé :D C'est en cours... --- package_check.sh | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/package_check.sh b/package_check.sh index 6161727..82dae23 100755 --- a/package_check.sh +++ b/package_check.sh @@ -538,7 +538,6 @@ INIT_VAR() { IN_PROCESS=0 MANIFEST=0 CHECKS=0 - IN_LEVELS=1 auto_remove=1 install_pass=0 note=0 @@ -598,6 +597,19 @@ if [ "$check_file" -eq 1 ] then # Si le fichier check_process est trouvé ## Parsing du fichier check_process de manière séquentielle. echo "Parsing du fichier check_process" + IN_LEVELS=0 + while read <&4 LIGNE + do # Parse les indications de niveaux d'app avant de parser les tests + if echo "$LIGNE" | grep -q "^;;; Levels"; then # Définition des variables de niveaux + IN_LEVELS=1 + fi + if [ "$IN_LEVELS" -eq 1 ] + then + if echo "$LIGNE" | grep -q "Level "; then # Définition d'un niveau + level[$(echo "$LIGNE" | cut -d '=' -f1 | cut -d ' ' -f2)]=$(echo "$LIGNE" | cut -d '=' -f2) + fi + fi + done 4< "$APP_CHECK/check_process" while read <&4 LIGNE do LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne @@ -608,12 +620,7 @@ then # Si le fichier check_process est trouvé if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove auto_remove=$(echo "$LIGNE" | cut -d '=' -f2) fi - if echo "$LIGNE" | grep -q "^;;; Levels"; then # Définition des variables de niveaux - IN_PROCESS=0 - MANIFEST=0 - CHECKS=0 - IN_LEVELS=1 - elif echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test + if echo "$LIGNE" | grep -q "^;;" && ! echo "$LIGNE" | grep -q "^;;;"; then # Début d'un scénario de test if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario. TESTING_PROCESS TEST_RESULTS @@ -628,12 +635,7 @@ then # Si le fichier check_process est trouvé CHECKS=0 IN_LEVELS=0 fi - if [ "$IN_LEVELS" -eq 1 ] - then - if echo "$LIGNE" | grep -q "Level "; then # Définition d'un niveau - level[$(echo "$LIGNE" | cut -d '=' -f1 | cut -d ' ' -f2)]=$(echo "$LIGNE" | cut -d '=' -f2) - fi - elif [ "$IN_PROCESS" -eq 1 ] + if [ "$IN_PROCESS" -eq 1 ] then # Analyse des arguments du scenario de test if echo "$LIGNE" | grep -q "^; Manifest"; then # Arguments du manifest MANIFEST=1 From 6448c4f6f6bb71112c2e85aba77b9bea142f0fd9 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 17 Jan 2017 16:52:41 +0100 Subject: [PATCH 08/12] Ignore les lignes de commentaires --- package_check.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package_check.sh b/package_check.sh index 82dae23..764c755 100755 --- a/package_check.sh +++ b/package_check.sh @@ -600,6 +600,10 @@ then # Si le fichier check_process est trouvé IN_LEVELS=0 while read <&4 LIGNE do # Parse les indications de niveaux d'app avant de parser les tests + LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne + if [ "${LIGNE:0:1}" == "#" ]; then + continue # Ligne de commentaire, ignorée. + fi if echo "$LIGNE" | grep -q "^;;; Levels"; then # Définition des variables de niveaux IN_LEVELS=1 fi From 22939651b29588f4eaa7dd89ab2884a5fb499b82 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 17 Jan 2017 17:24:09 +0100 Subject: [PATCH 09/12] =?UTF-8?q?Exception=20auto=20mal=20plac=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package_check.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package_check.sh b/package_check.sh index 6161727..4e94143 100755 --- a/package_check.sh +++ b/package_check.sh @@ -286,6 +286,9 @@ APP_LEVEL () { # Calcule le niveau final for i in {1..10}; do + if [ "${level[i]}" == "auto" ]; then + level[i]=0 # Si des levels sont encore à auto, c'est une erreur de syntaxe dans le check_process, ils sont fixé à 0. + fi if [ "${level[i]}" -ge 1 ]; then level=$i elif [ $i -ne 4 ]; then break; fi done From 2c377991b9cc9bcf41e35ae0950a9e99b776d353 Mon Sep 17 00:00:00 2001 From: scith Date: Tue, 17 Jan 2017 18:45:01 +0100 Subject: [PATCH 10/12] Ajout de l'option "na" (non applicable) Cette option permet d'ignorer un niveau dans le calcul du niveau final --- README.md | 4 ++-- package_check.sh | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cc45848..3700dc4 100644 --- a/README.md +++ b/README.md @@ -130,8 +130,8 @@ Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à ### `;;; Levels` Permet de choisir comment [chaque niveau](https://forum.yunohost.org/t/redaction-de-regles-pour-passer-une-app-en-officielle/2256/26) est déterminé. -Chaque niveau fixé à auto sera déterminé par le script. Il est également possible de fixer le niveau à 1 ou à 0 pour respectivement le valider ou l'invalider. -Il est à noter que les niveaux 4, 8, 9 et 10 ne peuvent être fixés à "auto" car ils ne peuvent être testés par le script et nécessitent une vérification manuelle. +Chaque niveau fixé à *auto* sera déterminé par le script. Il est également possible de fixer le niveau à *1* ou à *0* pour respectivement le valider ou l'invalider. +Il est à noter que les niveaux 4, 8, 9 et 10 ne peuvent être fixés à *auto* car ils ne peuvent être testés par le script et nécessitent une vérification manuelle. Il est toutefois possible de les fixer à *na* pour indiquer que le niveau n'est pas applicable (par exemple pour le niveau 4 quand une app ne propose pas de SSO LDAP). Un niveau *na* sera tout simplement ignoré dans le calcul du niveau final. - Niveau 1 : L'application s'installe et se désinstalle correctement. -- Peut être vérifié par package_check - Niveau 2 : L'application s'installe et se désinstalle dans toutes les configurations communes. -- Peut être vérifié par package_check - Niveau 3 : L'application supporte l'upgrade depuis une ancienne version du package. -- Peut être vérifié par package_check diff --git a/package_check.sh b/package_check.sh index 18ff8af..f59b321 100755 --- a/package_check.sh +++ b/package_check.sh @@ -287,10 +287,13 @@ APP_LEVEL () { # Calcule le niveau final for i in {1..10}; do if [ "${level[i]}" == "auto" ]; then - level[i]=0 # Si des levels sont encore à auto, c'est une erreur de syntaxe dans le check_process, ils sont fixé à 0. + level[i]=0 # Si des niveaux sont encore à auto, c'est une erreur de syntaxe dans le check_process, ils sont fixé à 0. + elif [ "${level[i]}" -ge 1 ]; then + level=$i # Si le niveau est validé, il est pris en compte dans le niveau final + elif [ "${level[i]}" != "na" ]; then + break # Enfin, si le niveau n'est ni validé, ni "non applicable" (na), il stoppe la boucle. Le niveau final est donc le niveau précédemment validé fi - if [ "${level[i]}" -ge 1 ]; then level=$i - elif [ $i -ne 4 ]; then break; fi + # Dans les autres cas, il s'agit d'un niveau défini en "non applicable" (na), qui est donc ignoré dans le niveau final done } From 52aafa8419efab7798494aab29440f492b98b5a7 Mon Sep 17 00:00:00 2001 From: scith Date: Tue, 17 Jan 2017 18:56:30 +0100 Subject: [PATCH 11/12] Fix --- package_check.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/package_check.sh b/package_check.sh index f59b321..52dae0d 100755 --- a/package_check.sh +++ b/package_check.sh @@ -288,12 +288,13 @@ APP_LEVEL () { for i in {1..10}; do if [ "${level[i]}" == "auto" ]; then level[i]=0 # Si des niveaux sont encore à auto, c'est une erreur de syntaxe dans le check_process, ils sont fixé à 0. + elif [ "${level[i]}" == "na" ]; then + continue # Si le niveau est "non applicable" (na), il est ignoré dans le niveau final elif [ "${level[i]}" -ge 1 ]; then level=$i # Si le niveau est validé, il est pris en compte dans le niveau final - elif [ "${level[i]}" != "na" ]; then - break # Enfin, si le niveau n'est ni validé, ni "non applicable" (na), il stoppe la boucle. Le niveau final est donc le niveau précédemment validé + else + break # Dans les autres cas (niveau ni validé, ni ignoré), la boucle est stoppée. Le niveau final est donc le niveau précédemment validé fi - # Dans les autres cas, il s'agit d'un niveau défini en "non applicable" (na), qui est donc ignoré dans le niveau final done } @@ -512,7 +513,9 @@ TEST_RESULTS () { for i in {1..10} do ECHO_FORMAT "\t Niveau $i: " - if [ "${level[i]}" -ge 1 ]; then + if [ "${level[i]}" == "na" ]; then + ECHO_FORMAT "N/A\n" + elif [ "${level[i]}" -ge 1 ]; then ECHO_FORMAT "1\n" "white" "bold" else ECHO_FORMAT "0\n" From cf4bd7c13f0ef7fe3d43b0fb58a5b290ba8deb8f Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 17 Jan 2017 21:25:33 +0100 Subject: [PATCH 12/12] Update package_check.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C'est certes (un peu) plus lourd, mais ça évite la dépendance à la note (qui n'est pas toujours hyper fiable) et surtout ça évite de checker le linter. --- package_check.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/package_check.sh b/package_check.sh index 52dae0d..a9cc1d4 100755 --- a/package_check.sh +++ b/package_check.sh @@ -274,7 +274,21 @@ APP_LEVEL () { # Niveau 7: Aucune erreur dans package check. if [ "${level[7]}" == "auto" ] || [ "${level[7]}" == "2" ]; then - if [ "$note" -ge 20 ] + if [ "$GLOBAL_CHECK_SETUP" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_SUB_DIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -ne -1 ] && \ + [ "$GLOBAL_CHECK_REMOVE_ROOT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_UPGRADE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PRIVATE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PUBLIC" -ne -1 ] && \ + [ "$GLOBAL_CHECK_MULTI_INSTANCE" -ne -1 ] && \ + [ "$GLOBAL_CHECK_ADMIN" -ne -1 ] && \ + [ "$GLOBAL_CHECK_DOMAIN" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PATH" -ne -1 ] && \ + [ "$GLOBAL_CHECK_PORT" -ne -1 ] && \ + [ "$GLOBAL_CHECK_BACKUP" -ne -1 ] && \ + [ "$GLOBAL_CHECK_RESTORE" -ne -1 ] then level[7]=2 ; else level[7]=0 ; fi fi