More mail notifications

This commit is contained in:
Maniack Crudelis 2017-04-07 01:24:14 +02:00
parent 7453d5994b
commit e0ddde7db5
4 changed files with 108 additions and 8 deletions

View file

@ -80,6 +80,9 @@ package_check/package_check.sh APP_ynh
Level 8=0 Level 8=0
Level 9=0 Level 9=0
Level 10=0 Level 10=0
;;; Options
Email=
Notification=none
``` ```
### `;; Nom du test` ### `;; Nom du test`
Nom du scénario de test qui sera effectué. Nom du scénario de test qui sera effectué.
@ -128,6 +131,16 @@ Il est à noter que les niveaux 4, 8, 9 et 10 ne peuvent être fixés à *auto*
- Niveau 9 : L'application respecte toutes les YEP optionnelles. -- 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 - Niveau 10 : L'application est jugée parfaite. -- Doit être vérifié manuellement
### `;;; Options`
Options supplémentaires disponible dans le check_process.
Ces options sont facultatives.
- `Email` : Permet d'indiquer un email alternatif à celui qui est présent dans le manifest pour les notifications de package check, lorsque celui-ci s'exécute en contexte d'intégration continue.
- `Notification` : Degré de notification souhaité pour l'application. Il y a 3 niveaux de notification disponible.
- `down` : Envoi un mail seulement si le niveau de l'application a baissé.
- `change` : Envoi un mail seulement si le niveau de l'application a changé.
- `all` : Envoi un mail pour chaque test de l'application, quel que ce soit le résultat.
--- ---
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.

View file

@ -80,6 +80,9 @@ package_check/package_check.sh APP_ynh
Level 8=0 Level 8=0
Level 9=0 Level 9=0
Level 10=0 Level 10=0
;;; Options
Email=
Notification=none
``` ```
### `;; Test name` ### `;; Test name`
Name of tests series that will be perform. Name of tests series that will be perform.
@ -128,6 +131,16 @@ The level 4, 8, 9 and 10 shouldn't be fixed at *auto*, because they don't be tes
- Level 9 : The application respects all optionnal YEP. -- Must be validated manually - Level 9 : The application respects all optionnal YEP. -- Must be validated manually
- Level 10 : The application has judged as perfect. -- Must be validated manually - Level 10 : The application has judged as perfect. -- Must be validated manually
### `;;; Options`
Supplementary options available in the check_process.
These options are facultative.
- `Email` : Allow to specify an alternative email than this is in the manifest for notification by package check, when it's in a context of continuous integration.
- `Notification` : Grade of notification for this application. There are 3 available levels.
- `down` : Send an email only if the level of this application has decreased.
- `change` : Send an email if the level of this application has changed.
- `all` : Send an email for each test on this application, whiech ever the result.
--- ---
The `package_check.sh` script accept 6 arguments in addition of package to be checked. The `package_check.sh` script accept 6 arguments in addition of package to be checked.
- `--bash-mode`: The script will work without user intervention. - `--bash-mode`: The script will work without user intervention.

View file

@ -32,3 +32,6 @@
Level 8=0 Level 8=0
Level 9=0 Level 9=0
Level 10=0 Level 10=0
;;; Options
Email=
Notification=none

View file

@ -806,9 +806,10 @@ then
partial1="${check_process}_part1" partial1="${check_process}_part1"
partial2="${check_process}_part2" partial2="${check_process}_part2"
# Extract the level section # Extract the level section
partial_check_process=$partial1 partial_check_process=$partial1
extract_section "^;;; Levels" "^;; " "$check_process" extract_section "^;;; Levels" ";; " "$check_process"
# Get the value associated to each level # Get the value associated to each level
for i in `seq 1 10` for i in `seq 1 10`
@ -819,6 +820,19 @@ then
level[$i]=$(echo "$line" | cut -d'=' -f2) level[$i]=$(echo "$line" | cut -d'=' -f2)
done done
# Extract the Options section
partial_check_process=$partial1
extract_section "^;;; Options" ";; " "$check_process"
# Try to find a optionnal email address to notify the maintainer
# In this case, this email will be used instead of the email from the manifest.
dest="$(echo $(find_string "^Email=") | cut -d '=' -f2)"
# Try to find a optionnal option for the grade of notification
notification_grade="$(echo $(find_string "^Notification=") | cut -d '=' -f2)"
# Parse each tests serie # Parse each tests serie
while read tests_serie while read tests_serie
do do
@ -1073,17 +1087,54 @@ echo "You can find the complete log of these tests in $complete_log"
#=================================================
# Notification grade
#=================================================
notif_grade () {
# Check the level of notification from the check_process.
# Echo 1 if the grade is reached
compare_grade ()
{
if echo "$notification_grade" | grep -q "$1"; then
echo 1
else
echo 0
fi
}
case "$1" in
all)
# If 'all' is needed, only a grade of notification at 'all' can match
compare_grade "^all$"
;;
change)
# If 'change' is needed, notification at 'all' or 'change' can match
compare_grade "^all$\|^change$"
;;
down)
# If 'down' is needed, notification at 'all', 'change' or 'down' match
compare_grade "^all$\|^change$\|^down$"
;;
*)
echo 0
;;
esac
}
#================================================= #=================================================
# Inform of the results by XMPP and/or by mail # Inform of the results by XMPP and/or by mail
#================================================= #=================================================
send_mail=0
# Keep only the name of the app # Keep only the name of the app
app_name=${package_dir%_ynh_check} app_name=${package_dir%_ynh_check}
# If package check it's in the official CI environment # If package check it's in the official CI environment
# Check the level variation # Check the level variation
elif [ $type_exec_env -eq 2 ] if [ $type_exec_env -eq 2 ]
then then
# Get the job name, stored in the work_list # Get the job name, stored in the work_list
@ -1125,15 +1176,22 @@ then
# If non previous level was found # If non previous level was found
if [ -z "$previous_level" ]; then if [ -z "$previous_level" ]; then
message="$message just reach the level $global_level" message="$message just reach the level $global_level"
send_mail=$(notif_grade all)
# If the level stays the same # If the level stays the same
elif [ $global_level -eq $previous_level ]; then elif [ $global_level -eq $previous_level ]; then
message="$message stays at level $global_level" message="$message stays at level $global_level"
# Need notification at 'all' to notify by email
send_mail=$(notif_grade all)
# If the level go up # If the level go up
elif [ $global_level -gt $previous_level ]; then elif [ $global_level -gt $previous_level ]; then
message="$message rise from level $previous_level to level $global_level" message="$message rise from level $previous_level to level $global_level"
# Need notification at 'change' to notify by email
send_mail=$(notif_grade change)
# If the level go down # If the level go down
elif [ $global_level -lt $previous_level ]; then elif [ $global_level -lt $previous_level ]; then
message="$message go down from level $previous_level to level $global_level" message="$message go down from level $previous_level to level $global_level"
# Need notification at 'down' to notify by email
send_mail=$(notif_grade down)
fi fi
fi fi
fi fi
@ -1141,9 +1199,15 @@ fi
# If the app completely failed and obtained 0 # If the app completely failed and obtained 0
if [ $global_level -eq 0 ] if [ $global_level -eq 0 ]
then then
message="${message}Application $app_name has completely failed the continuous integration tests" message="${message}Application $app_name has completely failed the continuous integration tests"
# Always send an email if the app failed
send_mail=1
fi fi
# The mail subject is the message to send, before any logs informations
subject="[YunoHost] $message"
# If the test was perform in the official CI environment # If the test was perform in the official CI environment
# Add the log address # Add the log address
# And inform with xmpp # And inform with xmpp
@ -1164,17 +1228,24 @@ then
fi fi
fi fi
# Send a mail to main maintainer if the app failed and obtained the level 0. # Send a mail to main maintainer according to notification option in the check_process.
# Only if package check is in a CI environment (Official or not) # Only if package check is in a CI environment (Official or not)
if [ $global_level -eq 0 ] && [ $type_exec_env -ge 1 ] if [ $type_exec_env -ge 1 ] && [ $send_mail -eq 1 ]
then then
# Get the maintainer email from the manifest # Add a 'from' header for the official CI only.
dest=$(grep '\"email\": ' "$package_path/manifest.json" | cut -d '"' -f 4) if [ $type_exec_env -eq 2 ]; then
from_yuno="-a \"From: yunohost@yunohost.org\""
fi
# Get the maintainer email from the manifest. If it doesn't found if the check_process
if [ -z "$dest" ]; then
dest=$(grep '\"email\": ' "$package_path/manifest.json" | cut -d '"' -f 4)
fi
# Send the message by mail, if a address has been find # Send the message by mail, if a address has been find
if [ -n "$dest" ]; then if [ -n "$dest" ]; then
mail -a "From: yunohost@yunohost.org" -s "[YunoHost] Your app $app_name has completely failed the continuous integration tests" "$dest" <<< "$message" mail $from_yuno -s "$subject" "$dest" <<< "$message"
fi fi
fi fi