#!/usr/bin/env bash # Full build pipeline: fetch rankings → fetch deadlines → generate content → hugo build. # # Usage: # ./build.sh # full build # ./build.sh --skip-rankings # use cached CSVs # ./build.sh --skip-deadlines # use cached deadlines.yaml # ./build.sh --dev # run hugo server instead of building # ./build.sh --query "edge cloud" # pass keyword to ICORE fetch set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT_DIR" ICORE_QUERY="" SKIP_RANKINGS=0 SKIP_DEADLINES=0 HUGO_MODE="build" while [[ $# -gt 0 ]]; do case "$1" in --query) ICORE_QUERY="$2"; shift 2 ;; --skip-rankings) SKIP_RANKINGS=1; shift ;; --skip-deadlines) SKIP_DEADLINES=1; shift ;; --dev) HUGO_MODE="serve"; shift ;; *) echo "Unknown option: $1"; exit 1 ;; esac done # Ensure uv environment is ready uv sync --quiet if [[ $SKIP_RANKINGS -eq 0 ]]; then echo "==> Fetching ICORE rankings …" uv run pa-fetch-icore --query "$ICORE_QUERY" echo "==> Fetching SCImago rankings …" uv run pa-fetch-scimago fi if [[ $SKIP_DEADLINES -eq 0 ]]; then # Only run if venues.yaml has at least one conference if uv run python -c " import yaml, sys v = yaml.safe_load(open('site/data/venues.yaml')) sys.exit(0 if (v or {}).get('conferences') else 1) " 2>/dev/null; then echo "==> Fetching deadlines …" uv run pa-fetch-deadlines else echo "==> Skipping deadlines (no conferences in site/data/venues.yaml)" fi fi echo "==> Generating Hugo content …" uv run pa-generate echo "==> Building Hugo site …" if [[ "$HUGO_MODE" == "serve" ]]; then hugo --source site server --buildDrafts --bind 0.0.0.0 else hugo --source site --minify echo "==> Site built in site/public/" fi