diff --git a/.github/workflows/ci_test.yml b/.github/workflows/ci_test.yml new file mode 100644 index 000000000..60fafbe9a --- /dev/null +++ b/.github/workflows/ci_test.yml @@ -0,0 +1,168 @@ +name: ci + +on: + pull_request: + push: + branches: + - chore-sharding-tests-update + +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 + + - uses: xom9ikk/dotenv@v2 + with: + path: ".github/" + - run: | + echo "go_version=${{ env.GO_VERSION }}" >> $GITHUB_OUTPUT + + - 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@v4 + with: + go-version: ${{ needs.env.outputs.go_version }} + 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@v4 + with: + go-version: ${{ needs.env.outputs.go_version }} + 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@v4 + with: + go-version: ${{ needs.env.outputs.go_version }} + 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' || '' }}