fix: libexec

pbarnett/homebrew-recipe
Peter Barnett 2025-08-22 17:57:28 -04:00
parent 87f8d1c425
commit 97afe1a9fe
1 changed files with 85 additions and 7 deletions

View File

@ -14,17 +14,84 @@ class Influxdb3Core < Formula
end
end
# Install the pre-compiled binary and configure the system
def install
bin.install "influxdb3"
# install influxdb3 binary and python/ in the libexec dir
libexec.install "influxdb3"
if File.directory?("python")
(lib/"python").install Dir["python/*"]
(bin/"python").make_symlink(lib/"python")
(libexec/"python").install Dir["python/*"]
else
odie "Python runtime not found in bundle. InfluxDB 3 Core requires bundled Python."
end
# Create a wrapper to call influxdb3 from the unversioned libexec dir. Use
# the unversioned #{HOMEBREW_PREFIX}/opt/influxdb3-core/libexec/influxdb3 to
# help with upgrades. #{HOMEBREW_PREFIX}/opt/influxdb3-core is a symlink
# into ../Cellar/influxdb3-core/<VERSION> created automatically by brew.
(bin/"influxdb3").write <<~EOS
#!/bin/bash
# '#{HOMEBREW_PREFIX}/opt/influxdb3-core/libexec/python/bin/python -m venv'
# unfortunately resolves symlinks for the 'executable' within pyvenv.cfg.
# Find the venv and then modify pyvenv.cfg before server startup.
if [ "$1" = "serve" ]; then
pyvenv_cfg=
# Priority 1: VIRTUAL_ENV
if [ -n "$VIRTUAL_ENV" ]; then
pyvenv_cfg="$VIRTUAL_ENV/pyvenv.cfg"
else
# Priority 2: --virtual-env-location
for ((i=1; i<=$#; i++)); do
arg="${!i}"
next_idx=$((i+1))
next_arg="${!next_idx}"
if [[ "$arg" == "--virtual-env-location" ]] && [[ -n "$next_arg" ]]; then
# --virtual-env-location /path/to/foo
pyvenv_cfg="$next_arg/pyvenv.cfg"
break
elif [[ "$arg" == --virtual-env-location=* ]]; then
# --virtual-env-location=/path/to/foo
pyvenv_cfg="${arg#*=}/pyvenv.cfg"
break
fi
done
# Priority 3: INFLUXDB3_PLUGIN_DIR
if [ -z "$pyvenv_cfg" ] && [ -n "$INFLUXDB3_PLUGIN_DIR" ]; then
pyvenv_cfg="$INFLUXDB3_PLUGIN_DIR/.venv/pyvenv.cfg"
fi
# Priority 4: --plugin-dir
if [ -z "$pyvenv_cfg" ]; then
for ((i=1; i<=$#; i++)); do
arg="${!i}"
next_idx=$((i+1))
next_arg="${!next_idx}"
if [[ "$arg" == "--plugin-dir" ]] && [[ -n "$next_arg" ]]; then
# --plugin-dir /path/to/bar
pyvenv_cfg="$next_arg/.venv/pyvenv.cfg"
break
elif [[ "$arg" == --plugin-dir=* ]]; then
# --plugin-dir=/path/to/bar
pyvenv_cfg="${arg#*=}/.venv/pyvenv.cfg"
break
fi
done
fi
fi
# Update the pyvenv.cfg file
if [ -e "$pyvenv_cfg" ]; then
sed -i '' 's|/Cellar/influxdb3-core/[^/]*/|/opt/influxdb3-core/|g' "$pyvenv_cfg"
fi
fi
exec "#{HOMEBREW_PREFIX}/opt/influxdb3-core/libexec/influxdb3" "$@"
EOS
(bin/"influxdb3").chmod(0755)
# Create necessary directories for storing data, plugins, and the config
data_dir = var/"lib/influxdb3"
data_dir.mkpath
@ -141,7 +208,7 @@ class Influxdb3Core < Formula
PLUGIN_DIR="${INFLUXDB3_PLUGIN_DIR:-$(read_config "PLUGIN_DIR" "/opt/homebrew/lib/influxdb3/plugins")}"
# Start building command
ARGS=("#{opt_bin}/influxdb3" "serve" "--node-id" "$NODE_ID" "--object-store" "$OBJECT_STORE")
ARGS=("#{HOMEBREW_PREFIX}/bin/influxdb3" "serve" "--node-id" "$NODE_ID" "--object-store" "$OBJECT_STORE")
# Add object store specific arguments
case "$OBJECT_STORE" in
@ -249,23 +316,34 @@ class Influxdb3Core < Formula
end
test do
# Test wrapper script exists and is executable
assert_path_exists bin/"influxdb3"
assert_predicate bin/"influxdb3", :executable?
# Test actual binary exists in libexec
assert_path_exists libexec/"influxdb3"
assert_predicate libexec/"influxdb3", :executable?
# Test bundled Python exists in libexec
assert_path_exists libexec/"python"
# Test startup script exists
assert_path_exists bin/"influxdb3-core"
assert_predicate bin/"influxdb3-core", :executable?
# Test wrapper script forwards help command
output = shell_output("#{bin}/influxdb3 --help")
assert_match "InfluxDB 3", output
# Test configuration file
assert_path_exists etc/"influxdb3/influxdb3.conf"
config_content = (etc/"influxdb3/influxdb3.conf").read
assert_match "NODE_ID=", config_content
assert_match "OBJECT_STORE_TYPE=", config_content
# Test directory structure
assert_path_exists var/"lib/influxdb3"
assert_path_exists var/"lib/influxdb3/README.txt"
assert_path_exists var/"log/influxdb3"
# Test that we can start the server briefly (memory mode for testing)