如何在GitHub Action中将PR assignees正确设置为环境变量
报错原因
github.event.pull_request.assignees 是一个数组类型(YAML中称为序列)的变量,存储了所有assignee的完整信息对象,而GitHub Actions的env字段只接受字符串类型的赋值,直接将数组传入会触发YAML语法校验失败,就是你看到的A sequence was not expected报错。
修复方案
你可以根据自己的需求选择以下两种方案之一:
方案1:仅提取assignee的用户名(推荐,适合你的需求场景)
使用GitHub Actions内置的join过滤器和对象属性通配符,直接提取所有assignee的登录名,拼接为逗号分隔的字符串赋值给环境变量:
将你配置中env段的assignees行修改为:
assignees: ${{ join(github.event.pull_request.assignees.*.login, ',') }}
对应的Python代码中读取方式:
import os # 读取环境变量并拆分得到assignee列表 assignee_list = os.getenv('assignees', '').split(',') # 过滤空值,兼容无assignee的情况 assignee_list = [item.strip() for item in assignee_list if item.strip()]
方案2:获取完整的assignee信息
如果你需要用到assignee的更多字段(比如用户ID、头像地址等),可以用toJSON过滤器将数组转为JSON字符串赋值:
assignees: ${{ toJSON(github.event.pull_request.assignees) }}
对应的Python代码中读取方式:
import os import json assignee_list = json.loads(os.getenv('assignees', '[]'))
额外注意
你当前配置中if判断里的&&是HTML转义后的内容,实际YAML配置中要改成原生的&&,否则判断逻辑会失效。
内容的提问来源于stack exchange,提问作者Gvinfinity
相关产品推荐
相关产品推荐

