608 字
3 分鐘

GitHub Actions workflow_dispatch 的 boolean 為何要用 inputs context

手動執行 GitHub Actions 時,workflow_dispatch 的 checkbox 看起來像 boolean;真正容易踩到的地方,是 workflow 裡有兩個地方都能讀到它:inputsgithub.event.inputs。它們值相同,但型別不完全相同。

結論是:**在條件式需要 boolean 時,優先使用 inputs.<name>;不要把 github.event.inputs.<name> 當成同型別的替代品。**GitHub 文件指出前者會保留 boolean,後者會把 input 轉成字串。

定義一個手動部署開關#

name: Deploy
on:
workflow_dispatch:
inputs:
deploy_production:
description: Deploy to production
required: true
type: boolean
default: false
environment:
description: Target environment
required: true
type: choice
options:
- staging
- production
jobs:
deploy:
runs-on: ubuntu-latest
if: ${{ inputs.deploy_production }}
steps:
- run: ./scripts/deploy-production.sh

inputs.deploy_production 在這裡是 boolean,因此未勾選時 job 不會執行。choice 則解析為字串,適合拿來選 environment,但不應被誤當作多個 checkbox 的替代品。

為何字串會讓條件式難讀#

事件 payload 裡也能讀到 github.event.inputs.deploy_production,但它是字串。若一定要使用它,必須明確比較:

if: ${{ github.event.inputs.deploy_production == 'true' }}

這不是說 event context 錯了;它適合用於記錄原始事件或與其他 payload 欄位一起處理。問題出在把字串欄位拿去寫「是否執行」的條件,讀者很難一眼看出型別,也容易在重構時做出不對稱的比較。

把手動輸入和部署保護分開#

checkbox 只是操作者的意圖,不是 production 的授權控制。手動 workflow 還應搭配 environment protection、最小化 GITHUB_TOKEN permissions 與部署前驗證。可把流程拆成兩層:

層級作用
workflow_dispatch.inputs收集本次要跑什麼,例如 environment、dry run、是否允許 production
environment protection / permissions決定這個 job 是否真的可取得 production secret 與寫入權限

例如不要因為有人勾選 deploy_production,就讓同一個 job 自動擁有所有 repository 或雲端權限。把 deployment job 指向受保護的 environment: production,再為它明確給出需要的 scopes。

發布前的最小測試#

對這種 workflow,我會至少手動跑兩次:一次不勾 production 開關,確認 deploy job 被略過;另一次在受控環境勾選,確認 environment approval、secret 與輸出符合預期。若 workflow 檔不在 default branch,GitHub 也不會讓 workflow_dispatch 觸發可用,這是另一個常被誤認成 YAML 錯誤的前置條件。

若你的手動 workflow 同時使用 cache,請別把輸入參數當成 cache 信任來源;可接著看 GitHub Actions cache 的 restore-keys 安全邊界

參考資料:

GitHub Docs:Workflow syntax — workflow_dispatch inputs

GitHub Docs:Manually running a workflow

GitHub Actions workflow_dispatch 的 boolean 為何要用 inputs context
https://laplusda.com/posts/github-actions-workflow-dispatch-boolean-inputs/
作者
Zero
發佈於
2026-07-29
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。