code: def build_spec(user, repo, sha=None, prov=None, extraMetadata=[]):
      
      loader = grlc.utils.getLoader(user, repo, sha=sha, prov=prov)
  
      files = loader.fetchFiles()
      raw_repo_uri = loader.getRawRepoUri()
  
      # Fetch all .rq files
      items = []
  
      allowed_ext = ["rq", "sparql", "json", "tpf"]
      for c in files:
          glogger.debug('>>>>>>>>>>>>>>>>>>>>>>>>>c_name: {}'.format(c['name']))
          extension = c['name'].split('.')[-1]
          if extension in allowed_ext:
              call_name = c['name'].split('.')[0]
  
              # Retrieve extra metadata from the query decorators
              query_text = loader.getTextFor(c)
  
              item = None
              if extension == "json":
                  query_text = json.loads(query_text)
  
              if extension in ["rq", "sparql", "json"]:
                  glogger.debug("===================================================================")
                  glogger.debug("Processing SPARQL query: {}".format(c['name']))
                  glogger.debug("===================================================================")
                  item = process_sparql_query_text(query_text, loader, call_name, extraMetadata)
              elif "tpf" == extension:
                  glogger.debug("===================================================================")
                  glogger.debug("Processing TPF query: {}".format(c['name']))
                  glogger.debug("===================================================================")
                  item = process_tpf_query_text(query_text, raw_repo_uri, call_name, extraMetadata)
              else:
                  glogger.info("Ignoring unsupported source call name: {}".format(c['name']))
  
              if item:
                  items.append(item)
      return items
docs: Build grlc specification for the given github user / repo.