1
0
Fork 0
dispatcher/bash_scripts/repo_compose.sh
2025-03-31 19:57:16 +03:00

101 lines
5.5 KiB
Bash
Executable file
Raw Permalink 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
# удаление скриптов предыдущей компоновки, если таковые имеются
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)) мс."