Sbt-github-packages: GitHubパッケージは(まだ)sbtをサポートしていないようです

作成日 2019年08月01日  ·  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は、公開の順序は無関係であり、jarは関係なく拒否されると報告しています。

bug

最も参考になるコメント

Githubがいくつかの変更を加えたようで、今日は完全なアップロードを行うことができました。 (バニラ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

WebUIはまだsbtサフィックスについて混乱しています

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

全てのコメント23件

私の知る限り、-sources、-javadoc、-testsはサポートされていません

sbt-aether-deployを使用して、sbtからgithubパッケージに正常に公開しました

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

追加の側面; Charles Web Debugging Proxyを使用すると、すべてが正常に機能します。 これがないと、サーバーが応答しないというエラーが発生することがあります。

@lokkjuうーん、マルチモジュールビルドはどうですか?

私はそれらを試していません。 ここでのキーは、完全に修正されているわけではありませんが、aether-deployを使用しているようです。 各ツールで使用されているクライアントバージョンのSSLサポートに問題があるのではないかと思います。

いくつかの異なるJavahttpライブラリを試して、単純に機能する構成と機能しない構成を置き換えることができるかどうかを確認します。 私はあなたを最新の状態に保ちます。

それで、さらに調査した後、私はいくつかの興味深い症状を発見しました。

curlを使用してパッケージをアップロードしようとしただけで、私は見つけました。

  • PUTした最初のファイルは、ファイル名や拡張子に関係なく、メインのアーティファクトとして扱われます
  • その後、一意の名前が付いている限り、必要な数の(有効な)POMファイルをアップロードできます。
  • 他の非POMファイルをアップロードすることはできません
  • JARおよびPOMファイル拡張子を持つファイルはgithubによって解析され、無効な形式では、返されるHTTP4xxエラーのメッセージとしてエラーが報告されます。

現在の重要なポイントは、最初に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]")

credentailsは次のように定義する必要があります

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

トークンには次のスコープが必要です: read:packagesrepoおよびwrite:packages

ただし、公開すると、これらの提案されたパッケージ座標(organization = "io.test"およびname = "test")になります。

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

スナップショットはアップロードできますが、2回アップロードできないため、特別な処理は行われない可能性があります。

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:URLhttps: //maven.pkg.github.com/ [ユーザー名] / [プロジェクト] /io/test/test_2.13/0.0.3/test_2.13-0.0へのアクセス。 3.jarがサーバーによって拒否されました:禁止された応答=エラー:「io.test.test_2.13」のバージョン0.0.3の「test_2.13-0.0.3.jar」はすでに公開されています。

@francisdb JARのアップロードは失敗します。これは、SBTがファイルを順不同でアップロードするためです。 私が覚えていることから、これはSBT(IvyActions.scala)の長年のバグであり、公開関数がseqタイプではなくマップタイプを使用します。 Coursier依存関係管理システムへの移行により、これは自己解決する可能性があります。

私の提案は、このプラグイン内でアップロードプロセス自体をオーバーライドし、必ず最初にpomをアップロードすることです。 もちろん、これは私がサポートを必要としている分類器にはまだ役立ちません。

sbt 1.3.2のように見えますCoursierはアーティファクトのアップロードには使用されておらず、ダウンロードのみに使用されています

また、この問題についてGitHubからの返信はありません。

プルリクエスト:#2

Coursierは、sbt1.3.0以降のデフォルトでのみ使用されます

私のテストは1.3.2

@francisdb了解しました

Githubがいくつかの変更を加えたようで、今日は完全なアップロードを行うことができました。 (バニラ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

WebUIはまだsbtサフィックスについて混乱しています

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

これはエキサイティングです! 今日はいくつかのテストを行い、これを終わらせることができるかどうかを確認します。 とてもエキサイティングです。

@francisdbの実験結果を使用するためにプラグインを少し調整するだけで、作業が機能していることを確認できます。 クロスビルドサフィックスに関するwebuiの問題は、実際の解像度には影響しないようで、UIだけに影響します。 そのため、公開と解決がプラグインで機能するようになりました。 私はまだプライベートリポジトリで物事をテストしていません。 私の推測では、それらはまだ完全には機能していないと思いますが、私が0.1.0を公​​開したので、物事は十分に良好です。

皆さん、頑張って実験してくれてありがとう! 皆さんのおかげで、プラグインは非常に簡単です。

@francisdb

スナップショットはアップロードできますが、2回アップロードできないため、特別な処理は行われない可能性があります。

それらを2回アップロードできます。GitHubUIでスナップショットを削除してから、新しいスナップショット(同じスナップショットバージョンを意味します)を再度アップロードできます。 それは私のために働いた。 少し面倒ですが、動作します。

このページは役に立ちましたか?
0 / 5 - 0 評価