Sbt-github-packages: рдЧрд┐рдЯрд╣рдм рдкреИрдХреЗрдЬ рдПрд╕рдмреАрдЯреА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЕрднреА рддрдХ)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдЧре░ 2019  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: djspiewak/sbt-github-packages

Sbt рдХрд╛ рдкреНрд░рдХрд╛рд╢рди рдореЙрдбрд▓ рдХреЗрд╡рд▓ GitHub рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рдЯреНрд╡реАрдЯ рдХрд╛ рдЕрд░реНрде рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рдореБрджреНрджрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЧрд┐рдЯрд╣рдм рдПрд╕рдмреАрдЯреА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рддреЛрдбрд╝рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкреНрд▓рдЧрдЗрди рдХреА рдЙрдЪрд┐рдд рд░рд┐рд▓реАрдЬ рдХрд░реЗрдВрдЧреЗред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

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

рдпрджрд┐ рдЖрдк рдКрдкрд░ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреЛрдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ Forbidden рдХреЗ рд╕рд╛рде рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред @alexarchambault рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХрд╛ рдЖрджреЗрд╢ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдФрд░ рдЬрд╛рд░ рдХреЛ рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреАрдердм рдиреЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдмрджрд▓ рджреА рд╣реИрдВ, рдЖрдЬ рдПрдХ рдкреВрд░реНрдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред (рд╡реЗрдирд┐рд▓рд╛ рдПрд╕рдмреАрдЯреА 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

рд╡реЗрдм рдпреВрдЖрдИ рдЕрднреА рднреА рдПрд╕рдмреАрдЯреА рдкреНрд░рддреНрдпрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИ

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

рд╕рднреА 23 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, -sources, -javadoc, -tests рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ

рдПрд╕рдмреАрдЯреА-рдПрдерд░-рддреИрдирд╛рддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВрдиреЗ sbt . рд╕реЗ рдЬреАрдердм рдкреИрдХреЗрдЬ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдкреНрд░реЛрдЬреЗрдХреНрдЯ/рдкреНрд▓рдЧрдЗрдиреНрд╕.sbt

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

рдмрд┐рд▓реНрдб.рдПрд╕рдмреАрдЯреА

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

рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╣рд▓реВ; рдЕрдЧрд░ рдореИрдВ рдЪрд╛рд░реНрд▓реНрд╕ рд╡реЗрдм рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рдХрднреА-рдХрднреА рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред

@lokkju рд╣рдореНрдо, рдорд▓реНрдЯреА-рдореЙрдбреНрдпреВрд▓ рдмрд┐рд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореИрдВрдиреЗ рдЙрдирдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ; рдпрд╣рд╛рдВ key рдПрдерд░-рддреИрдирд╛рддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдореИрдВ рдХреБрдЫ рдЕрд▓рдЧ рдЬрд╛рд╡рд╛ http рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рдордХрд╛рдЬреА рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЖрдкрдХреЛ рдЕрджреНрдпрддрд┐рдд рд░рдЦреВрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХ рдЕрдиреНрд╡реЗрд╖рдг рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдХреНрд╖рдг рдорд┐рд▓реЗ рд╣реИрдВред

рд╕рдВрдХреБрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ;

  • рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдбрд╛рд▓реА рдЧрдИ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореБрдЦреНрдп рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдлрд┐рд░ рдЖрдк рдЬрд┐рддрдиреА рдЪрд╛рд╣реЗрдВ рдЙрддрдиреА (рд╡реИрдз) рдкреАрдУрдПрдо рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрдВ
  • рдЖрдк рдХреЛрдИ рдЕрдиреНрдп рдЧреИрд░-рдкреАрдУрдПрдо рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
  • JAR рдФрд░ POM рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреАрдердм рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЕрдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк HTTP 4xx рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЬрд╛рд░ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ , рдлрд┐рд░ рдкреАрдУрдПрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд░реНрдерди рдореЗрдВ рдПрдХ рдИрдореЗрд▓ рд╣реИ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореНрдо, рддреЛ рдлрд┐рд░ рдХреЛрдИ рдЖрд░реНрдЯрд┐рдлрд╝реИрдХреНрдЯ рд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП *.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

рдореБрдЭреЗ рдЕрдм рддрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреА рддреИрдирд╛рддреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдЬреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд┐рдердм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИред

рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рд╢реБрджреНрдз рдореЗрд╡реЗрди/рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдЙрдВрдЧрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╕ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

[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 рдХреЗ рдкреНрд░рдпреЛрдЧ рдирд╡реАрдирддрдо рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧрд┐рдЯрд╣рдм рдкреИрдХреЗрдЬ рдЕрднреА рднреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ рдореЗрд╡реЗрди рд╡рд┐рддрд░рдг рдпреЛрдЧреНрдп (рдЬреИрд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░) рдХреЗ рд▓рд┐рдП рднрд╛рдЧ рдФрд░ рдкрд╛рд░реНрд╕рд▓ рд╣реИрдВред рдЬрдм рддрдХ рд╡реЗ рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рджреЗ 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" рдФрд░ рдирд╛рдо = "рдкрд░реАрдХреНрд╖рдг"):

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

рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЛ рдмрд╛рд░ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдкреЛрдо рдЕрдкрд▓реЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

[рдЬрд╛рдирдХрд╛рд░реА] рдкреНрд░рдХрд╛рд╢рд┐рдд рдЯреЗрд╕реНрдЯ_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 рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдирд┐рд╖рд┐рджреНрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рддреНрд░реБрдЯрд┐: "io.test.test_2.13" рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 0.0.3 рдореЗрдВ "test_2.13-0.0.3.jar" рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИред

@francisdb JAR рдЕрдкрд▓реЛрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ SBT рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреНрд░рдо рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ; рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рд╡рд╣ рдПрд╕рдмреАрдЯреА (IvyActions.scala) рдореЗрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдмрдЧ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдлрд╝рдВрдХреНрд╢рди seq рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Coursier рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрджрдо рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реНрд╡рдпрдВ рд╣рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рднреАрддрд░ рд╣реА рдЕрдкрд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдкрд╣рд▓реЗ рдкреЛрдо рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ред рдмреЗрд╢рдХ, рдпрд╣ рдЕрднреА рднреА рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рд╕рд╛рде рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ sbt 1.3.2 рдкрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Coursier рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЧрд┐рдЯрд╣рдм рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ

рд╣рдореНрдо... рдореИрдВрдиреЗ рдЕрднреА рдмрд╣реБрдд рдЬрд▓реНрджреА рджреЗрдЦрд╛ рдерд╛ред 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 рд╕рдордЭ рдЧрдпрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреАрдердм рдиреЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдмрджрд▓ рджреА рд╣реИрдВ, рдЖрдЬ рдПрдХ рдкреВрд░реНрдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред (рд╡реЗрдирд┐рд▓рд╛ рдПрд╕рдмреАрдЯреА 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

рд╡реЗрдм рдпреВрдЖрдИ рдЕрднреА рднреА рдПрд╕рдмреАрдЯреА рдкреНрд░рддреНрдпрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИ

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

рдпрд╣ рд░реЛрдорд╛рдВрдЪрдХ рд╣реИ! рдореИрдВ рдЖрдЬ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдмрд╣реБрдд рд╣реА рд░реЛрдорд╛рдВрдЪрдХред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, @francisdb рдХреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИрдВ! рдХреНрд░реЙрд╕-рдмрд┐рд▓реНрдб рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде рд╡реЗрдмреБрдИ рдореБрджреНрджреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдпреВрдЖрдИред рддреЛ рдкреНрд░рдХрд╛рд╢рди рдФрд░ рд╕рдВрдХрд▓реНрдк рдЕрдм рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдПрдХ рдирд┐рдЬреА рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ; рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рддрдХ рдХрд╛рдлреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреАрдЬреЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ 0.1.0 рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдЖрдк рд╕рднреА рдХреЛ, рдЖрдкрдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдФрд░ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдкреНрд▓рдЧрдЗрди рдЖрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рддреБрдЪреНрдЫ рд╣реИред

@ рдлрд╝реНрд░рд╛рдВрд╕рд┐рд╕рдбреАрдмреА

рд╕реНрдиреИрдкрд╢реЙрдЯ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЛ рдмрд╛рд░ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЛ рдмрд╛рд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЖрдк GitHub UI рдореЗрдВ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рдирдпрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ (рдЕрд░реНрдерд╛рддреН рд╕рдорд╛рди рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕рдВрд╕реНрдХрд░рдг) рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dcsobral picture dcsobral  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mkurz picture mkurz  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

l15k4 picture l15k4  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

invliD picture invliD  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

martonsereg picture martonsereg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ