代码之家  ›  专栏  ›  技术社区  ›  Rio

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

  •  0
  • Rio  · 技术社区  · 2 年前

    我对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数组中获取标签。但是,如何从输出中获取标签名称并循环通过 标签.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
      }
    ]
    
    0 回复  |  直到 2 年前
        1
  •  0
  •   Azeem Rob Hyndman    2 年前

    你可以用做这样的事情 jq yq 以下为:

    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/*
    

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