如何为GitHub Actions的removeLabel添加存在性判断条件?
解决GitHub Actions多运行器并行删除标签时的报错问题
问题背景
使用actions/importer-issue-ops模板并通过矩阵策略配置ubuntu-latest与selfhosted-runner多运行器并行执行时,清理步骤中调用removeLabel操作会出现报错:当其中一个运行器已删除目标标签后,另一个运行器执行删除操作时会触发Label does not exist的HttpError。
解决方案
方案1:先检查标签存在性再执行删除
通过先获取当前Issue的标签列表,判断目标标签是否存在,仅当存在时才执行删除操作:
- uses: actions/github-script@v6 if: always() with: script: | // 获取Issue详情及标签列表 const issueResponse = await github.rest.issues.get({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number }); // 检查目标标签是否存在 const targetLabel = 'actions-importer-running'; const labelExists = issueResponse.data.labels.some(label => label.name === targetLabel); if (labelExists) { await github.rest.issues.removeLabel({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, name: targetLabel }); }
方案2:捕获并忽略标签不存在的错误
如果不需要严格的存在性判断,仅需要确保最终标签被移除(即使标签已不存在),可以通过try-catch捕获特定错误并忽略:
- uses: actions/github-script@v6 if: always() with: script: | const targetLabel = 'actions-importer-running'; try { await github.rest.issues.removeLabel({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, name: targetLabel }); } catch (error) { // 仅当错误不属于"标签不存在"时才抛出异常 if (!error.message.includes('Label does not exist')) { throw error; } }
方案说明
- 方案1通过提前检查标签存在性,避免发起无效的删除请求,适合需要严格控制请求行为的场景;
- 方案2通过容错处理简化代码,适合不关心标签初始状态、仅需确保最终无目标标签的场景。
内容的提问来源于stack exchange,提问作者Naresh
相关产品推荐
相关产品推荐

