|
| 1 | +<!DOCTYPE html> |
| 2 | +<html lang="ru"> |
| 3 | +<head> |
| 4 | + <meta charset="UTF-8"> |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 6 | + <title>FSTEC SBOM demo</title> |
| 7 | + <link rel="stylesheet" href="/assets/demo/tutorial-terminal-demo.css"> |
| 8 | +</head> |
| 9 | +<body> |
| 10 | + <div class="demo-shell"> |
| 11 | + <div class="demo-terminal" id="tutorial-terminal-demo"> |
| 12 | + <div class="demo-titlebar"> |
| 13 | + <span class="demo-dot red"></span> |
| 14 | + <span class="demo-dot yellow"></span> |
| 15 | + <span class="demo-dot green"></span> |
| 16 | + <span class="demo-title" id="demo-title"></span> |
| 17 | + </div> |
| 18 | + <div class="demo-body" id="demo-body"></div> |
| 19 | + <div class="demo-controls"> |
| 20 | + <div class="demo-progress"> |
| 21 | + <div class="demo-progress-fill" id="demo-progress-fill"></div> |
| 22 | + </div> |
| 23 | + <div class="demo-buttons"> |
| 24 | + <button class="demo-button demo-button--primary" id="demo-start" onclick="startTutorialTerminalDemo()">Запустить</button> |
| 25 | + <button class="demo-button" id="demo-pause" onclick="toggleTutorialTerminalDemoPause()">Пауза</button> |
| 26 | + <span class="demo-speed" id="demo-speed"></span> |
| 27 | + <button class="demo-button" id="demo-speed-button" onclick="cycleTutorialTerminalDemoSpeed()">Скорость</button> |
| 28 | + </div> |
| 29 | + </div> |
| 30 | + </div> |
| 31 | + </div> |
| 32 | + |
| 33 | + <script> |
| 34 | + window.TUTORIAL_TERMINAL_DEMO = { |
| 35 | + title: "local-user@fstec-python-app ~ zsh", |
| 36 | + promptUser: "local-user", |
| 37 | + promptPath: "fstec-python-app", |
| 38 | + startSpeed: 0.5, |
| 39 | + autoStart: false, |
| 40 | + labels: { |
| 41 | + start: "Запустить", |
| 42 | + restart: "Сначала", |
| 43 | + pause: "Пауза", |
| 44 | + resume: "Продолжить", |
| 45 | + speed: "Скорость", |
| 46 | + idleTitle: "Интерактивное демо", |
| 47 | + idleBody: "Нажмите <strong>«Запустить»</strong>, чтобы посмотреть, почему для полного ППК полезно сначала локально запустить агент с <code>resolve</code>." |
| 48 | + }, |
| 49 | + scenes: [ |
| 50 | + { |
| 51 | + type: "card", |
| 52 | + title: "Сравнение двух запусков", |
| 53 | + body: "Сначала показан обычный запуск по манифесту, затем — запуск с <code>--pip-resolve</code> и явным путем к <code>pip</code>. Демо сокращено до ключевых фрагментов реального вывода." |
| 54 | + }, |
| 55 | + { |
| 56 | + type: "command", |
| 57 | + command: "./johnny scan dir . --api_token $CODESCORING_API_TOKEN --api_url $CODESCORING_API_URL --project \"ppk-fstec-demo\" --save-results --create-project --localization ru --bom-path bom-manifest.json", |
| 58 | + output: [ |
| 59 | + "Scanning project: /Users/demo/fstec-python-app", |
| 60 | + "Project name: ppk-fstec-demo", |
| 61 | + "SBOM file: /Users/demo/fstec-python-app/bom-manifest.json", |
| 62 | + "", |
| 63 | + "Manifests:", |
| 64 | + "- requirements.txt" |
| 65 | + ], |
| 66 | + outputDelay: 28, |
| 67 | + afterOutputDelay: 380 |
| 68 | + }, |
| 69 | + { |
| 70 | + type: "card", |
| 71 | + title: "Обычного запуска может быть недостаточно", |
| 72 | + body: "Если манифест не раскрывает транзитивные зависимости, такой запуск не даёт полного перечня компонентов. Для качественного инвентаря нужен либо lock-файл, либо запуск с разрешением зависимостей в подготовленном окружении проекта." |
| 73 | + }, |
| 74 | + { |
| 75 | + type: "command", |
| 76 | + command: "./johnny scan dir . --api_token $CODESCORING_API_TOKEN --api_url $CODESCORING_API_URL --project \"ppk-fstec-demo\" --save-results --create-project --localization ru --pip-resolve --pip-path /usr/local/bin/pip3 --bom-path bom-local.json", |
| 77 | + output: [ |
| 78 | + "pip 25.0 from /usr/local/lib/python3.13/site-packages/pip (python 3.13)", |
| 79 | + "certifi==2025.1.31", |
| 80 | + "cffi==1.17.1", |
| 81 | + "pycparser==2.22", |
| 82 | + "", |
| 83 | + "Scanning project: /Users/demo/fstec-python-app", |
| 84 | + "Project name: ppk-fstec-demo", |
| 85 | + "SBOM file: /Users/demo/fstec-python-app/bom-local.json", |
| 86 | + "", |
| 87 | + "Manifests:", |
| 88 | + "- codescoring_pip_for_freeze", |
| 89 | + "- requirements.txt" |
| 90 | + ], |
| 91 | + outputDelay: 20, |
| 92 | + afterOutputDelay: 420 |
| 93 | + }, |
| 94 | + { |
| 95 | + type: "card", |
| 96 | + title: "Что изменилось после resolve", |
| 97 | + body: "Агент использовал <code>pip</code> по указанному пути, добавил результат разрешения зависимостей как <code>codescoring_pip_for_freeze</code>, сохранил анализ в CLI-проекте и сформировал локальный <code>bom-local.json</code>. Такой режим стоит запускать только в контролируемом окружении проекта, иначе в SBOM могут попасть лишние пакеты." |
| 98 | + } |
| 99 | + ] |
| 100 | + }; |
| 101 | + </script> |
| 102 | + <script src="/assets/demo/tutorial-terminal-demo.js"></script> |
| 103 | +</body> |
| 104 | +</html> |
0 commit comments