this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

psycho fis

+61 -54
+61 -54
.tangled/workflows/build.yml
··· 140 140 # ----------------------------------------------------------------- 141 141 # psycopg_c build fix 142 142 # 143 - # psycopg_c's setup.py runs `pg_config` as a bare command via 144 - # subprocess. pip's build-isolation spawns a child process that 145 - # inherits PATH, but in a Nixery container: 146 - # 1. pg_config lives deep in /nix/store/…/bin/ 147 - # 2. The Nix profile PATH entry might not survive pip's venv 148 - # activation or build-env overlay 149 - # 3. /usr/bin and /usr/local/bin may not even exist 143 + # pip's PEP 517 build-isolation spawns an isolated subprocess with 144 + # its own PATH overlay (/tmp/pip-build-env-*/overlay/…) that 145 + # shadows /usr/bin, /usr/local/bin, and any PATH we export here. 146 + # The metadata-generation phase calls `pg_config` as a bare command 147 + # via subprocess.run(["pg_config", ...]) using the ambient PATH — 148 + # NOT the PG_CONFIG env var — so symlinks and exports alone fail. 150 149 # 151 - # Strategy: find pg_config, then make it reachable by EVERY 152 - # conceivable PATH lookup — symlinks, PATH prepend, pip config, 153 - # and global env. 150 + # Fix: use --no-build-isolation for psycopg[c] so the build runs 151 + # directly in our environment where pg_config is on PATH and 152 + # PG_CONFIG is exported. We pre-install the build deps (setuptools, 153 + # wheel) so the non-isolated build succeeds. 154 154 # ----------------------------------------------------------------- 155 - echo "=== Configuring PostgreSQL build flags ===" 155 + echo "=== Locating pg_config ===" 156 156 157 - # --- Locate pg_config --- 158 157 PG_CONFIG_BIN="" 159 158 160 159 # Try 1: already on PATH 161 160 PG_CONFIG_BIN="$(command -v pg_config 2>/dev/null || true)" 162 161 163 - # Try 2: common Nix profile location 162 + # Try 2: common Nix profile locations 164 163 if [ -z "$PG_CONFIG_BIN" ]; then 165 164 for p in /nix/var/nix/profiles/default/bin/pg_config \ 166 165 /run/current-system/sw/bin/pg_config \ ··· 176 175 177 176 echo " pg_config resolved to: ${PG_CONFIG_BIN:-NOT FOUND}" 178 177 179 - if [ -n "$PG_CONFIG_BIN" ]; then 180 - PG_INCLUDEDIR="$($PG_CONFIG_BIN --includedir)" 181 - PG_LIBDIR="$($PG_CONFIG_BIN --libdir)" 182 - PG_BINDIR="$(dirname "$PG_CONFIG_BIN")" 183 - PG_SERVER_INCLUDEDIR="$($PG_CONFIG_BIN --includedir-server 2>/dev/null || echo "$PG_INCLUDEDIR")" 184 - 185 - # --- Symlink into well-known dirs (create them if missing) --- 186 - for d in /usr/local/bin /usr/bin; do 187 - mkdir -p "$d" 2>/dev/null || true 188 - ln -sf "$PG_CONFIG_BIN" "$d/pg_config" 2>/dev/null || true 189 - done 190 - 191 - # --- PATH: prepend pg_config's directory --- 192 - export PATH="${PG_BINDIR}:/usr/local/bin:${PATH}" 193 - 194 - # --- Compiler / linker flags --- 195 - export PG_CONFIG="$PG_CONFIG_BIN" 196 - export LDFLAGS="${LDFLAGS:-} -L${PG_LIBDIR}" 197 - export CPPFLAGS="${CPPFLAGS:-} -I${PG_INCLUDEDIR} -I${PG_SERVER_INCLUDEDIR}" 198 - 199 - echo " PG_CONFIG = $PG_CONFIG" 200 - echo " PG_BINDIR = $PG_BINDIR" 201 - echo " PG_INCLUDEDIR = $PG_INCLUDEDIR" 202 - echo " PG_SERVER_INCLUDEDIR = $PG_SERVER_INCLUDEDIR" 203 - echo " PG_LIBDIR = $PG_LIBDIR" 204 - echo " LDFLAGS = $LDFLAGS" 205 - echo " CPPFLAGS = $CPPFLAGS" 206 - echo " PATH (first 3) = $(echo "$PATH" | tr ':' '\n' | head -3 | tr '\n' ':')" 207 - echo "" 208 - 209 - # --- Verify pg_config is globally callable --- 210 - echo " Smoke test (command -v): $(command -v pg_config 2>&1 || echo FAIL)" 211 - echo " Smoke test (/usr/bin): $(ls -l /usr/bin/pg_config 2>&1 || echo MISSING)" 212 - echo " Smoke test (version): $($PG_CONFIG_BIN --version)" 213 - 214 - # --- Verify a fresh subprocess can find it (mimics what pip does) --- 215 - echo " Subprocess check: $(env PATH="$PATH" pg_config --version 2>&1 || echo 'FAIL — pg_config not reachable from subprocess')" 216 - echo " /usr/local/bin check: $(/usr/local/bin/pg_config --version 2>&1 || echo 'MISSING')" 217 - echo " /usr/bin check: $(/usr/bin/pg_config --version 2>&1 || echo 'MISSING')" 218 - else 178 + if [ -z "$PG_CONFIG_BIN" ]; then 219 179 echo "ERROR: pg_config not found anywhere in the system!" 220 180 echo " Nix store postgresql entries:" 221 181 ls -d /nix/store/*postgresql* 2>/dev/null | head -10 || echo " (none)" ··· 225 185 echo "" 226 186 echo " Current PATH: $PATH" 227 187 echo "" 228 - echo "psycopg_c build WILL fail. Continuing anyway..." 188 + echo "psycopg_c build WILL fail." 189 + exit 1 229 190 fi 230 191 192 + PG_INCLUDEDIR="$($PG_CONFIG_BIN --includedir)" 193 + PG_LIBDIR="$($PG_CONFIG_BIN --libdir)" 194 + PG_BINDIR="$(dirname "$PG_CONFIG_BIN")" 195 + PG_SERVER_INCLUDEDIR="$($PG_CONFIG_BIN --includedir-server 2>/dev/null || echo "$PG_INCLUDEDIR")" 196 + 197 + # --- Symlink into well-known dirs (create them if missing) --- 198 + for d in /usr/local/bin /usr/bin; do 199 + mkdir -p "$d" 2>/dev/null || true 200 + ln -sf "$PG_CONFIG_BIN" "$d/pg_config" 2>/dev/null || true 201 + done 202 + 203 + # --- PATH: prepend pg_config's directory --- 204 + export PATH="${PG_BINDIR}:/usr/local/bin:${PATH}" 205 + 206 + # --- Compiler / linker flags --- 207 + export PG_CONFIG="$PG_CONFIG_BIN" 208 + export LDFLAGS="${LDFLAGS:-} -L${PG_LIBDIR}" 209 + export CPPFLAGS="${CPPFLAGS:-} -I${PG_INCLUDEDIR} -I${PG_SERVER_INCLUDEDIR}" 210 + 211 + echo " PG_CONFIG = $PG_CONFIG" 212 + echo " PG_BINDIR = $PG_BINDIR" 213 + echo " PG_INCLUDEDIR = $PG_INCLUDEDIR" 214 + echo " PG_SERVER_INCLUDEDIR = $PG_SERVER_INCLUDEDIR" 215 + echo " PG_LIBDIR = $PG_LIBDIR" 216 + echo " LDFLAGS = $LDFLAGS" 217 + echo " CPPFLAGS = $CPPFLAGS" 218 + echo " PATH (first 3) = $(echo "$PATH" | tr ':' '\n' | head -3 | tr '\n' ':')" 219 + echo "" 220 + 221 + # --- Verify pg_config is globally callable --- 222 + echo " Smoke test (command -v): $(command -v pg_config 2>&1 || echo FAIL)" 223 + echo " Smoke test (version): $($PG_CONFIG_BIN --version)" 224 + echo "" 225 + 226 + # --- Step 1: Pre-install psycopg[c] build deps and build it 227 + # with --no-build-isolation so our env vars (PG_CONFIG, PATH, 228 + # LDFLAGS, CPPFLAGS) are visible to the build backend. 229 + # This bypasses pip's isolated subprocess that loses PATH. --- 230 + echo "=== Pre-installing psycopg[c] with --no-build-isolation ===" 231 + .venv/bin/pip install setuptools wheel 232 + .venv/bin/pip install --no-build-isolation "psycopg[c]" 233 + echo "" 234 + 235 + # --- Step 2: Install remaining production dependencies via pipenv. 236 + # psycopg[c] is already installed so pipenv will skip rebuilding it. --- 231 237 echo "=== Installing production dependencies ===" 232 238 pipenv install --deploy --categories "packages" 239 + 233 240 echo "=== Virtualenv contents ===" 234 241 .venv/bin/python --version 235 242 .venv/bin/pip list --format=columns | head -20