fix(updates): установка пересобранных релизов в рамках одного тега

opkg считает пакет уже установленным при равенстве версий, поэтому
пересборка под тем же тегом молча не применялась: задание завершалось
успехом, билд оставался старым. Добавлен --force-reinstall в
pkg_install_files_command (opkg) и в install.sh; apk не тронут, он
всегда пишет переданный файл.

Детект пересборки больше не зависит только от SHA, которого нет в
релизах старше f974e4a0: добавлен отпечаток билда по published_at и
метаданным ipk-ассета, решение вынесено в tachyon_build_differs с
префиксным сравнением SHA разной длины. Отпечаток установленного
билда пишется в state-файл и попадает в extra.

Telegram уведомляет о пересборках: check_notified_updates пропускает
outdated_same_release, дедуп идёт по версии и SHA, текст показывает
короткие SHA вместо пары одинаковых версий.

Кэш проверки обновлений сохраняет current_sha из результата действия
вместо безусловного latest, иначе неудачная установка выглядела как
"актуально".

Фронт пересобран из TS, ручная правка main.js снята. Добавлен
describeSameReleaseBuild с фолбэк-текстом, когда SHA недоступен.
This commit is contained in:
Dushnilin
2026-08-09 16:57:10 +03:00
parent 4c8ee871f1
commit af2d07b056
19 changed files with 3627 additions and 2813 deletions
+4 -1
View File
@@ -1776,7 +1776,10 @@ pkg_install_files() {
return $rc
fi
else
run_logged_timeout "opkg" 120 opkg install --force-overwrite --force-downgrade "$@"
# --force-reinstall: a release tag can be rebuilt, so the .ipk version may
# equal the installed one. Without it opkg treats that as "already
# installed" and the rebuild is never written.
run_logged_timeout "opkg" 120 opkg install --force-overwrite --force-downgrade --force-reinstall "$@"
local rc=$?
if [ $rc -ne 0 ]; then
log_line "FAIL opkg install failed (exit $rc)"