Skip to content
Snippets Groups Projects
Select Git revision
  • f145e886a14ee2674614c1708f1814ce2b48779f
  • master default
2 results

maven.js

Blame
  • maven.js 4.02 KiB
    const got = require('got');
    const url = require('url');
    const fs = require('fs-extra');
    const { XmlDocument } = require('xmldoc');
    
    module.exports = {
      getPkgReleases,
    };
    
    // eslint-disable-next-line no-unused-vars
    async function getPkgReleases(purl, config) {
      const versions = [];
      const dependency = getDependencyParts(purl);
      const repositories = getRepositories(purl);
      if (repositories.length < 1) {
        logger.error(`No repositories defined for ${dependency.display}`);
        return null;
      }
      logger.debug(
        `Found ${repositories.length} repositories for ${dependency.display}`
      );
      for (let i = 0; i < repositories.length; i += 1) {
        const repoUrl = repositories[i];
        logger.debug(
          `Looking up ${dependency.display} in repository #${i} - ${repoUrl}`
        );
        const mavenMetadata = await downloadMavenMetadata(dependency, repoUrl);
        if (mavenMetadata) {
          const newVersions = extractVersions(mavenMetadata).filter(
            version => !versions.includes(version)
          );
          versions.push(...newVersions);
          logger.debug(`Found ${newVersions.length} new versions for ${dependency.display} in repository ${repoUrl}`); // prettier-ignore
        }
      }
    
      if (versions.length === 0) {
        logger.warn(`No versions found for ${dependency.display} in ${repositories.length} repositories`); // prettier-ignore
        return null;
      }
      logger.debug(`Found ${versions.length} versions for ${dependency.display}`);
    
      return {
        ...dependency,
        releases: versions.map(v => ({ version: v })),
      };
    }
    
    function getDependencyParts(purl) {
      return {
        display: `${purl.namespace}:${purl.name}`,
        group: purl.namespace,
        name: purl.name,
        dependencyUrl: generateMavenUrl(purl),
      };
    }
    
    function getRepositories(purl) {
      if (!purl.qualifiers || !purl.qualifiers.repository_url) {
        return [];
      }
      return purl.qualifiers.repository_url.split(',').map(repoUrl => {
        if (!repoUrl.endsWith('/')) {
          return repoUrl + '/';
        }
        return repoUrl;
      });
    }
    
    async function downloadMavenMetadata(dependency, repoUrl) {