☕️

グループIDがio.github.xxxのアーティファクトをMavenセントラルへ公開する with GitHub Actions

2023/12/10に公開

概要

MavenセントラルリポジトリーへグループIDがio.github.xxxxxxにはユーザー名が入る)のアーティファクトを公開する手順と、GitHub Actionsでデプロイを自動化する手順をメモします。

前提

  • GitHubへサインイン済みであること
  • GitHubでリポジトリーを作成済みであること
  • GitリポジトリーへMavenでビルドできるJavaコードをコミット済みであること

central.sonatype.comで実施すること

サインイン

https://central.sonatype.com/ の右上にある「Sign In」と書かれたリンクを辿り、「Continue with GitHub」を選択してサインインします。

Namespaceの確認

https://central.sonatype.com/publishing/namespaces を開いてio.github.xxxがVerifiedになっていることを確認します。

ユーザートークンを生成する

https://central.sonatype.com/account を開いて「Generate User Token」を押し、ユーザートークンを生成します。

ユーザートークンは後で使用するのでメモしておいてください。

GPGで鍵ペアを生成してサーバーへ登録する

https://central.sonatype.org/publish/requirements/gpg/#distributing-your-public-key の「Generating a Key Pair」と「Distributing Your Public Key」を参照してください。

pom.xmlを編集する

必要な要素を設定する

次の要素を設定します。

  • name
  • description
  • url
  • licenses
  • developers
  • scm

ソースとJavadocの添付設定を行う

https://central.sonatype.org/publish/publish-maven/#javadoc-and-sources-attachments を参考に設定します。

ただ、ガイドに記載されているプラグインのバージョンは古かったので、そこだけ新しいバージョンを指定する方が良さそうです。

maven-gpg-pluginを設定する

https://central.sonatype.org/publish/publish-maven/#gpg-signed-components を参考に設定します。

こちらも新しいバージョンを指定しましょう。

central-publishing-maven-pluginを設定する

https://central.sonatype.org/publish-ea/publish-ea-guide/#publishing-by-using-the-maven-plugin を参考に設定します。

pom.xmlの例

https://github.com/backpaper0/hello-maven-central/blob/157957dbbebd363c7ced2e4d3c48d982c08bcc6f/pom.xml

GitHubで実施すること

https://github.com/<username>/<repository>/settings/secrets/actionsを開いて次のシークレットをRepository secretsへ登録します。

名前 値の取得元
CENTRAL_USERNAME central.sonatype.comで生成したユーザートークンに含まれるUsername
CENTRAL_PASSWORD central.sonatype.comで生成したユーザートークンに含まれるPassword
GPG_PRIVATE_KEY GPGで生成した秘密鍵。エクスポート方法は後述
GPG_PASSPHRASE GPGで鍵ペアを生成する際に設定したパスフレーズ

GPGで生成した秘密鍵をエクスポートするには次のコマンドを使用します。

gpg --export-secret-keys --armor <鍵のID>

GitHub ActionsのYAMLを作成する

デプロイ先サーバーとGPGを設定する

Setup Javaアクションには指定した内容をもとにオンザフライでsettings.xmlを作成する機能と、GPG秘密鍵を設定する機能があります。

https://github.com/actions/setup-java/blob/v4/docs/advanced-usage.md#Publishing-using-Apache-Maven を参考にデプロイ先サーバーとGPG秘密鍵およびパスフレーズを設定します。
その際、server-idcentralとし、その他の値はGitHubで登録したシークレットの名前を参考に設定してください。

YAMLの例

https://github.com/backpaper0/hello-maven-central/blob/157957dbbebd363c7ced2e4d3c48d982c08bcc6f/.github/workflows/deploy.yaml

デプロイ〜公開

GitHub Actionsでワークフローを動かしてデプロイします。

デプロイが上手くいくと https://central.sonatype.com/publishing/deployments で次のようにVALIDATEDの状態になります。

あとは「Publish」を押せばMavenセントラルリポジトリーへ同期され、アーティファクトが公開されます。

Discussion