json GitHub Action解析标签以选择矩阵作业的目标

jogvjijk  于 2023-05-02  发布在  Git
关注(0)|答案(1)|浏览(168)

我对GitHub操作非常陌生。试图构建一个工作流程,可以给予我的目标目录列表的基础上,最新的标签,我可以把矩阵作业作进一步处理(地形应用)。
我的labeler.yml有下面的路径,我正在使用actions/labeler@v4在我的主pull_request工作流中添加相应的标签,没有任何问题。

dev_us-west-1: env/dev/us-west-1/*
tst_us-west-2: env/tst/us-west-2/*
prd_eu-west-1: env/prd/eu-west-1/*

第二个工作流程:在这里,我想获取标签,并在此基础上,我想选择各自的目标目录。下面是我未完成的工作流程,现在可以获取JSON数组中的标签。但是,如何从输出中获取标签名称,并循环遍历labeler.yml文件,以获得可用于进一步处理的目录列表?

name: label_target_check
on:
  issue_comment:
  
permissions:
  contents: read
  pull-requests: write
  issues: write
  
jobs:
  help:
    if: ${{ github.event.issue.pull_request && startsWith(github.event.comment.body, 'apply') }}
    runs-on: ubuntu-latest
    steps:
      - name: Fetch PR Branch
        uses: xt0rted/pull-request-comment-branch@v2
        id: comment-branch

      - name: Checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ steps.comment-branch.outputs.head_ref }}

      - name: Generate token
        uses: tibdex/github-app-token@v1
        id: get_installation_token
        with: 
          app_id: ${{ secrets.APP_ID }}
          private_key: ${{ secrets.PRIVATE_KEY }}

      - uses: octokit/request-action@v2.x
        id: get_latest_label
        with:
          route: GET /repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels
        env:
          GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }}

      - run: "echo labels: '${{ steps.get_latest_label.outputs.data }}'"

问题的标签输出:

[
  {
    "id": 5447687240,
    "node_id": "LA_kwDOJME-rhrtrtjnK1lSA",
    "url": "https://api.github.com/repos/MyOrg/MyRepo/labels/dev_us-west-1",
    "name": "dev_us-west-1",
    "color": "ededed",
    "default": false,
    "description": null
  },
  {
    "id": 5898781642,
    "node_id": "LA_kwDOJME-derhehehK1lSg",
    "url": "https://api.github.com/repos/MyOrg/MyRepo/labels/prd_eu-west-1",
    "name": "prd_eu-west-1",
    "color": "ededed",
    "default": false,
    "description": null
  }
]
djp7away

djp7away1#

您可以使用jqyq执行以下操作:

labels=$(jq -r '.[].name' <<< '${{ steps.get_latest_label.outputs.data }}')
for label in $labels; do
  yq ".$label" < labeler.yml
done

使用上面的JSON,输出将是:

env/dev/us-west-1/*
env/prd/eu-west-1/*

您可以根据您的用例进一步处理此问题。

相关问题