Sbt-github-packages: Пакеты GitHub, похоже, не поддерживают sbt (пока)

Созданный на 1 авг. 2019  ·  23Комментарии  ·  Источник: djspiewak/sbt-github-packages

Модель публикации Sbt просто не работает с пакетами GitHub по не совсем понятным причинам. Этот твит , кажется, подразумевает, что это известная проблема или, по крайней мере, что-то, что не является совершенно неожиданным. Как только GitHub добавит поддержку sbt или, по крайней мере, перестанет ее ломать, мы закроем эту проблему и выпустим правильный релиз работающего плагина.

Для протокола ошибка выглядит так:

[info] [info] Set current project to sbt-github-packages-tests-publish (in build file:/private/var/folders/vm/h_lhw5wn573cw70qd6l0ljt80000gn/T/sbt_78381fbc/publish/)
[info] [info] Packaging /private/var/folders/vm/h_lhw5wn573cw70qd6l0ljt80000gn/T/sbt_78381fbc/publish/target/scala-2.12/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT-sources.jar ...
[info] [info] Updating ...
[info] [info] Done packaging.
[info] [info] Wrote /private/var/folders/vm/h_lhw5wn573cw70qd6l0ljt80000gn/T/sbt_78381fbc/publish/target/scala-2.12/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT.pom
[info] [info] Done updating.
[info] [info] Packaging /private/var/folders/vm/h_lhw5wn573cw70qd6l0ljt80000gn/T/sbt_78381fbc/publish/target/scala-2.12/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT-javadoc.jar ...
[info] [info] Done packaging.
[info] [info] Packaging /private/var/folders/vm/h_lhw5wn573cw70qd6l0ljt80000gn/T/sbt_78381fbc/publish/target/scala-2.12/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT.jar ...
[info] [info] Done packaging.
[info] [info]   published sbt-github-packages-tests-publish_2.12 to https://maven.pkg.github.com/djspiewak/sbt-github-packages/com/codecommit/sbt-github-packages-tests-publish_2.12/0.1-SNAPSHOT/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT.pom
[info] [error] java.io.IOException: Access to URL https://maven.pkg.github.com/djspiewak/sbt-github-packages/com/codecommit/sbt-github-packages-tests-publish_2.12/0.1-SNAPSHOT/sbt-github-packages-tests-publish_2.12-0.1-SNAPSHOT.jar was refused by the server: Forbidden
[info] [error]  at org.apache.ivy.util.url.AbstractURLHandler.validatePutStatusCode(AbstractURLHandler.java:79)
[info] [error]  at sbt.internal.librarymanagement.ivyint.GigahorseUrlHandler.upload(GigahorseUrlHandler.scala:191)
[info] [error]  at org.apache.ivy.util.url.URLHandlerDispatcher.upload(URLHandlerDispatcher.java:82)
[info] [error]  at org.apache.ivy.util.FileUtil.copy(FileUtil.java:150)
[info] [error]  at org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:84)
[info] [error]  at sbt.internal.librarymanagement.ConvertResolver$LocalIfFileRepo.put(ConvertResolver.scala:366)
[info] [error]  at org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130)
[info] [error]  at sbt.internal.librarymanagement.ConvertResolver$ChecksumFriendlyURLResolver.put(ConvertResolver.scala:118)
[info] [error]  at sbt.internal.librarymanagement.ConvertResolver$ChecksumFriendlyURLResolver.put$(ConvertResolver.scala:105)
[info] [error]  at sbt.internal.librarymanagement.ConvertResolver$$anonfun$defaultConvert$lzycompute$1$PluginCapableResolver$1.put(ConvertResolver.scala:165)
[info] [error]  at org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.$anonfun$publish$5(IvyActions.scala:497)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.$anonfun$publish$5$adapted(IvyActions.scala:496)
[info] [error]  at scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:788)
[info] [error]  at scala.collection.Iterator.foreach(Iterator.scala:937)
[info] [error]  at scala.collection.Iterator.foreach$(Iterator.scala:937)
[info] [error]  at scala.collection.AbstractIterator.foreach(Iterator.scala:1425)
[info] [error]  at scala.collection.IterableLike.foreach(IterableLike.scala:70)
[info] [error]  at scala.collection.IterableLike.foreach$(IterableLike.scala:69)
[info] [error]  at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
[info] [error]  at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:787)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.publish(IvyActions.scala:496)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.$anonfun$publish$3(IvyActions.scala:144)
[info] [error]  at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.withChecksums(IvyActions.scala:157)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.withChecksums(IvyActions.scala:151)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.$anonfun$publish$1(IvyActions.scala:144)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.$anonfun$publish$1$adapted(IvyActions.scala:134)
[info] [error]  at sbt.internal.librarymanagement.IvySbt$Module.$anonfun$withModule$1(Ivy.scala:239)
[info] [error]  at sbt.internal.librarymanagement.IvySbt.$anonfun$withIvy$1(Ivy.scala:204)
[info] [error]  at sbt.internal.librarymanagement.IvySbt.sbt$internal$librarymanagement$IvySbt$$action$1(Ivy.scala:70)
[info] [error]  at sbt.internal.librarymanagement.IvySbt$$anon$3.call(Ivy.scala:77)
[info] [error]  at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:95)
[info] [error]  at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:80)
[info] [error]  at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:99)
[info] [error]  at xsbt.boot.Using$.withResource(Using.scala:10)
[info] [error]  at xsbt.boot.Using$.apply(Using.scala:9)
[info] [error]  at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:60)
[info] [error]  at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:50)
[info] [error]  at xsbt.boot.Locks$.apply0(Locks.scala:31)
[info] [error]  at xsbt.boot.Locks$.apply(Locks.scala:28)
[info] [error]  at sbt.internal.librarymanagement.IvySbt.withDefaultLogger(Ivy.scala:77)
[info] [error]  at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:199)
[info] [error]  at sbt.internal.librarymanagement.IvySbt.withIvy(Ivy.scala:196)
[info] [error]  at sbt.internal.librarymanagement.IvySbt$Module.withModule(Ivy.scala:238)
[info] [error]  at sbt.internal.librarymanagement.IvyActions$.publish(IvyActions.scala:134)
[info] [error]  at sbt.Classpaths$.$anonfun$publishTask$4(Defaults.scala:2416)
[info] [error]  at sbt.Classpaths$.$anonfun$publishTask$4$adapted(Defaults.scala:2416)
[info] [error]  at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[info] [error]  at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[info] [error]  at sbt.std.Transform$$anon$4.work(System.scala:67)
[info] [error]  at sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[info] [error]  at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[info] [error]  at sbt.Execute.work(Execute.scala:278)
[info] [error]  at sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[info] [error]  at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[info] [error]  at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[info] [error]  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[info] [error]  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[info] [error]  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[info] [error]  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[info] [error]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[info] [error]  at java.lang.Thread.run(Thread.java:748)

Если вы посмотрите вверх, вы увидите, что pom успешно опубликован, но первый файл jar был отклонен с Forbidden . @alexarchambault сообщает , что порядок публикаций не имеет значения, и банки все равно отклоняются.

Самый полезный комментарий

Похоже, что Github кое-что изменил, сегодня удалось выполнить полную загрузку. (ванильный сбт 1.3.3)

[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9.pom
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9.jar
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9-sources.jar
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9-javadoc.jar

Веб-интерфейс все еще смущен суффиксом sbt

<dependency>
  <groupId>com.example.test_2</groupId>
  <artifactId>13</artifactId>
  <version>0.0.9</version>
</dependency> 

Все 23 Комментарий

Насколько я могу судить, -sources, -javadoc, -tests не поддерживаются

используя sbt-aether-deploy, я успешно опубликовал на github пакеты из sbt

проект /plugins.sbt

addSbtPlugin("no.arktekk.sbt" % "aether-deploy" % "0.23.0")
addSbtPlugin("com.dwijnand" % "sbt-dynver" % "4.0.0")

build.sbt

externalResolvers += "GitHub lokkju Apache Maven Packages" at "https://maven.pkg.github.com/lokkju/github-action-sbt"
publishTo := Some("GitHub lokkju Apache Maven Packages" at "https://maven.pkg.github.com/lokkju/github-action-sbt")
credentials += Credentials("GitHub Package Registry", "maven.pkg.github.com", "lokkju", "<GITHUB_TOKEN>")

// GitHub package repo isn't supporting javadoc and sources
publishArtifact in (Compile, packageDoc) := false
publishArtifact in (Compile, packageSrc) := false

sbt aetherDeploy

Дополнительный аспект; если я использую Charles Web Debugging Proxy, все работает нормально. Без него я иногда получаю ошибки о том, что сервер не отвечает.

@lokkju Хм, а как насчет многомодульных сборок?

Я не пробовал их; ключ здесь, кажется, использует эфир-развертывание, хотя это не полностью исправляет это. Я подозреваю, что это проблема с поддержкой SSL в клиентских версиях, используемых каждым инструментом.

Я собираюсь попробовать несколько разных java-библиотек HTTP и посмотреть, смогу ли я заменить простую рабочую и неработающую конфигурацию. Я буду держать вас в курсе.

Итак, после дополнительных исследований, я обнаружил несколько интересных симптомов.

Я обнаружил, что просто использую curl, чтобы попытаться загрузить пакеты;

  • Первый файл, который вы РАЗМЕЩАЕТЕ, рассматривается как основной артефакт, независимо от имени файла или расширения.
  • затем вы можете загрузить столько (действительных) файлов POM, сколько захотите, если они имеют уникальные имена.
  • вы не можете загружать любые другие файлы, отличные от POM
  • Файлы с расширениями файлов JAR и POM анализируются github, и недопустимые форматы сообщают об ошибке в виде возвращаемого сообщения об ошибке HTTP 4xx.

В настоящее время ключевым выводом является то, что вы должны сначала загрузить артефакт JAR, а затем опубликовать POM.

У меня есть электронное письмо в службу поддержки, посмотрим, предоставят ли они дополнительную информацию.

Хм, значит, никакой подписи артефактов тоже нет?

Он автоматически генерирует *.md5 и *.sha1 для любых загружаемых файлов.

Также нашел это: https://github.com/sbt/librarymanagement/blob/d09f9f81b664baaac15054730fbcb51e1b240de2/ivy/src/main/scala/sbt/internal/librarymanagement/IvyActions.scala#L123

Artifactory deals with the publishing (and republishing) of SNAPSHOTs using a strict rule on the order of publishing. The ;build.timestamp=... suffix is the alternative.

The strict rule is:

publish the main artefact (which has no classifier)
publish the POM/ivy.xml file
publish additional artefacts which have a classifier

Кажется, я пока вообще не могу развернуть классификаторы, что утомительно и является частью того, о чем у меня есть вопрос в github.

Я, вероятно, создам чистый проект maven/java и посмотрю, работает ли он тогда.

Только что попробовал развернуть моментальный снимок, используя публикацию по умолчанию, и получил следующее:

[error] stack trace is suppressed; run last publish for the full output
[error] (publish) java.io.IOException: PUT operation to URL https://maven.pkg.github.com/company/foo/bar/utils/3.24.0-SNAPSHOT/utils-3.24.0-SNAPSHOT.pom failed with status code 400: Bad Request

Нет упоминания о моментальных снимках в документах

На самом деле у меня то же самое для обычных пакетов:

java.io.IOException: PUT operation to URL https://maven.pkg.github.com/company/foo/bar/utils/utils/0.0.1/utils-0.0.1.pom failed with status code 400: Bad Request
[error] java.io.IOException: PUT operation to URL https://maven.pkg.github.com/company/foo/bar/utils/utils/0.0.1/utils-0.0.1.pom failed with status code 400: Bad Request
[error]     at org.apache.ivy.util.url.AbstractURLHandler.validatePutStatusCode(AbstractURLHandler.java:82)
[error]     at org.apache.ivy.util.url.BasicURLHandler.upload(BasicURLHandler.java:264)
[error]     at org.apache.ivy.util.url.URLHandlerDispatcher.upload(URLHandlerDispatcher.java:82)
[error]     at org.apache.ivy.util.FileUtil.copy(FileUtil.java:150)

Интересно, как выглядит корпус этого 400-го?

Есть ли обновления по этому поводу?

Обновлений пока нет! Думаю, эксперименты @lokkju — самые свежие. Я хочу поиграть с этим еще немного, но, честно говоря, похоже, что пакеты GitHub по-прежнему не поддерживают файлы хостинга, которые являются неотъемлемой частью стандартного дистрибутива Maven (такие как подписи, документация и классификаторы). Трудно сделать с ним что-то практичное в качестве хоста артефакта, пока они не исправят эти недостатки.

Еще немного информации, тестирование с простым sbt 1.3.2 (без дополнительных плагинов)

Вам необходимо опубликовать в репозиторий вашего проекта:

publishTo := Some("GitHub Package Registry" at "https://maven.pkg.github.com/[username]/[project]")

учетные данные должны быть определены следующим образом

credentials += Credentials("GitHub Package Registry","maven.pkg.github.com","[username]","[token]")

Вашему токену нужны следующие области видимости: read:packages , repo и write:packages

но как только вы опубликуете, вы получите эти предлагаемые координаты пакета (где организация = "io.test" и name = "test"):

<dependency>
  <groupId>com.github.[username]/[project]</groupId>
  <artifactId>io.test.test_2.13</artifactId>
  <version>0.1</version>
</dependency> 

Снимки можно загружать, но они, вероятно, не имеют специальной обработки, поскольку вы не можете загружать их дважды.

Загрузка Pom работает, но остальное не работает:

[информация] опубликовала test_2.13 на https://maven.pkg.github.com/ [имя пользователя]/[проект]/io/test/test_2.13/0.0.3/test_2.13-0.0.3.pom
[ошибка] java.io.IOException: доступ к URL-адресу https://maven.pkg.github.com/ [имя пользователя]/[проект]/io/test/test_2.13/0.0.3/test_2.13-0.0. 3.jar был отклонен сервером: Запрещенный ответ=Ошибка: "test_2.13-0.0.3.jar" в версии 0.0.3 "io.test.test_2.13" уже опубликован.

Загрузка JAR @francisdb не удалась, потому что SBT загружает файлы не по порядку; насколько я помню, это давняя ошибка в SBT (IvyActions.scala), когда функция публикации использует тип карты вместо типа seq. С переходом на систему управления зависимостями Coursier эта проблема может разрешиться сама собой.

Мое предложение состояло бы в том, чтобы переопределить сам процесс загрузки в этом плагине, предварительно загрузив pom. Конечно, это все еще не помогает с классификаторами, для которых мне нужна поддержка.

похоже на sbt 1.3.2 Coursier не используется для загрузки артефактов, только для загрузки

Кроме того, я не получил ответа от GitHub по этому вопросу.

Хм... Я только что бегло просмотрел. sbt 1.2.8 все еще используется здесь везде:
https://github.com/djspiewak/sbt-github-packages/blob/0839b97dea06100a202f2a105cbe83873784bf77/build.sbt#L28
https://github.com/djspiewak/sbt-github-packages/blob/0839b97dea06100a202f2a105cbe83873784bf77/src/sbt-test/sbtghpackages/publish/project/build.properties#L1
https://github.com/djspiewak/sbt-github-packages/blob/0839b97dea06100a202f2a105cbe83873784bf77/project/build.properties#L1

(Возможно, что-то пропустил)

Я предполагаю, что они нуждаются в обновлениях?

Пулл-реквест: #2

Coursier используется только по умолчанию, начиная с sbt 1.3.0.

мое тестирование было с 1.3.2

@francisdb Понял.

Похоже, что Github кое-что изменил, сегодня удалось выполнить полную загрузку. (ванильный сбт 1.3.3)

[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9.pom
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9.jar
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9-sources.jar
[info]  published test_2.13 to https://maven.pkg.github.com/francisdb/foo/com/example/test_2.13/0.0.9/test_2.13-0.0.9-javadoc.jar

Веб-интерфейс все еще смущен суффиксом sbt

<dependency>
  <groupId>com.example.test_2</groupId>
  <artifactId>13</artifactId>
  <version>0.0.9</version>
</dependency> 

Это впечатляет! Я собираюсь провести некоторые тесты сегодня и посмотреть, смогу ли я закрыть это. Очень очень интересно.

Я могу подтвердить, что с несколькими настройками плагина для использования экспериментальных результатов @francisdb все теперь работает! Проблемы веб-интерфейса с суффиксами кросс-сборки, по-видимому, не влияют на фактическое разрешение, а только на пользовательский интерфейс. Итак, публикация и разрешение теперь работают с плагином. Я еще не тестировал вещи с частным репозиторием; я предполагаю, что они еще не совсем работают, но все достаточно хорошо, чтобы я опубликовал 0.1.0 .

Спасибо всем за ваш труд и эксперименты! Плагин удивительно тривиален благодаря всем вам.

@francisdb

Снимки можно загружать, но они, вероятно, не имеют специальной обработки, поскольку вы не можете загружать их дважды.

Вы _можете_ загружать их дважды: вы можете удалить снимок в пользовательском интерфейсе GitHub, а затем снова загрузить новый снимок (имеется в виду та же версия снимка). Это сработало для меня. Немного громоздко, но работает.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги