check-provider-replaces.sh 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. provider_prefix="github.com/external-secrets/external-secrets/providers/v1"
  4. failed=0
  5. for provider_dir in providers/v1/*/; do
  6. [[ -f "${provider_dir}go.mod" ]] || continue
  7. if ! module_path=$(GOWORK=off go -C "$provider_dir" list -m -mod=readonly -f '{{.Path}}'); then
  8. failed=1
  9. continue
  10. fi
  11. # Load production and test imports without the workspace, which would
  12. # otherwise hide missing requirements by resolving sibling modules locally.
  13. if ! GOWORK=off go -C "$provider_dir" list -mod=readonly -deps -test ./... >/dev/null; then
  14. failed=1
  15. continue
  16. fi
  17. if ! module_graph=$(GOWORK=off go -C "$provider_dir" list -m -mod=readonly -f '{{.Path}}{{with .Replace}} => {{.Path}}{{end}}' all); then
  18. failed=1
  19. continue
  20. fi
  21. while read -r dependency arrow replacement; do
  22. [[ -n "${dependency:-}" ]] || continue
  23. [[ "$dependency" == "$module_path" ]] && continue
  24. [[ "$dependency" == "$provider_prefix/"* ]] || continue
  25. expected="../${dependency##*/}"
  26. if [[ "${arrow:-}" != "=>" || "${replacement:-}" != "$expected" ]]; then
  27. printf '%sgo.mod: provider dependency %s must have:\n' "$provider_dir" "$dependency" >&2
  28. printf 'replace %s => %s\n' "$dependency" "$expected" >&2
  29. failed=1
  30. fi
  31. done <<< "$module_graph"
  32. done
  33. exit "$failed"