sourcegraph/dev/BUILD.bazel
Noah S-C 19d9cfc73b
bazel: native go-mockgen in Bazel (#60386)
Adds a new:
- gazelle generator
- rule + rule targets + catchall target
for generating go-mockgen mocks & testing for their being up-to-date.

Each go_mockgen macro invocation adds targets for generating mocks, copying to the source tree, as well as testing whether the current source tree mocks are up-to-date.

How to use this: `bazel run //dev:go_mockgen` for the catch-all, or `bazel run //some/target:generate_mocks` for an individual package, and `bazel test //some/target:generate_mocks_tests` to test for up-to-date-ness. There is no catch-all for testing

This currently uses a fork of go-mockgen, with an open PR for upstream here: https://github.com/derision-test/go-mockgen/pull/50.

Closes https://github.com/sourcegraph/sourcegraph/issues/60099

## Test plan

Extensive testing during development, including the following cases:
- Deleting a generated file and its entry in a go_library/go_test `srcs` attribute list and then re-running `sg bazel configure`
- Adding a non-existent output directory to mockgen.test.yaml and running the bash one-liner emitted to prepare the workspace for rerunning `sg bazel configure`

The existing config tests a lot of existing paths anyway (creating mocks for a 3rd party library's interface, entries for a given output file in >1 config file etc)
2024-02-16 13:26:48 +00:00

117 lines
5.9 KiB
Python

load("@rules_multirun//:defs.bzl", "multirun")
load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files")
exports_files(srcs = [
"eslint-report-test.sh",
"go-mockgen.tpl",
])
write_source_files(
name = "write_all_generated",
additional_update_targets = [
"//client/web/src/rbac:write_generated",
"//cmd/cody-gateway/internal/dotcom:write_genql_yaml",
"//cmd/frontend/internal/guardrails/dotcom:write_genql_yaml",
"//dev/linters/staticcheck:write_generated_bazelfile",
"//doc/admin/observability:write_monitoring_docs",
"//doc/cli/references:write_doc_files",
"//doc/dev/background-information/telemetry:write_telemetrygateway_doc",
"//internal/batches/search/syntax:write_token_type",
"//internal/database/migration/shared:write_stitched_migration_graph",
"//internal/database:write_schemas",
"//internal/rbac/types:write_generated_action",
"//internal/rbac/types:write_generated_namespace",
"//internal/rbac:write_generated",
"//lib/batches/schema:write_generated_batch_spec",
"//lib/batches/schema:write_generated_changeset_spec",
"//lib/codeintel/lsif/protocol:write_symbol_kind",
"//lib/codeintel/lsif/protocol:write_symbol_tag",
"//migrations/codeinsights:write_squashed",
"//migrations/codeintel:write_squashed",
"//migrations/frontend:write_squashed",
"//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",
], # TODO: this list doesn't get smaller, why
jobs = 1,
)