-
Notifications
You must be signed in to change notification settings - Fork 26
Обновление зависимостей + новый бенч #623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| # Путь к конфигурации EDT (можно заменить на свою) | ||
| BENCH_EDT_PATH=src/test/resources/ext/edt/ssl_3_1/configuration | ||
|
|
||
| # Путь к конфигурации Designer | ||
| BENCH_DESIGNER_PATH=src/test/resources/ext/designer/ssl_3_1/src/cf | ||
|
|
||
| # Дополнительные JVM-аргументы для JMH | ||
| BENCH_JVM_ARGS=-Xms4g -Xmx8g | ||
|
|
||
| # Профилировщики JMH (через запятую, без пробелов) | ||
| BENCH_PROFILERS=com.github._1c_syntax.bsl.mdclasses.benchmark.MemoryProfiler | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -23,3 +23,4 @@ Gradle_*.xml | |
| benchmark-results/** | ||
|
|
||
| .vscode/ | ||
| /.env.benchmark | ||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -2,6 +2,46 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| set -e | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Загрузка .env.benchmark если есть | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -f ".env.benchmark" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📄 Загрузка конфигурации из .env.benchmark" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| set -a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| source .env.benchmark | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| set +a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Параметры по умолчанию | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| QUICK_MODE=false | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| LABEL_NAME="" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JVM_ARGS="${BENCH_JVM_ARGS:-}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PROFILERS="${BENCH_PROFILERS:-com.github._1c_syntax.bsl.mdclasses.benchmark.MemoryProfiler}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Разбор аргументов | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| POSITIONAL=() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| while [[ $# -gt 0 ]]; do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| case $1 in | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --quick) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| QUICK_MODE=true | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| shift | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --label) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| LABEL_NAME="$2" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| shift 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --jvm-args) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JVM_ARGS="$2" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| shift 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+27
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Validate options that require a value.
Proposed fix --label)
+ if [[ $# -lt 2 || "$2" == --* ]]; then
+ echo "❌ --label requires a value"
+ exit 1
+ fi
LABEL_NAME="$2"
shift 2
;;
--jvm-args)
+ if [[ $# -lt 2 || "$2" == --* ]]; then
+ echo "❌ --jvm-args requires a value"
+ exit 1
+ fi
JVM_ARGS="$2"
shift 2
;;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| *) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| POSITIONAL+=("$1") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| shift | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| esac | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| done | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Восстанавливаем позиционные аргументы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| set -- "${POSITIONAL[@]}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Конфигурация для CI | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -n "$GITHUB_HEAD_REF" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # В GitHub Actions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -13,6 +53,22 @@ else | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_BRANCH=${2:-$(git branch --show-current)} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Режим быстрого замера | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ "$QUICK_MODE" = true ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JMH_QUICK_ARGS="-f 1 -wi 2 -i 3" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "⚡ Быстрый режим: 1 fork, 2 warmup, 3 iterations" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JMH_QUICK_ARGS="" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Имя для маркировки результатов | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -n "$LABEL_NAME" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_VERSION_NAME="$LABEL_NAME" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "🏷️ Маркировка результатов: $LABEL_NAME" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_VERSION_NAME="new-version" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+64
to
+70
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Sanitize
Proposed fix if [ -n "$LABEL_NAME" ]; then
+ if [[ ! "$LABEL_NAME" =~ ^[A-Za-z0-9._-]+$ ]]; then
+ echo "❌ --label may contain only letters, numbers, dot, underscore, and dash"
+ exit 1
+ fi
NEW_VERSION_NAME="$LABEL_NAME"Also applies to: 198-202, 458-458 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| RESULTS_DIR="benchmark-results" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| BUILD_DIR="build/libs" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -85,27 +141,34 @@ build_from_branch() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git checkout "$branch" --quiet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Из целевой ветки: src/main + билд-система (чтоб зависимости были те) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Из текущей ветки: src/jmh (чтоб бенч-скрипты были актуальные) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local temp_dir | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| temp_dir=$(mktemp -d) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " Сборка Gradle..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ./gradlew clean jmhJar --quiet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git archive "$branch" build.gradle.kts settings.gradle.kts gradlew gradlew.bat lombok.config gradle.properties gradle/ src/ | tar -x -C "$temp_dir" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cp -r src/jmh "$temp_dir/src/jmh" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+149
to
+150
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Replace Since the archive includes Proposed fix git archive "$branch" build.gradle.kts settings.gradle.kts gradlew gradlew.bat lombok.config gradle.properties gradle/ src/ | tar -x -C "$temp_dir"
- cp -r src/jmh "$temp_dir/src/jmh"
+ rm -rf "$temp_dir/src/jmh"
+ mkdir -p "$temp_dir/src"
+ cp -r src/jmh "$temp_dir/src/jmh"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git log -1 --oneline > "$RESULTS_DIR/$version_name-commit.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git rev-parse HEAD > "$RESULTS_DIR/$version_name-hash.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " Сборка Gradle..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| (cd "$temp_dir" && chmod +x gradlew && ./gradlew clean jmhJar --no-daemon --quiet 2>&1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| sleep 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git log -1 --oneline "$branch" > "$RESULTS_DIR/$version_name-commit.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git rev-parse "$branch" > "$RESULTS_DIR/$version_name-hash.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local jar_file | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| jar_file=$(find_benchmark_jar "$BUILD_DIR") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| jar_file=$(find_benchmark_jar "$temp_dir/$BUILD_DIR") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [[ -z "$jar_file" ]]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " ❌ Не удалось найти JAR файл в $BUILD_DIR" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ls -la "$BUILD_DIR"/*.jar 2>/dev/null || echo " Нет JAR файлов" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " ❌ Не удалось найти JAR файл" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ls -la "$temp_dir/$BUILD_DIR"/*.jar 2>/dev/null || echo " Нет JAR файлов" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rm -rf "$temp_dir" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " ✅ Найден JAR: $(basename "$jar_file")" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cp "$jar_file" "$RESULTS_DIR/$version_name.jar" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| rm -rf "$temp_dir" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Основная логика определения способа получения версий | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -132,11 +195,11 @@ fi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Обрабатываем новую версию | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if is_jar_file "$NEW_BRANCH"; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| use_existing_jar "$NEW_BRANCH" "new-version" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| use_existing_jar "$NEW_BRANCH" "$NEW_VERSION_NAME" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_SOURCE="JAR файл: $(basename "$NEW_BRANCH")" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| elif is_git_branch "$NEW_BRANCH"; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build_from_branch "$NEW_BRANCH" "new-version" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_SOURCE="Ветка: $NEW_BRANCH ($(cat $RESULTS_DIR/new-version-commit.txt))" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build_from_branch "$NEW_BRANCH" "$NEW_VERSION_NAME" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| NEW_SOURCE="Ветка: $NEW_BRANCH ($(cat $RESULTS_DIR/$NEW_VERSION_NAME-commit.txt))" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "❌ Второй параметр не является ни JAR файлом, ни существующей веткой: $NEW_BRANCH" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -158,25 +221,34 @@ check_jar_exists() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| check_jar_exists "$RESULTS_DIR/old-version.jar" "прошлой версии" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| check_jar_exists "$RESULTS_DIR/new-version.jar" "новой версии" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Если использовались ветки, возвращаемся к новой версии для дальнейшей работы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if ! is_jar_file "$NEW_BRANCH" && is_git_branch "$NEW_BRANCH"; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "🔄 Возвращаемся к ветке $NEW_BRANCH..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| git checkout "$NEW_BRANCH" --quiet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| check_jar_exists "$RESULTS_DIR/$NEW_VERSION_NAME.jar" "новой версии" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "🎯 ИСТОЧНИКИ ВЕРСИЙ:" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " Прошлая версия: $OLD_SOURCE" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo " Новая версия: $NEW_SOURCE" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Формируем общие JMH аргументы | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JMH_COMMON_ARGS="" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| IFS=',' read -ra PROFILER_LIST <<< "$PROFILERS" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| for profiler in "${PROFILER_LIST[@]}"; do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JMH_COMMON_ARGS="$JMH_COMMON_ARGS -prof $profiler" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| done | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JVM_SYS_PROPS="" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -n "$BENCH_EDT_PATH" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JVM_SYS_PROPS="$JVM_SYS_PROPS -Dbench.edt.path=$BENCH_EDT_PATH" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -n "$BENCH_DESIGNER_PATH" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| JVM_SYS_PROPS="$JVM_SYS_PROPS -Dbench.designer.path=$BENCH_DESIGNER_PATH" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📊 Запуск бенчмарков для прошлой версии..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| java -jar "$RESULTS_DIR/old-version.jar" -prof com.github._1c_syntax.bsl.mdclasses.benchmark.MemoryProfiler -rf json -rff "$RESULTS_DIR/old-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| java $JVM_ARGS $JVM_SYS_PROPS -jar "$RESULTS_DIR/old-version.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/old-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📊 Запуск бенчмарков для новой версии..." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| java -jar "$RESULTS_DIR/new-version.jar" -prof com.github._1c_syntax.bsl.mdclasses.benchmark.MemoryProfiler -rf json -rff "$RESULTS_DIR/new-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| java $JVM_ARGS $JVM_SYS_PROPS -jar "$RESULTS_DIR/$NEW_VERSION_NAME.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/$NEW_VERSION_NAME-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+239
to
+251
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Use arrays for JVM/JMH args that include paths.
Proposed fix-JVM_SYS_PROPS=""
+JVM_SYS_PROPS=()
if [ -n "$BENCH_EDT_PATH" ]; then
- JVM_SYS_PROPS="$JVM_SYS_PROPS -Dbench.edt.path=$BENCH_EDT_PATH"
+ JVM_SYS_PROPS+=("-Dbench.edt.path=$BENCH_EDT_PATH")
fi
if [ -n "$BENCH_DESIGNER_PATH" ]; then
- JVM_SYS_PROPS="$JVM_SYS_PROPS -Dbench.designer.path=$BENCH_DESIGNER_PATH"
+ JVM_SYS_PROPS+=("-Dbench.designer.path=$BENCH_DESIGNER_PATH")
fi
echo "📊 Запуск бенчмарков для прошлой версии..."
-java $JVM_ARGS $JVM_SYS_PROPS -jar "$RESULTS_DIR/old-version.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/old-results.json"
+java $JVM_ARGS "${JVM_SYS_PROPS[@]}" -jar "$RESULTS_DIR/old-version.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/old-results.json"
echo "📊 Запуск бенчмарков для новой версии..."
-java $JVM_ARGS $JVM_SYS_PROPS -jar "$RESULTS_DIR/$NEW_VERSION_NAME.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/$NEW_VERSION_NAME-results.json"
+java $JVM_ARGS "${JVM_SYS_PROPS[@]}" -jar "$RESULTS_DIR/$NEW_VERSION_NAME.jar" $JMH_COMMON_ARGS $JMH_QUICK_ARGS -rf json -rff "$RESULTS_DIR/$NEW_VERSION_NAME-results.json"📝 Committable suggestion
Suggested change
🧰 Tools🪛 Shellcheck (0.11.0)[info] 248-248: Double quote to prevent globbing and word splitting. (SC2086) [info] 248-248: Double quote to prevent globbing and word splitting. (SC2086) [info] 248-248: Double quote to prevent globbing and word splitting. (SC2086) [info] 248-248: Double quote to prevent globbing and word splitting. (SC2086) [info] 251-251: Double quote to prevent globbing and word splitting. (SC2086) [info] 251-251: Double quote to prevent globbing and word splitting. (SC2086) [info] 251-251: Double quote to prevent globbing and word splitting. (SC2086) [info] 251-251: Double quote to prevent globbing and word splitting. (SC2086) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Обновленная функция анализа для использования правильных источников | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| analyze_results() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -383,15 +455,15 @@ generate_report() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📈 ПОЛНЫЙ ОТЧЕТ СРАВНЕНИЯ MDClasses" > "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "===================================" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Старая версия: $OLD_BRANCH ($(cat $RESULTS_DIR/old-version-commit.txt))" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Новая версия: $NEW_BRANCH ($(cat $RESULTS_DIR/new-version-commit.txt))" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Новая версия: $NEW_VERSION_NAME ($(cat $RESULTS_DIR/$NEW_VERSION_NAME-commit.txt))" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Пробуем детальный анализ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if analyze_results "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/new-results.json" >> "$RESULTS_DIR/comparison-report.txt" 2>/dev/null; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if analyze_results "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/$NEW_VERSION_NAME-results.json" >> "$RESULTS_DIR/comparison-report.txt" 2>/dev/null; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "✅ Детальный анализ выполнен" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "⚠️ Детальный анализ не удался, используем простой" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| simple_analysis "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/new-results.json" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| simple_analysis "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/$NEW_VERSION_NAME-results.json" >> "$RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -400,11 +472,11 @@ generate_report | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "✅ Сравнение завершено!" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📄 Отчет: $RESULTS_DIR/comparison-report.txt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📊 Данные: $RESULTS_DIR/old-results.json и $RESULTS_DIR/new-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📊 Данные: $RESULTS_DIR/old-results.json и $RESULTS_DIR/$NEW_VERSION_NAME-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "🎯 Сравнение: $OLD_SOURCE → $NEW_SOURCE" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| # Показываем краткий анализ в консоли | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "📋 КРАТКИЕ РЕЗУЛЬТАТЫ:" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| analyze_results "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/new-results.json" 2>/dev/null || \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| simple_analysis "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/new-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| analyze_results "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/$NEW_VERSION_NAME-results.json" 2>/dev/null || \ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| simple_analysis "$RESULTS_DIR/old-results.json" "$RESULTS_DIR/$NEW_VERSION_NAME-results.json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| # Benchmarks | ||
|
|
||
| This project includes JMH benchmarks for measuring performance and memory usage. | ||
|
|
||
| ## Quick Start | ||
|
|
||
| ```bash | ||
| # Quick single measurement: | ||
| ./benchmark-compare.sh HEAD HEAD --quick --label my-feature | ||
|
|
||
| # Full comparison with develop: | ||
| ./benchmark-compare.sh develop HEAD | ||
| ``` | ||
|
|
||
| ## Report Formats | ||
|
|
||
| | Format | Purpose | How to Open | | ||
| |---|---|---| | ||
| | `build/jmh-results.json` | Machine reading, CI | `jq`, python | | ||
| | `benchmark-results/comparison-report.txt` | Terminal, commit message | `cat` | | ||
| | `benchmark-results/report.html` | Visual review | browser | | ||
| | `benchmark-results/comprehensive-analysis-with-values.png` | Quick glance | image viewer | | ||
|
|
||
| ## Usage | ||
|
|
||
| ### Branch comparison | ||
|
|
||
| ```bash | ||
| ./benchmark-compare.sh <old-branch> <new-branch> | ||
| ``` | ||
|
|
||
| ### Compare JAR with branch | ||
|
|
||
| ```bash | ||
| ./benchmark-compare.sh old-release.jar feature/optimization | ||
| ``` | ||
|
|
||
| ### Custom fixtures | ||
|
|
||
| Copy and edit `.env.benchmark.example` → `.env.benchmark`: | ||
|
|
||
| ```bash | ||
| cp .env.benchmark.example .env.benchmark | ||
| # edit EDT/Designer paths | ||
| ./benchmark-compare.sh develop HEAD | ||
| ``` | ||
|
|
||
| ### CLI options | ||
|
|
||
| | Option | Description | | ||
| |---|---| | ||
| | `--quick` | Quick mode: 1 fork, 2 warmup, 3 iterations | | ||
| | `--label <name>` | Label result files instead of new-version | | ||
| | `--jvm-args "<args>"` | JVM arguments for JMH | | ||
|
|
||
| For details see the [Russian documentation](../ru/benchmark.md) (in Russian). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Quote JVM args so the env file can be sourced.
Because
benchmark-compare.shusessource .env.benchmark, Line 8 is parsed by Bash asBENCH_JVM_ARGS=-Xms4gfollowed by a command named-Xmx8g. This example will fail when copied as-is.Proposed fix
📝 Committable suggestion
🧰 Tools
🪛 dotenv-linter (4.0.0)
[warning] 8-8: [ValueWithoutQuotes] This value needs to be surrounded in quotes
(ValueWithoutQuotes)
🤖 Prompt for AI Agents
Source: Linters/SAST tools