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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

* 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) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Igor Sirotin 2026-06-09 23:04:57 +01:00 committed by GitHub
parent ac6f8a5096
commit 0a84f0fb7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 147 additions and 40 deletions

View File

@ -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

90
.github/workflows/pr.yml vendored Normal file
View File

@ -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 '^$' ./...

18
.golangci.yml Normal file
View File

@ -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

View File

@ -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

2
go.mod
View File

@ -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

View File

@ -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 (

View File

@ -75,4 +75,3 @@ func GetRSSKB() (uint64, error) {
pageSize := os.Getpagesize()
return (rssPages * uint64(pageSize)) / 1024, nil
}

View File

@ -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)/

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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"
)

View File

@ -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"

View File

@ -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"
)

View File

@ -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
}