Ctrl K
ComunidadGuías…

script/gpforum-homebrew-env

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/sh
# SPDX-FileCopyrightText: 2026 GPForum Contributors
# SPDX-License-Identifier: BSD-3-Clause

set -eu

# Print PATH exports for Homebrew's PostgreSQL client tools on macOS.
# Homebrew installs a versioned PostgreSQL (postgresql@18) keg-only: its
# psql, pg_dump and pg_config live under $(brew --prefix)/opt/postgresql@NN/bin
# and are not on PATH until put there. Safe no-op on Linux CI and on hosts
# without Homebrew (exit 0).

usage() {
    cat <<'USAGE'
Usage: script/gpforum-homebrew-env [--exports|--print-path|--check|--help]

  --exports     print `export PATH=...` for eval (default)
  --print-path  print the Homebrew PostgreSQL bin dir only
  --check       verify psql / pg_dump / pg_config resolve under Homebrew
  --help        show this help

Environment:
  GPFORUM_HOMEBREW_PREFIX  Homebrew prefix (default: `brew --prefix`, else
                           /opt/homebrew, else /usr/local); for tests
  GPFORUM_HOMEBREW_PG_BIN  a PostgreSQL bin dir to use as is
  GPFORUM_UNAME            override `uname -s` (default from uname); for tests

On non-Darwin hosts, or when Homebrew is absent, --exports/--print-path print
nothing and exit 0. --check prints a skip line and exits 0 so Linux CI stays
green. Operators on macOS:

  eval "$(script/gpforum-homebrew-env)"
  script/gpforum-homebrew-env --check
USAGE
}

mode=exports
for argument in "$@"; do
    case "$argument" in
        --exports)
            mode=exports
            ;;
        --print-path)
            mode=print_path
            ;;
        --check)
            mode=check
            ;;
        --help|-h)
            usage
            exit 0
            ;;
        *)
            echo "gpforum-homebrew-env: unknown option: $argument" >&2
            usage >&2
            exit 1
            ;;
    esac
done

default_prefix() {
    if command -v brew >/dev/null 2>&1; then
        brew --prefix 2>/dev/null && return 0
    fi
    for candidate in /opt/homebrew /usr/local; do
        if [ -x "$candidate/bin/brew" ]; then
            printf '%s\n' "$candidate"
            return 0
        fi
    done
    printf '%s\n' /opt/homebrew
}

uname_s=${GPFORUM_UNAME:-$(uname -s 2>/dev/null || echo unknown)}

skip() {
    if [ "$mode" = check ]; then
        printf 'skip: %s\n' "$*"
    fi
    exit 0
}

if [ "$uname_s" != Darwin ]; then
    skip "not Darwin (uname=$uname_s); Homebrew PATH helper is a no-op"
fi

prefix=${GPFORUM_HOMEBREW_PREFIX:-$(default_prefix)}

if [ ! -d "$prefix" ]; then
    skip "Homebrew prefix missing: $prefix"
fi

find_pg_bin() {
    if [ -n "${GPFORUM_HOMEBREW_PG_BIN:-}" ] && [ -d "${GPFORUM_HOMEBREW_PG_BIN}" ]; then
        printf '%s\n' "${GPFORUM_HOMEBREW_PG_BIN}"
        return 0
    fi
    for candidate in \
        "$prefix/opt/postgresql@18/bin" \
        "$prefix/opt/postgresql@17/bin" \
        "$prefix/opt/postgresql@16/bin" \
        "$prefix/opt/postgresql@15/bin" \
        "$prefix/opt/postgresql@14/bin"
    do
        if [ -d "$candidate" ]; then
            printf '%s\n' "$candidate"
            return 0
        fi
    done
    return 1
}

pg_bin=$(find_pg_bin) || {
    if [ "$mode" = check ]; then
        echo "gpforum-homebrew-env: no Homebrew PostgreSQL under $prefix/opt/postgresql@NN/bin" >&2
        echo "Install e.g. brew install postgresql@18" >&2
        exit 1
    fi
    exit 0
}

case "$mode" in
    print_path)
        printf '%s\n' "$pg_bin"
        ;;
    exports)
        printf 'export PATH="%s:$PATH"\n' "$pg_bin"
        ;;
    check)
        PATH="$pg_bin:$PATH"
        export PATH
        missing=0
        for tool in psql pg_dump pg_config; do
            resolved=$(command -v "$tool" 2>/dev/null || true)
            case "$resolved" in
                "$prefix"/*)
                    printf 'ok: %s -> %s\n' "$tool" "$resolved"
                    ;;
                *)
                    echo "missing or non-Homebrew: $tool -> ${resolved:-absent}" >&2
                    missing=1
                    ;;
            esac
        done
        if [ "$missing" -ne 0 ]; then
            echo "gpforum-homebrew-env: put Homebrew PostgreSQL bins on PATH first:" >&2
            echo "  eval \"\$(script/gpforum-homebrew-env)\"" >&2
            exit 1
        fi
        printf 'ok: homebrew_prefix -> %s\n' "$prefix"
        printf 'ok: homebrew_pg_bin -> %s\n' "$pg_bin"
        ;;
esac