Central Repo への公開

Note

レシピセクションは目的に焦点を当て、説明は最小限に留める。

Central Portal への公開の一般的な概念については、Sonatype の Publish guides も参照。

目的

プロジェクトを Central Repository に公開したい。

手順

事前準備 1: Central Portal の登録

Sonatype の Publish guides に従って Central Portal アカウントを作成する。

  • OSSRH アカウントを持っていた場合は、Forgot password フローで新しい Central Portal に移行できる。これにより以前のネームスペース関連を維持できる。
  • GitHub で認証する場合、io.github.<user_name> が自動的にアカウントに紐づく。

register a namespace ガイドの手順に従い、ドメイン名をアカウントに紐づける。

事前準備 2: PGP 鍵ペア

Sonatype の GPG guide に従って PGP 鍵ペアを生成する。

GnuPG をインストールし、バージョンを確認する:

$ gpg --version
gpg (GnuPG/MacGPG2) 2.2.8
libgcrypt 1.8.3
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>

次に鍵を生成する:

$ gpg --gen-key

鍵を一覧表示する:

$ gpg --list-keys

/home/foo/.gnupg/pubring.gpg
------------------------------

pub   rsa4096 2018-08-22 [SC]
      1234517530FB96F147C6A146A326F592D39AAAAA
uid           [ultimate] your name <[email protected]>
sub   rsa4096 2018-08-22 [E]

鍵を配布する:

$ gpg --keyserver keyserver.ubuntu.com --send-keys 1234517530FB96F147C6A146A326F592D39AAAAA

手順 1: sbt-pgp

sbt-pgp プラグイン は公開アーティファクトを GPG/PGP で署名できる。(オプションで sbt-ci-release により公開プロセスを自動化できる。)

ビルドで有効にするため、project/plugins.sbt に次の行を追加する:

addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.3.1")

Note

gpg コマンドが sbt から利用できる PATH に含まれていることを確認すること。

手順 2: 認証情報

認証情報として使うユーザートークンをポータルで生成する。トークンは安全な場所(リポジトリ内ではない)に保存すること。

sbt 2.x は環境変数 SONATYPE_USERNAMESONATYPE_PASSWORD からも読み取り、central.sonatype.com 用の認証情報をそのまま追加できる。GitHub Actions など CI 環境からの自動公開に便利である。

- run: sbt ci-release
  env:
    PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
    PGP_SECRET: ${{ secrets.PGP_SECRET }}
    SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
    SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}

ローカルマシンでは、$HOME/.sbt/2/credentials.sbt ファイルに次の内容を記述するのが一般的である:

credentials += Credentials(Path.userHome / ".sbt" / "sonatype_central_credentials")

次に $HOME/.sbt/sonatype_central_credentials ファイルを作成する:

host=central.sonatype.com
user=<your username>
password=<your password>

手順 3: build.sbt の設定

Maven リポジトリに公開するには、正しいメタデータが生成されるよういくつかのセッティングを設定する必要がある。

注意: Central Portal に公開するには、publishTolocalStaging リポジトリに設定する必要がある:

// new setting for the Central Portal
publishTo := {
  val centralSnapshots = "https://central.sonatype.com/repository/maven-snapshots/"
  if version.value.endsWith("-SNAPSHOT") then Some("central-snapshots" at centralSnapshots)
  else localStaging.value
}

これらのセッティングを build.sbt の末尾または別の publish.sbt に追加する:

organization := "com.example.project2"
organizationName := "example"
organizationHomepage := Some(url("http://example.com/"))

scmInfo := Some(
  ScmInfo(
    url("https://github.com/your-account/your-project"),
    "scm:[email protected]:your-account/your-project.git"
  )
)
developers := List(
  Developer(
    id = "Your identifier",
    name = "Your Name",
    email = "your@email",
    url = url("http://your.url")
  )
)

description := "Some description about your project."
licenses := List(License.Apache2)
homepage := Some(url("https://github.com/example/project"))

// POM から Maven Central 以外の追加リポジトリをすべて削除する
pomIncludeRepository := { _ => false }
publishMavenStyle := true

// new setting for the Central Portal
publishTo := {
  val centralSnapshots = "https://central.sonatype.com/repository/maven-snapshots/"
  if version.value.endsWith("-SNAPSHOT") then Some("central-snapshots" at centralSnapshots)
  else localStaging.value
}

pom.xml(Maven が使うプロジェクトコンフィギュレーションの最終成果物)の完全な形式は POM Reference に記載されている。build.sbtpomExtra オプションでさらにデータを追加できる。

手順 4: アーティファクトのステージング

sbt シェルから実行する:

> publishSigned

手順 5: バンドルのアップロードまたはリリース

sbt シェルから実行する:

> sonaUpload

これでバンドルが Central Portal にアップロードされる。「Publish」ボタンをクリックして Central Repository に公開する。

公開を自動化する場合は、次を実行する:

> sonaRelease

公開したアーティファクトが Central Repository https://repo1.maven.org/maven2/ に表示されるまで、10 分から数時間かかることがある。