Projects should have a say in their artifact caches

The configuration for artifact caches is currently global on a per user basis.

This means if you build multiple projects for different organizations you would have to use separate config files for each project; when in fact the authors of a given project should have a good idea where an artifact share exists, or which one(s) should be used for a given branch of that buildstream project.

Instead we should reverse this and say:

  • The project advertises it's artifact push and pull URLs
  • The user can decide where to push and pull artifacts from on a per project basis
    • This can be done with a dictionary in the user configuration, so we can override artifact caches on a per project name basis
    • This can be done by adding local configuration to buildstream. We already have workspaces which store data in <project>/.bst/, we could add a key-value store in <project>/.bst/config and have a generic bst config CLI (similar to git), where we could configure the push/pull urls to use on a per checkout basis
    • Similar to the above option, instead of generic configuration we could add custom commands for configuring remotes, seems that a bst remote family of commands would fit naturally with bst push and bst pull

Marking this blocker as it constitutes a CLI api change and I would rather not make our first stable release stuck with this approach.