1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DBを使ったpytestをgithub actionsで自動チェックする

Posted at

概要

SQLAlchemyでDBを使ったpytestをgithub actionsで自動チェック出来るようにしたいと思いました。
最初は、ローカルのDBに接続しようとし、エラーになってしまいましたが、github actionsのservicesを使うことで解決したので、記載していきます。

環境

Python==3.11.7
Flask==3.0.3
SQLAlchemy==2.0.35
pytest==8.3.3

コード例

.github/workflows/code-check.yml
# 1
name: Code Check

# 2
on:
  push:
    branches:
      - "**"
  pull_request:
    types:
      - closed

jobs:
  pytest:
    # 3
    runs-on: ubuntu-24.04

    services:
      # 4
      postgres:
        image: postgres:16
        env:
          POSTGRES_HOST: localhost
          POSTGRES_USER: postgres
          POSTGRES_PORT: 5432
          POSTGRES_DB: puppet_ci_test
          POSTGRES_PASSWORD: postgres
        ports:
          - 5432:5432

    steps:
      # 5
      - name: Checkout code
        uses: actions/checkout@v4
      # 6
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      # 7
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install --no-cache-dir -r requirements.txt
      # 8
      - name: Run Pytest
        env:
          POSTGRES_HOST: localhost
          POSTGRES_USER: postgres
          POSTGRES_PORT: 5432
          POSTGRES_DB: puppet_ci_test
          POSTGRES_PASSWORD: postgres
        run: pytest tests

解説

1, ワークフロー名(任意の名前)

name: Code Check

2, 全てのブランチのpush時、プルリクエストがマージされた時に実行。

on:
  push:
    branches:
      - "**"
  pull_request:
    types:
      - closed

3, jobの実行環境を指定

runs-on: ubuntu-24.04

4, postgreSQL16を使用、envに接続情報を設定

postgres:
    image: postgres:16
    env:
      POSTGRES_HOST: localhost
      POSTGRES_USER: postgres
      POSTGRES_PORT: 5432
      POSTGRES_DB: puppet_ci_test
      POSTGRES_PASSWORD: postgres
    ports:
      - 5432:5432

5, コードをワークフロー内にクローン

- name: Checkout code
  uses: actions/checkout@v4

6, pythonバージョン3.11系の最新版をセットアップ

- name: Set up Python
  uses: actions/setup-python@v4
  with:
    python-version: "3.11"

7, pipを最新化し、requirements.txt記載のライブラリインストール

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install --no-cache-dir -r requirements.txt

8, コード内で使う環境変数を設定し、testsディレクトリ内のpytest実行

- name: Run Pytest
  env:
    POSTGRES_HOST: localhost
    POSTGRES_USER: postgres
    POSTGRES_PORT: 5432
    POSTGRES_DB: puppet_ci_test
    POSTGRES_PASSWORD: postgres
  run: pytest tests

補足

実装のDB接続箇所では、下記でgithub actionsの場合に分岐できるので、8で設定した環境変数を使うよう切り替えます。

import os

# github actions workflow内の場合の処理
if "GITHUB_ACTIONS" in os.environ:
    # 環境変数POSTGRES_USER読み込み
    os.getenv("POSTGRES_USER")

参考サイト

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?