タグ
#GitHub Actions
GitHub Actionsに関する記事を公開しています。
GitHub Actions の lockfile は composite action の中の action まで記録する
uses を SHA で固定しても composite action が中でタグで呼ぶ action は固定されず、GitHub Actions の lockfile はそれも記録します。そうした action が無ければ、記録されるのは SHA で固定したのと同じコミットです。
Dependabot の PR の差分では乗っ取りを見抜けない
Dependabot の PR は CI が通れば merge してよいのか。乗っ取られた版は差分に出ないので、新しすぎる版を入れない、install で依存のコードを動かさない、Actions を SHA で固定する、の 3つで守り、major だけを読んでいます。
AI エージェントの PR で GitHub Actions の無料枠が尽きた
GitHub Actions は Free で月2,000分。支払い方法が無ければ使い切った時点で停止します。PR が増えた月は残り83分まで減り、止まればデプロイもバックアップも止まる計算でした。PR を減らすのは本末転倒なので月4ドルで課金し、CI のジョブを束ねて分数を減らしました。
GitHub Actions の OIDC で AWS の鍵を手元から無くした
Claude Code の Docker Sandbox に AWS の認証情報を渡すスクリプトを 3 本書きましたが、docker sandbox exec が別のコンテナに書き込んでいて一度も機能していませんでした。渡すこと自体をやめ、Terraform の bootstrap 層(Actions が引き受ける IAM ロールと OIDC)まで GitHub Actions の workflow_dispatch で plan / apply する構成にしました。ロールが自分自身を書き換える権限の線引きと、信頼ポリシーのリポジトリ名の既定値が古いままで自分を締め出しかけた話も残します。
changesets を AI エージェントに書かせると変更履歴が読める物になる
8 サイトのモノレポの変更をほぼ AI エージェントの PR で回していると、git log では「あのサイトはいつ何が変わったか」を追えなくなりました。changesets を入れ、PR を作るその瞬間にエージェントへ変更記録を書かせ、Release PR の merge でサイトごとの CHANGELOG に集約する形にしました。誤った記録を次の記録が訂正して並ぶ実例と、別リポジトリで踏んだ罠(タグの系統が 2 つになる、changeset status は commit 済みしか数えない、Release PR の merge がデプロイになる)を書きます。
Bot Fight Mode を無料プランで使うと GitHub Actions が 403 になる
Cloudflare の Bot Fight Mode を有効にしていた 2 サイトだけ、GitHub Actions からの死活チェックが 403 になりました。切って再実行すると全サイトが 200 になりました。無料プランの Bot Fight Mode は Ruleset Engine の外で動くため WAF カスタムルールの Skip / Allow が適用されず、例外を作るには Pro の Super Bot Fight Mode が要ります。監視・CLI・Webhook 受信・確認の curl など自分の非ブラウザ通信が全部判定の対象になる一方、守りたい Workers の起動枠(34%)も D1(30%)も圧迫されていなかったので、8 月に再検討して入れないと決めた経緯と、再訪の条件をまとめます。
Cloudflare Workers の Cron で曜日 0 は拒否され、7 は土曜になる
監視用の Worker に週 1 回の Cron を「30 23 * * 0」で入れたら、wrangler deploy がスクリプトのアップロードだけ成功して Cron の登録に失敗しました(invalid cron string)。0 を 7 に変えて登録は通りましたが、Cloudflare の曜日は 1 = 日曜〜7 = 土曜で、7 は土曜でした。公式ドキュメントの 1 行で気づき、SUN に直した経緯と、デプロイ後に schedules を確認する手順、D1 の読み取りを「1 起動あたりの行数」で 3 時間ごとに見張る Worker の設計をまとめます。
playwright install --with-deps で CI が 15 分止まる原因
GitHub Actions の playwright install --with-deps が apt ミラーの低速に当たり、数 MB のフォント 2 つの取得だけで約 15 分かかってジョブが時間切れになりました。結果表示が failure ではなく cancelled になるのも紛らわしい点です。Playwright 公式コンテナへ移行してインストールステップ自体を消した手順と、イメージタグの一致や HOME 設定などの注意点をまとめました。
Google Analytics を入れずに Cloudflare でブログを監視する
ブログ運用の一次監視に欲しいのは「配信が壊れていないか」で、その情報は GA4(gtag.js)を入れなくても取れます。GA4 のクライアント計測とは別レイヤーの Cloudflare エッジ計測(GraphQL Analytics API の httpRequestsAdaptiveGroups)を GitHub Actions で定期実行し、死活チェック・週次レポート・Issue 自動起票までを組む監視設計を、GA との役割分担つきでまとめます。