1
0
Fork 0
pomodoro/bash_scripts/repo_compose.sh
2024-12-29 10:39:47 +03:00

86 lines
4.6 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "Создание скриптов из шаблонов с параметрами и сохранение их в каталогах проектов."
export domain="git.org.ru" && source info_param.sh
export basedir="$PWD" # текущая папка
# создание скриптов из шаблонов с параметрами
function compose {
echo "Обработка: $1"
# добавление исключения в список неотслеживаемых файлов, если оно ещё не добавлено
if [ ! -f "$1/.gitignore" ] || [ "$(grep -cF ".repo_*" "$1/.gitignore")" == 0 ]; then
echo ".repo_*" >>"$1/.gitignore" && echo "Обновлён файл: $1/.gitignore"
fi
# значения для параметров
owner="golovin" && repo="$1"
case "$1" in
*[1-6]) owner="pomodoro" && repo="${1//$owner/}" ;;&
*1) description="Трёхмерная графика на JavaScript" ;;&
*2) description="Декартово произведение, комбинаторика" ;;&
*3) description="Умножение матриц и повороты" ;;&
*4) description="Практическая философия, поэзия и юмор" ;;&
*5) description="Рисуем картинки текстом" ;;&
*6) description="Пустой" ;;&
*[1-6]) description+=" — https://$owner$repo.mircloud.ru" ;;
pomodoro) description="Описание и оглавление" ;;
color-tomato*) description="Тема оформления / Цветной помидор" ;;
older-tomato*) description="Тема оформления / Старый помидор" ;;
*) return ;; # шесть помидорных вёб-сайтов и три репозитория пользователя
esac
wiki="" # оглавление по страницам вёб-сайта
if [ -f "$1/WIKI.md" ]; then
if [ "$domain" == "hub.mos.ru" ]; then
wiki="$(uni2ascii -aU -qpsn "$1/WIKI.md")"
else
wiki="$(basenc "$1/WIKI.md" --base64 -w0)"
fi
fi
file="DIRECTORY_TREE.md" # тестирование вёб-интерфейса
if [ "$domain" == "hub.mos.ru" ]; then
folder="blob" && wiki_home="-/wikis/home"
else
folder="src/branch" && wiki_home="wiki"
fi
# одинаковая шапка "shebang" для всех трёх скриптов
echo "#!/bin/bash" | tee "$1/.repo_remote.sh" "$1/.repo_local.sh" >"$1/.repo_testing.sh"
# параметры для удалённого репозитория
param_remote+=("domain='$domain'")
param_remote+=("owner='$owner'")
param_remote+=("user='golovin'")
param_remote+=("repo='$repo'")
param_remote+=("description='$description'")
param_remote+=("wiki='$wiki'")
if [ "$domain" == "hub.mos.ru" ]; then
param_remote+=("token='$(cat "$basedir/.token_gitlab")'")
template_remote="repo_gitlab.tmpl.sh"
else
param_remote+=("token='$(cat "$basedir/.token_gitea")'")
template_remote="repo_gitea.tmpl.sh"
fi
# скрипт для создания удалённого репозитория
printf '%s\n' "${param_remote[@]}" >>"$1/.repo_remote.sh"
tail -n+2 "$basedir/$template_remote" >>"$1/.repo_remote.sh"
chmod +x "$1/.repo_remote.sh"
# параметры для локального репозитория
param_local+=("domain='$domain'")
param_local+=("owner='$owner'")
param_local+=("repo='$repo'")
param_local+=("dir='$1'")
# скрипт для создания локального репозитория
printf '%s\n' "${param_local[@]}" >>"$1/.repo_local.sh"
tail -n+2 "$basedir/repo_local.tmpl.sh" >>"$1/.repo_local.sh"
chmod +x "$1/.repo_local.sh"
# параметры для тестирования вёб-интерфейса
param_testing+=("'https://$domain/$owner/$repo/$folder/master/$file' '$file'")
if [ "$wiki" ]; then
param_testing+=("'https://$domain/$owner/$repo/$wiki_home' 'Home'")
fi
# скрипт для тестирования вёб-интерфейса
printf 'pages+=("%s")\n' "${param_testing[@]}" >>"$1/.repo_testing.sh"
tail -n+21 "$basedir/repo_testing.smpl.sh" >>"$1/.repo_testing.sh"
chmod +x "$1/.repo_testing.sh"
}
export -f compose
cd ../.. # выход из папки и из репозитория
time_ms="$(date '+%s%3N')"
# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea"
find . -mindepth 1 -maxdepth 1 -type d -not -name ".idea" -printf 'compose "%f"\0' | xargs -n1 -0 -P0 bash -c
echo "Общее время выполнения: $(($(date '+%s%3N') - time_ms)) мс."