113 lines
3.0 KiB
Bash
113 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
###############################################
|
|
# Resolve important directories
|
|
###############################################
|
|
|
|
# Directory where this script lives
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Services live one directory above the script's directory
|
|
SERVICES_DIR="$(cd "$ROOT/.." && pwd)"
|
|
|
|
###############################################
|
|
# Skip list (folder names, match exactly)
|
|
###############################################
|
|
SKIP_FILE="$ROOT/gateway_skip.txt"
|
|
SKIP_PROJECTS=()
|
|
|
|
if [[ -f "$SKIP_FILE" ]]; then
|
|
# Read non-empty lines ignoring comments
|
|
while IFS= read -r line; do
|
|
[[ -z "$line" || "$line" =~ ^# ]] && continue
|
|
SKIP_PROJECTS+=("$line")
|
|
done < "$SKIP_FILE"
|
|
else
|
|
echo "WARNING: skip-projects.txt not found — no projects will be skipped."
|
|
fi
|
|
|
|
echo "----------------------------------------"
|
|
echo " Finding GraphQL services..."
|
|
echo "----------------------------------------"
|
|
|
|
SERVICE_LIST=()
|
|
|
|
# Convert skip projects into a single searchable string
|
|
SKIP_STRING=" ${SKIP_PROJECTS[*]} "
|
|
|
|
# Find service directories
|
|
shopt -s nullglob
|
|
for FOLDER in "$SERVICES_DIR"/FictionArchive.Service.*; do
|
|
[ -d "$FOLDER" ] || continue
|
|
|
|
PROJECT_NAME="$(basename "$FOLDER")"
|
|
|
|
# Skip entries that match the skip list
|
|
if [[ "$SKIP_STRING" == *" $PROJECT_NAME "* ]]; then
|
|
echo "Skipping service: $PROJECT_NAME"
|
|
continue
|
|
fi
|
|
|
|
echo "Found service: $PROJECT_NAME"
|
|
SERVICE_LIST+=("$FOLDER")
|
|
done
|
|
shopt -u nullglob
|
|
|
|
echo
|
|
echo "----------------------------------------"
|
|
echo " Exporting schemas and packing subgraphs..."
|
|
echo "----------------------------------------"
|
|
|
|
for SERVICE in "${SERVICE_LIST[@]}"; do
|
|
PROJECT_NAME="$(basename "$SERVICE")"
|
|
|
|
echo "Processing service: $PROJECT_NAME"
|
|
pushd "$SERVICE" >/dev/null
|
|
|
|
echo "Building service..."
|
|
dotnet build -c Release >/dev/null
|
|
|
|
# Automatically detect built DLL in bin/Release/<TFM>/
|
|
DLL_PATH="$(find "bin/Release" -maxdepth 3 -name '*.dll' | head -n 1)"
|
|
if [[ -z "$DLL_PATH" ]]; then
|
|
echo "ERROR: Could not locate DLL for $PROJECT_NAME"
|
|
popd >/dev/null
|
|
exit 1
|
|
fi
|
|
|
|
echo "Running schema export..."
|
|
dotnet exec "$DLL_PATH" schema export --output schema.graphql
|
|
|
|
echo "Running subgraph pack..."
|
|
fusion subgraph pack
|
|
|
|
popd >/dev/null
|
|
echo "Completed: $PROJECT_NAME"
|
|
echo
|
|
done
|
|
|
|
echo "----------------------------------------"
|
|
echo " Running fusion compose..."
|
|
echo "----------------------------------------"
|
|
|
|
pushd "$ROOT" >/dev/null
|
|
|
|
# Remove old composition file
|
|
rm -f gateway.fgp
|
|
|
|
for SERVICE in "${SERVICE_LIST[@]}"; do
|
|
SERVICE_NAME="$(basename "$SERVICE")"
|
|
|
|
echo "Composing subgraph: $SERVICE_NAME"
|
|
|
|
# Note: Fusion compose must reference parent dir (services live above ROOT)
|
|
fusion compose -p gateway.fgp -s "../$SERVICE_NAME"
|
|
done
|
|
|
|
popd >/dev/null
|
|
|
|
echo "----------------------------------------"
|
|
echo " Fusion build complete!"
|
|
echo "----------------------------------------"
|