1. shimosyan

    Posted

    shimosyan
Changes in title
+新Github Actions を使って npm audit fix と PR 作成を自動化してみた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,75 @@
+Security Alerts に怒られる前になんとかしたい!
+
+## やりたいこと
+
+Node.js であれば```npm audit fix```で行える依存ライブラリの更新のような保守作業…。
+日頃意識していないとなかなか手につかないので自動で Pull Request 作成までできるようにしたい。
+欲を言えば、Approve や Merge も自動でやってほしい。(今回はやらない)
+
+## Github Actions
+
+11月13日ごろに正式リリースとなる Github Actions のβ版を試してみました。
+
+### なぜ Github Actions なのか
+
+[Github Marketplace](https://github.com/marketplace?type=actions) で公開されているツールを使って Workflow が組めるので、他の CI/CD サービスよりも Github の操作がしやすいのではと思いました。
+
+## 実装
+
+今回は [Create Pull Request](https://github.com/marketplace/actions/create-pull-request) を使って PR作成までを自動化することにしました。
+
+Github Actions は Push や Create Pull Request がトリガーできる他、スケジュール起動ができるので今回はそれを使ってみます。
+(Security Alerts で発火できるようにならないですかねー)
+
+Push トリガーや、Create Pull Request トリガーはそのブランチ上で Workflow が実行されますが、 スケジュール起動の場合は master ブランチ上でのみ動作します。Workflow も master ブランチ上に置いてあるものが読み込まれます。
+
+こんな感じで Workflow を用意し、master ブランチに展開します。
+
+``` ./.github/workflows/createPullRequest.yml
+name: Create Security Fix Pull Request
+on:
+ schedule:
+ - cron: '0 3 * * 3' # 毎週水曜日の正午に実行 ( 12+JST = 3+UTC )
+
+jobs:
+ patch:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/setup-node@v1 # Node.js 環境の構築
+ with:
+ node-version: '10.x'
+
+ - uses: actions/checkout@master # リポジトリを読み込み
+
+ - run: npm audit fix
+
+ - name: Check diff # package-lock.json の diff を読み更新がなければ終了
+ run: |
+ git diff --stat package-lock.json
+ if ! git diff --stat package-lock.json | grep "changed" 2>&1; then
+ echo "Already up to date."
+ exit 0
+ fi
+
+ - name: Create Pull Request # ブランチを作成して PullRequest を作成
+ id: cpr
+ uses: peter-evans/create-pull-request@v1.7.0
+ with:
+ title: Security Update into master.
+ label: Auto-PR
+ branch: securityFix #作成されるブランチは securityFix-xxxxxxx
+ token: ${{ secrets.GITHUB }}
+```
+
+## 動作確認
+
+こんな感じに Workflow が動き、
+![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172469/d4b00bf4-2e63-7e78-af07-66e5d4833df7.png)
+
+PR が作成されています。(Approve、Merge は手動です)
+![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172469/a2658165-e71f-2dfa-8f50-5d54f33c389c.png)
+
+## 感想
+
+今回は Pull Request 作成まででしたが、[Auto Approve](https://github.com/marketplace/actions/auto-approve) や [Merge pull requests](https://github.com/marketplace/actions/merge-pull-requests) を組み合わせればリリース作業も完全に自動化できそうです。