|
2 | 2 | set -euo pipefail |
3 | 3 |
|
4 | 4 | ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
5 | | -DB_PATH="${1:-$ROOT_DIR/standards_cache.sqlite}" |
6 | 5 | VENV_DIR="$ROOT_DIR/venv" |
| 6 | +CACHE_FILE="${1:-$ROOT_DIR/standards_cache.sqlite}" |
| 7 | +TIMESTAMP="$(date +%Y%m%d-%H%M%S)" |
| 8 | +BACKUP_FILE="${CACHE_FILE}.bak.${TIMESTAMP}" |
7 | 9 |
|
8 | | -if [[ ! -x "$VENV_DIR/bin/python" ]]; then |
| 10 | +if [[ ! -d "$VENV_DIR" ]]; then |
| 11 | + echo "Creating virtual environment in $VENV_DIR" |
9 | 12 | python3 -m venv "$VENV_DIR" |
10 | 13 | fi |
11 | 14 |
|
12 | 15 | source "$VENV_DIR/bin/activate" |
13 | 16 |
|
14 | | -# FIX: always install requirements to pick up new/updated packages |
15 | | -"$VENV_DIR/bin/python" -m pip install -r "$ROOT_DIR/requirements.txt" |
| 17 | +echo "Installing Python runtime dependencies" |
| 18 | +pip install -r "$ROOT_DIR/requirements.txt" |
16 | 19 |
|
17 | | -if [[ ! -f "$DB_PATH" ]]; then |
18 | | - echo "Database file does not exist: $DB_PATH" >&2 |
19 | | - exit 1 |
| 20 | +if [[ -f "$CACHE_FILE" ]]; then |
| 21 | + cp "$CACHE_FILE" "$BACKUP_FILE" |
| 22 | + echo "Backed up database to $BACKUP_FILE" |
20 | 23 | fi |
21 | 24 |
|
22 | | -# FIX: add PID to backup filename to avoid collisions |
23 | | -BACKUP_FILE="${DB_PATH}.$(date +%Y%m%d%H%M%S)_$$.bak" |
| 25 | +export CRE_NO_CALCULATE_GAP_ANALYSIS=1 |
| 26 | +export CRE_NO_GEN_EMBEDDINGS=1 |
24 | 27 |
|
25 | | -# Use sqlite3 backup (safe for live DB) and verify integrity |
26 | | -"$VENV_DIR/bin/python" -c " |
27 | | -import sqlite3, sys |
28 | | -src, dst = sys.argv[1], sys.argv[2] |
29 | | -try: |
30 | | - with sqlite3.connect(src) as src_conn, sqlite3.connect(dst) as dst_conn: |
31 | | - src_conn.backup(dst_conn) |
32 | | - cur = dst_conn.cursor() |
33 | | - cur.execute('PRAGMA integrity_check') |
34 | | - if cur.fetchone()[0] != 'ok': |
35 | | - print('Integrity check failed for backup', file=sys.stderr) |
36 | | - sys.exit(1) |
37 | | -except Exception as e: |
38 | | - print(f'Backup failed: {e}', file=sys.stderr) |
39 | | - sys.exit(1) |
40 | | -" "$DB_PATH" "$BACKUP_FILE" |
| 28 | +echo "Importing OWASP Cheat Sheet data into $CACHE_FILE" |
| 29 | +python "$ROOT_DIR/cre.py" --cheatsheets_in --cache_file "$CACHE_FILE" |
41 | 30 |
|
42 | | -if [[ ! -f "$BACKUP_FILE" ]]; then |
43 | | - echo "Failed to create backup at $BACKUP_FILE" >&2 |
44 | | - exit 1 |
45 | | -fi |
46 | | -echo "Created verified backup at $BACKUP_FILE" |
47 | | - |
48 | | -CRE_NO_CALCULATE_GAP_ANALYSIS=1 \ |
49 | | -CRE_NO_GEN_EMBEDDINGS=1 \ |
50 | | -"$VENV_DIR/bin/python" "$ROOT_DIR/cre.py" --cheatsheets_in --cache_file "$DB_PATH" |
51 | | - |
52 | | -"$VENV_DIR/bin/python" - "$DB_PATH" <<'PY' |
| 31 | +# Normalise GitHub links to official HTML links |
| 32 | +python - "$CACHE_FILE" <<'PY' |
53 | 33 | import os |
54 | 34 | import sqlite3 |
55 | 35 | import sys |
|
0 commit comments