GitHub ActionsでBuildしGitHub Packagesで公開する。


タイトルそのままなのだが、簡単なことだったのに1日かかったので。

前提

  • spring boot(はあんまり関係ない)
  • Gradle project

GitHub Packagesで公開する。

まずはここから始めた方がいい。これが出来ないとこの後の処理が始まらない。

ここにあるといえばそれまでなのだが、まずはpluginを追加する。

build.gradle
plugins {
        id 'maven-publish'
}

次にこれを追加する。

build.gradle
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            # FIXME
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            from(components.java)
        }
    }
}

因みにuriのFQDNは今回はmaven repositoryなのでmaven.pkg.github.com固定である。ここがわからなくて結構ハマってた。ずっと普通のgithub.comにしてた。
なので、ここで注意であるが、この時点でローカルで./gradlew assemble publishで確認した方がいい。この際に、gradle.propertiesに以下を追加すること

gradle.properties
gpr.user=OWNER
grr.key=PRIVATE_ACCESS_TOKEN

OWNERはまあわかると思うが、アクセストークンは以下を見て作成すること。
https://help.github.com/ja/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
権限は以下があれば良い。

ここでうまくいけば、当該repositoryのpackageの箇所にこんな感じに追加されるはずである。これができていないとその先ができない。

GitHub Actionsを作成する。

Actions→New workflowのボタンから作れば良い、のだが、多分何を作れば良いのか分からないと思うので、以下で良い。結果的には.github/workflows配下にyaml形式で作成することになる。
GitHub-flow前提なので、トリガーはmasterに対してのpush,PRのみとしている。

main.yml
# This is a basic workflow to help you get started with Actions
# FIXME
name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Publish library
      env:
        # FIXME
        USERNAME: OWNER
        TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: ./gradlew assemble publish 

OWNERは当然変更すべきなので置いといて、GITHUB_TOKENは自動的に作られるので便利である。もちろん上述した、アクセストークンを使っても構わないが。
https://help.github.com/ja/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
これを行なってうまくいけば、github actionsが動き出す。

GitHub Actionsが上記の通り完了すれば上述したのと同様に、packagesが公開される。本来はbuild cacheの設定などちゃんとやった方がいいが。

この辺のworkflowの設定はこの辺にあるので、必要に応じて読めば良い。(碌に読んでない。)
https://help.github.com/ja/actions/reference/workflow-syntax-for-github-actions

groupidなど。

ここはgradle側の設定である。今回は以下の通りである。SNAPSHOT運用前提としている。

build.gradle
group = 'com.example'
version = '0.0.2-SNAPSHOT'

利用側

ライブラリの利用時には、多分きっといや間違いなく、認証設定が必要である。それは下の参考ページの設定と同じだと思うので割愛する。

参考サイト

とても参考にさせて頂いたというか、パクったとも言う。
https://qiita.com/Horie1024/items/be2b5eb768f36794c4f1
こっちの方がちゃんとしてていいかもしれない。JavaのVer設定とかはこっちに書いてある。
https://github.com/actions/setup-java#publishing-using-gradle