Загрузка данных
Работаем локально на моей машине с проектом:
/Users/23865613/IdeaProjects/snl-integration-audit
Текущая рабочая ветка должна быть:
feature/SNL-1128
Задача: полностью настроить Maven для доступа к корпоративным репозиториям через предоставленный ниже settings.xml, скачать зависимости, собрать проект, запустить тесты и проверить генерацию OpenAPI.
Работай самостоятельно, но строго соблюдай ограничения безопасности.
ВАЖНЫЕ ОГРАНИЧЕНИЯ
1. Не выполняй git commit, git push, git reset, git clean, git checkout и переключение веток.
2. Не добавляй settings.xml, токены, пароли, BASE64_STRING или заголовки авторизации в Git.
3. Не создавай settings.xml внутри репозитория.
4. Используй только стандартный локальный путь Maven:
~/.m2/settings.xml
5. Никогда не выводи в ответе и терминале полное содержимое settings.xml.
6. Никогда не показывай значения username, password, token, BASE64_STRING и Authorization.
7. В итоговом отчёте секреты должны быть замаскированы.
8. Не изменяй код проекта до завершения настройки Maven.
9. Уже выполненные изменения в ветке feature/SNL-1128 не удаляй и не откатывай.
10. Файл api-docs-2.yaml является локальным эталонным примером и не должен попадать в Git.
11. Если в предоставленном XML остались текстовые инструкции вместо реальных значений, например:
- «ваш токен»
- «user_name из токена nexus»
- «password из токена nexus»
- «любой набор букв»
- XML содержит незакрытые теги
остановись и перечисли только места, которые необходимо заполнить. Самостоятельно значения не придумывай.
ЭТАП 1. ПРОВЕРИТЬ ТЕКУЩЕЕ СОСТОЯНИЕ
Выполни:
cd /Users/23865613/IdeaProjects/snl-integration-audit
git branch --show-current
git status --short
java -version
mvn -version
echo "$HOME"
Подтверди, что проект находится в ветке feature/SNL-1128.
Не меняй ветку автоматически. Если открыта другая ветка — остановись и сообщи об этом.
ЭТАП 2. СОЗДАТЬ ЛОКАЛЬНУЮ КОНФИГУРАЦИЮ MAVEN
Создай каталог:
mkdir -p ~/.m2
Если файл ~/.m2/settings.xml уже существует:
1. Не удаляй его.
2. Создай резервную копию с датой и временем:
cp ~/.m2/settings.xml ~/.m2/settings.xml.backup-$(date +%Y%m%d-%H%M%S)
3. В итоговом отчёте укажи путь резервной копии, но не показывай её содержимое.
После этого запиши в ~/.m2/settings.xml ТОЧНОЕ содержимое XML, приложенное в конце этого запроса между маркерами:
НАЧАЛО SETTINGS.XML
КОНЕЦ SETTINGS.XML
Не исправляй логины, токены, URL, id серверов, mirrors, profiles или activeProfiles по собственному предположению.
Установи безопасные права:
chmod 600 ~/.m2/settings.xml
Проверь:
ls -l ~/.m2/settings.xml
В ответе показывай только путь и права файла, без содержимого.
ЭТАП 3. ПРОВЕРИТЬ XML
Сначала проверь, что файл непустой:
test -s ~/.m2/settings.xml
Если доступен xmllint, выполни:
xmllint --noout ~/.m2/settings.xml
Если xmllint отсутствует, проверь XML через Python без вывода содержимого:
python3 - <<'PY'
import os
import xml.etree.ElementTree as ET
path = os.path.expanduser("~/.m2/settings.xml")
ET.parse(path)
print("settings.xml: XML корректен")
PY
Дополнительно проверь, что в файле отсутствуют незаменённые текстовые инструкции:
grep -nEi 'ваш токен|user_name из токена|password из токена|любой набор букв|TODO|PLACEHOLDER|CHANGEME' ~/.m2/settings.xml
Не выводи строки, содержащие реальные секреты. Если grep нашёл совпадение, выведи только номер строки и название незаполненного поля, значение замаскируй.
ЭТАП 4. ПРОВЕРИТЬ, ЧТО MAVEN ИСПОЛЬЗУЕТ SETTINGS.XML
Используй явное указание файла:
mvn -s ~/.m2/settings.xml --version
Затем попробуй получить модель проекта:
mvn -s ~/.m2/settings.xml -U -DskipTests help:effective-pom -Doutput=/tmp/snl-integration-audit-effective-pom.xml
Не печатай effective settings и не показывай credentials.
Если Maven вернёт 401 или 403:
1. Не повторяй запрос многократно.
2. Определи id репозитория, на котором произошла ошибка.
3. Сообщи, относится ли ошибка к SberOSC или Nexus.
4. Не показывай токен или логин.
5. Не изменяй XML самостоятельно.
Если Maven не может разрешить DNS или подключиться к корпоративным URL, проверь доступность доменов без передачи токенов:
nslookup sberosc.sigma.sbrf.ru || true
curl -I --connect-timeout 10 https://sberosc.sigma.sbrf.ru/ || true
Не отправляй Authorization-заголовки через curl.
ЭТАП 5. СКАЧАТЬ ЗАВИСИМОСТИ
В каталоге проекта выполни:
mvn -s ~/.m2/settings.xml -U -DskipTests dependency:go-offline
Если dependency:go-offline завершается ошибкой из-за необязательного plugin dependency, всё равно продолжи попыткой компиляции.
Затем выполни:
mvn -s ~/.m2/settings.xml -U -DskipTests clean compile
Сохрани полный лог во временный файл без публикации секретов:
mvn -s ~/.m2/settings.xml -U -DskipTests clean compile \
> /tmp/snl-integration-audit-compile.log 2>&1
После выполнения покажи только:
- BUILD SUCCESS или BUILD FAILURE;
- первую реальную причину ошибки;
- groupId:artifactId:version недоступной зависимости;
- HTTP-код, если он есть;
- название репозитория;
- последние 30 строк лога после маскировки секретов.
Перед выводом обязательно замаскируй:
- token;
- password;
- username;
- Basic Authorization;
- URL, содержащие userinfo перед символом @.
ЭТАП 6. ЗАПУСТИТЬ ТЕСТЫ
Если компиляция успешна, выполни сначала специализированный тест:
mvn -s ~/.m2/settings.xml -Dtest=OpenApiGenerationTest test
Затем полный набор тестов:
mvn -s ~/.m2/settings.xml test
Не исправляй тесты только ради зелёного результата.
Если тест падает, укажи:
- имя теста;
- имя assertion;
- ожидаемое значение;
- фактическое значение;
- точный исходный файл, из-за которого возникло расхождение.
ЭТАП 7. ПРОВЕРИТЬ ФАКТИЧЕСКИЙ OPENAPI
Если специализированный тест успешно проверяет /v3/api-docs, используй его результат.
Если нужна фактическая генерация через запуск Spring Boot:
1. Запусти приложение с настройками Maven:
mvn -s ~/.m2/settings.xml spring-boot:run
2. Определи фактический порт из application.yaml/application.yml или лога запуска. Не предполагай порт без проверки.
3. Дождись успешного запуска.
4. Получи спецификацию через один из доступных endpoint:
/v3/api-docs
/v3/api-docs.yaml
5. Сохрани результат только во временный файл:
/tmp/snl-integration-audit-api-docs.yaml
6. Не перезаписывай api-docs-2.yaml.
7. После проверки корректно останови Spring Boot процесс.
Если приложение не запускается из-за отсутствия PostgreSQL, Kafka или другой инфраструктуры, не меняй бизнес-конфигурацию и не отключай интеграции самовольно. Зафиксируй инфраструктурную причину.
ЭТАП 8. ПРОВЕРИТЬ ТРЕБОВАНИЯ SNL-1128
По фактически сгенерированной OpenAPI-спецификации, а не только по исходному коду, проверь:
1. info.title присутствует и равно:
СНЛ.Интеграции.Аудит
2. info.description присутствует и непустое.
3. info.version присутствует и равно:
1.0.0
4. Существует endpoint:
POST /api/v1/audit/event
5. Для операции присутствуют:
summary;
description;
operationId.
6. Для header-параметра Service-Name присутствует description.
7. Для header-параметра Event-Name присутствует description.
8. У requestBody присутствует description.
9. Схема requestBody соответствует реальной runtime-сигнатуре:
@RequestBody String message
Спецификация не должна утверждать, что runtime принимает AuditEventSchema или массив объектов, если код принимает String.
10. Для response 200 присутствует description.
11. Не документируй 400 и 500, если соответствующее поведение не подтверждается реальным кодом, ExceptionHandler или тестами.
12. Не должно появляться искусственной схемы AuditEventSchema.
13. Не должно появляться искусственной схемы AuditParamSchema.
14. Не должна создаваться новая ошибка API-REST-8-4 из-за массива params без доказуемого maxItems.
15. Не изменена runtime-сигнатура:
@RequestBody String message
@RequestHeader("Service-Name") String serviceName
@RequestHeader("Event-Name") String eventName
16. Вызов должен остаться:
consumeEventService.consume(message, serviceName, eventName)
ЭТАП 9. ПРОВЕРИТЬ GIT
После всех проверок выполни:
git status --short
git diff --stat
git diff --check
Проверь, что в Git не попали:
- ~/.m2/settings.xml;
- settings-security.xml;
- токены;
- пароли;
- BASE64_STRING;
- api-docs-2.yaml;
- временные логи;
- generated OpenAPI из /tmp.
Дополнительно выполни безопасный поиск потенциальных секретов только по изменённым отслеживаемым файлам:
git diff -- . \
| grep -Ei 'password|token|authorization|basic [A-Za-z0-9+/=]+' \
|| true
Не показывай найденный секрет целиком. Показывай только файл, номер строки и тип возможного секрета.
ЭТАП 10. ИТОГОВЫЙ ОТЧЁТ
Сформируй отчёт в следующем формате:
1. Ветка.
2. Путь к settings.xml.
3. Создана ли резервная копия.
4. XML-валидность.
5. Доступность SberOSC.
6. Доступность Nexus.
7. Результат загрузки зависимостей.
8. Результат compile.
9. Результат OpenApiGenerationTest.
10. Результат полного mvn test.
11. Был ли фактически получен /v3/api-docs или /v3/api-docs.yaml.
12. Таблица требований SNL-1128: требование / результат / подтверждение.
13. Список изменённых файлов проекта.
14. Подтверждение, что runtime-сигнатура не изменилась.
15. Подтверждение, что секреты не попали в Git.
16. Оставшиеся ошибки или блокеры.
17. Итоговый вердикт:
- ГОТОВО;
- НЕ ГОТОВО;
- ГОТОВО С ОГРАНИЧЕНИЯМИ.
Не делай commit и push.
Ниже находится содержимое локального Maven settings.xml.
НАЧАЛО SETTINGS.XML
СЮДА Я ВСТАВЛЮ ПОЛНЫЙ XML СО СВОИМИ ТОКЕНАМИ И УЧЁТНЫМИ ДАННЫМИ.
КОНЕЦ SETTINGS.XML