Skip to content
Snippets Groups Projects
Select Git revision
  • aa7f29127554b63aac08b53cbfe88749fc9b0295
  • main default protected
  • renovate/main-linters
  • 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.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.21.2
  • 41.21.1
  • 41.21.0
  • 41.20.2
  • 41.20.1
  • 41.20.0
  • 41.19.0
  • 41.18.4
  • 41.18.3
  • 41.18.2
41 results

update.ts

Blame
  • decrypt.spec.ts 4.59 KiB
    import { loadFixture } from '../../test/util';
    import { decryptConfig } from './decrypt';
    import { setGlobalConfig } from './global';
    import type { RenovateConfig } from './types';
    
    const privateKey = loadFixture('private.pem', '.');
    
    describe('config/decrypt', () => {
      describe('decryptConfig()', () => {
        let config: RenovateConfig;
        beforeEach(() => {
          config = {};
          setGlobalConfig();
        });
        it('returns empty with no privateKey', () => {
          delete config.encrypted;
          const res = decryptConfig(config);
          expect(res).toMatchObject(config);
        });
        it('warns if no privateKey found', () => {
          config.encrypted = { a: '1' };
          const res = decryptConfig(config);
          expect(res.encrypted).not.toBeDefined();
          expect(res.a).not.toBeDefined();
        });
        it('handles invalid encrypted type', () => {
          config.encrypted = 1;
          setGlobalConfig({ privateKey });
          const res = decryptConfig(config);
          expect(res.encrypted).not.toBeDefined();
        });
        it('handles invalid encrypted value', () => {
          config.encrypted = { a: 1 };
          setGlobalConfig({ privateKey, privateKeyOld: 'invalid-key' });
          expect(() => decryptConfig(config)).toThrow(Error('config-validation'));
        });
        it('replaces npm token placeholder in npmrc', () => {
          setGlobalConfig({ privateKey: 'invalid-key', privateKeyOld: privateKey }); // test old key failover
          config.npmrc =
            '//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n'; // eslint-disable-line no-template-curly-in-string
          config.encrypted = {
            npmToken:
              'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==',
          };
          const res = decryptConfig(config);
          expect(res.encrypted).not.toBeDefined();
          expect(res.npmToken).not.toBeDefined();
          expect(res.npmrc).toEqual(
            '//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n'
          );
        });
        it('appends npm token in npmrc', () => {
          setGlobalConfig({ privateKey });
          config.npmrc = 'foo=bar\n'; // eslint-disable-line no-template-curly-in-string
          config.encrypted = {
            npmToken:
              'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==',
          };
          const res = decryptConfig(config);
          expect(res.encrypted).not.toBeDefined();
          expect(res.npmToken).not.toBeDefined();
          expect(res.npmrc).toMatchSnapshot();
        });
        it('decrypts nested', () => {
          setGlobalConfig({ privateKey });
          config.packageFiles = [
            {
              packageFile: 'package.json',
              devDependencies: {
                encrypted: {
                  branchPrefix:
                    'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==',
                  npmToken:
                    'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==',
                },
              },
            },
            'backend/package.json',
          ];
          const res = decryptConfig(config);
          expect(res.encrypted).not.toBeDefined();
          expect(res.packageFiles[0].devDependencies.encrypted).not.toBeDefined();
          expect(res.packageFiles[0].devDependencies.branchPrefix).toEqual(
            'abcdef-ghijklm-nopqf-stuvwxyz'
          );
          expect(res.packageFiles[0].devDependencies.npmToken).not.toBeDefined();
          expect(res.packageFiles[0].devDependencies.npmrc).toEqual(
            '//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n'
          );
        });
      });
    });