1
0
Fork 0
pomodoro/bash_scripts/repo_compose.sh

92 lines
5.2 KiB
Bash
Raw Permalink Normal View History

2023-12-17 08:06:45 +03:00
#!/bin/bash
2024-07-31 21:14:05 +03:00
echo "Создание скриптов из шаблонов с параметрами и сохранение их в каталогах проектов."
2024-10-01 18:02:31 +03:00
export domain="git.org.ru" && source info_param.sh
2024-07-31 21:14:05 +03:00
export basedir="$PWD" # текущая папка
2025-01-31 09:24:35 +03:00
# создание скриптов внутри каталога
2024-07-31 21:14:05 +03:00
function compose {
echo "Обработка: $1"
2025-01-31 09:24:35 +03:00
cd "$1" || return
# добавление скриптов в список неотслеживаемых файлов, если ещё не добавлено
if [[ ! -f ".gitignore" || "$(grep -cF ".repo_*" ".gitignore")" == 0 ]]; then
echo ".repo_*" >>".gitignore" && echo "Обновлён файл: $1/.gitignore"
2023-12-17 08:06:45 +03:00
fi
2025-01-31 09:24:35 +03:00
# подготовка значений для параметров
user="golovin" && owner="$user" && repo="$1"
2024-12-29 10:39:47 +03:00
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" ;;
2025-01-31 09:24:35 +03:00
pomodoro) description="Описание и управление" ;;
color*) description="Тема оформления / Цветной помидор" ;;
older*) description="Тема оформления / Старый помидор" ;;
*) return ;; # шесть помидорных вёб-сайтов и три сопутствующих проекта
2024-12-29 10:39:47 +03:00
esac
if [ "$domain" == "hub.mos.ru" ]; then
2025-01-31 09:24:35 +03:00
[ -f "WIKI.md" ] && wiki="$(uni2ascii -aU -qpsn "WIKI.md")"
model="gitlab" && folder="blob" && wiki_home="-/wikis/home"
2024-12-29 10:39:47 +03:00
else
2025-01-31 09:24:35 +03:00
[ -f "WIKI.md" ] && wiki="$(basenc "WIKI.md" --base64 -w0)"
model="forgejo" && folder="src/branch" && wiki_home="wiki"
2024-12-29 10:39:47 +03:00
fi
2025-01-31 09:24:35 +03:00
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"
2024-12-29 10:39:47 +03:00
# параметры для удалённого репозитория
param_remote+=("domain='$domain'")
param_remote+=("owner='$owner'")
2025-01-31 09:24:35 +03:00
param_remote+=("user='$user'")
2024-12-29 10:39:47 +03:00
param_remote+=("repo='$repo'")
param_remote+=("description='$description'")
param_remote+=("wiki='$wiki'")
2025-01-31 09:24:35 +03:00
param_remote+=("token='$(head -n+1 "$basedir/.token_$model")'")
2023-12-17 08:20:25 +03:00
# скрипт для создания удалённого репозитория
2025-01-31 09:24:35 +03:00
printf '%s\n' "${param_remote[@]}" >>".repo_remote.sh"
tail -n+2 "$basedir/repo_$model.tmpl.sh" >>".repo_remote.sh"
2024-12-29 10:39:47 +03:00
# параметры для локального репозитория
param_local+=("domain='$domain'")
param_local+=("owner='$owner'")
param_local+=("repo='$repo'")
param_local+=("dir='$1'")
2023-12-17 08:20:25 +03:00
# скрипт для создания локального репозитория
2025-01-31 09:24:35 +03:00
printf '%s\n' "${param_local[@]}" >>".repo_local.sh"
tail -n+2 "$basedir/repo_local.tmpl.sh" >>".repo_local.sh"
2024-12-29 10:39:47 +03:00
# параметры для тестирования вёб-интерфейса
param_testing+=("'https://$domain/$owner/$repo/$folder/master/$file' '$file'")
2025-01-31 09:24:35 +03:00
[ "$wiki" ] && param_testing+=("'https://$domain/$owner/$repo/$wiki_home' 'Home'")
2024-12-29 10:39:47 +03:00
# скрипт для тестирования вёб-интерфейса
2025-01-31 09:24:35 +03:00
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
2024-07-31 21:14:05 +03:00
}
2024-12-29 10:39:47 +03:00
export -f compose
cd ../.. # выход из папки и из репозитория
2024-07-31 21:14:05 +03:00
time_ms="$(date '+%s%3N')"
2024-09-01 08:46:27 +03:00
# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea"
2024-12-29 10:39:47 +03:00
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)) мс."