From 25fc07da90988194ca3d52b41c00a8ea0da2e0eb Mon Sep 17 00:00:00 2001 From: Shahzad Lone Date: Tue, 4 Jun 2024 19:49:53 -0400 Subject: [PATCH] ci(i): Add workflow to detect out of date mocks (#2679) ## Relevant issue(s) Resolves #1616 ## Description - Add github action that will fail if there are any out of date mocks - Proposed a year ago here: https://github.com/sourcenetwork/defradb/pull/1612#pullrequestreview-1516813391 ## How has this been tested? - using `act` tool - manually through introducing a mock change in this commit: [`4b20f8f` (#2679)](https://github.com/sourcenetwork/defradb/pull/2679/commits/4b20f8f992866b58839c2f23c4c2dc1ac3d7f5d7) and then seeing the action fail here: https://github.com/sourcenetwork/defradb/actions/runs/9361512099/job/25768647150?pr=2679 - the last commit reverts the commit that was introduce the test the mock detection works, I didn't drop the commit and used the revert to have it documented better. Specify the platform(s) on which this was tested: - WSL2 --- .github/workflows/check-mocks.yml | 50 +++++++++++++++++++++++++++++++ Makefile | 12 ++++---- tests/README.md | 2 +- 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/check-mocks.yml diff --git a/.github/workflows/check-mocks.yml b/.github/workflows/check-mocks.yml new file mode 100644 index 0000000000..80d9dbee20 --- /dev/null +++ b/.github/workflows/check-mocks.yml @@ -0,0 +1,50 @@ +# Copyright 2024 Democratized Data Foundation +# +# Use of this software is governed by the Business Source License +# included in the file licenses/BSL.txt. +# +# As of the Change Date specified in that file, in accordance with +# the Business Source License, use of this software will be governed +# by the Apache License, Version 2.0, included in the file +# licenses/APL.txt. + +# This workflow checks that all mocks are up to date. +# If the mocks are not up to date then this action will fail. +name: Check Mocks Workflow + +on: + pull_request: + branches: + - master + - develop + + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + branches: + - master + - develop + +jobs: + check-mocks: + name: Check mocks job + + runs-on: ubuntu-latest + + steps: + - name: Checkout code into the directory + uses: actions/checkout@v3 + + - name: Setup Go environment explicitly + uses: actions/setup-go@v3 + with: + go-version: "1.21" + check-latest: true + + - name: Try generating mocks + run: make mocks + + - name: Check no new changes exist + uses: tj-actions/verify-changed-files@v20 + with: + fail-if-changed: true diff --git a/Makefile b/Makefile index 1f50ab816c..c4c02da3d7 100644 --- a/Makefile +++ b/Makefile @@ -158,8 +158,8 @@ deps\:chglog: deps\:modules: go mod download -.PHONY: deps\:mock -deps\:mock: +.PHONY: deps\:mocks +deps\:mocks: go install github.com/vektra/mockery/v2@v2.32.0 .PHONY: deps\:playground @@ -173,11 +173,11 @@ deps: $(MAKE) deps:chglog && \ $(MAKE) deps:lint && \ $(MAKE) deps:test && \ - $(MAKE) deps:mock + $(MAKE) deps:mocks -.PHONY: mock -mock: - @$(MAKE) deps:mock +.PHONY: mocks +mocks: + @$(MAKE) deps:mocks mockery --config="tools/configs/mockery.yaml" .PHONY: dev\:start diff --git a/tests/README.md b/tests/README.md index a17fbcaf08..2dfe2d17c7 100644 --- a/tests/README.md +++ b/tests/README.md @@ -23,7 +23,7 @@ These tests focus on small, isolated parts of the code to ensure each part is wo For unit tests, we sometimes use mocks. Mocks are automatically generated from Go interfaces using the mockery tool. This helps to isolate the code being tested and provide more focused and reliable tests. -To regenerate the mocks, run `make mock`. +To regenerate the mocks, run `make mocks`. The mocks are typically generated into a separate mocks directory.