name: CI repro (readLinkAt) # Throwaway workflow to reproduce the determinate-nix `readLinkAt.works` unit # test failure seen in the master CI build, and capture the full gtest log. # Runs only on this branch; delete the branch when done. on: push: branches: [ci-repro-readlinkat] jobs: repro: name: Reproduce determinate-nix test failure runs-on: ubuntu-26.04 steps: - uses: actions/checkout@v6 - uses: DeterminateSystems/determinate-nix-action@v3 with: github-token: ${{ secrets.GH_PULL_TOKEN }} extra-conf: | sandbox-fallback = false cores = 6 lazy-trees = true eval-cores = 0 accept-flake-config = true extra-substituters = https://nix-cache.nul.ie extra-trusted-public-keys = nix-cache.nul.ie-1:BzH5yMfF4HbzY1C977XzOxoPhEc9Zbu39ftPkUbH+m4= - name: Nix build-dir / store settings run: | 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: Mount table run: | 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