# Bazel settings that apply to this repository.
# Take care to document any settings that you expect users to apply.
# Settings that apply only to CI are in .github/workflows/ci.bazelrc.

# Allow the Bazel server to check directory sources for changes.
# Avoids warning spam with rules_nodejs feature that models node_modules as directories.
# See https://github.com/bazelbuild/rules_nodejs/releases/tag/3.6.0.
startup --host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1

# In general, the rules in this repository assume that runfiles
# are enabled as we do not support no runfiles case.
#
# If you are developing on Windows, you must either run bazel
# with administrator privileges or enable developer mode. If
# you do not you may hit this error on Windows:
#
#   Bazel needs to create symlinks to build the runfiles tree.
#   Creating symlinks on Windows requires one of the following:
#       1. Bazel is run with administrator privileges.
#       2. The system version is Windows 10 Creators Update (1703) or later
#          and developer mode is enabled.
build --enable_runfiles

common --enable_platform_specific_config

# For testing our --stamp behavior.
# Normally users would use a --workspace_status_command with a script that calls `git describe`.
build --embed_label=v1.2.3

# Turn off legacy external runfiles on all platforms except Windows.
# This allows our users to turn on this flag as well, which is a performance win.
# Skylib's diff_test implementation for Windows depends on legacy external
# runfiles so we cannot disable it fully.
build:linux --nolegacy_external_runfiles
build:macos --nolegacy_external_runfiles
build:freebsd --nolegacy_external_runfiles
build:openbsd --nolegacy_external_runfiles

# Print error messages on test failure.
test --test_output=errors
# Remind us to set quick tests to short
test --test_verbose_timeout_warnings

# Load any settings specific to the current user.
# .bazelrc.user should appear in .gitignore so that settings are not shared with team members.
# This needs to be last statement in this config, as the user configuration should be able to
# overwrite flags from this file.
# See https://docs.bazel.build/versions/master/best-practices.html#bazelrc.
# Note that we use .bazelrc.user so the file appears next to .bazelrc in directory listing,
# rather than user.bazelrc as suggested in the Bazel docs.
try-import %workspace%/.bazelrc.user
