This is an automated email from the ASF dual-hosted git repository.
klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/devlake.git
The following commit(s) were added to refs/heads/main by this push:
new 79b262bca build(deps): bump mockery v2.53.6 → v3.7.2 (#9029)
79b262bca is described below
commit 79b262bca4e9e90a65de825a0fba479770859ec4
Author: Dirk <[email protected]>
AuthorDate: Wed Aug 12 10:51:31 2026 +0200
build(deps): bump mockery v2.53.6 → v3.7.2 (#9029)
* build(deps): mockery v2→v3
Upgrade the mock generator from mockery v2.53.6 to v3.7.2 at every install
site (backend/Makefile, backend/Dockerfile, backend/Dockerfile.local,
devops/docker/lake-builder/Dockerfile).
mockery v3 dropped the CLI flags used by the `mock` target and is configured
via YAML instead, so two config files are added:
- backend/.mockery.core.yml
- backend/.mockery.helpers.yml
They reproduce the exact layout produced by the previous v2 invocations
(--recursive --keeptree --dir=./<tree> --output=./mocks/<tree>
--unroll-variadic=false --name='.*'):
backend/mocks/<src-dir>/<Interface>.go,
package `mocks`, un-prefixed mock struct names. Existing test imports such
as
`mockdal "github.com/apache/incubator-devlake/mocks/core/dal"` therefore
keep
working unchanged.
Two configs (instead of one) are required because `helpers/unithelper`
imports
the generated `mocks/core/...` packages: unlike v2, v3 type-checks sources
via
go/packages, so the core mocks must exist before the helpers tree can be
loaded. The `mock` target runs them in that order.
Note: v3 only generates mocks for interfaces, no longer for function types.
The affected mocks (e.g. plugin.ApiAsyncCallback, api.DataConvertHandler,
errors.Option) were not used by any test. `backend/mocks/` is gitignored, so
there is no generated-code churn in this diff.
Validation: `make mock`, `go build ./...` and `scripts/unit-test-go.sh`
(60 packages) all pass.
Signed-off-by: DoDiODev <[email protected]>
* ci: bootstrap mockery 3 in lint workflow
Signed-off-by: DoDiODev <[email protected]>
* ci: bootstrap mockery 3 in unit-test workflow
Signed-off-by: DoDiODev <[email protected]>
---------
Signed-off-by: DoDiODev <[email protected]>
---
.github/workflows/golangci-lint.yml | 2 +
.github/workflows/test.yml | 2 +
backend/.mockery.core.yml | 38 +++++++++++++
backend/.mockery.helpers.yml | 35 ++++++++++++
backend/Dockerfile | 2 +-
backend/Dockerfile.local | 2 +-
backend/Makefile | 10 +++-
backend/scripts/install-mockery.sh | 100 ++++++++++++++++++++++++++++++++++
devops/docker/lake-builder/Dockerfile | 2 +-
9 files changed, 187 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/golangci-lint.yml
b/.github/workflows/golangci-lint.yml
index cc68c18ca..d625667ce 100644
--- a/.github/workflows/golangci-lint.yml
+++ b/.github/workflows/golangci-lint.yml
@@ -32,6 +32,8 @@ jobs:
- uses: actions/checkout@v6
- name: Install libgit2 1.5 for git2go v34
run: backend/scripts/install-libgit2.sh
+ - name: Install mockery 3.7.2
+ run: backend/scripts/install-mockery.sh
- name: Cache golangci-lint
id: cache-golangci-lint
uses: actions/cache@v5
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 485ae5c72..ae9d080e6 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -49,6 +49,8 @@ jobs:
run: git config --global --add safe.directory $(pwd)
- name: Install libgit2 1.5 for git2go v34
run: backend/scripts/install-libgit2.sh
+ - name: Install mockery 3.7.2
+ run: backend/scripts/install-mockery.sh
- name: Build Python
run: |
cd backend
diff --git a/backend/.mockery.core.yml b/backend/.mockery.core.yml
new file mode 100644
index 000000000..352a9ab90
--- /dev/null
+++ b/backend/.mockery.core.yml
@@ -0,0 +1,38 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# mockery v3 configuration for the ./core tree.
+#
+# Replaces the v2 command line
+# mockery --recursive --keeptree --dir=./core --output=./mocks/core \
+# --unroll-variadic=false --name='.*'
+# and reproduces the exact same layout: backend/mocks/core/<pkg>/<Interface>.go
+# with package name `mocks` and an un-prefixed mock struct name.
+#
+# NOTE: this config is deliberately kept separate from `.mockery.helpers.yml`.
+# `helpers/unithelper` imports the generated `mocks/core/...` packages, so the
+# core mocks have to exist before the helpers tree can be type-checked by
+# mockery v3 (which, unlike v2, loads packages via go/packages).
+all: true
+recursive: true
+template: testify
+dir: "mocks/{{.InterfaceDirRelative}}"
+filename: "{{.InterfaceName}}.go"
+pkgname: "mocks"
+structname: "{{.InterfaceName}}"
+template-data:
+ unroll-variadic: false
+packages:
+ github.com/apache/incubator-devlake/core:
diff --git a/backend/.mockery.helpers.yml b/backend/.mockery.helpers.yml
new file mode 100644
index 000000000..ef703c593
--- /dev/null
+++ b/backend/.mockery.helpers.yml
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# mockery v3 configuration for the ./helpers tree.
+#
+# Replaces the v2 command line
+# mockery --recursive --keeptree --dir=./helpers --output=./mocks/helpers \
+# --unroll-variadic=false --name='.*'
+# and reproduces the exact same layout:
backend/mocks/helpers/<pkg>/<Interface>.go
+# with package name `mocks` and an un-prefixed mock struct name.
+#
+# Must run *after* `.mockery.core.yml` — see the note there.
+all: true
+recursive: true
+template: testify
+dir: "mocks/{{.InterfaceDirRelative}}"
+filename: "{{.InterfaceName}}.go"
+pkgname: "mocks"
+structname: "{{.InterfaceName}}"
+template-data:
+ unroll-variadic: false
+packages:
+ github.com/apache/incubator-devlake/helpers:
diff --git a/backend/Dockerfile b/backend/Dockerfile
index 3a30664cc..e77fe682e 100644
--- a/backend/Dockerfile
+++ b/backend/Dockerfile
@@ -49,7 +49,7 @@ RUN if [ "$(arch)" != "x86_64" ] ; then \
apt-get install -y gcc-x86-64-linux-gnu binutils-x86-64-linux-gnu ; \
fi
-RUN go install github.com/vektra/mockery/[email protected]
+RUN go install github.com/vektra/mockery/[email protected]
RUN go install github.com/swaggo/swag/cmd/[email protected]
COPY --from=debian-amd64 /usr/include /rootfs-amd64/usr/include
diff --git a/backend/Dockerfile.local b/backend/Dockerfile.local
index 5dcfcaa71..262204179 100644
--- a/backend/Dockerfile.local
+++ b/backend/Dockerfile.local
@@ -47,7 +47,7 @@ RUN mkdir -p /tmp/build && cd /tmp/build && \
make -j$(nproc) install && \
ldconfig
-RUN go install github.com/vektra/mockery/[email protected]
+RUN go install github.com/vektra/mockery/[email protected]
RUN go install github.com/swaggo/swag/cmd/[email protected]
WORKDIR /app
diff --git a/backend/Makefile b/backend/Makefile
index 7aca0a2e4..8dde31dc6 100644
--- a/backend/Makefile
+++ b/backend/Makefile
@@ -27,7 +27,7 @@ PYTHON_DIR ?= "./python"
all: build
go-dep:
- go install github.com/vektra/mockery/[email protected]
+ go install github.com/vektra/mockery/[email protected]
go install github.com/swaggo/swag/cmd/[email protected]
go install
github.com/golangci/golangci-lint/v2/cmd/[email protected]
@@ -73,8 +73,12 @@ debug: build-plugin-debug
mock:
rm -rf mocks
- mockery --recursive --keeptree --dir=./core --output=./mocks/core
--unroll-variadic=false --name='.*'
- mockery --recursive --keeptree --dir=./helpers --output=./mocks/helpers
--unroll-variadic=false --name='.*'
+ # mockery v3 is configured via YAML instead of CLI flags. Two
invocations are
+ # required (and must run in this order): `helpers/unithelper` imports
the
+ # generated `mocks/core/...` packages, and v3 type-checks the sources it
+ # parses, so the core mocks have to exist before the helpers tree loads.
+ mockery --config .mockery.core.yml
+ mockery --config .mockery.helpers.yml
test: unit-test e2e-test
diff --git a/backend/scripts/install-mockery.sh
b/backend/scripts/install-mockery.sh
new file mode 100755
index 000000000..b748fe5e2
--- /dev/null
+++ b/backend/scripts/install-mockery.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -eu
+
+MOCKERY_VERSION=3.7.2
+INSTALL_DIR=/opt/mockery/$MOCKERY_VERSION
+MOCKERY_BIN=$INSTALL_DIR/mockery
+
+get_version() {
+ if version_output=$("$1" version 2>/dev/null); then
+ :
+ else
+ version_output=$("$1" --version 2>&1 || true)
+ fi
+ printf '%s\n' "$version_output" |
+ tr ' =' '\n' |
+ sed -n 's/^v\{0,1\}\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$/\1/p' |
+ head -n 1
+}
+
+use_installed_mockery() {
+ export PATH="$INSTALL_DIR:$PATH"
+ if [ -n "${GITHUB_PATH:-}" ]; then
+ echo "$INSTALL_DIR" >> "$GITHUB_PATH"
+ fi
+}
+
+current_mockery=$(command -v mockery 2>/dev/null || true)
+if [ -n "$current_mockery" ]; then
+ current_version=$(get_version "$current_mockery" || true)
+ if [ "$current_version" = "$MOCKERY_VERSION" ]; then
+ echo "mockery $current_version is already installed"
+ exit 0
+ fi
+fi
+
+if [ -x "$MOCKERY_BIN" ]; then
+ installed_version=$(get_version "$MOCKERY_BIN" || true)
+ if [ "$installed_version" = "$MOCKERY_VERSION" ]; then
+ use_installed_mockery
+ echo "mockery $installed_version is already installed in $INSTALL_DIR"
+ exit 0
+ fi
+fi
+
+case "$(uname -m)" in
+ x86_64|amd64)
+ archive_name=mockery_${MOCKERY_VERSION}_Linux_x86_64.tar.gz
+
archive_sha256=db819b897de126634cefeb3773a3b76eea7769c718f0e5e62e968ab00add12c6
+ ;;
+ aarch64|arm64)
+ archive_name=mockery_${MOCKERY_VERSION}_Linux_arm64.tar.gz
+
archive_sha256=27141b83d8bccc29d66ed91093da69604b320d417bd562d819c8b0372f1444ad
+ ;;
+ *)
+ echo "unsupported architecture: $(uname -m)" >&2
+ exit 1
+ ;;
+esac
+
+if [ "$(id -u)" -ne 0 ]; then
+ echo "install-mockery.sh must run as root" >&2
+ exit 1
+fi
+
+download_url=https://github.com/vektra/mockery/releases/download/v${MOCKERY_VERSION}/${archive_name}
+work_dir=$(mktemp -d)
+trap 'rm -rf "$work_dir"' EXIT HUP INT TERM
+
+archive=$work_dir/$archive_name
+curl --fail --location --retry 3 "$download_url" --output "$archive"
+echo "$archive_sha256 $archive" | sha256sum --check --strict
+
+tar -xzf "$archive" -C "$work_dir"
+mkdir -p "$INSTALL_DIR"
+install -m 0755 "$work_dir/mockery" "$MOCKERY_BIN"
+
+use_installed_mockery
+installed_version=$(get_version "$MOCKERY_BIN")
+if [ "$installed_version" != "$MOCKERY_VERSION" ]; then
+ echo "expected mockery $MOCKERY_VERSION, found
${installed_version:-unknown}" >&2
+ exit 1
+fi
+
+echo "installed mockery $installed_version in $INSTALL_DIR"
diff --git a/devops/docker/lake-builder/Dockerfile
b/devops/docker/lake-builder/Dockerfile
index 8675a4cb7..14464f495 100644
--- a/devops/docker/lake-builder/Dockerfile
+++ b/devops/docker/lake-builder/Dockerfile
@@ -64,7 +64,7 @@ RUN mv /root/go /go &&\
# Install Golang Tools
RUN export GOPATH=/go && \
- go install github.com/vektra/mockery/[email protected] && \
+ go install github.com/vektra/mockery/[email protected] && \
go install github.com/swaggo/swag/cmd/[email protected]
# Golang Env