Skip to content

Commit 269fa00

Browse files
committed
Merge branch 'tutorials' into 'master'
added tutorials See merge request CodeScoring/docs!657
2 parents b938b48 + db3b32a commit 269fa00

27 files changed

Lines changed: 2913 additions & 10 deletions

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ lint_markdown:
113113
done
114114
115115
# URLs
116-
IGNORED_DOMAINS='https://download.pytorch.org`|bdu.fstec.ru|{osa-proxy-url}|artifactory.domain.ru|{REGISTRY_URL}/repository/helm|index.codescoring.ru|index-proxy:8000|webhook|atlassian|nuget|pypi|npmjs|maven|registry|mycompany|k8s|example|gitflic\.ru|localhost|127\.0\.0\.1|tip\.kaspersky\.com|JFROG_URL|host|jfrog\.my\.domain|docs\.alpinelinux\.org|github\.com|spdx\.github\.io|docs\.python\.org|dev\.azure\.com/<organisation|https://<organisation|REGISTRY_USERNAME|REGISTRY_PASSWORD|REGISTRY_URL'
116+
IGNORED_DOMAINS='https://download.pytorch.org`|bdu.fstec.ru|{osa-proxy-url}|artifactory.domain.ru|{REGISTRY_URL}/repository/helm|index.codescoring.ru|index-proxy:8000|webhook|atlassian|nuget|pypi|npmjs|maven|registry|mycompany|k8s|example|gitflic\.ru|localhost|127\.0\.0\.1|tip\.kaspersky\.com|JFROG_URL|host|jfrog\.my\.domain|docs\.alpinelinux\.org|github\.com|spdx\.github\.io|docs\.python\.org|dev\.azure\.com/<organisation|https://<organisation|REGISTRY_USERNAME|REGISTRY_PASSWORD|REGISTRY_URL|drive\.google\.com|gitlab\.com|gitlab\.community\.ispras\.ru'
117117
if command -v wget >/dev/null; then
118118
for file in $FILES; do
119119
URLS=$(grep -oP '(?:\[.*?\]\(\Khttp[s]?://[^\s)]+|(?<!\]\()http[s]?://[^\s>]+)' "$file" | sed 's/]\+$//' | grep -Ev "$IGNORED_DOMAINS" || true)
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
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()">Start</button>
25+
<button class="demo-button" id="demo-pause" onclick="toggleTutorialTerminalDemoPause()">Pause</button>
26+
<span class="demo-speed" id="demo-speed"></span>
27+
<button class="demo-button" id="demo-speed-button" onclick="cycleTutorialTerminalDemoSpeed()">Speed</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: "Start",
42+
restart: "Restart",
43+
pause: "Pause",
44+
resume: "Resume",
45+
speed: "Speed",
46+
idleTitle: "Interactive demo",
47+
idleBody: "Click <strong>“Start”</strong> to see why a local run with <code>resolve</code> helps build a full component inventory."
48+
},
49+
scenes: [
50+
{
51+
type: "card",
52+
title: "Comparing two runs",
53+
body: "The demo first shows a manifest-only scan and then a run with <code>--pip-resolve</code> and an explicit <code>pip</code> path. The output is shortened to the key fragments of a real run."
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 en --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: "A manifest-only run may be incomplete",
72+
body: "If the manifest does not expose transitive dependencies, this run does not provide the full component list. A complete inventory requires either a lock file or dependency resolution in a prepared project environment."
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 en --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: "What changed after resolve",
97+
body: "The agent used the specified <code>pip</code>, added the dependency resolution result as <code>codescoring_pip_for_freeze</code>, saved the scan to a CLI project, and produced a local <code>bom-local.json</code>. This mode should be run only in a controlled project environment, otherwise extra packages can end up in the SBOM."
98+
}
99+
]
100+
};
101+
</script>
102+
<script src="/assets/demo/tutorial-terminal-demo.js"></script>
103+
</body>
104+
</html>
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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

Comments
 (0)