dbtとPipeRider GitHub Action


## はじめに

https://qiita.com/GabxInfuseAI/items/dd68c439622923ec951e#dbt%E3%81%A7%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3



この記事は前回の記事(_dbt+PipeRider+SQLite_ ユーズケース)に続いて、[PipeRider GitHub Action](https://github.com/marketplace/actions/piperider-cli-action)を導入して、[GitHubでCI(Continuous Integration)](https://docs.github.com/ja/actions)と言うことを達成する。


先ずこの三つファイルをローカルプロジェクトのルート階層に付け加える


+ `.github/workflows/ci.yml` - GitHubワークフローの定義

+ `requirements.txt` - PipeRider Actionは正しく実行するように必要なPyPi packages

+ `profiles.yml` - dbtプロジェクトに関するprofiles

### requirements.txt

```
dbt-sqlite
piperider
```



### ci.yml

::: note info
`crypto.so`はUbuntuでdbt-sqliteの必要なライブラリー
:::

```yaml
name: piperider-ci
env:
  # Eanble Debug
  ACTIONS_STEP_DEBUG: true

on:
  # Define the trigger on events; pull requests to the main branch
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  piperider-ci:
    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@v3

      - name: download the crypto library
        run: curl -LJO https://github.com/nalgeon/sqlean/releases/download/0.15.2/crypto.so

      - name: PipeRider CLI Action
        uses: InfuseAI/piperider-action@v0.4.1
        id: piperider
        env: 
          DBT_PROFILES_DIR: ${{ github.workspace }} 

```


### profiles.yml

```yaml
sp500_index:
  outputs:

    dev:
      type: sqlite
      threads: 1
      database: sp500
      schema: 'main'
      schemas_and_paths:
        main: 'sp500.db'
      schema_directory: '.'
      extensions:
        - './crypto'

  target: dev

```


## ローカルリポジトリをGitHubにプッシュする


[[日本語版] Adding a local repository to GitHub using Git](https://docs.github.com/ja/get-started/importing-your-projects-to-github/importing-source-code-to-github/adding-locally-hosted-code-to-github#adding-a-local-repository-to-github-using-git)を参考にする

### .gitignore

Gitの管理対象から外すファイルがあったら、ルールを書き込んでいく。

例：　

```
target/
dbt_packages/
__pycache__/
logs/
```

例のリポジトリのストラクチャー

```shell-session
├── .github
├── .piperider
├── analyses
├── macros
├── models
├── seeds
├── snapshots
├── tests
├── .gitignore
├── LICENSE
├── README.md
├── dbt_project.yml
├── profiles.yml
├── requirements.txt
└── sp500.db
```


## Pull Requestを作成する

新たなbranchを作成する

```shell
git checkout -b action-test
```

第一モデル`models/example/my_first_dbt_model.sql`を編集する
**2022-01-05**に**PRICE.DATE**を変更する

```
{{ config(materialized='view') }}

with source_data as (

    select * from PRICE
    left join SYMBOL ON SYMBOL.SYMBOL = PRICE.SYMBOL
    WHERE PRICE.DATE = '2022-01-05' 
)

select *
from source_data
```

ファイルの変更を記録して、GitHubのリポジトリへpushする

```shell
git commit -a -m "changed recorded date from 2022-01-04 to 2022-01-05"
git push
```

Pull requestはワークフローのrunを誘発して、runは終ったらレポートを生成する


![Screen Shot 2022-07-21 at 12.01.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623438/b7c03b96-bc5d-8f75-2bad-2c3582849b8f.png)


![Screen Shot 2022-07-20 at 11.35.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623438/be0b9dac-8574-66e0-fedb-0b266270856c.png)


![Screen Shot 2022-07-20 at 11.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623438/f02bd7a1-fe21-c130-195b-4fac4a850c5c.png)

以上

## 参考

### PipeRider GitHub Action

ワークフローに _Snowflake_ か _Slack_ 通知の追加について

https://docs.piperider.io/how-to/github-action

### 他のdbt+PipeRiderのユーズケース

<iframe width="560" height="315" src="https://www.youtube.com/embed/dnUq35s8AoY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>