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

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

# 前提
- spring boot(はあんまり関係ない)
- Gradle project

# GitHub Packagesで公開する。
まずはここから始めた方がいい。これが出来ないとこの後の処理が始まらない。

https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-gradle-for-use-with-github-packages#authenticating-with-a-personal-access-token

ここにあるといえばそれまでなのだが、まずは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
権限は以下があれば良い。
<img width="753" alt="スクリーンショット 2020-04-02 0.36.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115285/08243e59-3f6e-440f-c439-7a772d4255dc.png">

ここでうまくいけば、当該repositoryのpackageの箇所にこんな感じに追加されるはずである。これができていないとその先ができない。
<img width="779" alt="スクリーンショット 2020-04-02 0.41.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115285/049a49e1-af02-055b-7afe-deef83dbbc05.png">

# 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が動き出す。
<img width="915" alt="スクリーンショット 2020-04-02 0.57.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115285/74acec81-36c0-06ac-4fba-3324a5ddffc5.png">

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