packages feed

tasty-bdd-0.1.0.2: tools/check-api.sh

#!/usr/bin/env bash
set -euo pipefail
baseline=$1
candidate=$2
scratch=$(mktemp -d)
trap 'rm -rf "$scratch"' EXIT
browse() {
  local source=$1
  local output=$2
  (
    cd "$source"
    ghci -ignore-dot-ghci -v0 -isrc \
      src/Test/Tasty/Bdd.hs src/Test/BDD/Language.hs \
      src/Test/BDD/LanguageFree.hs src/System/CaptureStdout.hs <<'GHC'
:browse Test.Tasty.Bdd
:browse Test.BDD.Language
:browse Test.BDD.LanguageFree
:browse System.CaptureStdout
:quit
GHC
  ) > "$output" 2> "$output.errors"
  # GHCi can return success after a failed load: errors must also fail the gate.
  if grep -E 'error:|Failed,|Could not find module' "$output.errors"; then
    cat "$output.errors" >&2
    return 1
  fi
  grep -Fx 'onEach :: (TestTree -> TestTree) -> TestTree -> TestTree' "$output"
}
browse "$baseline" "$scratch/published.api"
browse "$candidate" "$scratch/candidate.api"
diff -u "$scratch/published.api" "$scratch/candidate.api"
echo 'Public API matches published tasty-bdd 0.1.0.1 on GHC 9.12.3.'