refactor build fetcher out into a separate smart package