我正试图将一个动态获取的数据数组从一个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
,因此输出将为一行。