diff --git a/.gitea/workflows/repro.yaml b/.gitea/workflows/repro.yaml index a960b52..9299cab 100644 --- a/.gitea/workflows/repro.yaml +++ b/.gitea/workflows/repro.yaml @@ -28,17 +28,37 @@ jobs: extra-substituters = https://nix-cache.nul.ie extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= - - name: Build devshell with full logs + - name: Nix build-dir / store settings run: | - set -eo pipefail - # -L prints full build logs inline (including the gtest assertion that - # fails); --keep-going surfaces the failure without aborting early. - # determinate-nix isn't in the cache yet (the failing master run never - # pushed it), so this rebuilds it and reruns the unit tests. - nix build -L --keep-going --no-link .#ci.x86_64-linux.shell 2>&1 | tee repro.log + echo "===== nix config (build-dir / store / sandbox) =====" + nix config show 2>/dev/null | grep -iE 'build-dir|store|sandbox|temp' || true + echo "===== TMPDIR/env =====" + echo "TMPDIR=$TMPDIR RUNNER_TEMP=$RUNNER_TEMP GITHUB_WORKSPACE=$GITHUB_WORKSPACE HOME=$HOME" - - name: Show failing assertion - if: failure() + - name: Mount table run: | - echo "===== readLinkAt / gtest failure detail =====" - grep -nE 'FAILED|readLinkAt|Failure|Expected|Actual|Value of|which is|error:' repro.log || true + echo "===== df -T =====" + df -T || df -h + echo "===== mount =====" + mount 2>/dev/null | grep -iE 'overlay|tmpfs|/nix|ext4|xfs|btrfs|9p|fuse' || mount + + - name: Symlink-length probe + run: | + # Determine, per candidate dir, the longest symlink target that can be + # created (the test needs PATH_MAX/2 = 2048 and PATH_MAX-1 = 4095). + probe() { + local d="$1" + [ -d "$d" ] || { echo " $d: (absent)"; return; } + local fstype; fstype=$(stat -f -c %T "$d" 2>/dev/null || echo '?') + local res="" + for n in 256 1000 2048 3000 4095; do + local tgt; tgt=$(head -c "$n" < /dev/zero | tr '\0' 'y') + if ln -sf "$tgt" "$d/.symtest.$n" 2>/dev/null; then res="$res $n"; else res="$res !$n"; fi + rm -f "$d/.symtest.$n" 2>/dev/null || true + done + echo " $d [$fstype]:$res" + } + echo "===== max symlink target length per dir (n = ok, !n = ENAMETOOLONG) =====" + for d in /tmp /var/tmp /dev/shm /nix /nix/var "$HOME" "$RUNNER_TEMP" "$GITHUB_WORKSPACE" /root /build; do + probe "$d" + done