summaryrefslogtreecommitdiffstats
path: root/docs/integration.rst
blob: e8056676c81aebe15759cb948d3525b4d6166403 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Integration with other software
===============================

Integration with pre-commit
---------------------------

You can integrate yamllint in the `pre-commit <https://pre-commit.com/>`_ tool.
Here is an example, to add in your .pre-commit-config.yaml

.. code:: yaml

 ---
 # Update the rev variable with the release version that you want, from the yamllint repo
 # You can pass your custom .yamllint with args attribute.
 repos:
   - repo: https://github.com/adrienverge/yamllint.git
     rev: v1.29.0
     hooks:
       - id: yamllint
         args: [--strict, -c=/path/to/.yamllint]


Integration with GitHub Actions
-------------------------------

yamllint auto-detects when it's running inside of `GitHub
Actions <https://github.com/features/actions>`_ and automatically uses the
suited output format to decorate code with linting errors. You can also force
the GitHub Actions output with ``yamllint --format github``.

A minimal example workflow using GitHub Actions:

.. code:: yaml

 ---
 on: push  # yamllint disable-line rule:truthy

 jobs:
   lint:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3

       - name: Install yamllint
         run: pip install yamllint

       - name: Lint YAML files
         run: yamllint .

Integration with GitLab
-----------------------

You can use the following GitLab CI/CD stage to run yamllint and get the
results as a `Code quality (Code Climate)
<https://docs.gitlab.com/ee/ci/testing/code_quality.html>` report.

.. code:: yaml

 ---
 lint:
   stage: lint
   script:
     - pip install yamllint
     - mkdir reports
     - >
       yamllint -f parsable . | tee >(awk '
       BEGIN {FS = ":"; ORS="\n"; first=1}
       {
           gsub(/^[ \t]+|[ \t]+$|"/, "", $4);
           match($4, /^\[(warning|error)\](.*)\((.*)\)$/, a);
           sev = (a[1] == "error" ? "major" : "minor");
           if (first) {
               first=0;
               printf("[");
           } else {
               printf(",");
           }
           printf("{\"location\":{\"path\":\"%s\",\"lines\":{\"begin\":%s",\
                  "\"end\":%s}},\"severity\":\"%s\",\"check_name\":\"%s\","\
                  "\"categories\":[\"Style\"],\"type\":\"issue\","\
                  "\"description\":\"%s\"}", $1, $2, $3, sev, a[3], a[2]);
       }
       END { if (!first) printf("]\n"); }' > reports/codequality.json)
   artifacts:
     when: always
     paths:
       - reports
     expire_in: 1 week
     reports:
       codequality: reports/codequality.json

Integration with Arcanist
-------------------------

You can configure yamllint to run on ``arc lint``. Here is an example
``.arclint`` file that makes use of this configuration.

.. code:: json

 {
   "linters": {
     "yamllint": {
       "type": "script-and-regex",
       "script-and-regex.script": "yamllint",
       "script-and-regex.regex": "/^(?P<line>\\d+):(?P<offset>\\d+) +(?P<severity>warning|error) +(?P<message>.*) +\\((?P<name>.*)\\)$/m",
       "include": "(\\.(yml|yaml)$)"
     }
   }
 }