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

mypyの結果がローカルマシンとCIで異なるので調べたこと

Posted at

遭遇した問題

mypyの結果がローカルマシンとCI (GitHub Actions)で異なる。
ローカルマシンではmypyがエラーを出すのに、CIでは素通りしてしまっていた。

GitHub Actions ワークフローの定義は次のような感じ。

on:
  pull_request:
jobs:
  test:
    runs-on: [self-hosted, linux, x64]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"
          cache: "pip"

      - name: Type check with mypy
        run: |
          mypy --ignore-missing-imports src/**.py tests/**.py

環境

  • Self-hosted runner (ubuntu 22.04)
  • fish on Debian 12
  • mypy 1.10.0

試したこと

  • キャッシュ(.mypy_cache)削除
  • verbose logging (-v オプション)

原因

verbose logging を有効化したところ、CIでは一部のソースファイルしか読んでいないことが判明した。
CIでは、src/直下およびtests/直下のファイルしか読み込んでいなかった。

ローカルマシンではfishを使っており、この環境ではsrc/以下とtests/以下の*.pyファイルを再帰的に読み込んでいた。

以上より、fishとbashの挙動の違いによるものと判定。

調べると、bashではglobstarオプションを有効化しないと**で再帰的な検索が有効とならないことが判明。
以下の修正で、期待の挙動をするようになった。

      - name: Type check with mypy
        run: |
          shopt -s globstar
          mypy --ignore-missing-imports src/**/*.py tests/**/*.py

まとめ

  • bashで**による再帰的検索を有効にするには、globstarオプションを設定する必要がある。
  • fishとbashはかなり違うのでfishの結果を鵜吞みにしない!

参考

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