Skip to content
Snippets Groups Projects
Select Git revision
  • f9d5f57f496538ade8117b520adbe27bec404f59
  • master default protected
  • gh-pages
  • dependabot/npm_and_yarn/eslint-plugin-jsdoc-51.0.3
  • dependabot/npm_and_yarn/nock-14.0.5
  • dependabot/npm_and_yarn/react-19.1.0
  • dependabot/npm_and_yarn/react-dom-19.1.0
  • server-2025-02-01-6100669a
  • server-2024-11-01-87cba042
  • server-2024-10-01-6875b7c8
  • dependabot/npm_and_yarn/path-to-regexp-8.2.0
  • server-2024-09-01-3d52575c
  • daily-tests-gha2
  • daily-tests-gha
  • server-2023-12-01-92d8fb8e
  • server-2023-11-01-a80c93fd
  • server-2023-10-01-31096085
  • coc-v2
  • server-2023-09-01-8edc3810
  • server-2023-08-01-75858a03
  • server-2023-07-01-02183d8d
  • server-2025-07-01
  • 5.0.2
  • 5.0.1
  • 5.0.0
  • server-2025-06-01
  • server-2025-05-01
  • server-2025-04-03
  • server-2025-03-02
  • server-2025-03-01
  • server-2025-02-02
  • server-2025-01-01
  • server-2024-12-01
  • server-2024-11-02
  • 4.1.0
  • server-2024-09-25
  • server-2024-09-02
  • server-2024-08-01
  • server-2024-07-01
  • 4.0.0
  • server-2024-06-01
41 results

prometheus-metrics.spec.js

Blame
  • validate.js 3.49 KiB
    const { migrateAndValidate } = require('../../config/migrate-validate');
    
    async function getRenovatePrs(branchPrefix) {
      return (await platform.getPrList())
        .filter(pr => pr.state === 'open')
        .filter(pr => pr.branchName && !pr.branchName.startsWith(branchPrefix))
        .filter(pr => pr.title && pr.title.match(/renovate/i));
    }
    
    async function getRenovateFiles(prNo) {
      const configFileNames = [
        'package.json',
        'renovate.json',
        '.renovaterc',
        '.renovaterc.json',
      ];
      return (await platform.getPrFiles(prNo)).filter(file =>
        configFileNames.includes(file)
      );
    }
    
    async function validatePrs(config) {
      logger.setMeta({ repository: config.repository });
      logger.debug({ branchPrefix: config.branchPrefix }, 'branchPrefix');
      const renovatePrs = await getRenovatePrs(config.branchPrefix);
      logger.debug({ renovatePrs }, `Found ${renovatePrs.length} Renovate PRs`);
      let validations = [];
      for (const pr of renovatePrs) {
        try {
          const renovateFiles = await getRenovateFiles(pr.number);
          if (!renovateFiles.length) {
            continue; // eslint-disable-line no-continue
          }
          logger.info(
            { prNo: pr.number, title: pr.title, renovateFiles },
            'PR has renovate files'
          );
          for (const file of renovateFiles) {
            const content = await platform.getFile(file, pr.branchName);
            let parsed;
            try {
              parsed = JSON.parse(content);
            } catch (err) {
              validations.push({
                file,
                message: 'Invalid JSON',
              });
            }
            if (parsed) {
              const toValidate =
                file === 'package.json'
                  ? parsed.renovate || parsed['renovate-config']
                  : parsed;
              if (toValidate) {
                logger.debug({ config: toValidate }, 'Validating config');
                const { errors } = migrateAndValidate(config, toValidate);
                if (errors && errors.length) {
                  validations = validations.concat(
                    errors.map(error => ({
                      file,
                      message: error.message,
                    }))
                  );
                }
              }
            }
          }
          // if the PR has renovate files then we set a status no matter what
          let status;
          let description;
          const subject = 'Renovate Configuration Errors';
          if (validations.length) {
            const content = validations
              .map(v => `\`${v.file}\`: ${v.message}`)
              .join('\n\n');
            await platform.ensureComment(pr.number, subject, content);
            status = 'failure';
            description = 'Renovate config validation failed'; // GitHub limit
          } else {
            description = 'Renovate config is valid';
            status = 'success';
            await platform.ensureCommentRemoval(pr.number, subject);
          }
          // istanbul ignore else
          if (pr.sourceRepo === config.repository) {
            logger.info({ status, description }, 'Setting PR validation status');
            const context = 'renovate/validate';
            await platform.setBranchStatus(
              pr.branchName,
              context,
              description,
              status
            );
          } else {
            logger.debug('Skipping branch status for forked PR');
          }
        } catch (err) {
          logger.warn(
            {
              err,
              message: err.message,
              body: err.response ? err.response.body : undefined,
              prNo: pr.number,
              branchName: pr.branchName,
            },
            'Error checking PR'
          );
        }
      }
    }
    
    module.exports = {
      validatePrs,
    };