101 lines
5.5 KiB
Bash
Executable file
101 lines
5.5 KiB
Bash
Executable file
#!/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)) мс."
|