#!/bin/bash echo "Создание скриптов из шаблонов с параметрами и сохранение их в каталогах проектов." export domain="git.org.ru" && source info_param.sh export basedir="$PWD" # текущая папка # создание скриптов внутри каталога function compose { echo "Обработка: $1" cd "$1" || return # удаление скриптов предыдущей компоновки, если таковые имеются find . -maxdepth 1 -type f -name ".repo_*" -exec rm -f {} \; # подготовка значений для параметров 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 if [ "$domain" == "hub.mos.ru" ]; then model="gitlab" && [ -f "WIKI.md" ] && wiki="$(uni2ascii -aU -qpsn "WIKI.md")" else model="forgejo" && [ -f "WIKI.md" ] && wiki="$(basenc --base64 -w0 "WIKI.md")" 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 # параметры для публикации репозитория repo_publish+=("#!/bin/bash") repo_publish+=("domain='$domain'") repo_publish+=("owner='$owner'") repo_publish+=("user='$user'") repo_publish+=("repo='$repo'") repo_publish+=("dir='$1'") repo_publish+=("description='$description'") repo_publish+=("wiki='$wiki'") repo_publish+=("token='$(head -n+1 "$basedir/.token_$model")'") # шаблоны для публикации репозитория tmpl_remote="$basedir/repo_$model.tmpl.sh" tmpl_local="$basedir/repo_local.tmpl.sh" # место вставки для локального шаблона local="$(grep -nF '#LOCAL#' "$tmpl_remote" | sed 's|:.*$||')" { # скрипт для публикации репозитория printf '%s\n' "${repo_publish[@]}" head -n+"$((local - 1))" "$tmpl_remote" | tail -n+2 tail -n+2 "$tmpl_local" tail -n+"$((local + 1))" "$tmpl_remote" } >".repo_publish.sh" chmod 555 ".repo_publish.sh" # два скрипта для публикации вёб-сайтов if [[ "$domain" == "codeberg.org" ]]; then # шесть помидорных вёб-сайтов и один общий помидор [[ "$1" =~ [1-6] ]] && group="$owner$repo" || group="pomodoro" if [[ "$1" =~ [1-6] ]]; then # параметры для развёртывания вёб-сайта param_pages+=("#!/bin/bash") param_pages+=("domain='$domain'") param_pages+=("owner='$group'") param_pages+=("folder='_site'") param_pages+=("repo='pages'") param_pages+=("avatar='website'") 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 555 ".repo_pages2.sh" fi if [[ "$1" == "pomodoro" || "$1" =~ [1-5] ]]; then # параметры для оглавления вёб-сайта param_profile+=("#!/bin/bash") param_profile+=("domain='$domain'") param_profile+=("owner='$group'") param_profile+=("folder='_profile'") param_profile+=("repo='.profile'") param_profile+=("avatar='pomodoro'") param_profile+=("description='Оглавление / Contents'") param_profile+=("token='$(head -n+1 "$basedir/.token_forgejo")'") # скрипт для оглавления вёб-сайта printf '%s\n' "${param_profile[@]}" >".repo_profile2.sh" tail -n+2 "$basedir/repo_forgejo2.tmpl.sh" >>".repo_profile2.sh" chmod 555 ".repo_profile2.sh" fi 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)) мс."