GitHub CLIの拡張機能のCI整備をしようとしたらさくっとは進められなかったので備忘録
gh issue list
などのようなリスト系のコマンドでttyの画面サイズによって表示内容を変えているようなパターンの場合
画面幅の変化による省略などの表示の確認ではなく、単純に表示される情報の内容の確認をしようとしていた
ローカルでテストを書いて成功したのでGitHub ActionsのCI環境で実行したが失敗した
ローカルではそもそもtty環境なので特に問題がでないがGitHubActionsで実行するとそもそもtty環境がないので出力が変化してしまったよう
GitHub Actionsのtty化
まだGitHubActionsでttyへの対応はしていないようだが、script
コマンドを使うことでtty環境を再現できる
ほぼ下記の参考
2022-04-11 tty / GitHub Actions: Not a tty → tty化するハック | TTIL
記事の参考元
tty環境のスクリーンサイズの設定
tty環境の再現だけなら参考記事だけで達成できる
が、画面サイズは0になっていた
- 確認コードの一部抜粋
import( "github.com/cli/go-gh/pkg/term" ) terminal := term.FromEnv() termWidth, _, _ := terminal.Size() // termWidthが0
termWidthが0なのでtty環境を再現しただけでは出力に何も出力されないという状況になっていた
ということで画面サイズも設定する必要がある
sttyコマンドで設定する
tty環境のオプションを設定するにはsttyコマンドを使う
stty コマンドは、現在の標準入力であるデバイスに対して、いくつかの I/O オプションを設定します。 このコマンドは、現在の標準出力であるデバイスへ出力を書き出します。
- 画面サイズの設定
stty cols 200 rows 100
それっぽい値を指定した
GitHub Actionsで再現させる
- scriptでActions上でのtty環境を再現
- sttyでtty環境の画面サイズを設定
この組み合わせで、CLIツールのtty依存な処理のテストをGitHub Actionsでも実行が可能なはず
下記のようにshell
に設定してコマンドを渡せるようにすることでtty環境の再現を可能にした
- 一部抜粋
- name: test shell: 'script -q -e -c "stty cols 200 rows 100; bash {0}"' run: | go test -v
これでうまくいった
覚えておこうと思う