GitHub Actions:「not allowed to deploy to github-pages due to environment protection rules」
デプロイのジョブは始まってもいません。github-pages の環境は、そこへデプロイしてよいブランチとタグの一覧を持っていて、この実行が始まった ref はその一覧にありません。引用符の中の名前がその ref です。環境の設定でその ref のルールを足すか、一覧がもう許している ref からデプロイします。
見え方
Branch "main" is not allowed to deploy to github-pages due to environment protection rules. The deployment was rejected or didn't satisfy other protection rules.
- ジョブは最初のステップの前に失敗するので、ログは無く、実行の画面にこの2行が出るだけです。rossio では「Build Docs」は通り、「Deploy to GitHub Pages」はランナーのステップが1つも動く前に失敗しました(#69)。再実行しても、一覧が変わるまでは同じように失敗します。
Branch "main"の代わりにTag "v0.7.1"なら、実行はタグから始まっています。タグの push か、リリースです。releaseのイベントではGITHUB_REFがタグ(refs/tags/<tag_name>)になります。
環境が許しているものを見る
一覧は Settings の Environments、github-pages、Deployment branches and tags にあります。変えられるのはリポジトリの管理者だけです。リポジトリを読める人なら誰でも表示できます:
gh api repos/OWNER/REPO/environments/github-pages --jq .deployment_branch_policy gh api repos/OWNER/REPO/environments/github-pages/deployment-branch-policies \ --jq '.branch_policies[] | "\(.type) \(.name)"'
{"custom_branch_policies":true,"protected_branches":false}
branch main
custom_branch_policies は設定の Selected branches and tags で、その下の行がそのルールです。protected_branches は Protected branches only です(後で説明します)。
ルールは、誰も足していないのに入っていることがあります。GitHub のドキュメントには「If the environment is created from running implicit page builds (for example, from a branch or folder source), the source branch will be added as a protection rule to the environment.」(ブランチやフォルダーを公開元にした暗黙の Pages のビルドで環境が作られたときは、公開元のブランチが保護のルールとして環境に足される)とあります。つまり、前にブランチから公開していたリポジトリは、GitHub Actions に移ったあともそのブランチをルールに持ったままです。scatter_smooth の環境は main と gh-pages を許していて、タグ v0.2.2 からのデプロイは断られました(#30)。
1. タグやリリースからデプロイする
MGUK-KERS-Simulator は、v* のタグが push されたときに Pages をデプロイします。2026年11月1日のタグの実行は5回とも断られ、そのたびに main での手動の実行でサイトを出していました(#16)。workshop-template から作ったサイトも、最初のリリースで同じ目にあいました(Tag "v0.1.0"・#167)。
- タグを許す:Add deployment branch or tag rule で Ref type を Tag にし、
v*を入れます。ブランチのルールは残します。ブランチのルールとタグのルールは別なので、ブランチのルールv*ではタグは許されません。 *は/に当たりません。docs/v1のようなタグにはdocs/*が要り、release/*はrelease/1.0/rcを含みません。- あるいはブランチからデプロイします。サイトが
mainに合わせて変わればよいなら、ワークフローをmainへの push で動かし、workflow_dispatchも残します。
2. もう使っていないブランチのルール
open-questions では、夜間のデプロイは main で動くのに、環境は master しか許していませんでした(#25)。一覧にもうデプロイに使っていないブランチがあるなら、使っているブランチのルールを足し、古いほうを消します。
3. ほかのブランチからデプロイする
discipline は develop からデプロイしていて、2026年10月4日からはそのデプロイがすべて断られました(#494)。ほかのブランチで手動で実行しても(Run workflow の Use workflow from)同じように断られます。デプロイのたびにサイト全体が入れ替わるので、ワークフローを動かすブランチを全部ではなく、サイトの元にする1本だけを許します。何本も許すと、サイトは最後にデプロイしたものになります。
「Protected branches only」
この設定では、ブランチ保護のルールがかかっているブランチがデプロイできます。リポジトリのどのブランチにもルールが無ければ、すべてのブランチがデプロイできます。ドキュメントはさらに、保護されたブランチと同じ名前のタグで始まった実行はデプロイできないと書いています。タグからデプロイするなら、Selected branches and tags にして、1のようにタグのルールを足します。
見分け方
- デプロイのジョブに Waiting と Review deployments のボタンが出ている:環境がレビュアーの承認を求めています。誰かが却下するまでは何も断られていません。
- 「Get Pages site failed」や「Ensure GitHub Pages has been enabled」:ジョブは動き、Pages が有効になっていません(「Get Pages site failed」)。
Failed to create deployment (status: 403):ジョブは動き、pages: writeがありません(「Resource not accessible by integration」)。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub・GitHub Actions・GitHub Pages は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Get Pages site failed」 · 「Resource not accessible by integration」 · 「Invalid workflow file」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English