下記のようにGitHub Actionsの設定を書いてPRが出された時点で
ridgepole apply
で差分実行が正常に実行できるか(bin/rails db:drop db:create ridgepole:apply
では正常扱いになってしまうが差分適用時にはエラーになるもの)- 差分適用のために生成されるDDL等が問題ないか(意図しないDDL等が発行されてないか)
を確認できるような運用にしています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| - name: Ridgepole Apply
run: |
# ベースブランチのスキーマでapply
docker-compose exec -T app bin/rails db:create
git checkout ${{ github.base_ref }}
docker-compose exec -T app bin/rails ridgepole:apply
# ソースブランチのスキーマでdry-runとapply
git checkout ${{ github.head_ref }}
rp_res=`docker-compose exec -T app bin/rails ridgepole:dry_run`
echo 'rp_res<<EOF' >> $GITHUB_ENV # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
echo "${rp_res}" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
docker-compose exec -T app bin/rails ridgepole:apply
- name: Post Ridgepole dry run results to PR
uses: thollander/actions-comment-pull-request@v1
with:
# ベースブランチとソースブランチの差分で適用されるDDL等を表示
message: |
Ridgepole dry run results
```
${{ env.rp_res }}
```
comment_includes: 'Ridgepole dry run results'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
rough ridgepole.rake example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| namespace :ridgepole do
task apply: :environment do
ridgepole('--apply')
end
task dry_run: :environment do
ridgepole('--apply', '--dry-run')
end
def ridgepole(*options)
# drop-table optionがないとテーブルが削除されません
command = ['bundle exec ridgepole --file db/Schemafile', '-c config/database.yml', '--drop-table', "-E #{Rails.env}"]
o, e, s = Open3.capture3((command + options).join(' '))
puts o.presence || e
raise e unless s.success?
end
end
|