Skip to content
Snippets Groups Projects
Select Git revision
  • dd5a13e07816aac12caa68ba70f833289237b7e7
  • master default
  • rtde
  • tmp-gpg-key-workaround-2
  • tmp-gpg-key-workaround
  • 68-git-lfs-error-in-ddeploy-job
  • split-build-and-test
  • 66-jazzy-support
  • 62-deploy-jobs-do-not-pull-files-from-lfs-manual-lfs-pull
  • 62-deploy-jobs-do-not-pull-files-from-lfs-custom-docker-image
  • py3-without-industrial-ci-test
  • 58-add-yolo-pip-package-support
  • 55-collision-between-test-jobs-due-to-dds-autodiscovery-ros2
  • 52-ddeploy-job-failing-when-enforcing-labels-alt-quick-dind-test
  • 48-python3_syntax
  • 46-default-docker-image-name-too-long
  • 45-double-pipeline-triggered-if-merge-request-has-melodic-branch-name
  • 40-repo-is-ros-testing
  • test-badges
  • test-lfs-concept
  • add-packages
21 results

pre-deploy-cleanup.bash

Blame
  • github.js 2.48 KiB
    const ghGot = require('../platform/github/gh-got-wrapper');
    const versioning = require('../versioning');
    
    module.exports = {
      getPreset,
      getPkgReleases,
    };
    
    const map = new Map();
    
    async function getPreset(pkgName, presetName = 'default') {
      if (presetName !== 'default') {
        throw new Error(
          { pkgName, presetName },
          'Sub-preset names are not supported with GitHub datasource'
        );
      }
      let res;
      try {
        const url = `repos/${pkgName}/contents/renovate.json`;
        res = Buffer.from((await ghGot(url)).body.content, 'base64').toString();
      } catch (err) {
        logger.debug('Failed to retrieve renovate.json from repo');
        throw new Error('dep not found');
      }
      try {
        return JSON.parse(res);
      } catch (err) {
        logger.debug('Failed to parse renovate.json');
        throw new Error('invalid preset JSON');
      }
    }
    
    const cacheNamespace = 'datasource-github';
    function getCacheKey(repo, type) {
      return `${repo}:${type}`;
    }
    
    async function getPkgReleases(purl, config) {
      const { versionScheme } = config || {};
      const { fullname: repo, qualifiers: options } = purl;
      options.ref = options.ref || 'tags';
      let versions;
      const cachedResult = await renovateCache.get(
        cacheNamespace,
        getCacheKey(repo, options.ref)
      );
      if (cachedResult) {
        return cachedResult;
      }
      try {
        if (options.ref === 'release') {
          const url = `repos/${repo}/releases?per_page=100`;
          versions = (await ghGot(url, { paginate: true })).body.map(
            o => o.tag_name
          );
        } else {
          // tag
          const url = `repos/${repo}/tags?per_page=100`;
          versions = (await ghGot(url, {
            cache: process.env.RENOVATE_SKIP_CACHE ? undefined : map,
            paginate: true,
          })).body.map(o => o.name);
        }
      } catch (err) {
        logger.info(
          { repo, err, message: err.message },
          'Error retrieving from github'
        );
      }
      if (!versions) {
        return null;
      }
      // Filter by semver if no versionScheme provided
      const { isVersion, sortVersions } = versioning(versionScheme);
      // Return a sorted list of valid Versions
      versions = versions.filter(isVersion).sort(sortVersions);
      const dependency = {
        repositoryUrl: 'https://github.com/' + repo,
      };
      dependency.releases = versions.map(version => ({
        version: options.sanitize === 'true' ? isVersion(version) : version,
        gitRef: version,
      }));
      const cacheMinutes = 10;
      await renovateCache.set(
        cacheNamespace,
        getCacheKey(repo, options.ref),
        dependency,
        cacheMinutes
      );
      return dependency;
    }