我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?
Posted
技术标签:
【中文标题】我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?【英文标题】:What's wrong with my YAML syntax for an embedded shell script in my GitHub action?我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有什么问题? 【发布时间】:2021-12-17 18:15:26 【问题描述】:在我的 GitHub 操作 workflow 中,我有以下部分(在作业/构建/步骤下):
- name: Install/Select GCC and G++
run: |
sudo apt-get install -y gcc-$ matrix.gcc g++-$ matrix.gcc
echo "CC=/usr/bin/gcc-$ matrix.gcc " >> $GITHUB_ENV
echo "CXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
echo "CUDAHOSTCXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
GitHub 运行失败,发出:
工作流文件无效
第 82 行的 yaml 语法有错误
现在,我从另一个存储库中提取了这个same code 应该可以工作的存储库……这是怎么回事?
【问题讨论】:
这似乎与缩进有关,看看第 76 行和第 83 行-
符号前有多少空格。
@GuiFalourd:哦,缩进很重要?这不仅仅是“任意数量的空格”吗?我认为 YAML didn't care much 关于缩进。
在这种情况下,我认为这很重要,因为工作、步骤和工作流变量有很多级别。例如,在您的情况下,第 83 行的步骤与作业变量字段处于相同的缩进级别,并且由于它不希望该字段存在,因此它返回错误。
@einpoklum 一定很喜欢那篇文章复制my answer 而不尊重CC-BY-SA。没有提到的是,当然,同一个集合节点的键/项必须在相同的缩进级别。只是说,对那个压痕层的深度没有要求,只要它比周围层至少缩进一个空间。这就是你断章取义时得到的结果。
【参考方案1】:
以下是相关行,从68开始,有些行略过:
steps:
- uses: actions/checkout@v2
- name: Install CUDA
# .. snip ..
- name: Install/Select GCC and G++
run: |
sudo apt-get install -y gcc-$ matrix.gcc g++-$ matrix.gcc
echo "CC=/usr/bin/gcc-$ matrix.gcc " >> $GITHUB_ENV
echo "CXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
echo "CUDAHOSTCXX=/usr/bin/g++-$ matrix.gcc " >> $GITHUB_ENV
- name: CMake configure
steps:
是 YAML 映射的一部分。下一行开始一个 YAML 序列,它缩进了两个空格。因此,该序列在第 82 行以- name: CMake configure
结束。我不知道为什么 GitHub 将其显示为第 83 行;如果您将其复制粘贴到编辑器,则该空行不存在。可能是行尾问题,但我懒得启动十六进制编辑器来找出答案。
无论如何,在第 82 行,YAML 解析器结束了映射键 steps
的值,因此期望另一个映射键或映射结束。但是,它会找到一个序列项。那是你的错误。
您似乎打算将以下序列项作为steps:
的一部分。如果是这样,请将它们缩进到与前面的项目相同的级别。
【讨论】:
以上是关于我的 GitHub 操作中嵌入式 shell 脚本的 YAML 语法有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章