ElixirをGitHubActionsを使ってCIしよう｡

この記事は、「[fukuoka.ex Elixir／Phoenix Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fukuokaex)」19日目の記事です。
きのうは @im_miolab さんの「[プログラミング言語Elixirの北九州コミュニティ「kokura.ex」についてお話します！](https://qiita.com/im_miolab/items/ded11bfee9a6cc0cf5fe)」でした。

# はじめに
皆さん,　Elixir開発でCIやってますか?　
弊社では,　[TravisCI](https://travis-ci.org/)や[CircleCI](https://circleci.com/ja/)を使ってるプロジェクトもあります｡

普段はGitHub使ってるのに,　他のサービスと連携する寂しさを感じていました｡
[GitHubActions](https://github.com/features/actions)がベータ版で使えると知り,　魂が震えました｡
そう・・・使ってみよう!!　と思ったわけです｡

### 補足
GitHubActionsは以前ベータ版でしたが,　2019年11月14日に正式版になりました｡
色々できそうなんですが,　今回はCIのことだけやろうと思います!!

# ではやりましょー
## 環境
諸事情により,　Elixirのバージョンは古めです｡
・elixir         1.6.6   
・erlang         21.3.8.5

## 適当にElixir/Phoenixプロジェクト作成して,　起動します
```
mix phx.new actions --no-brunch --no-ecto
```

```
mix phx.server
```

いつもの画面表示を確認　(久しぶりに見たなぁ・・・)
<img width="642" alt="スクリーンショット 2019-12-19 19.20.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/8994a40d-d2b3-9089-648e-83ae17c9b79a.png">

#### 下準備は完了です!!

## ワークフローを書く前に・・・
そのまえに,　今のディレクトリ直下は以下の状態です｡
※検証のためにフォーマッター入れました｡

```
./              .formatter.exs  .gitignore      README.md       config/         lib/            mix.lock        test/
../             .git/           .idea/          _build/         deps/           mix.exs         priv/
```

せっかくなので,　[GitHub](https://github.com/KrainNeun/ElixirGitHubActionsCI)に上げときます｡

## ワークフローを書こう!!
以下のファイルを作成します｡
今回は,　プルリクが上がったら,　テストを実行してフォーマットチェックをする内容です｡

.github/workflows/elixir.yml

```
name: Elixir CI

on: pull_request

jobs:
  test:
    name: Build & Test & FormatCheck
    runs-on: ubuntu-latest

    container:
      image: elixir:1.6-otp-21
      env:
        MIX_ENV: test

    steps:
      - uses: actions/checkout@v1.0.0
      - name: Install Dependencies
        run: |
          mix local.rebar --force
          mix local.hex --force
          mix deps.get
      - name: Run Test
        run: |
          mix test

      - name: Format Checks
        run: |
          mix format --check-formatted
```


これを作成後,　プルリクを作成するとCIが動きます｡
※少しタイムラグがあるので,　ちょっと待たないといけません・・・｡
<img width="759" alt="スクリーンショット 2019-12-19 19.35.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/ad00a308-b938-4ee6-4904-0a8fb62be4b2.png">

#### ちゃんと動いてますね!!

## CI結果を見てみる
フォーマットチェックしてますが,　私は `mix format` していません｡
絶対エラーになっているはずなので,　見てみます｡

<img width="756" alt="スクリーンショット 2019-12-19 19.38.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/55379b28-2f80-f7c5-6485-eed0407bd2e3.png">

#### 怒られてますね｡　うん,　知ってた｡

詳細をみると,　フォーマットチェックでエラーになってることがわかります｡
<img width="1332" alt="スクリーンショット 2019-12-19 19.40.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/ad9c1bd4-49a4-6b06-4ef2-cd20e922f60c.png">

▶を開くとメッセージが見れます｡
<img width="551" alt="スクリーンショット 2019-12-19 19.41.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/31a6ad4f-2485-34cb-7d9f-10bb57008980.png">

## グリーンにしたい・・・
フォーマットしてないことが原因なので,　フォーマットします

```
mix format
```

フォーマット完了後にPushすると,　またCIが動き出します｡　ドキドキ
<img width="744" alt="スクリーンショット 2019-12-19 19.47.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/6c6bbc23-2545-d0db-b72b-95f24098e937.png">

しばらくまつと・・・
<img width="741" alt="スクリーンショット 2019-12-19 19.48.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117014/1eb56247-27a0-8f17-576f-1aa1c4247c78.png">

#### ｲｪ━━━━━ヽ( ﾟДﾟ)人(ﾟДﾟ )ﾉ━━━━━━ｲ!!　グリーンになりました!!!
これで　「普段はGitHub使ってるのに,　他のサービスと連携する寂しさ」　から開放です!!

## まとめ
GitHubActionsも正式版になりましたし,
気がついたらアーティファクトが使えるようになっていました｡(気づいていないだけかも)　
GitHubだけでできるようになったので,　機会があればこれからも色々触ってみたいと思います☆

---
明日の「[fukuoka.ex Elixir／Phoenix Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fukuokaex)」20日目の記事は、@gkumi5638 さんですー