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

Reply via email to