我在 GitHub Actions 中有两份工作。一种是运行 Python 脚本来获取列表 [[file1, 1.0], [file2, 3.0]],另一种是将这个列表放入 GitHub Actions 矩阵中。我从 Python 脚本中收到一个无法放入矩阵中的字符串。我该如何解决这个问题?
on:
pull_request:
branches: [master, develop]
types: [closed]
jobs:
compute-version:
runs-on: ubuntu-latest
outputs:
list: ${{ steps.semver.outputs.list }}
steps:
- name: Run Computer Version Script
id: semver
run: |
python ./.github/bump-version.py $GITHUB_REF
res=$?
echo "::set-output name=list::$res"
update-yaml:
needs: compute-version
runs-on: ubuntu-latest
strategy:
matrix:
node: ${{needs.compute-version.outputs.bump_list}}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Update Version on Yaml File
uses: fjogeleit/yaml-update-action@master
with:
valueFile: ${{ matrix.node['file'] }}
propertyPath: info.version
value: ${{ matrix.node['version'] }}
commitChange: true
updateFile: true
targetBranch: ${{needs.compute-version.outputs.target_branch}}
masterBranchName: master
createPR: false
branch: ${{needs.compute-version.outputs.target_branch}}
message: Bump version to ${{ matrix.node['version'] }} in ${{ matrix.node['file'] }}
Run Code Online (Sandbox Code Playgroud)
目前,操作输入仅支持字符串键和字符串值。但是,您可以使用 JSON 数组,然后使用fromJSON表达式 ( https://docs.github.com/en/actions/learn-github-actions/expressions#fromjson ) 对其进行转换。
这是将数组传递到可重用工作流程的示例。
GitHub 行动
name: CodeQL
on:
workflow_dispatch:
jobs:
test:
uses: GTRekter/Training/.github/workflows/ReusableWorkflow_CodeQL.yml@main
with:
languageJson: '["csharp", "javascript"]'
Run Code Online (Sandbox Code Playgroud)
可重复使用的工作流程
name: CodeQL static test
on:
workflow_call:
inputs:
languageJson:
description: 'Programming language selection [go, javascript, csharp, python, cpp, java]'
required: true
type: string
jobs:
setup:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.setVariables.outputs.matrix }}
steps:
- id: setVariables
run: |
echo "::set-output name=matrix::$input"
env:
input: ${{ inputs.languageJson }}
codeql:
runs-on: ubuntu-latest
needs: Setup
permissions:
security-events: write
strategy:
fail-fast: false
matrix:
language: ${{fromJson(needs.setup.outputs.matrix)}}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql/codeql-config.yml
- name: Autobuild
if: matrix.language == 'cpp' || matrix.language == 'csharp'
uses: github/codeql-action/autobuild@v2
- name: Build Java
if: matrix.language == 'java'
run: |
make bootstrap
make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
Run Code Online (Sandbox Code Playgroud)
结果:
使用toJSONandfromJSON是在 GitHub Actions 中传递变量(如数组)的唯一方法。
对于您的情况,这里有一个很好的示例,说明如何构建您正在寻找的内容。
更多详细信息请参见此处的GitHub 博客文章。
name: build
on: push
jobs:
job1:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
run: echo "::set-output name=matrix::{\"include\":[{\"project\":\"foo\",\"config\":\"Debug\"},{\"project\":\"bar\",\"config\":\"Release\"}]}"
job2:
needs: job1
runs-on: ubuntu-latest
strategy:
matrix: ${{fromJSON(needs.job1.outputs.matrix)}}
steps:
- run: build
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14384 次 |
| 最近记录: |