Habitat Studio Artifact Caching

Habitat’s Studio now supports artifact caching across Studios!


This change adds a new capability to the Studio software which allows the downloaded Habitat artifacts (i.e. *.hart files) to be shared between different Studio instances or the between setup and tear downs of the same Studio instance. The sharing is accomplished by mounting in a common artifact cache directory into each Studio so that all artifact downloads get combined into one location for the benefit of all instances.

For non-root users using Linux and for Windows and Mac users, a directory of $HOME/.hab/cache/artifacts will now be created and mounted into the Studio’s artifact cache directory which is always at /hab/cache/artifacts. For a root user using Linux, the host’s system /hab/cache/artifacts directory will be mounted into the Studio–the assumption we make in Habitat is that the root user would have their own home directory configuration that is different from the system’s.

The net effect of this change is that users of the Studio should see a substantial reduction in bandwidth usage when building software. A couple of things to note however:

  • The install logic will still (as before) check Builder to ensure that we still have the latest artifact cached. If a newer artifact exists in Builder, it will still be downloaded. Therefore, as of this feature, you will still need internet access when running Studio builds. Any potential future “offline” feature would require this caching as a prerequisite which is why it has been implemented first.
  • While an artifact may be pre-cached, the Studio code still needs to install it into the Studio instance, meaning that on-disk extraction and artifact verification is still being performed every time (as before).
  • While the benefits of saving on re-downloads is great, we introduce a new resource issue for users to keep an eye on: the size of their ~/.hab/cache/artifacts directory.


Studio Usage Additions

The following new flags and options are added to the hab-studio program which gets called directly on Linux when using hab studio or hab pkg build calls:

  • -N Do not mount the source artifact cache path into the Studio (default: mount the path).
  • -a Sets the source artifact cache path (default: /hab/cache/artifacts). For non-root users the default will be $HOME/.hab/cache/artifacts.

As well, and to match the patterns already established in the Studio codebase, the following Studio-only environment variables are added:

  • ARTIFACT_PATH – Sets the source artifact cache path (`-a’ option overrides). This is named to line up with the SRC_PATH environment variable already in use.
  • NO_ARTIFACT_PATH – If set, do not mount the source artifact cache path (`-N’ flag overrides).

Want to know more? You can check out the PR & read the code here!

Posted in:

Fletcher Nichol

Fletcher Nichol is a software developer from Edmonton, Canada who has worked in jobs ranging from systems administrator to web application developer. He enjoys playing the drums and taking walks on warm summer days with an audiobook in his ears. He is active in many automation and testing projects such as Chef and Docker and is the lead developer of Test Kitchen.