scala/sbt-ci-releaseでライブラリをパブリッシュする
だいたいこの内容は公式ドキュメントの書き写しです。
必要なもの
Maven Centralのnamespace
libraryDependencies += "ここがnamespace" %% "ここがartifact名" % "ここがバージョン" という状態
GitHubログインすると自動的にio.github.てめーのIDがもらえるのでそれを使ってもよい
ドメインを持っているなら、DNSの設定をするとnamespaceがもらえる
SNAPSHOTを利用したい場合はここから有効化しておく必要がある
https://scrapbox.io/files/69307f67ff0cd1ce5d40db7a.png
sbtでビルドしているプロジェクト
今すぐ一回確認しろ
sbt-ci-release 1.11.0以降
gpg
自動化のための小道具
gh
jq
shred または srm
下準備(プロジェクトごとに一回だけ行う)
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "<version>")をproject/plugins.sbtに追記する
または、拙作のscaladex-mcpを利用するとAIくんが勝手に最新のバージョンを拾ってくれるはず
build.sbtに以下の設定がないことを確認する。これらはsbt-ci-releaseが自動的に処理するため、あってはならない
version
! 大抵の場合は既に存在するため、削除したことを確認しておく publishTo
publishMavenStyle
credentials
build.sbtの最上部に以下の設定を書き、パブリッシュの際のメタデータを用意する:
code:scala
inThisBuild(List(
organization := "dev.capslock", // 自分のnamespace
// GitHubのページを指定する。GitHubを使っていなければリポジトリのありかを指定する
// ライセンスを設定する
licenses := List(
),
// 開発者リスト
developers := List(
Developer(
"windymelt", // GitHubなどでのID
"Windymelt", // 名前
"Eメールアドレス",
)
),
))
List[(SPDXのid, URL)]という形式で記述する
licenseIdがIDにあたる。
referenceがURLにあたる。
例えばBSD三項ライセンスでは、IDはBSD-3-Clauseであり、URLはhttps://spdx.org/licenses/BSD-3-Clause.htmlである。
ここでターミナルを開く
ユーザートークンを作成する
要するにSonatype用のPersonal Access Token。
名前は何でもいいが、リポジトリ名とかを設定しておくと良さそう
有効期限はDoes not expireでよいだろう
作成するとUsernameとPasswordがもらえるのでメモしておく
$ export SONATYPE_USERNAME=...
$ export SONATYPE_PASSWORD=...
dotenvxとか使うと楽かも?
$ dotenvx set SONATYPE_USERNAME foobar2000
$ gh secret set SONATYPE_USERNAME --body "$SONATYPE_USERNAME"
$ gh secret set SONATYPE_PASSWORD --body "$SONATYPE_PASSWORD"
ここは自動化できない……
PGP鍵のセットアップ
Mavenは伝統的にPGP鍵によってアーティファクトの真正性を保証している
リポジトリごとに作ることが望ましいため、作成する
$ cs launch dev.capslock::scala-pgp-bootstrap:0.0.2
GitHub Actionsを用意する
公式が用意してくれているのでそれをコピペするだけ
code:sh
mkdir -p .github/workflows && \
コミットしてpushする
$ git add .github/workflows/release.yml build.sbt project/plugins.sbt
$ git commit -m 'sbt-ci workflow'
リリースフロー
PRを作ってmainにマージされると勝手にsnapshotがリリースされる
! ここでコケているときはbuild.sbtにversionが指定されていないことを確認しよう! プラグインがタグをもとに勝手にバージョンを設定するので触っちゃだめ〜
タグを打つとそれが正式にリリースされる
$ git tag -a v0.1.0 -m "v0.1.0"
タグはvが先頭についている必要がある
$ git push origin v0.1.0