Bob 0.13 Release Notes¶
Changes made since Bob 0.12.0 include the following.
bob graph - highlevel command for dependency graphs¶
bob graph can be used to make package dependencies visible. For now
graphviz (dot) graphs and d3 graphs are available, where d3 is the
default. D3 graphs are interactive (zoom, drag, clickable, with hover effects)
Query language for package selection
Packages can be selected through a query language starting with Bob 0.13. The language loosely resembles XPath. Almost all Bob commands (except
bob project) have been converted to the new syntax. See bobpaths for more information.
Introduce policies in
Introduce a policy scheme where backwards compatibility can be maintained. Unless a matching version is required by bobMinimumVersion the policies will retain their “old” state to keep backwards compatibility for existing projects.
If a policy was neither set implicitly by bobMinimumVersion nor by an explicit policies entry in config.yaml Bob will warn the user if the policy is used. Typically the user should forward
bobMinimumVersionand set an explicit behaviour.
See Policies for more information.
Introduce system wide / user Bob configuration
Beside the existing project specific
default.yamlthis enables parsing of a system wide
/etc/bobdefault.yaml) as well as a user wide
$XDG_CONFIG_HOMEis not set
Parse order is from system-wide to workspace, meaning you can override settings from the system wide
default.yamlin your user default’s and this can be overridden in the workspace
git: add remotes property to gitSCM
remote-*property allows adding extra remotes whereas the part after
remote-corresponds to the remote name and the value given corresponds to the remote URL. For example
some/url.gitwill result in an additional remote named
my_nameand the URL set to
In conjunction with scmOverrides this can provide a convenient development option to automatically add remotes to private repositories.
Bob build / bob dev¶
Added command configuration section in
default.yamlto override Bob’s default build arguments.
Add option (
--no-log) to disable logfile generation
Many tools like
gitdetect whether they are running on a tty to colorize there output. If Bob writes a logfile a pipe is used and these tools do no longer provide a colored output. With the new
--no-logoption it’s possible to switch of logfile generation and get colored output back.
Create symlinks to dependencies next to workspace
This adds a
depsdirectory next to the workspace that will hold symlinks to all dependencies. The links are sorted by category:
- If a sandbox is used the symlink will be called “sandbox”
- All tools are linked by their tool name in the “tools” directory
- Arguments (i.e. classic dependencies) are linked with their position and name in the “args” directory.
This allows a quick traversal of the dependency tree after the build.
Add option to build provided deps
--with-providedto build provided dependencies and
--without-providedto suppress building of provided dependencies (see provideDeps). In combination with
--with-providedis default, otherwise
--without-providedis default. Together with the new path query syntax one has now quite complete control over what will land within the destination folder.
Pre- and post-scripts
Add two optional hooks to
default.yamlet.al. that can be run before (preBuildHook) and after (postBuildHook) the build. The preBuildHook receives the packages that should be built. It will fail the build if it returns with a non-zero status. The postBuildHook will get the status (success/fail) and the paths to the results as arguments.
An example script for a postBuildHook can be found in
If the desired is artifact is available it is downloaded, otherwise all dependencies have to be downloaded.
- QtCreator projects learned options to add include directories (
-S) and compile definitions (
-C) to a project.
Add option (
-d) to print package instead of contents
The query syntax allows to select many packages with a single line. The new
-doption allows to see the result set directly instead of the dependencies of these packages.
Sets the “Ignore post-commit hooks” option on all jobs. This instructs Jenkins to ignore changes notified by SCM post-commit hooks if enabled.
Backwards compatible policies¶
Bob will retain the old behavior unless instructed otherwise. See Policies for more information.
default.yamlincludes relative to including yaml file. See relativeIncludes policy.
Do not take white listed variables into initial environment
Previously the current set of environment variables during package calculation started with the ones named by
default.yaml. This made these variables bound to the value that was set during package calculation. Especially on Jenkins setups this is wrong as the machine that configures the Jenkins may have a different OS environment than the Jenkins executors/slaves.
See cleanEnvironment policy for more details.
Other behavioural changes¶
Add “live-build-id” support
Previously binary artifacts required that all involved sources are checked out first. This adds quite a bit of space and time overhead if most of the artifacts are available or if they are updated only sporadically. Now Bob can query git servers and try to download an artifact before any sources are checked out.
While this can speed up initial builds considerably it comes at the price that the sources are sometimes not checked out at all. Bob
devlearned the new
--always-checkoutoption that accepts a regex for package names whose sources are always checked out. See bob-dev for mroe information.
Jenkins: ‘discard builds’ deactivated for ‘roots’
Previously all Jenkins jobs artifacts were discarded if a non-root package is configured as Jenkins root. With this commit the configured roots will keep their artifacts.
git: prune stale remote tracking branches
Always prune stale remote branches. Otherwise branch renames in git repositories may cause jobs to fail.
cvs: prune empty directories on initial checkout
cvs codoes not have a
cvs uphas. That option removes empty (=deleted) directories. We therefore use a
cvs upafter the initial
cvs co, to get the same behaviour for the initial and subsequent builds.
cvs cowould have created these empty directories, causing Bob to invoke the build step even if nothing changed in the repository between initial and subsequent checkout.