CIの秘密情報を、なるべくクラウドに置かずに試す — セルフホストランナーとactの話
対象読者と、この記事で本当に伝えたいこと
GitHub Actionsは、GitHubのクラウド上のマシンで動くのが普通だと思われがちです。実はGitHub自身が「セルフホストランナー」という仕組みを用意していて、自分のPCやサーバーでワークフローを動かせます。この記事は、その仕組みを使って、CIで使う秘密情報をできるだけクラウドに置かずに試す話です。
ど真ん中の読者
個人や小さなチームで開発していて、APIキーなどの秘密情報をクラウドのCIに預けるのが落ち着かない人
本番のワークフローを回す前に、手元で「想定できるバグ」を先に潰しておきたい人
自分のマシンで何が動くのかを、自分で読んで理解したい人
逆に、読まないほうがいい人
誰でもPull Requestを送れる公開リポジトリで、そのまま使おうとしている人。フォークから届いたコードが自分のマシンで動くおそれがあり、GitHubの公式ドキュメントも公開リポジトリでのセルフホストランナーは推奨していません。
他人が作ったランナー設定やスクリプトを、中身を読まずにフォークして動かしたい人。CIのスクリプトは自分のマシンの権限でそのまま実行されます。攻撃用に作られたものを読み間違えて動かせば、自分のPCがマルウェアの踏み台になりかねません。
本番環境と完全に同じ結果を期待する人。手元で潰せるのは想定できる範囲のバグまでです。
伝えたいのは1つだけです。セルフホストランナーは便利ですが、「自分のマシンで他人のコードを動かす仕組み」でもあります。中身を理解した、自分のリポジトリだけで使うこと。それが前提です。
!
この記事は、2026年11月3日時点の ci-self-runner のmainブランチ(最終コミットは10月23日)のREADMEとコードをもとに書いています。ツールの仕組みや実測値は、前回の記事「Macのself-hosted runnerで、自分のCIを手元で回す」にまとめたので、ここでは繰り返しません。
GitHub Actionsは「自分のマシン」でも動く
GitHub Actionsのワークフローを動かすマシンを「ランナー」と呼びます。普段は runs-on: ubuntu-latest のように書いて、GitHubが用意したクラウドのマシン(GitHub-hosted runner)で動かしています。
ただ、GitHubは自分で用意したマシンをランナーとして登録する仕組みも公式に提供しています。それが セルフホストランナー(self-hosted runner) です。ドキュメントには、物理マシンでも仮想マシンでもコンテナでもよく、GitHub Actionsでの利用自体は無料で、マシンの維持費は自分持ちだと書かれています。OSやツールの更新も自分の責任です。
自分はこれを手元のMacで使っていて、その運用をまとめたのが ci-self-runner です。READMEの冒頭にあるとおり、個人運用(single-owner)向けの運用キットです。
便利さの裏側:他人のコードが自分のマシンで動く
先に危ないほうの話をします。GitHubの Secure use reference には、セルフホストランナーについて次のように書かれています。
GitHub-hosted runnerは、ジョブごとに使い捨てのクリーンな仮想マシンで動く
セルフホストランナーにはその保証がなく、ワークフロー内の信頼できないコードによって持続的に侵害されうる
そのため、誰でもPull Requestを開ける公開リポジトリでは、セルフホストランナーはほぼ使うべきではない
プライベートリポジトリでも、フォークしてPull Requestを開ける人がいれば、秘密情報や GITHUB_TOKEN に手が届きうる
さらに、ランナーにするマシンに「SSHの秘密鍵やAPIトークンなど、どんな機密情報が置いてあるか」を考えるよう求めています。普段使いのPCをそのままランナーにすると、ここがいちばん怖いところです。
ci-self-runnerでは、self-hosted向けのジョブに「リポジトリのオーナーが自分で、フォークからのPull Requestではないときだけ動く」という条件(ownerガード)を付けています。また RUNNER_ISOLATION.md では、ランナー専用のユーザーを作って作業ユーザーと分けること、外部からのPull Requestをランナーで動かさないことを決めています。
ただ、どれも「自分のリポジトリを、自分だけで使う」前提を守るための仕組みで、これだけで危険がなくなるわけではありません。
他人のランナー設定を、そのままフォークして動かさない
同じ理由で、他人が作ったランナー設定やCIスクリプトを、中身を読まずに動かすのはおすすめしません。ci-self-runnerも含めてです。
CIのスクリプトは、ランナーを動かしているユーザーの権限でそのまま実行されます。シェルスクリプトやワークフローは、見た目が似ていても中身はまったく違うことがあります。攻撃用に書かれたものを「便利そうなCI設定」だと読み間違えて動かせば、自分のPCがマルウェアの踏み台になりかねません。GitHubのドキュメントも、サードパーティのactionやワークフローは、どんな対策をしていてもソースを必ず監査するよう書いています。
使うなら、自分で読んで、何をするのか説明できる範囲だけにしてください。分からないところがあるうちは、動かさないほうが安全です。
秘密情報は、実際どこに置かれるのか
タイトルに「なるべく」と付けたのは、セルフホストランナーにしただけで秘密情報がクラウドから消えるわけではないからです。ここは正直に分けて書きます。
場面
秘密情報の置き場所
ci-self-runnerでしていること
手元でワークフローを試す(act / sandbox)
渡さなければ、どこにも渡らない
sandbox は既定で空の秘密情報ファイルを act に渡し、ホストの認証情報を自動では入れない。必要なときだけ --secret-file で明示する
作業コピーを作るとき
手元のファイル
.env / .env.*(.env.example は除く)、.secrets、.vars、.input、.actrc はコピーせず、除外した名前を記録する
セルフホストランナーで本番のジョブを動かす
GitHub Secretsに登録したものが、ジョブ実行時に自分のマシンへ渡る
署名などの処理は自分のMacの上で動く。ただし秘密情報そのものはGitHub側に登録されている
リポジトリの中
置かない
verify-lite が、Webhook URLや秘密鍵のヘッダー、.p12 / .mobileprovision / .p8 / .jks / .keystore などのファイル名を検出する
いちばん効いているのは1行目です。ワークフローの組み立てやビルドの手順を確かめる段階では、秘密情報をまったく渡さずに回せます。本物の鍵が必要になるのは、署名や配布のような最後の段階だけです。
一方で、本番のモバイル向け署名については、ci-self-runnerの MOBILE_SECRETS_POLICY.md でも、秘密情報は「GitHub Actions Secrets / Environments で管理する」と決めています。Pull Requestでは署名をせず、署名や配布は main / develop へのpushか手動実行に限る、という線引きです。クラウドに一切置かない構成ではありません。
また、除外できるのはよくある名前の認証情報ファイルだけで、Gitの履歴の中や、別の名前で保存された秘密情報は検出しません。verify-lite のチェックも、決め打ちの文字列やファイル名を探す簡易なものです。
actで、本番のワークフローを先に流してみる
もうひとつ、自分が本当に助かったのが act です。GitHub Actionsのワークフローを、Dockerを使って手元で動かすためのOSSです。ci-self-runnerでは、ci-self act と ci-self sandbox の中でactを使っています。
どんなジョブがあるかを見る
ci-self act --list
ジョブを1つ選んで、手元で流す
ci-self act --job <job-id>
ありがたさが分かりやすいのは、iOSやAndroidのCI/CDのような長いワークフローです。ビルドから配布までを本番で回すと時間がかかり、途中で落ちれば、直してまた最初から待つことになります。手元で先に流しておくと、ジョブの組み立てや手順の書き間違いのような「出そうなエラー」を、本番の前にある程度潰しておけました。具体的にどのエラーだったかは、正直もう覚えていません。それでも、本番で回す回数と待ち時間は減ったと感じています。
手元で通っても、本番で通るとは限らない
ここは強めに書いておきます。actは、GitHub Actionsの完全な再現ではありません。actの公式ドキュメントの Unsupported functionality には、次のようなものが未対応として並んでいます。
concurrency、job.permissions、job.timeout-minutes は無視される
OpenID Connect(OIDC)のURLが定義されない
job.environment が無視され、environmentごとの秘密情報の切り分けにも対応していない
Runners のページにあるとおり、既定のイメージはGitHubのランナーにあるツールをすべて含んでいるわけではなく、仮想マシンではなくDockerコンテナで動くことによる違いもあります。macOSのジョブはDockerでは動かず、Macの上で直接動かす必要があります。iOSのビルドそのものは、結局Macの上で動かすことになります。
なので、自分の使い方は「手元のactで想定できる失敗を先に潰す。最終的な合否はGitHub Actions側か、本物のセルフホストランナーで確かめる」です。手元で通ったことを、本番で通ったことの代わりにはしていません。
余談:React Native初挑戦と、自分の好み
このモバイルのCI/CDを組んだのは、React Nativeに初めて挑戦したときでした。React Nativeを選んだのは、そのプロジェクトの要件に合わせたからで、自分の好みで選んだわけではありません。
ここからは事実ではなく、あくまで自分の好みです。アプリを作るなら、個人的にはネイティブでビルドするか、Flutterを選びたいです。ゲームならUnity、リアルタイム性を突き詰めるゲームならUnreal Engineかな、と思っています。どれが正解という話ではなく、作るものと要件次第です。
ただ、どの技術を選んでも、CI/CDが長くなりがちなことと、署名や配布の鍵をどこに置くかという悩みは同じです。今回の手元で先に流すやり方は、技術を選ばずに使えると思っています。
限界と、まだ確かめていないこと
ci-self-runnerは個人運用(single-owner)向けです。外部のコラボレーターやフォークからのPull Requestを受け入れる構成は想定していません。その場合は先に SECURITY_HARDENING_TASK.md の対策が必要です
sandbox は悪意のあるコードを閉じ込めるための仕組みではありません。ネットワークは有効で、ワークフローのコードは外へデータを送れます
実行実績はARM64のMac(Apple Silicon)と、その上のARM64 Linuxコンテナ、命令変換で動かすx86_64のVMです。READMEにも書いているとおり、ネイティブのx86_64 Linux実機ではまだ検証していません
actでの結果は、GitHub Actionsと同じ結果の保証にはなりません
おわりに
セルフホストランナーとactを使うと、秘密情報を渡さずにワークフローを手元で先に流せて、長いCI/CDの「本番で回して落ちる」をある程度減らせます。自分にとっては、それだけでも十分な価値がありました。ci-self-runnerは、これまで自分で作ってきた道具の中でも、いまも普段から使い続けているもののひとつです。
その代わり、自分のマシンでコードを動かす以上、何が動くのかを自分で理解していることが前提になります。読んで分かる範囲で、自分のリポジトリだけで使う。そのくらいの距離感がちょうどいいと思っています。
間違いや、もっと良いやり方があれば教えてください。
Pushing six commits called "fix ci" to test one workflow change gets old fast. act runs your GitHub Actions locally in Docker, so you find the typo before the runner does.
nektos/act
96 views
Run GitHub Actions locally with act – instant feedback
act lets you run your .github/workflows on your own machine giving you fast feedback without pushing code. It uses Docker to spin up the same containers GitHub runs, so you can replace a Makefile with actions.
Built by the nektos team: nektos/act
1 point
Test GitHub Actions instantly
github/workflows on your own machine, giving you fast feedback without pushing code. It uses Docker to spin up the same containers GitHub runs, so you can replace a Makefile with actions.
🍒 Built by the nektos team
nektos/act
#opensource #golang
2 likes
@brankopetric00 Give this a shot, Frankly I've never had to use it locally myself, But people have good opinions about it nektos/act
4 likes · 295 views
@alaxic Set up a VM and run them locally nektos/act
36 views
CHẠY VÀ DEBUG GITHUB ACTIONS NGAY TRÊN MÁY LOCAL: NÓI LỜI TẠM BIỆT VỚI HÀNG CHỤC COMMIT RÁC 'FIX CI TEST'
Chắc hẳn anh em dev nào cũng từng trải qua vòng lặp ức chế: sửa một dòng YAML của GitHub Actions, commit với thông điệp "fix ci", push lên remote, ngồi chờ 5 phút để runner chạy, rồi lại thấy đèn đỏ báo lỗi cú pháp. Lịch sử commit của dự án trở nên nham nhở với hàng chục commit thử nghiệm ngớ ngẩn.
Act (nektos/act) là công cụ dòng lệnh mã nguồn mở cho phép bạn thực thi và kiểm thử toàn bộ luồng CI/CD của GitHub Actions ngay trên máy trạm cục bộ của mình mà không cần push bất kỳ commit nào lên GitHub.
Tech Stack:
Được viết bằng Golang hiệu năng cao, sử dụng Docker API để kéo các container image mô phỏng chính xác môi trường runner của GitHub (Ubuntu, macOS runner environments).
Tại sao nên dùng?
- Phản hồi tức thì trong vài giây (Fast Feedback Loop): Phát hiện lỗi cú pháp, thiếu biến môi trường hoặc script test bị crash chỉ trong tích tắc ngay tại local terminal.
- Đọc trực tiếp cấu hình .github/workflows: Act tự động phân tích cú pháp workflow YAML, thiết lập ma trận ma trận kiểm thử (job matrix) và chạy các step tuần tự hoặc song song hệt như máy chủ GitHub.
- Bảo vệ bí mật môi trường: Hỗ trợ nạp các file .env hoặc cờ --secret an toàn mà không sợ rò rỉ API key lên log công khai của repository.
Dự án sở hữu hơn 57.000 stars trên GitHub và là trợ thủ đắc lực không thể thiếu của bất kỳ lập trình viên nào làm việc với GitHub Actions.
Link tham khảo: nektos/act
#OpenSourceVN #VNOSS #opensourcevn #vnoss #DevCommunity #Act #GitHubActions #CICD #DevOps #Golang #Docker
1 point
Mentions
CIの秘密情報を、なるべくクラウドに置かずに試す — セルフホストランナーとactの話 対象読者と、この記事で本当に伝えたいこと GitHub Actionsは、GitHubのクラウド上のマシンで動くのが普通だと思われがちです。実はGitHub自身が「セルフホストランナー」という仕組みを用意していて、自分のPCやサーバーでワークフローを動かせます。この記事は、その仕組みを使って、CIで使う秘密情報をできるだけクラウドに置かずに試す話です。 ど真ん中の読者 個人や小さなチームで開発していて、APIキーなどの秘密情報をクラウドのCIに預けるのが落ち着かない人 本番のワークフローを回す前に、手元で「想定できるバグ」を先に潰しておきたい人 自分のマシンで何が動くのかを、自分で読んで理解したい人 逆に、読まないほうがいい人 誰でもPull Requestを送れる公開リポジトリで、そのまま使おうとしている人。フォークから届いたコードが自分のマシンで動くおそれがあり、GitHubの公式ドキュメントも公開リポジトリでのセルフホストランナーは推奨していません。 他人が作ったランナー設定やスクリプトを、中身を読まずにフォークして動かしたい人。CIのスクリプトは自分のマシンの権限でそのまま実行されます。攻撃用に作られたものを読み間違えて動かせば、自分のPCがマルウェアの踏み台になりかねません。 本番環境と完全に同じ結果を期待する人。手元で潰せるのは想定できる範囲のバグまでです。 伝えたいのは1つだけです。セルフホストランナーは便利ですが、「自分のマシンで他人のコードを動かす仕組み」でもあります。中身を理解した、自分のリポジトリだけで使うこと。それが前提です。 ! この記事は、2026年11月3日時点の ci-self-runner のmainブランチ(最終コミットは10月23日)のREADMEとコードをもとに書いています。ツールの仕組みや実測値は、前回の記事「Macのself-hosted runnerで、自分のCIを手元で回す」にまとめたので、ここでは繰り返しません。 GitHub Actionsは「自分のマシン」でも動く GitHub Actionsのワークフローを動かすマシンを「ランナー」と呼びます。普段は runs-on: ubuntu-latest のように書いて、GitHubが用意したクラウドのマシン(GitHub-hosted runner)で動かしています。 ただ、GitHubは自分で用意したマシンをランナーとして登録する仕組みも公式に提供しています。それが セルフホストランナー(self-hosted runner) です。ドキュメントには、物理マシンでも仮想マシンでもコンテナでもよく、GitHub Actionsでの利用自体は無料で、マシンの維持費は自分持ちだと書かれています。OSやツールの更新も自分の責任です。 自分はこれを手元のMacで使っていて、その運用をまとめたのが ci-self-runner です。READMEの冒頭にあるとおり、個人運用(single-owner)向けの運用キットです。 便利さの裏側:他人のコードが自分のマシンで動く 先に危ないほうの話をします。GitHubの Secure use reference には、セルフホストランナーについて次のように書かれています。 GitHub-hosted runnerは、ジョブごとに使い捨てのクリーンな仮想マシンで動く セルフホストランナーにはその保証がなく、ワークフロー内の信頼できないコードによって持続的に侵害されうる そのため、誰でもPull Requestを開ける公開リポジトリでは、セルフホストランナーはほぼ使うべきではない プライベートリポジトリでも、フォークしてPull Requestを開ける人がいれば、秘密情報や GITHUB_TOKEN に手が届きうる さらに、ランナーにするマシンに「SSHの秘密鍵やAPIトークンなど、どんな機密情報が置いてあるか」を考えるよう求めています。普段使いのPCをそのままランナーにすると、ここがいちばん怖いところです。 ci-self-runnerでは、self-hosted向けのジョブに「リポジトリのオーナーが自分で、フォークからのPull Requestではないときだけ動く」という条件(ownerガード)を付けています。また RUNNER_ISOLATION.md では、ランナー専用のユーザーを作って作業ユーザーと分けること、外部からのPull Requestをランナーで動かさないことを決めています。 ただ、どれも「自分のリポジトリを、自分だけで使う」前提を守るための仕組みで、これだけで危険がなくなるわけではありません。 他人のランナー設定を、そのままフォークして動かさない 同じ理由で、他人が作ったランナー設定やCIスクリプトを、中身を読まずに動かすのはおすすめしません。ci-self-runnerも含めてです。 CIのスクリプトは、ランナーを動かしているユーザーの権限でそのまま実行されます。シェルスクリプトやワークフローは、見た目が似ていても中身はまったく違うことがあります。攻撃用に書かれたものを「便利そうなCI設定」だと読み間違えて動かせば、自分のPCがマルウェアの踏み台になりかねません。GitHubのドキュメントも、サードパーティのactionやワークフローは、どんな対策をしていてもソースを必ず監査するよう書いています。 使うなら、自分で読んで、何をするのか説明できる範囲だけにしてください。分からないところがあるうちは、動かさないほうが安全です。 秘密情報は、実際どこに置かれるのか タイトルに「なるべく」と付けたのは、セルフホストランナーにしただけで秘密情報がクラウドから消えるわけではないからです。ここは正直に分けて書きます。 場面 秘密情報の置き場所 ci-self-runnerでしていること 手元でワークフローを試す(act / sandbox) 渡さなければ、どこにも渡らない sandbox は既定で空の秘密情報ファイルを act に渡し、ホストの認証情報を自動では入れない。必要なときだけ --secret-file で明示する 作業コピーを作るとき 手元のファイル .env / .env.*(.env.example は除く)、.secrets、.vars、.input、.actrc はコピーせず、除外した名前を記録する セルフホストランナーで本番のジョブを動かす GitHub Secretsに登録したものが、ジョブ実行時に自分のマシンへ渡る 署名などの処理は自分のMacの上で動く。ただし秘密情報そのものはGitHub側に登録されている リポジトリの中 置かない verify-lite が、Webhook URLや秘密鍵のヘッダー、.p12 / .mobileprovision / .p8 / .jks / .keystore などのファイル名を検出する いちばん効いているのは1行目です。ワークフローの組み立てやビルドの手順を確かめる段階では、秘密情報をまったく渡さずに回せます。本物の鍵が必要になるのは、署名や配布のような最後の段階だけです。 一方で、本番のモバイル向け署名については、ci-self-runnerの MOBILE_SECRETS_POLICY.md でも、秘密情報は「GitHub Actions Secrets / Environments で管理する」と決めています。Pull Requestでは署名をせず、署名や配布は main / develop へのpushか手動実行に限る、という線引きです。クラウドに一切置かない構成ではありません。 また、除外できるのはよくある名前の認証情報ファイルだけで、Gitの履歴の中や、別の名前で保存された秘密情報は検出しません。verify-lite のチェックも、決め打ちの文字列やファイル名を探す簡易なものです。 actで、本番のワークフローを先に流してみる もうひとつ、自分が本当に助かったのが act です。GitHub Actionsのワークフローを、Dockerを使って手元で動かすためのOSSです。ci-self-runnerでは、ci-self act と ci-self sandbox の中でactを使っています。 どんなジョブがあるかを見る ci-self act --list ジョブを1つ選んで、手元で流す ci-self act --job <job-id> ありがたさが分かりやすいのは、iOSやAndroidのCI/CDのような長いワークフローです。ビルドから配布までを本番で回すと時間がかかり、途中で落ちれば、直してまた最初から待つことになります。手元で先に流しておくと、ジョブの組み立てや手順の書き間違いのような「出そうなエラー」を、本番の前にある程度潰しておけました。具体的にどのエラーだったかは、正直もう覚えていません。それでも、本番で回す回数と待ち時間は減ったと感じています。 手元で通っても、本番で通るとは限らない ここは強めに書いておきます。actは、GitHub Actionsの完全な再現ではありません。actの公式ドキュメントの Unsupported functionality には、次のようなものが未対応として並んでいます。 concurrency、job.permissions、job.timeout-minutes は無視される OpenID Connect(OIDC)のURLが定義されない job.environment が無視され、environmentごとの秘密情報の切り分けにも対応していない Runners のページにあるとおり、既定のイメージはGitHubのランナーにあるツールをすべて含んでいるわけではなく、仮想マシンではなくDockerコンテナで動くことによる違いもあります。macOSのジョブはDockerでは動かず、Macの上で直接動かす必要があります。iOSのビルドそのものは、結局Macの上で動かすことになります。 なので、自分の使い方は「手元のactで想定できる失敗を先に潰す。最終的な合否はGitHub Actions側か、本物のセルフホストランナーで確かめる」です。手元で通ったことを、本番で通ったことの代わりにはしていません。 余談:React Native初挑戦と、自分の好み このモバイルのCI/CDを組んだのは、React Nativeに初めて挑戦したときでした。React Nativeを選んだのは、そのプロジェクトの要件に合わせたからで、自分の好みで選んだわけではありません。 ここからは事実ではなく、あくまで自分の好みです。アプリを作るなら、個人的にはネイティブでビルドするか、Flutterを選びたいです。ゲームならUnity、リアルタイム性を突き詰めるゲームならUnreal Engineかな、と思っています。どれが正解という話ではなく、作るものと要件次第です。 ただ、どの技術を選んでも、CI/CDが長くなりがちなことと、署名や配布の鍵をどこに置くかという悩みは同じです。今回の手元で先に流すやり方は、技術を選ばずに使えると思っています。 限界と、まだ確かめていないこと ci-self-runnerは個人運用(single-owner)向けです。外部のコラボレーターやフォークからのPull Requestを受け入れる構成は想定していません。その場合は先に SECURITY_HARDENING_TASK.md の対策が必要です sandbox は悪意のあるコードを閉じ込めるための仕組みではありません。ネットワークは有効で、ワークフローのコードは外へデータを送れます 実行実績はARM64のMac(Apple Silicon)と、その上のARM64 Linuxコンテナ、命令変換で動かすx86_64のVMです。READMEにも書いているとおり、ネイティブのx86_64 Linux実機ではまだ検証していません actでの結果は、GitHub Actionsと同じ結果の保証にはなりません おわりに セルフホストランナーとactを使うと、秘密情報を渡さずにワークフローを手元で先に流せて、長いCI/CDの「本番で回して落ちる」をある程度減らせます。自分にとっては、それだけでも十分な価値がありました。ci-self-runnerは、これまで自分で作ってきた道具の中でも、いまも普段から使い続けているもののひとつです。 その代わり、自分のマシンでコードを動かす以上、何が動くのかを自分で理解していることが前提になります。読んで分かる範囲で、自分のリポジトリだけで使う。そのくらいの距離感がちょうどいいと思っています。 間違いや、もっと良いやり方があれば教えてください。
Pushing six commits called "fix ci" to test one workflow change gets old fast. act runs your GitHub Actions locally in Docker, so you find the typo before the runner does. nektos/act
Run GitHub Actions locally with act – instant feedback act lets you run your .github/workflows on your own machine giving you fast feedback without pushing code. It uses Docker to spin up the same containers GitHub runs, so you can replace a Makefile with actions. Built by the nektos team: nektos/act
Test GitHub Actions instantly github/workflows on your own machine, giving you fast feedback without pushing code. It uses Docker to spin up the same containers GitHub runs, so you can replace a Makefile with actions. 🍒 Built by the nektos team nektos/act #opensource #golang
@brankopetric00 Give this a shot, Frankly I've never had to use it locally myself, But people have good opinions about it nektos/act
@alaxic Set up a VM and run them locally nektos/act
CHẠY VÀ DEBUG GITHUB ACTIONS NGAY TRÊN MÁY LOCAL: NÓI LỜI TẠM BIỆT VỚI HÀNG CHỤC COMMIT RÁC 'FIX CI TEST' Chắc hẳn anh em dev nào cũng từng trải qua vòng lặp ức chế: sửa một dòng YAML của GitHub Actions, commit với thông điệp "fix ci", push lên remote, ngồi chờ 5 phút để runner chạy, rồi lại thấy đèn đỏ báo lỗi cú pháp. Lịch sử commit của dự án trở nên nham nhở với hàng chục commit thử nghiệm ngớ ngẩn. Act (nektos/act) là công cụ dòng lệnh mã nguồn mở cho phép bạn thực thi và kiểm thử toàn bộ luồng CI/CD của GitHub Actions ngay trên máy trạm cục bộ của mình mà không cần push bất kỳ commit nào lên GitHub. Tech Stack: Được viết bằng Golang hiệu năng cao, sử dụng Docker API để kéo các container image mô phỏng chính xác môi trường runner của GitHub (Ubuntu, macOS runner environments). Tại sao nên dùng? - Phản hồi tức thì trong vài giây (Fast Feedback Loop): Phát hiện lỗi cú pháp, thiếu biến môi trường hoặc script test bị crash chỉ trong tích tắc ngay tại local terminal. - Đọc trực tiếp cấu hình .github/workflows: Act tự động phân tích cú pháp workflow YAML, thiết lập ma trận ma trận kiểm thử (job matrix) và chạy các step tuần tự hoặc song song hệt như máy chủ GitHub. - Bảo vệ bí mật môi trường: Hỗ trợ nạp các file .env hoặc cờ --secret an toàn mà không sợ rò rỉ API key lên log công khai của repository. Dự án sở hữu hơn 57.000 stars trên GitHub và là trợ thủ đắc lực không thể thiếu của bất kỳ lập trình viên nào làm việc với GitHub Actions. Link tham khảo: nektos/act #OpenSourceVN #VNOSS #opensourcevn #vnoss #DevCommunity #Act #GitHubActions #CICD #DevOps #Golang #Docker