1
0
Fork 0
dispatcher/bash_scripts/repo_compose.sh
2025-02-28 19:13:07 +03:00

92 lines
5.4 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"
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" ;;
dispatcher) description="Управление репозиториями" ;;
pomodoro) description="Описание и оглавление" ;;
color*) description="Тема оформления / Цветной помидор" ;;
older*) description="Тема оформления / Старый помидор" ;;
*) return ;; # шесть помидорных вёб-сайтов и три сопутствующих проекта
esac
file="DIRECTORY_TREE.md"
if [ "$domain" == "hub.mos.ru" ]; then
model="gitlab" && folder="blob" && wiki_home="-/wikis/home"
[ -f "WIKI.md" ] && wiki="$(uni2ascii -aU -qpsn "WIKI.md")"
else
model="forgejo" && folder="src/branch" && wiki_home="wiki"
[ -f "WIKI.md" ] && wiki="$(basenc "WIKI.md" --base64 -w0)"
fi
if [ "$domain" == "codeberg.org" ]; then
[[ "$1" =~ [1-6] ]] && description2="Исходные тексты вёб-сайта — https://$domain/$owner/$repo"
[ -f "WIKI.md" ] && wiki="$(sed 's|mircloud\.ru|codeberg.page|g' WIKI.md | basenc --base64 -w0)"
description="${description//mircloud.ru/codeberg.page}"
fi
# создание трёх скриптов в каталоге проекта с одинаковой шапкой для всех
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='$description2'")
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)) мс."