Open6

GitHub Actions のワークフローを CodeSandbox でデバッグする

hankei6kmhankei6km

この記事で act を知る。

https://zenn.dev/the_exile/articles/41026a0b317e28

Nix に act のパッケージがある。それならば CodeSandbox で使えるのでは?というメモ。試してみた感じでは「込み入ったことは難しいけど、 act を気軽に試せるのはよい」といった感じかと。


ここから下はほぼ Notion AI を利用しています、

CodeSandbox で act を使用することで、GitHub Actions のワークフローをローカルホスト以外のクラウド環境でテストし、デバッグすることが可能です。この記事では、CodeSandbox を使用して GitHub Actions をデバッグする方法をご紹介します。

hankei6kmhankei6km

act をインストールする

CodeSandbox では、act をインストールすることで、GitHub Actions のワークフローをテストしデバッグすることが可能です。act をインストールするには、CodeSandbox のターミナルから$ nix-env -iA nixpkgs.actを実行します。

hankei6kmhankei6km

デバッグしてみる

act のインストールが完了すると、CodeSandbox 内で GitHub Actions のワークフローをテストしデバッグすることができます。ワークフローをテストするには、$ act コマンドを使用します。

hankei6kmhankei6km

試してみた

※ 下記は、人間が実際に試してメモしておいたものを貼りつけています。

CodeSandbox でも大体動く。

  • 単純なテストを実行するようなものなら動く
  • rootless でも大丈夫だった
    • .ymldocker cp でコピーしていた
  • ワークフロー内で docker run するとエラーになる
    • docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
    • これはしかたないか?
  • ubunt-latest でないとイメージを pull できない?
    • なぜかイメージがない的なエラーで失敗している
    • Error: failed to create container: 'Error response from daemon: No such image: catthehacker/ubuntu:act-20.04'
  • その他(CodeSandbox 固有ではなさそうな項目)
    • GitHub CLI が入っていない
    • event のペイロード指定などは少し面倒
    • checkout も ref を指定するとトークンを要求される?
    • 特定のワークフロー(*.yml) を動かすには -W でファイルを指定する
      • 1 ファイルだけ除外みたいなのはなさそう
hankei6kmhankei6km

文法のチェックなど

act を使用して、GitHub Actions のワークフローをテストしデバッグするだけではなく、文法チェックを行うこともできます。文法チェックを行うには、$ act lint コマンドを使用します。このコマンドを実行すると、ワークフローをチェックし、不正な文法を見つけた場合はエラーメッセージを表示します。

actionlintshellcheck のインストール

actionlintshellcheck を CodeSandbox でインストールすることで、GitHub Actions のワークフローをより正確にテストしデバッグすることができます。actionlintshellcheck をインストールするには、CodeSandbox のターミナルから$ nix-env -iA nixpkgs.actionlint$ nix-env -iA nixpkgs.shellcheck を実行します。

hankei6kmhankei6km

csb.nix でインストールしておく

もし、CodeSandbox 上で GitHub Actions のワークフローをテストしデバッグするのが定期的なものであれば、プロジェクトのルートディレクトリに csb.nix ファイルを作成し、その中に actactionlintshellcheck をインストールする Nix 記法を記載することで、毎回ターミナルからインストール作業を行う必要がなくなります。

https://codesandbox.io/docs/tutorial/install-system-packages