- CLAUDE.md: document /release slash command with examples - guide/README.md: add visual-reference.md to contents table - scripts/compile-questions.sh: quiz compilation utility Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
68 lines
1.9 KiB
Bash
Executable file
68 lines
1.9 KiB
Bash
Executable file
#!/bin/bash
|
|
# compile-questions.sh — Compile quiz YAML files into landing questions.json
|
|
# Usage: ./scripts/compile-questions.sh
|
|
#
|
|
# Reads all quiz/questions/*.yaml, merges into a single JSON with categories + questions.
|
|
# Output: $LANDING_DIR/questions.json
|
|
set -euo pipefail
|
|
|
|
GUIDE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
LANDING_DIR="/Users/florianbruniaux/Sites/perso/claude-code-ultimate-guide-landing"
|
|
YAML_DIR="$GUIDE_DIR/quiz/questions"
|
|
NODE_PATH="$GUIDE_DIR/quiz/node_modules"
|
|
OUTPUT="$LANDING_DIR/questions.json"
|
|
|
|
if [ ! -d "$YAML_DIR" ]; then
|
|
echo "ERROR: Quiz directory not found: $YAML_DIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$NODE_PATH/yaml" ]; then
|
|
echo "ERROR: yaml module not found in $NODE_PATH" >&2
|
|
echo "Run: cd quiz && npm install yaml" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NODE_PATH="$NODE_PATH" node -e "
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const YAML = require('yaml');
|
|
|
|
const yamlDir = process.argv[1];
|
|
const files = fs.readdirSync(yamlDir)
|
|
.filter(f => f.endsWith('.yaml'))
|
|
.sort();
|
|
|
|
const categories = [];
|
|
const questions = [];
|
|
|
|
for (const file of files) {
|
|
const content = fs.readFileSync(path.join(yamlDir, file), 'utf8');
|
|
const data = YAML.parse(content);
|
|
|
|
if (!data.category || !data.category_id || !data.questions) {
|
|
console.error('Invalid YAML structure in ' + file);
|
|
process.exit(1);
|
|
}
|
|
|
|
categories.push({ id: data.category_id, name: data.category });
|
|
|
|
for (const q of data.questions) {
|
|
questions.push({
|
|
id: q.id,
|
|
difficulty: q.difficulty,
|
|
profiles: q.profiles,
|
|
category_id: data.category_id,
|
|
question: q.question,
|
|
options: q.options,
|
|
correct: q.correct,
|
|
explanation: q.explanation,
|
|
doc_reference: q.doc_reference
|
|
});
|
|
}
|
|
}
|
|
|
|
const output = JSON.stringify({ categories, questions }, null, 2);
|
|
fs.writeFileSync(process.argv[2], output + '\n');
|
|
console.log(questions.length + ' questions compiled (' + files.length + ' categories)');
|
|
" "$YAML_DIR" "$OUTPUT"
|