You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions条件表达式写法及多场景逻辑解析

GitHub Actions runs-on 条件逻辑解析

一、原代码逻辑拆解

1. fromJSON函数的作用

GitHub Actions表达式中,直接写带方括号的字符串(比如["ubuntu-latest", "self-hosted"])只会被识别为普通文本,无法当作数组使用。fromJSON的核心作用就是将这个JSON格式的字符串解析成GitHub能识别的数组对象,这样才能通过下标获取对应元素。

2. 下标取值的逻辑原因

在GitHub Actions表达式里,布尔值会被自动转换为数字:true对应1,false对应0。

  • 当github.repository == 'github/docs-internal'判断为真时,对应下标1,取数组的第二个元素self-hosted
  • 当判断为假时,对应下标0,取数组的第一个元素ubuntu-latest

这段代码的逻辑完全等价于更直观的三元表达式写法:

runs-on: ${{ github.repository == 'github/docs-internal' ? 'self-hosted' : 'ubuntu-latest' }}

用数组下标是一种更简洁的语法技巧,但本质依赖布尔值转数字的特性。

二、新增条件的代码修正

你给出的新代码逻辑错误,连续使用两个下标[条件1][条件2]会导致异常:第一个下标取值后得到的是字符串,再用下标访问字符串只会取单个字符,完全达不到多条件分支的效果。

推荐两种正确的写法:

写法1:嵌套三元表达式(直观易懂)

runs-on: ${{ 
  github.repository == 'github/docs-internal' ? 'self-hosted' : 
  github.repository == 'github/docs-external' ? 'windows-latest' : 
  'ubuntu-latest' 
}}

写法2:对象映射(多条件时更清晰)

runs-on: ${{ fromJSON('{
  "github/docs-internal": "self-hosted",
  "github/docs-external": "windows-latest"
}')[github.repository] || 'ubuntu-latest' }}

这种写法将仓库名与对应的runner配置成键值对的JSON对象,通过仓库名直接匹配取值;如果没有匹配到对应的仓库名,就使用默认值ubuntu-latest。


内容的提问来源于stack exchange,提问作者user531300

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:35:31