From ff2942f6ae8bbba581e86b28dfcf6c8b5c2801ce Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Mon, 29 Jan 2024 16:30:27 +0000 Subject: [PATCH 01/18] wip --- dev/go-mockgen.bzl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 dev/go-mockgen.bzl diff --git a/dev/go-mockgen.bzl b/dev/go-mockgen.bzl new file mode 100644 index 000000000000..44bad636be39 --- /dev/null +++ b/dev/go-mockgen.bzl @@ -0,0 +1,18 @@ +load("@aspect_bazel_lib//lib:yq.bzl", "yq") + + +def _go_mockgen(ctx): + + +go_mockgen = rule( + implementation = _go_mockgen, +) + +def _go_mockgen_config(rctx): + + for config in rctx.attr.configs: + rctx.read(rctx.path(config)) + +go_mockgen_config = repository_rule( + implementation = _go_mockgen_config, +) From 697b7bcc09acd1f957b33bfb8c4a7a93c811c2f8 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Fri, 2 Feb 2024 16:38:23 +0000 Subject: [PATCH 02/18] draw the outline --- BUILD.bazel | 2 +- WORKSPACE | 4 ++++ dev/BUILD.bazel | 5 ++++- dev/go-mockgen.bzl | 18 ---------------- dev/go-mockgen.tpl | 2 ++ dev/go_mockgen.bzl | 53 ++++++++++++++++++++++++++++++++++++++++++++++ dev/tool_deps.bzl | 20 +++++++++++++++++ 7 files changed, 84 insertions(+), 20 deletions(-) delete mode 100644 dev/go-mockgen.bzl create mode 100644 dev/go-mockgen.tpl create mode 100644 dev/go_mockgen.bzl diff --git a/BUILD.bazel b/BUILD.bazel index 13cc4575137f..912944338ac5 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -335,7 +335,7 @@ exports_files([ # under certain conditions. See //ui/assets/... "CONTRIBUTING.md", ".swcrc", -]) +] + glob(["mockgen*.yaml"])) # sg msp settings diff --git a/WORKSPACE b/WORKSPACE index dfedb6d48963..73e3d88fb85e 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -475,3 +475,7 @@ filegroup( strip_prefix = "sourcegraph-extensions-bundles-5.0.1", url = "https://github.com/sourcegraph/sourcegraph-extensions-bundles/archive/v5.0.1.zip", ) + +load("//dev:go_mockgen.bzl", "go_mockgen_config") + +go_mockgen_config(name = "go_mockgen_config") diff --git a/dev/BUILD.bazel b/dev/BUILD.bazel index 0b238ed9df06..e3c99f24e1c1 100644 --- a/dev/BUILD.bazel +++ b/dev/BUILD.bazel @@ -1,6 +1,9 @@ load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") -exports_files(srcs = ["eslint-report-test.sh"]) +exports_files(srcs = [ + "eslint-report-test.sh", + "go-mockgen.tpl", +]) write_source_files( name = "write_all_generated", diff --git a/dev/go-mockgen.bzl b/dev/go-mockgen.bzl deleted file mode 100644 index 44bad636be39..000000000000 --- a/dev/go-mockgen.bzl +++ /dev/null @@ -1,18 +0,0 @@ -load("@aspect_bazel_lib//lib:yq.bzl", "yq") - - -def _go_mockgen(ctx): - - -go_mockgen = rule( - implementation = _go_mockgen, -) - -def _go_mockgen_config(rctx): - - for config in rctx.attr.configs: - rctx.read(rctx.path(config)) - -go_mockgen_config = repository_rule( - implementation = _go_mockgen_config, -) diff --git a/dev/go-mockgen.tpl b/dev/go-mockgen.tpl new file mode 100644 index 000000000000..81a9fc7060fd --- /dev/null +++ b/dev/go-mockgen.tpl @@ -0,0 +1,2 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") + diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl new file mode 100644 index 000000000000..3be852d512ef --- /dev/null +++ b/dev/go_mockgen.bzl @@ -0,0 +1,53 @@ +load("@aspect_bazel_lib//:lib.bzl", "run_binary") + +def go_mockgen(name, out_file, pkg, file_prefix): + run_binary( + name = "mockgen-{}".format(name), + mnemonic = "GoMockgen", + tool = "@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen", + args = ["--filename", out_file, "--package", pkg, "--file-prefix", file_prefix], + outs = [out_file], + ) + + # TODO: copy to source tree + +def _go_mockgen_config(rctx): + yq_path = rctx.path( + Label("@yq-{}-{}//file:downloaded".format({ + "mac os x": "darwin", + "linux": "linux", + }[rctx.os.name], { + "aarch64": "arm64", + "arm64": "arm64", + "amd64": "amd64", + "x86_64": "amd64", + "x86": "amd64", + }[rctx.os.arch])), + ) + + mockgen_path = rctx.path(Label("//:mockgen.yaml")) + + # rctx.file("BUILD", "[]") + rctx.template("BUILD", Label("//dev:go-mockgen.tpl")) + + base_config = yaml_to_json(rctx, yq_path, mockgen_path) + + # prefix for the top of each generated file + file_prefix = base_config["file-prefix"] + + for config in base_config["include-config-paths"]: + # parse each to determine what to generate and where + c = yaml_to_json(rctx, yq_path, rctx.path(Label("//:{}".format(config)))) + + # TODO: finish the owl + +def yaml_to_json(rctx, yq_path, path): + res = rctx.execute([yq_path, "-p", "yaml", "-o", "json", path]) + if res.return_code != 0: + fail("failed to run yq: {}".format(res.stderr)) + + return json.decode(res.stdout) + +go_mockgen_config = repository_rule( + implementation = _go_mockgen_config, +) diff --git a/dev/tool_deps.bzl b/dev/tool_deps.bzl index 37ed3f997a40..daf1b81a219f 100644 --- a/dev/tool_deps.bzl +++ b/dev/tool_deps.bzl @@ -7,6 +7,7 @@ SRC_CLI_VERSION = "5.2.1" CTAGS_VERSION = "6.0.0.2783f009" PACKER_VERSION = "1.8.3" P4_FUSION_VERSION = "v1.13.2-sg.04a293a" +YQ_VERSION = "v4.40.5" SRC_CLI_BUILDFILE = """ filegroup( @@ -171,3 +172,22 @@ def tool_deps(): url = "https://storage.googleapis.com/p4-fusion/aarch64-darwin/dist/p4-fusion-{0}".format(P4_FUSION_VERSION), executable = True, ) + + http_file( + name = "yq-linux-amd64", + integrity = "sha256-DWqvHPRKjRj7x+0O8U9zWo340uMUxMwPAkLTXApEDJU=", + url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_linux_amd64".format(YQ_VERSION), + executable = True, + ) + + http_file( + name = "yq-darwin-amd64", + url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_darwin_amd64".format(YQ_VERSION), + executable = True, + ) + + http_file( + name = "yq-darwin-arm64", + url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_darwin_arm64".format(YQ_VERSION), + executable = True, + ) From 2335389e05f996e5192f4a09147a4da619d429a7 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Tue, 6 Feb 2024 13:20:01 +0000 Subject: [PATCH 03/18] ctx.actions.run go-mockgen in rule, with test target in root WIP --- BUILD.bazel | 13 +++++ cmd/gitserver/internal/BUILD.bazel | 3 +- deps.bzl | 5 +- dev/go_mockgen.bzl | 78 +++++++++++++++++++++++++++++- go.mod | 2 + 5 files changed, 96 insertions(+), 5 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 912944338ac5..d7f93c9b071d 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -351,3 +351,16 @@ config_setting( "//:sg_msp": "True", }, ) + +load("//dev:go_mockgen.bzl", "go_mockgen") + +go_mockgen( + name = "sample_text", + out = "cmd/gitserver/internal/mocks_test.go", + interfaces = [ + "service", + ], + deps = [ + "//cmd/gitserver/internal", + ], +) diff --git a/cmd/gitserver/internal/BUILD.bazel b/cmd/gitserver/internal/BUILD.bazel index 6830ba5d18eb..63badc9c713e 100644 --- a/cmd/gitserver/internal/BUILD.bazel +++ b/cmd/gitserver/internal/BUILD.bazel @@ -23,7 +23,8 @@ go_library( ], embedsrcs = ["sg_maintenance.sh"], importpath = "github.com/sourcegraph/sourcegraph/cmd/gitserver/internal", - visibility = ["//cmd/gitserver:__subpackages__"], + # visibility = ["//cmd/gitserver:__subpackages__"], + visibility = ["//visibility:public"], deps = [ "//cmd/frontend/envvar", "//cmd/gitserver/internal/accesslog", diff --git a/deps.bzl b/deps.bzl index 2da6c96a6d9a..6fc528218d60 100644 --- a/deps.bzl +++ b/deps.bzl @@ -1243,8 +1243,9 @@ def go_dependencies(): name = "com_github_derision_test_go_mockgen", build_file_proto_mode = "disable_global", importpath = "github.com/derision-test/go-mockgen", - sum = "h1:Wo7vx8f7QdBT4jxfgTvs2t9VpyFlvvqzjXoE3m7MQBU=", - version = "v1.3.8-0.20240105000756-fb9effb23d90", + replace = "github.com/strum355/go-mockgen", + sum = "h1:MqyDwiDWQZu95yKV4ucEOHOh2IdFS/T3mI7EBhi+4B8=", + version = "v0.0.0-20240205172710-991c6ab66d41", ) go_repository( name = "com_github_dghubble_go_twitter", diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index 3be852d512ef..0f340ece513a 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -1,6 +1,8 @@ -load("@aspect_bazel_lib//:lib.bzl", "run_binary") +load("@aspect_bazel_lib//lib:run_binary.bzl", "run_binary") +load("@io_bazel_rules_go//go:def.bzl", "GoArchive") +load("@bazel_skylib//lib:paths.bzl", "paths") -def go_mockgen(name, out_file, pkg, file_prefix): +def go_mockgen1(name, out_file, pkg, file_prefix): run_binary( name = "mockgen-{}".format(name), mnemonic = "GoMockgen", @@ -11,6 +13,74 @@ def go_mockgen(name, out_file, pkg, file_prefix): # TODO: copy to source tree +def _go_mockgen(ctx): + print(ctx.attr.deps[GoArchive].data.file.path) + print(ctx.attr.deps[GoArchive].data.importmap) + print(ctx.attr.deps[GoArchive].data.importpath) + print(ctx.attr.gomockgen.files.to_list()) + print(paths.dirname(ctx.attr.out), ctx.attr.out) + + dst = ctx.actions.declare_directory(paths.dirname(ctx.attr.out)) + + ctx.actions.run( + mnemonic = "GoMockgen", + arguments = [ + "--package", # output package name + paths.basename(paths.dirname(ctx.attr.out)), + "--import-path", + ctx.attr.deps[GoArchive].data.importpath, + "--interfaces", + ctx.attr.interfaces[0], + "--filename", + ctx.attr.out, + "--force", + "--disable-formatting", + "--for-test", + "--archives", + "{}={}={}={}".format( + ctx.attr.deps[GoArchive].data.importpath, + ctx.attr.deps[GoArchive].data.importmap, + ctx.attr.deps[GoArchive].data.file.path, + ctx.attr.deps[GoArchive].data.file.path, + ), + "--sources", + ctx.attr.deps[GoArchive].data.srcs[0], + # TODO: multiple archives, multiple sources, and the "path" positional args + ], + executable = ctx.executable.gomockgen, + outputs = [ctx.outputs.out], + progress_message = "Running go-mockgen to generate %s" % ctx.outputs.out.short_path, + ) + + return [ + DefaultInfo( + files = depset([dst]), + ), + ] + +go_mockgen = rule( + implementation = _go_mockgen, + attrs = { + "interfaces": attr.string_list( + mandator = True, + ), + "deps": attr.label( + # change to label_list? + providers = [GoArchive], + allow_empty = False, + mandatory = True, + ), + "out": attr.string( + mandatory = True, + ), + "gomockgen": attr.label( + default = Label("@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen"), + executable = True, + cfg = "exec", + ), + }, +) + def _go_mockgen_config(rctx): yq_path = rctx.path( Label("@yq-{}-{}//file:downloaded".format({ @@ -27,6 +97,10 @@ def _go_mockgen_config(rctx): mockgen_path = rctx.path(Label("//:mockgen.yaml")) + # TODO: we have to write the targets to a .bzl file that is NOT BUILD.bazel, + # so that we can load the file and run a function to add the targets to the + # right namespace. Else they'd be trying to reference e.g. //cmd/gitserver/internal + # in the go-mockgen bazel repository workspace instead of the sourcegraph workspace # rctx.file("BUILD", "[]") rctx.template("BUILD", Label("//dev:go-mockgen.tpl")) diff --git a/go.mod b/go.mod index 83ac9ac72ab5..59622a3126d6 100644 --- a/go.mod +++ b/go.mod @@ -42,6 +42,8 @@ replace ( github.com/prometheus/common => github.com/prometheus/common v0.32.1 // Pending: https://github.com/shurcooL/httpgzip/pull/9 github.com/shurcooL/httpgzip => github.com/sourcegraph/httpgzip v0.0.0-20211015085752-0bad89b3b4df + + github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240205172710-991c6ab66d41 ) // Status unclear replace directives From 14a1902bcaa7516140b7545bb1c8a51c98c2032f Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Tue, 6 Feb 2024 21:57:46 +0000 Subject: [PATCH 04/18] migrate to executable rule --- BUILD.bazel | 4 +- dev/go_mockgen.bzl | 107 ++++++++++++++++++++++++++------------------- 2 files changed, 62 insertions(+), 49 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index d7f93c9b071d..de0587c8ee25 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -360,7 +360,5 @@ go_mockgen( interfaces = [ "service", ], - deps = [ - "//cmd/gitserver/internal", - ], + deps = "//cmd/gitserver/internal", ) diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index 0f340ece513a..295102e0b4fe 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -1,17 +1,18 @@ +load("@aspect_bazel_lib//lib:paths.bzl", "BASH_RLOCATION_FUNCTION", "to_rlocation_path") load("@aspect_bazel_lib//lib:run_binary.bzl", "run_binary") -load("@io_bazel_rules_go//go:def.bzl", "GoArchive") load("@bazel_skylib//lib:paths.bzl", "paths") +load("@io_bazel_rules_go//go:def.bzl", "GoArchive") -def go_mockgen1(name, out_file, pkg, file_prefix): - run_binary( - name = "mockgen-{}".format(name), - mnemonic = "GoMockgen", - tool = "@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen", - args = ["--filename", out_file, "--package", pkg, "--file-prefix", file_prefix], - outs = [out_file], - ) +# def go_mockgen1(name, out_file, pkg, file_prefix): +# run_binary( +# name = "mockgen-{}".format(name), +# mnemonic = "GoMockgen", +# tool = "@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen", +# args = ["--filename", out_file, "--package", pkg, "--file-prefix", file_prefix], +# outs = [out_file], +# ) - # TODO: copy to source tree +# # TODO: copy to source tree def _go_mockgen(ctx): print(ctx.attr.deps[GoArchive].data.file.path) @@ -20,54 +21,67 @@ def _go_mockgen(ctx): print(ctx.attr.gomockgen.files.to_list()) print(paths.dirname(ctx.attr.out), ctx.attr.out) - dst = ctx.actions.declare_directory(paths.dirname(ctx.attr.out)) - - ctx.actions.run( - mnemonic = "GoMockgen", - arguments = [ - "--package", # output package name - paths.basename(paths.dirname(ctx.attr.out)), - "--import-path", + args = [] + for src in ctx.attr.deps[GoArchive].data.srcs: + args.append("--sources %s" % src.path) + + print(args) + + script = ctx.actions.declare_file("run_gomockgen.sh") + + script_content = """\ +#!/usr/bin/env bash +set -o errexit -o nounset -o pipefail + +{rlocation_fn} + +echo 'hello world' +exec $(rlocation {gomockgen}) \\ + --package {} \\ + --import-path {} \\ + --interfaces {} \\ + --filename {} \\ + --force \\ + --disable-formatting \\ + --for-test \\ + --archives {} \\ + {} \\ + {} + """.format( + paths.basename(paths.dirname(ctx.attr.out)), + ctx.attr.deps[GoArchive].data.importpath, + ctx.attr.interfaces[0], + ctx.attr.out, + "{}={}={}={}".format( ctx.attr.deps[GoArchive].data.importpath, - "--interfaces", - ctx.attr.interfaces[0], - "--filename", - ctx.attr.out, - "--force", - "--disable-formatting", - "--for-test", - "--archives", - "{}={}={}={}".format( - ctx.attr.deps[GoArchive].data.importpath, - ctx.attr.deps[GoArchive].data.importmap, - ctx.attr.deps[GoArchive].data.file.path, - ctx.attr.deps[GoArchive].data.file.path, - ), - "--sources", - ctx.attr.deps[GoArchive].data.srcs[0], - # TODO: multiple archives, multiple sources, and the "path" positional args - ], - executable = ctx.executable.gomockgen, - outputs = [ctx.outputs.out], - progress_message = "Running go-mockgen to generate %s" % ctx.outputs.out.short_path, + ctx.attr.deps[GoArchive].data.importmap, + ctx.attr.deps[GoArchive].data.file.path, + ctx.attr.deps[GoArchive].data.file.path, + ), + " \\\n ".join(args), + ctx.attr.deps[GoArchive].data.importpath, + rlocation_fn = BASH_RLOCATION_FUNCTION, + gomockgen = to_rlocation_path(ctx, ctx.executable.gomockgen), ) - return [ - DefaultInfo( - files = depset([dst]), - ), - ] + ctx.actions.write(script, script_content, is_executable = True) + + rs = [script, ctx.executable.gomockgen, ctx.file._runfiles_lib] + rs.extend(ctx.attr.deps[GoArchive].data.srcs) + runfiles = ctx.runfiles(files = rs) + return [DefaultInfo(executable = script, runfiles = runfiles)] go_mockgen = rule( implementation = _go_mockgen, + executable = True, attrs = { "interfaces": attr.string_list( - mandator = True, + mandatory = True, ), "deps": attr.label( # change to label_list? providers = [GoArchive], - allow_empty = False, + # allow_empty = False, mandatory = True, ), "out": attr.string( @@ -78,6 +92,7 @@ go_mockgen = rule( executable = True, cfg = "exec", ), + "_runfiles_lib": attr.label(default = "@bazel_tools//tools/bash/runfiles", allow_single_file = True), }, ) From f786290307f7b65338d121a910c78884e83040a1 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Wed, 7 Feb 2024 15:23:45 +0000 Subject: [PATCH 05/18] passing all the right things to go-mockgen! now to align the outputs and copy to source tree --- deps.bzl | 4 +- dev/go_mockgen.bzl | 124 ++++++++++++++++++++++++--------------------- go.mod | 4 +- go.sum | 4 +- 4 files changed, 72 insertions(+), 64 deletions(-) diff --git a/deps.bzl b/deps.bzl index 6fc528218d60..52d9e06ff212 100644 --- a/deps.bzl +++ b/deps.bzl @@ -1244,8 +1244,8 @@ def go_dependencies(): build_file_proto_mode = "disable_global", importpath = "github.com/derision-test/go-mockgen", replace = "github.com/strum355/go-mockgen", - sum = "h1:MqyDwiDWQZu95yKV4ucEOHOh2IdFS/T3mI7EBhi+4B8=", - version = "v0.0.0-20240205172710-991c6ab66d41", + sum = "h1:Dup3gAgmdLe8oRshV/5mWKgcXy+gPk0n1x04b1cew/c=", + version = "v0.0.0-20240207152121-3f1b41cc8c40", ) go_repository( name = "com_github_dghubble_go_twitter", diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index 295102e0b4fe..2d8ec2d6dc1a 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -1,79 +1,83 @@ -load("@aspect_bazel_lib//lib:paths.bzl", "BASH_RLOCATION_FUNCTION", "to_rlocation_path") -load("@aspect_bazel_lib//lib:run_binary.bzl", "run_binary") load("@bazel_skylib//lib:paths.bzl", "paths") -load("@io_bazel_rules_go//go:def.bzl", "GoArchive") - -# def go_mockgen1(name, out_file, pkg, file_prefix): -# run_binary( -# name = "mockgen-{}".format(name), -# mnemonic = "GoMockgen", -# tool = "@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen", -# args = ["--filename", out_file, "--package", pkg, "--file-prefix", file_prefix], -# outs = [out_file], -# ) +load("@io_bazel_rules_go//go:def.bzl", "GoArchive", "GoSource") # # TODO: copy to source tree -def _go_mockgen(ctx): - print(ctx.attr.deps[GoArchive].data.file.path) - print(ctx.attr.deps[GoArchive].data.importmap) - print(ctx.attr.deps[GoArchive].data.importpath) - print(ctx.attr.gomockgen.files.to_list()) - print(paths.dirname(ctx.attr.out), ctx.attr.out) +def _go_mockgen_run(ctx): + print("archive file", ctx.attr.deps[GoArchive].data.file.path) + print("importmap", ctx.attr.deps[GoArchive].data.importmap) + print("importpath", ctx.attr.deps[GoArchive].data.importpath) + print("gomockgen files", ctx.attr.gomockgen.files.to_list()) + print("output dirname", paths.dirname(ctx.attr.out), "full output", ctx.attr.out) + print("sources", ctx.attr.deps[GoArchive].data.srcs) + print("direct deps", ctx.attr.deps[GoArchive].direct[0].data.file.path) - args = [] - for src in ctx.attr.deps[GoArchive].data.srcs: - args.append("--sources %s" % src.path) - - print(args) - - script = ctx.actions.declare_file("run_gomockgen.sh") - - script_content = """\ -#!/usr/bin/env bash -set -o errexit -o nounset -o pipefail - -{rlocation_fn} - -echo 'hello world' -exec $(rlocation {gomockgen}) \\ - --package {} \\ - --import-path {} \\ - --interfaces {} \\ - --filename {} \\ - --force \\ - --disable-formatting \\ - --for-test \\ - --archives {} \\ - {} \\ - {} - """.format( + dst = ctx.actions.declare_file(ctx.attr.out) + print("destination", dst.path) + + print("stdlib", ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path) + + args = [ + "--package", # output package name paths.basename(paths.dirname(ctx.attr.out)), + "--import-path", ctx.attr.deps[GoArchive].data.importpath, + "--interfaces", ctx.attr.interfaces[0], - ctx.attr.out, + "--filename", + dst.path, + "--force", + "--disable-formatting", + "--for-test", + "--stdlibroot", + "{path}/{os}_{arch}".format( + path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, + os = ctx.attr._go_stdlib[GoSource].mode.goos, + arch = ctx.attr._go_stdlib[GoSource].mode.goarch, + ), + "--archives", "{}={}={}={}".format( ctx.attr.deps[GoArchive].data.importpath, ctx.attr.deps[GoArchive].data.importmap, ctx.attr.deps[GoArchive].data.file.path, ctx.attr.deps[GoArchive].data.file.path, ), - " \\\n ".join(args), - ctx.attr.deps[GoArchive].data.importpath, - rlocation_fn = BASH_RLOCATION_FUNCTION, - gomockgen = to_rlocation_path(ctx, ctx.executable.gomockgen), - ) + ] + + deps = [] + for a in ctx.attr.deps[GoArchive].direct: + args.append("--archives") + args.append("{}={}={}={}".format( + a.data.importpath, + a.data.importmap, + a.data.file.path, + a.data.file.path, + )) + deps.append(depset(direct = [a.data.file])) - ctx.actions.write(script, script_content, is_executable = True) + for src in ctx.attr.deps[GoArchive].data.srcs: + args.extend(["--sources", src.path]) + deps.append(depset(direct = [src])) + + args.append(ctx.attr.deps[GoArchive].data.importpath) + + ctx.actions.run( + mnemonic = "GoMockgen", + arguments = args, + executable = ctx.executable.gomockgen, + outputs = [dst], + inputs = depset(direct = [ctx.attr.deps[GoArchive].data.file, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]], transitive = deps), + progress_message = "Running go-mockgen to generate %s" % dst.path, + ) - rs = [script, ctx.executable.gomockgen, ctx.file._runfiles_lib] - rs.extend(ctx.attr.deps[GoArchive].data.srcs) - runfiles = ctx.runfiles(files = rs) - return [DefaultInfo(executable = script, runfiles = runfiles)] + return [ + DefaultInfo( + files = depset([dst]), + ), + ] go_mockgen = rule( - implementation = _go_mockgen, - executable = True, + implementation = _go_mockgen_run, attrs = { "interfaces": attr.string_list( mandatory = True, @@ -92,6 +96,10 @@ go_mockgen = rule( executable = True, cfg = "exec", ), + "_go_stdlib": attr.label( + providers = [GoSource], + default = Label("@io_bazel_rules_go//:stdlib"), + ), "_runfiles_lib": attr.label(default = "@bazel_tools//tools/bash/runfiles", allow_single_file = True), }, ) diff --git a/go.mod b/go.mod index 59622a3126d6..eae38f607747 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,8 @@ replace ( // These entries indicate temporary replace directives due to a pending pull request upstream // or issues with specific versions. replace ( + + github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40 // Pending: https://github.com/ghodss/yaml/pull/65 github.com/ghodss/yaml => github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 // Dependency declares incorrect, old version of redigo, so we must override it: https://github.com/boj/redistore/blob/master/go.mod @@ -42,8 +44,6 @@ replace ( github.com/prometheus/common => github.com/prometheus/common v0.32.1 // Pending: https://github.com/shurcooL/httpgzip/pull/9 github.com/shurcooL/httpgzip => github.com/sourcegraph/httpgzip v0.0.0-20211015085752-0bad89b3b4df - - github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240205172710-991c6ab66d41 ) // Status unclear replace directives diff --git a/go.sum b/go.sum index 06e8532c1fc9..b8a4a687172c 100644 --- a/go.sum +++ b/go.sum @@ -421,8 +421,6 @@ github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgz github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/derision-test/glock v1.0.0 h1:b6sViZG+Cm6QtdpqbfWEjaBVbzNPntIS4GzsxpS+CmM= github.com/derision-test/glock v1.0.0/go.mod h1:jKtLdBMrF+XQatqvg46wiWdDfDSSDjdhO4dOM2FX9H4= -github.com/derision-test/go-mockgen v1.3.8-0.20240105000756-fb9effb23d90 h1:Wo7vx8f7QdBT4jxfgTvs2t9VpyFlvvqzjXoE3m7MQBU= -github.com/derision-test/go-mockgen v1.3.8-0.20240105000756-fb9effb23d90/go.mod h1:/TXUePlhtHmDDCaDAi/a4g6xOHqMDz3Wf0r2NPGskB4= github.com/dghubble/gologin/v2 v2.4.0 h1:Ga0dxZ2C/8MrMtC0qFLIg1K7cVjZQWSbTj/MIgFqMAg= github.com/dghubble/gologin/v2 v2.4.0/go.mod h1:85FO9Je/O6n9/KdHTUtVDSaXQjR6Ducx7blL/3CUfnw= github.com/dghubble/sling v1.4.1 h1:AxjTubpVyozMvbBCtXcsWEyGGgUZutC5YGrfxPNVOcQ= @@ -1706,6 +1704,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40 h1:Dup3gAgmdLe8oRshV/5mWKgcXy+gPk0n1x04b1cew/c= +github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40/go.mod h1:89jHE4KrusV6kCx9JPn5nkD7kfGD+4gtvp+ApO0lc/E= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203 h1:QVqDTf3h2WHt08YuiTGPZLls0Wq99X9bWd0Q5ZSBesM= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= From 140d42dd335e9009eda4cb6dbcca2e3d1d0412a1 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 8 Feb 2024 13:57:06 +0000 Subject: [PATCH 06/18] everything lines up, now to get it generated with gazelle --- BUILD.bazel | 11 -- WORKSPACE | 4 - cmd/gitserver/internal/BUILD.bazel | 8 ++ cmd/gitserver/internal/mocks_test.go | 9 +- dev/go_mockgen.bzl | 157 ++---------------------- dev/go_mockgen_rule.bzl | 91 ++++++++++++++ dev/write_generated_to_source_files.bzl | 12 +- 7 files changed, 124 insertions(+), 168 deletions(-) create mode 100644 dev/go_mockgen_rule.bzl diff --git a/BUILD.bazel b/BUILD.bazel index de0587c8ee25..912944338ac5 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -351,14 +351,3 @@ config_setting( "//:sg_msp": "True", }, ) - -load("//dev:go_mockgen.bzl", "go_mockgen") - -go_mockgen( - name = "sample_text", - out = "cmd/gitserver/internal/mocks_test.go", - interfaces = [ - "service", - ], - deps = "//cmd/gitserver/internal", -) diff --git a/WORKSPACE b/WORKSPACE index 73e3d88fb85e..dfedb6d48963 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -475,7 +475,3 @@ filegroup( strip_prefix = "sourcegraph-extensions-bundles-5.0.1", url = "https://github.com/sourcegraph/sourcegraph-extensions-bundles/archive/v5.0.1.zip", ) - -load("//dev:go_mockgen.bzl", "go_mockgen_config") - -go_mockgen_config(name = "go_mockgen_config") diff --git a/cmd/gitserver/internal/BUILD.bazel b/cmd/gitserver/internal/BUILD.bazel index 63badc9c713e..7da431d5dc6b 100644 --- a/cmd/gitserver/internal/BUILD.bazel +++ b/cmd/gitserver/internal/BUILD.bazel @@ -1,5 +1,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") +load("//dev:go_mockgen.bzl", "go_mockgen") + +go_mockgen( + name = "sample_text", + out = "mocks_test.go", + interfaces = ["service"], + deps = ":internal", +) go_library( name = "internal", diff --git a/cmd/gitserver/internal/mocks_test.go b/cmd/gitserver/internal/mocks_test.go index 6e50cd807af2..961eebdee2ca 100644 --- a/cmd/gitserver/internal/mocks_test.go +++ b/cmd/gitserver/internal/mocks_test.go @@ -1,21 +1,16 @@ // Code generated by go-mockgen 1.3.7; DO NOT EDIT. -// -// This file was generated by running `sg generate` (or `go-mockgen`) at the root of -// this repository. To add additional mocks to this or another package, add a new entry -// to the mockgen.yaml file in the root of this repository. package internal import ( "context" - "io" - "sync" - log "github.com/sourcegraph/log" api "github.com/sourcegraph/sourcegraph/internal/api" protocol "github.com/sourcegraph/sourcegraph/internal/gitserver/protocol" v1 "github.com/sourcegraph/sourcegraph/internal/gitserver/v1" trace "github.com/sourcegraph/sourcegraph/internal/trace" + "io" + "sync" ) // MockService is a mock implementation of the service interface (from the diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index 2d8ec2d6dc1a..a3ac61660735 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -1,150 +1,19 @@ load("@bazel_skylib//lib:paths.bzl", "paths") -load("@io_bazel_rules_go//go:def.bzl", "GoArchive", "GoSource") +load("//dev:go_mockgen_rule.bzl", "go_mockgen_generate") +load("//dev:write_generated_to_source_files.bzl", "write_generated_to_source_files") -# # TODO: copy to source tree +def go_mockgen(name, interfaces, deps, out): + gen_file = "_" + paths.basename(out) -def _go_mockgen_run(ctx): - print("archive file", ctx.attr.deps[GoArchive].data.file.path) - print("importmap", ctx.attr.deps[GoArchive].data.importmap) - print("importpath", ctx.attr.deps[GoArchive].data.importpath) - print("gomockgen files", ctx.attr.gomockgen.files.to_list()) - print("output dirname", paths.dirname(ctx.attr.out), "full output", ctx.attr.out) - print("sources", ctx.attr.deps[GoArchive].data.srcs) - print("direct deps", ctx.attr.deps[GoArchive].direct[0].data.file.path) - - dst = ctx.actions.declare_file(ctx.attr.out) - print("destination", dst.path) - - print("stdlib", ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path) - - args = [ - "--package", # output package name - paths.basename(paths.dirname(ctx.attr.out)), - "--import-path", - ctx.attr.deps[GoArchive].data.importpath, - "--interfaces", - ctx.attr.interfaces[0], - "--filename", - dst.path, - "--force", - "--disable-formatting", - "--for-test", - "--stdlibroot", - "{path}/{os}_{arch}".format( - path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, - os = ctx.attr._go_stdlib[GoSource].mode.goos, - arch = ctx.attr._go_stdlib[GoSource].mode.goarch, - ), - "--archives", - "{}={}={}={}".format( - ctx.attr.deps[GoArchive].data.importpath, - ctx.attr.deps[GoArchive].data.importmap, - ctx.attr.deps[GoArchive].data.file.path, - ctx.attr.deps[GoArchive].data.file.path, - ), - ] - - deps = [] - for a in ctx.attr.deps[GoArchive].direct: - args.append("--archives") - args.append("{}={}={}={}".format( - a.data.importpath, - a.data.importmap, - a.data.file.path, - a.data.file.path, - )) - deps.append(depset(direct = [a.data.file])) - - for src in ctx.attr.deps[GoArchive].data.srcs: - args.extend(["--sources", src.path]) - deps.append(depset(direct = [src])) - - args.append(ctx.attr.deps[GoArchive].data.importpath) - - ctx.actions.run( - mnemonic = "GoMockgen", - arguments = args, - executable = ctx.executable.gomockgen, - outputs = [dst], - inputs = depset(direct = [ctx.attr.deps[GoArchive].data.file, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]], transitive = deps), - progress_message = "Running go-mockgen to generate %s" % dst.path, + go_mockgen_generate( + name = name + "_generate", + interfaces = interfaces, + deps = deps, + out = gen_file, ) - return [ - DefaultInfo( - files = depset([dst]), - ), - ] - -go_mockgen = rule( - implementation = _go_mockgen_run, - attrs = { - "interfaces": attr.string_list( - mandatory = True, - ), - "deps": attr.label( - # change to label_list? - providers = [GoArchive], - # allow_empty = False, - mandatory = True, - ), - "out": attr.string( - mandatory = True, - ), - "gomockgen": attr.label( - default = Label("@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen"), - executable = True, - cfg = "exec", - ), - "_go_stdlib": attr.label( - providers = [GoSource], - default = Label("@io_bazel_rules_go//:stdlib"), - ), - "_runfiles_lib": attr.label(default = "@bazel_tools//tools/bash/runfiles", allow_single_file = True), - }, -) - -def _go_mockgen_config(rctx): - yq_path = rctx.path( - Label("@yq-{}-{}//file:downloaded".format({ - "mac os x": "darwin", - "linux": "linux", - }[rctx.os.name], { - "aarch64": "arm64", - "arm64": "arm64", - "amd64": "amd64", - "x86_64": "amd64", - "x86": "amd64", - }[rctx.os.arch])), + write_generated_to_source_files( + name = name, + output_files = {out: gen_file}, + target = ":" + name + "_generate", ) - - mockgen_path = rctx.path(Label("//:mockgen.yaml")) - - # TODO: we have to write the targets to a .bzl file that is NOT BUILD.bazel, - # so that we can load the file and run a function to add the targets to the - # right namespace. Else they'd be trying to reference e.g. //cmd/gitserver/internal - # in the go-mockgen bazel repository workspace instead of the sourcegraph workspace - # rctx.file("BUILD", "[]") - rctx.template("BUILD", Label("//dev:go-mockgen.tpl")) - - base_config = yaml_to_json(rctx, yq_path, mockgen_path) - - # prefix for the top of each generated file - file_prefix = base_config["file-prefix"] - - for config in base_config["include-config-paths"]: - # parse each to determine what to generate and where - c = yaml_to_json(rctx, yq_path, rctx.path(Label("//:{}".format(config)))) - - # TODO: finish the owl - -def yaml_to_json(rctx, yq_path, path): - res = rctx.execute([yq_path, "-p", "yaml", "-o", "json", path]) - if res.return_code != 0: - fail("failed to run yq: {}".format(res.stderr)) - - return json.decode(res.stdout) - -go_mockgen_config = repository_rule( - implementation = _go_mockgen_config, -) diff --git a/dev/go_mockgen_rule.bzl b/dev/go_mockgen_rule.bzl new file mode 100644 index 000000000000..0e93484916a9 --- /dev/null +++ b/dev/go_mockgen_rule.bzl @@ -0,0 +1,91 @@ +load("@bazel_skylib//lib:paths.bzl", "paths") +load("@io_bazel_rules_go//go:def.bzl", "GoArchive", "GoSource") + +def _go_mockgen_run(ctx): + dst = ctx.actions.declare_file(ctx.attr.out) + + args = [ + "--package", # output package name + paths.basename(paths.dirname(ctx.attr.out)), + "--import-path", + ctx.attr.deps[GoArchive].data.importpath, + "--interfaces", + ctx.attr.interfaces[0], + "--filename", + dst.path, + "--force", + "--disable-formatting", + "--stdlibroot", + "{path}/{os}_{arch}".format( + path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, + os = ctx.attr._go_stdlib[GoSource].mode.goos, + arch = ctx.attr._go_stdlib[GoSource].mode.goarch, + ), + "--archives", + "{}={}={}={}".format( + ctx.attr.deps[GoArchive].data.importpath, + ctx.attr.deps[GoArchive].data.importmap, + ctx.attr.deps[GoArchive].data.file.path, + ctx.attr.deps[GoArchive].data.file.path, + ), + ] + + deps = [] + for a in ctx.attr.deps[GoArchive].direct: + args.append("--archives") + args.append("{}={}={}={}".format( + a.data.importpath, + a.data.importmap, + a.data.file.path, + a.data.file.path, + )) + deps.append(depset(direct = [a.data.file])) + + for src in ctx.attr.deps[GoArchive].data.srcs: + args.extend(["--sources", src.path]) + deps.append(depset(direct = [src])) + + args.append(ctx.attr.deps[GoArchive].data.importpath) + + ctx.actions.run( + mnemonic = "GoMockgen", + arguments = args, + executable = ctx.executable.gomockgen, + outputs = [dst], + inputs = depset(direct = [ctx.attr.deps[GoArchive].data.file, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]], transitive = deps), + progress_message = "Running go-mockgen to generate %s" % dst.short_path, + ) + + return [ + DefaultInfo( + files = depset([dst]), + ), + ] + +go_mockgen_generate = rule( + implementation = _go_mockgen_run, + attrs = { + "interfaces": attr.string_list( + mandatory = True, + ), + "deps": attr.label( + # change to label_list? + providers = [GoArchive], + # allow_empty = False, + mandatory = True, + ), + "out": attr.string( + mandatory = True, + ), + "gomockgen": attr.label( + default = Label("@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen"), + executable = True, + cfg = "exec", + ), + "_go_stdlib": attr.label( + providers = [GoSource], + default = Label("@io_bazel_rules_go//:stdlib"), + ), + "_runfiles_lib": attr.label(default = "@bazel_tools//tools/bash/runfiles", allow_single_file = True), + }, +) diff --git a/dev/write_generated_to_source_files.bzl b/dev/write_generated_to_source_files.bzl index 94b6e81aa55c..ea5ee4c67285 100644 --- a/dev/write_generated_to_source_files.bzl +++ b/dev/write_generated_to_source_files.bzl @@ -1,8 +1,16 @@ -load("@aspect_bazel_lib//lib:directory_path.bzl", "make_directory_path") load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") +load("@aspect_bazel_lib//lib:directory_path.bzl", "make_directory_path") load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") -def write_generated_to_source_files(name, target, output_files, verbose_copy = False, **kwargs): +def write_generated_to_source_files(name, target, output_files, **kwargs): + """Function description. + + Args: + name: Name of the rule. + target: The target that generates files to copy. + output_files: A map of {dest: source} for files to copy. + **kwargs: Additional keyword arguments. + """ for dest, orig in output_files.items(): if dest == orig: fail("{} and {} must differ so we can detect source files needing to be regenerated".format(dest, orig)) From d042f16e585951f6cfdd7e5834d470726d1e3643 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 8 Feb 2024 14:47:09 +0000 Subject: [PATCH 07/18] implement goimports support --- cmd/gitserver/internal/mocks_test.go | 5 +++-- dev/go-mockgen.tpl | 2 -- dev/go_mockgen_rule.bzl | 14 +++++++++++--- mockgen.yaml | 2 ++ 4 files changed, 16 insertions(+), 7 deletions(-) delete mode 100644 dev/go-mockgen.tpl diff --git a/cmd/gitserver/internal/mocks_test.go b/cmd/gitserver/internal/mocks_test.go index 961eebdee2ca..eefd2d127c77 100644 --- a/cmd/gitserver/internal/mocks_test.go +++ b/cmd/gitserver/internal/mocks_test.go @@ -4,13 +4,14 @@ package internal import ( "context" + "io" + "sync" + log "github.com/sourcegraph/log" api "github.com/sourcegraph/sourcegraph/internal/api" protocol "github.com/sourcegraph/sourcegraph/internal/gitserver/protocol" v1 "github.com/sourcegraph/sourcegraph/internal/gitserver/v1" trace "github.com/sourcegraph/sourcegraph/internal/trace" - "io" - "sync" ) // MockService is a mock implementation of the service interface (from the diff --git a/dev/go-mockgen.tpl b/dev/go-mockgen.tpl deleted file mode 100644 index 81a9fc7060fd..000000000000 --- a/dev/go-mockgen.tpl +++ /dev/null @@ -1,2 +0,0 @@ -load("//dev:go_mockgen.bzl", "go_mockgen") - diff --git a/dev/go_mockgen_rule.bzl b/dev/go_mockgen_rule.bzl index 0e93484916a9..fd9cf638a888 100644 --- a/dev/go_mockgen_rule.bzl +++ b/dev/go_mockgen_rule.bzl @@ -14,7 +14,9 @@ def _go_mockgen_run(ctx): "--filename", dst.path, "--force", - "--disable-formatting", + # "--disable-formatting", + "--goimports", + ctx.executable._goimports.path, "--stdlibroot", "{path}/{os}_{arch}".format( path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, @@ -50,8 +52,9 @@ def _go_mockgen_run(ctx): ctx.actions.run( mnemonic = "GoMockgen", arguments = args, - executable = ctx.executable.gomockgen, + executable = ctx.executable._gomockgen, outputs = [dst], + tools = [ctx.executable._goimports], inputs = depset(direct = [ctx.attr.deps[GoArchive].data.file, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]], transitive = deps), progress_message = "Running go-mockgen to generate %s" % dst.short_path, ) @@ -77,11 +80,16 @@ go_mockgen_generate = rule( "out": attr.string( mandatory = True, ), - "gomockgen": attr.label( + "_gomockgen": attr.label( default = Label("@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen"), executable = True, cfg = "exec", ), + "_goimports": attr.label( + default = Label("@org_golang_x_tools//cmd/goimports:goimports"), + executable = True, + cfg = "exec", + ), "_go_stdlib": attr.label( providers = [GoSource], default = Label("@io_bazel_rules_go//:stdlib"), diff --git a/mockgen.yaml b/mockgen.yaml index a5a24e9e3372..eb7808f24c1f 100644 --- a/mockgen.yaml +++ b/mockgen.yaml @@ -20,6 +20,8 @@ include-config-paths: - mockgen.test.yaml - mockgen.temp.yaml +# some of these values are ignored by bazel (such as force and goimports) as theyre not +# transferable or dont make sense force: true goimports: ./.bin/goimports file-prefix: | From 0ddbb09d985bf5f0d4df0e1524a03f9fa50dbb26 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 8 Feb 2024 19:36:00 +0000 Subject: [PATCH 08/18] buncha stuff to make it work in a wider range of options --- cmd/gitserver/internal/BUILD.bazel | 7 +- deps.bzl | 11 + dev/go_mockgen.bzl | 3 +- dev/go_mockgen_rule.bzl | 118 ++++++--- gen.go | 2 +- go.mod | 5 +- internal/codeintel/ranking/BUILD.bazel | 19 ++ internal/codeintel/ranking/mocks_test.go | 4 - .../com_github_strum355_gomockgen/BUILD.bazel | 1 + .../com_github_strum355_gomockgen/debug.patch | 248 ++++++++++++++++++ 10 files changed, 376 insertions(+), 42 deletions(-) create mode 100644 third_party/com_github_strum355_gomockgen/BUILD.bazel create mode 100644 third_party/com_github_strum355_gomockgen/debug.patch diff --git a/cmd/gitserver/internal/BUILD.bazel b/cmd/gitserver/internal/BUILD.bazel index 7da431d5dc6b..7003488e73d0 100644 --- a/cmd/gitserver/internal/BUILD.bazel +++ b/cmd/gitserver/internal/BUILD.bazel @@ -6,7 +6,12 @@ go_mockgen( name = "sample_text", out = "mocks_test.go", interfaces = ["service"], - deps = ":internal", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":internal"], ) go_library( diff --git a/deps.bzl b/deps.bzl index 52d9e06ff212..4d168d5d580d 100644 --- a/deps.bzl +++ b/deps.bzl @@ -1243,6 +1243,10 @@ def go_dependencies(): name = "com_github_derision_test_go_mockgen", build_file_proto_mode = "disable_global", importpath = "github.com/derision-test/go-mockgen", + patch_args = ["-p1"], + patches = [ + "//third_party/com_github_strum355_gomockgen:debug.patch", + ], replace = "github.com/strum355/go-mockgen", sum = "h1:Dup3gAgmdLe8oRshV/5mWKgcXy+gPk0n1x04b1cew/c=", version = "v0.0.0-20240207152121-3f1b41cc8c40", @@ -7499,6 +7503,13 @@ def go_dependencies(): sum = "h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=", version = "v0.17.0", ) + go_repository( + name = "org_golang_x_tools_go_vcs", + build_file_proto_mode = "disable_global", + importpath = "golang.org/x/tools/go/vcs", + sum = "h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4=", + version = "v0.1.0-deprecated", + ) go_repository( name = "org_golang_x_xerrors", build_file_proto_mode = "disable_global", diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index a3ac61660735..822f29f7446c 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -2,7 +2,7 @@ load("@bazel_skylib//lib:paths.bzl", "paths") load("//dev:go_mockgen_rule.bzl", "go_mockgen_generate") load("//dev:write_generated_to_source_files.bzl", "write_generated_to_source_files") -def go_mockgen(name, interfaces, deps, out): +def go_mockgen(name, manifests, interfaces, deps, out): gen_file = "_" + paths.basename(out) go_mockgen_generate( @@ -10,6 +10,7 @@ def go_mockgen(name, interfaces, deps, out): interfaces = interfaces, deps = deps, out = gen_file, + manifests = manifests, ) write_generated_to_source_files( diff --git a/dev/go_mockgen_rule.bzl b/dev/go_mockgen_rule.bzl index fd9cf638a888..2650b0686339 100644 --- a/dev/go_mockgen_rule.bzl +++ b/dev/go_mockgen_rule.bzl @@ -1,20 +1,18 @@ -load("@bazel_skylib//lib:paths.bzl", "paths") load("@io_bazel_rules_go//go:def.bzl", "GoArchive", "GoSource") +load("@aspect_bazel_lib//lib:yq.bzl", "yq") def _go_mockgen_run(ctx): dst = ctx.actions.declare_file(ctx.attr.out) + # config_dst = ctx.actions.declare_file("mockgen.yaml") + + print("IMPORT PATH", "github.com/sourcegraph/sourcegraph/" + ctx.label.package) args = [ - "--package", # output package name - paths.basename(paths.dirname(ctx.attr.out)), "--import-path", - ctx.attr.deps[GoArchive].data.importpath, - "--interfaces", - ctx.attr.interfaces[0], + "github.com/sourcegraph/sourcegraph/" + ctx.label.package, "--filename", dst.path, "--force", - # "--disable-formatting", "--goimports", ctx.executable._goimports.path, "--stdlibroot", @@ -23,31 +21,70 @@ def _go_mockgen_run(ctx): os = ctx.attr._go_stdlib[GoSource].mode.goos, arch = ctx.attr._go_stdlib[GoSource].mode.goarch, ), - "--archives", - "{}={}={}={}".format( - ctx.attr.deps[GoArchive].data.importpath, - ctx.attr.deps[GoArchive].data.importmap, - ctx.attr.deps[GoArchive].data.file.path, - ctx.attr.deps[GoArchive].data.file.path, - ), ] + for interface in ctx.attr.interfaces: + args.extend([ + "--interfaces", + interface, + ]) + + for dep in ctx.attr.deps: + args.extend([ + "--archives", + "{}={}={}={}".format( + dep[GoArchive].data.importpath, + dep[GoArchive].data.importmap, + dep[GoArchive].data.file.path, + dep[GoArchive].data.file.path, + ), + ]) + + if ctx.attr.outpackage != None: + args.extend([ + "--package", # will be inferred if not explicitly passed + ctx.attr.outpackage, + ]) + + # transformer_args = [config_dst.path] + transformer_args = [] deps = [] - for a in ctx.attr.deps[GoArchive].direct: - args.append("--archives") - args.append("{}={}={}={}".format( - a.data.importpath, - a.data.importmap, - a.data.file.path, - a.data.file.path, - )) - deps.append(depset(direct = [a.data.file])) + for dep in ctx.attr.deps: + for a in dep[GoArchive].direct: + transformer_args.append("--archives") + transformer_args.append("{}={}={}={}".format( + a.data.importpath, + a.data.importmap, + a.data.file.path, + a.data.file.path, + )) + deps.append(depset(direct = [a.data.file])) + + for dep in ctx.attr.deps: + for src in dep[GoArchive].data.srcs: + transformer_args.extend(["--source-files", "%s=%s" % (dep[GoArchive].data.importpath, src.path)]) + deps.append(depset(direct = [src])) + + args.extend(transformer_args) # TODO: remove when moving to transformer + for dep in ctx.attr.deps: + args.append(dep[GoArchive].data.importpath) + + manifests = [] + for f in ctx.attr.manifests: + manifests.extend(f.files.to_list()) - for src in ctx.attr.deps[GoArchive].data.srcs: - args.extend(["--sources", src.path]) - deps.append(depset(direct = [src])) + # ctx.actions.run( + # mnemonic = "GoMockgenConfigTransform", + # executable = ctx.executable._gomockgen_transformer, + # args = [config_dst.path], + # outputs = [config_dst], + # inputs = depset(direct = manifests), + # progress_message = "Transforming go-mockgen config for %s" % ctx.label.package, # name = path? double check + # ) - args.append(ctx.attr.deps[GoArchive].data.importpath) + action_direct_deps = [ctx.attr._go_stdlib[GoSource].stdlib.libs[0]] + for dep in ctx.attr.deps: + action_direct_deps.append(dep[GoArchive].data.file) ctx.actions.run( mnemonic = "GoMockgen", @@ -55,7 +92,11 @@ def _go_mockgen_run(ctx): executable = ctx.executable._gomockgen, outputs = [dst], tools = [ctx.executable._goimports], - inputs = depset(direct = [ctx.attr.deps[GoArchive].data.file, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]], transitive = deps), + inputs = depset( + # TODO: config file when moving to yaml + direct = action_direct_deps, + transitive = deps, + ), progress_message = "Running go-mockgen to generate %s" % dst.short_path, ) @@ -71,15 +112,27 @@ go_mockgen_generate = rule( "interfaces": attr.string_list( mandatory = True, ), - "deps": attr.label( + "outpackage": attr.string( + mandatory = False, + ), + "deps": attr.label_list( # change to label_list? providers = [GoArchive], - # allow_empty = False, + allow_empty = False, mandatory = True, ), "out": attr.string( mandatory = True, ), + "manifests": attr.label_list( + allow_files = True, + mandatory = False, + ), + "_gomockgen_transformer": attr.label( + default = Label("//dev/go-mockgen-transformer:go-mockgen-transformer"), + executable = True, + cfg = "exec", + ), "_gomockgen": attr.label( default = Label("@com_github_derision_test_go_mockgen//cmd/go-mockgen:go-mockgen"), executable = True, @@ -94,6 +147,9 @@ go_mockgen_generate = rule( providers = [GoSource], default = Label("@io_bazel_rules_go//:stdlib"), ), - "_runfiles_lib": attr.label(default = "@bazel_tools//tools/bash/runfiles", allow_single_file = True), + "_runfiles_lib": attr.label( + default = "@bazel_tools//tools/bash/runfiles", + allow_single_file = True, + ), }, ) diff --git a/gen.go b/gen.go index 4a5bc67bbbe2..ef4f4c91a24a 100644 --- a/gen.go +++ b/gen.go @@ -1,5 +1,5 @@ package sourcegraph // Keep these versions in sync with go.mod -//go:generate env GOBIN=$PWD/.bin GO111MODULE=on go install golang.org/x/tools/cmd/goimports@v0.1.10 +//go:generate env GOBIN=$PWD/.bin GO111MODULE=on go install golang.org/x/tools/cmd/goimports@v0.17.0 //go:generate go run github.com/derision-test/go-mockgen/cmd/go-mockgen@v1.3.8-0.20240105000756-fb9effb23d90 diff --git a/go.mod b/go.mod index eae38f607747..3efc128c4076 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/sourcegraph/sourcegraph -go 1.21 +go 1.21.4 // Permanent replace directives // ============================ @@ -31,7 +31,6 @@ replace ( // These entries indicate temporary replace directives due to a pending pull request upstream // or issues with specific versions. replace ( - github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40 // Pending: https://github.com/ghodss/yaml/pull/65 github.com/ghodss/yaml => github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 @@ -229,8 +228,6 @@ require ( golang.org/x/sync v0.6.0 golang.org/x/sys v0.16.0 golang.org/x/time v0.5.0 - // golang.org/x/tools should not be upgraded until https://github.com/bazelbuild/bazel-gazelle/issues/1579 - // is resolved. golang.org/x/tools v0.17.0 gonum.org/v1/gonum v0.13.0 google.golang.org/api v0.156.0 diff --git a/internal/codeintel/ranking/BUILD.bazel b/internal/codeintel/ranking/BUILD.bazel index 449a7396868c..4e9529390792 100644 --- a/internal/codeintel/ranking/BUILD.bazel +++ b/internal/codeintel/ranking/BUILD.bazel @@ -1,5 +1,24 @@ load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("//dev:go_mockgen.bzl", "go_mockgen") + +go_mockgen( + name = "sample_text", + out = "mocks_test.go", + interfaces = [ + "Store", + "SiteConfigQuerier", + ], + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//internal/codeintel/ranking/internal/store", + "//internal/conf/conftypes", + ], +) go_library( name = "ranking", diff --git a/internal/codeintel/ranking/mocks_test.go b/internal/codeintel/ranking/mocks_test.go index 55404a5985b3..dabb7575da49 100644 --- a/internal/codeintel/ranking/mocks_test.go +++ b/internal/codeintel/ranking/mocks_test.go @@ -1,8 +1,4 @@ // Code generated by go-mockgen 1.3.7; DO NOT EDIT. -// -// This file was generated by running `sg generate` (or `go-mockgen`) at the root of -// this repository. To add additional mocks to this or another package, add a new entry -// to the mockgen.yaml file in the root of this repository. package ranking diff --git a/third_party/com_github_strum355_gomockgen/BUILD.bazel b/third_party/com_github_strum355_gomockgen/BUILD.bazel new file mode 100644 index 000000000000..af49d1ebbf8f --- /dev/null +++ b/third_party/com_github_strum355_gomockgen/BUILD.bazel @@ -0,0 +1 @@ +exports_files(glob(["*"])) diff --git a/third_party/com_github_strum355_gomockgen/debug.patch b/third_party/com_github_strum355_gomockgen/debug.patch new file mode 100644 index 000000000000..ab82acf85d20 --- /dev/null +++ b/third_party/com_github_strum355_gomockgen/debug.patch @@ -0,0 +1,248 @@ +diff --git a/cmd/go-mockgen/archive.go b/cmd/go-mockgen/archive.go +index 7663519..fc97255 100644 +--- a/cmd/go-mockgen/archive.go ++++ b/cmd/go-mockgen/archive.go +@@ -61,43 +61,44 @@ func parseArchive(a string) (archive, error) { + }, nil + } + +-func PackagesArchive(p loadParams) ([]*internal.GoPackage, error) { +- files := make([]*ast.File, 0, len(p.sources)) +- for _, src := range p.sources { +- f, err := parser.ParseFile(p.fset, src, nil, parser.ParseComments) +- if err != nil { +- return nil, fmt.Errorf("error parsing %q: %v", src, err) ++func PackagesArchive(p loadParams) (packages []*internal.GoPackage, err error) { ++ for _, importpath := range p.importPaths { ++ files := make([]*ast.File, 0, len(p.sources)) ++ for _, src := range p.sources[importpath] { ++ f, err := parser.ParseFile(p.fset, src, nil, parser.ParseComments) ++ if err != nil { ++ return nil, fmt.Errorf("error parsing %q: %v", src, err) ++ } ++ files = append(files, f) + } +- files = append(files, f) +- } + +- // Build an importer using the imports map built by reading dependency +- // archives, and use it to build the *types.Package and *types.Info for the +- // source files. +- imp, err := newImporter(p.fset, p.archives, p.stdlibRoot) +- if err != nil { +- return nil, err +- } +- conf := types.Config{Importer: imp} +- typesInfo := &types.Info{ +- Types: make(map[ast.Expr]types.TypeAndValue), +- Defs: make(map[*ast.Ident]types.Object), +- Uses: make(map[*ast.Ident]types.Object), +- Implicits: make(map[ast.Node]types.Object), +- Selections: make(map[*ast.SelectorExpr]*types.Selection), +- Scopes: make(map[ast.Node]*types.Scope), +- } +- pkg, err := conf.Check(p.importPaths[0], p.fset, files, typesInfo) +- if err != nil { +- return nil, fmt.Errorf("error building pkg %q: %v", p.importPaths[0], err) +- } +- return []*internal.GoPackage{ +- { ++ // Build an importer using the imports map built by reading dependency ++ // archives, and use it to build the *types.Package and *types.Info for the ++ // source files. ++ imp, err := newImporter(p.fset, p.archives, p.stdlibRoot) ++ if err != nil { ++ return nil, err ++ } ++ conf := types.Config{Importer: imp} ++ typesInfo := &types.Info{ ++ Types: make(map[ast.Expr]types.TypeAndValue), ++ Defs: make(map[*ast.Ident]types.Object), ++ Uses: make(map[*ast.Ident]types.Object), ++ Implicits: make(map[ast.Node]types.Object), ++ Selections: make(map[*ast.SelectorExpr]*types.Selection), ++ Scopes: make(map[ast.Node]*types.Scope), ++ } ++ pkg, err := conf.Check(importpath, p.fset, files, typesInfo) ++ if err != nil { ++ return nil, fmt.Errorf("error building pkg %q: %v", importpath, err) ++ } ++ packages = append(packages, &internal.GoPackage{ + PkgPath: pkg.Path(), +- CompiledGoFiles: p.sources, ++ CompiledGoFiles: p.sources[importpath], + Syntax: files, + Types: pkg, + TypesInfo: typesInfo, +- }, +- }, nil ++ }) ++ } ++ return + } +diff --git a/cmd/go-mockgen/args.go b/cmd/go-mockgen/args.go +index ac0e58b..93bfd0e 100644 +--- a/cmd/go-mockgen/args.go ++++ b/cmd/go-mockgen/args.go +@@ -84,7 +84,7 @@ func parseFlags() (*generation.Options, error) { + app.Flag("build-constraints", "Build constraints that are added to each generated file.").StringVar(&opts.ContentOptions.BuildConstraints) + + app.Flag("archives", "Values of the format IMPORTPATHS=IMPORTMAP=FILE=EXPORT, where IMPORTPATHS is a colon-delimited list of import paths, IMPORTMAP is the import path of the archive, FILE is the archive file path, and EXPORT is the export file path.").StringsVar(&opts.PackageOptions[0].Archives) +- app.Flag("sources", "When using gcexportdata archives, specifies the filepaths to the sources to be parsed").StringsVar(&opts.PackageOptions[0].Sources) ++ app.Flag("source-files", "Values of the format IMPORTPATH=FILE, where IMPORTPATH is the import path of FILE, when using gcexportdata archives, specifies the filepaths to the sources to be parsed").StringsVar(&opts.PackageOptions[0].Sources) + app.Flag("stdlibroot", "When using gcexportdata archives, specifies the path containing archive files for the Go stdlib").StringVar(&opts.PackageOptions[0].StdlibRoot) + + if _, err := app.Parse(os.Args[1:]); err != nil { +@@ -130,6 +130,10 @@ func parseManifest() ([]*generation.Options, error) { + opts.ForTest = true + } + ++ if len(opts.Paths) > 0 && len(opts.Archives) > 0 { ++ return nil, fmt.Errorf("multiple import paths and archives are mutually exclusive") ++ } ++ + // Canonicalization + paths := opts.Paths + if opts.Path != "" { +@@ -143,11 +147,15 @@ func parseManifest() ([]*generation.Options, error) { + + var packageOptions []generation.PackageOptions + if len(opts.Sources) > 0 { +- if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 { +- return nil, fmt.Errorf("sources and path/paths/interfaces are mutually exclusive") ++ if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 || opts.Path != "" || len(opts.Archives) > 0 || len(opts.SourceFiles) > 0 { ++ return nil, fmt.Errorf("sources and path/paths/interfaces/archives/sourcefiles are mutually exclusive") + } + + for _, source := range opts.Sources { ++ if len(source.Paths) > 0 && len(source.Archives) > 0 { ++ return nil, fmt.Errorf("multiple import paths and archives are mutually exclusive") ++ } ++ + // Canonicalization + paths := source.Paths + if source.Path != "" { +@@ -159,6 +167,9 @@ func parseManifest() ([]*generation.Options, error) { + Interfaces: source.Interfaces, + Exclude: source.Exclude, + Prefix: source.Prefix, ++ Archives: opts.Archives, ++ Sources: opts.SourceFiles, ++ StdlibRoot: payload.StdlibRoot, + }) + } + } else { +@@ -167,6 +178,9 @@ func parseManifest() ([]*generation.Options, error) { + Interfaces: opts.Interfaces, + Exclude: opts.Exclude, + Prefix: opts.Prefix, ++ Archives: opts.Archives, ++ Sources: opts.SourceFiles, ++ StdlibRoot: payload.StdlibRoot, + }) + } + +@@ -207,6 +221,8 @@ type yamlPayload struct { + ForTest bool `yaml:"for-test"` + FilePrefix string `yaml:"file-prefix"` + ++ StdlibRoot string `yaml:"stdlib-root"` ++ + Mocks []yamlMock `yaml:"mocks"` + } + +@@ -214,6 +230,8 @@ type yamlMock struct { + Path string `yaml:"path"` + Paths []string `yaml:"paths"` + Sources []yamlSource `yaml:"sources"` ++ SourceFiles []string `yaml:"source-files"` ++ Archives []string `yaml:"archives"` + Package string `yaml:"package"` + Interfaces []string `yaml:"interfaces"` + Exclude []string `yaml:"exclude"` +@@ -230,11 +248,13 @@ type yamlMock struct { + } + + type yamlSource struct { +- Path string `yaml:"path"` +- Paths []string `yaml:"paths"` +- Interfaces []string `yaml:"interfaces"` +- Exclude []string `yaml:"exclude"` +- Prefix string `yaml:"prefix"` ++ Path string `yaml:"path"` ++ Paths []string `yaml:"paths"` ++ Interfaces []string `yaml:"interfaces"` ++ Exclude []string `yaml:"exclude"` ++ Prefix string `yaml:"prefix"` ++ SourceFiles []string `yaml:"source-files"` ++ Archives []string `yaml:"archives"` + } + + func readManifest() (yamlPayload, error) { +diff --git a/cmd/go-mockgen/main.go b/cmd/go-mockgen/main.go +index 99eb342..7924d5b 100644 +--- a/cmd/go-mockgen/main.go ++++ b/cmd/go-mockgen/main.go +@@ -46,22 +46,34 @@ func mainErr() error { + return err + } + +- var importPaths []string ++ var ( ++ importPaths []string ++ archives []archive ++ // map of import path to sources ++ sources = make(map[string][]string) ++ ) + for _, opts := range allOptions { + for _, packageOpts := range opts.PackageOptions { + importPaths = append(importPaths, packageOpts.ImportPaths...) ++ for _, sourcefile := range packageOpts.Sources { ++ split := strings.Split(sourcefile, "=") ++ if len(split) == 2 { ++ sources[split[0]] = append(sources[split[0]], split[1]) ++ } else { ++ // pre-validated in args.go#parseManifest ++ sources[packageOpts.ImportPaths[0]] = append(sources[packageOpts.ImportPaths[0]], sourcefile) ++ } ++ } ++ for _, archive := range packageOpts.Archives { ++ a, err := parseArchive(archive) ++ if err != nil { ++ return err ++ } ++ archives = append(archives, a) ++ } + } + } + +- archives := make([]archive, 0, len(allOptions[0].PackageOptions[0].Archives)) +- for _, archive := range allOptions[0].PackageOptions[0].Archives { +- a, err := parseArchive(archive) +- if err != nil { +- return err +- } +- archives = append(archives, a) +- } +- + log.Printf("loading data for %d packages\n", len(importPaths)) + + pkgs, err := loadPackages(loadParams{ +@@ -69,7 +81,7 @@ func mainErr() error { + importPaths: importPaths, + // gcexportdata + archives: archives, +- sources: allOptions[0].PackageOptions[0].Sources, ++ sources: sources, + stdlibRoot: allOptions[0].PackageOptions[0].StdlibRoot, + }) + if err != nil { +@@ -114,7 +126,7 @@ type loadParams struct { + + // gcexportdata specific params + archives []archive +- sources []string ++ sources map[string][]string + stdlibRoot string + } + From 5816907b7b37198d79f9522a3889d423ddc40ea3 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 8 Feb 2024 22:23:29 +0000 Subject: [PATCH 09/18] move away from go-mockgen cli flags to generating a mockgen.yaml --- cmd/cody-gateway/internal/dotcom/BUILD.bazel | 14 +++ cmd/gitserver/internal/BUILD.bazel | 1 - dev/go-mockgen-transformer/BUILD.bazel | 18 +++ dev/go-mockgen-transformer/load.go | 96 ++++++++++++++++ dev/go-mockgen-transformer/main.go | 103 ++++++++++++++++++ dev/go_mockgen.bzl | 6 +- dev/go_mockgen_rule.bzl | 97 +++++------------ internal/codeintel/ranking/BUILD.bazel | 4 - internal/codeintel/ranking/mocks_test.go | 4 + .../com_github_strum355_gomockgen/debug.patch | 95 +++++++++++++--- 10 files changed, 343 insertions(+), 95 deletions(-) create mode 100644 dev/go-mockgen-transformer/BUILD.bazel create mode 100644 dev/go-mockgen-transformer/load.go create mode 100644 dev/go-mockgen-transformer/main.go diff --git a/cmd/cody-gateway/internal/dotcom/BUILD.bazel b/cmd/cody-gateway/internal/dotcom/BUILD.bazel index caca775d12b3..ace65cdda701 100644 --- a/cmd/cody-gateway/internal/dotcom/BUILD.bazel +++ b/cmd/cody-gateway/internal/dotcom/BUILD.bazel @@ -1,6 +1,20 @@ load("//dev:go_defs.bzl", "go_test") load("//dev:write_generated_to_source_files.bzl", "write_generated_to_source_files") load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("//dev:go_mockgen.bzl", "go_mockgen") + +go_mockgen( + name = "sample_text", + out = "mocks.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "@com_github_khan_genqlient//graphql", + ], +) go_library( name = "dotcom", diff --git a/cmd/gitserver/internal/BUILD.bazel b/cmd/gitserver/internal/BUILD.bazel index 7003488e73d0..f4e83c0dec11 100644 --- a/cmd/gitserver/internal/BUILD.bazel +++ b/cmd/gitserver/internal/BUILD.bazel @@ -5,7 +5,6 @@ load("//dev:go_mockgen.bzl", "go_mockgen") go_mockgen( name = "sample_text", out = "mocks_test.go", - interfaces = ["service"], manifests = [ "//:mockgen.yaml", "//:mockgen.test.yaml", diff --git a/dev/go-mockgen-transformer/BUILD.bazel b/dev/go-mockgen-transformer/BUILD.bazel new file mode 100644 index 000000000000..9532003a4862 --- /dev/null +++ b/dev/go-mockgen-transformer/BUILD.bazel @@ -0,0 +1,18 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + +go_library( + name = "go-mockgen-transformer_lib", + srcs = [ + "load.go", + "main.go", + ], + importpath = "github.com/sourcegraph/sourcegraph/dev/go-mockgen-transformer", + visibility = ["//visibility:private"], + deps = ["@in_gopkg_yaml_v3//:yaml_v3"], +) + +go_binary( + name = "go-mockgen-transformer", + embed = [":go-mockgen-transformer_lib"], + visibility = ["//visibility:public"], +) diff --git a/dev/go-mockgen-transformer/load.go b/dev/go-mockgen-transformer/load.go new file mode 100644 index 000000000000..8d40d12c388f --- /dev/null +++ b/dev/go-mockgen-transformer/load.go @@ -0,0 +1,96 @@ +package main + +// +// TODO: expose this directly in go-mockgen +// + +import ( + "os" + + "gopkg.in/yaml.v3" +) + +type yamlPayload struct { + // Meta options + IncludeConfigPaths []string `yaml:"include-config-paths,omitempty"` + + // Global options + Exclude []string `yaml:"exclude,omitempty"` + Prefix string `yaml:"prefix,omitempty"` + ConstructorPrefix string `yaml:"constructor-prefix,omitempty"` + Force bool `yaml:"force,omitempty"` + DisableFormatting bool `yaml:"disable-formatting,omitempty"` + Goimports string `yaml:"goimports,omitempty"` + ForTest bool `yaml:"for-test,omitempty"` + FilePrefix string `yaml:"file-prefix,omitempty"` + + StdlibRoot string `yaml:"stdlib-root,omitempty"` + + Mocks []yamlMock `yaml:"mocks,omitempty"` +} + +type yamlMock struct { + Path string `yaml:"path,omitempty"` + Paths []string `yaml:"paths,omitempty"` + Sources []yamlSource `yaml:"sources,omitempty"` + SourceFiles []string `yaml:"source-files,omitempty"` + Archives []string `yaml:"archives,omitempty"` + Package string `yaml:"package,omitempty"` + Interfaces []string `yaml:"interfaces,omitempty"` + Exclude []string `yaml:"exclude,omitempty"` + Dirname string `yaml:"dirname,omitempty"` + Filename string `yaml:"filename,omitempty"` + ImportPath string `yaml:"import-path,omitempty"` + Prefix string `yaml:"prefix,omitempty"` + ConstructorPrefix string `yaml:"constructor-prefix,omitempty"` + Force bool `yaml:"force,omitempty"` + DisableFormatting bool `yaml:"disable-formatting,omitempty"` + Goimports string `yaml:"goimports,omitempty"` + ForTest bool `yaml:"for-test,omitempty"` + FilePrefix string `yaml:"file-prefix,omitempty"` +} + +type yamlSource struct { + Path string `yaml:"path,omitempty"` + Paths []string `yaml:"paths,omitempty"` + Interfaces []string `yaml:"interfaces,omitempty"` + Exclude []string `yaml:"exclude,omitempty"` + Prefix string `yaml:"prefix,omitempty"` + SourceFiles []string `yaml:"source-files,omitempty"` +} + +func readManifest() (yamlPayload, error) { + contents, err := os.ReadFile("mockgen.yaml") + if err != nil { + return yamlPayload{}, err + } + + var payload yamlPayload + if err := yaml.Unmarshal(contents, &payload); err != nil { + return yamlPayload{}, err + } + + for _, path := range payload.IncludeConfigPaths { + payload, err = readIncludeConfig(payload, path) + if err != nil { + return yamlPayload{}, err + } + } + + return payload, nil +} + +func readIncludeConfig(payload yamlPayload, path string) (yamlPayload, error) { + contents, err := os.ReadFile(path) + if err != nil { + return yamlPayload{}, err + } + + var mocks []yamlMock + if err := yaml.Unmarshal(contents, &mocks); err != nil { + return yamlPayload{}, err + } + + payload.Mocks = append(payload.Mocks, mocks...) + return payload, nil +} diff --git a/dev/go-mockgen-transformer/main.go b/dev/go-mockgen-transformer/main.go new file mode 100644 index 000000000000..c6564a47cc02 --- /dev/null +++ b/dev/go-mockgen-transformer/main.go @@ -0,0 +1,103 @@ +package main + +import ( + "flag" + "fmt" + "os" + "strings" + + "gopkg.in/yaml.v3" +) + +type sliceFlag []string + +func (i *sliceFlag) String() string { + return strings.Join(*i, ",") +} + +func (i *sliceFlag) Set(value string) error { + *i = append(*i, value) + return nil +} + +func main() { + payload, err := readManifest() + if err != nil { + panic(err) + } + + var sourceFiles sliceFlag + var archives sliceFlag + outfile := flag.String("outfile", "mockgen.yaml", "File to write the transformed config to") + intermediaryGeneratedFile := flag.String("intermediary-generated-file", "", "Path to the intermediary generated file (before being copied to source tree)") + finalGeneratedFile := flag.String("final-generated-file", "", "Path to the final generated file (in the source tree)") + outputImportPath := flag.String("output-importpath", "", "The import path of the generated mock file") + flag.StringVar(&payload.Goimports, "goimports", "./bin/.goimports", "Path to goimports binary") + flag.StringVar(&payload.StdlibRoot, "stdlibroot", "", "Path to the root of the Go compiled stdlib") + flag.Var(&sourceFiles, "source-files", "Values of the format IMPORTPATH=FILE, where IMPORTPATH is the import path for FILE") + flag.Var(&archives, "archives", "Values of the format W=X=Y=Z, where ARCHIVE is the path to the archive") + flag.Parse() + + payload.IncludeConfigPaths = []string{} + + f, err := os.Create(*outfile) + if err != nil { + panic(err) + } + defer f.Close() + + // source files need to be grouped by their import path, so that when we process each (import path, source files) + // tuple in go-mockgen, the packages declared at the top of the source files are all equal part import path grouping. + importpathToSources := make(map[string][]string) + for _, arg := range sourceFiles { + split := strings.Split(arg, "=") + importpathToSources[split[0]] = append(importpathToSources[split[0]], split[1]) + } + + outputPayload := payload + outputPayload.Mocks = []yamlMock{} + // extract the mock configuration for the specific file we want to generate mocks for. + for _, mock := range payload.Mocks { + if mock.Filename == *finalGeneratedFile { + // the config declares the filepath for the _final_ generated file, + // but we prefix the filename with _ so we can copy from the output base + // into the source tree. + mock.Filename = *intermediaryGeneratedFile + outputPayload.Mocks = []yamlMock{mock} + break + } + } + if len(outputPayload.Mocks) == 0 { + panic(fmt.Sprintf("Could not find mock for file %s", *finalGeneratedFile)) + } + + // TODO: why does this need to be set explicitly again? + outputPayload.Mocks[0].ImportPath = *outputImportPath + + // now we have the right config section, we want to attach the right sources for each + // import path that we're mocking interfaces from. For each dep in the go_mockgen rule, + // there should be a corresponding section in the config extract. + // Archive files are set globally, they don't need grouping. + if len(outputPayload.Mocks[0].Sources) > 0 { + newSources := outputPayload.Mocks[0].Sources[:0] + for _, source := range outputPayload.Mocks[0].Sources { + source.SourceFiles = importpathToSources[source.Path] + outputPayload.Mocks[0].Archives = archives + newSources = append(newSources, source) + } + } else { + outputPayload.Mocks[0].Archives = archives + outputPayload.Mocks[0].SourceFiles = importpathToSources[outputPayload.Mocks[0].Path] + } + + out, err := yaml.Marshal(outputPayload) + if err != nil { + panic(err) + } + + if _, err := f.Write(out); err != nil { + panic(err) + } + + fmt.Println("Successfully transformed go-mockgen config") +} diff --git a/dev/go_mockgen.bzl b/dev/go_mockgen.bzl index 822f29f7446c..52b20d60433f 100644 --- a/dev/go_mockgen.bzl +++ b/dev/go_mockgen.bzl @@ -1,13 +1,11 @@ -load("@bazel_skylib//lib:paths.bzl", "paths") load("//dev:go_mockgen_rule.bzl", "go_mockgen_generate") load("//dev:write_generated_to_source_files.bzl", "write_generated_to_source_files") -def go_mockgen(name, manifests, interfaces, deps, out): - gen_file = "_" + paths.basename(out) +def go_mockgen(name, manifests, deps, out): + gen_file = "_" + out go_mockgen_generate( name = name + "_generate", - interfaces = interfaces, deps = deps, out = gen_file, manifests = manifests, diff --git a/dev/go_mockgen_rule.bzl b/dev/go_mockgen_rule.bzl index 2650b0686339..0a98e7c5b6d4 100644 --- a/dev/go_mockgen_rule.bzl +++ b/dev/go_mockgen_rule.bzl @@ -1,58 +1,34 @@ load("@io_bazel_rules_go//go:def.bzl", "GoArchive", "GoSource") -load("@aspect_bazel_lib//lib:yq.bzl", "yq") def _go_mockgen_run(ctx): dst = ctx.actions.declare_file(ctx.attr.out) - # config_dst = ctx.actions.declare_file("mockgen.yaml") + config_dst = ctx.actions.declare_file("mockgen.yaml") - print("IMPORT PATH", "github.com/sourcegraph/sourcegraph/" + ctx.label.package) + stdlib_root = "{path}/{os}_{arch}".format( + path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, + os = ctx.attr._go_stdlib[GoSource].mode.goos, + arch = ctx.attr._go_stdlib[GoSource].mode.goarch, + ) - args = [ - "--import-path", - "github.com/sourcegraph/sourcegraph/" + ctx.label.package, - "--filename", + transformer_args = [ + "--outfile", + config_dst.path, + "--final-generated-file", + ctx.label.package + "/" + ctx.attr.out[1:], + "--intermediary-generated-file", dst.path, - "--force", + "--stdlibroot", + stdlib_root, "--goimports", ctx.executable._goimports.path, - "--stdlibroot", - "{path}/{os}_{arch}".format( - path = ctx.attr._go_stdlib[GoSource].stdlib.libs[0].path, - os = ctx.attr._go_stdlib[GoSource].mode.goos, - arch = ctx.attr._go_stdlib[GoSource].mode.goarch, - ), + "--output-importpath", + "github.com/sourcegraph/sourcegraph/" + ctx.label.package, ] - for interface in ctx.attr.interfaces: - args.extend([ - "--interfaces", - interface, - ]) - - for dep in ctx.attr.deps: - args.extend([ - "--archives", - "{}={}={}={}".format( - dep[GoArchive].data.importpath, - dep[GoArchive].data.importmap, - dep[GoArchive].data.file.path, - dep[GoArchive].data.file.path, - ), - ]) - - if ctx.attr.outpackage != None: - args.extend([ - "--package", # will be inferred if not explicitly passed - ctx.attr.outpackage, - ]) - - # transformer_args = [config_dst.path] - transformer_args = [] deps = [] for dep in ctx.attr.deps: for a in dep[GoArchive].direct: - transformer_args.append("--archives") - transformer_args.append("{}={}={}={}".format( + transformer_args.append("--archives={}={}={}={}".format( a.data.importpath, a.data.importmap, a.data.file.path, @@ -62,38 +38,34 @@ def _go_mockgen_run(ctx): for dep in ctx.attr.deps: for src in dep[GoArchive].data.srcs: - transformer_args.extend(["--source-files", "%s=%s" % (dep[GoArchive].data.importpath, src.path)]) + transformer_args.append("--source-files=%s=%s" % (dep[GoArchive].data.importpath, src.path)) deps.append(depset(direct = [src])) - args.extend(transformer_args) # TODO: remove when moving to transformer - for dep in ctx.attr.deps: - args.append(dep[GoArchive].data.importpath) - manifests = [] for f in ctx.attr.manifests: manifests.extend(f.files.to_list()) - # ctx.actions.run( - # mnemonic = "GoMockgenConfigTransform", - # executable = ctx.executable._gomockgen_transformer, - # args = [config_dst.path], - # outputs = [config_dst], - # inputs = depset(direct = manifests), - # progress_message = "Transforming go-mockgen config for %s" % ctx.label.package, # name = path? double check - # ) + ctx.actions.run( + mnemonic = "GoMockgenConfigTransform", + executable = ctx.executable._gomockgen_transformer, + arguments = transformer_args, + outputs = [config_dst], + tools = [ctx.executable._goimports], + inputs = depset(direct = manifests), + progress_message = "Transforming go-mockgen config for %s" % str(ctx.label), # TODO: figure out what we wanna put here + ) - action_direct_deps = [ctx.attr._go_stdlib[GoSource].stdlib.libs[0]] + action_direct_deps = [config_dst, ctx.attr._go_stdlib[GoSource].stdlib.libs[0]] for dep in ctx.attr.deps: action_direct_deps.append(dep[GoArchive].data.file) ctx.actions.run( mnemonic = "GoMockgen", - arguments = args, + arguments = ["--manifest-dir", config_dst.dirname], executable = ctx.executable._gomockgen, outputs = [dst], tools = [ctx.executable._goimports], inputs = depset( - # TODO: config file when moving to yaml direct = action_direct_deps, transitive = deps, ), @@ -109,14 +81,7 @@ def _go_mockgen_run(ctx): go_mockgen_generate = rule( implementation = _go_mockgen_run, attrs = { - "interfaces": attr.string_list( - mandatory = True, - ), - "outpackage": attr.string( - mandatory = False, - ), "deps": attr.label_list( - # change to label_list? providers = [GoArchive], allow_empty = False, mandatory = True, @@ -147,9 +112,5 @@ go_mockgen_generate = rule( providers = [GoSource], default = Label("@io_bazel_rules_go//:stdlib"), ), - "_runfiles_lib": attr.label( - default = "@bazel_tools//tools/bash/runfiles", - allow_single_file = True, - ), }, ) diff --git a/internal/codeintel/ranking/BUILD.bazel b/internal/codeintel/ranking/BUILD.bazel index 4e9529390792..77e9d158af78 100644 --- a/internal/codeintel/ranking/BUILD.bazel +++ b/internal/codeintel/ranking/BUILD.bazel @@ -5,10 +5,6 @@ load("//dev:go_mockgen.bzl", "go_mockgen") go_mockgen( name = "sample_text", out = "mocks_test.go", - interfaces = [ - "Store", - "SiteConfigQuerier", - ], manifests = [ "//:mockgen.yaml", "//:mockgen.test.yaml", diff --git a/internal/codeintel/ranking/mocks_test.go b/internal/codeintel/ranking/mocks_test.go index dabb7575da49..55404a5985b3 100644 --- a/internal/codeintel/ranking/mocks_test.go +++ b/internal/codeintel/ranking/mocks_test.go @@ -1,4 +1,8 @@ // Code generated by go-mockgen 1.3.7; DO NOT EDIT. +// +// This file was generated by running `sg generate` (or `go-mockgen`) at the root of +// this repository. To add additional mocks to this or another package, add a new entry +// to the mockgen.yaml file in the root of this repository. package ranking diff --git a/third_party/com_github_strum355_gomockgen/debug.patch b/third_party/com_github_strum355_gomockgen/debug.patch index ab82acf85d20..f3ecb7e80324 100644 --- a/third_party/com_github_strum355_gomockgen/debug.patch +++ b/third_party/com_github_strum355_gomockgen/debug.patch @@ -81,10 +81,34 @@ index 7663519..fc97255 100644 + return } diff --git a/cmd/go-mockgen/args.go b/cmd/go-mockgen/args.go -index ac0e58b..93bfd0e 100644 +index ac0e58b..75fb178 100644 --- a/cmd/go-mockgen/args.go +++ b/cmd/go-mockgen/args.go -@@ -84,7 +84,7 @@ func parseFlags() (*generation.Options, error) { +@@ -42,8 +42,12 @@ func parseAndValidateOptions() ([]*generation.Options, error) { + } + + func parseOptions() ([]*generation.Options, error) { +- if len(os.Args) == 1 { +- return parseManifest() ++ if len(os.Args) == 1 || os.Args[1] == "--manifest-dir" { ++ var manifestDir string ++ if len(os.Args) == 3 { ++ manifestDir = os.Args[2] ++ } ++ return parseManifest(manifestDir) + } + + opts, err := parseFlags() +@@ -67,7 +71,7 @@ func parseFlags() (*generation.Options, error) { + app := kingpin.New(consts.Name, consts.Description).Version(consts.Version) + app.UsageWriter(os.Stdout) + +- app.Arg("path", "The import paths used to search for eligible interfaces").StringsVar(&opts.PackageOptions[0].ImportPaths) ++ app.Arg("path", "The import paths used to search for eligible interfaces").Required().StringsVar(&opts.PackageOptions[0].ImportPaths) + app.Flag("package", "The name of the generated package. It will be inferred from the output options by default.").Short('p').StringVar(&opts.ContentOptions.PkgName) + app.Flag("interfaces", "A list of target interfaces to generate defined in the given the import paths.").Short('i').StringsVar(&opts.PackageOptions[0].Interfaces) + app.Flag("exclude", "A list of interfaces to exclude from generation. Mocks for all other exported interfaces defined in the given import paths are generated.").Short('e').StringsVar(&opts.PackageOptions[0].Exclude) +@@ -84,7 +88,7 @@ func parseFlags() (*generation.Options, error) { app.Flag("build-constraints", "Build constraints that are added to each generated file.").StringVar(&opts.ContentOptions.BuildConstraints) app.Flag("archives", "Values of the format IMPORTPATHS=IMPORTMAP=FILE=EXPORT, where IMPORTPATHS is a colon-delimited list of import paths, IMPORTMAP is the import path of the archive, FILE is the archive file path, and EXPORT is the export file path.").StringsVar(&opts.PackageOptions[0].Archives) @@ -93,7 +117,18 @@ index ac0e58b..93bfd0e 100644 app.Flag("stdlibroot", "When using gcexportdata archives, specifies the path containing archive files for the Go stdlib").StringVar(&opts.PackageOptions[0].StdlibRoot) if _, err := app.Parse(os.Args[1:]); err != nil { -@@ -130,6 +130,10 @@ func parseManifest() ([]*generation.Options, error) { +@@ -94,8 +98,8 @@ func parseFlags() (*generation.Options, error) { + return opts, nil + } + +-func parseManifest() ([]*generation.Options, error) { +- payload, err := readManifest() ++func parseManifest(manifestDir string) ([]*generation.Options, error) { ++ payload, err := readManifest(manifestDir) + if err != nil { + return nil, err + } +@@ -130,6 +134,10 @@ func parseManifest() ([]*generation.Options, error) { opts.ForTest = true } @@ -104,35 +139,34 @@ index ac0e58b..93bfd0e 100644 // Canonicalization paths := opts.Paths if opts.Path != "" { -@@ -143,11 +147,15 @@ func parseManifest() ([]*generation.Options, error) { +@@ -143,11 +151,15 @@ func parseManifest() ([]*generation.Options, error) { var packageOptions []generation.PackageOptions if len(opts.Sources) > 0 { - if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 { -- return nil, fmt.Errorf("sources and path/paths/interfaces are mutually exclusive") -+ if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 || opts.Path != "" || len(opts.Archives) > 0 || len(opts.SourceFiles) > 0 { -+ return nil, fmt.Errorf("sources and path/paths/interfaces/archives/sourcefiles are mutually exclusive") ++ if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 || opts.Path != "" { + return nil, fmt.Errorf("sources and path/paths/interfaces are mutually exclusive") } for _, source := range opts.Sources { -+ if len(source.Paths) > 0 && len(source.Archives) > 0 { ++ if len(source.Paths) > 0 && len(opts.Archives) > 0 { + return nil, fmt.Errorf("multiple import paths and archives are mutually exclusive") + } + // Canonicalization paths := source.Paths if source.Path != "" { -@@ -159,6 +167,9 @@ func parseManifest() ([]*generation.Options, error) { +@@ -159,6 +171,9 @@ func parseManifest() ([]*generation.Options, error) { Interfaces: source.Interfaces, Exclude: source.Exclude, Prefix: source.Prefix, + Archives: opts.Archives, -+ Sources: opts.SourceFiles, ++ Sources: source.SourceFiles, + StdlibRoot: payload.StdlibRoot, }) } } else { -@@ -167,6 +178,9 @@ func parseManifest() ([]*generation.Options, error) { +@@ -167,6 +182,9 @@ func parseManifest() ([]*generation.Options, error) { Interfaces: opts.Interfaces, Exclude: opts.Exclude, Prefix: opts.Prefix, @@ -142,7 +176,7 @@ index ac0e58b..93bfd0e 100644 }) } -@@ -207,6 +221,8 @@ type yamlPayload struct { +@@ -207,6 +225,8 @@ type yamlPayload struct { ForTest bool `yaml:"for-test"` FilePrefix string `yaml:"file-prefix"` @@ -151,7 +185,7 @@ index ac0e58b..93bfd0e 100644 Mocks []yamlMock `yaml:"mocks"` } -@@ -214,6 +230,8 @@ type yamlMock struct { +@@ -214,6 +234,8 @@ type yamlMock struct { Path string `yaml:"path"` Paths []string `yaml:"paths"` Sources []yamlSource `yaml:"sources"` @@ -160,7 +194,7 @@ index ac0e58b..93bfd0e 100644 Package string `yaml:"package"` Interfaces []string `yaml:"interfaces"` Exclude []string `yaml:"exclude"` -@@ -230,11 +248,13 @@ type yamlMock struct { +@@ -230,15 +252,16 @@ type yamlMock struct { } type yamlSource struct { @@ -175,12 +209,26 @@ index ac0e58b..93bfd0e 100644 + Exclude []string `yaml:"exclude"` + Prefix string `yaml:"prefix"` + SourceFiles []string `yaml:"source-files"` -+ Archives []string `yaml:"archives"` } - func readManifest() (yamlPayload, error) { +-func readManifest() (yamlPayload, error) { +- contents, err := os.ReadFile("mockgen.yaml") ++func readManifest(manifestDir string) (yamlPayload, error) { ++ contents, err := os.ReadFile(filepath.Join(manifestDir, "mockgen.yaml")) + if err != nil { + return yamlPayload{}, err + } +@@ -249,7 +272,7 @@ func readManifest() (yamlPayload, error) { + } + + for _, path := range payload.IncludeConfigPaths { +- payload, err = readIncludeConfig(payload, path) ++ payload, err = readIncludeConfig(payload, filepath.Join(manifestDir, path)) + if err != nil { + return yamlPayload{}, err + } diff --git a/cmd/go-mockgen/main.go b/cmd/go-mockgen/main.go -index 99eb342..7924d5b 100644 +index 99eb342..cab97ae 100644 --- a/cmd/go-mockgen/main.go +++ b/cmd/go-mockgen/main.go @@ -46,22 +46,34 @@ func mainErr() error { @@ -237,7 +285,7 @@ index 99eb342..7924d5b 100644 stdlibRoot: allOptions[0].PackageOptions[0].StdlibRoot, }) if err != nil { -@@ -114,7 +126,7 @@ type loadParams struct { +@@ -114,13 +126,17 @@ type loadParams struct { // gcexportdata specific params archives []archive @@ -246,3 +294,14 @@ index 99eb342..7924d5b 100644 stdlibRoot string } + func loadPackages(params loadParams) ([]*internal.GoPackage, error) { + if len(params.archives) > 0 { +- return PackagesArchive(params) ++ packages, err := PackagesArchive(params) ++ if err != nil { ++ return nil, fmt.Errorf("error loading packages from archives: %v", err) ++ } ++ return packages, nil + } + + pkgs, err := packages.Load(&packages.Config{Mode: packages.NeedName | packages.NeedImports | packages.NeedSyntax | packages.NeedTypes | packages.NeedDeps}, params.importPaths...) From 4f68fbe006d9e8f97aef32d42775e1a030fa467e Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Fri, 9 Feb 2024 19:16:32 +0000 Subject: [PATCH 10/18] gazelle generator is 90% a-go --- BUILD.bazel | 1 + WORKSPACE | 7 + cmd/cody-gateway/internal/auth/BUILD.bazel | 12 + cmd/cody-gateway/internal/dotcom/BUILD.bazel | 24 +- cmd/executor/internal/worker/BUILD.bazel | 20 ++ .../internal/worker/cmdlogger/BUILD.bazel | 12 + .../internal/worker/command/BUILD.bazel | 15 ++ .../internal/worker/files/BUILD.bazel | 12 + .../internal/worker/runner/BUILD.bazel | 16 ++ .../internal/worker/runtime/BUILD.bazel | 18 ++ .../internal/worker/workspace/BUILD.bazel | 17 ++ cmd/frontend/backend/BUILD.bazel | 12 + .../internal/executorqueue/BUILD.bazel | 12 + .../executorqueue/queues/batches/BUILD.bazel | 12 + cmd/frontend/internal/httpapi/BUILD.bazel | 12 + .../internal/httpapi/releasecache/BUILD.bazel | 12 + cmd/gitserver/internal/BUILD.bazel | 22 +- cmd/gitserver/internal/git/BUILD.bazel | 12 + .../internal/integration_tests/BUILD.bazel | 12 + cmd/gitserver/internal/vcssyncer/BUILD.bazel | 12 + cmd/symbols/fetcher/BUILD.bazel | 12 + cmd/symbols/internal/api/BUILD.bazel | 12 + cmd/worker/internal/telemetry/BUILD.bazel | 12 + deps.bzl | 32 ++- dev/BUILD.bazel | 85 +++++++ dev/go-mockgen-gazelle/BUILD.bazel | 19 ++ dev/go-mockgen-gazelle/go-mockgen.go | 217 ++++++++++++++++++ dev/go-mockgen-transformer/BUILD.bazel | 10 +- dev/go-mockgen-transformer/config/BUILD.bazel | 9 + .../{ => config}/load.go | 35 +-- dev/go-mockgen-transformer/main.go | 8 +- dev/team/BUILD.bazel | 12 + go.mod | 2 + go.sum | 5 + internal/auth/userpasswd/BUILD.bazel | 12 + internal/authz/BUILD.bazel | 12 + internal/authz/providers/gerrit/BUILD.bazel | 12 + internal/authz/providers/github/BUILD.bazel | 12 + internal/authz/subrepoperms/BUILD.bazel | 12 + internal/batches/sources/BUILD.bazel | 18 ++ internal/batches/syncer/BUILD.bazel | 12 + internal/codeintel/autoindexing/BUILD.bazel | 15 ++ .../background/dependencies/BUILD.bazel | 17 ++ .../internal/inference/BUILD.bazel | 12 + internal/codeintel/codenav/BUILD.bazel | 15 ++ .../codenav/transport/graphql/BUILD.bazel | 12 + .../internal/background/BUILD.bazel | 12 + internal/codeintel/policies/BUILD.bazel | 15 ++ internal/codeintel/ranking/BUILD.bazel | 28 +-- internal/codeintel/uploads/BUILD.bazel | 17 ++ .../background/backfiller/BUILD.bazel | 12 + .../internal/background/expirer/BUILD.bazel | 17 ++ .../internal/background/processor/BUILD.bazel | 17 ++ .../uploads/transport/graphql/BUILD.bazel | 12 + .../uploads/transport/http/BUILD.bazel | 12 + .../uploads/transport/http/auth/BUILD.bazel | 12 + internal/conf/BUILD.bazel | 12 + internal/database/basestore/BUILD.bazel | 12 + internal/database/dbmocks/BUILD.bazel | 12 + .../database/migration/runner/BUILD.bazel | 12 + internal/embeddings/BUILD.bazel | 12 + .../embeddings/background/repo/BUILD.bazel | 12 + internal/embeddings/embed/BUILD.bazel | 12 + internal/executor/store/BUILD.bazel | 12 + internal/featureflag/BUILD.bazel | 12 + internal/github_apps/store/BUILD.bazel | 12 + internal/gitserver/BUILD.bazel | 12 + internal/goroutine/BUILD.bazel | 12 + internal/insights/background/BUILD.bazel | 12 + internal/insights/discovery/BUILD.bazel | 12 + internal/insights/scheduler/BUILD.bazel | 12 + internal/insights/store/BUILD.bazel | 12 + internal/metrics/store/BUILD.bazel | 12 + internal/oobmigration/BUILD.bazel | 12 + internal/redispool/BUILD.bazel | 12 + internal/repos/BUILD.bazel | 12 + internal/search/client/BUILD.bazel | 12 + internal/search/job/mockjob/BUILD.bazel | 12 + internal/search/repos/BUILD.bazel | 12 + internal/search/symbol/BUILD.bazel | 12 + internal/telemetry/telemetrytest/BUILD.bazel | 12 + internal/uploadhandler/BUILD.bazel | 12 + internal/uploadstore/BUILD.bazel | 12 + internal/uploadstore/mocks/BUILD.bazel | 12 + internal/workerutil/BUILD.bazel | 12 + .../dbworker/store/mocks/BUILD.bazel | 12 + lib/background/BUILD.bazel | 12 + mockgen.test.yaml | 2 +- .../com_github_strum355_gomockgen/debug.patch | 24 +- 89 files changed, 1385 insertions(+), 70 deletions(-) create mode 100644 dev/go-mockgen-gazelle/BUILD.bazel create mode 100644 dev/go-mockgen-gazelle/go-mockgen.go create mode 100644 dev/go-mockgen-transformer/config/BUILD.bazel rename dev/go-mockgen-transformer/{ => config}/load.go (78%) diff --git a/BUILD.bazel b/BUILD.bazel index 912944338ac5..b4b71166bc26 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -212,6 +212,7 @@ gazelle_binary( # Gazelle-buf does not include the Go plugin by default, so we have to add it # ourselves. "@bazel_gazelle//language/go:go_default_library", + "//dev/go-mockgen-gazelle:go-mockgen-gazelle", # Bundled with aspect-cli, but we're missing out on buf that way "@aspect_cli//gazelle/js:js", # Loads the Buf extension diff --git a/WORKSPACE b/WORKSPACE index dfedb6d48963..32d997166641 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -151,6 +151,13 @@ http_archive( url = "https://github.com/aspect-build/aspect-cli/archive/5.8.20.tar.gz", ) +http_archive( + name = "rules_multirun", + sha256 = "9cd384e42b2da00104f0e18f25e66285aa21f64b573c667638a7a213206885ab", + strip_prefix = "rules_multirun-0.6.1", + url = "https://github.com/keith/rules_multirun/archive/refs/tags/0.6.1.tar.gz", +) + # hermetic_cc_toolchain setup ================================ HERMETIC_CC_TOOLCHAIN_VERSION = "v2.2.1" diff --git a/cmd/cody-gateway/internal/auth/BUILD.bazel b/cmd/cody-gateway/internal/auth/BUILD.bazel index 8b6ed66b20e8..b35f6310435c 100644 --- a/cmd/cody-gateway/internal/auth/BUILD.bazel +++ b/cmd/cody-gateway/internal/auth/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -44,3 +45,14 @@ go_test( "@com_github_vektah_gqlparser_v2//gqlerror", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["@com_github_gregjones_httpcache//:httpcache"], +) diff --git a/cmd/cody-gateway/internal/dotcom/BUILD.bazel b/cmd/cody-gateway/internal/dotcom/BUILD.bazel index ace65cdda701..ecc256c72db2 100644 --- a/cmd/cody-gateway/internal/dotcom/BUILD.bazel +++ b/cmd/cody-gateway/internal/dotcom/BUILD.bazel @@ -3,19 +3,6 @@ load("//dev:write_generated_to_source_files.bzl", "write_generated_to_source_fil load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_mockgen.bzl", "go_mockgen") -go_mockgen( - name = "sample_text", - out = "mocks.go", - manifests = [ - "//:mockgen.yaml", - "//:mockgen.test.yaml", - "//:mockgen.temp.yaml", - ], - deps = [ - "@com_github_khan_genqlient//graphql", - ], -) - go_library( name = "dotcom", srcs = [ @@ -61,3 +48,14 @@ go_test( embed = [":dotcom"], deps = ["@com_github_stretchr_testify//assert"], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["@com_github_khan_genqlient//graphql"], +) diff --git a/cmd/executor/internal/worker/BUILD.bazel b/cmd/executor/internal/worker/BUILD.bazel index 2a9097d78f41..ef3881a876ca 100644 --- a/cmd/executor/internal/worker/BUILD.bazel +++ b/cmd/executor/internal/worker/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -64,3 +65,22 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//cmd/executor/internal/util", + "//cmd/executor/internal/worker/cmdlogger", + "//cmd/executor/internal/worker/command", + "//cmd/executor/internal/worker/files", + "//cmd/executor/internal/worker/runner", + "//cmd/executor/internal/worker/runtime", + "//cmd/executor/internal/worker/workspace", + ], +) diff --git a/cmd/executor/internal/worker/cmdlogger/BUILD.bazel b/cmd/executor/internal/worker/cmdlogger/BUILD.bazel index dea190f9d971..335ad66b910c 100644 --- a/cmd/executor/internal/worker/cmdlogger/BUILD.bazel +++ b/cmd/executor/internal/worker/cmdlogger/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") @@ -28,3 +29,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":cmdlogger"], +) diff --git a/cmd/executor/internal/worker/command/BUILD.bazel b/cmd/executor/internal/worker/command/BUILD.bazel index 13bf4756315a..7004b49fda23 100644 --- a/cmd/executor/internal/worker/command/BUILD.bazel +++ b/cmd/executor/internal/worker/command/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -72,3 +73,17 @@ go_test( "@io_k8s_utils//pointer", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":command", + "//cmd/executor/internal/worker/cmdlogger", + ], +) diff --git a/cmd/executor/internal/worker/files/BUILD.bazel b/cmd/executor/internal/worker/files/BUILD.bazel index f9e549e794d9..766b7ee54f85 100644 --- a/cmd/executor/internal/worker/files/BUILD.bazel +++ b/cmd/executor/internal/worker/files/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -26,3 +27,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":files"], +) diff --git a/cmd/executor/internal/worker/runner/BUILD.bazel b/cmd/executor/internal/worker/runner/BUILD.bazel index 8425c2084fae..167aab47a2e3 100644 --- a/cmd/executor/internal/worker/runner/BUILD.bazel +++ b/cmd/executor/internal/worker/runner/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -60,3 +61,18 @@ go_test( "@io_k8s_client_go//testing", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//cmd/executor/internal/worker/cmdlogger", + "//cmd/executor/internal/worker/command", + "//cmd/executor/internal/worker/files", + ], +) diff --git a/cmd/executor/internal/worker/runtime/BUILD.bazel b/cmd/executor/internal/worker/runtime/BUILD.bazel index 90256b112105..531f8b14850f 100644 --- a/cmd/executor/internal/worker/runtime/BUILD.bazel +++ b/cmd/executor/internal/worker/runtime/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -56,3 +57,20 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//cmd/executor/internal/util", + "//cmd/executor/internal/worker/cmdlogger", + "//cmd/executor/internal/worker/command", + "//cmd/executor/internal/worker/files", + "//cmd/executor/internal/worker/workspace", + ], +) diff --git a/cmd/executor/internal/worker/workspace/BUILD.bazel b/cmd/executor/internal/worker/workspace/BUILD.bazel index daab7691b536..a71cd543d1c1 100644 --- a/cmd/executor/internal/worker/workspace/BUILD.bazel +++ b/cmd/executor/internal/worker/workspace/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -49,3 +50,19 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//cmd/executor/internal/util", + "//cmd/executor/internal/worker/cmdlogger", + "//cmd/executor/internal/worker/command", + "//cmd/executor/internal/worker/files", + ], +) diff --git a/cmd/frontend/backend/BUILD.bazel b/cmd/frontend/backend/BUILD.bazel index 17b1eeca51a4..32c7c78b98b4 100644 --- a/cmd/frontend/backend/BUILD.bazel +++ b/cmd/frontend/backend/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -129,3 +130,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":backend"], +) diff --git a/cmd/frontend/internal/executorqueue/BUILD.bazel b/cmd/frontend/internal/executorqueue/BUILD.bazel index 536955bc3f09..fdbf425e01c0 100644 --- a/cmd/frontend/internal/executorqueue/BUILD.bazel +++ b/cmd/frontend/internal/executorqueue/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -54,3 +55,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":executorqueue"], +) diff --git a/cmd/frontend/internal/executorqueue/queues/batches/BUILD.bazel b/cmd/frontend/internal/executorqueue/queues/batches/BUILD.bazel index ffabbef477a2..c31ef19cbc19 100644 --- a/cmd/frontend/internal/executorqueue/queues/batches/BUILD.bazel +++ b/cmd/frontend/internal/executorqueue/queues/batches/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -58,3 +59,14 @@ go_test( "@in_gopkg_yaml_v2//:yaml_v2", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":batches"], +) diff --git a/cmd/frontend/internal/httpapi/BUILD.bazel b/cmd/frontend/internal/httpapi/BUILD.bazel index 55f6d6d1db2c..8a1b759d525c 100644 --- a/cmd/frontend/internal/httpapi/BUILD.bazel +++ b/cmd/frontend/internal/httpapi/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -141,3 +142,14 @@ go_test( "@org_golang_google_protobuf//testing/protocmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/httpcli"], +) diff --git a/cmd/frontend/internal/httpapi/releasecache/BUILD.bazel b/cmd/frontend/internal/httpapi/releasecache/BUILD.bazel index 0dddd24ccc39..4787e25c1de4 100644 --- a/cmd/frontend/internal/httpapi/releasecache/BUILD.bazel +++ b/cmd/frontend/internal/httpapi/releasecache/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -58,3 +59,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":releasecache"], +) diff --git a/cmd/gitserver/internal/BUILD.bazel b/cmd/gitserver/internal/BUILD.bazel index f4e83c0dec11..81c075aaf535 100644 --- a/cmd/gitserver/internal/BUILD.bazel +++ b/cmd/gitserver/internal/BUILD.bazel @@ -2,17 +2,6 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") load("//dev:go_mockgen.bzl", "go_mockgen") -go_mockgen( - name = "sample_text", - out = "mocks_test.go", - manifests = [ - "//:mockgen.yaml", - "//:mockgen.test.yaml", - "//:mockgen.temp.yaml", - ], - deps = [":internal"], -) - go_library( name = "internal", srcs = [ @@ -165,3 +154,14 @@ go_test( "@org_golang_x_time//rate", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":internal"], +) diff --git a/cmd/gitserver/internal/git/BUILD.bazel b/cmd/gitserver/internal/git/BUILD.bazel index 761196788f5f..36fd6207c094 100644 --- a/cmd/gitserver/internal/git/BUILD.bazel +++ b/cmd/gitserver/internal/git/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") @@ -33,3 +34,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mock.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":git"], +) diff --git a/cmd/gitserver/internal/integration_tests/BUILD.bazel b/cmd/gitserver/internal/integration_tests/BUILD.bazel index 10c740d19f1f..565580a10fa5 100644 --- a/cmd/gitserver/internal/integration_tests/BUILD.bazel +++ b/cmd/gitserver/internal/integration_tests/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") @@ -87,3 +88,14 @@ go_test( "@org_golang_x_time//rate", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//cmd/gitserver/internal"], +) diff --git a/cmd/gitserver/internal/vcssyncer/BUILD.bazel b/cmd/gitserver/internal/vcssyncer/BUILD.bazel index 694f4a4de8b3..6dc83c8eeaf9 100644 --- a/cmd/gitserver/internal/vcssyncer/BUILD.bazel +++ b/cmd/gitserver/internal/vcssyncer/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") @@ -110,3 +111,14 @@ go_test( "@org_golang_x_mod//module", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mock.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":vcssyncer"], +) diff --git a/cmd/symbols/fetcher/BUILD.bazel b/cmd/symbols/fetcher/BUILD.bazel index 789751429c66..a3959bb2e14a 100644 --- a/cmd/symbols/fetcher/BUILD.bazel +++ b/cmd/symbols/fetcher/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -38,3 +39,14 @@ go_test( "@com_github_google_go_cmp//cmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//cmd/symbols/gitserver"], +) diff --git a/cmd/symbols/internal/api/BUILD.bazel b/cmd/symbols/internal/api/BUILD.bazel index ecd67da06a8c..d5c58fa654ca 100644 --- a/cmd/symbols/internal/api/BUILD.bazel +++ b/cmd/symbols/internal/api/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -70,3 +71,14 @@ go_test( "@org_golang_x_sync//semaphore", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//cmd/symbols/gitserver"], +) diff --git a/cmd/worker/internal/telemetry/BUILD.bazel b/cmd/worker/internal/telemetry/BUILD.bazel index d18aea9a5116..f0ff1266a8cd 100644 --- a/cmd/worker/internal/telemetry/BUILD.bazel +++ b/cmd/worker/internal/telemetry/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -59,3 +60,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":telemetry"], +) diff --git a/deps.bzl b/deps.bzl index 4d168d5d580d..fec982f87b21 100644 --- a/deps.bzl +++ b/deps.bzl @@ -611,6 +611,27 @@ def go_dependencies(): sum = "h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=", version = "v0.2.0", ) + go_repository( + name = "com_github_bazelbuild_bazel_gazelle", + build_file_proto_mode = "disable_global", + importpath = "github.com/bazelbuild/bazel-gazelle", + sum = "h1:Bvg+zEHWYwWrhJT4WxyvcU3y1DEJpT/XlPYEfIn9lUI=", + version = "v0.35.0", + ) + go_repository( + name = "com_github_bazelbuild_buildtools", + build_file_proto_mode = "disable_global", + importpath = "github.com/bazelbuild/buildtools", + sum = "h1:2Gc2Q6hVR1SJ8bBI9Ybzoggp8u/ED2WkM4MfvEIn9+c=", + version = "v0.0.0-20231115204819-d4c9dccdfbb1", + ) + go_repository( + name = "com_github_bazelbuild_rules_go", + build_file_proto_mode = "disable_global", + importpath = "github.com/bazelbuild/rules_go", + sum = "h1:uJStI9o5obVWSwquy9WxKNWfZxf2sKA2rpEsX6x5RVM=", + version = "v0.44.0", + ) go_repository( name = "com_github_becheran_wildmatch_go", build_file_proto_mode = "disable_global", @@ -674,6 +695,13 @@ def go_dependencies(): sum = "h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0=", version = "v1.3.4", ) + go_repository( + name = "com_github_bmatcuk_doublestar_v4", + build_file_proto_mode = "disable_global", + importpath = "github.com/bmatcuk/doublestar/v4", + sum = "h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=", + version = "v4.6.1", + ) go_repository( name = "com_github_boj_redistore", build_file_proto_mode = "disable_global", @@ -7325,8 +7353,8 @@ def go_dependencies(): name = "net_starlark_go", build_file_proto_mode = "disable_global", importpath = "go.starlark.net", - sum = "h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc=", - version = "v0.0.0-20200306205701-8dd3e2ee1dd5", + sum = "h1:xwwDQW5We85NaTk2APgoN9202w/l0DVGp+GZMfsrh7s=", + version = "v0.0.0-20210223155950-e043a3d3c984", ) go_repository( name = "org_bitbucket_creachadair_shell", diff --git a/dev/BUILD.bazel b/dev/BUILD.bazel index e3c99f24e1c1..41a347dd12b2 100644 --- a/dev/BUILD.bazel +++ b/dev/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_multirun//:defs.bzl", "multirun") load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") exports_files(srcs = [ @@ -31,3 +32,87 @@ write_source_files( "//schema:write_generated_schema", ], ) + +multirun( + name = "go_mockgen", + commands = [ + "//cmd/cody-gateway/internal/auth:generate_mocks", + "//cmd/cody-gateway/internal/dotcom:generate_mocks", + "//cmd/executor/internal/worker/cmdlogger:generate_mocks", + "//cmd/executor/internal/worker/command:generate_mocks", + "//cmd/executor/internal/worker/files:generate_mocks", + "//cmd/executor/internal/worker/runner:generate_mocks", + "//cmd/executor/internal/worker/runtime:generate_mocks", + "//cmd/executor/internal/worker/workspace:generate_mocks", + "//cmd/executor/internal/worker:generate_mocks", + "//cmd/frontend/backend:generate_mocks", + "//cmd/frontend/internal/executorqueue/queues/batches:generate_mocks", + "//cmd/frontend/internal/executorqueue:generate_mocks", + "//cmd/frontend/internal/httpapi/releasecache:generate_mocks", + "//cmd/frontend/internal/httpapi:generate_mocks", + "//cmd/gitserver/internal/git:generate_mocks", + "//cmd/gitserver/internal/integration_tests:generate_mocks", + "//cmd/gitserver/internal/vcssyncer:generate_mocks", + "//cmd/gitserver/internal:generate_mocks", + "//cmd/symbols/fetcher:generate_mocks", + "//cmd/symbols/internal/api:generate_mocks", + "//cmd/worker/internal/telemetry:generate_mocks", + "//dev/team:generate_mocks", + "//internal/auth/userpasswd:generate_mocks", + "//internal/authz/providers/gerrit:generate_mocks", + "//internal/authz/providers/github:generate_mocks", + "//internal/authz/subrepoperms:generate_mocks", + "//internal/authz:generate_mocks", + "//internal/batches/sources:generate_mocks", + "//internal/batches/syncer:generate_mocks", + "//internal/codeintel/autoindexing/internal/background/dependencies:generate_mocks", + "//internal/codeintel/autoindexing/internal/inference:generate_mocks", + "//internal/codeintel/autoindexing:generate_mocks", + "//internal/codeintel/codenav/transport/graphql:generate_mocks", + "//internal/codeintel/codenav:generate_mocks", + "//internal/codeintel/dependencies/internal/background:generate_mocks", + "//internal/codeintel/policies:generate_mocks", + "//internal/codeintel/ranking:generate_mocks", + "//internal/codeintel/uploads/internal/background/backfiller:generate_mocks", + "//internal/codeintel/uploads/internal/background/expirer:generate_mocks", + "//internal/codeintel/uploads/internal/background/processor:generate_mocks", + "//internal/codeintel/uploads/transport/graphql:generate_mocks", + "//internal/codeintel/uploads/transport/http/auth:generate_mocks", + "//internal/codeintel/uploads/transport/http:generate_mocks", + "//internal/codeintel/uploads:generate_mocks", + "//internal/conf:generate_mocks", + "//internal/database/basestore:generate_mocks", + "//internal/database/dbmocks:generate_mocks", + "//internal/database/migration/runner:generate_mocks", + "//internal/embeddings/background/repo:generate_mocks", + "//internal/embeddings/embed:generate_mocks", + "//internal/embeddings:generate_mocks", + "//internal/executor/store:generate_mocks", + "//internal/featureflag:generate_mocks", + "//internal/github_apps/store:generate_mocks", + "//internal/gitserver:generate_mocks", + "//internal/goroutine:generate_mocks", + "//internal/insights/background:generate_mocks", + "//internal/insights/discovery:generate_mocks", + "//internal/insights/scheduler:generate_mocks", + "//internal/insights/store:generate_mocks", + "//internal/metrics/store:generate_mocks", + "//internal/oobmigration:generate_mocks", + "//internal/redispool:generate_mocks", + "//internal/repos:generate_mocks", + "//internal/search/client:generate_mocks", + "//internal/search/job/mockjob:generate_mocks", + "//internal/search/repos:generate_mocks", + "//internal/search/symbol:generate_mocks", + "//internal/telemetry/telemetrytest:generate_mocks", + "//internal/uploadhandler:generate_mocks", + "//internal/uploadstore/mocks:generate_mocks", + "//internal/uploadstore:generate_mocks", + "//internal/workerutil/dbworker/store/mocks:generate_mocks", + "//internal/workerutil:generate_mocks", + "//lib/background:generate_mocks", + "//internal/workerutil/dbworker/store/mocks:generate_mocks", + "//internal/workerutil:generate_mocks", + "//lib/background:generate_mocks", + ], +) diff --git a/dev/go-mockgen-gazelle/BUILD.bazel b/dev/go-mockgen-gazelle/BUILD.bazel new file mode 100644 index 000000000000..63a3672c4956 --- /dev/null +++ b/dev/go-mockgen-gazelle/BUILD.bazel @@ -0,0 +1,19 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go-mockgen-gazelle", + srcs = ["go-mockgen.go"], + importpath = "github.com/sourcegraph/sourcegraph/dev/go-mockgen-gazelle", + visibility = ["//visibility:public"], + deps = [ + "//dev/go-mockgen-transformer/config", + "@bazel_gazelle//config:go_default_library", + "@bazel_gazelle//label:go_default_library", + "@bazel_gazelle//language:go_default_library", + "@bazel_gazelle//language/go:go_default_library", + "@bazel_gazelle//repo:go_default_library", + "@bazel_gazelle//resolve:go_default_library", + "@bazel_gazelle//rule:go_default_library", + "@org_golang_x_exp//maps", + ], +) diff --git a/dev/go-mockgen-gazelle/go-mockgen.go b/dev/go-mockgen-gazelle/go-mockgen.go new file mode 100644 index 000000000000..dd296c50970c --- /dev/null +++ b/dev/go-mockgen-gazelle/go-mockgen.go @@ -0,0 +1,217 @@ +package gomockgengazelle + +import ( + "fmt" + "path/filepath" + "slices" + "strings" + "sync" + + "github.com/bazelbuild/bazel-gazelle/config" + "github.com/bazelbuild/bazel-gazelle/label" + "github.com/bazelbuild/bazel-gazelle/language" + golang "github.com/bazelbuild/bazel-gazelle/language/go" + "github.com/bazelbuild/bazel-gazelle/repo" + "github.com/bazelbuild/bazel-gazelle/resolve" + "github.com/bazelbuild/bazel-gazelle/rule" + "golang.org/x/exp/maps" + + mockgenc "github.com/sourcegraph/sourcegraph/dev/go-mockgen-transformer/config" +) + +type gomockgen struct { + language.BaseLang + language.BaseLifecycleManager +} + +var ( + _ (language.Language) = (*gomockgen)(nil) + _ (language.LifecycleManager) = (*gomockgen)(nil) + _ (language.ModuleAwareLanguage) = (*gomockgen)(nil) +) + +var ( + yamlPayload mockgenc.YamlPayload + + unvisitedDirs = make(map[string]bool) + allOutputDirs = make(map[string]mockgenc.YamlMock) + rootDir string + loadConfig = sync.OnceValue[error](func() (err error) { + yamlPayload, err = mockgenc.ReadManifest(filepath.Join(rootDir, "mockgen.yaml")) + if err != nil { + return err + } + + for _, mock := range yamlPayload.Mocks { + allOutputDirs[filepath.Dir(mock.Filename)] = mock + unvisitedDirs[filepath.Dir(mock.Filename)] = true + } + return nil + }) +) + +func NewLanguage() language.Language { + return &gomockgen{} +} + +func (*gomockgen) Name() string { return "gomockgen" } + +func (*gomockgen) Configure(c *config.Config, rel string, f *rule.File) { + // need to tell gazelle to to run generators with the following name (aka ours) + c.Langs = append(c.Langs, "gomockgen") +} + +func (*gomockgen) KnownDirectives() []string { + return []string{ + "go_library", + "go_mockgen", + } +} + +func (*gomockgen) Kinds() map[string]rule.KindInfo { + return map[string]rule.KindInfo{ + "go_mockgen": { + MatchAny: true, + // I cant tell if these work or not... + MergeableAttrs: map[string]bool{ + "deps": true, + "out": true, + "manifests": true, + }, + }, + "multirun": { + MatchAttrs: []string{"go_mockgen"}, + MergeableAttrs: map[string]bool{ + "commands": true, + }, + }, + } +} + +func (*gomockgen) ApparentLoads(moduleToApparentName func(string) string) []rule.LoadInfo { + return []rule.LoadInfo{ + { + Name: "//dev:go_mockgen.bzl", + Symbols: []string{"go_mockgen"}, + }, + { + Name: "@rules_multirun//:defs.bzl", + Symbols: []string{"multirun"}, + }, + } +} + +// Deprecated: use ApparentLoads instead +func (*gomockgen) Loads() []rule.LoadInfo { + return []rule.LoadInfo{ + { + Name: "//dev:go_mockgen.bzl", + Symbols: []string{"go_mockgen"}, + }, + { + Name: "@rules_multirun//:defs.bzl", + Symbols: []string{"multirun"}, + }, + } +} + +func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateResult { + if args.Rel == "dev" { + var targets []string + for _, mock := range yamlPayload.Mocks { + targets = append(targets, "//"+filepath.Dir(mock.Filename)+":generate_mocks") + } + + slices.Sort(targets) + targets = slices.Compact(targets) + fmt.Println(targets) + + multirunRule := rule.NewRule("multirun", "go_mockgen") + multirunRule.SetAttr("commands", targets) + multirunRule.SetAttr("jobs", 1) + + return language.GenerateResult{ + Gen: []*rule.Rule{multirunRule}, + Imports: []interface{}{nil}, + } + } + + rootDir = args.Config.RepoRoot + if err := loadConfig(); err != nil { + panic(err) + } + + mock, ok := allOutputDirs[args.Rel] + if !ok { + return language.GenerateResult{} + } + + delete(unvisitedDirs, args.Rel) + + outputFilename := filepath.Base(mock.Filename) + + r := rule.NewRule("go_mockgen", "generate_mocks") + r.SetAttr("out", outputFilename) + + manifests := []string{"//:mockgen.yaml"} + for _, manifest := range yamlPayload.IncludeConfigPaths { + manifests = append(manifests, "//:"+manifest) + } + r.SetAttr("manifests", manifests) + + goRuleIndex := slices.IndexFunc(args.OtherGen, func(r *rule.Rule) bool { + if strings.HasSuffix(outputFilename, "_test.go") { + return r.Kind() == "go_test" + } else { + return r.Kind() == "go_library" + } + }) + if goRuleIndex == -1 { + panic(fmt.Sprintf("couldn't find a go_library rule in dir %q", args.Rel)) + } + + goRule := args.OtherGen[goRuleIndex] + goRule.SetAttr("srcs", append(goRule.AttrStrings("srcs"), filepath.Base(mock.Filename))) + + imports := gatherDependencies(mock) + + return language.GenerateResult{ + Gen: []*rule.Rule{r, goRule}, + Imports: []interface{}{imports, nil}, + } +} + +func (g *gomockgen) DoneGeneratingRules() { + if len(unvisitedDirs) > 0 { + panic(fmt.Sprintf("Some declared mock output files were not created due to their output directory missing. Please create the following directories so : %v", maps.Keys(unvisitedDirs))) + } +} + +func (g *gomockgen) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, r *rule.Rule, rawImports interface{}, from label.Label) { + if r.Kind() != "go_mockgen" { + return + } + imports := rawImports.([]string) + + r.DelAttr("deps") + + var labels []string + for _, i := range imports { + result, err := golang.ResolveGo(c, ix, rc, i, from) + if err != nil { + panic(err) + } + labels = append(labels, result.Rel(from.Repo, from.Pkg).String()) + } + r.SetAttr("deps", labels) +} + +func gatherDependencies(mock mockgenc.YamlMock) (deps []string) { + if mock.Path != "" { + deps = append(deps, mock.Path) + } + for _, source := range mock.Sources { + deps = append(deps, source.Path) + } + return +} diff --git a/dev/go-mockgen-transformer/BUILD.bazel b/dev/go-mockgen-transformer/BUILD.bazel index 9532003a4862..b7d2af5f4041 100644 --- a/dev/go-mockgen-transformer/BUILD.bazel +++ b/dev/go-mockgen-transformer/BUILD.bazel @@ -2,13 +2,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") go_library( name = "go-mockgen-transformer_lib", - srcs = [ - "load.go", - "main.go", - ], + srcs = ["main.go"], importpath = "github.com/sourcegraph/sourcegraph/dev/go-mockgen-transformer", visibility = ["//visibility:private"], - deps = ["@in_gopkg_yaml_v3//:yaml_v3"], + deps = [ + "//dev/go-mockgen-transformer/config", + "@in_gopkg_yaml_v3//:yaml_v3", + ], ) go_binary( diff --git a/dev/go-mockgen-transformer/config/BUILD.bazel b/dev/go-mockgen-transformer/config/BUILD.bazel new file mode 100644 index 000000000000..034446519c20 --- /dev/null +++ b/dev/go-mockgen-transformer/config/BUILD.bazel @@ -0,0 +1,9 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "config", + srcs = ["load.go"], + importpath = "github.com/sourcegraph/sourcegraph/dev/go-mockgen-transformer/config", + visibility = ["//visibility:public"], + deps = ["@in_gopkg_yaml_v3//:yaml_v3"], +) diff --git a/dev/go-mockgen-transformer/load.go b/dev/go-mockgen-transformer/config/load.go similarity index 78% rename from dev/go-mockgen-transformer/load.go rename to dev/go-mockgen-transformer/config/load.go index 8d40d12c388f..c44084509c11 100644 --- a/dev/go-mockgen-transformer/load.go +++ b/dev/go-mockgen-transformer/config/load.go @@ -1,4 +1,4 @@ -package main +package config // // TODO: expose this directly in go-mockgen @@ -6,11 +6,12 @@ package main import ( "os" + "path/filepath" "gopkg.in/yaml.v3" ) -type yamlPayload struct { +type YamlPayload struct { // Meta options IncludeConfigPaths []string `yaml:"include-config-paths,omitempty"` @@ -26,13 +27,13 @@ type yamlPayload struct { StdlibRoot string `yaml:"stdlib-root,omitempty"` - Mocks []yamlMock `yaml:"mocks,omitempty"` + Mocks []YamlMock `yaml:"mocks,omitempty"` } -type yamlMock struct { +type YamlMock struct { Path string `yaml:"path,omitempty"` Paths []string `yaml:"paths,omitempty"` - Sources []yamlSource `yaml:"sources,omitempty"` + Sources []YamlSource `yaml:"sources,omitempty"` SourceFiles []string `yaml:"source-files,omitempty"` Archives []string `yaml:"archives,omitempty"` Package string `yaml:"package,omitempty"` @@ -50,7 +51,7 @@ type yamlMock struct { FilePrefix string `yaml:"file-prefix,omitempty"` } -type yamlSource struct { +type YamlSource struct { Path string `yaml:"path,omitempty"` Paths []string `yaml:"paths,omitempty"` Interfaces []string `yaml:"interfaces,omitempty"` @@ -59,36 +60,36 @@ type yamlSource struct { SourceFiles []string `yaml:"source-files,omitempty"` } -func readManifest() (yamlPayload, error) { - contents, err := os.ReadFile("mockgen.yaml") +func ReadManifest(configPath string) (YamlPayload, error) { + contents, err := os.ReadFile(configPath) if err != nil { - return yamlPayload{}, err + return YamlPayload{}, err } - var payload yamlPayload + var payload YamlPayload if err := yaml.Unmarshal(contents, &payload); err != nil { - return yamlPayload{}, err + return YamlPayload{}, err } for _, path := range payload.IncludeConfigPaths { - payload, err = readIncludeConfig(payload, path) + payload, err = readIncludeConfig(payload, filepath.Join(filepath.Dir(configPath), path)) if err != nil { - return yamlPayload{}, err + return YamlPayload{}, err } } return payload, nil } -func readIncludeConfig(payload yamlPayload, path string) (yamlPayload, error) { +func readIncludeConfig(payload YamlPayload, path string) (YamlPayload, error) { contents, err := os.ReadFile(path) if err != nil { - return yamlPayload{}, err + return YamlPayload{}, err } - var mocks []yamlMock + var mocks []YamlMock if err := yaml.Unmarshal(contents, &mocks); err != nil { - return yamlPayload{}, err + return YamlPayload{}, err } payload.Mocks = append(payload.Mocks, mocks...) diff --git a/dev/go-mockgen-transformer/main.go b/dev/go-mockgen-transformer/main.go index c6564a47cc02..04ef0e58eaee 100644 --- a/dev/go-mockgen-transformer/main.go +++ b/dev/go-mockgen-transformer/main.go @@ -7,6 +7,8 @@ import ( "strings" "gopkg.in/yaml.v3" + + "github.com/sourcegraph/sourcegraph/dev/go-mockgen-transformer/config" ) type sliceFlag []string @@ -21,7 +23,7 @@ func (i *sliceFlag) Set(value string) error { } func main() { - payload, err := readManifest() + payload, err := config.ReadManifest("mockgen.yaml") if err != nil { panic(err) } @@ -55,7 +57,7 @@ func main() { } outputPayload := payload - outputPayload.Mocks = []yamlMock{} + outputPayload.Mocks = []config.YamlMock{} // extract the mock configuration for the specific file we want to generate mocks for. for _, mock := range payload.Mocks { if mock.Filename == *finalGeneratedFile { @@ -63,7 +65,7 @@ func main() { // but we prefix the filename with _ so we can copy from the output base // into the source tree. mock.Filename = *intermediaryGeneratedFile - outputPayload.Mocks = []yamlMock{mock} + outputPayload.Mocks = []config.YamlMock{mock} break } } diff --git a/dev/team/BUILD.bazel b/dev/team/BUILD.bazel index 141ff6c7a36a..14683f83e622 100644 --- a/dev/team/BUILD.bazel +++ b/dev/team/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -16,3 +17,14 @@ go_library( "@org_golang_x_net//context/ctxhttp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":team"], +) diff --git a/go.mod b/go.mod index 3efc128c4076..48fbd71231a2 100644 --- a/go.mod +++ b/go.mod @@ -251,6 +251,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 github.com/aws/constructs-go/constructs/v10 v10.2.69 github.com/aws/jsii-runtime-go v1.84.0 + github.com/bazelbuild/bazel-gazelle v0.35.0 github.com/dghubble/gologin/v2 v2.4.0 github.com/edsrzf/mmap-go v1.1.0 github.com/go-redis/redis/v8 v8.11.5 @@ -311,6 +312,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.25 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.5 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect + github.com/bazelbuild/buildtools v0.0.0-20231115204819-d4c9dccdfbb1 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/cockroachdb/apd/v2 v2.0.1 // indirect diff --git a/go.sum b/go.sum index b8a4a687172c..254a6e687d8d 100644 --- a/go.sum +++ b/go.sum @@ -289,6 +289,10 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= +github.com/bazelbuild/bazel-gazelle v0.35.0 h1:Bvg+zEHWYwWrhJT4WxyvcU3y1DEJpT/XlPYEfIn9lUI= +github.com/bazelbuild/bazel-gazelle v0.35.0/go.mod h1:o2+s90f3w3U6jjw0gcdok0EJOfNK0AK/9RyVP7QkRDk= +github.com/bazelbuild/buildtools v0.0.0-20231115204819-d4c9dccdfbb1 h1:2Gc2Q6hVR1SJ8bBI9Ybzoggp8u/ED2WkM4MfvEIn9+c= +github.com/bazelbuild/buildtools v0.0.0-20231115204819-d4c9dccdfbb1/go.mod h1:689QdV3hBP7Vo9dJMmzhoYIyo/9iMhEmHkJcnaPRCbo= github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= @@ -1936,6 +1940,7 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +go.starlark.net v0.0.0-20210223155950-e043a3d3c984/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/internal/auth/userpasswd/BUILD.bazel b/internal/auth/userpasswd/BUILD.bazel index 35cfc534697d..16d672f72303 100644 --- a/internal/auth/userpasswd/BUILD.bazel +++ b/internal/auth/userpasswd/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -95,3 +96,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":userpasswd"], +) diff --git a/internal/authz/BUILD.bazel b/internal/authz/BUILD.bazel index bfe58b272599..ff1e899a0551 100644 --- a/internal/authz/BUILD.bazel +++ b/internal/authz/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -52,3 +53,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":authz"], +) diff --git a/internal/authz/providers/gerrit/BUILD.bazel b/internal/authz/providers/gerrit/BUILD.bazel index ce424f0adef1..1ee88096d520 100644 --- a/internal/authz/providers/gerrit/BUILD.bazel +++ b/internal/authz/providers/gerrit/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -39,3 +40,14 @@ go_test( "@com_github_google_go_cmp//cmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/extsvc/gerrit"], +) diff --git a/internal/authz/providers/github/BUILD.bazel b/internal/authz/providers/github/BUILD.bazel index cdd0fc052cc2..6b5938e1b7e6 100644 --- a/internal/authz/providers/github/BUILD.bazel +++ b/internal/authz/providers/github/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -61,3 +62,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":github"], +) diff --git a/internal/authz/subrepoperms/BUILD.bazel b/internal/authz/subrepoperms/BUILD.bazel index 9e92624c12b9..9922bbd56cda 100644 --- a/internal/authz/subrepoperms/BUILD.bazel +++ b/internal/authz/subrepoperms/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -38,3 +39,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":subrepoperms"], +) diff --git a/internal/batches/sources/BUILD.bazel b/internal/batches/sources/BUILD.bazel index 19ba863a8ba7..550a0add480b 100644 --- a/internal/batches/sources/BUILD.bazel +++ b/internal/batches/sources/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -126,3 +127,20 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":sources", + "//internal/extsvc/azuredevops", + "//internal/extsvc/bitbucketcloud", + "//internal/extsvc/gerrit", + "//internal/gitserver", + ], +) diff --git a/internal/batches/syncer/BUILD.bazel b/internal/batches/syncer/BUILD.bazel index f0702bc4c839..8efba3067fa0 100644 --- a/internal/batches/syncer/BUILD.bazel +++ b/internal/batches/syncer/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -61,3 +62,14 @@ go_test( "@com_github_stretchr_testify//assert", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":syncer"], +) diff --git a/internal/codeintel/autoindexing/BUILD.bazel b/internal/codeintel/autoindexing/BUILD.bazel index 6eee23340f26..ea8d34f9f29e 100644 --- a/internal/codeintel/autoindexing/BUILD.bazel +++ b/internal/codeintel/autoindexing/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -64,3 +65,17 @@ go_test( "@com_github_google_go_cmp//cmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":autoindexing", + "//internal/codeintel/autoindexing/internal/store", + ], +) diff --git a/internal/codeintel/autoindexing/internal/background/dependencies/BUILD.bazel b/internal/codeintel/autoindexing/internal/background/dependencies/BUILD.bazel index 77190742f065..69415376a236 100644 --- a/internal/codeintel/autoindexing/internal/background/dependencies/BUILD.bazel +++ b/internal/codeintel/autoindexing/internal/background/dependencies/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -85,3 +86,19 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":dependencies", + "//internal/codeintel/autoindexing/internal/store", + "//internal/codeintel/uploads/shared", + "//internal/workerutil/dbworker/store", + ], +) diff --git a/internal/codeintel/autoindexing/internal/inference/BUILD.bazel b/internal/codeintel/autoindexing/internal/inference/BUILD.bazel index 3b2e0d5b54ea..480486f326e6 100644 --- a/internal/codeintel/autoindexing/internal/inference/BUILD.bazel +++ b/internal/codeintel/autoindexing/internal/inference/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -79,3 +80,14 @@ go_test( "@org_golang_x_time//rate", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":inference"], +) diff --git a/internal/codeintel/codenav/BUILD.bazel b/internal/codeintel/codenav/BUILD.bazel index 07f43ee19886..48636e4e555d 100644 --- a/internal/codeintel/codenav/BUILD.bazel +++ b/internal/codeintel/codenav/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -77,3 +78,17 @@ go_test( "@com_github_sourcegraph_scip//bindings/go/scip", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":codenav", + "//internal/codeintel/codenav/internal/lsifstore", + ], +) diff --git a/internal/codeintel/codenav/transport/graphql/BUILD.bazel b/internal/codeintel/codenav/transport/graphql/BUILD.bazel index 022147d6d474..257cd50047dc 100644 --- a/internal/codeintel/codenav/transport/graphql/BUILD.bazel +++ b/internal/codeintel/codenav/transport/graphql/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -67,3 +68,14 @@ go_test( "@com_github_derision_test_go_mockgen//testutil/require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":graphql"], +) diff --git a/internal/codeintel/dependencies/internal/background/BUILD.bazel b/internal/codeintel/dependencies/internal/background/BUILD.bazel index 806d2b5bde5b..5f1974ac4999 100644 --- a/internal/codeintel/dependencies/internal/background/BUILD.bazel +++ b/internal/codeintel/dependencies/internal/background/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -49,3 +50,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":background"], +) diff --git a/internal/codeintel/policies/BUILD.bazel b/internal/codeintel/policies/BUILD.bazel index 4510cdbda436..b6535898cf3e 100644 --- a/internal/codeintel/policies/BUILD.bazel +++ b/internal/codeintel/policies/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -61,3 +62,17 @@ go_test( "@com_github_google_go_cmp//cmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":policies", + "//internal/codeintel/policies/internal/store", + ], +) diff --git a/internal/codeintel/ranking/BUILD.bazel b/internal/codeintel/ranking/BUILD.bazel index 77e9d158af78..f41e6226f754 100644 --- a/internal/codeintel/ranking/BUILD.bazel +++ b/internal/codeintel/ranking/BUILD.bazel @@ -2,20 +2,6 @@ load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_mockgen.bzl", "go_mockgen") -go_mockgen( - name = "sample_text", - out = "mocks_test.go", - manifests = [ - "//:mockgen.yaml", - "//:mockgen.test.yaml", - "//:mockgen.temp.yaml", - ], - deps = [ - "//internal/codeintel/ranking/internal/store", - "//internal/conf/conftypes", - ], -) - go_library( name = "ranking", srcs = [ @@ -69,3 +55,17 @@ go_test( "//schema", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + "//internal/codeintel/ranking/internal/store", + "//internal/conf/conftypes", + ], +) diff --git a/internal/codeintel/uploads/BUILD.bazel b/internal/codeintel/uploads/BUILD.bazel index 5848777b3072..f2b9875bb042 100644 --- a/internal/codeintel/uploads/BUILD.bazel +++ b/internal/codeintel/uploads/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -63,3 +64,19 @@ go_test( "@com_github_keegancsmith_sqlf//:sqlf", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":uploads", + "//internal/codeintel/uploads/internal/lsifstore", + "//internal/codeintel/uploads/internal/store", + "//internal/workerutil/dbworker/store", + ], +) diff --git a/internal/codeintel/uploads/internal/background/backfiller/BUILD.bazel b/internal/codeintel/uploads/internal/background/backfiller/BUILD.bazel index 50190a754dbf..bd1e0ecb4aba 100644 --- a/internal/codeintel/uploads/internal/background/backfiller/BUILD.bazel +++ b/internal/codeintel/uploads/internal/background/backfiller/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -41,3 +42,14 @@ go_test( "@com_github_google_go_cmp//cmp", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/codeintel/uploads/internal/store"], +) diff --git a/internal/codeintel/uploads/internal/background/expirer/BUILD.bazel b/internal/codeintel/uploads/internal/background/expirer/BUILD.bazel index 82227be00076..84a2f6abb1b1 100644 --- a/internal/codeintel/uploads/internal/background/expirer/BUILD.bazel +++ b/internal/codeintel/uploads/internal/background/expirer/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -60,3 +61,19 @@ go_test( "@com_github_sourcegraph_scip//bindings/go/scip", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":expirer", + "//internal/codeintel/uploads/internal/lsifstore", + "//internal/codeintel/uploads/internal/store", + "//internal/workerutil/dbworker/store", + ], +) diff --git a/internal/codeintel/uploads/internal/background/processor/BUILD.bazel b/internal/codeintel/uploads/internal/background/processor/BUILD.bazel index bd5b4ac7a02f..4fca908cbdf0 100644 --- a/internal/codeintel/uploads/internal/background/processor/BUILD.bazel +++ b/internal/codeintel/uploads/internal/background/processor/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -79,3 +80,19 @@ go_test( "@org_golang_google_protobuf//proto", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [ + ":processor", + "//internal/codeintel/uploads/internal/lsifstore", + "//internal/codeintel/uploads/internal/store", + "//internal/workerutil/dbworker/store", + ], +) diff --git a/internal/codeintel/uploads/transport/graphql/BUILD.bazel b/internal/codeintel/uploads/transport/graphql/BUILD.bazel index bece8425a3c7..57d2c77b4b8b 100644 --- a/internal/codeintel/uploads/transport/graphql/BUILD.bazel +++ b/internal/codeintel/uploads/transport/graphql/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -55,3 +56,14 @@ go_test( embed = [":graphql"], deps = ["//internal/codeintel/uploads/shared"], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":graphql"], +) diff --git a/internal/codeintel/uploads/transport/http/BUILD.bazel b/internal/codeintel/uploads/transport/http/BUILD.bazel index 6cb2951968e4..b79f960fac13 100644 --- a/internal/codeintel/uploads/transport/http/BUILD.bazel +++ b/internal/codeintel/uploads/transport/http/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -65,3 +66,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/uploadhandler"], +) diff --git a/internal/codeintel/uploads/transport/http/auth/BUILD.bazel b/internal/codeintel/uploads/transport/http/auth/BUILD.bazel index 839610d88c12..136dc5dae3ad 100644 --- a/internal/codeintel/uploads/transport/http/auth/BUILD.bazel +++ b/internal/codeintel/uploads/transport/http/auth/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -45,3 +46,14 @@ go_test( "@com_github_tomnomnom_linkheader//:linkheader", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":auth"], +) diff --git a/internal/conf/BUILD.bazel b/internal/conf/BUILD.bazel index df905f170450..aadb9c59db67 100644 --- a/internal/conf/BUILD.bazel +++ b/internal/conf/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -79,3 +80,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":conf"], +) diff --git a/internal/database/basestore/BUILD.bazel b/internal/database/basestore/BUILD.bazel index d163576ba24b..b71748302de2 100644 --- a/internal/database/basestore/BUILD.bazel +++ b/internal/database/basestore/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -50,3 +51,14 @@ go_test( "@org_golang_x_sync//errgroup", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":basestore"], +) diff --git a/internal/database/dbmocks/BUILD.bazel b/internal/database/dbmocks/BUILD.bazel index 822b347811c8..f3cbae91dfdc 100644 --- a/internal/database/dbmocks/BUILD.bazel +++ b/internal/database/dbmocks/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -28,3 +29,14 @@ go_library( "@com_github_sourcegraph_zoekt//:zoekt", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/database"], +) diff --git a/internal/database/migration/runner/BUILD.bazel b/internal/database/migration/runner/BUILD.bazel index 705971aec0ec..6eba8b09b1d3 100644 --- a/internal/database/migration/runner/BUILD.bazel +++ b/internal/database/migration/runner/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -47,3 +48,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":runner"], +) diff --git a/internal/embeddings/BUILD.bazel b/internal/embeddings/BUILD.bazel index e716228e1bea..1f1ff26c8d65 100644 --- a/internal/embeddings/BUILD.bazel +++ b/internal/embeddings/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -89,3 +90,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":embeddings"], +) diff --git a/internal/embeddings/background/repo/BUILD.bazel b/internal/embeddings/background/repo/BUILD.bazel index b16751a8dd1b..51f8a2f5dcbc 100644 --- a/internal/embeddings/background/repo/BUILD.bazel +++ b/internal/embeddings/background/repo/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -50,3 +51,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":repo"], +) diff --git a/internal/embeddings/embed/BUILD.bazel b/internal/embeddings/embed/BUILD.bazel index 2c4163cb6cf0..68e3c5c5c0f8 100644 --- a/internal/embeddings/embed/BUILD.bazel +++ b/internal/embeddings/embed/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -55,3 +56,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":embed"], +) diff --git a/internal/executor/store/BUILD.bazel b/internal/executor/store/BUILD.bazel index 6b175d570612..1b8a58bff637 100644 --- a/internal/executor/store/BUILD.bazel +++ b/internal/executor/store/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -43,3 +44,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":store"], +) diff --git a/internal/featureflag/BUILD.bazel b/internal/featureflag/BUILD.bazel index 710f0eeff231..2dbdd2664459 100644 --- a/internal/featureflag/BUILD.bazel +++ b/internal/featureflag/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -40,3 +41,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":featureflag"], +) diff --git a/internal/github_apps/store/BUILD.bazel b/internal/github_apps/store/BUILD.bazel index 8c0d97053997..681f6fbf7140 100644 --- a/internal/github_apps/store/BUILD.bazel +++ b/internal/github_apps/store/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -44,3 +45,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":store"], +) diff --git a/internal/gitserver/BUILD.bazel b/internal/gitserver/BUILD.bazel index 4c33abb3d700..d5db52c183ab 100644 --- a/internal/gitserver/BUILD.bazel +++ b/internal/gitserver/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -93,3 +94,14 @@ go_test( "@org_golang_google_grpc//status", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mock.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/gitserver/v1:gitserver"], +) diff --git a/internal/goroutine/BUILD.bazel b/internal/goroutine/BUILD.bazel index 112ac67544e9..7ca6653c91ef 100644 --- a/internal/goroutine/BUILD.bazel +++ b/internal/goroutine/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -38,3 +39,14 @@ go_test( "@com_github_derision_test_glock//:glock", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":goroutine"], +) diff --git a/internal/insights/background/BUILD.bazel b/internal/insights/background/BUILD.bazel index 54aced864c7f..65bb7f59db25 100644 --- a/internal/insights/background/BUILD.bazel +++ b/internal/insights/background/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -80,3 +81,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":background"], +) diff --git a/internal/insights/discovery/BUILD.bazel b/internal/insights/discovery/BUILD.bazel index 06dd04c1b868..9c179c734686 100644 --- a/internal/insights/discovery/BUILD.bazel +++ b/internal/insights/discovery/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -55,3 +56,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":discovery"], +) diff --git a/internal/insights/scheduler/BUILD.bazel b/internal/insights/scheduler/BUILD.bazel index e35d724b6316..710a890c3172 100644 --- a/internal/insights/scheduler/BUILD.bazel +++ b/internal/insights/scheduler/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -84,3 +85,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":scheduler"], +) diff --git a/internal/insights/store/BUILD.bazel b/internal/insights/store/BUILD.bazel index 29e31265b409..feccff996f85 100644 --- a/internal/insights/store/BUILD.bazel +++ b/internal/insights/store/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -68,3 +69,14 @@ go_test( "@io_k8s_apimachinery//pkg/util/rand", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":store"], +) diff --git a/internal/metrics/store/BUILD.bazel b/internal/metrics/store/BUILD.bazel index fe2d2a872e83..36f46cafdacb 100644 --- a/internal/metrics/store/BUILD.bazel +++ b/internal/metrics/store/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -17,3 +18,14 @@ go_library( "@com_github_prometheus_common//expfmt", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":store"], +) diff --git a/internal/oobmigration/BUILD.bazel b/internal/oobmigration/BUILD.bazel index 9aa2beacff54..b95e1412f2bf 100644 --- a/internal/oobmigration/BUILD.bazel +++ b/internal/oobmigration/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -73,3 +74,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":oobmigration"], +) diff --git a/internal/redispool/BUILD.bazel b/internal/redispool/BUILD.bazel index c7b577fed4e1..00226547adf5 100644 --- a/internal/redispool/BUILD.bazel +++ b/internal/redispool/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -42,3 +43,14 @@ go_test( "@com_github_stretchr_testify//assert", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":redispool"], +) diff --git a/internal/repos/BUILD.bazel b/internal/repos/BUILD.bazel index ff77ec91d834..0b6e8a57d990 100644 --- a/internal/repos/BUILD.bazel +++ b/internal/repos/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -199,3 +200,14 @@ go_test( "@org_golang_x_time//rate", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":repos"], +) diff --git a/internal/search/client/BUILD.bazel b/internal/search/client/BUILD.bazel index 479a471311e0..cf4d3e82804a 100644 --- a/internal/search/client/BUILD.bazel +++ b/internal/search/client/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -53,3 +54,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":client"], +) diff --git a/internal/search/job/mockjob/BUILD.bazel b/internal/search/job/mockjob/BUILD.bazel index 954d1ecc1f7d..ed99f731a64f 100644 --- a/internal/search/job/mockjob/BUILD.bazel +++ b/internal/search/job/mockjob/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -12,3 +13,14 @@ go_library( "@io_opentelemetry_go_otel//attribute", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/search/job"], +) diff --git a/internal/search/repos/BUILD.bazel b/internal/search/repos/BUILD.bazel index e61de8945d9b..f8903bb31e56 100644 --- a/internal/search/repos/BUILD.bazel +++ b/internal/search/repos/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -82,3 +83,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["@com_github_sourcegraph_zoekt//:zoekt"], +) diff --git a/internal/search/symbol/BUILD.bazel b/internal/search/symbol/BUILD.bazel index 7df76a51b260..5f37f9998cd0 100644 --- a/internal/search/symbol/BUILD.bazel +++ b/internal/search/symbol/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -46,3 +47,14 @@ go_test( "@com_github_stretchr_testify//assert", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["@com_github_sourcegraph_zoekt//:zoekt"], +) diff --git a/internal/telemetry/telemetrytest/BUILD.bazel b/internal/telemetry/telemetrytest/BUILD.bazel index 6bb587938891..2c9478096230 100644 --- a/internal/telemetry/telemetrytest/BUILD.bazel +++ b/internal/telemetry/telemetrytest/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -28,3 +29,14 @@ go_test( "@com_github_stretchr_testify//require", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/telemetry"], +) diff --git a/internal/uploadhandler/BUILD.bazel b/internal/uploadhandler/BUILD.bazel index 657cab16493d..25493b1400f8 100644 --- a/internal/uploadhandler/BUILD.bazel +++ b/internal/uploadhandler/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -44,3 +45,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":uploadhandler"], +) diff --git a/internal/uploadstore/BUILD.bazel b/internal/uploadstore/BUILD.bazel index 4c6c1efc3463..733ea2026423 100644 --- a/internal/uploadstore/BUILD.bazel +++ b/internal/uploadstore/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -64,3 +65,14 @@ go_test( "@org_golang_google_api//iterator", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":uploadstore"], +) diff --git a/internal/uploadstore/mocks/BUILD.bazel b/internal/uploadstore/mocks/BUILD.bazel index d2797fc6f498..20693480af04 100644 --- a/internal/uploadstore/mocks/BUILD.bazel +++ b/internal/uploadstore/mocks/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -10,3 +11,14 @@ go_library( "//lib/iterator", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/uploadstore"], +) diff --git a/internal/workerutil/BUILD.bazel b/internal/workerutil/BUILD.bazel index 26458fdc4d87..2965111b1c65 100644 --- a/internal/workerutil/BUILD.bazel +++ b/internal/workerutil/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("//dev:go_defs.bzl", "go_test") load("@io_bazel_rules_go//go:def.bzl", "go_library") @@ -47,3 +48,14 @@ go_test( "@com_github_sourcegraph_log//logtest", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":workerutil"], +) diff --git a/internal/workerutil/dbworker/store/mocks/BUILD.bazel b/internal/workerutil/dbworker/store/mocks/BUILD.bazel index aa8f94be2a49..a94860fc57ae 100644 --- a/internal/workerutil/dbworker/store/mocks/BUILD.bazel +++ b/internal/workerutil/dbworker/store/mocks/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( @@ -13,3 +14,14 @@ go_library( "@com_github_keegancsmith_sqlf//:sqlf", ], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_temp.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = ["//internal/workerutil/dbworker/store"], +) diff --git a/lib/background/BUILD.bazel b/lib/background/BUILD.bazel index f53dbe5af2c4..212100a0c042 100644 --- a/lib/background/BUILD.bazel +++ b/lib/background/BUILD.bazel @@ -1,3 +1,4 @@ +load("//dev:go_mockgen.bzl", "go_mockgen") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("//dev:go_defs.bzl", "go_test") @@ -20,3 +21,14 @@ go_test( ], embed = [":background"], ) + +go_mockgen( + name = "generate_mocks", + out = "mocks_test.go", + manifests = [ + "//:mockgen.yaml", + "//:mockgen.test.yaml", + "//:mockgen.temp.yaml", + ], + deps = [":background"], +) diff --git a/mockgen.test.yaml b/mockgen.test.yaml index 63cb22010341..f159d3dedf62 100644 --- a/mockgen.test.yaml +++ b/mockgen.test.yaml @@ -228,7 +228,7 @@ - path: github.com/sourcegraph/sourcegraph/internal/codeintel/uploads/internal/store interfaces: - Store - - path: internal/codeintel/uploads + - path: github.com/sourcegraph/sourcegraph/internal/codeintel/uploads interfaces: - RepoStore - path: github.com/sourcegraph/sourcegraph/internal/codeintel/uploads/internal/lsifstore diff --git a/third_party/com_github_strum355_gomockgen/debug.patch b/third_party/com_github_strum355_gomockgen/debug.patch index f3ecb7e80324..1020630b740b 100644 --- a/third_party/com_github_strum355_gomockgen/debug.patch +++ b/third_party/com_github_strum355_gomockgen/debug.patch @@ -1,8 +1,8 @@ diff --git a/cmd/go-mockgen/archive.go b/cmd/go-mockgen/archive.go -index 7663519..fc97255 100644 +index 7663519..6f12aee 100644 --- a/cmd/go-mockgen/archive.go +++ b/cmd/go-mockgen/archive.go -@@ -61,43 +61,44 @@ func parseArchive(a string) (archive, error) { +@@ -61,43 +61,46 @@ func parseArchive(a string) (archive, error) { }, nil } @@ -54,7 +54,9 @@ index 7663519..fc97255 100644 + if err != nil { + return nil, err + } -+ conf := types.Config{Importer: imp} ++ conf := types.Config{Importer: imp, Error: func(err error) { ++ fmt.Println(err) ++ }} + typesInfo := &types.Info{ + Types: make(map[ast.Expr]types.TypeAndValue), + Defs: make(map[*ast.Ident]types.Object), @@ -228,7 +230,7 @@ index ac0e58b..75fb178 100644 return yamlPayload{}, err } diff --git a/cmd/go-mockgen/main.go b/cmd/go-mockgen/main.go -index 99eb342..cab97ae 100644 +index 99eb342..a824753 100644 --- a/cmd/go-mockgen/main.go +++ b/cmd/go-mockgen/main.go @@ -46,22 +46,34 @@ func mainErr() error { @@ -305,3 +307,17 @@ index 99eb342..cab97ae 100644 } pkgs, err := packages.Load(&packages.Config{Mode: packages.NeedName | packages.NeedImports | packages.NeedSyntax | packages.NeedTypes | packages.NeedDeps}, params.importPaths...) +@@ -135,7 +151,12 @@ func loadPackages(params loadParams) ([]*internal.GoPackage, error) { + ipkgs := make([]*internal.GoPackage, 0, len(pkgs)) + for _, pkg := range pkgs { + if len(pkg.Errors) > 0 { +- return nil, pkg.Errors[0] ++ var errString string ++ for _, err := range pkg.Errors { ++ errString += err.Error() + "\n" ++ } ++ errString = strings.TrimSpace(errString) ++ return nil, errors.New(errString) + } + ipkgs = append(ipkgs, internal.NewPackage(pkg)) + } From ede3c8852e73a8f75c201e2dd0236222d582c8c3 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Sat, 10 Feb 2024 00:46:15 +0000 Subject: [PATCH 11/18] everything done besides a minor fix in //dev:go_mockgen gazelle output --- cmd/gitserver/internal/mocks_test.go | 4 + deps.bzl | 4 +- dev/BUILD.bazel | 6 +- dev/go-mockgen-transformer/main.go | 4 +- dev/go_mockgen_rule.bzl | 12 +- go.mod | 2 +- go.sum | 8 +- .../com_github_strum355_gomockgen/debug.patch | 323 ------------------ 8 files changed, 23 insertions(+), 340 deletions(-) diff --git a/cmd/gitserver/internal/mocks_test.go b/cmd/gitserver/internal/mocks_test.go index eefd2d127c77..6e50cd807af2 100644 --- a/cmd/gitserver/internal/mocks_test.go +++ b/cmd/gitserver/internal/mocks_test.go @@ -1,4 +1,8 @@ // Code generated by go-mockgen 1.3.7; DO NOT EDIT. +// +// This file was generated by running `sg generate` (or `go-mockgen`) at the root of +// this repository. To add additional mocks to this or another package, add a new entry +// to the mockgen.yaml file in the root of this repository. package internal diff --git a/deps.bzl b/deps.bzl index fec982f87b21..edf23386dd4a 100644 --- a/deps.bzl +++ b/deps.bzl @@ -1276,8 +1276,8 @@ def go_dependencies(): "//third_party/com_github_strum355_gomockgen:debug.patch", ], replace = "github.com/strum355/go-mockgen", - sum = "h1:Dup3gAgmdLe8oRshV/5mWKgcXy+gPk0n1x04b1cew/c=", - version = "v0.0.0-20240207152121-3f1b41cc8c40", + sum = "h1:7H9Wnfn7spynoZ53W4OX8v1usPE4UocRnwlAW4kNV/U=", + version = "v0.0.0-20240210001918-99bfe9548e56", ) go_repository( name = "com_github_dghubble_go_twitter", diff --git a/dev/BUILD.bazel b/dev/BUILD.bazel index 41a347dd12b2..1ff698a9b3ed 100644 --- a/dev/BUILD.bazel +++ b/dev/BUILD.bazel @@ -110,9 +110,7 @@ multirun( "//internal/uploadstore:generate_mocks", "//internal/workerutil/dbworker/store/mocks:generate_mocks", "//internal/workerutil:generate_mocks", - "//lib/background:generate_mocks", - "//internal/workerutil/dbworker/store/mocks:generate_mocks", - "//internal/workerutil:generate_mocks", - "//lib/background:generate_mocks", + # TODO: this list doesn't get smaller, why ], + jobs = 1, ) diff --git a/dev/go-mockgen-transformer/main.go b/dev/go-mockgen-transformer/main.go index 04ef0e58eaee..41fcf9a1c067 100644 --- a/dev/go-mockgen-transformer/main.go +++ b/dev/go-mockgen-transformer/main.go @@ -37,7 +37,7 @@ func main() { flag.StringVar(&payload.Goimports, "goimports", "./bin/.goimports", "Path to goimports binary") flag.StringVar(&payload.StdlibRoot, "stdlibroot", "", "Path to the root of the Go compiled stdlib") flag.Var(&sourceFiles, "source-files", "Values of the format IMPORTPATH=FILE, where IMPORTPATH is the import path for FILE") - flag.Var(&archives, "archives", "Values of the format W=X=Y=Z, where ARCHIVE is the path to the archive") + flag.Var(&archives, "archives", "Values of the format IMPORTPATH=ARCHIVE, where ARCHIVE is the path to the archive for the given IMPORTPATH") flag.Parse() payload.IncludeConfigPaths = []string{} @@ -100,6 +100,4 @@ func main() { if _, err := f.Write(out); err != nil { panic(err) } - - fmt.Println("Successfully transformed go-mockgen config") } diff --git a/dev/go_mockgen_rule.bzl b/dev/go_mockgen_rule.bzl index 0a98e7c5b6d4..c62420ecbb05 100644 --- a/dev/go_mockgen_rule.bzl +++ b/dev/go_mockgen_rule.bzl @@ -28,13 +28,15 @@ def _go_mockgen_run(ctx): deps = [] for dep in ctx.attr.deps: for a in dep[GoArchive].direct: - transformer_args.append("--archives={}={}={}={}".format( - a.data.importpath, + transformer_args.append("--archives=%s=%s" % ( a.data.importmap, - a.data.file.path, - a.data.file.path, + # (anecdotaly) export_file is a .x file and file is a .a file. See here for more info on this + # https://github.com/bazelbuild/rules_go/issues/1803 + # and here for further reading on the compiler side of things + # https://groups.google.com/g/golang-codereviews/c/UXJeeuTS7oQ + a.data.export_file.path if a.data.export_file else a.data.file.path, )) - deps.append(depset(direct = [a.data.file])) + deps.append(depset(direct = [a.data.export_file if a.data.export_file else a.data.file])) for dep in ctx.attr.deps: for src in dep[GoArchive].data.srcs: diff --git a/go.mod b/go.mod index 48fbd71231a2..d5b4a94c4881 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ replace ( // These entries indicate temporary replace directives due to a pending pull request upstream // or issues with specific versions. replace ( - github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40 + github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56 // Pending: https://github.com/ghodss/yaml/pull/65 github.com/ghodss/yaml => github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 // Dependency declares incorrect, old version of redigo, so we must override it: https://github.com/boj/redistore/blob/master/go.mod diff --git a/go.sum b/go.sum index 254a6e687d8d..589697e06d99 100644 --- a/go.sum +++ b/go.sum @@ -293,6 +293,8 @@ github.com/bazelbuild/bazel-gazelle v0.35.0 h1:Bvg+zEHWYwWrhJT4WxyvcU3y1DEJpT/Xl github.com/bazelbuild/bazel-gazelle v0.35.0/go.mod h1:o2+s90f3w3U6jjw0gcdok0EJOfNK0AK/9RyVP7QkRDk= github.com/bazelbuild/buildtools v0.0.0-20231115204819-d4c9dccdfbb1 h1:2Gc2Q6hVR1SJ8bBI9Ybzoggp8u/ED2WkM4MfvEIn9+c= github.com/bazelbuild/buildtools v0.0.0-20231115204819-d4c9dccdfbb1/go.mod h1:689QdV3hBP7Vo9dJMmzhoYIyo/9iMhEmHkJcnaPRCbo= +github.com/bazelbuild/rules_go v0.44.0 h1:uJStI9o5obVWSwquy9WxKNWfZxf2sKA2rpEsX6x5RVM= +github.com/bazelbuild/rules_go v0.44.0/go.mod h1:z7Y8GZ90V4mwgYizbNbEQKmOmx93Q3Btcel4vX7pXoc= github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= @@ -313,6 +315,8 @@ github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= +github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= +github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff h1:RmdPFa+slIr4SCBg4st/l/vZWVe9QJKMXGO60Bxbe04= github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bradfitz/gomemcache v0.0.0-20170208213004-1952afaa557d/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= @@ -1708,8 +1712,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40 h1:Dup3gAgmdLe8oRshV/5mWKgcXy+gPk0n1x04b1cew/c= -github.com/strum355/go-mockgen v0.0.0-20240207152121-3f1b41cc8c40/go.mod h1:89jHE4KrusV6kCx9JPn5nkD7kfGD+4gtvp+ApO0lc/E= +github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56 h1:7H9Wnfn7spynoZ53W4OX8v1usPE4UocRnwlAW4kNV/U= +github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56/go.mod h1:89jHE4KrusV6kCx9JPn5nkD7kfGD+4gtvp+ApO0lc/E= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203 h1:QVqDTf3h2WHt08YuiTGPZLls0Wq99X9bWd0Q5ZSBesM= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= diff --git a/third_party/com_github_strum355_gomockgen/debug.patch b/third_party/com_github_strum355_gomockgen/debug.patch index 1020630b740b..e69de29bb2d1 100644 --- a/third_party/com_github_strum355_gomockgen/debug.patch +++ b/third_party/com_github_strum355_gomockgen/debug.patch @@ -1,323 +0,0 @@ -diff --git a/cmd/go-mockgen/archive.go b/cmd/go-mockgen/archive.go -index 7663519..6f12aee 100644 ---- a/cmd/go-mockgen/archive.go -+++ b/cmd/go-mockgen/archive.go -@@ -61,43 +61,46 @@ func parseArchive(a string) (archive, error) { - }, nil - } - --func PackagesArchive(p loadParams) ([]*internal.GoPackage, error) { -- files := make([]*ast.File, 0, len(p.sources)) -- for _, src := range p.sources { -- f, err := parser.ParseFile(p.fset, src, nil, parser.ParseComments) -- if err != nil { -- return nil, fmt.Errorf("error parsing %q: %v", src, err) -+func PackagesArchive(p loadParams) (packages []*internal.GoPackage, err error) { -+ for _, importpath := range p.importPaths { -+ files := make([]*ast.File, 0, len(p.sources)) -+ for _, src := range p.sources[importpath] { -+ f, err := parser.ParseFile(p.fset, src, nil, parser.ParseComments) -+ if err != nil { -+ return nil, fmt.Errorf("error parsing %q: %v", src, err) -+ } -+ files = append(files, f) - } -- files = append(files, f) -- } - -- // Build an importer using the imports map built by reading dependency -- // archives, and use it to build the *types.Package and *types.Info for the -- // source files. -- imp, err := newImporter(p.fset, p.archives, p.stdlibRoot) -- if err != nil { -- return nil, err -- } -- conf := types.Config{Importer: imp} -- typesInfo := &types.Info{ -- Types: make(map[ast.Expr]types.TypeAndValue), -- Defs: make(map[*ast.Ident]types.Object), -- Uses: make(map[*ast.Ident]types.Object), -- Implicits: make(map[ast.Node]types.Object), -- Selections: make(map[*ast.SelectorExpr]*types.Selection), -- Scopes: make(map[ast.Node]*types.Scope), -- } -- pkg, err := conf.Check(p.importPaths[0], p.fset, files, typesInfo) -- if err != nil { -- return nil, fmt.Errorf("error building pkg %q: %v", p.importPaths[0], err) -- } -- return []*internal.GoPackage{ -- { -+ // Build an importer using the imports map built by reading dependency -+ // archives, and use it to build the *types.Package and *types.Info for the -+ // source files. -+ imp, err := newImporter(p.fset, p.archives, p.stdlibRoot) -+ if err != nil { -+ return nil, err -+ } -+ conf := types.Config{Importer: imp, Error: func(err error) { -+ fmt.Println(err) -+ }} -+ typesInfo := &types.Info{ -+ Types: make(map[ast.Expr]types.TypeAndValue), -+ Defs: make(map[*ast.Ident]types.Object), -+ Uses: make(map[*ast.Ident]types.Object), -+ Implicits: make(map[ast.Node]types.Object), -+ Selections: make(map[*ast.SelectorExpr]*types.Selection), -+ Scopes: make(map[ast.Node]*types.Scope), -+ } -+ pkg, err := conf.Check(importpath, p.fset, files, typesInfo) -+ if err != nil { -+ return nil, fmt.Errorf("error building pkg %q: %v", importpath, err) -+ } -+ packages = append(packages, &internal.GoPackage{ - PkgPath: pkg.Path(), -- CompiledGoFiles: p.sources, -+ CompiledGoFiles: p.sources[importpath], - Syntax: files, - Types: pkg, - TypesInfo: typesInfo, -- }, -- }, nil -+ }) -+ } -+ return - } -diff --git a/cmd/go-mockgen/args.go b/cmd/go-mockgen/args.go -index ac0e58b..75fb178 100644 ---- a/cmd/go-mockgen/args.go -+++ b/cmd/go-mockgen/args.go -@@ -42,8 +42,12 @@ func parseAndValidateOptions() ([]*generation.Options, error) { - } - - func parseOptions() ([]*generation.Options, error) { -- if len(os.Args) == 1 { -- return parseManifest() -+ if len(os.Args) == 1 || os.Args[1] == "--manifest-dir" { -+ var manifestDir string -+ if len(os.Args) == 3 { -+ manifestDir = os.Args[2] -+ } -+ return parseManifest(manifestDir) - } - - opts, err := parseFlags() -@@ -67,7 +71,7 @@ func parseFlags() (*generation.Options, error) { - app := kingpin.New(consts.Name, consts.Description).Version(consts.Version) - app.UsageWriter(os.Stdout) - -- app.Arg("path", "The import paths used to search for eligible interfaces").StringsVar(&opts.PackageOptions[0].ImportPaths) -+ app.Arg("path", "The import paths used to search for eligible interfaces").Required().StringsVar(&opts.PackageOptions[0].ImportPaths) - app.Flag("package", "The name of the generated package. It will be inferred from the output options by default.").Short('p').StringVar(&opts.ContentOptions.PkgName) - app.Flag("interfaces", "A list of target interfaces to generate defined in the given the import paths.").Short('i').StringsVar(&opts.PackageOptions[0].Interfaces) - app.Flag("exclude", "A list of interfaces to exclude from generation. Mocks for all other exported interfaces defined in the given import paths are generated.").Short('e').StringsVar(&opts.PackageOptions[0].Exclude) -@@ -84,7 +88,7 @@ func parseFlags() (*generation.Options, error) { - app.Flag("build-constraints", "Build constraints that are added to each generated file.").StringVar(&opts.ContentOptions.BuildConstraints) - - app.Flag("archives", "Values of the format IMPORTPATHS=IMPORTMAP=FILE=EXPORT, where IMPORTPATHS is a colon-delimited list of import paths, IMPORTMAP is the import path of the archive, FILE is the archive file path, and EXPORT is the export file path.").StringsVar(&opts.PackageOptions[0].Archives) -- app.Flag("sources", "When using gcexportdata archives, specifies the filepaths to the sources to be parsed").StringsVar(&opts.PackageOptions[0].Sources) -+ app.Flag("source-files", "Values of the format IMPORTPATH=FILE, where IMPORTPATH is the import path of FILE, when using gcexportdata archives, specifies the filepaths to the sources to be parsed").StringsVar(&opts.PackageOptions[0].Sources) - app.Flag("stdlibroot", "When using gcexportdata archives, specifies the path containing archive files for the Go stdlib").StringVar(&opts.PackageOptions[0].StdlibRoot) - - if _, err := app.Parse(os.Args[1:]); err != nil { -@@ -94,8 +98,8 @@ func parseFlags() (*generation.Options, error) { - return opts, nil - } - --func parseManifest() ([]*generation.Options, error) { -- payload, err := readManifest() -+func parseManifest(manifestDir string) ([]*generation.Options, error) { -+ payload, err := readManifest(manifestDir) - if err != nil { - return nil, err - } -@@ -130,6 +134,10 @@ func parseManifest() ([]*generation.Options, error) { - opts.ForTest = true - } - -+ if len(opts.Paths) > 0 && len(opts.Archives) > 0 { -+ return nil, fmt.Errorf("multiple import paths and archives are mutually exclusive") -+ } -+ - // Canonicalization - paths := opts.Paths - if opts.Path != "" { -@@ -143,11 +151,15 @@ func parseManifest() ([]*generation.Options, error) { - - var packageOptions []generation.PackageOptions - if len(opts.Sources) > 0 { -- if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 { -+ if len(opts.Paths) > 0 || len(opts.Interfaces) > 0 || opts.Path != "" { - return nil, fmt.Errorf("sources and path/paths/interfaces are mutually exclusive") - } - - for _, source := range opts.Sources { -+ if len(source.Paths) > 0 && len(opts.Archives) > 0 { -+ return nil, fmt.Errorf("multiple import paths and archives are mutually exclusive") -+ } -+ - // Canonicalization - paths := source.Paths - if source.Path != "" { -@@ -159,6 +171,9 @@ func parseManifest() ([]*generation.Options, error) { - Interfaces: source.Interfaces, - Exclude: source.Exclude, - Prefix: source.Prefix, -+ Archives: opts.Archives, -+ Sources: source.SourceFiles, -+ StdlibRoot: payload.StdlibRoot, - }) - } - } else { -@@ -167,6 +182,9 @@ func parseManifest() ([]*generation.Options, error) { - Interfaces: opts.Interfaces, - Exclude: opts.Exclude, - Prefix: opts.Prefix, -+ Archives: opts.Archives, -+ Sources: opts.SourceFiles, -+ StdlibRoot: payload.StdlibRoot, - }) - } - -@@ -207,6 +225,8 @@ type yamlPayload struct { - ForTest bool `yaml:"for-test"` - FilePrefix string `yaml:"file-prefix"` - -+ StdlibRoot string `yaml:"stdlib-root"` -+ - Mocks []yamlMock `yaml:"mocks"` - } - -@@ -214,6 +234,8 @@ type yamlMock struct { - Path string `yaml:"path"` - Paths []string `yaml:"paths"` - Sources []yamlSource `yaml:"sources"` -+ SourceFiles []string `yaml:"source-files"` -+ Archives []string `yaml:"archives"` - Package string `yaml:"package"` - Interfaces []string `yaml:"interfaces"` - Exclude []string `yaml:"exclude"` -@@ -230,15 +252,16 @@ type yamlMock struct { - } - - type yamlSource struct { -- Path string `yaml:"path"` -- Paths []string `yaml:"paths"` -- Interfaces []string `yaml:"interfaces"` -- Exclude []string `yaml:"exclude"` -- Prefix string `yaml:"prefix"` -+ Path string `yaml:"path"` -+ Paths []string `yaml:"paths"` -+ Interfaces []string `yaml:"interfaces"` -+ Exclude []string `yaml:"exclude"` -+ Prefix string `yaml:"prefix"` -+ SourceFiles []string `yaml:"source-files"` - } - --func readManifest() (yamlPayload, error) { -- contents, err := os.ReadFile("mockgen.yaml") -+func readManifest(manifestDir string) (yamlPayload, error) { -+ contents, err := os.ReadFile(filepath.Join(manifestDir, "mockgen.yaml")) - if err != nil { - return yamlPayload{}, err - } -@@ -249,7 +272,7 @@ func readManifest() (yamlPayload, error) { - } - - for _, path := range payload.IncludeConfigPaths { -- payload, err = readIncludeConfig(payload, path) -+ payload, err = readIncludeConfig(payload, filepath.Join(manifestDir, path)) - if err != nil { - return yamlPayload{}, err - } -diff --git a/cmd/go-mockgen/main.go b/cmd/go-mockgen/main.go -index 99eb342..a824753 100644 ---- a/cmd/go-mockgen/main.go -+++ b/cmd/go-mockgen/main.go -@@ -46,22 +46,34 @@ func mainErr() error { - return err - } - -- var importPaths []string -+ var ( -+ importPaths []string -+ archives []archive -+ // map of import path to sources -+ sources = make(map[string][]string) -+ ) - for _, opts := range allOptions { - for _, packageOpts := range opts.PackageOptions { - importPaths = append(importPaths, packageOpts.ImportPaths...) -+ for _, sourcefile := range packageOpts.Sources { -+ split := strings.Split(sourcefile, "=") -+ if len(split) == 2 { -+ sources[split[0]] = append(sources[split[0]], split[1]) -+ } else { -+ // pre-validated in args.go#parseManifest -+ sources[packageOpts.ImportPaths[0]] = append(sources[packageOpts.ImportPaths[0]], sourcefile) -+ } -+ } -+ for _, archive := range packageOpts.Archives { -+ a, err := parseArchive(archive) -+ if err != nil { -+ return err -+ } -+ archives = append(archives, a) -+ } - } - } - -- archives := make([]archive, 0, len(allOptions[0].PackageOptions[0].Archives)) -- for _, archive := range allOptions[0].PackageOptions[0].Archives { -- a, err := parseArchive(archive) -- if err != nil { -- return err -- } -- archives = append(archives, a) -- } -- - log.Printf("loading data for %d packages\n", len(importPaths)) - - pkgs, err := loadPackages(loadParams{ -@@ -69,7 +81,7 @@ func mainErr() error { - importPaths: importPaths, - // gcexportdata - archives: archives, -- sources: allOptions[0].PackageOptions[0].Sources, -+ sources: sources, - stdlibRoot: allOptions[0].PackageOptions[0].StdlibRoot, - }) - if err != nil { -@@ -114,13 +126,17 @@ type loadParams struct { - - // gcexportdata specific params - archives []archive -- sources []string -+ sources map[string][]string - stdlibRoot string - } - - func loadPackages(params loadParams) ([]*internal.GoPackage, error) { - if len(params.archives) > 0 { -- return PackagesArchive(params) -+ packages, err := PackagesArchive(params) -+ if err != nil { -+ return nil, fmt.Errorf("error loading packages from archives: %v", err) -+ } -+ return packages, nil - } - - pkgs, err := packages.Load(&packages.Config{Mode: packages.NeedName | packages.NeedImports | packages.NeedSyntax | packages.NeedTypes | packages.NeedDeps}, params.importPaths...) -@@ -135,7 +151,12 @@ func loadPackages(params loadParams) ([]*internal.GoPackage, error) { - ipkgs := make([]*internal.GoPackage, 0, len(pkgs)) - for _, pkg := range pkgs { - if len(pkg.Errors) > 0 { -- return nil, pkg.Errors[0] -+ var errString string -+ for _, err := range pkg.Errors { -+ errString += err.Error() + "\n" -+ } -+ errString = strings.TrimSpace(errString) -+ return nil, errors.New(errString) - } - ipkgs = append(ipkgs, internal.NewPackage(pkg)) - } From 8c32d620fb2c7e9618a927e77521425b4b6ee501 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Sat, 10 Feb 2024 00:54:54 +0000 Subject: [PATCH 12/18] asdfasdf --- dev/BUILD.bazel | 4 ++-- dev/go-mockgen-gazelle/go-mockgen.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dev/BUILD.bazel b/dev/BUILD.bazel index 1ff698a9b3ed..a52a0970baba 100644 --- a/dev/BUILD.bazel +++ b/dev/BUILD.bazel @@ -110,7 +110,7 @@ multirun( "//internal/uploadstore:generate_mocks", "//internal/workerutil/dbworker/store/mocks:generate_mocks", "//internal/workerutil:generate_mocks", - # TODO: this list doesn't get smaller, why - ], + "//lib/background:generate_mocks", + ], # TODO: this list doesn't get smaller, why jobs = 1, ) diff --git a/dev/go-mockgen-gazelle/go-mockgen.go b/dev/go-mockgen-gazelle/go-mockgen.go index dd296c50970c..f23418f3aa53 100644 --- a/dev/go-mockgen-gazelle/go-mockgen.go +++ b/dev/go-mockgen-gazelle/go-mockgen.go @@ -124,7 +124,6 @@ func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateR slices.Sort(targets) targets = slices.Compact(targets) - fmt.Println(targets) multirunRule := rule.NewRule("multirun", "go_mockgen") multirunRule.SetAttr("commands", targets) From a8b8b2ee78779ee36d413bf1f3db983aa72f8cce Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Sat, 10 Feb 2024 00:57:26 +0000 Subject: [PATCH 13/18] remove yq from tools --- dev/tool_deps.bzl | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/dev/tool_deps.bzl b/dev/tool_deps.bzl index daf1b81a219f..37ed3f997a40 100644 --- a/dev/tool_deps.bzl +++ b/dev/tool_deps.bzl @@ -7,7 +7,6 @@ SRC_CLI_VERSION = "5.2.1" CTAGS_VERSION = "6.0.0.2783f009" PACKER_VERSION = "1.8.3" P4_FUSION_VERSION = "v1.13.2-sg.04a293a" -YQ_VERSION = "v4.40.5" SRC_CLI_BUILDFILE = """ filegroup( @@ -172,22 +171,3 @@ def tool_deps(): url = "https://storage.googleapis.com/p4-fusion/aarch64-darwin/dist/p4-fusion-{0}".format(P4_FUSION_VERSION), executable = True, ) - - http_file( - name = "yq-linux-amd64", - integrity = "sha256-DWqvHPRKjRj7x+0O8U9zWo340uMUxMwPAkLTXApEDJU=", - url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_linux_amd64".format(YQ_VERSION), - executable = True, - ) - - http_file( - name = "yq-darwin-amd64", - url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_darwin_amd64".format(YQ_VERSION), - executable = True, - ) - - http_file( - name = "yq-darwin-arm64", - url = "https://github.com/mikefarah/yq/releases/download/{0}/yq_darwin_arm64".format(YQ_VERSION), - executable = True, - ) From b8518943f550802cb310e1cfb133e8c20b5baa18 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Sat, 10 Feb 2024 01:01:58 +0000 Subject: [PATCH 14/18] rebase from main --- go.mod | 1 + go.sum | 2 ++ 2 files changed, 3 insertions(+) diff --git a/go.mod b/go.mod index d5b4a94c4881..22cbd86a8a77 100644 --- a/go.mod +++ b/go.mod @@ -392,6 +392,7 @@ require ( go.opentelemetry.io/collector/featuregate v1.0.1 // indirect go.uber.org/goleak v1.3.0 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect + golang.org/x/tools/go/vcs v0.1.0-deprecated // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index 589697e06d99..6726e08fe39e 100644 --- a/go.sum +++ b/go.sum @@ -2363,6 +2363,8 @@ golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools/go/vcs v0.1.0-deprecated h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4= +golang.org/x/tools/go/vcs v0.1.0-deprecated/go.mod h1:zUrvATBAvEI9535oC0yWYsLsHIV4Z7g63sNPVMtuBy8= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From dfe8d97df6e321e425c2cbc637c83b89c5ec9b3c Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Mon, 12 Feb 2024 16:38:49 +0000 Subject: [PATCH 15/18] improve logging if preconditions for bazel configure arent met --- BUILD.bazel | 2 +- dev/go-mockgen-gazelle/go-mockgen.go | 110 ++++++++++++++++----------- 2 files changed, 67 insertions(+), 45 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index b4b71166bc26..d5bd8769371e 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -23,7 +23,7 @@ load("@buildifier_prebuilt//:rules.bzl", "buildifier") # gazelle:js_npm_package_target_name {dirname}_pkg # Enable: Aspect javascript, standard go -# gazelle:lang js,go,proto +# gazelle:lang js,go,proto,gomockgen # Enable race detection for all go_test rules. # gazelle:map_kind go_test go_test //dev:go_defs.bzl diff --git a/dev/go-mockgen-gazelle/go-mockgen.go b/dev/go-mockgen-gazelle/go-mockgen.go index f23418f3aa53..e10efb74e612 100644 --- a/dev/go-mockgen-gazelle/go-mockgen.go +++ b/dev/go-mockgen-gazelle/go-mockgen.go @@ -1,7 +1,7 @@ package gomockgengazelle import ( - "fmt" + "log" "path/filepath" "slices" "strings" @@ -31,12 +31,28 @@ var ( ) var ( + logger = log.New(log.Writer(), log.Prefix(), log.Flags()) + yamlPayload mockgenc.YamlPayload + // Keep track of all output directories mentioned in go-mockgen config, so that + // we can notify if any where not visited & therefore no mocks were generated/updated + // for them. Unlike with go-mockgen, we currently don't (or can't?) create new directories + // as part of sg bazel configure, so we give the user a bash command to run to prepare the + // missing directories (+ shell Go files) before re-running sg bazel configure. unvisitedDirs = make(map[string]bool) + allOutputDirs = make(map[string]mockgenc.YamlMock) - rootDir string - loadConfig = sync.OnceValue[error](func() (err error) { + + // Haven't discovered a way to get the workspace root dir yet (the cwd is deep in the Bazel output base somewhere), + // so to read the go-mockgen files we set this value once we start traversing the workspace root. + rootDir string + + // Currently, the go_mockgen rule extracts the required go-mockgen config at build time, so their labels + // need to be passed as inputs. + manifests []string + // We want to load the mockgen.yaml (and related) config file(s) only once, so we use a sync.OnceValue. + loadConfig = sync.OnceValue[error](func() (err error) { yamlPayload, err = mockgenc.ReadManifest(filepath.Join(rootDir, "mockgen.yaml")) if err != nil { return err @@ -46,6 +62,11 @@ var ( allOutputDirs[filepath.Dir(mock.Filename)] = mock unvisitedDirs[filepath.Dir(mock.Filename)] = true } + + manifests = []string{"//:mockgen.yaml"} + for _, manifest := range yamlPayload.IncludeConfigPaths { + manifests = append(manifests, "//:"+manifest) + } return nil }) ) @@ -56,18 +77,6 @@ func NewLanguage() language.Language { func (*gomockgen) Name() string { return "gomockgen" } -func (*gomockgen) Configure(c *config.Config, rel string, f *rule.File) { - // need to tell gazelle to to run generators with the following name (aka ours) - c.Langs = append(c.Langs, "gomockgen") -} - -func (*gomockgen) KnownDirectives() []string { - return []string{ - "go_library", - "go_mockgen", - } -} - func (*gomockgen) Kinds() map[string]rule.KindInfo { return map[string]rule.KindInfo{ "go_mockgen": { @@ -80,7 +89,7 @@ func (*gomockgen) Kinds() map[string]rule.KindInfo { }, }, "multirun": { - MatchAttrs: []string{"go_mockgen"}, + MatchAttrs: []string{"name"}, MergeableAttrs: map[string]bool{ "commands": true, }, @@ -88,6 +97,13 @@ func (*gomockgen) Kinds() map[string]rule.KindInfo { } } +// From ModuleAwareLanguage.ApparentLoads: +// +// ApparentLoads returns .bzl files and symbols they define. Every rule +// generated by GenerateRules, now or in the past, should be loadable from +// one of these files. +// +// https://sourcegraph.com/github.com/bazelbuild/bazel-gazelle@ec1591cb193591b9544b52b98b8ce52833b34c58/-/blob/language/lang.go?L137:2-137:15 func (*gomockgen) ApparentLoads(moduleToApparentName func(string) string) []rule.LoadInfo { return []rule.LoadInfo{ { @@ -101,21 +117,13 @@ func (*gomockgen) ApparentLoads(moduleToApparentName func(string) string) []rule } } -// Deprecated: use ApparentLoads instead -func (*gomockgen) Loads() []rule.LoadInfo { - return []rule.LoadInfo{ - { - Name: "//dev:go_mockgen.bzl", - Symbols: []string{"go_mockgen"}, - }, - { - Name: "@rules_multirun//:defs.bzl", - Symbols: []string{"multirun"}, - }, +func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateResult { + rootDir = args.Config.RepoRoot + if err := loadConfig(); err != nil { + log.Fatalf("failed to load go-mockgen config: %v", err) } -} -func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateResult { + // if we're in the ./dev folder, we want to generate an "all" multirun. if args.Rel == "dev" { var targets []string for _, mock := range yamlPayload.Mocks { @@ -135,11 +143,7 @@ func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateR } } - rootDir = args.Config.RepoRoot - if err := loadConfig(); err != nil { - panic(err) - } - + // is this a directory we care about? if not, we don't want to generate any rules. mock, ok := allOutputDirs[args.Rel] if !ok { return language.GenerateResult{} @@ -151,13 +155,10 @@ func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateR r := rule.NewRule("go_mockgen", "generate_mocks") r.SetAttr("out", outputFilename) - - manifests := []string{"//:mockgen.yaml"} - for _, manifest := range yamlPayload.IncludeConfigPaths { - manifests = append(manifests, "//:"+manifest) - } r.SetAttr("manifests", manifests) + // we want to add the generated file to either the go_library rule or the go_test rule, depending + // on whether the file is a _test.go file or not. goRuleIndex := slices.IndexFunc(args.OtherGen, func(r *rule.Rule) bool { if strings.HasSuffix(outputFilename, "_test.go") { return r.Kind() == "go_test" @@ -166,26 +167,47 @@ func (g *gomockgen) GenerateRules(args language.GenerateArgs) language.GenerateR } }) if goRuleIndex == -1 { - panic(fmt.Sprintf("couldn't find a go_library rule in dir %q", args.Rel)) + // We can revisit this output if it's something we hit in practice. + log.Fatalf("couldn't find a go_{library,test} rule in \"%s/BUILD.bazel\"", args.Rel) } goRule := args.OtherGen[goRuleIndex] + goRule.SetAttr("srcs", append(goRule.AttrStrings("srcs"), filepath.Base(mock.Filename))) imports := gatherDependencies(mock) return language.GenerateResult{ - Gen: []*rule.Rule{r, goRule}, + Gen: []*rule.Rule{r, goRule}, + // Gen and Imports correspond per-index aka 'r' above is associated with 'imports' below. + // This value gets passed as 'rawImports' in 'Resolve' below. Imports: []interface{}{imports, nil}, } } func (g *gomockgen) DoneGeneratingRules() { if len(unvisitedDirs) > 0 { - panic(fmt.Sprintf("Some declared mock output files were not created due to their output directory missing. Please create the following directories so : %v", maps.Keys(unvisitedDirs))) + var b strings.Builder + for _, dir := range maps.Keys(unvisitedDirs) { + b.WriteString("mkdir -p ") + b.WriteString(dir) + b.WriteString(" && ") + b.WriteString("echo 'package ") + if allOutputDirs[dir].Package != "" { + b.WriteString(allOutputDirs[dir].Package) + } else { + b.WriteString(filepath.Base(dir)) + } + b.WriteString("' > ") + b.WriteString(allOutputDirs[dir].Filename) + b.WriteString(" \\\n && ") + } + b.WriteString("echo 'Done preparing! Re-running `sg bazel configure`' && sg bazel configure") + logger.Fatalf("Some declared go-mockgen output files were not created due to their output directory missing. Please run the following to resolve this:\n%s", b.String()) } } +// Here we translate the Go import paths into Bazel labels for the go_mockgen rules. func (g *gomockgen) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.RemoteCache, r *rule.Rule, rawImports interface{}, from label.Label) { if r.Kind() != "go_mockgen" { return @@ -194,11 +216,11 @@ func (g *gomockgen) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.Re r.DelAttr("deps") - var labels []string + labels := make([]string, 0, len(imports)) for _, i := range imports { result, err := golang.ResolveGo(c, ix, rc, i, from) if err != nil { - panic(err) + log.Fatalf("failed to resolve Go import path (%s) to Bazel label: %v", i, err) } labels = append(labels, result.Rel(from.Repo, from.Pkg).String()) } From 1ee2d93bac87558363b2a7c3cc9d4b9f0dcc3dd8 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Mon, 12 Feb 2024 17:04:06 +0000 Subject: [PATCH 16/18] make goGenerateLinter from sg lint onlyLocal --- dev/sg/linters/gogenerate.go | 8 +------- dev/sg/linters/linters.go | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/dev/sg/linters/gogenerate.go b/dev/sg/linters/gogenerate.go index e93279dcf293..74e89b0b3e64 100644 --- a/dev/sg/linters/gogenerate.go +++ b/dev/sg/linters/gogenerate.go @@ -2,7 +2,6 @@ package linters import ( "context" - "os" "strings" "github.com/sourcegraph/run" @@ -33,12 +32,7 @@ var goGenerateLinter = &linter{ if err != nil && strings.TrimSpace(diffOutput) != "" { out.WriteWarningf("Uncommitted changes found after running go generate:") out.Write(strings.TrimSpace(diffOutput)) - // Reset repo state - if os.Getenv("CI") == "true" { - root.Run(run.Bash(ctx, "git add . && git reset HEAD --hard")).Wait() - } else { - out.WriteWarningf("Generated changes are left in the tree, skipping reseting state because not in CI") - } + out.WriteWarningf("Generated changes are left in the tree") } return err diff --git a/dev/sg/linters/linters.go b/dev/sg/linters/linters.go index e1a2888d3a70..8464e83ec512 100644 --- a/dev/sg/linters/linters.go +++ b/dev/sg/linters/linters.go @@ -39,7 +39,7 @@ var Targets = []Target{ Name: "go", Description: "Check go code for linting errors, forbidden imports, generated files, etc", Checks: []*linter{ - timeCheck(goGenerateLinter), + onlyLocal(goGenerateLinter), onlyLocal(goDBConnImport), onlyLocal(noLocalHost), timeCheck(lintGoDirectives()), From 591ec1d22e67d2f6e82204f10bce54774130ea45 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Wed, 14 Feb 2024 17:06:51 +0000 Subject: [PATCH 17/18] bump go-mockgen --- deps.bzl | 4 ++-- go.mod | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deps.bzl b/deps.bzl index edf23386dd4a..e21e06d44981 100644 --- a/deps.bzl +++ b/deps.bzl @@ -1276,8 +1276,8 @@ def go_dependencies(): "//third_party/com_github_strum355_gomockgen:debug.patch", ], replace = "github.com/strum355/go-mockgen", - sum = "h1:7H9Wnfn7spynoZ53W4OX8v1usPE4UocRnwlAW4kNV/U=", - version = "v0.0.0-20240210001918-99bfe9548e56", + sum = "h1:OqSMnVsZVdlzf2H7ZLZ7pHs5iGrkAK2CitRUVO/GUPs=", + version = "v0.0.0-20240212213912-87f69a62e0d3", ) go_repository( name = "com_github_dghubble_go_twitter", diff --git a/go.mod b/go.mod index 22cbd86a8a77..1dfde82095e0 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,8 @@ replace ( // These entries indicate temporary replace directives due to a pending pull request upstream // or issues with specific versions. replace ( - github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56 + // Pending: https://github.com/derision-test/go-mockgen/pull/50 + github.com/derision-test/go-mockgen => github.com/strum355/go-mockgen v0.0.0-20240212213912-87f69a62e0d3 // Pending: https://github.com/ghodss/yaml/pull/65 github.com/ghodss/yaml => github.com/sourcegraph/yaml v1.0.1-0.20200714132230-56936252f152 // Dependency declares incorrect, old version of redigo, so we must override it: https://github.com/boj/redistore/blob/master/go.mod From b4fd77edf90962b1df21e47dd293d5e0395d51b1 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 15 Feb 2024 14:33:24 +0000 Subject: [PATCH 18/18] go mod tidy --- go.sum | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 6726e08fe39e..8de56cb49288 100644 --- a/go.sum +++ b/go.sum @@ -1712,8 +1712,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56 h1:7H9Wnfn7spynoZ53W4OX8v1usPE4UocRnwlAW4kNV/U= -github.com/strum355/go-mockgen v0.0.0-20240210001918-99bfe9548e56/go.mod h1:89jHE4KrusV6kCx9JPn5nkD7kfGD+4gtvp+ApO0lc/E= +github.com/strum355/go-mockgen v0.0.0-20240212213912-87f69a62e0d3 h1:OqSMnVsZVdlzf2H7ZLZ7pHs5iGrkAK2CitRUVO/GUPs= +github.com/strum355/go-mockgen v0.0.0-20240212213912-87f69a62e0d3/go.mod h1:89jHE4KrusV6kCx9JPn5nkD7kfGD+4gtvp+ApO0lc/E= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203 h1:QVqDTf3h2WHt08YuiTGPZLls0Wq99X9bWd0Q5ZSBesM= github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=