Skip to content
Snippets Groups Projects
Select Git revision
  • 0d23707604ab05404c67da7c74120cfbe80327db
  • main default protected
  • renovate/main-ghcr.io-renovatebot-base-image-11.x
  • chore/maintainers-rarkins
  • refactor/pin-new-value
  • fix/user-agent
  • feat/37517-base64-private-key
  • next
  • feat/gnupg
  • fix/36615b-branch-reuse-no-cache
  • chore/punycode
  • 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.81.5
  • 41.81.4
  • 41.81.3
  • 41.81.2
  • 41.81.1
  • 41.81.0
  • 41.80.0
  • 41.79.0
  • 41.78.1
  • 41.78.0
  • 41.77.0
  • 41.76.1
  • 41.76.0
  • 41.75.0
  • 41.74.5
  • 41.74.4
  • 41.74.3
  • 41.74.2
  • 41.74.1
  • 41.74.0
41 results

private-key.ts

Blame
  • index.ts 2.08 KiB
    import simpleGit from 'simple-git/promise';
    import * as semver from '../../versioning/semver';
    import { logger } from '../../logger';
    import { ReleaseResult, GetReleasesConfig } from '../common';
    
    export const id = 'git-refs';
    
    const cacheMinutes = 10;
    
    // git will prompt for known hosts or passwords, unless we activate BatchMode
    process.env.GIT_SSH_COMMAND = 'ssh -o BatchMode=yes';
    
    export interface RawRefs {
      type: string;
      value: string;
    }
    
    export async function getRawRefs({
      lookupName,
    }: GetReleasesConfig): Promise<RawRefs[] | null> {
      const git = simpleGit();
      try {
        const cacheNamespace = 'git-raw-refs';
    
        const cachedResult = await renovateCache.get<RawRefs[]>(
          cacheNamespace,
          lookupName
        );
        /* istanbul ignore next line */
        if (cachedResult) {
          return cachedResult;
        }
    
        // fetch remote tags
        const lsRemote = await git.listRemote([lookupName, '--sort=-v:refname']);
    
        if (!lsRemote) {
          return null;
        }
    
        const refs = lsRemote.replace(/^.+?refs\//gm, '').split('\n');
    
        const result = refs.map(ref => ({
          type: /(.*?)\//.exec(ref)[1],
          value: /\/(.*)/.exec(ref)[1],
        }));
    
        await renovateCache.set(cacheNamespace, lookupName, result, cacheMinutes);
        return result;
      } catch (err) {
        logger.debug({ err }, `Git-Raw-Refs lookup error in ${lookupName}`);
      }
      return null;
    }
    
    export async function getPkgReleases({
      lookupName,
    }: GetReleasesConfig): Promise<ReleaseResult | null> {
      try {
        const rawRefs: RawRefs[] = await getRawRefs({ lookupName });
    
        const refs = rawRefs
          .filter(ref => ref.type === 'tags' || ref.type === 'heads')
          .map(ref => ref.value)
          .filter(ref => semver.isVersion(ref));
    
        const uniqueRefs = [...new Set(refs)];
    
        const sourceUrl = lookupName.replace(/\.git$/, '').replace(/\/$/, '');
    
        const result: ReleaseResult = {
          sourceUrl,
          releases: uniqueRefs.map(ref => ({
            version: ref,
            gitRef: ref,
          })),
        };
    
        return result;
      } catch (err) {
        logger.debug({ err }, `Git-Refs lookup error in ${lookupName}`);
      }
      return null;
    }