From f912a4889ad6781c2bd1f8fa9d349df1df54558f Mon Sep 17 00:00:00 2001 From: Andrey Lutsenko Date: Sun, 14 Jun 2026 21:42:22 +1000 Subject: [PATCH] =?UTF-8?q?fix:=20sync=20remotes=20=D0=B1=D0=B5=D0=B7=20?= =?UTF-8?q?=D1=87=D1=83=D0=B6=D0=B8=D1=85=20readme-=D1=88=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=BE=D0=B2,=20check-github-clean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Каждое зеркало получает только свой README и шаблон; GitHub без internal URL в дереве. --- scripts/check-github-clean.sh | 52 ++++++++++++++++++++++++++++ scripts/push-remotes.sh | 65 +++++++++++++++++++++++++---------- 2 files changed, 99 insertions(+), 18 deletions(-) create mode 100755 scripts/check-github-clean.sh diff --git a/scripts/check-github-clean.sh b/scripts/check-github-clean.sh new file mode 100755 index 0000000..bf94d7f --- /dev/null +++ b/scripts/check-github-clean.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# Перед push на github: нет internal URL и файлов других зеркал. +set -Eeuo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT" + +PATTERNS=( + 'git\.kalinamall\.ru' + 'git\.papatramp\.ru' + 'papatramp\.lan' + '192\.168\.' + 'kalinamall/main' + 'push.*kalinamall' +) + +scan_files() { + local hits=0 + local files + files=$(git ls-files) + while read -r f; do + [[ -z $f ]] && continue + [[ -f $f ]] || continue + case $f in + scripts/check-github-clean.sh | scripts/push-remotes.sh) continue ;; + esac + for pat in "${PATTERNS[@]}"; do + if grep -qE "$pat" "$f" 2>/dev/null; then + echo " INTERNAL? $f (pattern: $pat)" + hits=$((hits + 1)) + fi + done + done <<<"$files" + return $hits +} + +echo "[check-github-clean] сканирование tracked-файлов" +n=0 +scan_files || n=$? +if [[ $n -gt 0 ]]; then + echo "[check-github-clean] найдено: $n" + exit 1 +fi + +for f in scripts/readme/kalinamall.md scripts/readme/home.md; do + if [[ -f $f ]]; then + echo " FORBIDDEN FILE: $f" + exit 1 + fi +done + +echo "[check-github-clean] OK" diff --git a/scripts/push-remotes.sh b/scripts/push-remotes.sh index 88ba407..6fae790 100755 --- a/scripts/push-remotes.sh +++ b/scripts/push-remotes.sh @@ -1,46 +1,75 @@ #!/usr/bin/env bash -# Push README.md с правильным содержимым на каждый remote (ветки README расходятся). +# Синхронизация main на kalinamall / home / github: свой README и только свои readme-шаблоны. set -Eeuo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" CHECK_SECRETS="${CHECK_SECRETS:-$HOME/Documents/Cursor/Projects/Answer.and.other.shit/guides/init.new.comps/scripts/check-no-secrets.sh}" +CHECK_GITHUB="${CHECK_GITHUB:-$ROOT/scripts/check-github-clean.sh}" -push_readme() { +sync_remote() { local remote=$1 - local template=$2 - local message=$3 - local branch="push-${remote}-readme" + local readme_template=$2 + local branch="sync-${remote}" + shift 2 + local -a remove=( "$@" ) git fetch "$remote" git checkout -B "$branch" "${remote}/main" - cp "$template" README.md - git add README.md + git checkout main -- . + cp "$readme_template" README.md + + for f in "${remove[@]}"; do + if [[ -e $f ]]; then + rm -rf "$f" + fi + done + + git add -A if git diff --cached --quiet; then - echo "[push-readme] $remote: README без изменений" + echo "[push-remotes] $remote: без изменений" else - git commit -m "$message" + git commit -m "chore: sync $remote (README и файлы зеркала)" fi - if [[ $remote == github ]] && [[ -f $CHECK_SECRETS ]]; then - bash "$CHECK_SECRETS" github + + if [[ $remote == github ]]; then + if [[ -f $CHECK_GITHUB ]]; then + bash "$CHECK_GITHUB" + fi + if [[ -f $CHECK_SECRETS ]]; then + bash "$CHECK_SECRETS" github + fi fi + git push "$remote" "${branch}:main" git checkout main git branch -D "$branch" } -echo "[push-readme] kalinamall: push текущего main" -git push kalinamall main +echo "[push-remotes] kalinamall" +sync_remote kalinamall "$ROOT/scripts/readme/kalinamall.md" \ + scripts/readme/github.md \ + scripts/readme/home.md -push_readme home "$ROOT/scripts/readme/home.md" "docs: README для home (git.papatramp.ru)" -push_readme github "$ROOT/scripts/readme/github.md" "docs: README для GitHub (без internal URL)" +echo "[push-remotes] home" +sync_remote home "$ROOT/scripts/readme/home.md" \ + scripts/readme/github.md \ + scripts/readme/kalinamall.md \ + scripts/push-remotes.sh \ + scripts/check-github-clean.sh + +echo "[push-remotes] github" +sync_remote github "$ROOT/scripts/readme/github.md" \ + scripts/readme/kalinamall.md \ + scripts/readme/home.md \ + scripts/push-remotes.sh \ + scripts/check-github-clean.sh cp "$ROOT/scripts/readme/kalinamall.md" README.md git add README.md if ! git diff --cached --quiet; then - git commit -m "docs: README для kalinamall (рабочая копия)" + git commit -m "docs: README kalinamall (рабочая копия main)" fi -git push kalinamall main -echo "[push-readme] готово." +echo "[push-remotes] готово."