Files
3X-UI_autoVPS/tools/fork-sync.sh
T

94 lines
4.8 KiB
Bash
Raw 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.
#!/usr/bin/env bash
# 3X-UI_KIT (форк hacker07): подтянуть обновление автора в ветку dev и прогнать проверки.
#
# Ничего не публикует и ничего не обновляет на серверах: после проверок печатает, что делать
# дальше (версия, подпись, тег, push). Запускать с рабочей станции, по шагам.
#
# bash tools/fork-sync.sh # подтянуть автора и проверить
# bash tools/fork-sync.sh --apply # ещё и вписать VERSION/KIT_VERSION (номер версии)
#
# Логика версии: у автора 1.3 → наш номер 1.3.1; если база та же, а мы что-то доработали —
# 1.3.2. Номер обязан строго расти: kit у серверов не принимает откат назад.
set -Eeuo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
PY=${PY:-$(command -v python3 || command -v python || true)}
[[ -n $PY ]] || { echo "! нужен python3" >&2; exit 1; }
apply=no
case ${1:-} in --apply) apply=yes ;; "") ;; *) echo "Использование: bash tools/fork-sync.sh [--apply]" >&2; exit 1 ;; esac
say() { printf '\n\033[1m==> %s\033[0m\n' "$*"; }
die() { printf '! %s\n' "$*" >&2; exit 1; }
[[ -z $(git status --porcelain) ]] || die "в рабочей копии есть незакоммиченные правки — сначала закоммить или убери их"
say "Забираю ветку автора"
git fetch --prune upstream 'refs/heads/main:refs/heads/upstream'
author_version=$(git show upstream:VERSION | tr -d '[:space:]')
echo "у автора: $author_version"
say "Переношу наши правки на свежую ветку автора"
git checkout -q dev
if ! git rebase upstream; then
echo
echo "Конфликт при переносе. Это ожидаемо, если автор переписал те же строки."
echo " 1) разбери конфликт: git status, правь файлы, git add, git rebase --continue"
echo " 2) если проще собрать швы заново: git rebase --abort, затем"
echo " git checkout -B dev upstream && $PY tools/fork_apply.py && git commit -am 'fork: швы'"
die "остановился, ничего не публикую"
fi
say "Проверяю, что наши швы ещё на месте"
"$PY" tools/fork_apply.py --check
say "Проверки кода (как на стороне сервера и в CI автора)"
for f in scripts/*.sh tools/*.sh; do bash -n "$f" || die "$f: синтаксис"; done
echo " ✓ bash -n"
"$PY" -m py_compile scripts/kit-sub.py && echo " ✓ python-скрипты собираются"
if grep -qU $'\r' scripts/*.sh tools/*.sh VERSION 2>/dev/null; then
die "в файлах есть CRLF — сервер сверяет SHA256, и его сумма не сойдётся. Проверь core.autocrlf (нужен false)"
fi
echo " ✓ переводы строк LF"
if command -v shellcheck >/dev/null; then
shellcheck -S warning -e SC1090,SC2034,SC2211 scripts/*.sh tools/release.sh tools/fork-sync.sh && echo " ✓ shellcheck"
else
echo " – shellcheck не установлен, пропускаю"
fi
if command -v node >/dev/null; then
node --test tools/test/*.test.js >/dev/null && echo " ✓ node --test"
else
echo " – node нет, пропускаю тесты генераторов"
fi
"$PY" tools/test/restore_env_test.py >/dev/null && "$PY" tools/test/restore_archive_test.py >/dev/null \
&& echo " ✓ тесты копии (--restore)"
say "Готово: наши правки лежат на свежем коде автора"
git --no-pager log --oneline upstream..dev
echo
echo "Версия автора: $author_version · наша сейчас: $(tr -d '[:space:]' <VERSION)"
if [[ $apply == yes ]]; then
base=${author_version%%.*}
cur=$(tr -d '[:space:]' <VERSION)
if [[ ${cur%%.*} == "$base" ]]; then
new="$base.$(( ${cur##*.} + 1 ))"
else
new="$author_version.1"
fi
printf '%s\n' "$new" >VERSION
"$PY" tools/fork_apply.py >/dev/null
echo "Версия сборки → $new (VERSION и KIT_VERSION в трёх скриптах)"
fi
cat <<'NEXT'
Дальше вручную, по шагам:
1) подпись и релиз: bash tools/release.sh ~/.ssh/3x-ui-kit-fork/release_key
2) коммит и тег: git add -A && git commit -m "Релиз v$(cat VERSION): швы форка + подпись"
git tag v$(cat VERSION)
3) публикация: git push origin dev v$(cat VERSION) upstream
4) на сервере: kit update --force && kit check
NEXT