bazel-gazelle

Gazelle is a Bazel build file generator for Bazel projects. It natively supports Go and protobuf, and it may be extended to support new languages and custom rule sets.

APACHE-2.0 License

Stars
1.2K
Committers
158

Bot releases are hidden (Show)

bazel-gazelle - v0.22.0

Published by jayconrod about 4 years ago

Changes

  • The Go extension can now generate targets with a new naming convention.
    • In new projects, by default, a library will be named foo if its import path ends with foo instead of go_default_library. Similarly, a test will be named foo_test instead of go_default_test.
    • Gazelle will attempt to detect the naming convention used in existing projects, so it shouldn't unexpectedly change the naming convention.
    • To specify the naming convention explicitly, use the # gazelle:go_naming_convention directive or the -go_naming_convention flag. Valid values are import, go_default_library, and import_alias. Gazelle will rename existing targets the next time it runs after a change.
    • go_repository uses the import_alias naming convention by default, so either the old or new names may be used.
    • Thanks to @tomlu for implementing this.
  • Added # gazelle:go_generate_proto directive, which instructs the Go extension whether to generate go_proto_library rules for proto_library generated by the proto extension (thanks @linzhp).
  • Improved Windows compatibility (thanks @tomlu).
  • Language extensions can now provide dependency resolution for other extensions by implementing the resolve.CrossResolver interface. This is now used for resolve proto imports in Go (thanks @blico).
  • In the update-repos command, the -build_directives flag may be used to set the build_directives attribute on generated repositories (thanks @Helcaraxan).
  • In the update-repos command, new rules and macros will be inserted higher in WORKSPACE, above go_rules_dependencies and gazelle_dependencies if possible, to make it easier to override indirect dependencies.

Compatibility

  • gazelle_binary no longer supports mode attributes such as goos, race, and gotags. These depended on internal implementation details in rules_go. If you need to build a gazelle_binary for a platform other than the host, use command-line flags such as --platforms and --@io_bazel_rules_go//go/config:race or use a transition.

WORKSPACE code

http_archive(
    name = "bazel_gazelle",
    sha256 = "d4113967ab451dd4d2d767c3ca5f927fec4b30f3b2c6f8135a2033b9c05a5687",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.0/bazel-gazelle-v0.22.0.tar.gz",
        "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.22.0/bazel-gazelle-v0.22.0.tar.gz",
    ],
)

load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
gazelle_dependencies()
bazel-gazelle - v0.21.1

Published by jayconrod over 4 years ago

Bug fixes

  • Fixed visibility for Go libraries in internal directories. Previously,
    internal visibility was applied to packages in subdirectories of internal,
    directories, not internal directories themselves. Thanks to @robfig.
  • go_repository no longer runs cat, and genrules are replaced with native
    rules to reduce dependence on msys2 on Windows. Thanks to @tomlu.
  • Cases in select expressions are no longer emitted for platforms that aren't
    supported by the current version of rules_go.
bazel-gazelle - v0.21.0

Published by jayconrod over 4 years ago

  • # gazelle:exclude directives now accept patterns with * and ** wildcards. (thanks @kalbasit)
  • The -lang flag may now be used to select which language extensions should be run. By default, all extensions Gazelle was built with will run. (thanks @robfig)
  • Attribute matching now works on string slice attributes, not just strings. This is now used to match proto_library rules with one or more sources in common with the generated rule, even if the rule has been renamed. (thanks @linzhp)
  • Many bugs have been fixed. Thanks to everyone who helped out!
bazel-gazelle - v0.20.0

Published by jayconrod over 4 years ago

General changes

  • When update-repos is invoked with -to_macro, Gazelle will add a call to the macro and a # gazelle:repository_macro directive to WORKSPACE if neither is present.

Go changes

  • Gazelle will avoid generating duplicate go_repository rules when two module paths differ only in case. Thanks to @linzhp.
  • When deriving a repository name from an import path, all non-word characters will be replaced with underscores, not just dots and slashes. Consecutive non-word characters will be collapsed to a single underscore. Thanks to @carnott-snap.
  • Imported repository rules are now sorted.

Proto changes

  • Gazelle will add load statements for proto_library to comply with --incompatible_load_proto_rules_from_bzl. Thanks to @Yannic.
  • Fixed a bug recognizing services in .proto files. Thanks to @asv.
bazel-gazelle - v0.19.1

Published by jayconrod almost 5 years ago

Changes

  • Rule names are now included in go_repository stderr output.
  • Environment variables SSL_CERT_FILE and SSL_CERT_DIR are passed through to tools used by go_repository.
  • The list of standard packages is correctly updated for Go 1.13.
bazel-gazelle - v0.19.0

Published by jayconrod about 5 years ago

General changes

  • The # gazelle:repository directive is now supported in WORKSPACE files. Gazelle will behave as if a repository rule were declared with the given kind and attributes. This may override other declared rules. This is useful for declaring rules that appear in other files and can't be managed with #gazelle:repository_macro. Thanks to @blico.
  • The update-repos command now accepts versions for each argument, for example, update-repos github.com/sirupsen/[email protected]. For Go, the version suffixes follow the same format that go get accepts in module mode. Thanks to @weixiao-huang.

Go changes

  • go_repository has better support for visibility across submodules. For example, cloud.google.com/logging may now depend on internal packages in cloud.google.com, when both modules are unmodified go_repository rules. Previously, this required visibility attributes to be patched into the parent module.
  • go_repository now handles WORKSPACE-based configuration more efficiently. A configuration file is derived from the relevant parts of WORKSPACE and any functions declared with # gazelle:repository_macro. go_repository rules are re-evaluated when the configuration file changes, not when WORKSPACE changes. Previously, non-Go-related changes to WORKSPACE would cause go_repository to be re-evaluated. Thanks to @blico.
  • go_repository now accepts a build_directives attribute, a list of directives to write into the root build file before running Gazelle. Thanks to @linzhp.
  • The # gazelle:go_visibility directive may be used to add labels to visibility attributes of Go rules. Thanks to @linzhp.
  • Generated .go files are no longer included in go_library srcs if they are consumed by another rule through the src or srcs attributes. Thanks to @linzhp.

Proto changes

  • Updated dependency resolution tables for know protos.
bazel-gazelle - 0.18.2

Published by jayconrod about 5 years ago

Changes

  • Fixed an error that occurred when linking gazelle_binary rules in Go 1.13.
  • Several other small bug fixes.
bazel-gazelle - 0.18.1

Published by jayconrod over 5 years ago

This release is a quick fix to address an issue with go_repository on Windows.

bazel-gazelle - 0.18.0

Published by jayconrod over 5 years ago

Compatibility

  • rules_go 0.19.0 or later is now required. Older versions are not supported but may still work, depending on what features are needed.

General changes

  • gazelle update-repos now supports the flag -to_macro=file.bzl%macro. Instead of writing new repository rules to WORKSPACE, rules will be written to a function in a separate .bzl file. This helps keep related rules together. Thanks to @blico!
  • The directive # gazelle:repository_macro file.bzl%macro may be used in WORKSPACE to declare a macro generated with the above flag. gazelle update-repos will automatically update rules declared in the named macros instead of adding them to WORKSPACE. The directive may be repeated for multiple macros. gazelle fix and gazelle update will also read workspaces declared in these macros to find known repository roots and names. Thanks again to @blico!
  • The directive # gazelle:exclude . may now be written to skip updating the current directory and subdirectories. Previously, exclude only applied to files and subdirectories.

Go changes

  • go_repository can now download modules. To download a module, set the version and sum attributes instead of urls (for HTTP) or commit or tag (for VCS downloads). go_repository will download and verify the specified module with go mod download. The environment variables GOPROXY, GOPRIVATE, GONOPROXY, GOSUMDB, and GONOSUMDB are observed, so be sure to set these for private modules when using go1.13 or later.
  • gazelle update-repos <path> will add or update go_repository rules in module mode.
  • gazelle update-repos -from_file=go.mod will also add or update rules in module mode.
  • Refactored infrastructure behind go_repository. There are now separate tools and cache workspaces. Modules are downloaded into the cache. When Gazelle is updated, it should not be necessary to re-download modules unless the implementation of the cache changes. The environment variable GO_REPOSITORY_USE_HOST_CACHE may be set to 1 to use $GOPATH/pkg/mod as a module cache instead of the cache workspace.
  • go_repository now provides a replace attribute in module mode, analogous to replace in a go.mod file. The version and sum attributes are used on the replacement, but build files will be generated with the importpath of the original module. gazelle update-repos -from-file=go.mod will add replace attributes automatically (thanks to @bigkraig!).
  • gazelle update-repos now supports the flag -prune, which may be used with -from_file. When enabled, Gazelle will remove go_repository rules that no longer have equivalent repos in go.mod or Gopkg.lock. Thanks to @blico!
  • When run by go_repository, Gazelle now supports minimal module compatibility. For v2+ modules, Gazelle will generate importpath_aliases attributes so go_libraries may be imported without the semantic import version suffix by non-modularized packages.

Proto changes

  • Updated table of known proto import paths for consistency with rules_go 0.19.0.
bazel-gazelle - 0.17.0

Published by jayconrod over 5 years ago

Language agnostic changes

  • The # gazelle:map_kind directive can now be used to generate rules of
    alternative kinds. For example, instead of generating go_binary rules,
    you could generate a call to a macro that takes the same arguments
    (for example, go_image, go_deployable). Thanks to @robfig!
  • Gazelle exits with status 1 when run with -mode=diff when there are
    differences. Thanks to @mjduijn and @achew22!
  • Hidden directories are included when walking the directory tree. Thanks to
    @linzhp.

Go changes

  • go_repository now works with Go 1.12.
  • The update-repos command now lets you set attributes such as build file
    names and proto modes on the command line. Thanks to @blico!
  • Alternative compilers can now be set on go_proto_library rules with the
    -go_proto_compiler and -go_grpc_compiler flags. Thanks to @bartle-stripe!
  • Go repositories may now be imported from Godep. Thanks to @GauntletWizard!
  • Imports that can't be resolved using the index when the index is enabled
    are now resolved as external, even if they're under the current prefix.
    This is necessary to handle cases where one repository path is a prefix
    of another. Thanks to @linzhp!

Proto changes

  • The new proto_library attributes import_prefix and strip_import_prefix
    may be set with the # gazelle:proto_import_prefix and
    # gazelle:proto_strip_import_prefix directives or the -proto_import_prefix
    command line argument. Thanks to @blico!
bazel-gazelle - 0.16.0

Published by jayconrod almost 6 years ago

Changes

  • gazelle_binary is a new rule that allows developers to support new languages. To support a new language, you may:
    • Create a go_library that defines a function named NewLanguage that returns a value assignable to language.Language.
    • Create a gazelle_binary target that depends on your go_library and other language extensions through the languages attribute.
    • Reference your gazelle_binary target through the gazelle attribute of the gazelle rule.
    • See Extending Gazelle for more information.
  • Most Go packages in this repository are now public. You can now use rule and other libraries to write your own tools that manipulate build files.
  • Gazelle's git_repository and http_archive rules are deprecated. You should migrate to Bazel's git_repository and http_archive instead.
  • Gazelle will visit directories whose names start with _. Previously these were considered hidden, but go build allows directories with these names to be imported (even if they don't match wildcards). In the next release, directories whose names start with . will also be visited.
bazel-gazelle - 0.15.0

Published by jayconrod about 6 years ago

Changes

  • Gazelle can now import dependencies from go.mod files into WORKSPACE with gazelle update-repos -from_file=go.mod. This includes transitive dependencies not explicitly mentioned in go.mod.
  • cmd/autogazelle - an experimental new tool for running Gazelle as part of each Bazel command. See the README for details.
  • New directives:
    • # gazelle:follow symlink - follow a specific symlink to a directory. Gazelle normally ignores symbolic links to directories within a repository to avoid visiting a directory on more than one path. When using this, take care to # gazelle:exclude the directory from its actual parent to prevent this from happening.
    • # gazelle:resolve source-lang import-lang import-string label - specifies an explicit mapping from an import string to a label for dependency resolution.
  • New command-line options:
    • -r=true - controls whether Gazelle updates build files recursively in directories mentioned on the command line. True by default.
    • -index=true - controls whether Gazelle indexes library rules in the repository and uses the index to resolve imports to Bazel labels. True by default.
  • The go_repository rule now accepts patches and commands in the same format as git_repository and http_archive from @bazel_tools. Patches are applied after Gazelle is run (if it is run).
  • The fix and update commands can write patch files with -mode=patch.
  • The gazelle rule can now append to the command line argument list (instead of replacing it) if the arguments are prefixed with -args. For example, bazel run //:gazelle -- -args -index=false -r=false internal/label.
  • The gazelle rule now works on Windows.
bazel-gazelle - 0.14.0

Published by jayconrod about 6 years ago

Changes

  • No major feature changes -- this is primarily a maintenance release.
  • Experimental: the command line flags -experimental_read_build_files_dir and -experimental_write_build_files_dir may be used to read and write build files from alternate directories, which may be outside the repository root. If a file is read from a different directory, build files in the source tree are ignored. If a file is written to an alternate directory, build files in the source tree are not modified. These flags may change in the future.
bazel-gazelle - 0.13.0

Published by jayconrod over 6 years ago

Features

  • Completed a major refactoring of Gazelle. All language-specific logic has moved into extensions that implement the internal/languages.Language interface. go and proto are now supported through separate extensions. This will enable Gazelle to support more languages in the future.
    • If you're interested in extending Gazelle, please file an issue or get in touch with me directly.
  • Added special cases for proto dependency resolution, both for Go and proto imports. Imports of Google APIs will now resolve to the new @go_googleapis repository.
    • There were already special cases for Well Known Types. That logic is modified and extended.
  • Added two new proto modes. These can be set with the -proto=mode flag on the command line or the # gazelle:proto mode directive in build files or with build_file_proto_mode = "mode" in go_repository.
    • disable_global - Like disable mode, Gazelle won't generate, update, or delete existing proto_library or go_proto_library rules. In addition, special cases for proto dependency resolution (for Well Known Types and Google APIs) are disabled. This is useful if you build libraries using pre-generated .pb.go files and don't want any build-time dependency on protoc.
    • package - Gazelle may generate proto_library and go_proto_library rules for multiple packages in the same directory. .proto files are grouped into packages using either the declared proto package or an option specified by # gazelle:proto_group opt, e.g., go_package.
  • The git_repository and http_archive no longer rely on a cp executable to copy files. This improves Windows compatibility (thanks @pmuetschard).
  • Several more fixes related to paths for Windows compatibility (thanks @pmuetschard).
  • race and msan tags are now ignored. Sources files will be included in rules whether these flags are true or false.
bazel-gazelle - 0.12.0

Published by jayconrod over 6 years ago

Changes

  • importmap is now a mergeable attribute. This means Gazelle may now replace
    existing importmap attributes if they are not marked with a # keep
    comment.
  • gazelle fix no longer removes importpath attributes on go_binary
    and go_test rules. These attributes are no longer deprecated. The rules
    are still not importable, but the paths are useful for go_path and
    other rules.
  • Go imports of proto Well Known Types are now resolved to rules in
    @io_bazel_rules_go//proto/wkt. This partially worked before, but several
    packages weren't handled correctly.

Notes

  • rules_go will soon stop declaring the @bazel_gazelle repository, probably
    in the next rules_go major release. If you aren't explicitly declaring
    @bazel_gazelle in your WORKSPACE, following the template at
    Running Gazelle with Bazel, you may want to migrate soon.
bazel-gazelle - 0.11.0

Published by jayconrod over 6 years ago

New features

  • Gazelle now generates a single go_test target when both internal and
    external test sources are present. This allows external tests to depend on
    definitions within internal tests. gazelle fix will squash or rename
    existing rules named "go_default_xtest".
  • srcs attributes are now flat: they will no longer contain platform-specific
    select expressions. rules_go will filter sources with build constraints
    automatically. This allows broader usage of the goos and goarch attributes
    in go_binary, but there are still problems with select in deps. See the
    cross-compile FAQ
    for more information.
  • importmap attributes are added for go_library and go_proto_library rules
    in vendor directories. This prevents conflicts when multiple packages with
    the same importpath are linked into the same binary.
  • Proto imports of Well Known Types are now resolved to standard locations in
    @io_bazel_rules_go//proto/wkt.
  • go_repository now supports a build_extra_args attribute, allowing
    additional arguments to be passed to Gazelle during build file generation.
  • gazelle update-repos will now load go_repository from @bazel_gazelle.
    The old copy in @io_bazel_rules_go is deprecated. gazelle fix will also
    fix this.

Notes

  • The minimum compatible version of rules_go is now 0.11.0. This is primarily
    due to the need for importmap on go_proto_library. Older versions may
    work if you're not using protos.
bazel-gazelle - 0.10.1

Published by jayconrod over 6 years ago

  • github.com/bazelbuild/buildtools is now vendored within Gazelle, due to breaking API changes upstream.
  • Gazelle now dereferences symlinks in the repository root directory (-repo_root). This fixes a bug where Gazelle incorrectly decided other symlinks pointed outside the repository.
bazel-gazelle - 0.10.0

Published by jayconrod over 6 years ago

  • The command gazelle update-repos example.com/repo adds a new go_repository rule or updates an existing go_repository rule in WORKSPACE.
  • Gazelle now removes importpath attributes from go_binary and go_test rules, since these are deprecated.
  • go_binary rules can be renamed and still be updated by Gazelle. Only one go_binary per package though. go_library, go_proto_library, and go_repository rules can be renamed as long as the importpath still matches.
  • Rules are now deleted in directories that have no buildable Go or proto source files.
  • New tool: cmd/move_labels updates labels in build files after a directory is moved. This is useful for vendoring repositories that already have build files.
  • Added experimental git_repository and http_archive overlay repository rules. These rules fetch a repository and copy a set of pre-generated build files. All dependencies in @io_bazel_rules_go and @bazel_gazelle now use these rules.
  • Gazelle now follows symlinks that point outside of the workspace (thanks @yasushi-saito!)
bazel-gazelle - 0.9

Published by jayconrod over 6 years ago

  • Added the update-repos command.
    • This can be used to import dependencies from dep's Gopkg.lock file as go_repository rules in WORKSPACE.
    • This should support more vendoring formats in the future.
    • We also plan to be able to add repositories automatically using unresolved import paths.
  • Added the help command.
  • go_grpc_library rules are now migrated to go_proto_library rules with a compilers attribute.
  • The prefix attribute is now optional in the gazelle rule.
  • Strings are never duplicated between generic, OS-specific, architecture-specific, and OS-and-architecture-specific sections in srcs, deps, and other attributes. This fixes an error that Bazel reports when the same dependency appeared to be OS-specific and architecture-specific.
  • Merged rules may now be deleted if they have no attributes that make them buildable (e.g., srcs, deps, embed). Previously, rules couldn't be deleted if they had attributes other than name and visibility. This caused rules to be preserved that only had attributes like proto and importpath.
bazel-gazelle - 0.8

Published by jayconrod almost 7 years ago

This is the first release of Gazelle in its new repository. This matches the Gazelle from rules_go at version 0.8.1, hence the similar version number.