Skip to content
Snippets Groups Projects
Select Git revision
  • fc605a59c0fdc29d21b1a115c206013d9a6a26b3
  • main default protected
  • next
  • renovate/main-ghcr.io-renovatebot-base-image-10.x
  • renovate/main-ghcr.io-containerbase-devcontainer-13.x
  • revert-31645-feat/rename-gradle-wrapper-validation-action
  • renovate/main-redis-5.x
  • fix/36615b-branch-reuse-no-cache
  • chore/punycode
  • fix/36615-branch-reuse-bug
  • refactor/pin-new-value
  • feat/36219--git-x509-signing
  • feat/structured-logger
  • hotfix/39.264.1
  • feat/skip-dangling
  • gh-readonly-queue/next/pr-36034-7a061c4ca1024a19e2c295d773d9642625d1c2be
  • hotfix/39.238.3
  • refactor/gitlab-auto-approve
  • feat/template-strings
  • gh-readonly-queue/next/pr-35654-137d934242c784e0c45d4b957362214f0eade1d7
  • fix/32307-global-extends-merging
  • 41.32.1
  • 41.32.0
  • 41.31.1
  • 41.31.0
  • 41.30.5
  • 41.30.4
  • 41.30.3
  • 41.30.2
  • 41.30.1
  • 41.30.0
  • 41.29.1
  • 41.29.0
  • 41.28.2
  • 41.28.1
  • 41.28.0
  • 41.27.1
  • 41.27.0
  • 41.26.2
  • 41.26.1
  • 41.26.0
41 results

utils.ts

Blame
  • nuget.js 1.67 KiB
    const parse = require('github-url-from-git');
    const got = require('got');
    const xmlParser = require('fast-xml-parser');
    const { isVersion, sortVersions } = require('../versioning/semver');
    
    module.exports = {
      getDependency,
    };
    
    async function getDependency(purl) {
      const { fullname: name } = purl;
      logger.trace(`nuget.getDependency(${name})`);
      const pkgUrl = `https://api.nuget.org/v3-flatcontainer/${name.toLowerCase()}/index.json`;
      try {
        const res = (await got(pkgUrl, {
          json: true,
          retries: 5,
        })).body;
        const dep = {
          name,
        };
        dep.releases = res.versions
          .filter(isVersion)
          .sort(sortVersions)
          .map(version => ({ version }));
        // look up nuspec for latest release to get repository
        const url = `https://api.nuget.org/v3-flatcontainer/${name.toLowerCase()}/${res.versions.pop()}/${name.toLowerCase()}.nuspec`;
        try {
          const result = await got(url);
          const nuspec = xmlParser.parse(result.body, { ignoreAttributes: false });
          if (nuspec) {
            const repositoryUrl = parse(
              nuspec.package.metadata.repository['@_url']
            );
            if (repositoryUrl) {
              dep.repositoryUrl = repositoryUrl;
            }
          }
        } catch (err) /* istanbul ignore next */ {
          logger.debug({ depName: name }, 'Error looking up nuspec');
        }
        logger.trace({ dep }, 'dep');
        return dep;
      } catch (err) {
        if (err.statusCode === 404 || err.code === 'ENOTFOUND') {
          logger.info({ name }, `Dependency lookup failure: not found`);
          logger.debug({
            err,
          });
          return null;
        }
        logger.warn({ err, name }, 'nuget registry failure: Unknown error');
        return null;
      }
    }