GitHub操作:将JSON数据传递给另一个作业



我正试图将一个动态获取的数据数组从一个GitHub Action作业传递到实际的构建作业。此数组将用作矩阵的一部分,用于构建多个版本。但是,在计算存储数组的bash变量时,我遇到了一个问题。

jobs:
  setup:
    runs-on: ubuntu-latest
    outputs:
      versions: ${{ steps.matrix.outputs.value }}
    steps:
      - id: matrix
        run: |
          sudo apt-get install -y jq && 
          MAINNET=$(curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}' | jq '.result["solana-core"]') && 
          TESTNET=$(curl https://api.testnet.solana.com -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}' | jq '.result["solana-core"]') && 
          VERSIONS=($MAINNET $TESTNET) && 
          echo "${VERSIONS[@]}" && 
          VERSION_JSON=$(echo "${VERSIONS[@]}" | jq -s) && 
          echo $VERSION_JSON && 
          echo '::set-output name=value::$VERSION_JSON'
        shell: bash
      - id: debug
        run: |
          echo "Result: ${{ steps.matrix.outputs.value }}"
  changes:
    needs: setup
    runs-on: ubuntu-latest
    # Set job outputs to values from filter step
    outputs:
      core: ${{ steps.filter.outputs.core }}
      package: ${{ steps.filter.outputs.package }}
    strategy:
      matrix:
        TEST: [buy, cancel, create_auction_house, delegate, deposit, execute_sale, sell, update_auction_house, withdraw_from_fee, withdraw_from_treasury, withdraw]
        SOLANA_VERSION: ${{fromJson(needs.setup.outputs.versions)}}
    steps:
      - uses: actions/checkout@v2
      # For pull requests it's not necessary to checkout the code
      - uses: dorny/paths-filter@v2
        id: filter
        with:
          filters: |
            core:
              - 'core/**'
            package:
              - 'auction-house/**'
      - name: debug
        id: debug
        working-directory: ./auction-house/program
        run: echo ${{ needs.setup.outputs.versions }}

在上面的setup作业中,这两个版本被评估为bash数组(在VERSIONS中(,并转换为JSON数组以传递给下一个作业(在VERSION_JSON中(。matrix步骤中的最后一个echo导致打印[ "1.10.31", "1.11.1" ],但debug步骤打印出以下内容:

Run echo "Result: "$VERSION_JSON""
  echo "Result: "$VERSION_JSON""
  shell: /usr/bin/bash -e {0}
  env:
    CARGO_TERM_COLOR: always
    RUST_TOOLCHAIN: stable
Result: 

changes作业还会导致一个错误:

评估作业"更改"的"策略"时出错
.github/workflows/program-auction-hose.yml(行:44,列:25(:意外类型的值"$VERSION_JSON",预期类型:Sequence。

看起来$VERSION_JSON变量实际上没有得到正确的评估,但我不知道评估哪里出了问题。

  • 对于echo '::set-output name=value::$VERSION_JSON',您需要使用双引号,否则bash将不会展开$VERSION_JSON

  • set-output对多行数据不满意。对于您的情况,您可以使用jq -s -c,因此输出将为一行。

最新更新