概要
CircleCIでbatsによるBashのテストをしてたんだけど、特に改修していないのにCIがコケるようになってしまった。
どうもbatsがtput
なるコマンドを使っているようで、 tput
は $TERM
という環境変数が必要なようだ。
CircleCIの使ってるビルド環境から $TERM
変数がアップデートとかでいなくなってしまったのだろうか。
config.yml
batsファイルをリストアップしてbatsコマンドで実行しているだけである
version: 2 jobs: build: machine: enabled: true steps: - checkout - run: find . -type f -name "*\.bats" | xargs bats -p
エラーメッセージ
Hangupとか言われているのが気になるが、 tput: No value for $TERM and no -T specified
を解決してあげると動くみたい。
#!/bin/bash -eo pipefail find . -type f -name "*\.bats" | xargs bats -p tput: No value for $TERM and no -T specified /usr/local/libexec/bats-exec-test: line 321: 6811 Hangup "$0" $BATS_EXTENDED_SYNTAX "$BATS_TEST_FILENAME" "$test_name" "$test_number" Exited with code 123
原因
どうも tput
はTerminalを操作するコマンドらしい。
表示する色を変えたりできるみたい。
んで、batsは結果表示するときなんかに tput
を使用しているっぽくって、そこで ${TERM}
変数がなくてエラーになっているのではないかと。
対応
${TERM}
を環境変数に設定する。
export TERM="dumb"
意識したことないけど、 screen
だとか tmux
とかもこの変数に入ったりするみたい。
自分のローカルMacだと xterm-256color
だった。
dumbは「ダム端末 - Wikipedia」に由来しているようだけど、何もしないターミナルってことを表現しているのだろうか。
余談
CircleCIのフォーラムっぽいので語られていたのが解決の糸口になった。
これ少し前の投稿なので、デグレかな?とも思ったけど、TerminalのことCIが気にするのも何か変な気がする。。
デグレだとしたらそのうち直る気がするけど、直らない可能性も十分にありそう。
いずれにせよ、CircleCIでは結構こういうこと(ユーザ側で何も変更していなくても、CI側の変更でCIが通らなくなってしまうようなこと)が多い気がする。
他のCIツールだとどうなんだろ。自前コンテナ作ってCI環境安定させたほうがいい気がしてきた。