From 0a84f0fb7bdf4fde8b37050c232254fe48539afe Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Tue, 9 Jun 2026 23:04:57 +0100 Subject: [PATCH] ci: add PR-gate workflow + fix module path (#109) * chore: rename module path to logos-delivery-go-bindings The module path still read `logos-messaging-go-bindings`, mismatching the repository name. Rename it to `github.com/logos-messaging/logos-delivery-go-bindings` and update all in-repo imports. gofmt re-sorts a few import blocks as a result (plus two files that were already unformatted on master). Co-Authored-By: Claude Opus 4.8 (1M context) * ci: add PR-gate workflow and golangci-lint config The repo had no `on: pull_request` CI (only workflow_dispatch + nightly schedule), so nothing validated PRs. Add `.github/workflows/pr.yml` that builds libwaku and runs `go build`, `go vet`, golangci-lint, and a test-compile pass on every PR. Add a baseline `.golangci.yml` (standard linters + gofmt). Co-Authored-By: Claude Opus 4.8 (1M context) * ci: scope golangci-lint to new code via new-from-merge-base Run the full `standard` linter set but only report findings introduced since the merge-base with master, so the legacy kernel wrapper's pre-existing issues (unchecked defer-Close, dead helpers) don't drown the gate while new code still gets full coverage. Fetch origin/master so the base ref is available in CI. Co-Authored-By: Claude Opus 4.8 (1M context) * ci: clone logos-delivery outside vendor/ and build in module mode `go build` failed in CI because cloning logos-delivery into `vendor/` put Go into vendor mode against an inconsistent `vendor/modules.txt`. Clone the checkout into `.logos-delivery` instead and set `GOFLAGS=-mod=mod` so the gate always builds in module mode. Co-Authored-By: Claude Opus 4.8 (1M context) * ci: use golangci-lint-action@v7 for golangci-lint v2 v6 of the action rejects golangci-lint v2 versions ("v2 is not supported by golangci-lint-action v6"). Bump to v7. Co-Authored-By: Claude Opus 4.8 (1M context) * ci: cache libwaku, gate go mod tidy, rename LMN_DIR - Rename LMN_DIR -> LOGOS_DELIVERY_DIR across the PR-gate and nightly workflows, the waku Makefile, and the build docs. - Cache the built logos-delivery kernel keyed on its upstream HEAD SHA, skipping the clone + libwaku build while that commit is unchanged. - Add a "go mod tidy is clean" step that fails if go.mod/go.sum drift. Co-Authored-By: Claude Opus 4.8 (1M context) --------- Co-authored-by: Claude Opus 4.8 (1M context) --- .github/workflows/CI.yml | 12 ++--- .github/workflows/pr.yml | 90 +++++++++++++++++++++++++++++++++++ .golangci.yml | 18 +++++++ README.md | 6 +-- go.mod | 2 +- tools/memory_record.go | 2 +- utils/utils.go | 1 - waku/Makefile | 8 ++-- waku/common/envelope.go | 2 +- waku/nodes_basic_test.go | 4 +- waku/nwaku.go | 8 ++-- waku/nwaku_test.go | 6 +-- waku/nwaku_test_utils.go | 6 +-- waku/peer_connections_test.go | 2 +- waku/relay_test.go | 4 +- waku/store_test.go | 4 +- waku/stress_test.go | 2 +- waku/test_data.go | 2 +- waku/utils/utils.go | 8 ++-- 19 files changed, 147 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/pr.yml create mode 100644 .golangci.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9b627a2..18a2954 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -46,9 +46,9 @@ jobs: - name: Build waku bindings run: | - export LMN_DIR=$(pwd)/vendor/logos-delivery - export CGO_CFLAGS="-I${LMN_DIR}/library/" - export CGO_LDFLAGS="-L${LMN_DIR}/build/ -lwaku -Wl,-rpath,${LMN_DIR}/build/" + export LOGOS_DELIVERY_DIR=$(pwd)/vendor/logos-delivery + export CGO_CFLAGS="-I${LOGOS_DELIVERY_DIR}/library/" + export CGO_LDFLAGS="-L${LOGOS_DELIVERY_DIR}/build/ -lwaku -Wl,-rpath,${LOGOS_DELIVERY_DIR}/build/" make -C waku build - name: Increase ulimit @@ -58,9 +58,9 @@ jobs: run: | set -euo pipefail cd waku - export LMN_DIR=$(pwd)/vendor/logos-delivery - export CGO_CFLAGS="-I${LMN_DIR}/library/" - export CGO_LDFLAGS="-L${LMN_DIR}/build/ -lwaku -Wl,-rpath,${LMN_DIR}/build/" + export LOGOS_DELIVERY_DIR=$(pwd)/vendor/logos-delivery + export CGO_CFLAGS="-I${LOGOS_DELIVERY_DIR}/library/" + export CGO_LDFLAGS="-L${LOGOS_DELIVERY_DIR}/build/ -lwaku -Wl,-rpath,${LOGOS_DELIVERY_DIR}/build/" go test -count=10 -p=1 -v -timeout=360m . | tee ../testlogs.log - name: Upload daily test logs diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..6ef442a --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,90 @@ +name: PR + +on: + pull_request: + branches: + - master + +# Cancel superseded runs on the same PR. +concurrency: + group: pr-${{ github.ref }} + cancel-in-progress: true + +jobs: + gate: + runs-on: ubuntu-latest + env: + # Clone the logos-delivery checkout OUTSIDE the module tree: a directory + # named `vendor/` at the module root would put Go into vendor mode. + LOGOS_DELIVERY_DIR: ${{ github.workspace }}/.logos-delivery + # libwaku (kernel) is required at compile time for the cgo packages. + # Updated to also include liblogosdelivery once the messaging package lands. + CGO_CFLAGS: -I${{ github.workspace }}/.logos-delivery/library/ + CGO_LDFLAGS: -L${{ github.workspace }}/.logos-delivery/build/ -lwaku -Wl,-rpath,${{ github.workspace }}/.logos-delivery/build/ + # Build in module mode; never use a vendor/ dir. + GOFLAGS: -mod=mod + + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.24" + + - name: Resolve logos-delivery commit + # Cache the built kernel keyed on the exact upstream commit, so the + # expensive clone + build is skipped while logos-delivery's HEAD is + # unchanged. ls-remote gives us the SHA before we clone. + id: logos-delivery-rev + run: | + rev=$(git ls-remote https://github.com/logos-messaging/logos-delivery.git HEAD | cut -f1) + echo "rev=$rev" >> "$GITHUB_OUTPUT" + + - name: Cache logos-delivery build + id: logos-delivery-cache + uses: actions/cache@v4 + with: + path: ${{ env.LOGOS_DELIVERY_DIR }} + key: logos-delivery-${{ runner.os }}-${{ steps.logos-delivery-rev.outputs.rev }} + + - name: Clone logos-delivery + if: steps.logos-delivery-cache.outputs.cache-hit != 'true' + run: git clone --depth 1 https://github.com/logos-messaging/logos-delivery.git "$LOGOS_DELIVERY_DIR" + + - name: Build libwaku + if: steps.logos-delivery-cache.outputs.cache-hit != 'true' + run: make -C "$LOGOS_DELIVERY_DIR" libwaku -j + + - name: go build + run: go build ./... + + - name: go vet + run: go vet ./... + + - name: go mod tidy is clean + # `go mod tidy` must be a no-op on a well-maintained module. If it + # changes go.mod/go.sum the PR left them out of sync — fail and show + # the diff so the author can commit the tidied result. + run: | + go mod tidy + git diff --exit-code go.mod go.sum + + - name: Ensure base ref is available for lint + # golangci-lint's new-from-merge-base needs origin/master present. + run: git fetch --no-tags origin master + + - name: golangci-lint + # v7 is required for golangci-lint v2. + uses: golangci/golangci-lint-action@v7 + with: + version: v2.4.0 + + - name: go test (compile) + # Compile every package's test binary without running the (heavy, + # integration) suite — that runs nightly in CI.yml. This keeps the PR + # gate fast and deterministic while still catching test-code breakage. + run: go test -run '^$' ./... diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..df7ead6 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,18 @@ +# golangci-lint v2 configuration. +version: "2" + +linters: + # `standard` = errcheck, govet, ineffassign, staticcheck, unused. + default: standard + +formatters: + enable: + - gofmt + +issues: + # Only report issues introduced since the merge-base with the target branch. + # The legacy kernel wrapper carries pre-existing findings (unchecked + # `defer Close()`, dead helpers) and is slated to move (#108) / be removed + # post-logos-delivery#3851 — gating it now would drown real signal. New code + # (e.g. the messaging package) gets the full linter set. + new-from-merge-base: origin/master diff --git a/README.md b/README.md index 07412ab..f86363e 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ If you have `logos-delivery` checked out, point the build to it: ```bash # path to your existing logos-delivery clone -export LMN_DIR=/absolute/path/to/logos-delivery -export CGO_CFLAGS="-I${LMN_DIR}/library" -export CGO_LDFLAGS="-L${LMN_DIR}/build -lwaku -Wl,-rpath,${LMN_DIR}/build" +export LOGOS_DELIVERY_DIR=/absolute/path/to/logos-delivery +export CGO_CFLAGS="-I${LOGOS_DELIVERY_DIR}/library" +export CGO_LDFLAGS="-L${LOGOS_DELIVERY_DIR}/build -lwaku -Wl,-rpath,${LOGOS_DELIVERY_DIR}/build" # compile all packages make -C waku build diff --git a/go.mod b/go.mod index 9f3c4a8..342c235 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/logos-messaging/logos-messaging-go-bindings +module github.com/logos-messaging/logos-delivery-go-bindings go 1.24.0 diff --git a/tools/memory_record.go b/tools/memory_record.go index 540a72a..05c1d0d 100644 --- a/tools/memory_record.go +++ b/tools/memory_record.go @@ -6,7 +6,7 @@ import ( "os" "runtime" - "github.com/logos-messaging/logos-messaging-go-bindings/utils" + "github.com/logos-messaging/logos-delivery-go-bindings/utils" ) var ( diff --git a/utils/utils.go b/utils/utils.go index 0df2b6b..c1f03bd 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -75,4 +75,3 @@ func GetRSSKB() (uint64, error) { pageSize := os.Getpagesize() return (rssPages * uint64(pageSize)) / 1024, nil } - diff --git a/waku/Makefile b/waku/Makefile index 211ed8e..4a6523a 100644 --- a/waku/Makefile +++ b/waku/Makefile @@ -1,17 +1,17 @@ # Makefile for Waku Go Bindings # Path to logos-delivery submodule -export LMN_DIR ?= $(shell pwd)/../vendor/logos-delivery +export LOGOS_DELIVERY_DIR ?= $(shell pwd)/../vendor/logos-delivery # Debugging output print-paths: - @echo "LMN_DIR: $(LMN_DIR)" + @echo "LOGOS_DELIVERY_DIR: $(LOGOS_DELIVERY_DIR)" @echo "HEADER_PATH: $(LIBWAKU_HEADER_PATH)" @echo "LIB_PATH: $(LIBWAKU_LIB_PATH)" # Default paths for libwaku library and headers (can be overridden) -export LIBWAKU_HEADER_PATH ?= $(LMN_DIR)/library -export LIBWAKU_LIB_PATH ?= $(LMN_DIR)/build +export LIBWAKU_HEADER_PATH ?= $(LOGOS_DELIVERY_DIR)/library +export LIBWAKU_LIB_PATH ?= $(LOGOS_DELIVERY_DIR)/build export CGO_CFLAGS := -I$(LIBWAKU_HEADER_PATH)/ export CGO_LDFLAGS := -L$(LIBWAKU_LIB_PATH)/ -lwaku -Wl,-rpath,$(LIBWAKU_LIB_PATH)/ diff --git a/waku/common/envelope.go b/waku/common/envelope.go index bbdd972..a16537a 100644 --- a/waku/common/envelope.go +++ b/waku/common/envelope.go @@ -3,7 +3,7 @@ package common import ( "encoding/json" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" ) // Envelope contains information about the pubsub topic of a WakuMessage diff --git a/waku/nodes_basic_test.go b/waku/nodes_basic_test.go index 93cba02..8d8619f 100644 --- a/waku/nodes_basic_test.go +++ b/waku/nodes_basic_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" "github.com/stretchr/testify/require" ) @@ -29,7 +29,7 @@ func TestBasicWakuNodes(t *testing.T) { Debug("TestBasicWakuNodes completed successfully") } -/* artifact https://github.com/logos-messaging/logos-messaging-go-bindings/issues/40 */ +/* artifact https://github.com/logos-messaging/logos-delivery-go-bindings/issues/40 */ func TestNodeRestart(t *testing.T) { t.Skip("Skipping test for open artifact ") Debug("Starting TestNodeRestart") diff --git a/waku/nwaku.go b/waku/nwaku.go index 866d7be..3037093 100644 --- a/waku/nwaku.go +++ b/waku/nwaku.go @@ -352,17 +352,17 @@ import ( "time" "unsafe" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/timesource" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/timesource" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/libp2p/go-libp2p/core/peer" libp2pproto "github.com/libp2p/go-libp2p/core/protocol" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/utils" "github.com/multiformats/go-multiaddr" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/utils" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" ) const requestTimeout = 30 * time.Second diff --git a/waku/nwaku_test.go b/waku/nwaku_test.go index 041b699..d624aae 100644 --- a/waku/nwaku_test.go +++ b/waku/nwaku_test.go @@ -13,11 +13,11 @@ import ( "github.com/cenkalti/backoff/v3" "github.com/libp2p/go-libp2p/core/peer" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/store" ma "github.com/multiformats/go-multiaddr" "github.com/stretchr/testify/require" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/store" ) // In order to run this test, you must run an nwaku node diff --git a/waku/nwaku_test_utils.go b/waku/nwaku_test_utils.go index 1082331..4a845da 100644 --- a/waku/nwaku_test_utils.go +++ b/waku/nwaku_test_utils.go @@ -16,9 +16,9 @@ import ( "github.com/cenkalti/backoff/v3" "github.com/libp2p/go-libp2p/core/peer" - "github.com/logos-messaging/logos-messaging-go-bindings/utils" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" + "github.com/logos-messaging/logos-delivery-go-bindings/utils" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" "google.golang.org/protobuf/proto" ) diff --git a/waku/peer_connections_test.go b/waku/peer_connections_test.go index 1f10968..317f072 100644 --- a/waku/peer_connections_test.go +++ b/waku/peer_connections_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" "github.com/stretchr/testify/require" ) diff --git a/waku/relay_test.go b/waku/relay_test.go index a0cf785..5b17253 100644 --- a/waku/relay_test.go +++ b/waku/relay_test.go @@ -7,9 +7,9 @@ import ( "time" "github.com/cenkalti/backoff/v3" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" "github.com/stretchr/testify/require" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" "google.golang.org/protobuf/proto" ) diff --git a/waku/store_test.go b/waku/store_test.go index 78821e1..bb1448c 100644 --- a/waku/store_test.go +++ b/waku/store_test.go @@ -6,10 +6,10 @@ import ( "time" "github.com/cenkalti/backoff/v3" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/pb" "github.com/stretchr/testify/require" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/pb" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" "google.golang.org/protobuf/proto" ) diff --git a/waku/stress_test.go b/waku/stress_test.go index 142df92..37fd42b 100644 --- a/waku/stress_test.go +++ b/waku/stress_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" "github.com/stretchr/testify/require" // "go.uber.org/zap/zapcore" diff --git a/waku/test_data.go b/waku/test_data.go index 463e17e..00f9fc0 100644 --- a/waku/test_data.go +++ b/waku/test_data.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/logos-messaging/logos-messaging-go-bindings/waku/common" + "github.com/logos-messaging/logos-delivery-go-bindings/waku/common" "google.golang.org/protobuf/proto" ) diff --git a/waku/utils/utils.go b/waku/utils/utils.go index 4445006..670a080 100644 --- a/waku/utils/utils.go +++ b/waku/utils/utils.go @@ -8,15 +8,15 @@ import ( ) func GetRSSKB() (uint64, error) { - var m runtime.MemStats - runtime.ReadMemStats(&m) - return m.Sys / 1024, nil + var m runtime.MemStats + runtime.ReadMemStats(&m) + return m.Sys / 1024, nil } func EncapsulatePeerID(p peer.ID, addrs ...multiaddr.Multiaddr) []multiaddr.Multiaddr { encapsulated := make([]multiaddr.Multiaddr, 0, len(addrs)) for _, addr := range addrs { - encapsulated = append(encapsulated, addr.Encapsulate(multiaddr.StringCast("/p2p/" + p.String()))) + encapsulated = append(encapsulated, addr.Encapsulate(multiaddr.StringCast("/p2p/"+p.String()))) } return encapsulated }