GitHub Actionsを使うのが楽ですが、他の方法でも可能です。毎回調べているので書いておきます。
なお今回はKotlin DSLでGradleのビルドスクリプトを書きます。
チェックリスト
-
publishing
にGitHub Packagesのリポジトリが追加されているか - 認証情報が追加されているか
-
gradlew
のパーミッションが実行可能か -
build
publishToMavenLocal
が正常に実行できるか
環境
- Windows 10
- Intellij IDEA
- GitHub EducationとPro
- Java 11
- Kotlin 1.8.10
- Gradle 7.4.2
- Gradle Kotlin DSL
公開する
GitHub Packagesのリポジトリを追加する。
公開先のリポジトリを追加します。
プラグインの追加
Gradleのプラグインとして、maven-publish
が必要になります。
plugins {
kotlin("multiplatform") version "1.8.10"
id("maven-publish")
}
リポジトリの追加
url
の部分はhttps://maven.pkg.github.com/{OWNER}/{REPOSITORY}
です。
これを間違えると消せなくなるらしいのでご注意を…
credentials
の部分は環境によって変えてください。1
下の例はGitHub Actionsで実行する場合、そのまま使えます。
plugins {
//さっきの
}
kotlin{
//省略
}
android{
//省略
}
publishing{
repositories{
maven{
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/multim-dev/emoji-kt")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
}
}
}
}
CIを構成する
環境変数にユーザー名とトークンを追加するだけです。
GitHub Actionsの場合、
Publish Java Package with Gradle
というものを使うことで数クリックで追加できます。
Java 11の場合本当に何もしなくても使えるので便利です。
その他 TeamCityとかの場合
なぜTeamCityなのか、私が使っているからです。
上の例をそのまま使った場合
env.USERNAME
にユーザー名
env.TOKEN
にトークン
を追加します。
要は環境変数に追加するだけです。
gradlewが実行できるようにする
これのためにこの記事を書いたと言ったら過言
これを忘れるとGitHub Actionsでコケます。普段はIDEの機能を使うので忘れがちです。
git update-index --chmod=+x gradlew
ここでGitHubにプッシュ
build publishToMavenLocalが正常か
変なことしてなければ大抵は動きますが、マルチプロジェクト構成だったりすると失敗することもあるのでとりあえずMaven Localにpublishしてみます。
Maven Localは初期だと ~/.m2/repository
にあります。
確認すること
注意点
androidに関しては単に追加するだけでは作成してくれません2
- ビルドが正常に通るか、作成したいものが作成されているか(当たり前ですが…)
-
{group}/{rootProject.name}
があるか -
{group}/{rootProject.name}-jvm
があるか -
{group}/{rootProject.name}-js
があるか - その他構成したプラットフォームのものがあるか
- local.propertiesや他の設定ファイルがなくても実行できるか
注意点
Kotlin Multiplatformの場合、publishするものの設定をしなくてもデフォルトで設定されています。
公開する
GitHub Actionsの場合
GitHub ActionsでPublish Java Package with Gradle
をそのまま使用した場合、リリースするとActionsが実行されます。テスト時はversionをSNAPSHOT
でやるといいと思います。
その他
gradlew build publish
が実行されるように設定してください
最後に
使用するときも認証情報を追加する必要があります。面倒ですがまぁ…
これが今回作ったやつkmp-logger
Kotlin Multiplatformでslf4jとAndroidのloggerとconsole.logを使えます。