-
Notifications
You must be signed in to change notification settings - Fork 812
89 lines (82 loc) · 3.86 KB
/
lint.yml
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
# Copyright The InstructLab Authors, 2024
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Lint
on:
workflow_dispatch:
push:
branches:
- main
paths:
- compositional_skills/**/qna.yaml
- knowledge/**/qna.yaml
pull_request:
branches:
- main
paths:
- compositional_skills/**/*.yaml
- compositional_skills/**/*.yml
- knowledge/**/*.yaml
- knowledge/**/*.yml
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Find changed skills files"
id: changed-files
uses: tj-actions/changed-files@v42
with:
files: |
compositional_skills/**/*.yaml
compositional_skills/**/*.yml
knowledge/**/*.yaml
knowledge/**/*.yml
- name: "Run YAML lint"
if: steps.changed-files.outputs.any_changed == 'true'
run: |
yamllint -d "{extends: relaxed, rules: {line-length: {max: 120}}}" ${{ steps.changed-files.outputs.all_changed_files }}
# use yq to verify YAML fields exist and generate a matchable log message with line number and error severity
# the added matcher .github/workflows/matchers/lint.json will parse those log messages to generate annotation
# the generated annotations are then applied in the GH PR Changed Files view under the changed line of code
- name: "Check skills file contents"
if: steps.changed-files.outputs.any_changed == 'true'
env:
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
echo "::add-matcher::.github/workflows/matchers/lint.json"
ERR=0
error() { echo "ERROR: $file:$@" 1>&2; ERR=1; }
warn() { echo "WARN: $file:$@" 1>&2; }
echo
for file in ${CHANGED_FILES}; do
case $file in knowledge*)
error "1:1: We do not accept knowledge PRs at this time"
esac
if [[ "$file" != *"/qna.yaml" ]]; then
error "1:1: Skills file has to be named 'qna.yaml', not '$(basename $file)'"
fi
yq '.created_by | length > 0' $file | grep -q false && warn "$(yq '.created_by|line' $file):1: missing/empty 'created_by'"
yq '.task_description | length > 0' $file | grep -q false && warn "$(yq '.task_description|line' $file):1: missing/empty 'task_description'"
yq '.seed_examples' $file | grep -q null && error "$(yq '.seed_examples|line' $file):1: missing 'seed_examples'"
yq '.seed_examples | length >= 5' $file | grep -q false && error "$(yq '.seed_examples|line' $file):1: less than 5 'seed_examples'"
yq '.seed_examples[] | .question | length > 0' $file | grep -q false && error "$(yq '.seed_examples|line' $file):1: missing/empty 'question's"
yq '.seed_examples[] | .answer | length > 0' $file | grep -q false && error "$(yq '.seed_examples|line' $file):1: missing/empty 'answer's"
if $( yq '.seed_examples[] | has("context")' $file | grep -q true ); then
yq '.seed_examples[] | .context| length > 0' $file | grep -q false && error "$(yq '.seed_examples|line' $file):1: missing/empty 'context's"
fi
done
exit $ERR