94 lines
4.8 KiB
Bash
94 lines
4.8 KiB
Bash
#!/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
|