Skip to content

Update translations #26433

Update translations

Update translations #26433

name: Update translations
on:
schedule:
- cron: "*/15 * * * *"
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
translate:
runs-on: ubuntu-latest
steps:
- name: Install po4a
run: |
git -C $HOME clone --single-branch --recurse-submodules --shallow-submodules --no-tags --depth=1 https://github.com/mquinson/po4a
git -C $HOME/po4a fetch --no-tags --depth=1 origin 5766962c0c67703d68d45c02da13600adbf08e61
git -C $HOME/po4a checkout 5766962c0c67703d68d45c02da13600adbf08e61
git -C $HOME/po4a branch -D @{-1}
mkdir -p $HOME/.local/bin
echo '#!/bin/bash
PERLLIB='"$HOME"'/po4a/lib '"$HOME"'/po4a/po4a "$@"' > $HOME/.local/bin/po4a
chmod +x $HOME/.local/bin/po4a
sudo apt update -y
sudo apt install -y liblocale-gettext-perl libtext-wrapi18n-perl libunicode-linebreak-perl libtest-pod-perl libyaml-tiny-perl cpanminus gettext libsgmls-perl libsyntax-keyword-try-perl
cpanm Locale::gettext http://search.cpan.org/CPAN/authors/id/R/RA/RAAB/SGMLSpm-1.1.tar.gz Text::WrapI18N Unicode::GCString YAML::Tiny
cpanm -v --installdeps --notest $HOME/po4a
- name: Fetch source files
run: |
mkdir $HOME/repos
echo "docs\ndl-librescore\napp-librescore\nwebmscore-pwa" | xargs -I {} bash -c "curl -s -d '{\"lock\":\"true\"}' -H 'Content-Type: application/json' -H 'Authorization: Token ${{ secrets.WEBLATE_TOKEN }}' https://weblate.librescore.org/api/components/librescore/{}/lock/"
curl -s -d '{"operation":"commit"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/repository/
curl -s -d '{"operation":"push"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/repository/
curl -s -H "Accept: application/vnd.github.v3+json" "https://api.github.com/orgs/LibreScore/repos?per_page=100" | grep -e 'git_url*' | cut -d \" -f 4 | sed -e 's/^git:\/\//https:\/\/${{ secrets.LIBRESCORE_USERNAME }}:${{ secrets.LIBRESCORE_TOKEN }}@/g' | xargs -I {} bash -c "if [[ {} =~ /(docs|dl-librescore|app-librescore|webmscore-pwa).git$ ]]; then git -C $HOME/repos clone {} --single-branch --no-tags --depth=1 ; fi"
rm -R -f $HOME/repos/*/docs
rm -R -f $HOME/repos/docs/i18n
mv -f $HOME/repos/docs/source/titles $HOME/repos/titles || echo "failed=true" >> $GITHUB_ENV
rm -R -f $HOME/repos/docs/source
find $HOME/repos -not -path "$HOME/repos/titles/*" ! -name "*.md" -type f -delete
find $HOME/repos -not -path "$HOME/repos/titles/*" -type d -empty -delete
- uses: actions/checkout@v3
if: env.failed != 'true'
- name: Generate translations
if: env.failed != 'true'
run: |
rm -R -f source/*
mv -f $HOME/repos/* source/
rm -R -f $HOME/repos
/bin/bash ./po4a.sh
- name: Push to current repo
if: env.failed != 'true'
run: |
mkdir -p ./docs
rm -R -f ./docs/*
cp -a ./i18n/docs/* ./docs/ -v
cp -a ./i18n/docs/en/* . -v
if [[ -n $(git status -z --porcelain ./i18n) ]]; then
echo "updated=true" >> $GITHUB_ENV
git config user.name github-actions
git config user.email [email protected]
git add -A
git commit -m "chore: update translations"
git push
curl -s -d '{"operation":"pull"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/docs/repository/
curl -s -d '{"lock":"false"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/docs/lock/
fi
- name: Push to remote repos
if: env.failed != 'true'
run: |
shopt -s nullglob
for dir in i18n/*/ ; do
dir=${dir%/}
repo=${dir#*/}
repo=${repo%/}
if ! [[ $repo =~ ^(docs|titles)$ ]]; then
git -C $HOME clone --single-branch --no-tags --depth=1 https://${{ secrets.LIBRESCORE_USERNAME }}:${{ secrets.LIBRESCORE_TOKEN }}@github.com/LibreScore/$repo
mkdir -p $HOME/$repo/docs
rm -R -f $HOME/$repo/docs/*
cp -a $dir/* $HOME/$repo/docs/ -v
cp -a $dir/en/* $HOME/$repo/ -v
cd $HOME/$repo
if [[ -n $(git status -z --porcelain) ]]; then
echo "updated=true" >> $GITHUB_ENV
git config user.name github-actions
git config user.email [email protected]
git add -A
git commit -m "chore: update translations"
git push
curl -s -d '{"operation":"pull"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/$repo/repository/
curl -s -d '{"lock":"false"}' -H "Content-Type: application/json" -H "Authorization: Token ${{ secrets.WEBLATE_TOKEN }}" https://weblate.librescore.org/api/components/librescore/$repo/lock/
fi
cd $GITHUB_WORKSPACE
fi
done
shopt -u nullglob
- name: Delete workflow run
if: env.updated != 'true'
run: |
curl -s -i -u ${{ secrets.LIBRESCORE_USERNAME }}:${{ secrets.LIBRESCORE_TOKEN }} -d '{"event_type":"delete_action","client_payload":{"run_id":"'"${{ github.run_id }}"'","repo":"LibreScore/docs"}}' -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/LibreScore/actions/dispatches