notebook

都内でWEB系エンジニアやってます。

GitHub Actionsでtty環境を再現し画面サイズも設定する

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

til.toshimaru.net

記事の参考元

gfx/example-github-actions-with-tty: A demo repository to prepare TTY for GitHub Actions step scripts

github.com

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

これでうまくいった

覚えておこうと思う