# Default BuildStream user configuration.

#
#    Work Directories
#
#
# Note that BuildStream forces the XDG Base Directory names
# into the environment if they are not already set, and allows
# expansion of '~' and environment variables when specifying
# paths.
#

# Location to store sources
sourcedir: ${XDG_CACHE_HOME}/buildstream/sources

# Location to perform builds
builddir: ${XDG_CACHE_HOME}/buildstream/build

# Location to store local binary artifacts
artifactdir: ${XDG_CACHE_HOME}/buildstream/artifacts

# Location to store build logs
logdir: ${XDG_CACHE_HOME}/buildstream/logs

# Default root location for workspaces, blank for no default set.
workspacedir: .

#
#    Cache
#
cache:
  # Size of the artifact cache in bytes - BuildStream will attempt to keep the
  # artifact cache within this size.
  # If the value is suffixed with K, M, G or T, the specified memory size is
  # parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base
  # 1024), respectively.
  # Alternatively, a percentage value may be specified, which is taken relative
  # to the isize of the file system containing the cache.
  quota: infinity

  # Whether to pull build trees when downloading element artifacts
  pull-buildtrees: False

#
#    Scheduler
#
scheduler:

  # Maximum number of simultaneous downloading tasks.
  fetchers: 10

  # Maximum number of simultaneous build tasks.
  builders: 4

  # Maximum number of simultaneous uploading tasks.
  pushers: 4

  # Maximum number of retries for network tasks.
  network-retries: 2

  # What to do when an element fails, if not running in
  # interactive mode:
  #
  #  continue  - Continue queueing jobs as much as possible
  #  quit      - Exit after all ongoing jobs complete
  #  terminate - Terminate any ongoing jobs and exit
  #
  on-error: quit


#
#    Logging
#
logging:

  # The abbreviated cache key length to display in the UI
  key-length: 8

  # Whether to show extra detailed messages
  verbose: True

  # Maximum number of lines to print from the
  # end of a failing build log
  error-lines: 20

  # Maximum number of lines to print in a detailed
  # message on the console or in the master log (the full
  # messages are always recorded in the individual build
  # logs)
  message-lines: 20

  # Whether to enable debugging messages
  debug: False

  # Format string for printing the pipeline at startup, this
  # also determines the default display format for `bst show`
  element-format: |

    %{state: >12} %{full-key} %{name} %{workspace-dirs}

  # Format string for all log messages.
  message-format: |

    [%{elapsed}][%{key}][%{element}] %{action} %{message}

#
#    Prompt overrides
#
# Here you can suppress 'are you sure?' and other kinds of prompts by supplying
# override values. Note that e.g. 'yes' and 'no' have the same meaning here as
# they do in the actual cli prompt.
#
prompt:

  # Whether to create a project with 'bst init' if we are invoked outside of a
  # directory where we can resolve the project.
  #
  #  ask - Prompt the user to choose.
  #  no  - Never create the project.
  #
  auto-init: ask

  # Whether to really proceed with 'bst workspace close --remove-dir' removing
  # a workspace directory, potentially losing changes.
  #
  #  ask - Ask the user if they are sure.
  #  yes - Always remove, without asking.
  #
  really-workspace-close-remove-dir: ask

  # Whether to really proceed with 'bst workspace close' when doing so would
  # stop them from running bst commands in this workspace.
  #
  #  ask - Ask the user if they are sure.
  #  yes - Always close, without asking.
  #
  really-workspace-close-project-inaccessible: ask

  # Whether to really proceed with 'bst workspace reset' doing a hard reset of
  # a workspace, potentially losing changes.
  #
  #  ask - Ask the user if they are sure.
  #  yes - Always hard reset, without asking.
  #
  really-workspace-reset-hard: ask
