#!/bin/sh set -eu container_name="${1:-n8n}" scan_url="${2:-https://fleetops.itworx.tech/api/v1/integrations/n8n/scheduled-scan}" source_workflow="${3:-n8n/workflows/fleet-ops-data-quality-scan.json}" if [ ! -f .env ]; then echo "Missing deployment .env" >&2 exit 1 fi if [ ! -f "$source_workflow" ]; then echo "Missing workflow export: $source_workflow" >&2 exit 1 fi if ! docker inspect "$container_name" >/dev/null 2>&1; then echo "Existing n8n container not found: $container_name" >&2 exit 1 fi # The workflow file no longer carries the callback token as a literal header value -- the # scan request authenticates via the named n8n Header Auth credential ("Fleet Ops Service # Token"), which must exist in the target n8n instance before this workflow is activated; # see the echo below. temporary_workflow="$(mktemp /tmp/mobilityops-n8n-workflow.XXXXXX.json)" container_workflow="/tmp/mobilityops-scheduled-quality-scan.json" cleanup() { rm -f "$temporary_workflow" docker exec "$container_name" rm -f "$container_workflow" >/dev/null 2>&1 || true } trap cleanup EXIT INT TERM jq --arg scan_url "$scan_url" ' (.nodes[] | select(.id == "scan-node") | .parameters.url) = $scan_url ' "$source_workflow" > "$temporary_workflow" docker cp "$temporary_workflow" "$container_name:$container_workflow" >/dev/null docker exec "$container_name" n8n import:workflow --input="$container_workflow" echo "Imported Fleet Ops — Scheduled Data Quality Scan into container ${container_name}." echo "Before activating: in the n8n UI, create a Header Auth credential named" echo " 'Fleet Ops Service Token' (value = MOBILITYOPS_CALLBACK_TOKEN from .env)" echo "then open the workflow and click Publish. This script does not print or transmit" echo "that secret value, and does not restart the container -- restart it yourself once" echo "the credential is wired up and the workflow is published, if required."