GitHub Actions矩阵测试:旧set-output输出方式转新环境变量方式的适配求助
GitHub Actions矩阵测试:旧set-output输出方式转新环境变量方式的适配求助
我太懂这种好不容易调通的配置突然要改写法的烦躁了!GitHub Actions弃用set-output改用环境变量输出的调整确实有点折腾,不过针对你这个矩阵配置的场景,修改起来其实很直接,我帮你把代码转成新的写法:
首先,核心的变化是把原来的::set-output命令换成向$GITHUB_OUTPUT写入键值对,其他逻辑(比如矩阵的引用、环境变量定义)完全不需要改动。下面是修改后的完整Workflow代码:
env: # JSON variables (used in our strategy/matrix) SUPPORTED_PYTHON_VERSIONS: '"python-version":["3.8", "3.9"]' SUPPORTED_OPERATING_SYSTEMS: '"os":["ubuntu-latest", "macos-latest", "windows-latest"]' jobs: # The set-env job translates the json variables to a usable format for the workflow specifications. set-env: runs-on: ubuntu-latest outputs: py-os-matrix: ${{ steps.set-matrix-vars.outputs.py-os-matrix }} # ^ this represents: # matrix: # - os: [ubuntu-latest, ...] # - python-version: [3.7, ...] os-matrix: ${{ steps.set-matrix-vars.outputs.os-matrix }} # ^ this represents: # matrix: # - os: [ubuntu-latest, ...] steps: - id: set-matrix-vars run: | echo "py-os-matrix={${{ env.SUPPORTED_PYTHON_VERSIONS }},${{ env.SUPPORTED_OPERATING_SYSTEMS }}}" >> $GITHUB_OUTPUT echo "os-matrix={${{ env.SUPPORTED_OPERATING_SYSTEMS }}}" >> $GITHUB_OUTPUT test-run: name: test on ${{ matrix.os }} - ${{ matrix.python-version }} needs: set-env strategy: fail-fast: true matrix: ${{ fromJson(needs.set-env.outputs.py-os-matrix) }}
关键改动说明:
- 移除了旧的
::set-output name=xxx::value语法,改用echo "OUTPUT_KEY=OUTPUT_VALUE" >> $GITHUB_OUTPUT的方式 - 输出的引用逻辑(比如
needs.set-env.outputs.py-os-matrix)完全和之前一致,不需要修改 - 你原来定义的环境变量和矩阵生成逻辑都可以原封不动保留,只是输出步骤的写法变了
如果之后遇到更复杂的输出内容(比如包含换行或特殊字符),可以用printf代替echo来避免格式问题,比如:
printf "py-os-matrix=%s" "{${{ env.SUPPORTED_PYTHON_VERSIONS }},${{ env.SUPPORTED_OPERATING_SYSTEMS }}}" >> $GITHUB_OUTPUT
这样改完之后,你的矩阵测试Workflow就能和之前一样正常运行啦!
备注:内容来源于stack exchange,提问作者PWillms
相关产品推荐
相关产品推荐

