-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgitflic-ci.yaml
More file actions
105 lines (100 loc) · 3.65 KB
/
Copy pathgitflic-ci.yaml
File metadata and controls
105 lines (100 loc) · 3.65 KB
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
stages:
- check
- deploy
.check_common:
stage: check
tags:
- docs-runner
rules:
- if: $CI_PIPELINE_TYPE == "merge_request_pipeline"
changes:
paths:
- "ru/*.md"
- "ru/**/*.md"
- "en/*.md"
- "en/**/*.md"
before_script:
- |
git fetch origin "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
DIFF=$(git diff --name-status -M --diff-filter=AMR origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME...HEAD)
DOCS_CHANGED=$(echo "$DIFF" | awk '
$1=="A"||$1=="M" { if($2 ~ /^ru\/.*\.md$/) print $2 }
$1 ~ /^R[0-9]+$/ { if($3 ~ /^ru\/.*\.md$/) print $3 }
' | sort -u)
[ -z "$DOCS_CHANGED" ] && echo "Изменения отсутствуют" || printf "Изменённые/новые файлы документации:\n%s\n" "$DOCS_CHANGED"
check_translation:
extends: .check_common
image: registry.gitflic.ru/company/gitflic/alpine-with-git:latest
script:
- |
[ -n "$DOCS_CHANGED" ] || { echo "Нет файлов для проверки перевода."; exit 0; }
missing=$(for RUFILE in $DOCS_CHANGED; do ENFILE="en/${RUFILE#ru/}"; [ -f "$ENFILE" ] || echo "Нет английской версии для: $RUFILE → $ENFILE"; done)
if [ -n "$missing" ]; then
echo -e "$missing"
. .ci/discuss.sh
mr_comment_lines_once "$missing"
exit 1
else
echo "Все изменённые файлы имеют английскую версию."
fi
spellcheck_cspell:
extends: .check_common
image: registry.gitflic.ru/company/gitflic/cspell:latest
script:
- |
[ -n "$DOCS_CHANGED" ] || { echo "Нет файлов для проверки CSpell."; exit 0; }
OUT="$(cspell --config ./spell/cspell.json $DOCS_CHANGED 2>&1; echo "status:$?")"
STATUS="$(printf "%s" "$OUT" | awk -F: '/^status:/ {print $2}')"
if [ "$STATUS" != "0" ]; then
ERR="$(printf '%s\n' "$OUT" | grep -E '^[^:]+:[0-9]+:[0-9]+ - ' || true)"
. .ci/discuss.sh
[ -n "$ERR" ] && mr_comment_lines_once "$ERR"
exit 1
else
echo "CSpell: ошибок не найдено."
fi
spellcheck_vale:
extends: .check_common
image: registry.gitflic.ru/company/gitflic/vale:latest
script:
- |
[ -n "$DOCS_CHANGED" ] || { echo "Нет файлов для проверки Vale."; exit 0; }
vale --config=./spell/.vale.ini $DOCS_CHANGED || true
VALE_JSON="$(vale --config=./spell/.vale.ini --output=JSON $DOCS_CHANGED 2>/dev/null || true)"
ERR="$(printf '%s' "$VALE_JSON" \
| jq -r '
to_entries[] as $e
| $e.value[]
| select(.Severity=="error")
| ($e.key) as $p
| (.Line // "") as $l
| (.Message) as $m
| (.Check) as $c
| if ($l=="" or $l==0 or $l=="null")
then "\($p): \($m) [\($c)]"
else "\($p):\($l): \($m) [\($c)]"
end
' || true)"
if [ -n "$ERR" ]; then
. .ci/discuss.sh
mr_comment_lines_once "$ERR"
exit 1
else
echo "Vale: ошибок не найдено (warnings/suggestions могут быть выше в логах)."
fi
deploy_site:
stage: deploy
image: registry.gitflic.ru/company/gitflic/alpine:ssh
tags:
- docs-runner
rules:
- if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_TAG =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)$/
variables:
TARGET_REF_NAME: $CI_COMMIT_REF_NAME
trigger:
project: gitflic/documentation-configs
strategy: depend
forward:
yaml_variables: true
pipeline_variables: false