From ab0d501f3b5eb8a1df3c4515dd75471152090ee8 Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Sat, 29 Aug 2026 15:44:37 -0700 Subject: [PATCH] ci: use file-based libpod locks in the lint job Diagnostics from the hung run show the stuck podman exec is the ONLY process with the libpod lock segment mapped: the SHM container-lock semaphore was leaked by a process that died holding it, and SHM semaphores never auto-release. Switch libpod to lock_type=file (flock releases on holder death) before any podman use. Also raise the wrapper's hang guard back to 900s for cold-cache lint runs. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01NaDYk2PGWfSLEXeN5CBJFN --- .github/workflows/golangci-lint.yaml | 6 ++++++ hack/golangci-lint | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml index af7de5e64..7dfb71fbd 100644 --- a/.github/workflows/golangci-lint.yaml +++ b/.github/workflows/golangci-lint.yaml @@ -31,6 +31,12 @@ jobs: - name: run build for linting run: | sudo apt install podman -y + # libpod's default SHM semaphores leak when a lock holder dies + # (observed on runner images >= 20260823: an exec-session cleanup + # process dies holding the container lock and every later podman + # exec blocks forever in sem_wait); file locks auto-release + mkdir -p ~/.config/containers + printf '[engine]\nlock_type = "file"\n' >> ~/.config/containers/containers.conf sudo ln -s $(realpath ./hack/golangci-lint) /usr/bin/golangci-lint make golangci-lint-container BUILDER_TARGET=builder-no-darwin DOCKER_BUILD_OPTS="--layers --cache-to ghcr.io/streamplace/streamplace --cache-from ghcr.io/streamplace/streamplace" diff --git a/hack/golangci-lint b/hack/golangci-lint index f2fad0e96..0884b76f0 100755 --- a/hack/golangci-lint +++ b/hack/golangci-lint @@ -19,7 +19,7 @@ podman exec golangci-lint golangci-lint "$@" "$OUT" 2>"$ERR" & pid=$! seconds=0 -while kill -0 "$pid" 2>/dev/null && [ "$seconds" -lt 300 ]; do +while kill -0 "$pid" 2>/dev/null && [ "$seconds" -lt 900 ]; do sleep 1 seconds=$((seconds + 1)) done -- 2.51.2