#!/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)) мс."