Jaypore CI

> Jaypore CI: Minimal, Offline, Local CI system.
Log | Files | Refs | README | LICENSE

generate_readme_index.sh (1530B)


      1 #!/usr/bin/env bash
      2 set -euo pipefail
      3 
      4 README_FILE="${1:-README.md}"
      5 
      6 if [[ ! -f "${README_FILE}" ]]; then
      7   echo "README file not found: ${README_FILE}" >&2
      8   exit 1
      9 fi
     10 
     11 python3 - "$README_FILE" <<'PY'
     12 import sys
     13 import re
     14 from pathlib import Path
     15 
     16 readme_path = Path(sys.argv[1])
     17 text = readme_path.read_text(encoding="utf-8")
     18 
     19 lines = text.splitlines()
     20 dash_lines = [idx for idx, line in enumerate(lines) if line.strip() == '---']
     21 if len(dash_lines) < 2:
     22     raise SystemExit("Expected at least two lines containing only '---' in README")
     23 
     24 heading_pattern = re.compile(r'^(#{2,3})\s+(.*)$', re.MULTILINE)
     25 headings = []
     26 for match in heading_pattern.finditer(text):
     27     level = len(match.group(1))
     28     title = match.group(2).strip()
     29     if not title:
     30         continue
     31     slug = title.lower()
     32     slug = re.sub(r'[^a-z0-9\s-]', '', slug)
     33     slug = re.sub(r'\s+', '-', slug).strip('-')
     34     slug = re.sub(r'-+', '-', slug)
     35     if not slug:
     36         continue
     37     headings.append((level, title, f"#{slug}"))
     38 
     39 index_lines = []
     40 for level, title, anchor in headings:
     41     indent = '' if level == 2 else '    '
     42     index_lines.append(f"{indent}- [{title}]({anchor})")
     43 
     44 first, second = dash_lines[:2]
     45 result_lines = []
     46 result_lines.extend(lines[:first + 1])
     47 result_lines.append('')
     48 if index_lines:
     49     result_lines.extend(index_lines)
     50 result_lines.append('')
     51 result_lines.extend(lines[second:])
     52 
     53 new_text = "\n".join(result_lines)
     54 if not new_text.endswith("\n"):
     55     new_text += "\n"
     56 
     57 readme_path.write_text(new_text, encoding="utf-8")
     58 PY