Подготовить безопасный выпуск 1.8.1 - #1
Conversation
41bbbab to
169ee2d
Compare
|
@claude[agent] review |
There was a problem hiding this comment.
Pull request overview
PR готовит «безопасный» релиз 1.8.1: усиливает проверку свежести данных, ограничивает сетевые ответы/редиректы, повышает устойчивость к ошибкам источников и добавляет проверяемую процедуру выпуска/CI-аттестации.
Changes:
- Усилена безопасность и устойчивость загрузок: лимиты размера ответов, HTTPS-only редиректы, защита XML ЦБ от DTD/внешних сущностей, тайм-аут истории и fallback-логика по валидности данных.
- Улучшена UX/доступность графика: календарная шкала, явное отображение пропусков, TalkBack actions, сохранение последнего экрана.
- Обновлены версии/инфраструктура: API 36, Gradle/AGP, CI с артефактами и provenance для тегов, Dependabot, обновлены документы релиза и правовые уведомления.
Reviewed changes
Copilot reviewed 42 out of 44 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| THIRD_PARTY.md | Расширены сведения о сторонних компонентах и происхождении звука. |
| SECURITY.md | Обновлены инструкции по приватному репорту уязвимостей и проверке APK/сертификата. |
| RELEASING.md | Добавлена процедура проверяемого выпуска (CI→артефакт→аттестация→локальная подпись→Release). |
| RELEASE_NOTES_1.8.1.md | Добавлены заметки выпуска 1.8.1. |
| README.md | Обновлены инструкции установки/сборки и отпечаток сертификата подписи. |
| gradlew.bat | Изменён способ запуска wrapper’а через -jar. |
| gradlew | Обновлён shell wrapper, включая запуск через -jar. |
| gradle/wrapper/gradle-wrapper.properties | Обновлён Gradle и добавлена SHA-256 контрольная сумма дистрибутива. |
| CONTRIBUTING.md | Обновлены локальные команды проверки (добавлен assembleRelease). |
| CHANGELOG.md | Добавлен раздел 1.8.1 и перечисление изменений. |
| build.gradle.kts | Обновлён Android Gradle Plugin. |
| app/src/test/java/ru/abrikosov/cleanrate/ui/UiLocalizationTest.kt | Адаптированы тесты выбора точки графика под календарную шкалу. |
| app/src/test/java/ru/abrikosov/cleanrate/ui/RateStatusPolicyTest.kt | Добавлены тесты объединённого статуса свежести/seed для режима ЦБ. |
| app/src/test/java/ru/abrikosov/cleanrate/data/SourceResilienceTest.kt | Тесты fallback-источников, отмены и тайм-аута истории. |
| app/src/test/java/ru/abrikosov/cleanrate/data/RateFreshnessPolicyTest.kt | Тесты политики «реальной» свежести даты курса. |
| app/src/test/java/ru/abrikosov/cleanrate/data/MarketRateParserTest.kt | Тесты отклонения устаревших/будущих live-данных. |
| app/src/test/java/ru/abrikosov/cleanrate/data/HttpsClientTest.kt | Тесты лимитированного чтения ответа. |
| app/src/test/java/ru/abrikosov/cleanrate/data/HistoryCachePolicyTest.kt | Тесты политики вытеснения записей кэша истории. |
| app/src/test/java/ru/abrikosov/cleanrate/data/CbrXmlParserTest.kt | Тесты защиты XML (doctype/entities, лимит размера, UTF-16). |
| app/src/main/java/ru/abrikosov/cleanrate/ui/UiText.kt | Добавлены тексты для статусов устаревания и доступности графика/пропусков. |
| app/src/main/java/ru/abrikosov/cleanrate/ui/RateStatusPolicy.kt | Введена политика объединения статусов свежести/seed для разных источников. |
| app/src/main/java/ru/abrikosov/cleanrate/ui/RateChartScreen.kt | Календарная шкала графика, показ пропусков, TalkBack actions, новые алгоритмы выбора точек. |
| app/src/main/java/ru/abrikosov/cleanrate/ui/HistoryViewModel.kt | Проброшен missingPointCount в UI-состояние истории. |
| app/src/main/java/ru/abrikosov/cleanrate/ui/ConverterViewModel.kt | Параллельное обновление источников, сохранение/восстановление видимости графика. |
| app/src/main/java/ru/abrikosov/cleanrate/ui/ConverterScreen.kt | Использование объединённого статуса свежести/seed и новое отображение stale-состояния. |
| app/src/main/java/ru/abrikosov/cleanrate/MainActivity.kt | Сохранение последнего экрана через состояние ViewModel/репозитория. |
| app/src/main/java/ru/abrikosov/cleanrate/data/SourceFallback.kt | Общая функция перебора источников до первого валидного. |
| app/src/main/java/ru/abrikosov/cleanrate/data/RateFreshnessPolicy.kt | Новая политика свежести по дате данных (окна возраст/будущее). |
| app/src/main/java/ru/abrikosov/cleanrate/data/Models.kt | Добавлен флаг isStale в снапшоты курсов. |
| app/src/main/java/ru/abrikosov/cleanrate/data/MarketRateParser.kt | Расчёт/проверка isStale и режим requireFresh для live-загрузок. |
| app/src/main/java/ru/abrikosov/cleanrate/data/HttpsClient.kt | Новый HTTPS-клиент: лимиты ответа, HTTPS-only редиректы, cancel-friendly IO. |
| app/src/main/java/ru/abrikosov/cleanrate/data/HistoryModels.kt | Добавлен учёт запрошенного количества точек и вычисление пропусков. |
| app/src/main/java/ru/abrikosov/cleanrate/data/HistoryCachePolicy.kt | Политика вытеснения старых записей кэша истории. |
| app/src/main/java/ru/abrikosov/cleanrate/data/HistoricalRatesRepository.kt | HTTPS-клиент + fallback по валидности, общий тайм-аут, лимит кэша истории. |
| app/src/main/java/ru/abrikosov/cleanrate/data/CurrencyRepository.kt | HTTPS-клиент + fallback по валидности/свежести, сохранение видимости графика. |
| app/src/main/java/ru/abrikosov/cleanrate/data/CbrXmlParser.kt | Усилена безопасность XML-парсинга и добавлен isStale/requireFresh. |
| app/src/main/java/ru/abrikosov/cleanrate/data/CbrRepository.kt | Переход на HTTPS-клиент, лимиты, requireFresh, логирование ошибок. |
| app/src/main/assets/legal/NOTICE.txt | Добавлены правовые уведомления, включаемые в APK. |
| app/src/androidTest/java/ru/abrikosov/cleanrate/AndroidRuntimeSmokeTest.kt | Инструментальные smoke-тесты запуска и Android-рантайм парсинга. |
| app/proguard-rules.pro | Обновлён комментарий/назначение файла правил Proguard. |
| app/build.gradle.kts | Обновлены compileSdk/targetSdk/version, AndroidX зависимости и test deps. |
| .github/workflows/android.yml | CI: сборка release, артефакты APK/mapping, Android 15 tests, provenance для тегов. |
| .github/dependabot.yml | Добавлен Dependabot для Gradle и GitHub Actions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Review completed for commits 678da46..a02cdc7. No changes needed — the code is sound. Highlights checked:
I couldn't run the Gradle suite in this sandbox (Google Maven is blocked, so AGP 8.11.1 fails to resolve), but the green run on a02cdc7 covers it. Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
|
@claude[agent] review |
Review completed through Verified:
I couldn't run the Gradle suite here (Google Maven is blocked, so AGP fails to resolve), but the green run on |
Что изменено
Исправления по независимому ревью
Добавлены регрессионные тесты для резервных источников, отмены, тайм-аута, объединённого статуса курса и сохранения экрана.
Безопасность и выпуск
Ключ подписи остаётся только у владельца и не передаётся в GitHub Actions. Для тегов CI формирует неподписанный APK и аттестацию происхождения; локальная подпись, сертификат, SHA-256 и неизменяемый GitHub Release проверяются по
RELEASING.md.История
mainи ветки PR точечно переписана: личный e-mail удалён из достижимых веток, тегов и PR-ссылок. Старый недостижимый объект может оставаться в серверном кэше GitHub до отдельной очистки через GitHub Support.Тег и выпуск 1.8.1 будут созданы отдельно после слияния.
Локальные проверки
./gradlew --no-daemon testDebugUnitTest testReleaseUnitTest lintRelease assembleRelease;./gradlew --no-daemon connectedDebugAndroidTest;git diff --check: замечаний нет.Результат ревью
gradlewпроверено по официальному шаблону и JAR Gradle 8.14.5 и признано ложным срабатыванием;GitHub Actions
Успешный прогон коммита
cbe49fc: https://github.com/Etogerman/clean-rate-android/actions/runs/30752358971app-release-unsigned.apk;a34175d10b6121173a2db9cfc43aae6750647d6c4667efb6c528a9e1be83a2e7;v*.