如何在GitHub Actions作业中提取PR标签变量供后续使用
GitHub Actions 提取PR标签参数并传递给脚本
可行性说明
完全可行。GitHub Actions支持通过Shell脚本处理PR标签内容,提取指定格式中的参数并设置为变量,供后续步骤的脚本调用。
具体实现步骤
1. 修正作业触发条件
原条件无法正确匹配数组中的标签,需改用any函数判断是否存在符合格式的标签:
if: ${{ any(github.event.pull_request.labels.*.name, startsWith(., 'I18n ')) }}
注:此处大小写敏感,若标签为小写i18n,需同步修改匹配字符串。
2. 提取标签参数并设置变量
在提取步骤中,用Shell命令过滤标签、切割参数,并将结果写入GitHub Actions的输出变量:
- name: extract the parameters from the matching label id: extract-i18n-params run: | # 过滤出符合"I18n <product-id> <lang-tag>"格式的标签 I18N_LABEL=$(echo "${{ github.event.pull_request.labels.*.name }}" | grep -o "I18n [^ ]* [^ ]*") # 切割标签内容,分别提取两个参数 PRODUCT_ID=$(echo "$I18N_LABEL" | awk '{print $2}') LANG_TAG=$(echo "$I18N_LABEL" | awk '{print $3}') # 将参数写入输出变量,供后续步骤调用 echo "productID=$PRODUCT_ID" >> $GITHUB_OUTPUT echo "langTag=$LANG_TAG" >> $GITHUB_OUTPUT
若容器环境缺少grep或awk,需先安装对应工具(如Ubuntu容器执行apt-get install -y grep awk)。
3. 在脚本步骤中使用参数
通过步骤ID引用输出变量,将参数传递给目标脚本:
- name: Check i18n tokens run: ./my-script-here.sh ${{ steps.extract-i18n-params.outputs.productID }} ${{ steps.extract-i18n-params.outputs.langTag }}
完整配置示例
jobs: checkI18NTokensJob: if: ${{ any(github.event.pull_request.labels.*.name, startsWith(., 'I18n ')) }} container: xxx env: FORCE_OUTPUT_MISSING_TRANSLATION_TO_FILE: true steps: - name: checkout uses: actions/checkout@v3 - name: Install dependencies run: yarn - name: extract the parameters from the matching label id: extract-i18n-params run: | I18N_LABEL=$(echo "${{ github.event.pull_request.labels.*.name }}" | grep -o "I18n [^ ]* [^ ]*") PRODUCT_ID=$(echo "$I18N_LABEL" | awk '{print $2}') LANG_TAG=$(echo "$I18N_LABEL" | awk '{print $3}') echo "productID=$PRODUCT_ID" >> $GITHUB_OUTPUT echo "langTag=$LANG_TAG" >> $GITHUB_OUTPUT - name: Check i18n tokens run: ./my-script-here.sh ${{ steps.extract-i18n-params.outputs.productID }} ${{ steps.extract-i18n-params.outputs.langTag }}
注意事项
- 确保PR标签严格遵循
I18n <product-id> <lang-tag>格式,仅包含三个部分,否则参数提取会出错 - 若存在多个符合格式的标签,脚本会提取第一个匹配的标签内容
内容的提问来源于stack exchange,提问作者Bertuz
相关产品推荐
相关产品推荐

