如何使用 yq 验证 yaml?

Put*_*nik 3 validation yq

我知道至少有两个yq,我正在使用这个:https://github.com/mikefarah/yq。根据文档,我可以验证yaml这样的文件:

yq -v file.yaml
Run Code Online (Sandbox Code Playgroud)

问题:它输出大量调试信息,但是根据文档,它应该输出“如果[文件]有效,则不输出任何内容,否则它将打印错误”。据我所知,该文件看起来有效。

如果文件有效,我应该如何避免输出?

文件:

name: Copywrite

on:
  push:
    tags:
      - v*
    branches:
      - main
  pull_request:
  workflow_dispatch:

jobs:
  copywrite:
    name: Run Header Copyright
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@93ea575cc8 # v3.1.0

      - name: Install Copywrite
        id: install
        uses: hashicorp/setup-copywrite@v1.0.0

      - name: Output Installed Copywrite Version
        run: echo "Installed Copywrite CLI ${{steps.install.outputs.version}}"

      - name: Run Copywrite Header Compliance
        run: copywrite headers --plan
Run Code Online (Sandbox Code Playgroud)

输出:

yq -v ./file.yml
16:52:54 processArgs [DEBU] processed args: [./file.yml]
16:52:54 maybeFile [DEBU] checking './file.yml' is a file
16:52:54 maybeFile [DEBU] error: <nil>, dir: false
16:52:54 maybeFile [DEBU] result: true
16:52:54 FormatFromFilename [DEBU] checking file extension './file.yml' for auto format detection
16:52:54 FormatFromFilename [DEBU] detected format 'yml'
16:52:54 initCommand [DEBU] Using input format yml
16:52:54 initCommand [DEBU] Using output format yml
16:52:54 ParseExpression [DEBU] Parsing expression: []
16:52:54 ConvertToPostfix [DEBU] postfix processing currentToken )
16:52:54 ConvertToPostfix [DEBU] opstackLen: 0
16:52:54 ConvertToPostfix [DEBU] PostFix Result:
16:52:54 GetMatchingNodes [DEBU] getMatchingNodes - nothing to do
16:52:54 PrintResults [DEBU] PrintResults for 1 matches
16:52:54 PrintResults [DEBU] -- print sep logic: p.firstTimePrinting: false, previousDocIndex: 0, mappedDoc.Document: 0
16:52:54 PrintResults [DEBU] D0, P[], (doc)::name: Copywrite
on:
    push:
        tags:
            - v*
        branches:
            - main
    pull_request:
    workflow_dispatch:
jobs:
    copywrite:
        name: Run Header Copyright
        runs-on: ubuntu-latest
        steps:
            - name: Checkout
              uses: actions/checkout@93ea575cc8 # v3.1.0
            - name: Install Copywrite
              id: install
              uses: hashicorp/setup-copywrite@v1.0.0
            - name: Output Installed Copywrite Version
              run: echo "Installed Copywrite CLI ${{steps.install.outputs.version}}"
            - name: Run Copywrite Header Compliance
              run: copywrite headers --plan
name: Copywrite
on:
  push:
    tags:
      - v*
    branches:
      - main
  pull_request:
  workflow_dispatch:
jobs:
  copywrite:
    name: Run Header Copyright
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@93ea575cc8 # v3.1.0
      - name: Install Copywrite
        id: install
        uses: hashicorp/setup-copywrite@v1.0.0
      - name: Output Installed Copywrite Version
        run: echo "Installed Copywrite CLI ${{steps.install.outputs.version}}"
      - name: Run Copywrite Header Compliance
        run: copywrite headers --plan
16:52:54 PrintResults [DEBU] done printing results
Run Code Online (Sandbox Code Playgroud)

pmf*_*pmf 8

首先,文档使用vas 命令(无破折号),您尝试将其用作 flag -v。其次,您正在引用版本 3.x 的文档,但您的输出表明您正在使用版本 4.x。

在 3.x 版本中,以下内容有效,如果文件有效,则不会给出任何输出:

yq v file.yaml
# or
yq validate file.yaml
Run Code Online (Sandbox Code Playgroud)

在 4.x 版本中(其中-v--verbose代表详细模式),您可以简单地将文件输入 yq (默认为幂等过滤器.),并抑制 stdout。可能的错误将出现在 stderr 上。

yq file.yaml >/dev/null
Run Code Online (Sandbox Code Playgroud)