LoginSignup
2
1

More than 1 year has passed since last update.

GitHub ActionsでHardhatのCI/CDを構築する

Last updated at Posted at 2022-12-17

目的

Hardhatでコントラクトを開発する中で、テスト・コンパイル・デプロイの操作が度々あります。そのような処理をGitHub Actionsを使ってCI・CDを構築したら良いと思い実装に至りました。

対象者

  • GitHub Actionsを入門したい方
  • CI/CDの基礎を学びたい方
  • HardhatのCI/CDを構築したい方

基礎

CI/CDとは

CI(継続的インテグレーション)
コードのテスト・ビルドを繰り返す行うことで問題の早期発見し、開発効率をあげる手法

CD(継続的デリバリー)
検証済みのコードのリリースを自動化し、開発効率をあげる手法

詳しくは下記記事を参考にしてください

GitHub Actionsとは

GitHubが提供するCI/CDプラットフォームでワークフローに書かれた処理を実行します。
特徴としては既存のCI・CDツールではないissueの追加された時にもワークフローを実行することができます。

Hardhatとは

Hardhatは Ethereum ソフトウェアをコンパイル、デプロイ、テスト、およびデバッグするための開発環境です。この他だとTruffle Suiteなどがあります。
これを使用することにより、EVM互換性をもつチェーンを扱うことができます。

実装

環境構築

# npmの初期化
$ npm init -y

# hardhatのinstall
# Create a basic sample projectを選択
# 残りは推奨されている方を選択
$ npx hardhat install

# ワークフローのファイル作成
$ mkdir .github
$ mkdir .github/workflows
$ touch .github/workflows/deploy.yml

コーディング

npmスクリプトの修正

package.json
  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "deploy": "hardhat run scripts/sample-script.js",
+    "compile": "hardhat compile",
+    "test": "hardhat test"
  }

ワークフローの作成

.github/workflows/deploy.yml
name: deploy
on:
  push:
    branches:
      - master #ここはお好きなブランチにしてください
jobs: 
  unit-test:
    name: Unit Test
    runs-on: ubuntu-latest
    steps: 
      - uses: actions/checkout@master
      - name: Set Node.js 12.x
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install dependencies
        run: npm ci
      - name: Test
        run: npm test
  deploy:
    name: Deploy
    needs: unit-test
    runs-on: ubuntu-latest
    steps: 
      - uses: actions/checkout@master
      - name: Set Node.js 12.x
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install dependencies
        run: npm ci
      - name: compile
        run: npm run compile 
      - name: deploy
        run: npm run deploy

大まかに解説
on
onの部分では何を条件にワークフローを動こすを指定できます。今回だとmasterブランチにpush・mergeされた時に動きます。
jobs
jobsでは具体的なワークフローの定義をしていきます。今回はUnit Test・Deployというjobがあります。

動かしてみよう

ここまで準備ができましたら、あとはpushして動かすだけです。
YMLファイルで指定したブランチにPushしてみてください!

Actionsのページで動作は確認することができます。。。。
スクリーンショット 2022-12-17 5.09.23.png
無事うまくいった模様!!

ここにうまくいったリポジトリも公開していますのでよかったら参考にしてください!

今後行うこと

マルチチェーンに対応できるようにして、ブランチごとに各チェーン上でスマートコントラクトをデプロイできるようにする!

最後に

今回はHardhatに入っているサンプルを使ってGitHub Actionsを使ってみましたが、本来はEthereum・Polygonなどでデプロイするときは秘密鍵が必要になると思います。なので、GitHubの環境変数に秘密鍵を置くなどの処理は慎重に行ってください。くれぐれも資産が入っているWalletは開発に使わないようにしてください🙇 

参考記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1