@@ -229,71 +229,257 @@ jobs:
229
229
cp README.md target/doc/website/
230
230
fi
231
231
232
- # Step 5.5: Create tutorial HTML pages and navigation
233
- - name : Create tutorial pages
232
+ # Step 5.5: Install markdown processing tools and create tutorial HTML
233
+ - name : Install markdown processing tools
234
234
run : |
235
- echo "Creating tutorial HTML pages..."
235
+ echo "Installing markdown processing tools..."
236
+ # Install pandoc for proper markdown to HTML conversion
237
+ sudo apt-get update
238
+ sudo apt-get install -y pandoc
236
239
237
- # Create a simple HTML template for tutorials
240
+ # Install Python markdown for fallback
241
+ pip install markdown[extra] pygments
242
+
243
+ - name : Create beautiful tutorial HTML pages
244
+ run : |
245
+ echo "Creating beautiful tutorial HTML pages..."
246
+
247
+ # Create enhanced CSS for beautiful rendering
248
+ cat > target/doc/tutorials/tutorial-style.css << 'EOF'
249
+ /* Beautiful Tutorial Styling */
250
+ body {
251
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
252
+ line-height: 1.7;
253
+ color: #2c3e50;
254
+ max-width: 1200px;
255
+ margin: 0 auto;
256
+ padding: 20px;
257
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
258
+ min-height: 100vh;
259
+ }
260
+
261
+ .container {
262
+ background: white;
263
+ border-radius: 12px;
264
+ box-shadow: 0 10px 30px rgba(0,0,0,0.1);
265
+ padding: 40px;
266
+ margin: 20px auto;
267
+ }
268
+
269
+ .nav {
270
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
271
+ color: white;
272
+ padding: 20px;
273
+ border-radius: 12px;
274
+ margin-bottom: 40px;
275
+ text-align: center;
276
+ box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
277
+ }
278
+ .nav a {
279
+ color: white;
280
+ text-decoration: none;
281
+ margin: 0 20px;
282
+ padding: 8px 16px;
283
+ border-radius: 6px;
284
+ transition: background 0.3s ease;
285
+ }
286
+ .nav a:hover {
287
+ background: rgba(255,255,255,0.2);
288
+ text-decoration: none;
289
+ }
290
+
291
+ h1 {
292
+ color: #667eea;
293
+ font-size: 2.5rem;
294
+ margin-bottom: 30px;
295
+ text-align: center;
296
+ background: linear-gradient(135deg, #667eea, #764ba2);
297
+ -webkit-background-clip: text;
298
+ -webkit-text-fill-color: transparent;
299
+ background-clip: text;
300
+ }
301
+
302
+ h2 {
303
+ color: #4a5568;
304
+ font-size: 1.8rem;
305
+ margin: 40px 0 20px 0;
306
+ padding-bottom: 10px;
307
+ border-bottom: 3px solid #667eea;
308
+ }
309
+
310
+ h3 {
311
+ color: #667eea;
312
+ font-size: 1.4rem;
313
+ margin: 30px 0 15px 0;
314
+ }
315
+
316
+ p {
317
+ margin-bottom: 20px;
318
+ text-align: justify;
319
+ }
320
+
321
+ pre {
322
+ background: #2d3748;
323
+ color: #e2e8f0;
324
+ padding: 20px;
325
+ border-radius: 8px;
326
+ overflow-x: auto;
327
+ border-left: 4px solid #667eea;
328
+ margin: 20px 0;
329
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;
330
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
331
+ }
332
+
333
+ code {
334
+ background: #edf2f7;
335
+ color: #e53e3e;
336
+ padding: 3px 8px;
337
+ border-radius: 4px;
338
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;
339
+ font-size: 0.9em;
340
+ }
341
+
342
+ pre code {
343
+ background: transparent;
344
+ color: inherit;
345
+ padding: 0;
346
+ }
347
+
348
+ .example {
349
+ background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
350
+ border: 1px solid #dee2e6;
351
+ border-radius: 12px;
352
+ padding: 25px;
353
+ margin: 25px 0;
354
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
355
+ }
356
+
357
+ .toc {
358
+ background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
359
+ padding: 25px;
360
+ border-radius: 12px;
361
+ margin: 30px 0;
362
+ border-left: 5px solid #2196f3;
363
+ }
364
+ .toc ul { list-style-type: none; padding-left: 20px; }
365
+ .toc > ul { padding-left: 0; }
366
+ .toc a { color: #1976d2; text-decoration: none; font-weight: 500; }
367
+ .toc a:hover { text-decoration: underline; color: #0d47a1; }
368
+
369
+ .highlight {
370
+ background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%);
371
+ border: 1px solid #ffeaa7;
372
+ border-radius: 8px;
373
+ padding: 20px;
374
+ margin: 25px 0;
375
+ border-left: 5px solid #f39c12;
376
+ }
377
+
378
+ .note {
379
+ background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
380
+ border: 1px solid #c3e6cb;
381
+ border-radius: 8px;
382
+ padding: 20px;
383
+ margin: 25px 0;
384
+ border-left: 5px solid #28a745;
385
+ }
386
+
387
+ .warning {
388
+ background: linear-gradient(135deg, #f8d7da 0%, #f1b2b7 100%);
389
+ border: 1px solid #f1b2b7;
390
+ border-radius: 8px;
391
+ padding: 20px;
392
+ margin: 25px 0;
393
+ border-left: 5px solid #dc3545;
394
+ }
395
+
396
+ ul, ol {
397
+ margin-bottom: 20px;
398
+ padding-left: 30px;
399
+ }
400
+
401
+ li {
402
+ margin-bottom: 8px;
403
+ }
404
+
405
+ strong {
406
+ color: #2d3748;
407
+ font-weight: 600;
408
+ }
409
+
410
+ em {
411
+ color: #667eea;
412
+ font-style: italic;
413
+ }
414
+
415
+ blockquote {
416
+ border-left: 4px solid #667eea;
417
+ padding-left: 20px;
418
+ margin: 20px 0;
419
+ font-style: italic;
420
+ color: #4a5568;
421
+ background: #f7fafc;
422
+ padding: 15px 20px;
423
+ border-radius: 0 8px 8px 0;
424
+ }
425
+
426
+ table {
427
+ width: 100%;
428
+ border-collapse: collapse;
429
+ margin: 20px 0;
430
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
431
+ border-radius: 8px;
432
+ overflow: hidden;
433
+ }
434
+
435
+ th, td {
436
+ padding: 12px 15px;
437
+ text-align: left;
438
+ border-bottom: 1px solid #e2e8f0;
439
+ }
440
+
441
+ th {
442
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
443
+ color: white;
444
+ font-weight: 600;
445
+ }
446
+
447
+ tr:hover {
448
+ background: #f8f9fa;
449
+ }
450
+
451
+ a {
452
+ color: #667eea;
453
+ text-decoration: none;
454
+ border-bottom: 1px solid transparent;
455
+ transition: border-color 0.3s ease;
456
+ }
457
+
458
+ a:hover {
459
+ border-bottom: 1px solid #667eea;
460
+ }
461
+
462
+ .footer {
463
+ text-align: center;
464
+ margin-top: 60px;
465
+ padding: 30px;
466
+ color: #718096;
467
+ border-top: 1px solid #e2e8f0;
468
+ }
469
+ EOF
470
+
471
+ # Create complete HTML template
238
472
cat > target/doc/tutorials/template.html << 'EOF'
239
473
<!DOCTYPE html>
240
474
<html lang="en">
241
475
<head>
242
476
<meta charset="UTF-8">
243
477
<meta name="viewport" content="width=device-width, initial-scale=1.0">
244
- <title>MCP Rust Tutorial</title>
245
- <style>
246
- body {
247
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
248
- line-height: 1.6;
249
- color: #333;
250
- max-width: 1000px;
251
- margin: 0 auto;
252
- padding: 20px;
253
- background: #fff;
254
- }
255
- .nav {
256
- background: #667eea;
257
- color: white;
258
- padding: 15px;
259
- border-radius: 8px;
260
- margin-bottom: 30px;
261
- text-align: center;
262
- }
263
- .nav a { color: white; text-decoration: none; margin: 0 15px; }
264
- .nav a:hover { text-decoration: underline; }
265
- h1, h2, h3 { color: #667eea; }
266
- pre {
267
- background: #f4f4f4;
268
- padding: 15px;
269
- border-radius: 8px;
270
- overflow-x: auto;
271
- border-left: 4px solid #667eea;
272
- }
273
- code {
274
- background: #f4f4f4;
275
- padding: 2px 6px;
276
- border-radius: 4px;
277
- font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
278
- }
279
- .example {
280
- background: #f8f9fa;
281
- border: 1px solid #dee2e6;
282
- border-radius: 8px;
283
- padding: 20px;
284
- margin: 20px 0;
285
- }
286
- .toc {
287
- background: #e9ecef;
288
- padding: 20px;
289
- border-radius: 8px;
290
- margin: 20px 0;
291
- }
292
- .toc ul { list-style-type: none; padding-left: 20px; }
293
- .toc > ul { padding-left: 0; }
294
- .toc a { color: #667eea; text-decoration: none; }
295
- .toc a:hover { text-decoration: underline; }
296
- </style>
478
+ <title>MCP Rust Tutorial - Complete Learning Resource</title>
479
+ <link rel="stylesheet" href="tutorial-style.css">
480
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🦀</text></svg>">
481
+ <meta name="description" content="Complete tutorial for learning MCP (Model Context Protocol) development with Rust">
482
+ <meta name="keywords" content="Rust, MCP, Model Context Protocol, Tutorial, Programming">
297
483
</head>
298
484
<body>
299
485
<div class="nav">
@@ -302,43 +488,33 @@ jobs:
302
488
<a href="mcp_rust_tutorial.html">📖 Tutorial</a>
303
489
<a href="../website/readme.html">📄 README</a>
304
490
</div>
491
+ <div class="container">
305
492
EOF
306
493
307
- # If pandoc is available, convert markdown to HTML
308
- if command -v pandoc >/dev/null 2>&1; then
309
- echo "Converting tutorial markdown to HTML with pandoc..."
310
- if [ -f "mcp_rust_tutorial.md" ]; then
311
- pandoc mcp_rust_tutorial.md -o target/doc/tutorials/mcp_rust_tutorial.html \
312
- --standalone \
313
- --toc \
314
- --toc-depth=3 \
315
- --css=tutorial-style.css \
316
- --template=target/doc/tutorials/template.html 2>/dev/null || {
317
- echo "Pandoc conversion failed, creating simple HTML wrapper..."
318
- cat target/doc/tutorials/template.html > target/doc/tutorials/mcp_rust_tutorial.html
319
- echo '<div class="tutorial-content">' >> target/doc/tutorials/mcp_rust_tutorial.html
320
- echo '<pre>' >> target/doc/tutorials/mcp_rust_tutorial.html
321
- cat mcp_rust_tutorial.md >> target/doc/tutorials/mcp_rust_tutorial.html
322
- echo '</pre>' >> target/doc/tutorials/mcp_rust_tutorial.html
323
- echo '</div></body></html>' >> target/doc/tutorials/mcp_rust_tutorial.html
324
- }
325
- else
326
- echo "Tutorial markdown not found, creating placeholder..."
327
- cat target/doc/tutorials/template.html > target/doc/tutorials/mcp_rust_tutorial.html
328
- echo '<h1>Tutorial Coming Soon</h1><p>The tutorial content will be available soon.</p></body></html>' >> target/doc/tutorials/mcp_rust_tutorial.html
329
- fi
494
+ # Convert markdown to beautiful HTML using pandoc
495
+ if [ -f "mcp_rust_tutorial.md" ]; then
496
+ echo "Converting tutorial markdown to beautiful HTML..."
497
+ pandoc mcp_rust_tutorial.md \
498
+ -f markdown+smart+pipe_tables+fenced_code_blocks+definition_lists \
499
+ -t html5 \
500
+ --standalone \
501
+ --toc \
502
+ --toc-depth=4 \
503
+ --section-divs \
504
+ --html-q-tags \
505
+ --highlight-style=github \
506
+ --template=target/doc/tutorials/template.html \
507
+ -o target/doc/tutorials/mcp_rust_tutorial.html \
508
+ --metadata title="MCP Rust Tutorial - Complete Learning Resource"
509
+
510
+ # Add closing tags
511
+ echo '</div><div class="footer">🦀 <strong>MCP Rust Tutorial</strong> | Built with ❤️ for the Rust Community</div></body></html>' >> target/doc/tutorials/mcp_rust_tutorial.html
512
+
513
+ echo "✅ Beautiful tutorial HTML created successfully!"
330
514
else
331
- echo "Creating simple HTML wrapper for tutorial ..."
515
+ echo "⚠️ Tutorial markdown not found, creating placeholder ..."
332
516
cat target/doc/tutorials/template.html > target/doc/tutorials/mcp_rust_tutorial.html
333
- echo '<div class="tutorial-content">' >> target/doc/tutorials/mcp_rust_tutorial.html
334
- if [ -f "mcp_rust_tutorial.md" ]; then
335
- echo '<pre>' >> target/doc/tutorials/mcp_rust_tutorial.html
336
- cat mcp_rust_tutorial.md >> target/doc/tutorials/mcp_rust_tutorial.html
337
- echo '</pre>' >> target/doc/tutorials/mcp_rust_tutorial.html
338
- else
339
- echo '<h1>Tutorial Coming Soon</h1><p>The tutorial content will be available soon.</p>' >> target/doc/tutorials/mcp_rust_tutorial.html
340
- fi
341
- echo '</div></body></html>' >> target/doc/tutorials/mcp_rust_tutorial.html
517
+ echo '<h1>🚧 Tutorial Coming Soon</h1><p>The comprehensive MCP Rust tutorial will be available soon.</p></div></body></html>' >> target/doc/tutorials/mcp_rust_tutorial.html
342
518
fi
343
519
344
520
# Create a CSS file for tutorials
0 commit comments