docs: def _artifact_base(self):
          """
          Build the artifact basename
          Builds are base.tar.bz2, info is base.json, shell is base.jsshell.zip...
          """
          if '_artifact_base' not in self._memo:
              for artifact in self._artifacts:
                  if self.re_target.search(artifact['name']) is not None:
                      artifact_base = os.path.splitext(artifact['name'])[0]
                      break
              else:
                  raise FetcherException('Could not find build info in artifacts')
              self._memo['_artifact_base'] = artifact_base
          return self._memo['_artifact_base']