-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathgenerate-manifest.sh
More file actions
executable file
·87 lines (72 loc) · 2.65 KB
/
generate-manifest.sh
File metadata and controls
executable file
·87 lines (72 loc) · 2.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
#!/bin/bash
# Генерирует update-manifest.json из текущего содержимого репо.
# Запускать перед релизом: bash generate-manifest.sh
#
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MANIFEST="$SCRIPT_DIR/update-manifest.json"
# Версия из CHANGELOG.md (первый ## [X.Y.Z])
VERSION=$(grep -m1 '^\#\# \[' "$SCRIPT_DIR/CHANGELOG.md" | sed 's/.*\[\(.*\)\].*/\1/')
if [ -z "$VERSION" ]; then
echo "ERROR: Не удалось извлечь версию из CHANGELOG.md"
exit 1
fi
echo "Генерация манифеста v$VERSION..."
# Файлы/директории, которые НЕ включаются в манифест обновлений
# seed/ — только при setup, README.md — пользователь кастомизирует,
# settings.local.json — персональный, .gitkeep — маркеры
EXCLUDE_PATTERNS=(
"seed/"
".claude/settings.local.json"
"generate-manifest.sh"
"update-manifest.json"
".git/"
".DS_Store"
)
# Только корневой README.md (не roles/*/README.md и т.д.)
EXCLUDE_EXACT=(
"README.md"
)
# Собираем файлы
FILES=()
while IFS= read -r filepath; do
# Относительный путь
rel="${filepath#$SCRIPT_DIR/}"
# Проверяем исключения
skip=false
for pattern in "${EXCLUDE_PATTERNS[@]}"; do
case "$rel" in
$pattern*|*/$pattern*) skip=true; break ;;
esac
done
# Пропускаем .gitkeep
[[ "$(basename "$rel")" == ".gitkeep" ]] && skip=true
# Точные совпадения (корневой README.md)
for exact in "${EXCLUDE_EXACT[@]}"; do
[ "$rel" = "$exact" ] && { skip=true; break; }
done
$skip && continue
FILES+=("$rel")
done < <(find "$SCRIPT_DIR" -type f -not -path '*/.git/*' -not -name '.DS_Store' | sort)
# Генерируем JSON
{
echo '{'
echo " \"version\": \"$VERSION\","
echo ' "description": "Манифест платформенных файлов FMT-exocortex-template. Используется update.sh для доставки обновлений.",'
echo ' "files": ['
last_idx=$(( ${#FILES[@]} - 1 ))
for i in "${!FILES[@]}"; do
f="${FILES[$i]}"
comma=","
[ "$i" -eq "$last_idx" ] && comma=""
printf ' {"path": "%s"}%s\n' "$f" "$comma"
done
echo ' ]'
echo '}'
} > "$MANIFEST"
echo "Готово: $MANIFEST"
echo " Версия: $VERSION"
echo " Файлов: ${#FILES[@]}"
echo ""
echo "Проверьте diff и закоммитьте:"
echo " git diff update-manifest.json"