【问题标题】:Is there a way I can validate YAML files on Github?有没有办法可以在 Github 上验证 YAML 文件?
【发布时间】:2022-10-06 06:59:08
【问题描述】:

我目前正在开发 Ruby on Rails 应用程序。我有一个目录,里面装满了不时被编辑的不同 Yaml 文件。任何时候开发人员不小心将无效的 Yaml 语法合并到主分支。整个应用程序中断。

无论如何,我是否可以在 Github 上设置一个 Yaml 验证器来检查我的仓库中特定目录中的 Yaml 文件的有效性,并在此 Yaml 验证器检查失败时阻止 PR 合并到 Main 中?

标签: ruby-on-rails git validation github yaml


【解决方案1】:

您可以在为每个拉取请求运行的 GitHub Action 中使用 YAML linter。根据docsyamllint 已经安装在基于 Ubuntu 的 GitHub 运行器上。

这是一个基本的工作流程:

name: Validate-YAML

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  validate-yaml:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Validate YAML file
        run: yamllint abc.yml

【讨论】:

  • 非常感谢@Matt。假设我想定位回购目录中名为的目录中的所有 yaml 文件商店我可以将run 设为run: yamllint stores/.run: yamllint stores/*.yaml
  • @samlexxy documentation 展示了如何扫描整个目录以及如何配置要考虑或排除的文件。
【解决方案2】:

不使用 Github Hooks 的更通用的方法.

我目前使用的一种选择是overcommit。它有很多钩子可以在git commit(等等)之前执行。

对于您的情况,这应该有效。

YamlSyntax:
   enabled: true
   description: 'Check YAML syntax'
   required_library: 'yaml'
   include:
     - '**/*.yaml'
     - '**/*.yml'

以下是这些钩子的列表:https://github.com/sds/overcommit/blob/master/config/default.yml

您可以添加 rubocop、冰糕等。这只有在整个团队都安装了它的情况下才有效,否则那些拥有它的人很可能需要修复其他团队成员遗漏的东西。

【讨论】:

  • 我期待看到仅限 github 的方法答案。这是一种更通用的提交钩子方法。
  • 你说的对。让我更新答案。
【解决方案3】:

如果您使用 VSCode 进行开发,您可以获得 Yaml 扩展: https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml

它验证 YAML 语法,突出显示任何错误并提供自动完成功能。

【讨论】:

    【解决方案4】:

    我们用于 yaml 验证的一种方法是将 Yaml 转换为 Hash 并在该哈希 https://dry-rb.org/gems/dry-schema/ 上应用干模式验证

    【讨论】:

      【解决方案5】:

      我建议使用 JSON Schema 来验证 YAML 文件的内容。 (像 yamllint 这样的 linter 检查 YAML 语法是否正确并遵循最佳实践——而不是数据是否符合预期)。

      现在有许多不同语言的工具可以使用 JSON Schema 验证 YAML 文件的内容。

      我过去用过的两个例子:

      还有一些生成 JSON 模式的工具,或者如果你的 YAML 很简单,你可以手动编写它。

      使用这种方法,您可以确保 RP 中的 YAML 有效并且数据以正确的格式写入。作为奖励,您可以使用基于 YAML 语言服务器的 YAML 扩展直接在 IDE 中向开发人员提供语法突出显示和验证。

      我写了一篇博文,详细描述了所有内容。 YAML Data Validation

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-20
        相关资源
        最近更新 更多