Sbt-github-packages: GitHub-Pakete scheinen sbt (noch) nicht zu unterstützen

Erstellt am 1. Aug. 2019  ·  23Kommentare  ·  Quelle: djspiewak/sbt-github-packages

Das Veröffentlichungsmodell von Sbt scheint einfach nicht mit GitHub-Paketen zu funktionieren, aus Gründen, die nicht ganz klar sind. Dieser Tweet scheint zu implizieren, dass dies ein bekanntes Problem ist oder zumindest etwas, das nicht völlig unerwartet ist. Sobald GitHub Unterstützung für sbt hinzufügt oder zumindest aufhört, es zu beschädigen, werden wir dieses Problem schließen und eine ordnungsgemäße Veröffentlichung des funktionierenden Plugins veröffentlichen.

Für den Datensatz sieht der Fehler so aus:

[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)

Wenn Sie nach oben schauen, sehen Sie, dass der Pom erfolgreich veröffentlicht wurde, aber die erste JAR-Datei mit Forbidden zurückgewiesen wurde. @alexarchambault berichtet , dass die Reihenfolge der Veröffentlichungen irrelevant ist und Jars trotzdem abgelehnt werden.

bug

Hilfreichster Kommentar

Sieht so aus, als hätte Github einige Dinge geändert, konnte heute einen vollständigen Upload durchführen. (Vanille sbt 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

Die Webbenutzeroberfläche ist immer noch verwirrt über das Suffix sbt

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

Alle 23 Kommentare

Soweit ich das beurteilen kann, werden -sources, -javadoc, -tests nicht unterstützt

Mit sbt-aether-deploy habe ich erfolgreich Pakete von sbt auf github veröffentlicht

project/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

Ein zusätzlicher Aspekt; Wenn ich den Charles Web Debugging Proxy verwende, funktioniert alles einwandfrei. Ohne sie erhalte ich gelegentlich Fehlermeldungen, dass der Server nicht antwortet.

@lokkju Hmm , was ist mit Builds mit mehreren Modulen?

Ich habe sie nicht ausprobiert; Der Schlüssel hier scheint Aether-Deploy zu verwenden, obwohl es das Problem nicht vollständig behebt. Ich vermute, dass es sich um ein Problem mit der SSL-Unterstützung in den Client-Versionen handelt, die von jedem Tool verwendet werden.

Ich werde ein paar verschiedene Java-HTTP-Bibliotheken ausprobieren und sehen, ob ich eine einfache funktionierende und nicht funktionierende Konfiguration ersetzen kann. Ich halte dich auf dem Laufenden.

Also, nach mehr Forschung, habe ich einige interessante Symptome gefunden.

Ich habe festgestellt, dass ich nur curl verwende, um zu versuchen, Pakete hochzuladen.

  • Die erste PUT-Datei wird unabhängig vom Dateinamen oder der Erweiterung als Hauptartefakt behandelt
  • Sie können dann beliebig viele (gültige) POM-Dateien hochladen, solange sie eindeutige Namen haben
  • Sie können keine anderen Nicht-POM-Dateien hochladen
  • Dateien mit JAR- und POM-Dateierweiterungen werden von Github analysiert, und ungültige Formate melden einen Fehler als Nachricht des zurückgegebenen HTTP-Fehlers 4xx.

Die wichtigste Erkenntnis ist derzeit, dass Sie zuerst das JAR-Artefakt hochladen und dann das POM veröffentlichen müssen .

Ich habe eine E-Mail an den Support, wir werden sehen, ob sie weitere Informationen bereitstellen.

Hmm, also auch kein Signieren von Artefakten?

Es generiert automatisch die *.md5 und *.sha1 für alle hochgeladenen Dateien.

Auch gefunden: 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

Ich kann anscheinend bisher überhaupt keine Klassifikatoren bereitstellen, was lästig ist und Teil dessen ist, worüber ich eine Frage zu Github habe.

Ich werde wahrscheinlich ein reines Maven/Java-Projekt erstellen und sehen, ob es dann funktioniert

Ich habe gerade versucht, einen Snapshot mit der Standardveröffentlichung bereitzustellen, und habe Folgendes erhalten:

[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

Keine Erwähnung von Schnappschüssen in den Dokumenten

Tatsächlich habe ich das gleiche für normale Pakete:

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)

Ich frage mich, wie der Körper dieser 400 aussieht

Gibt es dazu irgendwelche Updates?

Noch keine Updates! Die Experimente von @lokkju sind die neuesten, denke ich. Ich möchte noch etwas damit herumspielen, aber ehrlich gesagt hört es sich so an, als ob GitHub-Pakete das Hosten von Dateien immer noch nicht unterstützen, die Teil eines standardmäßigen Maven-Distributable sind (wie Signaturen, Dokumentation und Klassifikatoren). Es ist schwer, irgendetwas Praktisches damit als Artefakt-Host zu tun, bis sie diese Mängel behoben haben.

Einige weitere Informationen, Testen mit einfachem sbt 1.3.2 (keine zusätzlichen Plugins)

Sie müssen im Repository Ihres Projekts veröffentlichen:

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

Credentails sollten so definiert werden

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

Ihr Token benötigt die folgenden Bereiche: read:packages , repo und write:packages

aber sobald Sie veröffentlichen, erhalten Sie diese vorgeschlagenen Paketkoordinaten (wobei organization="io.test" und name="test"):

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

Schnappschüsse können hochgeladen werden, aber sie haben wahrscheinlich keine besondere Behandlung, da Sie sie nicht zweimal hochladen können

Der Pom-Upload funktioniert, aber der Rest schlägt fehl:

[info] veröffentlicht test_2.13 auf https://maven.pkg.github.com/[username]/[project]/io/test/test_2.13/0.0.3/test_2.13-0.0.3.pom
[Fehler] java.io.IOException: Zugriff auf URL https://maven.pkg.github.com/ [Benutzername]/[Projekt]/io/test/test_2.13/0.0.3/test_2.13-0.0. 3.jar wurde vom Server abgelehnt: Forbidden response=Error: „test_2.13-0.0.3.jar“ in Version 0.0.3 von „io.test.test_2.13“ wurde bereits veröffentlicht.

@francisdb JAR-Upload schlägt fehl, weil SBT die Dateien nicht in der richtigen Reihenfolge hochlädt; Soweit ich mich erinnern kann, handelt es sich um einen seit langem bestehenden Fehler in SBT (IvyActions.scala), bei dem die Veröffentlichungsfunktion einen Kartentyp anstelle eines Seq-Typs verwendet. Mit der Umstellung auf das Coursier-Abhängigkeitsverwaltungssystem könnte sich dies von selbst lösen.

Mein Vorschlag wäre, den Upload-Prozess selbst innerhalb dieses Plugins zu überschreiben und sicherzustellen, dass der Pom zuerst hochgeladen wird. Das hilft natürlich immer noch nicht bei Klassifikatoren, wofür ich Unterstützung benötige.

sieht so aus auf sbt 1.3.2 Coursier wird nicht zum Hochladen von Artefakten verwendet, sondern nur zum Herunterladen

Außerdem habe ich keine Antwort von GitHub zu diesem Problem erhalten

Pull-Request: #2

Coursier wird erst ab sbt 1.3.0 standardmäßig verwendet

mein Test war mit 1.3.2

@francisdb Verstanden .

Sieht so aus, als hätte Github einige Dinge geändert, konnte heute einen vollständigen Upload durchführen. (Vanille sbt 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

Die Webbenutzeroberfläche ist immer noch verwirrt über das Suffix sbt

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

Das ist spannend! Ich werde heute ein paar Tests machen und sehen, ob ich das schließen kann. Sehr sehr spannend.

Ich kann bestätigen, dass mit ein paar Änderungen am Plugin, um die experimentellen Ergebnisse von @francisdb zu verwenden, die Dinge jetzt funktionieren! Die Webui-Probleme mit Cross-Build-Suffixen scheinen sich nicht auf die tatsächliche Auflösung auszuwirken, sondern nur auf die Benutzeroberfläche. Veröffentlichung und Auflösung funktionieren jetzt also mit dem Plugin. Ich habe die Dinge noch nicht mit einem privaten Repository getestet; Ich vermute, dass sie noch nicht ganz funktionieren, aber die Dinge sind gut genug, dass ich 0.1.0 veröffentlicht habe.

Vielen Dank an alle für all eure harte Arbeit und Experimente! Das Plugin ist dank euch allen bemerkenswert trivial.

@francisdb

Schnappschüsse können hochgeladen werden, aber sie haben wahrscheinlich keine besondere Behandlung, da Sie sie nicht zweimal hochladen können

Sie _können_ sie zweimal hochladen: Sie können einen Snapshot in der GitHub-Benutzeroberfläche löschen und dann erneut einen neuen Snapshot hochladen (d. h. dieselbe Snapshot-Version). Das hat bei mir funktioniert. Etwas umständlich, aber es geht.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen