From: Richard Russon Date: Tue, 15 Oct 2019 00:42:56 +0000 (+0100) Subject: travis: add translate config X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=87281e6df5b585ac9124c19f2bb3ee022268b5de;p=neomutt travis: add translate config --- diff --git a/.travis.yml b/.travis.yml index 0002b59fd..5f2a92047 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,52 +5,23 @@ dist: bionic language: c compiler: gcc -cache: ccache addons: apt: packages: - - autopoint - - docbook-simple - - docbook-xsl - gettext - - libdb-dev - - libgdbm-dev - - libgnutls28-dev - - libgpgme11-dev - - libgss-dev - - libidn2-0-dev - - libkyotocabinet-dev - - liblmdb-dev - - liblua5.2-dev - - libnotmuch-dev - - libqdbm-dev - - libsasl2-dev - - libslang2-dev - - libssl-dev - - libtokyocabinet-dev - - libxml2-utils - - lua5.2 - - lynx - - xsltproc git: depth: 3 -install: - - git clone --depth 1 https://github.com/neomutt/travis-build.git ~/config - -before_script: - - ccache --zero-stats - - export ANSI_CLEAR - - export -f travis_fold - - export -f travis_nanoseconds - - export -f travis_time_finish - - export -f travis_time_start +env: + global: + - DEPLOY_REPO="git@github.com:neomutt/neomutt.github.io.git" + - DEPLOY_DIR="~/website" + - DEPLOY_FILE="translate.html" script: - - ~/config/build - -after_script: - - ccache --show-stats +- .travis/stats.sh +after_success: +- .travis/deploy.sh diff --git a/.travis/deploy.sh b/.travis/deploy.sh new file mode 100755 index 000000000..234650547 --- /dev/null +++ b/.travis/deploy.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +set -o errexit # set -e +set -o nounset # set -u + +function calc_percentage() +{ + local FILE="$1" + local TNUM=0 + local FNUM=0 + local UNUM=0 + local LINE + + LINE="$(msgfmt --statistics -c -o /dev/null "$FILE" 2>&1 | sed 's/ \(message\|translation\)s*\.*//g')" + + # filename: 104 translated, 22 fuzzy, 11 untranslated + if [[ "$LINE" =~ ([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]fuzzy,[[:space:]]([0-9]+)[[:space:]]untranslated ]]; then + TNUM=${BASH_REMATCH[1]} # translated + FNUM=${BASH_REMATCH[2]} # fuzzy + UNUM=${BASH_REMATCH[3]} # untranslated + # filename: 320 translated, 20 untranslated + elif [[ "$LINE" =~ ([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]untranslated ]]; then + TNUM=${BASH_REMATCH[1]} # translated + UNUM=${BASH_REMATCH[2]} # untranslated + # filename: 5 translated, 13 fuzzy + elif [[ "$LINE" =~ ([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]fuzzy ]]; then + TNUM=${BASH_REMATCH[1]} # translated + FNUM=${BASH_REMATCH[2]} # fuzzy + # filename: 63 translated + elif [[ "$LINE" =~ ([0-9]+)[[:space:]]translated ]]; then + TNUM=${BASH_REMATCH[1]} # translated + fi + + # number of translated strings + local TOTAL=$((TNUM+FNUM+UNUM)) + # percentage complete + echo $((100*TNUM/TOTAL)) +} + + +echo "DEPLOY_DIR = $DEPLOY_DIR" +echo "DEPLOY_FILE = $DEPLOY_FILE" +echo "DEPLOY_REPO = $DEPLOY_REPO" +echo "TRAVIS_BRANCH = $TRAVIS_BRANCH" +echo "TRAVIS_COMMIT = $TRAVIS_COMMIT" +echo "TRAVIS_PULL_REQUEST = $TRAVIS_PULL_REQUEST" + +if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then + echo "This is a Pull Request. Done." + exit 0 +fi + +if [ "$TRAVIS_BRANCH" != "translate" ]; then + echo "This isn't branch 'translate'. Done." + exit 0 +fi + +FILES="$(git diff --name-only "$TRAVIS_COMMIT^..$TRAVIS_COMMIT" -- 'po/*.po')" +FILE_COUNT="$(echo "$FILES" | wc -w)" + +if [ "$FILE_COUNT" = 1 ]; then + AUTHOR="$(git log -n1 --format="%aN" "$TRAVIS_COMMIT")" + PO="${FILES##*/}" + PO="${PO%.po}" + PCT=$(calc_percentage "$FILES") + MESSAGE="$AUTHOR, $PO, $PCT%" +else + MESSAGE="update leaderboard" +fi + +.travis/prep.sh + +set -v +eval "$(ssh-agent -s)" +ssh-add .travis/travis-deploy-github.pem + +git clone "$DEPLOY_REPO" "$DEPLOY_DIR" +.travis/generate-webpage.sh po/*.po > "$DEPLOY_DIR/$DEPLOY_FILE" + +cd "$DEPLOY_DIR" +git add "$DEPLOY_FILE" +git commit -m "[AUTO] translation: $MESSAGE" -m "[ci skip]" +git push origin + diff --git a/.travis/generate-webpage.sh b/.travis/generate-webpage.sh new file mode 100755 index 000000000..0e61ca995 --- /dev/null +++ b/.travis/generate-webpage.sh @@ -0,0 +1,170 @@ +#!/bin/bash + +function lookup_lang() +{ + case "${1##*/}" in + eu) IMG="basque.png"; NAME="Basque";; + bg) IMG="bulgarian.png"; NAME="Bulgarian";; + ca) IMG="catalan.png"; NAME="Catalan";; + zh_CN) IMG="chinese-simplified.png"; NAME="Chinese (Simplified)";; + zh_TW) IMG="chinese-traditional.png"; NAME="Chinese (Traditional)";; + cs) IMG="czech.png"; NAME="Czech";; + da) IMG="danish.png"; NAME="Danish";; + nl) IMG="dutch.png"; NAME="Dutch";; + en_GB) IMG="english.png"; NAME="English (British)";; + eo) IMG="esperanto.png"; NAME="Esperanto";; + et) IMG="estonian.png"; NAME="Estonian";; + fi) IMG="finnish.png"; NAME="Finnish";; + fr) IMG="french.png"; NAME="French";; + gl) IMG="galician.png"; NAME="Galician";; + de) IMG="german.png"; NAME="German";; + el) IMG="greek.png"; NAME="Greek";; + hu) IMG="hungarian.png"; NAME="Hungarian";; + id) IMG="indonesian.png"; NAME="Indonesian";; + ga) IMG="irish.png"; NAME="Irish";; + it) IMG="italian.png"; NAME="Italian";; + ja) IMG="japanese.png"; NAME="Japanese";; + ko) IMG="korean.png"; NAME="Korean";; + lt) IMG="lithuanian.png"; NAME="Lithuanian";; + pl) IMG="polish.png"; NAME="Polish";; + pt_BR) IMG="portuguese-brazil.png"; NAME="Portuguese (Brazil)";; + ru) IMG="russian.png"; NAME="Russian";; + sk) IMG="slovak.png"; NAME="Slovak";; + es) IMG="spanish.png"; NAME="Spanish";; + sv) IMG="swedish.png"; NAME="Swedish";; + tr) IMG="turkish.png"; NAME="Turkish";; + uk) IMG="ukrainian.png"; NAME="Ukrainian";; + esac +} + +function html_header() +{ + echo "---" + echo "layout: concertina" + echo "title: Translations" + echo "---" + echo "" + echo "

Translating NeoMutt

" + echo "" + echo "

" + echo " NeoMutt has been translated into 30 languages." + echo " Unfortunately, some of the translations are out-of-date." + echo "

" + echo "" + echo "

" + echo " Do YOU speak one of these languages?" + echo " If so, please help us." + echo "

" + echo "" + echo "

" + echo " Read more about what would be involved in" + echo " translating NeoMutt." + echo "

" + echo "" + echo "" + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " + echo " " +} + +function html_line() +{ + local LINE="$1" + local LANG="" + local TNUM=0 + local FNUM=0 + local UNUM=0 + + # filename: 104 translated, 22 fuzzy, 11 untranslated + if [[ "$LINE" =~ (.*):[[:space:]]+([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]fuzzy,[[:space:]]([0-9]+)[[:space:]]untranslated ]]; then + LANG="${BASH_REMATCH[1]}" + TNUM=${BASH_REMATCH[2]} # translated + FNUM=${BASH_REMATCH[3]} # fuzzy + UNUM=${BASH_REMATCH[4]} # untranslated + # filename: 320 translated, 20 untranslated + elif [[ "$LINE" =~ (.*):[[:space:]]+([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]untranslated ]]; then + LANG="${BASH_REMATCH[1]}" + TNUM=${BASH_REMATCH[2]} # translated + UNUM=${BASH_REMATCH[3]} # untranslated + # filename: 5 translated, 13 fuzzy + elif [[ "$LINE" =~ (.*):[[:space:]]+([0-9]+)[[:space:]]translated,[[:space:]]([0-9]+)[[:space:]]fuzzy ]]; then + LANG="${BASH_REMATCH[1]}" + TNUM=${BASH_REMATCH[2]} # translated + FNUM=${BASH_REMATCH[3]} # fuzzy + # filename: 63 translated + elif [[ "$LINE" =~ (.*):[[:space:]]+([0-9]+)[[:space:]]translated ]]; then + LANG="${BASH_REMATCH[1]}" + TNUM=${BASH_REMATCH[2]} # translated + else + return + fi + + lookup_lang "$LANG" + + local TOTAL=$((TNUM+FNUM+UNUM)) # number of translated strings + local PC=$((100*TNUM/TOTAL)) # percentage complete + + local TPX=$((500*TNUM/TOTAL)) # pixels for translated + local FPX=$((500*FNUM/TOTAL)) # pixels for fuzzy + local UPX=$((500*UNUM/TOTAL)) # pixels for untranslated + + [ $FPX -gt 0 ] && [ $FPX -lt 10 ] && TPX=$((TPX-5)) # adjust for the size of a non-breaking space + [ $UPX -gt 0 ] && [ $UPX -lt 10 ] && TPX=$((TPX-7)) + + local TITLE="$NAME: $TNUM translated" + [ $FNUM -gt 0 ] && TITLE="$TITLE, $FNUM fuzzy" + [ $UNUM -gt 0 ] && TITLE="$TITLE, $UNUM untranslated" + + echo " " + echo " " + echo " " + echo " " +} + +function html_footer() +{ + echo " " + echo "
Language" + echo " Complete" + echo " Fuzzy" + echo " Incomplete" + echo "
English" + echo "
Base Language
$NAME" + if [ $TPX -gt 0 ]; then + echo "
${PC}%
" + fi + if [ $FPX -gt 0 ]; then + echo "
 
" + fi + if [ $UPX -gt 0 ]; then + echo "
 
" + fi + echo "
" + echo "
" + echo "Last updated: $(date --utc '+%F %R') UTC" +} + + +[ $# = 0 ] && ARGS="*.po" || ARGS="$*" + +html_header +for i in $ARGS; do + echo -ne "${i%.po}:\t" + msgfmt --statistics -c -o /dev/null "$i" 2>&1 +done \ + | grep -wv "en_GB" \ + | sed 's/ \(message\|translation\)s*\.*//g' \ + | sort -nr -k2 -k4 -k6 \ + | while read -r line; do + html_line "$line" +done +html_footer + diff --git a/.travis/prep.sh b/.travis/prep.sh new file mode 100755 index 000000000..7edfd871b --- /dev/null +++ b/.travis/prep.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -o errexit # set -e +set -o nounset # set -u + +git config --global user.email "rich@flatcap.org" +git config --global user.name "Richard Russon (DEPLOY)" + +mkdir -p ~/.ssh +echo "Host github.com" >> ~/.ssh/config +echo " StrictHostKeyChecking no" >> ~/.ssh/config +chmod 600 ~/.ssh/config + +cd .travis +openssl aes-256-cbc -K $encrypted_ff1b3f8609ac_key -iv $encrypted_ff1b3f8609ac_iv -in travis-deploy-github.enc -out travis-deploy-github.pem -d +chmod 0400 travis-deploy-github.pem + diff --git a/.travis/stats.sh b/.travis/stats.sh new file mode 100755 index 000000000..7b967ea77 --- /dev/null +++ b/.travis/stats.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +if [ $# = 0 ]; then + [ -d po ] && ARGS="po/*.po" || ARGS="*.po" +else + ARGS="$*" +fi + +ERROR=0 + +TMP_FILE=$(mktemp) + +for i in $ARGS; do + L=${i##*/} + echo -ne "${L%.po}:\\t" + msgfmt --statistics -c -o /dev/null "$i" 2>&1 + [ $? = 1 ] && ERROR=1 +done > "$TMP_FILE" + +sed 's/ \(message\|translation\)s*\.*//g' "$TMP_FILE" | sort -nr -k2 -k4 -k6 +rm -f "$TMP_FILE" + +exit $ERROR + diff --git a/.travis/travis-deploy-github.enc b/.travis/travis-deploy-github.enc new file mode 100644 index 000000000..d65a1e175 Binary files /dev/null and b/.travis/travis-deploy-github.enc differ