fix: sync remotes без чужих readme-шаблонов, check-github-clean

Каждое зеркало получает только свой README и шаблон; GitHub без internal URL в дереве.
This commit is contained in:
Andrey Lutsenko
2026-06-14 21:42:22 +10:00
parent 897d9e6820
commit f912a4889a
2 changed files with 99 additions and 18 deletions
+52
View File
@@ -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"
+48 -19
View File
@@ -1,46 +1,75 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Push README.md с правильным содержимым на каждый remote (ветки README расходятся). # Синхронизация main на kalinamall / home / github: свой README и только свои readme-шаблоны.
set -Eeuo pipefail set -Eeuo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT" cd "$ROOT"
CHECK_SECRETS="${CHECK_SECRETS:-$HOME/Documents/Cursor/Projects/Answer.and.other.shit/guides/init.new.comps/scripts/check-no-secrets.sh}" 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 remote=$1
local template=$2 local readme_template=$2
local message=$3 local branch="sync-${remote}"
local branch="push-${remote}-readme" shift 2
local -a remove=( "$@" )
git fetch "$remote" git fetch "$remote"
git checkout -B "$branch" "${remote}/main" git checkout -B "$branch" "${remote}/main"
cp "$template" README.md git checkout main -- .
git add README.md cp "$readme_template" README.md
if git diff --cached --quiet; then
echo "[push-readme] $remote: README без изменений" for f in "${remove[@]}"; do
else if [[ -e $f ]]; then
git commit -m "$message" rm -rf "$f"
fi fi
if [[ $remote == github ]] && [[ -f $CHECK_SECRETS ]]; then done
git add -A
if git diff --cached --quiet; then
echo "[push-remotes] $remote: без изменений"
else
git commit -m "chore: sync $remote (README и файлы зеркала)"
fi
if [[ $remote == github ]]; then
if [[ -f $CHECK_GITHUB ]]; then
bash "$CHECK_GITHUB"
fi
if [[ -f $CHECK_SECRETS ]]; then
bash "$CHECK_SECRETS" github bash "$CHECK_SECRETS" github
fi fi
fi
git push "$remote" "${branch}:main" git push "$remote" "${branch}:main"
git checkout main git checkout main
git branch -D "$branch" git branch -D "$branch"
} }
echo "[push-readme] kalinamall: push текущего main" echo "[push-remotes] kalinamall"
git push kalinamall main 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)" echo "[push-remotes] home"
push_readme github "$ROOT/scripts/readme/github.md" "docs: README для GitHub (без internal URL)" 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 cp "$ROOT/scripts/readme/kalinamall.md" README.md
git add README.md git add README.md
if ! git diff --cached --quiet; then if ! git diff --cached --quiet; then
git commit -m "docs: README для kalinamall (рабочая копия)" git commit -m "docs: README kalinamall (рабочая копия main)"
fi fi
git push kalinamall main
echo "[push-readme] готово." echo "[push-remotes] готово."