diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml index af7de5e6..7dfb71fb 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 f2fad0e9..0884b76f 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