#!/usr/bin/env bash
# Measure whether `docker compose config` accepts anchors + merge keys and
# multi-document YAML. Requires Docker Desktop (compose plugin).
#
# Run:
#   cd scripts/benchmarks/yaml-tool-acceptance
#   bash measure-compose.sh    # writes results-compose.json
set -u
HERE="$(cd "$(dirname "$0")" && pwd)"

compose_version="$(docker compose version --short 2>/dev/null || docker compose version)"

run_case() {
  local id="$1" file="$2"
  local out exit_code
  out="$(docker compose -f "$HERE/fixtures/$file" config 2>&1)"
  exit_code=$?
  if [ $exit_code -eq 0 ]; then
    printf '{"id":"%s","outcome":"accepted","services":%s}' \
      "$id" "$(printf '%s' "$out" | grep -cE '^\s{2}[a-z]+:$')"
  else
    printf '{"id":"%s","outcome":"error","message":%s}' \
      "$id" "$(printf '%s' "$out" | head -1 | python3 -c 'import json,sys;print(json.dumps(sys.stdin.read().strip()[:200]))')"
  fi
}

{
  printf '{"generatedBy":"measure-compose.sh","composeVersion":"%s","results":[' "$compose_version"
  run_case "anchor-merge" "compose-anchor-merge.yaml"
  printf ','
  run_case "multi-doc" "compose-multidoc.yaml"
  printf ']}\n'
} | python3 -m json.tool > "$HERE/results-compose.json"

cat "$HERE/results-compose.json"
