私が歌川です

@utgwkk が書いている

GitHub Actions上でdocker composeコマンド経由でpytestを走らせると何も出力されない現象

はじめに

2022/3/13 時点で、表題の現象を確認しています。また、以下のいずれかの手段で解決することを確認しています。

  • docker compose ではなく docker-compose コマンドを使う
  • docker compose run を実行する際に -T (--no-TTY) コマンドライン引数を渡す

以下の手段では解決できませんでした。

  • pytestを実行する際に -v オプションを渡す
  • docker compose run を実行する際に --compatibility コマンドライン引数を渡す

docker composedocker-compose の違い

もともとDocker Composeというツールが docker-compose というコマンドとして提供されていました。docker-compose はPython製です。

その後、Docker Composeがメジャーバージョンアップして、Go言語で書き直されて docker compose というサブコマンドの形で提供されるようになりました。

Docker Compose自体の説明や、バージョンアップによる変化などについての詳しい情報は、公式リポジトリや以下の記事などを参照してください。

github.com

zenn.dev

経緯

この現象に気づいたきっかけは、自作したpytestプラグインに以下のissueが立ったことです。

github.com

Docker環境化でpytestプラグインがうまく動かない、と報告されています。貼ってもらったログを確認したところ、pytestプラグインどころかpytestコマンド自体が何も出力していないことに気づきました。

issueで参照されているリポジトリを手元にcloneして、CIと同様にpytestコマンドを走らせてみましたが、とくに変わったところもなくテストが完走してログも出力されました。CI環境下でしか再現しない現象ということで嫌な予感がしてきますね。

もしかするとGitHub Actions上だとdocker composeコマンドとの食い合わせが悪いのかも? docker-composeを使ってみてはどうでしょう、と返事したところ、それでうまく動くようになったようで、issueはcloseされました。

その後、気になったのでちょっと調査してみました。いくつか試してみて、docker compose コマンドのままでも -T オプションを渡せばこれまで通り動く、ということを突き止めました。python コマンドの出力は -T オプションなしでも正常に行われたので、pytestのログ出力の仕組みと docker compose の食い合わせがよくないのかもしれません。