Sbt-github-packages: Paket GitHub tampaknya tidak mendukung sbt (belum)

Dibuat pada 1 Agu 2019  ·  23Komentar  ·  Sumber: djspiewak/sbt-github-packages

Model publikasi Sbt tampaknya tidak berfungsi dengan Paket GitHub, karena alasan yang tidak sepenuhnya jelas. Tweet ini tampaknya menyiratkan bahwa ini adalah masalah yang diketahui, atau setidaknya sesuatu yang tidak sepenuhnya tidak terduga. Setelah GitHub menambahkan dukungan untuk sbt, atau setidaknya berhenti merusaknya, kami akan menutup masalah ini dan melakukan rilis plugin yang berfungsi dengan benar.

Sebagai catatan, kesalahannya terlihat seperti ini:

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

Jika Anda melihat ke atas, Anda akan melihat bahwa pom berhasil diterbitkan, tetapi file jar pertama ditolak dengan Forbidden . @alexarchambault melaporkan bahwa pemesanan publikasi tidak relevan, dan toples ditolak.

bug

Komentar yang paling membantu

Sepertinya Github telah mengubah beberapa hal, dapat melakukan unggahan penuh hari ini. (vanili 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

Web ui masih bingung dengan sufiks sbt

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

Semua 23 komentar

Sejauh yang saya tahu, -sumber, -javadoc, -tes tidak didukung

menggunakan sbt-aether-deploy, saya telah berhasil memublikasikan ke github paket dari sbt

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

Aspek tambahan; jika saya menggunakan Proxy Web Debugging Charles, semuanya berfungsi dengan baik. Tanpa itu, saya terkadang mendapatkan kesalahan tentang server yang gagal merespons.

@lokkju Hmm, bagaimana dengan multi-modul build?

Saya belum mencobanya; key di sini tampaknya menggunakan aether-deploy, meskipun tidak sepenuhnya memperbaikinya. Saya curiga ini masalah dengan dukungan SSL di versi klien yang digunakan oleh setiap alat.

Saya akan mencoba beberapa perpustakaan Java http yang berbeda, dan melihat apakah saya dapat mengganti konfigurasi sederhana yang berfungsi dan tidak berfungsi. Saya akan membuat Anda diperbarui.

Nah, setelah ditelusuri lebih jauh, saya menemukan beberapa gejala yang menarik.

Hanya menggunakan curl untuk mencoba mengunggah paket, saya telah menemukan;

  • File pertama yang Anda PUT diperlakukan sebagai artefak utama, terlepas dari nama file atau ekstensinya
  • Anda kemudian dapat mengunggah file POM (valid) sebanyak yang Anda suka, selama mereka memiliki nama yang unik
  • Anda tidak dapat mengunggah file non-POM lainnya
  • File dengan ekstensi file JAR dan POM diuraikan oleh github, dan format yang tidak valid akan melaporkan kesalahan sebagai pesan kesalahan HTTP 4xx yang dikembalikan.

Kuncinya saat ini adalah Anda harus mengunggah artefak JAR terlebih dahulu, lalu mempublikasikan POM.

Saya memiliki email ke dukungan, kami akan melihat apakah mereka memberikan informasi lebih lanjut.

Hmm, jadi tidak ada penandatanganan artefak juga?

Ini secara otomatis menghasilkan *.md5 dan *.sha1 untuk setiap file yang diunggah.

Juga, temukan ini: 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

Sepertinya saya tidak bisa menerapkan pengklasifikasi sama sekali sejauh ini, yang menyusahkan, dan bagian dari apa yang saya punya pertanyaan tentang github.

Saya mungkin akan membuat proyek maven/java murni dan melihat apakah itu berhasil

Baru saja mencoba menggunakan snapshot menggunakan publikasi default dan dapatkan ini:

[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

Tidak disebutkan snapshot di dokumen

Sebenarnya saya memiliki hal yang sama untuk paket normal:

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)

Aku ingin tahu seperti apa tubuh 400 itu

Apakah ada pembaruan tentang ini?

Belum ada pembaruan! Eksperimen @lokkju adalah yang terbaru, saya pikir. Saya ingin bermain-main dengannya lagi, tetapi sejujurnya sepertinya Paket GitHub masih tidak mendukung file hosting yang merupakan bagian tak terpisahkan dari standar Maven yang dapat didistribusikan (seperti tanda tangan, dokumentasi, dan pengklasifikasi). Sulit untuk melakukan sesuatu yang praktis dengannya sebagai tuan rumah artefak sampai mereka memperbaiki kekurangan ini.

Beberapa info lebih lanjut, pengujian dengan sbt 1.3.2 biasa (tanpa plugin tambahan)

Anda perlu memublikasikan ke repositori proyek Anda:

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

kredensial harus didefinisikan seperti ini

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

Token Anda memerlukan cakupan berikut: read:packages , repo dan write:packages

tetapi setelah Anda menerbitkan, Anda berakhir dengan koordinat paket yang diusulkan ini (di mana organization="io.test" dan name="test"):

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

Snapshot dapat diunggah tetapi mungkin tidak memiliki penanganan khusus karena Anda tidak dapat mengunggahnya dua kali

Unggahan Pom berfungsi, tetapi sisanya gagal:

[info] memublikasikan test_2.13 ke https://maven.pkg.github.com/ [username]/[project]/io/test/test_2.13/0.0.3/test_2.13-0.0.3.pom
[kesalahan] java.io.IOException: Akses ke URL https://maven.pkg.github.com/ [nama pengguna]/[proyek]/io/test/test_2.13/0.0.3/test_2.13-0.0. 3.jar ditolak oleh server: Forbidden response=Error: "test_2.13-0.0.3.jar" dalam versi 0.0.3 dari "io.test.test_2.13" telah diterbitkan.

@francisdb JAR upload gagal karena SBT upload file rusak; dari apa yang saya ingat, ini adalah bug lama di SBT (IvyActions.scala) di mana fungsi publish menggunakan tipe peta alih-alih tipe seq. Dengan pindah ke sistem manajemen ketergantungan Kurir, ini bisa diselesaikan sendiri.

Saran saya adalah mengganti proses unggah itu sendiri di dalam plugin ini, pastikan untuk mengunggah pom terlebih dahulu. Tentu saja, ini masih tidak membantu dengan pengklasifikasi, yang saya perlukan dukungannya.

sepertinya di sbt 1.3.2 Kurir tidak digunakan untuk mengunggah artefak, hanya untuk mengunduh

Juga, saya belum mendapat tanggapan dari GitHub tentang masalah ini

Tarik permintaan: #2

Kurir hanya digunakan secara default dimulai dengan sbt 1.3.0

pengujian saya adalah dengan 1.3.2

@francisdb Mengerti.

Sepertinya Github telah mengubah beberapa hal, dapat melakukan unggahan penuh hari ini. (vanili 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

Web ui masih bingung dengan sufiks sbt

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

Ini menyenangkan! Saya akan melakukan beberapa pengujian hari ini dan melihat apakah saya dapat menutupnya. Sangat sangat mengasyikkan.

Saya dapat mengonfirmasi bahwa, dengan beberapa penyesuaian pada plugin untuk menggunakan hasil eksperimen @francisdb , semuanya sekarang berfungsi! Masalah webui dengan sufiks cross-build tampaknya tidak memengaruhi resolusi sebenarnya, hanya UI. Jadi publikasi dan resolusi sekarang berfungsi dengan plugin. Saya belum menguji hal-hal dengan repositori pribadi; tebakan saya adalah mereka belum cukup berfungsi, tetapi semuanya cukup baik sehingga saya telah menerbitkan 0.1.0 .

Terima kasih, semuanya, untuk semua kerja keras dan eksperimen Anda! Plugin ini sangat sepele berkat Anda semua.

@francisdb

Snapshot dapat diunggah tetapi mungkin tidak memiliki penanganan khusus karena Anda tidak dapat mengunggahnya dua kali

Anda _dapat_ mengunggahnya dua kali: Anda dapat menghapus snapshot di UI GitHub dan kemudian mengunggah lagi snapshot baru (artinya versi snapshot yang sama). Itu berhasil untuk saya. Agak rumit, tetapi berhasil.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat