-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgate.sh
More file actions
executable file
·90 lines (78 loc) · 3.47 KB
/
Copy pathgate.sh
File metadata and controls
executable file
·90 lines (78 loc) · 3.47 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
#!/usr/bin/env bash
# Один вход перед мержем и релизом: то, что раньше набиралось руками по строчке.
#
# Обещан 19.07.2026 как «час работы» и не сделан две недели - каждый релиз
# вместо гейта проходил через набор разовых команд, и порядок держался в
# голове. Здесь он держится файлом.
#
# Порядок дешёвого к дорогому: сначала статика (секунды), потом e2e против
# живого Chrome - и e2e гоняется ДВАЖДЫ, потому что флейк в этом сьюте
# исторический, а один зелёный прогон его не ловит.
#
# Использование:
# ./gate.sh полный гейт (статика + два прогона e2e)
# ./gate.sh --quick только статика
set -uo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
fails=0
say() { printf '%s - %s\n' "$1" "$2"; }
ok() { say "$1" "ок"; }
bad() { say "$1" "ПЛОХО: $2"; fails=$((fails + 1)); }
# --- статика ---------------------------------------------------------------
if python3 -c "import json,sys; json.load(open('extension/manifest.json'))" 2>/dev/null; then
ok "manifest.json разбирается"
else
bad "manifest.json разбирается" "не JSON"
fi
ver=$(python3 -c "import json;print(json.load(open('extension/manifest.json'))['version'])" 2>/dev/null || echo "")
if [ -n "$ver" ]; then
ok "версия расширения $ver"
else
bad "версия расширения" "не прочиталась"
fi
# Пакет собирается только package.sh и в gitignore: версия в имени архива
# обязана совпадать с манифестом, иначе в стор уедет прошлая сборка.
pkg="dist/truepin-$ver.zip"
if [ -z "$ver" ]; then
:
elif [ -f "$pkg" ]; then
ok "пакет под текущую версию"
else
say "пакет под текущую версию" "нет $pkg - собрать ./package.sh перед заливкой"
fi
if grep -rlE '^(<<<<<<<|>>>>>>>|\|\|\|\|\|\|\|)' --include='*.js' --include='*.mjs' --include='*.json' --include='*.md' . 2>/dev/null | grep -v node_modules | head -1 | grep -q .; then
bad "маркеров конфликта нет" "найдены"
else
ok "маркеров конфликта нет"
fi
missing=""
for f in extension/manifest.json extension/background.js README.md STORE_LISTING.md; do
[ -f "$f" ] || missing="$missing $f"
done
if [ -z "$missing" ]; then
ok "обязательные файлы на месте"
else
bad "обязательные файлы на месте" "нет:$missing"
fi
if [ "${1:-}" = "--quick" ]; then
echo
[ "$fails" -eq 0 ] && echo "гейт (быстрый): чисто" || echo "гейт (быстрый): провалов $fails"
exit $((fails > 0))
fi
# --- e2e, дважды -----------------------------------------------------------
for run in 1 2; do
echo
echo "--- e2e, прогон $run из 2 ---"
if (cd test && npm test); then
ok "e2e прогон $run"
else
bad "e2e прогон $run" "красный"
fi
done
echo
if [ "$fails" -eq 0 ]; then
echo "гейт: чисто - можно мержить и релизить"
else
echo "гейт: провалов $fails"
fi
exit $((fails > 0))