2
0

More than 1 year has passed since last update.

Gradle + GitHub ActionsでGitHub Packages作成

Last updated at Posted at 2022-12-26

初めに

ド素人のメモです。
すみません。
本職でもないから許してくれ。

環境

  • Windows10
  • IntelliJ IDEA Community

リポジトリ作成

GitHubでリポジトリ作ります。

プロジェクト作成

Kotlin DSL ビルドスクリプトにチェックを入れます。
グループIDとかアーティファクトIDは適当なものを。
プロジェクト作成.PNG
終わったらローカルリポジトリを作成してリモートリポジトリを追加してください。

build.gradle.kts

GitHubのドキュメントからまんまパクりました。

気を付ける点としてはurlのOWNER(ユーザー名/組織名)は全て小文字にすること。
nameはGitHubPackagesで固定。

build.gradle.kts
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 でトークンを作成します。
以下を参考に必要な権限を設定します。

よく分からんから全部付けてみた!!
token permission.PNG
権限の設定が終わったらGenerate tokenを押します。
トークンが生成されるのでコピーして下さい。
generated.PNG

貼り付けする前に

トークンを取得したはいいものの、作成したプロジェクト内にあるgradle.propertiesに貼り付けてはリモートリポジトリで丸見えです。
project.findPropertyはユーザーディレクトリの方のgradle.propertiesの内容も取得します。
なので、貼り付ける先はユーザーディレクトリの.gradle/gradle.propertiesにします。
<USER_HOME>/.gradle/gradle.propertiesです。
ちなみに2つのファイルに同じキーがあった場合、優先度はユーザーディレクトリの方にあります。

gradle.properties
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作成

ドキュメントからパクリました。

packages.yml
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_ACTORGITHUB_TOKENを環境変数として設定してあげる必要があります。
GITHUB_TOKENsecrets.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

公開されたパッケージの利用

build.gradle.kts
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")
}

参考にしたサイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0