我在GitHub操作中从我的存储库中获得feature/*
分支的列表,使用:
echo ::set-output name=branches::$( git branch -r | grep -i "feature/" | sed -e "s/.*origin///" | tr "n" " " )
但是,这个列表是String输出,我需要它在String数组中,这样我就可以使用它来使用Matrix策略调用另一个工作流。
我尝试过很多策略,包括:
- 将表达式包装在CCD_ 2中,这导致语法错误("意外令牌:
(
"( - 使用导致空字符串的环境变量,无论是否将表达式包装在
()
中 - 使用一个局部变量,根据我的分配方式,它会产生不同的结果。在我的开发环境中,我有两个功能分支(feature/quality-3和feature/test feature(
使用:
branches=($( git branch -r | grep -i "feature/" | sed -e "s/.*origin///" | tr "n" " " ))
与:
echo ::set-output name=branches::${branches[@]} # also ${branches[*]}
给出两个值的错误:";意外类型的值"feature/quality-3 feature/test_feature",应为类型:Sequence">
与:
echo ::set-output name=branches::${branches} # or $branches
给出一个值为1的错误:;值"feature/quality-3"的类型意外,应为类型:Sequence">
您必须在作业之间以JSON的形式传递这样的数据:
使用组合:
- toJSON
- 来自JSON以获得您的输出
以下是GitHub的完整示例。
根据Grzegorz Krukowski的说法,我们需要将数组放入JSON,然后将其转换回。由于某些原因,toJSON
不起作用,以下是我所做的:
branches=(master dev prod)
JSON="["
for branch in ${branches[@]}; do
echo $branch
JSONline=""$branch","
# we don't need to iterate on the same branch over and over, so
# onnly include it when it wasn't included
if [[ "$JSON" != *"$JSONline"* ]]; then
JSON="$JSON$JSONline"
fi
done
# Remove last "," and add the closing bracket
if [[ $JSON == *, ]]; then
JSON="${JSON%?}"
fi
JSON="$JSON]"
echo $JSON
echo "branches=$( echo "$JSON" )" >> $GITHUB_OUTPUT