初めに
ド素人のメモです。
すみません。
本職でもないから許してくれ。
環境
- Windows10
- IntelliJ IDEA Community
リポジトリ作成
GitHubでリポジトリ作ります。
プロジェクト作成
Kotlin DSL ビルドスクリプトにチェックを入れます。
グループIDとかアーティファクトIDは適当なものを。
終わったらローカルリポジトリを作成してリモートリポジトリを追加してください。
build.gradle.kts
GitHubのドキュメントからまんまパクりました。
気を付ける点としてはurlのOWNER(ユーザー名/組織名)は全て小文字にすること。
nameはGitHubPackagesで固定。
plugins {
`maven-publish`
}
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
}
}
}
publications {
register<MavenPublication>("gpr") {
from(components["java"])
}
}
}
gradle.properties
先程のbuild.gradle.ktsのproject.findProperty
はgradle.propertiesの値を取得します。そのため、ユーザー名とtokenをgradle.propertiesに書かなければなりません。まずはトークン取得から。
トークン取得
https://github.com/settings/tokens でトークンを作成します。
以下を参考に必要な権限を設定します。
よく分からんから全部付けてみた!!
権限の設定が終わったらGenerate tokenを押します。
トークンが生成されるのでコピーして下さい。
貼り付けする前に
トークンを取得したはいいものの、作成したプロジェクト内にあるgradle.propertiesに貼り付けてはリモートリポジトリで丸見えです。
project.findProperty
はユーザーディレクトリの方のgradle.propertiesの内容も取得します。
なので、貼り付ける先はユーザーディレクトリの.gradle/gradle.properties
にします。
<USER_HOME>/.gradle/gradle.properties
です。
ちなみに2つのファイルに同じキーがあった場合、優先度はユーザーディレクトリの方にあります。
gpr.user=GitHubID
gpr.key=TOKEN
gradleでPackage作成
別にActions使わなくてもPackagesは作れます。
コマンドを打つだけです。
> .\gradlew publish
gradle.propertiesに定義せずとも作成する方法もあります。
コマンドラインの引数でプロパティを設定してあげます。
-PpropertyName=propertyValue
で設定できます。
> .\gradlew publish -Pgpr.user=GitHubID -Pgpr.key=TOKEN
GitHub ActionsでPackage作成
Actions作成
ドキュメントからパクリました。
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
- name: Publish package
uses: gradle/gradle-build-action@v2
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
先程のbuild.gradle.ktsのSystem.getenv
は環境変数の取得です。そのため、GitHub ActionsでGITHUB_ACTOR
とGITHUB_TOKEN
を環境変数として設定してあげる必要があります。
GITHUB_TOKEN
はsecrets.GITHUB_TOKEN
を設定してあげます。secrets.GITHUB_TOKEN
はデフォルトで定義されているシークレット変数なのでsecrets.GITHUB_TOKEN
を設定する作業とかは無いです。
GITHUB_ACTOR
はデフォルトで環境変数として設定されているので特に何かする必要はありません。
リリースしてPackages作成
GitHubでリリースを作成するとActionsが走ってPackagesが作成されます。
Gradle script /home/runner/work/*/gradlew is not executable.
gradlewに実行権限が無いらしいです。
なので実行権限を与えてあげます。
> git update-index --chmod=+x gradlew
公開されたパッケージの利用
repositories {
maven {
url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
credentials {
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
}
}
}
dependencies {
implementation("com.example:package")
}