mirror of
https://github.com/YunoHost/package_check.git
synced 2024-09-03 20:06:20 +02:00
commit
36c969f41f
4 changed files with 169 additions and 3 deletions
26
README.md
26
README.md
|
@ -76,6 +76,17 @@ package_check/package_check.sh APP_ynh
|
||||||
fail_download_source=0
|
fail_download_source=0
|
||||||
port_already_use=1 (XXXX)
|
port_already_use=1 (XXXX)
|
||||||
final_path_already_use=0
|
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 test`
|
||||||
Nom du scénario de test qui sera effectué.
|
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.
|
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...*
|
- `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. 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
|
||||||
|
- 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.
|
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.
|
- `--bash-mode`: Rend le script autonome. Aucune intervention de l'utilisateur ne sera nécessaire.
|
||||||
|
|
|
@ -27,3 +27,14 @@
|
||||||
fail_download_source=0
|
fail_download_source=0
|
||||||
port_already_use=1 (66)
|
port_already_use=1 (66)
|
||||||
final_path_already_use=0
|
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
|
||||||
|
|
130
package_check.sh
130
package_check.sh
|
@ -231,7 +231,89 @@ 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 [ "$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
|
||||||
|
|
||||||
|
# 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]}" == "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
|
||||||
|
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
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
TEST_RESULTS () {
|
TEST_RESULTS () {
|
||||||
|
APP_LEVEL
|
||||||
ECHO_FORMAT "\n\nPackage linter: "
|
ECHO_FORMAT "\n\nPackage linter: "
|
||||||
if [ "$GLOBAL_LINTER" -eq 1 ]; then
|
if [ "$GLOBAL_LINTER" -eq 1 ]; then
|
||||||
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
||||||
|
@ -439,6 +521,20 @@ TEST_RESULTS () {
|
||||||
fi
|
fi
|
||||||
ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note"
|
ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note"
|
||||||
ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/21\n\n" "white" "bold"
|
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" "white" "bold"
|
||||||
|
for i in {1..10}
|
||||||
|
do
|
||||||
|
ECHO_FORMAT "\t Niveau $i: "
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT_VAR() {
|
INIT_VAR() {
|
||||||
|
@ -499,7 +595,21 @@ INIT_VAR() {
|
||||||
final_path_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
|
||||||
|
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
|
INIT_VAR
|
||||||
|
INIT_LEVEL
|
||||||
echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log
|
echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log
|
||||||
echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse
|
echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse
|
||||||
if [ "$no_lxc" -eq 0 ]; then
|
if [ "$no_lxc" -eq 0 ]; then
|
||||||
|
@ -510,6 +620,23 @@ if [ "$check_file" -eq 1 ]
|
||||||
then # Si le fichier check_process est trouvé
|
then # Si le fichier check_process est trouvé
|
||||||
## Parsing du fichier check_process de manière séquentielle.
|
## Parsing du fichier check_process de manière séquentielle.
|
||||||
echo "Parsing du fichier check_process"
|
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
|
||||||
|
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
|
||||||
|
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
|
while read <&4 LIGNE
|
||||||
do
|
do
|
||||||
LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne
|
LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne
|
||||||
|
@ -520,7 +647,7 @@ then # Si le fichier check_process est trouvé
|
||||||
if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove
|
if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove
|
||||||
auto_remove=$(echo "$LIGNE" | cut -d '=' -f2)
|
auto_remove=$(echo "$LIGNE" | cut -d '=' -f2)
|
||||||
fi
|
fi
|
||||||
if 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.
|
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
|
TESTING_PROCESS
|
||||||
TEST_RESULTS
|
TEST_RESULTS
|
||||||
|
@ -533,6 +660,7 @@ then # Si le fichier check_process est trouvé
|
||||||
IN_PROCESS=1
|
IN_PROCESS=1
|
||||||
MANIFEST=0
|
MANIFEST=0
|
||||||
CHECKS=0
|
CHECKS=0
|
||||||
|
IN_LEVELS=0
|
||||||
fi
|
fi
|
||||||
if [ "$IN_PROCESS" -eq 1 ]
|
if [ "$IN_PROCESS" -eq 1 ]
|
||||||
then # Analyse des arguments du scenario de test
|
then # Analyse des arguments du scenario de test
|
||||||
|
|
|
@ -306,7 +306,7 @@ CHECK_SETUP_NO_URL () {
|
||||||
note=$((note+1))
|
note=$((note+1))
|
||||||
fi
|
fi
|
||||||
GLOBAL_CHECK_SETUP=1 # Installation réussie
|
GLOBAL_CHECK_SETUP=1 # Installation réussie
|
||||||
GLOBAL_CHECK_SUB_DIR=1
|
GLOBAL_CHECK_ROOT=1
|
||||||
else
|
else
|
||||||
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
|
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
|
||||||
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
|
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
|
||||||
|
@ -327,7 +327,8 @@ CHECK_SETUP_NO_URL () {
|
||||||
if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then
|
if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then
|
||||||
note=$((note+1))
|
note=$((note+1))
|
||||||
fi
|
fi
|
||||||
GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression réussie
|
GLOBAL_CHECK_REMOVE=1 # Suppression réussie
|
||||||
|
GLOBAL_CHECK_REMOVE_ROOT=1
|
||||||
else
|
else
|
||||||
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
|
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
|
||||||
if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then
|
if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then
|
||||||
|
|
Loading…
Add table
Reference in a new issue