Я начал использовать плагин sbt-github-packages . В качестве первого шага я попытался настроить его для простого фиктивного проекта - он работал локально и в контексте действий GitHub. Затем я сделал то же самое для простого фиктивного многомодульного проекта - он работал локально и в контексте действий GitHub.
Проблема возникла, когда я попытался выполнить ту же настройку для производственного репо git, который содержит библиотека с некоторым общим кодом. Этот репо является частным и принадлежит организации. Моя учетная запись GitHub имеет полный доступ в пределах организации.
Этот проект имеет следующую структуру:
lazy val common = project
.in(file("lib/common"))
.settings(sdk.GlobalSettingsGroup)
lazy val `sdk-a` = project
.in(file("lib/sdk-a"))
.settings(sdk.GlobalSettingsGroup)
.dependsOn(common)
lazy val `sdk-b` = project
.in(file("lib/sdk-b"))
.settings(sdk.GlobalSettingsGroup)
.dependsOn(common)
...
lazy val `domain-api-a` = project
.in(file("domain/domain-api-a"))
.settings(sdk.GlobalSettingsGroup)
.dependsOn(`sdk-a`)
lazy val `domain-api-b` = project
.in(file("domain/domain-api-b"))
.settings(sdk.GlobalSettingsGroup)
.dependsOn(`sdk-a`, `sdk-b`)
lazy val domainApis: Seq[ProjectReference] = Seq(
`domain-api-a`,
`domain-api-b`,
...
)
lazy val libs: Seq[ProjectReference] = Seq(
`common`,
`sdk-a`,
`sdk-b`,
...
)
lazy val all = domainApis ++ libs
lazy val root = project
.in(file("."))
.aggregate(all: _*)
.settings(
name := "foundation-backend"
)
.settings(sdk.GlobalSettingsGroup)
В общем, есть 19 подмодулей.
Здесь GlobalSettingsGroup
:
val GlobalSettingsGroup: Seq[Setting[_]] = Seq(
githubOwner := "private_org_name",
githubRepository := "foundation-backend",
credentials +=
Credentials(
"GitHub Package Registry",
"maven.pkg.github.com",
sys.env.get("GITHUB_ACTOR").getOrElse("N/A"),
sys.env.getOrElse("GITHUB_TOKEN", "N/A")
),
//scala version, organization, version etc are also here
)
Я добавил обе переменные env в .bash_profile
:
export GITHUB_TOKEN=my_secret_token_for_github
export GITHUB_ACTOR="Fruzenshtein"
Когда я запускаю sbt publish
локально, я вижу, как все пакеты появляются на странице пакетов Фонд-бэкэнд-репо. Но команда SBT заканчивается этими ошибками:
[error] javax.net.ssl.SSLProtocolException: Broken pipe (Write failed)
[error] at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:126)
[error] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
[error] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
[error] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
[error] at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:988)
[error] at okio.Okio$1.write(Okio.java:78)
[error] at okio.AsyncTimeout$1.write(AsyncTimeout.java:179)
[error] at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
[error] at okio.RealBufferedSink.write(RealBufferedSink.java:41)
[error] at okhttp3.internal.http1.Http1Codec$FixedLengthSink.write(Http1Codec.java:286)
[error] at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:171)
[error] at okio.RealBufferedSink.writeAll(RealBufferedSink.java:99)
[error] at okhttp3.RequestBody$3.writeTo(RequestBody.java:118)
[error] at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:62)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
[error] at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
[error] at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
[error] at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
[error] at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
[error] at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
[error] at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)
Когда я пытаюсь настроить ту же сборку в контексте действий GitHub, используя следующие шаги:
name: Scala CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Package JAR
run: sbt publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_ACTOR: ${{ github.actor }}
Я получаю эти ошибки, и нет пакеты, опубликованные в пакетах:
[error] sdk-a / githubActor from sdk-a / credentials ((sbtghpackages.GitHubPackagesPlugin.authenticationSettings) GitHubPackagesPlugin.scala:54)
[error]
[error] sdk-b / githubActor from sdk-b / credentials ((sbtghpackages.GitHubPackagesPlugin.authenticationSettings) GitHubPackagesPlugin.scala:54)
[error]
[error] sdk-c / githubActor from sdk-c / credentials ((sbtghpackages.GitHubPackagesPlugin.authenticationSettings) GitHubPackagesPlugin.scala:54)
[error]
[error] domain-api-a / githubActor from domain-api-a / credentials ((sbtghpackages.GitHubPackagesPlugin.authenticationSettings) GitHubPackagesPlugin.scala:54)
[error]
[error] domain-api-b / githubActor from domain-api-b / credentials ((sbtghpackages.GitHubPackagesPlugin.authenticationSettings) GitHubPackagesPlugin.scala:54)
...
Я буду рад рассмотреть любые советы, поскольку я уже попробовал подход с:
githubTokenSource := TokenSource.Environment("GITHUB_TOKEN")
githubActor := sys.env.get("GITHUB_ACTOR").getOrElse("N/A")
вместо прямого плеча Credentials