Skip to content
Snippets Groups Projects
Select Git revision
  • 4665dbff6fe96c4aa2665d95022284c60be3f320
  • main default protected
  • renovate/main-zod-3.x
  • renovate/main-ghcr.io-renovatebot-base-image-10.x
  • renovate/main-ghcr.io-containerbase-devcontainer-13.x
  • next
  • 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
  • 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.25.1
  • 41.25.0
  • 41.24.0
  • 41.23.5
  • 41.23.4
  • 41.23.3
  • 41.23.2
  • 41.23.1
  • 41.23.0
  • 41.22.0
  • 41.21.4
  • 41.21.3
41 results

index.ts

Blame
  • error.ts 7.25 KiB
    import type { RenovateConfig } from '../../config/types';
    
    import {
      CONFIG_SECRETS_EXPOSED,
      CONFIG_VALIDATION,
      EXTERNAL_HOST_ERROR,
      MANAGER_LOCKFILE_ERROR,
      NO_VULNERABILITY_ALERTS,
      PLATFORM_AUTHENTICATION_ERROR,
      PLATFORM_BAD_CREDENTIALS,
      PLATFORM_INTEGRATION_UNAUTHORIZED,
      PLATFORM_RATE_LIMIT_EXCEEDED,
      REPOSITORY_ACCESS_FORBIDDEN,
      REPOSITORY_ARCHIVED,
      REPOSITORY_BLOCKED,
      REPOSITORY_CANNOT_FORK,
      REPOSITORY_CHANGED,
      REPOSITORY_CLOSED_ONBOARDING,
      REPOSITORY_DISABLED,
      REPOSITORY_DISABLED_BY_CONFIG,
      REPOSITORY_EMPTY,
      REPOSITORY_FORKED,
      REPOSITORY_MIRRORED,
      REPOSITORY_NOT_FOUND,
      REPOSITORY_NO_CONFIG,
      REPOSITORY_NO_PACKAGE_FILES,
      REPOSITORY_RENAMED,
      REPOSITORY_UNINITIATED,
      SYSTEM_INSUFFICIENT_DISK_SPACE,
      SYSTEM_INSUFFICIENT_MEMORY,
      TEMPORARY_ERROR,
      UNKNOWN_ERROR,
    } from '../../constants/error-messages';
    import { logger } from '../../logger';
    import { ExternalHostError } from '../../types/errors/external-host-error';
    import { raiseConfigWarningIssue } from './error-config';
    
    export default async function handleError(
      config: RenovateConfig,
      err: Error
    ): Promise<string> {
      if (err.message === REPOSITORY_UNINITIATED) {
        logger.info('Repository is uninitiated - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === REPOSITORY_EMPTY) {
        logger.info('Repository is empty - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      const disabledMessages = [
        REPOSITORY_CLOSED_ONBOARDING,
        REPOSITORY_DISABLED,
        REPOSITORY_DISABLED_BY_CONFIG,
        REPOSITORY_NO_CONFIG,
      ];
      if (disabledMessages.includes(err.message)) {
        logger.info('Repository is disabled - skipping');
        return err.message;
      }
      if (err.message === REPOSITORY_ARCHIVED) {
        logger.info('Repository is archived - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === REPOSITORY_MIRRORED) {
        logger.info('Repository is a mirror - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === REPOSITORY_RENAMED) {
        logger.info('Repository has been renamed - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === REPOSITORY_BLOCKED) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.info('Repository is blocked - skipping');
        return err.message;
      }
      if (err.message === REPOSITORY_ACCESS_FORBIDDEN) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.info('Repository is forbidden');
        return err.message;
      }
      if (err.message === REPOSITORY_NOT_FOUND) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.error('Repository is not found');
        return err.message;
      }
      if (err.message === REPOSITORY_FORKED) {
        logger.info('Repository is a fork and not manually configured - skipping');
        return err.message;
      }
      if (err.message === REPOSITORY_CANNOT_FORK) {
        logger.info('Cannot fork repository - skipping');
        return err.message;
      }
      if (err.message === REPOSITORY_NO_PACKAGE_FILES) {
        logger.info('Repository has no package files - skipping');
        return err.message;
      }
      if (err.message === NO_VULNERABILITY_ALERTS) {
        logger.info('Repository has no vulnerability alerts - skipping');
        return err.message;
      }
      if (err.message === REPOSITORY_CHANGED) {
        logger.info('Repository has changed during renovation - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === CONFIG_VALIDATION) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.info({ error: err }, 'Repository has invalid config');
        await raiseConfigWarningIssue(config, err);
        return err.message;
      }
      if (err.message === CONFIG_SECRETS_EXPOSED) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.warn(
          { error: err },
          'Repository aborted due to potential secrets exposure'
        );
        return err.message;
      }
      if (err instanceof ExternalHostError) {
        logger.warn(
          { hostType: err.hostType, lookupName: err.lookupName, err: err.err },
          'Host error'
        );
        logger.info('External host error causing abort - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (
        err.message.includes('No space left on device') ||
        err.message === SYSTEM_INSUFFICIENT_DISK_SPACE
      ) {
        logger.error('Disk space error - skipping');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {
        logger.warn('Rate limit exceeded - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === SYSTEM_INSUFFICIENT_MEMORY) {
        logger.warn('Insufficient memory - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === PLATFORM_BAD_CREDENTIALS) {
        logger.warn('Bad credentials - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) {
        logger.warn('Integration unauthorized - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === PLATFORM_AUTHENTICATION_ERROR) {
        logger.warn('Authentication error - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === TEMPORARY_ERROR) {
        logger.info('Temporary error - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message === MANAGER_LOCKFILE_ERROR) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        logger.info('Lock file error - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        return err.message;
      }
      if (err.message.includes('The requested URL returned error: 5')) {
        logger.warn({ err }, 'Git error - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        // rewrite this error
        return EXTERNAL_HOST_ERROR;
      }
      if (
        err.message.includes('remote end hung up unexpectedly') ||
        err.message.includes('access denied or repository not exported')
      ) {
        logger.warn({ err }, 'Git error - aborting');
        delete config.branchList; // eslint-disable-line no-param-reassign
        // rewrite this error
        return EXTERNAL_HOST_ERROR;
      }
      if (err.message.includes('fatal: not a git repository')) {
        delete config.branchList; // eslint-disable-line no-param-reassign
        return TEMPORARY_ERROR;
      }
      // Swallow this error so that other repositories can be processed
      logger.error({ err }, `Repository has unknown error`);
      // delete branchList to avoid cleaning up branches
      delete config.branchList; // eslint-disable-line no-param-reassign
      // eslint-disable-next-line no-undef
      return UNKNOWN_ERROR;
    }