GitHub ActionsでMariaDBを使う方法(Node.js編)

3 min read読了の目安(約3000字

ファイル構成

─┬─ temporary.js      とりあえずmariadbの動作確認する用のスクリプト
 ├─ package.json      
 ├─ node_modules
 ├─ .github/workflows/ci.yml
 └─ .gitignore

下準備

ローカル環境でNode.jsとnpm、MariaDBをインストールしておく

nodenvを用いてNodeの管理をするのがおすすめ。導入方法はこちらに詳しくある。
nodenv でインストールできるNode.jsのバージョン一覧を更新する場合にはnode-build-update-defsを導入する。

MariaDBのインストール
$ brew install mariadb

記事執筆時点での環境

ツール バージョン
nodenv 1.4.0
node v14.16.0
npm 7.6.3
MariaDB 10.5.9

.gitignore

.DS_Store
node_modules/

package.jsonでmoduleをインストール

{
  "name": "mariadb-test",
  "version": "0.0.1",
  "private": true,
  "main": "temporary.js",
  "scripts": {
    "start": "node temporary.js",
  },
  "dependencies": {
    "mariadb": "^2.5.3"
  }
}
$ npm install

GitHub ActionsのYAMLを書く

ci.yml
name: MariaDB Test

on:
  push:
    branches:
      - develop

jobs:
  mariadb_test:
    runs-on: ubuntu-20.04
    timeout-minutes: 5

    steps:
      - uses: actions/checkout@v2

      # GitHub ActionsデフォルトのMySQLをシャットダウンしておく(必須)
      - name: Shutdown Ubuntu MySQL (SUDO)
        run: sudo service mysql stop

      # Dockerをつかってmariadbを立ててくれるActionを使う
      - uses: getong/mariadb-action@v1.1
        with:
          mariadb version: '10.5.9'
          mysql database: 'test-db'
          mysql user: 'developer'
          mysql password: 'QWERTY1234' #仮のもの(secretsを使った方がいい)

      - name: test run js
        run: |
          npm ci
          npm run start

なお、Github ActionsのNode.jsはデフォルトでv14.16.0なのでsetupする必要はないが、任意のバージョンで動かしたい場合は公式の記事を参考にするといい。

temporary.jsを書く

temporary.js
const mariadb = require("mariadb");

let pool = mariadb.createPool({
  host: "localhost",
  database: "test-db",
  user: "developer",
  password: "QWERTY1234",  // 仮のもの(引数でもらった方がいい)
});

const postQuery = (conn) => {
  return conn
    .query("CREATE TABLE test_info (test_id VARCHAR(8) UNIQUE NOT NULL)")
    .then((result) => {
      console.log("🐔", result);
      return conn.query(`INSERT INTO test_info (test_id) values("A0001")`);
    })
    .then((result) => {
      console.log("🐴", result);
      return conn.query(`SELECT * FROM test_info`);
    })
    .then((result) => {
      console.log("🐮", result);
    })
    .catch((err) => {
      console.error("🐯", err);
    })
    .finally(() => {
      conn.end();
    });
};

pool
  .getConnection()
  .then((conn) => {
    return postQuery(conn);
  })
  .finally(() => {
    pool.end();
  });

動作確認

ここまで準備できたら、developブランチを切ってpushすればActionsが動き出すはず。

補足

getong/mariadb-action@v1.1でmariadbを立てる際、mysql usermysql passwordを使わずmysql root passwordを使う場合は、jsでmariadb.createPoolする時の引数は以下のようにすればいい。

let pool = mariadb.createPool({
  host: "localhost",
  database: "test-db",
  user: "root",
  password: "{root passowrdと同じもの}",
});