Igor Sirotin 857b0908f9
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>
2026-06-10 00:42:09 +03:00

91 lines
3.2 KiB
YAML

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