Re[39]: msbuild поверх xml - была плохая идея?
От: karbofos42 Россия  
Дата: 01.12.23 13:59
Оценка:
Здравствуйте, ·, Вы писали:

·>Ты врёшь. Скрипт не только это делает. Он там много что делает — скачивает не что-то одно, а несколько вещей, потом тулзы в определённом порядке вызывает.

·>Вот тут по-твоему что? https://github.com/JamesNK/Newtonsoft.Json/blob/master/Build/build.ps1#L48-L165 плюс L267-L329 Даже что-то с XML шаманят

Я тебе уже давно перечислил что он делает. То, что ты выделил — очистка рабочей папки.
Эту очистку можно было в 3 строки прописать в csproj, тут захотели отдельным скриптом вручную сделать.
Есть встроенная функция dotnet clean, но там может не всё удаляться. Папки пустые остаются, если сам какие-то ресурсы туда закинул, то останется и т.д.
У меня CI с нуля всегда собирает и очищать ничего не нужно, т.е. это не обязательная вещь.
L267 — версию сборки определяют, это тоже не обязательно делать и в каждом проекте что-то своё могут выдумывать.
Версию можно и через csproj задать, можно и при сборке аргументы прокинуть.
L284 — найдёшь где там вызывается эта функция Edit-XmlNodes ?
L310 — чисто функция чтобы долбить удаление папок из рабочей директории до победного, т.к. какие-то файлы наверно могут быть заняты и сразу не удалится.

·>Анекдот №10056243


А по делу есть что сказать?

·>Не очень понял. А для разработки на дотнете фреймворк не обязателен?

·>В случае mvnw или gradlew нужно только jdk (идёт в поставке с каждой ide для java ну или "apt install" и т.п.). Дальше всё само разворачивается. А у тебя там в скрипте куча чего скачивается и куча шагов выполняется.

Это не у меня в скрипте, а ты взял библиотеку и у меня спрашиваешь почему её разработчики так сделали.
И скрипты эти не для разработки используются, а для деплоя.
На L167 вот ставят .NET SDK

·>Нет, не нужно.


А как без CI и подготовленных скриптов локально потом собирать? Вызывать в командной строке mvn и передавать каждый раз 100500 параметров?

·>Ну там тоже что-то есть для jdk1.6, который был deprecated ещё до выхода Core. Не знаю накой всё ещё держат... наверное удалять просто лень.


В pom.xml же прописано, что собирается под 1.8 где там под 1.6?
Я вот эту фичу даже нагуглить нормально не могу, есть ссылка как это делают в Java?
Нашёл только такое: https://www.baeldung.com/java-multi-release-jar
Выглядит как-то неудобно.

·>Если такое действительно надо, просто добавляют два pom-модуля с разными <target>.


А с кодом что делают? Ну, вот в старой версии не было асинхронной загрузки байт из файла, а в новой появилась.
Мне хочется для старого .NET использовать реализацию с синхронным чтением, а для нового пусть стильное, модное, молодёжное с Async вызывается.
ну, типа как тут:
https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/JsonReader.Async.cs
Если собирается без ключа HAVE_ASYNC, то файла в проекте считай нет. Там дальше и отдельные блоки кода включаются/выключаются.

·>Собранная либа на jdk8 будет работать и в jdk21 — это backward compatibility.


Так Newtonsoft собирается и под .NET FW 2.0 и под более современный .NET 6.0.
При этом код для них несколько разный и разный набор методов в сборку попадает, в зависимости от того, что поддерживается в соответствующем рантайме.

·>Из mvn deploy.


Зачем тогда yml для CI github есть, если весь деплой уже в mvn deploy?

·>Можно, но не обязательно. Просто из командной строки "mvn deploy -DaltDeploymentRepository=myCoolRepo..." ну или просто поставить через "mvn install" себе локально, для экспериментов, например.


И это всё каждый раз конечно ручками будет прописываться, а не будут написаны скрипты или не отредактирован уже файл?

·>Поскандалить изволите или так, от чистого сердца? Секреты и пароли, ясен пень надо предъявлять отдельно. На то они и токены-пароли.


Куда отдельно? Какое отдельно? У нас же уже есть деплой и ничего больше не надо.

·>Нет. Как видно по исходникам — не нужно.


т.е. сборка будет выполняться ручками? Каждый раз будут набиваться команды типа mvn clean для очистки рабочей папки, потом вот эти простыни для проброса токенов, репозиториев,...?

·>Молодцы в Майкрософте. Промыть мозги, что б не дай бог, чего б лишнего не захотели. Главное юзеров в узде держать, EEE. Иначе деньги не за что грести будет.


Причём тут Майкрософт? Ты мне тут рассказываешь как в mvn всё хорошо и работает. Только внезапно оказалось, что деплоймент у меня не запускается.
То надо самому для сборки JDK поставить и JAVA_HOME прописать, то ещё чего не так. Где обещанный готовый деплоймент, что ничего не надо у себя разворачивать?

·>Ты должен будешь разместить где-то в этом своём интранете требуемые бинарники. Обычно просто прокси-зеркало делают. Примерно как если ты захочешь в интранете иметь публичные nuget-либы.


И зачем мне этот скрипт с непонятным jar, если я и так сам должен что-то куда-то класть?
Так я лучше соберу docker со всем необходимым и буду его из CI дёргать без всех этих скриптов

·>Какой одной командой запустить весь цикл до деплоя? Компиляция, тесты, сборка, верификация, документация, локальная инсталляция?


Ну, при желании ты в csproj чего угодно можешь прописать. А в реальности оно всё зачем надо?
По рукам бьют, если вызывать больше одной команды?
Или чтобы потом вызывать сборку с ключом maven.test.skip=true ?
А интеграционные и нагрузочные тесты тоже в этой единственной волшебной команде постоянно гоняются?

·>Потому что это описание джобы конкретного CI-сервера.


И откуда-то там 1.6 версия появилась, хотя в pom.xml прописана 1.8.
А как я узнаю из единственной команды, что мои изменения приведут к тому, что под 1.6 больше не собирается?
Ну, вот я у себя при помощи pom.xml делаю локальную сборку, всё собирается, работает, тесты проходят.
А потом джоба для 1.6 точно не упадёт?

·>Из кода там ровно одна строка. На других серверах/локально будешь просто запускать ту же строку передавая информацию о своей конкретной инфраструктуре.


Из кода там 3 файла на пару сотен строк. Под другую инфраструктуру все эти строки нужно будет переписывать или как минимум перепроверять.
Внезапно то же самое, что и в случае с аналогичными файлами библиотек .NET

·>Эээ. Ну да, а что? Ок, не 3 строчки на всё, но по 3 строчки на контейнер — да. integration-test and verify phases.


Охотно верю.
На каждую компиляцию надеюсь будешь все контейнеры у себя поднимать и прогонять тесты?
Ну, и конечно docker локально сам поднимется, ведь там будет специальный плагин для maven?

·>Т.к. в pom.xml нет паролей и приватных ключей, то будем писать километровые батники, чтобы тесты запустить.


·>Ты правда не понимаешь что такое подпись? Что ты тупо не имеешь права подписывать?


Я то понимаю, это ты мне тут рассказываешь что в pom.xml есть всё готовое и работает везде, а вот эти скрипты для .NET пишут от плохой жизни и они не нужны.

·>Если ты хочешь подеплоить у себя дома для своих друзей, то ты должен использовать свой личный приватный ключ. А если у тебя есть ключ, то тебя должен быть и gpg. Ну или можешь скипнуть шаг подписи "mvn deploy -Dgpg.skip".


[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.3:deploy (injected-nexus-deploy) on project json: Execution injected-nexus-deploy of goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.3:deploy failed: Server credentials with ID "ossrh" not found! -> [Help 1]

Вот так новость

А если ещё раз вызвать, то:

[ERROR] Failed to execute goal org.moditect:moditect-maven-plugin:1.0.0.Final:add-module-info (add-module-infos) on project json: Execution add-module-infos of goal org.moditect:moditect-maven-plugin:1.0.0.Final:add-module-info failed: File F:\User\Downloads\JSON-java-master\target\modules\json-20231013.jar already exists; either set 'overwriteExistingFiles' to true or specify another output directory -> [Help 1]

т.е. оно не умеет очищать само рабочую папку и от этого ломается деплой.
Могли бы хотя бы на powershell скрипт написать, чтобы такого не происходило.

Ты обещал, что в pom.xml есть готовый деплой и всё работает из коробки.
Я попробовал, у меня не работает (я не удивлён, если что).
Где обещанное?

·>Я тебе ссылку на доку давал. Может ты поанглиццки читать не умеешь?


На доку про то почему gradlew.bat короче, чем gradlew? Не помню такого.

·>Дядя Петя?


Так ты тут по строкам кода определяешь крутость.
Почему нельзя аналогичное сравнение тут провести?

·>А у них есть выбор не делать? Вот ты такой неидиот — закинь им PR, удали им ту папочку и объясни им как это всё сделать кликнув пару тикбоксов в Студии.


Мне оно зачем надо? Я этим твоим AWS не пользовался и не собираюсь.
Я понятия не имею зачем они что-то якобы нужное назвали Dummy и Sample и при этом не написали комментариев.

·>И где это взять готовое и засунуть в мой новый проект? Да ещё и докер локально ставить-настраивать?!


Это ты рассказываешь про готовое и что ничего ставить не надо, на деле правда так не работает.
Зависит от проекта и выбранного подхода к деплою.
Зачем локально докер ставить, если за деплой отвечает какая-нибудь CI?

·>Почему этот небольшой yml ещё никто не написал и не выложил публично?


Потому что никому не нужно. Ну, вот gradle сами поставить не в состоянии и таскаете один и тот же скрипт по компам.
Деплой у всех разный и никто не переживает, что целую команду нужно самому написать, а не скопировать.

·>Чтобы что?


Чтобы проект, который разворачивается локально, на тестовом окружении или в продакшене, был один и тот же,
а не вот это, что тут мы для теста перегрузим значение, там репозиторий переназначим, а тут забудем и копипасте и что-то пойдёт не по плану.

·>Между сборкой и деплоем ты пропустил ещё несколько шагов.


Расскажешь почему это разные шаги, а не один шаг и почему вдруг их все нужно выполнять одной командой?

·>Не знаю, чтоб всё как ты любишь.


т.е. всё же в pom.xml всё прибито гвоздями к инфраструктуре?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.