86 lines
4.6 KiB
Bash
Executable file
86 lines
4.6 KiB
Bash
Executable file
#!/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)) мс."
|