#!/usr/bin/env bash set -Eeuo pipefail umask 077 : "${GITEA_JOB_TOKEN:?GITEA job token missing}" CACHE_ROOT="${CACHE_ROOT:-/var/lib/act_runner/cache/vuln-bsi}" REPO_URL="${REPO_URL:-https://git.apex-project.de/VULN/vuln-bsi.git}" mkdir -p "$CACHE_ROOT" exec 9>"$CACHE_ROOT/.sync.lock" flock -w 300 9 || { echo 'Another mirror run holds the lock' >&2; exit 1; } ASKPASS_FILE="$(mktemp "$CACHE_ROOT/.askpass.XXXXXX")" cleanup() { rm -f "$ASKPASS_FILE"; } trap cleanup EXIT cat > "$ASKPASS_FILE" <<'EOF' #!/bin/sh case "$1" in *Username*) printf '%s\n' 'oauth2' ;; *Password*) printf '%s\n' "$GITEA_JOB_TOKEN" ;; esac EOF chmod 700 "$ASKPASS_FILE" export GIT_ASKPASS="$ASKPASS_FILE" GIT_TERMINAL_PROMPT=0 export GIT_CONFIG_NOSYSTEM=0 if [[ ! -d "$CACHE_ROOT/repo/.git" ]]; then git clone --depth 1 --branch main "$REPO_URL" "$CACHE_ROOT/repo" fi cd "$CACHE_ROOT/repo" # Never overwrite a previous interrupted sync silently. if [[ -n "$(git status --porcelain)" ]]; then echo 'Cached working tree is dirty. Inspect/recover it before retrying.' >&2 exit 1 fi git remote set-url origin "$REPO_URL" git fetch --depth 1 origin main git checkout main git merge --ff-only FETCH_HEAD python3 scripts/sync.py --since-year 2017 --refresh-old 300 python3 scripts/validate.py git config user.name 'Vulnerability Bot' git config user.email 'vulnerability-bot@users.noreply.local' git add -A data state if git diff --cached --quiet; then echo 'No changes to commit' exit 0 fi git commit -m "Update BSI WID CSAF $(date -u +%Y-%m-%dT%H:%M:%SZ)" git push origin HEAD:main