diff --git a/.gitattributes b/.gitattributes index 8d46c35..5a593d2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1 @@ -README*.md linguist-language=HTML -draft/2023-06-05-round-robin.md linguist-language=Java -draft/2023-06-13-directory-tree.md linguist-language=Shell +*.md linguist-language=HTML diff --git a/.gitignore b/.gitignore index 2c921f1..3ceb5a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ .idea *.iml -.repo_*.sh .token_* +.repo_* diff --git a/DIRECTORY-TREE.md b/DIRECTORY-TREE.md deleted file mode 100644 index fe6226c..0000000 --- a/DIRECTORY-TREE.md +++ /dev/null @@ -1,46 +0,0 @@ -## Дерево каталогов - -
-. -├─ bash_scripts -│ ├─ README.en.md -│ ├─ README.md -│ ├─ archive-common.sh -│ ├─ archive-packages.sh -│ ├─ info-copy.sh -│ ├─ info-domain.sh -│ ├─ info-toggle.sh -│ ├─ repo-compose.sh -│ ├─ repo-gitea.tmpl.sh -│ ├─ repo-gitlab.tmpl.sh -│ ├─ repo-local.tmpl.sh -│ └─ repo-update.sh -├─ draft -│ ├─ 2023-06-05-round-robin.md -│ ├─ 2023-06-13-directory-tree.md -│ └─ README.md -├─ pictures -│ ├─ 1.jpg -│ ├─ 2.jpg -│ ├─ 3.jpg -│ ├─ 4.jpg -│ ├─ 5.jpg -│ ├─ README.md -│ ├─ color-tomato-theme.jpg -│ ├─ directory-tree1.jpg -│ ├─ directory-tree2.jpg -│ ├─ directory-tree3.jpg -│ ├─ directory-tree4.jpg -│ ├─ draft.jpg -│ ├─ maintenance.jpg -│ ├─ older-tomato-theme.jpg -│ ├─ pictures.jpg -│ └─ pomodoro.jpg -├─ CONTRIBUTING.md -├─ DIRECTORY-TREE.md -├─ LICENSE.md -├─ OPEN_LICENSE.txt -├─ README.en.md -├─ README.md -└─ WIKI.md -diff --git a/DIRECTORY_TREE.md b/DIRECTORY_TREE.md new file mode 100644 index 0000000..ace6273 --- /dev/null +++ b/DIRECTORY_TREE.md @@ -0,0 +1,39 @@ +## Дерево каталогов + +
+. +├─ bash_scripts +│ ├─ README.en.md +│ ├─ README.md +│ ├─ archive_backup.sh +│ ├─ archive_packages.sh +│ ├─ info_param.sh +│ ├─ info_references.sh +│ ├─ info_tree_license.sh +│ ├─ repo_compose.sh +│ ├─ repo_gitea.tmpl.sh +│ ├─ repo_gitlab.tmpl.sh +│ ├─ repo_local.tmpl.sh +│ └─ repo_update.sh +├─ draft +│ ├─ README.md +│ └─ round-robin.md +├─ pictures +│ ├─ README.md +│ ├─ bash_scripts.jpg +│ ├─ color-tomato-theme.jpg +│ ├─ draft.jpg +│ ├─ older-tomato-theme.jpg +│ ├─ pictures.jpg +│ ├─ pomodoro-website.jpg +│ └─ pomodoro.jpg +├─ .gitattributes +├─ .gitignore +├─ CONTRIBUTING.md +├─ DIRECTORY_TREE.md +├─ LICENSE.md +├─ OPEN_LICENSE.txt +├─ README.en.md +├─ README.md +└─ WIKI.md +diff --git a/README.en.md b/README.en.md index 1554c37..8ab718e 100644 --- a/README.en.md +++ b/README.en.md @@ -17,11 +17,21 @@ Constructive criticism and error descriptions can be sent over electronic mail interesting for me and useful for professional growth. Because, firstly, not all mistakes are made intentionally and, secondly, not all of them — are mistakes. -- [pomodoro1](https://hub.mos.ru/pomodoro/1/blob/master/README.en.md) — Three-dimensional graphics in JavaScript. -- [pomodoro2](https://hub.mos.ru/pomodoro/2/blob/master/README.en.md) — Cartesian product, combinatorics. -- [pomodoro3](https://hub.mos.ru/pomodoro/3/blob/master/README.en.md) — Matrix multiplication, rotations. -- [pomodoro4](https://hub.mos.ru/pomodoro/4/blob/master/README.en.md) — Poetry. Humor. -- [pomodoro5](https://hub.mos.ru/pomodoro/5/blob/master/README.en.md) — Drawing pictures with text. +1. [Three-dimensional graphics in JavaScript](https://pomodoro1.mircloud.ru/en/). +2. [Cartesian product, combinatorics](https://pomodoro2.mircloud.ru/en/). +3. [Matrix multiplication and rotations](https://pomodoro3.mircloud.ru/en/). +4. [Poetry, humor](https://pomodoro4.mircloud.ru/en/). +5. [Drawing pictures with text](https://pomodoro5.mircloud.ru/en/). + +### Process + +The creative process continues continuously, especially when there is no work. Fully mature +thoughts become separate projects, and immature ones go as parts of this project. It is +difficult for some thoughts to mature, so they remain incomplete. + +- [Process management](bash_scripts/README.en.md) — scripts Bash. +- [Incomplete publications](draft/README.md) — draft without translation. +- [Avatars for repositories](pictures/README.md) — pictures. ### Build @@ -30,33 +40,20 @@ obfuscation was performed for all classes, variables and functions of HTML, CSS substitution cipher. Code blocks were left without obfuscation, and syntax highlighting was performed on the client. *Obusificator* — is a unique solution, no longer used. -Now the site is generated by Jekyll, the template language is Liquid, syntax -highlighting during build time, and the content of the pages is in Markdown format. -[Maintenance](bash_scripts/README.en.md) -is performed by Bash scripts. The thought does not leave me, that -I made a *senseless swap* — in general, nothing has changed. +Now the site is generated by Jekyll, the template language is Liquid, syntax highlighting during build +time, and the content of the pages is in Markdown format. Process management is performed by Bash scripts. +The thought does not leave me, that I made a *senseless swap* — in general, nothing has changed. ### Design -Two design themes for Jekyll in the Liquid template language: -[«Color tomato»](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.en.md) -was written earlier using AngularJS and Material, this was -the design of the previous version of my blog, then an -[«Older tomato»](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.en.md) -— lightweight single-color variant was written using only HTML and CSS, the appearance resembles -the default design theme on GitHub Pages. Both tomatoes supplement each other and are similar to -each other, commonalities and differences between them are marked in the list below. +Two design themes for Jekyll in the Liquid template language: «Color tomato» was written earlier using +AngularJS and Material, this was the design of the previous version of my blog, then an «Older tomato» +— lightweight single-color variant was written using only HTML and CSS, the appearance resembles the +default design theme on GitHub Pages. Both tomatoes supplement each other and are similar to each other, +so they can be used together on the same site. -- [x] Responsive layout. -- [x] User JS and CSS files in the head block of HTML pages. -- [x] SEO-markup using JSON-LD and Open Graph. -- [x] Switch between two languages and two tomato themes. -- [x] Map of site pages with their translations in XML format. -- [x] Simple 404 page for non-existing URLs. -- [x] Fonts: Roboto for text and JBMono for code blocks. -- [x] Tomatoes: PNG, JPG 120x120, SVG 64x64, ICO 32x32. -- [ ] Color selection during the build, green is the default color. -- [ ] Scroll-to-top button in Material style. +- [Color tomato](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.en.md) — color selection during the build. +- [Older tomato](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.en.md) — lightweight decoration theme. ### License diff --git a/README.md b/README.md index 62fa909..372ca28 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,64 @@ # [Помидоры](README.en.md) -Обновлённый и ещё раз переписанный вариант моего старого блога, новые версии -старых программ: объёмный тетрис, простая капча и другие — упрощённая сборка -сайта без обфускации, облегчённое оформление страниц без JavaScript и открытая -лицензия РФ вместо MIT — изменений много и везде, но суть осталась прежней — -ничего не изменилось. Серия статических вёб-сайтов «Помидоры» — чтобы не скучать и -чтобы не забыть, как программы писать, когда работы нет. +Обновлённый и ещё раз переписанный вариант моего старого блога, новые версии старых программ: объёмный тетрис, +простая капча и другие — упрощённая сборка сайта без обфускации, облегчённое оформление страниц без JavaScript и +открытая лицензия РФ вместо MIT — изменений много и везде, но суть осталась прежней — ничего не изменилось. Серия +статических вёб-сайтов «Помидоры» — чтобы не скучать и чтобы не забыть, как программы писать, когда работы нет. ### Содержание -Решения задач по программированию с ошибками и описания решений. Исправление ошибок — дополнительная -задача для троечников и любителей списывать. Весь код проверен и работает — выглядит красиво, но на -продуктовом сервере такой код использовать нельзя. Вопрос на четвёрку: найти хотя бы одну ошибку. -Вопрос на пятёрку: найти *больше* ошибок и написать *своё* решение. +Решения задач по программированию с ошибками и описания решений. Исправление ошибок — дополнительная задача для +троечников и любителей списывать. Весь код проверен и работает — выглядит красиво, но на продуктовом сервере такой +код использовать нельзя. Вопрос на четвёрку: найти хотя бы одну ошибку. Вопрос на пятёрку: найти *больше* ошибок и +написать *своё* решение. -Конструктивную критику и описания ошибок можно отправлять по электронной почте — как минимум мне -это интересно и полезно для профессионального роста. Потому что, во-первых, не все ошибки допущены -намеренно и, во-вторых, не все они — есть ошибки. +Конструктивную критику и описания ошибок можно отправлять по электронной почте — как минимум мне это интересно и +полезно для профессионального роста. Потому что, во-первых, не все ошибки допущены намеренно и, во-вторых, не все +они — есть ошибки. -- [pomodoro1](https://hub.mos.ru/pomodoro/1/blob/master/README.md) — Трёхмерная графика на JavaScript. -- [pomodoro2](https://hub.mos.ru/pomodoro/2/blob/master/README.md) — Декартово произведение, комбинаторика. -- [pomodoro3](https://hub.mos.ru/pomodoro/3/blob/master/README.md) — Умножение матриц, повороты. -- [pomodoro4](https://hub.mos.ru/pomodoro/4/blob/master/README.md) — Поэзия. Юмор. -- [pomodoro5](https://hub.mos.ru/pomodoro/5/blob/master/README.md) — Рисуем картинки текстом. +1. [Трёхмерная графика на JavaScript](https://pomodoro1.mircloud.ru/). +2. [Декартово произведение, комбинаторика](https://pomodoro2.mircloud.ru/). +3. [Умножение матриц и повороты](https://pomodoro3.mircloud.ru/). +4. [Поэзия, юмор](https://pomodoro4.mircloud.ru/). +5. [Рисуем картинки текстом](https://pomodoro5.mircloud.ru/). + +### Процесс + +Творческий процесс продолжается непрерывно, особенно, когда работы нет. Полностью созревшие мысли +становятся отдельными проектами, а несозревшие идут как части этого проекта. Некоторым мыслям +сложно созреть, поэтому они остаются незавершёнными. + +- [Управление процессами](bash_scripts/README.md) — скрипты Bash. +- [Незавершённые публикации](draft/README.md) — черновик. +- [Аватарки для репозиториев](pictures/README.md) — картинки. ### Сборка -Раньше сборку сайта из шаблонов выполняла кастомная программа на Java. После сборки выполнялась -обфускация для всех классов, переменных и функций HTML, CSS и JS шифром замены по словарю. Блоки -кода оставлялись без обфускации, а подсветка синтаксиса выполнялась на клиенте. *Обусификатор* — -уникальное решение, больше не используется. +Раньше сборку сайта из шаблонов выполняла кастомная программа на Java. После сборки выполнялась обфускация для +всех классов, переменных и функций HTML, CSS и JS шифром замены по словарю. Блоки кода оставлялись без обфускации, +а подсветка синтаксиса выполнялась на клиенте. *Обусификатор* — уникальное решение, больше не используется. -Теперь сборку сайта выполняет Jekyll, язык шаблонов Liquid, подсветка -синтаксиса во время сборки, а содержание страниц в формате Markdown. -[Обслуживание](bash_scripts/README.md) -выполняется скриптами Bash. Меня не покидает мысль, что -я *поменял шило на мыло* — в целом ничего не изменилось. +Теперь сборку сайта выполняет Jekyll, язык шаблонов Liquid, подсветка синтаксиса во время +сборки, а содержание страниц в формате Markdown. Управление процессами выполняют скрипты Bash. +Меня не покидает мысль, что я *поменял шило на мыло* — в целом ничего не изменилось. ### Оформление -Две темы оформления для Jekyll на языке шаблонов Liquid: -[«Цветной помидор»](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md) -был написан раньше с использованием AngularJS и Material, таким -было оформление предыдущей версии моего блога, затем был написан -[«Старый помидор»](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md) -— облегчённый одноцветный вариант с использованием только HTML и CSS, внешний вид -напоминает тему оформления по умолчанию на GitHub Pages. Оба помидора дополняют друг -друга и похожи друг на друга, общие черты и различия между ними отмечены в списке ниже. +Две темы оформления для Jekyll на языке шаблонов Liquid: «Цветной помидор» был написан раньше с +использованием AngularJS и Material, таким было оформление предыдущей версии моего блога, затем +был написан «Старый помидор» — облегчённый одноцветный вариант с использованием только HTML и CSS, +внешний вид напоминает тему оформления по умолчанию на GitHub Pages. Оба помидора дополняют друг +друга и похожи друг на друга, поэтому их можно использовать вместе на одном сайте. -- [x] Адаптивная вёрстка или Responsive layout. -- [x] Файлы пользователя JS и CSS в блоке head страниц HTML. -- [x] SEO-разметка с использованием JSON-LD и Open Graph. -- [x] Переключение между двумя языками и помидорными темами. -- [x] Карта страниц сайта с их переводами в формате XML. -- [x] Простая страница 404 для несуществующих URL-адресов. -- [x] Шрифты: Roboto для текста и JBMono для блоков кода. -- [x] Помидоры: PNG, JPG 120x120, SVG 64x64, ICO 32x32. -- [ ] Выбор цвета во время сборки, зелёный цвет по умолчанию. -- [ ] Кнопка прокрутки вверх в стиле Material. +- [Цветной помидор](https://hub.mos.ru/golovin.gg/color-tomato-theme/blob/master/README.md) — выбор цвета во время сборки. +- [Старый помидор](https://hub.mos.ru/golovin.gg/older-tomato-theme/blob/master/README.md) — легковесная тема оформления. ### Лицензия -Раньше к своим проектам в интернете прикладывал лицензию MIT, но когда появилась открытая -лицензия РФ — перешёл на неё, сразу внёс небольшие изменения в текст и дополнил от себя, -хотя я не юрист. Основной смысл лицензии остался прежним — программа предоставляется -бесплатно, но без каких-либо гарантий, и автор программы — это я. +Раньше к своим проектам в интернете прикладывал лицензию MIT, но когда появилась открытая лицензия РФ +— перешёл на неё, сразу внёс небольшие изменения в текст и дополнил от себя, хотя я не юрист. Основной +смысл лицензии остался прежним — программа предоставляется бесплатно, но без каких-либо гарантий, +и автор программы — это я. - [OPEN_LICENSE.txt](OPEN_LICENSE.txt) — основной текст лицензии и пояснение к нему без изменений, можно найти в интернете. Из него удалил лишние пробелы и пробельные символы, diff --git a/WIKI.md b/WIKI.md index e73ffaf..e1eaac9 100644 --- a/WIKI.md +++ b/WIKI.md @@ -1,7 +1,7 @@
-. -├─ color-tomato-theme — Decoration -├─ older-tomato-theme — Decoration -├─ pomodoro — Description -├─ pomodoro1 — Website -├─ pomodoro2 — Website -├─ pomodoro3 — Website -├─ pomodoro4 — Website -└─ pomodoro5 — Website +. +├─ color-tomato-theme +├─ older-tomato-theme +├─ pomodoro +├─ pomodoro1 +├─ pomodoro2 +├─ pomodoro3 +├─ pomodoro4 +└─ pomodoro5diff --git a/bash_scripts/README.md b/bash_scripts/README.md index 56b4305..4322ec7 100644 --- a/bash_scripts/README.md +++ b/bash_scripts/README.md @@ -1,36 +1,36 @@ -# [Обслуживание](README.en.md) +# [Управление процессами](README.en.md) -Автоматизация процессов для статических вёб-сайтов [«Помидоры»](https://hub.mos.ru/golovin.gg/pomodoro/blob/master/README.md). +Создание архива, переключение домена, составление скриптов и создание репозиториев для публикации. -Создание архивов, сборка вёб-сайтов, создание локальных и удалённых репозиториев для публикации. +| Скрипты Bash | Выполняемые действия | +|:---------------------------------------------|:---------------------------------------------------------------------------------| +| [**archive_backup.sh**](archive_backup.sh) | Создание общего архива для каталогов проектов на текущую дату. | +| [archive_packages.sh](archive_packages.sh) | Сборка вёб-сайтов, создание и копирование архивов для развёртывания. | +| [**info_param.sh**](info_param.sh) | Параметр для других скриптов. Переключение домена удалённого репозитория. | +| [info_references.sh](info_references.sh) | Обновление домена удалённого репозитория в перекрёстных ссылках в описаниях. | +| [info_tree_license.sh](info_tree_license.sh) | Построение дерева каталогов для каждого проекта и копирование файлов лицензии. | +| [**repo_compose.sh**](repo_compose.sh) | Составление скриптов с параметрами и копирование их в каталоги проектов. | +| [repo_gitea.tmpl.sh](repo_gitea.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitea. | +| [repo_gitlab.tmpl.sh](repo_gitlab.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitlab. | +| [repo_local.tmpl.sh](repo_local.tmpl.sh) | Шаблон скрипта без параметров для создания локального репозитория. | +| [**repo_update.sh**](repo_update.sh) | Параллельное выполнение скриптов и создание репозиториев для каталогов проектов. | -| Скрипты Bash | Выполняемые действия | -|:-------------------------------------------|:------------------------------------------------------------------------------------------| -| [archive-common.sh](archive-common.sh) | Создание общего архива для каталогов проектов на текущую дату. | -| [archive-packages.sh](archive-packages.sh) | Сборка вёб-сайтов, создание и копирование архивов для развёртывания. | -| [info-copy.sh](info-copy.sh) | Копирование информационных файлов и построение дерева в каждом из каталогов проектов. | -| [**info-domain.sh**](info-domain.sh) | Используется в других скриптах. Установка параметра домена удалённого репозитория. | -| [info-toggle.sh](info-toggle.sh) | Переключение удалённого репозитория для перекрёстных ссылок в описаниях. | -| [**repo-compose.sh**](repo-compose.sh) | Установка параметров для шаблонов и копирование готовых скриптов в каталоги проектов. | -| [repo-local.tmpl.sh](repo-local.tmpl.sh) | Шаблон скрипта без параметров для создания локального репозитория. | -| [repo-gitea.tmpl.sh](repo-gitea.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitea. | -| [repo-gitlab.tmpl.sh](repo-gitlab.tmpl.sh) | Шаблон скрипта без параметров для создания удалённого репозитория gitlab. | -| [**repo-update.sh**](repo-update.sh) | Выполнение скриптов в параллельном режиме и создание репозиториев для каталогов проектов. | +## Каталоги проектов -## Структура - -Линейная структура каталогов — все проекты расположены в одной папке. - -Скрипты запускаются из тех каталогов, в которых они расположены. +Одноуровневая структура каталогов — локальные проекты расположены на одном +уровне. На сервере репозитории с вёб-сайтами переходят в отдельную группу, +а остальные репозитории остаются у пользователя. Структура каталогов для +[git.org.ru](https://git.org.ru/golovin.gg) и +[hub.mos.ru](https://hub.mos.ru/golovin.gg).
-. -├─ color-tomato-theme — Оформление -├─ older-tomato-theme — Оформление -├─ pomodoro — Описание -├─ pomodoro1 — Вёб-сайт -├─ pomodoro2 — Вёб-сайт -├─ pomodoro3 — Вёб-сайт -├─ pomodoro4 — Вёб-сайт -└─ pomodoro5 — Вёб-сайт +. +├─ color-tomato-theme +├─ older-tomato-theme +├─ pomodoro +├─ pomodoro1 +├─ pomodoro2 +├─ pomodoro3 +├─ pomodoro4 +└─ pomodoro5diff --git a/bash_scripts/archive-common.sh b/bash_scripts/archive_backup.sh similarity index 63% rename from bash_scripts/archive-common.sh rename to bash_scripts/archive_backup.sh index 8ada585..6c784bc 100755 --- a/bash_scripts/archive-common.sh +++ b/bash_scripts/archive_backup.sh @@ -3,5 +3,6 @@ echo "Создание общего архива для каталогов пр cd ../.. filename="pomodoro-$(date '+%Y-%m-%d').zip" rm -rf "$filename" -7z a -tzip -ssw -mx9 -r0 "$filename" ./* -xr!".idea" -xr!".git" -x!".token_*" \ - -x!"*.iml" -x!"*.gem" -x!"*.lock" -x!"*.zip" -x!"_site*" -x!".repo_*.sh" +7z a -tzip -ssw -mx9 -r0 "$filename" ./* -xr!".idea" -xr!".git" -x!"*.iml" \ + -x!"*.gem" -x!"*.lock" -x!"*.zip" -x!"_site*" -x!".token_*" -x!".repo_*" \ + -xr!"DIRECTORY_TREE.md" -xr!"CONTRIBUTING.md" -x!"*LICENSE*" diff --git a/bash_scripts/archive-packages.sh b/bash_scripts/archive_packages.sh similarity index 93% rename from bash_scripts/archive-packages.sh rename to bash_scripts/archive_packages.sh index 49101ab..00ebe63 100755 --- a/bash_scripts/archive-packages.sh +++ b/bash_scripts/archive_packages.sh @@ -7,6 +7,6 @@ for ((i = 1; i <= 5; i++)); do cd "../pomodoro$i" || continue ./build.sh ./package.sh - cp -uv "pomodoro$i.zip" .. + cp -v "pomodoro$i.zip" .. done echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/bash_scripts/info-copy.sh b/bash_scripts/info-copy.sh deleted file mode 100755 index 29728fd..0000000 --- a/bash_scripts/info-copy.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -echo "Копирование информационных файлов и построение дерева в каждом из каталогов проектов." -cd .. -basedir=$(pwd) -milliseconds=$(date '+%s%3N') -find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do - echo "Обработка: $dir" - cd "$dir" || continue - if [ "${dir##*/}" != "${basedir##*/}" ]; then - cp -uv "$basedir"/CONTRIBUTING.md . - cp -uv "$basedir"/*LICENSE* . - fi - { - echo "## Дерево каталогов" - echo - echo "
" - tree -nvf --dirsfirst -I "*.gem|*.lock|*.zip|_site*" --noreport - echo "" - } >DIRECTORY-TREE.md - sed -i -e "s/ / /g" -e "s/ / /g" -e "s/──/─/g" DIRECTORY-TREE.md - find . -mindepth 1 -type f,d -not -regex '.*\.\(gem\|lock\|zip\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do - # echo "${dir#*/} => \\$file >> ${file#*/} >> ${file##*/}" - sed -i "s|\\$file|${file##*/}<\/a>|g" DIRECTORY-TREE.md - done -done -echo "Время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/bash_scripts/info-domain.sh b/bash_scripts/info-domain.sh deleted file mode 100755 index 8b72a62..0000000 --- a/bash_scripts/info-domain.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -#remote="git.org.ru" -remote="hub.mos.ru" -echo "Репозиторий: $remote" diff --git a/bash_scripts/info_param.sh b/bash_scripts/info_param.sh new file mode 100755 index 0000000..57f3cb2 --- /dev/null +++ b/bash_scripts/info_param.sh @@ -0,0 +1,4 @@ +#!/bin/bash +#remote="git.org.ru" +remote="hub.mos.ru" +echo "Переключение домена удалённого репозитория: $remote" diff --git a/bash_scripts/info-toggle.sh b/bash_scripts/info_references.sh similarity index 71% rename from bash_scripts/info-toggle.sh rename to bash_scripts/info_references.sh index d8bb08b..eb041fa 100755 --- a/bash_scripts/info-toggle.sh +++ b/bash_scripts/info_references.sh @@ -1,6 +1,6 @@ #!/bin/bash -echo "Переключение удалённого репозитория для перекрёстных ссылок в описаниях." -source info-domain.sh || remote="git.org.ru" +echo "Обновление домена удалённого репозитория в перекрёстных ссылках в описаниях." +remote="git.org.ru" && source info_param.sh cd ../.. find . -type f -name 'README*.md' -o -name '*.gemspec' | sort -r | while read -r file; do echo "$remote => $file" diff --git a/bash_scripts/info_tree_license.sh b/bash_scripts/info_tree_license.sh new file mode 100755 index 0000000..0d5df5c --- /dev/null +++ b/bash_scripts/info_tree_license.sh @@ -0,0 +1,54 @@ +#!/bin/bash +echo "Построение дерева каталогов для каждого проекта и копирование файлов лицензии." +function list_directory_contents { + eval "LC_COLLATE=C ls -A --group-directories-first $exclusions $1" +} +function directory_tree { + local path="$1" + local head="$2" + local tail="$3" + if [ "one" == "$4" ]; then + echo -n "/" + else + echo -ne "\n$head" + fi + echo -n "${path##*/}" + if [ -d "$path" ]; then + local list + readarray -t list <<<"$(list_directory_contents "$path")" + local len=${#list[@]} + local i + for ((i = 0; i < len; i++)); do + if [ -z "${list[$i]}" ]; then + continue + elif ((len == 1)); then + directory_tree "$path/${list[$i]}" "$tail" "$tail" "one" + elif ((i < len - 1)); then + directory_tree "$path/${list[$i]}" "$tail├─ " "$tail│ " + else + directory_tree "$path/${list[$i]}" "$tail└─ " "$tail " + fi + done + fi +} +cd .. +basedir=$(pwd) +milliseconds=$(date '+%s%3N') +find .. -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do + echo "Обработка: $dir" + cd "$dir" || continue + exclusions="-I \".git\" $(sed 's/^/ -I "/;s/$/"/' .gitignore | tr -d '\n')" + { + echo "## Дерево каталогов" + echo -ne "\n
" + directory_tree . + echo -e "\n" + } >DIRECTORY_TREE.md + if [ "${dir##*/}" != "${basedir##*/}" ]; then + rm CONTRIBUTING.md + rm ./*LICENSE* + cp "$basedir"/CONTRIBUTING.md . + cp "$basedir"/*LICENSE* . + fi +done +echo "Время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/bash_scripts/repo-compose.sh b/bash_scripts/repo-compose.sh deleted file mode 100755 index bd3ff83..0000000 --- a/bash_scripts/repo-compose.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -echo "Установка параметров для шаблонов и копирование готовых скриптов в каталоги проектов." -source info-domain.sh || remote="git.org.ru" -basedir=$(pwd) -cd ../.. -find . -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do - echo "Обработка: $dir" - if [ ! -f "$dir"/.gitignore ] || [ "$(grep -cx "\.repo_\*\.sh" "$dir"/.gitignore)" == 0 ]; then - echo ".repo_*.sh" >>"$dir"/.gitignore - echo "Обновлён файл .gitignore" - fi - owner="golovin.gg" - repo=${dir##*/} - description="" - type="usr" - wiki="" - if [[ "$dir" =~ "pomodoro" ]]; then - if [[ "$dir" =~ [[:digit:]] ]]; then - owner="pomodoro" - repo=${dir//[^[:digit:]]/} - type="org" - description="Вёб-сайт: https://${owner}${repo}.mircloud.ru" - else - if [ "$remote" == "hub.mos.ru" ]; then - wiki=$(uni2ascii -a U -qpsn "$dir"/WIKI.md) - else - wiki=$(basenc "$dir"/WIKI.md --base64) - fi - description="Серия статических вёб-сайтов / Содержание / Сборка / Оформление / Открытая лицензия РФ" - fi - elif [[ "$dir" =~ "color-tomato" ]]; then - description="Цветной помидор / Тема оформления Jekyll" - elif [[ "$dir" =~ "older-tomato" ]]; then - description="Старый помидор / Тема оформления Jekyll" - elif [[ "$dir" =~ "maintenance" ]]; then - description="Скрипты Bash / Обслуживание / Автоматизация процессов / Создание архивов / Сборка вёб-сайтов / " - description+="Копирование файлов / Построение дерева каталогов / Создание скриптов из шаблонов / " - description+="Шаблоны скриптов / Создание локальных и удалённых репозиториев" - elif [[ "$dir" =~ "draft" ]]; then - description="Черновик / Код с комментариями" - elif [[ "$dir" =~ "pictures" ]]; then - description="Картинки / Аватарки для репозиториев" - fi - { - echo "#!/bin/bash" - if [ "$remote" == "hub.mos.ru" ]; then - echo "user=\"golovin.gg\"" - fi - echo "owner=\"$owner\"" - echo "repo=\"$repo\"" - echo "description=\"$description\"" - echo "type=\"$type\"" - echo "wiki=\"$wiki\"" - if [ "$remote" == "hub.mos.ru" ]; then - echo "token=\"$(cat "$basedir/.token_hub_mos_ru")\"" - cat "$basedir/repo-gitlab.tmpl.sh" - else - echo "token=\"$(cat "$basedir/.token_git_org_ru")\"" - cat "$basedir/repo-gitea.tmpl.sh" - fi - } >"$dir"/.repo_remote.sh && chmod +x "$dir"/.repo_remote.sh - { - echo "#!/bin/bash" - echo "remote=\"$remote\"" - echo "owner=\"$owner\"" - echo "repo=\"$repo\"" - cat "$basedir/repo-local.tmpl.sh" - } >"$dir"/.repo_local.sh && chmod +x "$dir"/.repo_local.sh -done diff --git a/bash_scripts/repo-update.sh b/bash_scripts/repo-update.sh deleted file mode 100755 index 857b5ba..0000000 --- a/bash_scripts/repo-update.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -echo "Выполнение скриптов в параллельном режиме и создание репозиториев для каталогов проектов." -cd .. -milliseconds=$(date '+%s%3N') -find .. -mindepth 1 -maxdepth 1 -type d -printf \ - 'cd %h/%f && ./.repo_remote.sh >/dev/null && ./.repo_local.sh >/dev/null\0' | xargs -L1 -0 -P0 bash -c -echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/bash_scripts/repo_compose.sh b/bash_scripts/repo_compose.sh new file mode 100755 index 0000000..a2a1f69 --- /dev/null +++ b/bash_scripts/repo_compose.sh @@ -0,0 +1,64 @@ +#!/bin/bash +echo "Составление скриптов с параметрами и копирование их в каталоги проектов." +remote="git.org.ru" && source info_param.sh +basedir=$(pwd) +cd ../.. +find . -mindepth 1 -maxdepth 1 -type d | sort -r | while read -r dir; do + echo "Обработка: $dir" + if [ ! -f "$dir"/.gitignore ] || [ "$(grep -cx "\.repo_\*" "$dir"/.gitignore)" == 0 ]; then + echo ".repo_*" >>"$dir"/.gitignore + echo "Обновлён файл .gitignore" + fi + owner="golovin.gg" + repo=${dir##*/} + description="" + type="usr" + wiki="" + if [ -f "$dir"/WIKI.md ]; then + if [ "$remote" == "hub.mos.ru" ]; then + wiki=$(uni2ascii -a U -qpsn "$dir"/WIKI.md) + else + wiki=$(basenc "$dir"/WIKI.md --base64) + fi + fi + if [[ "$dir" =~ "pomodoro" ]]; then + if [[ "$dir" =~ [[:digit:]] ]]; then + owner="pomodoro" + repo=${dir//[^[:digit:]]/} + type="org" + description="Вёб-сайт: https://${owner}${repo}.mircloud.ru" + else + description="Описание / Управление процессами / Незавершённые публикации / Аватарки для репозиториев" + fi + elif [[ "$dir" =~ "color-tomato" ]]; then + description="Цветной помидор / Тема оформления Jekyll" + elif [[ "$dir" =~ "older-tomato" ]]; then + description="Старый помидор / Тема оформления Jekyll" + fi + { + echo "#!/bin/bash" + if [ "$remote" == "hub.mos.ru" ]; then + echo "user=\"golovin.gg\"" + fi + echo "owner=\"$owner\"" + echo "repo=\"$repo\"" + echo "description=\"$description\"" + echo "type=\"$type\"" + echo "wiki=\"$wiki\"" + if [ "$remote" == "hub.mos.ru" ]; then + echo "token=\"$(cat "$basedir/.token_hub_mos_ru")\"" + cat "$basedir/repo_gitlab.tmpl.sh" + else + echo "token=\"$(cat "$basedir/.token_git_org_ru")\"" + cat "$basedir/repo_gitea.tmpl.sh" + fi + } >"$dir"/.repo_remote.sh && chmod +x "$dir"/.repo_remote.sh + { + echo "#!/bin/bash" + echo "remote=\"$remote\"" + echo "owner=\"$owner\"" + echo "repo=\"$repo\"" + echo "folder=\"${dir##*/}\"" + cat "$basedir/repo_local.tmpl.sh" + } >"$dir"/.repo_local.sh && chmod +x "$dir"/.repo_local.sh +done diff --git a/bash_scripts/repo-gitea.tmpl.sh b/bash_scripts/repo_gitea.tmpl.sh similarity index 99% rename from bash_scripts/repo-gitea.tmpl.sh rename to bash_scripts/repo_gitea.tmpl.sh index 6a9bb73..f4dbb45 100644 --- a/bash_scripts/repo-gitea.tmpl.sh +++ b/bash_scripts/repo_gitea.tmpl.sh @@ -2,7 +2,7 @@ if [ -z "$token" ] || [ -z "$owner" ] || [ -z "$repo" ] || [ -z "$description" ] echo "Не указаны обязательные параметры." && exit 2 fi echo "Создание удалённого репозитория для текущего каталога." -seconds=2 +seconds=3 milliseconds=$(date '+%s%3N') echo "Удаление старого репозитория." curl -X DELETE "https://git.org.ru/api/v1/repos/$owner/$repo" \ diff --git a/bash_scripts/repo-gitlab.tmpl.sh b/bash_scripts/repo_gitlab.tmpl.sh similarity index 96% rename from bash_scripts/repo-gitlab.tmpl.sh rename to bash_scripts/repo_gitlab.tmpl.sh index ac6cc37..32ef272 100644 --- a/bash_scripts/repo-gitlab.tmpl.sh +++ b/bash_scripts/repo_gitlab.tmpl.sh @@ -80,8 +80,12 @@ echo echo "Ожидание $seconds с." sleep $seconds echo "Добавление аватарки для репозитория." +picture=$repo +if [ "$type" == "org" ]; then + picture="pomodoro-website" +fi curl -i -X PUT "https://hub.mos.ru/api/v4/projects/$owner%2F$repo" \ -H "PRIVATE-TOKEN: $token" \ - -F "avatar=@../pictures/pictures/$repo.jpg" + -F "avatar=@../pomodoro/pictures/$picture.jpg" echo echo "Время создания удалённого репозитория: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/bash_scripts/repo-local.tmpl.sh b/bash_scripts/repo_local.tmpl.sh similarity index 60% rename from bash_scripts/repo-local.tmpl.sh rename to bash_scripts/repo_local.tmpl.sh index ebdec00..3fc6e97 100644 --- a/bash_scripts/repo-local.tmpl.sh +++ b/bash_scripts/repo_local.tmpl.sh @@ -1,32 +1,39 @@ -if [ -z "$remote" ] || [ -z "$owner" ] || [ -z "$repo" ]; then +if [ -z "$remote" ] || [ -z "$owner" ] || [ -z "$repo" ] || [ -z "$folder" ]; then echo "Не указаны обязательные параметры." && exit 2 fi echo "Создание локального репозитория, подключение к удалённому и передача данных." +seconds=3 milliseconds=$(date '+%s%3N') rm -rf .git git init -b master git remote add "$remote" "git@$remote:$owner/$repo.git" git add .git* -git commit -m "Инициализация / $repo" -git push -u "$remote" master +git commit -m "Инициализация / $folder" +if [ "$remote" == "hub.mos.ru" ]; then + echo "Второй пуш, потому что лингвист с первого раза не срабатывает." + git push -u "$remote" master + echo "Ожидание $seconds с." + sleep $seconds +fi git add CONTRIBUTING.md -git add ./*LICENSE* +git add \*LICENSE* git commit -m "Открытая лицензия РФ" -git add DIRECTORY-TREE.md -git add README* +git add DIRECTORY_TREE.md +git add WIKI.md +git add \*README* git commit -m "Описание проекта" -git add ./*.sh +git add \*.sh git commit -m "Скрипты bash" -git add ./*.min.css -git add ./*.min.js -git add ./*.woff +git add \*.min.css +git add \*.min.js +git add \*.woff git commit -m "Сторонние материалы" -git add ./*.bmp -git add ./*.gif -git add ./*.ico -git add ./*.jpg -git add ./*.png -git add ./*.svg +git add \*.bmp +git add \*.gif +git add \*.ico +git add \*.jpg +git add \*.png +git add \*.svg git commit -m "Картинки" find . -type f -not -regex '.*\.\(gem\|zip\|lock\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do echo "Обработка: $file" diff --git a/bash_scripts/repo_update.sh b/bash_scripts/repo_update.sh new file mode 100755 index 0000000..29b0801 --- /dev/null +++ b/bash_scripts/repo_update.sh @@ -0,0 +1,7 @@ +#!/bin/bash +echo "Параллельное выполнение скриптов и создание репозиториев для каталогов проектов." +cd .. +milliseconds=$(date '+%s%3N') +find .. -mindepth 1 -maxdepth 1 -type d -printf \ + 'cd %h/%f && ./.repo_remote.sh >.repo_remote.log && ./.repo_local.sh >.repo_local.log\0' | xargs -L1 -0 -P0 bash -c +echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$milliseconds")) мс." diff --git a/draft/2023-06-13-directory-tree.md b/draft/2023-06-13-directory-tree.md deleted file mode 100644 index 4fb5cd5..0000000 --- a/draft/2023-06-13-directory-tree.md +++ /dev/null @@ -1,75 +0,0 @@ -# Дерево каталогов со ссылками - -Напишем скрипт Bash для создания файла [`DIRECTORY-TREE.md`](../DIRECTORY-TREE.md) в корне репозитория со -ссылками на его объекты. Будем использовать полученный файл для навигации по репозиторию в вёб-интерфейсе. - -
tree
и получаем дерево каталогов в текстовом виде, где для
-каждогофайла указываем полный префикс пути Linux от корня репозитория. Папки выводим перед файлами и
-применяем буквенно-цифровую сортировку. Исключаем файлы и папки, которых не должно быть в репозитории.
-Полученное дерево помещаем в блок <pre>
и добавляем заголовок.
-sed
и регулярные выражения. Пробельные символы заменяем на пробелы. Пошагово
-формируем файл DIRECTORY-TREE.md
.
-find
и получаем список файлов и каталогов Linux, сортируем
-этот список в обратном порядке от самого длинного пути до самого короткого, т. е. вложенные файлы будут перед
-их каталогами, чтобы не получилось заменить только часть пути. Затем обходим отсортированный список и заменяем
-в полученном дереве относительный путь Linux на относительную ссылку HTTP в теге <a>
и именем
-файла в представлении ссылки.
-DIRECTORY-TREE.md
для вёб-интерфейса репозитория — Markdown преобразованный в HTML.
-" - tree -nvf --dirsfirst -I "*.gem|*.lock|*.zip|_site*" --noreport - echo "" -} >DIRECTORY-TREE.md -sed -i -e "s/ / /g" -e "s/ / /g" -e "s/──/─/g" DIRECTORY-TREE.md -find . -mindepth 1 -type f,d -not -regex '.*\.\(gem\|lock\|zip\)\|.*/\(\.\|_site\).*' | sort -r | while read -r file; do - echo "Обработка: \\$file >> ${file#*/} >> ${file##*/}" - sed -i "s|\\$file|${file##*/}<\/a>|g" DIRECTORY-TREE.md -done -``` - -