waku-org/go-waku

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: ci

on:
  pull_request:
  push:
    branches:
      - master

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  changes: # changes detection
    runs-on: ubuntu-latest
    permissions:
      pull-requests: read
    steps:
    - uses: actions/checkout@v3
      name: Checkout code
      id: checkout

    - uses: dorny/paths-filter@v2
      id: filter
      with:
        filters: |
          common:
          - '.github/workflows/**'
          - 'Makefile'
          - 'libs/**'
          - 'go.mod'
          - 'go.sum'
          - 'flake.nix'
          - 'examples/**'

          v2:
          - 'waku/**'
          - 'cmd/**'
          - 'library/**'
          - 'tests/**'

          docker:
          - 'docker/**'
          - 'Dockerfile'

    outputs:
      common: ${{ steps.filter.outputs.common }}
      v2: ${{ steps.filter.outputs.v2 }}
      docker: ${{ steps.filter.outputs.docker }}

  env:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - run: |
        VERSION=$(cat ./VERSION)
        echo "waku_version=$VERSION" >> $GITHUB_OUTPUT

  golangci:
    name: lint
    needs: [changes, env]
    if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version-file: 'go.mod'
          cache: false

      - name: Execute golangci-lint
        uses: golangci/golangci-lint-action@v3
        with:
          version: v1.55.2
          args: --deadline=5m

  build:
    needs: [changes, env]
    if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60

    name: build-${{ matrix.os }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Get submodules hash
        id: submodules
        run: |
          echo "hash=$(git submodule status | awk '{print $1}' | sort | shasum -a 256 | sed 's/[ -]*//g')" >> $GITHUB_OUTPUT

      - name: Cache submodules
        uses: actions/cache@v3
        with:
          path: |
            vendor/
            .git/modules
          key: ${{ runner.os }}-vendor-modules-${{ steps.submodules.outputs.hash }}
      
      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version-file: 'go.mod'
          cache: false

      - name: Build binary
        run: make

      - name: Build library
        run: make static-library dynamic-library

      - name: Build examples
        run: make build-example

  test:
    needs: [changes, env]
    if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }}
    strategy:
      matrix:
        tests: [test-ci, test-with-race]
    runs-on: ubuntu-latest
    timeout-minutes: 60

    name: ${{ matrix.tests }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Get submodules hash
        id: submodules
        run: |
          echo "hash=$(git submodule status | awk '{print $1}' | sort | shasum -a 256 | sed 's/[ -]*//g')" >> $GITHUB_OUTPUT

      - name: Cache submodules
        uses: actions/cache@v3
        with:
          path: |
            vendor/
            .git/modules
          key: ${{ runner.os }}-vendor-modules-${{ steps.submodules.outputs.hash }}

      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version-file: 'go.mod'
          cache: false

      - name: "Run tests"
        run: make ${{ matrix.tests }}

      - name: "Run onchain-tests"
        run: |
          docker compose -f .github/docker-compose/ganache.yml up -d
          make test-onchain${{ matrix.tests == 'test-with-race' && '-with-race' || '' }}

      - name: "Run storev3 tests"
        run: |
          docker compose -f .github/docker-compose/nwaku.yml up -d
          NWAKU_HOST=$(docker compose -f .github/docker-compose/nwaku.yml port nwaku 60000)
          NWAKU_PORT=$(echo $NWAKU_HOST | cut -d ":" -f 2)
          sleep 5
          make test-storev3 TEST_STOREV3_NODE="/ip4/127.0.0.1/tcp/${NWAKU_PORT}/p2p/16Uiu2HAmMGhfSTUzKbsjMWxc6T1X4wiTWSF1bEWSLjAukCm7KiHV"