1
0
Fork 0
pomodoro/bash_scripts/repo_compose.sh
2025-01-31 09:24:35 +03:00

91 lines
5.2 KiB
Bash
Executable file
Raw Permalink 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"
cd "$1" || return
# добавление скриптов в список неотслеживаемых файлов, если ещё не добавлено
if [[ ! -f ".gitignore" || "$(grep -cF ".repo_*" ".gitignore")" == 0 ]]; then
echo ".repo_*" >>".gitignore" && echo "Обновлён файл: $1/.gitignore"
fi
# подготовка значений для параметров
user="golovin" && owner="$user" && 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*) description="Тема оформления / Цветной помидор" ;;
older*) description="Тема оформления / Старый помидор" ;;
*) return ;; # шесть помидорных вёб-сайтов и три сопутствующих проекта
esac
if [ "$domain" == "hub.mos.ru" ]; then
[ -f "WIKI.md" ] && wiki="$(uni2ascii -aU -qpsn "WIKI.md")"
model="gitlab" && folder="blob" && wiki_home="-/wikis/home"
else
[ -f "WIKI.md" ] && wiki="$(basenc "WIKI.md" --base64 -w0)"
model="forgejo" && folder="src/branch" && wiki_home="wiki"
fi
if [ "$domain" == "codeberg.org" ]; then
if [ -f "WIKI.md" ]; then
wiki="$(sed 's|mircloud\.ru|codeberg.page|g' WIKI.md | basenc --base64 -w0)"
fi
[[ "$1" =~ [1-6] ]] && description="${description//mircloud.ru/codeberg.page}"
fi
file="DIRECTORY_TREE.md"
# создание трёх скриптов в каталоге проекта с одинаковой шапкой для всех
echo "#!/bin/bash" | tee ".repo_remote.sh" ".repo_local.sh" >".repo_testing.sh"
chmod +x ".repo_remote.sh" ".repo_local.sh" ".repo_testing.sh"
# параметры для удалённого репозитория
param_remote+=("domain='$domain'")
param_remote+=("owner='$owner'")
param_remote+=("user='$user'")
param_remote+=("repo='$repo'")
param_remote+=("description='$description'")
param_remote+=("wiki='$wiki'")
param_remote+=("token='$(head -n+1 "$basedir/.token_$model")'")
# скрипт для создания удалённого репозитория
printf '%s\n' "${param_remote[@]}" >>".repo_remote.sh"
tail -n+2 "$basedir/repo_$model.tmpl.sh" >>".repo_remote.sh"
# параметры для локального репозитория
param_local+=("domain='$domain'")
param_local+=("owner='$owner'")
param_local+=("repo='$repo'")
param_local+=("dir='$1'")
# скрипт для создания локального репозитория
printf '%s\n' "${param_local[@]}" >>".repo_local.sh"
tail -n+2 "$basedir/repo_local.tmpl.sh" >>".repo_local.sh"
# параметры для тестирования вёб-интерфейса
param_testing+=("'https://$domain/$owner/$repo/$folder/master/$file' '$file'")
[ "$wiki" ] && param_testing+=("'https://$domain/$owner/$repo/$wiki_home' 'Home'")
# скрипт для тестирования вёб-интерфейса
printf 'pages+=("%s")\n' "${param_testing[@]}" >>".repo_testing.sh"
tail -n+21 "$basedir/repo_testing.smpl.sh" >>".repo_testing.sh"
if [[ "$domain" == "codeberg.org" && "$1" =~ [1-6] ]]; then
# параметры для развёртывания вёб-сайта
param_pages+=("#!/bin/bash")
param_pages+=("domain='$domain'")
param_pages+=("owner='$owner$repo'")
param_pages+=("user='$user'")
param_pages+=("repo='pages'")
param_pages+=("description='$description'")
param_pages+=("token='$(head -n+1 "$basedir/.token_forgejo")'")
# скрипт для развёртывания вёб-сайта
printf '%s\n' "${param_pages[@]}" >".repo_pages2.sh"
tail -n+2 "$basedir/repo_forgejo2.tmpl.sh" >>".repo_pages2.sh"
chmod +x ".repo_pages2.sh"
fi
}
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)) мс."