山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

GitHub ActionsでLOCALEがja_JP.UTF-8のPostgreSQLを使用する方法

結論

  • サービスコンテナでLOCALEに ja_JP.UTF-8 を設定することはできない
  • 自力でLOCALEを追加するイメージを作って、docker run で起動する

Dockerfile

FROM postgres:11.5
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8

GitHub Actionsのワークフロー設定

  • 正しい呼び名がわからず
name: postgresql

on: [push]

jobs:
  postgresql:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: PostgreSQL container build & run
        run: |
          docker build -t postgresql_i .github/workflows
          docker run -d --name postgresql_t -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e LC_ALL=ja_JP.UTF-8 postgresql_i
      - name: wait for db
        run: until docker exec postgresql_t pg_isready -U postgres; do sleep 1; done
      - name: show locale
        run: docker exec postgresql_t psql -U postgres -c "SHOW LC_COLLATE;"

ファイル構成

└ .github
    └ workflows
        ├ Dockerfile
        └postgresql.yml
  • Dockerfileはどこに置くのが良いのかわからず
    • .github/actions みたいなフォルダ作ってそこに置くのが良い?

出力

Run docker exec postgresql_t psql -U postgres -c "SHOW LC_COLLATE;"
 lc_collate  
-------------
 ja_JP.UTF-8
(1 行)

詳細

  • PostgreSQLはデフォルトのLOCALE( en_US.utf8 )だと日本語のソートが想定外の動きをする場合がある
  • Linuxでは設定したいLOCALEである ja_JP.UTF-8 はインストールする必要がある
  • GitHub ActionsでPostgreSQLを使用する場合、サービスコンテナを使用するのが定石な様子
  • サービスコンテナ内で起動前にコマンド実行ができないようなので、LOCALEのインストールができない
  • 自前でimageを作る必要がある
    • ↑の例ではDockerfileをリポジトリ内に置いてbuildしているが、DockerHubなり、GitHub Container Registryなりに置いてそれを使っても良い

参考