Skip to content
Snippets Groups Projects
Select Git revision
  • 1392955a04b6a18ac70eea9b59f627caaaae3022
  • main default protected
  • feat/gnupg
  • next
  • fix/36615b-branch-reuse-no-cache
  • renovate/main-redis-5.x
  • chore/punycode
  • 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
  • fix/32307-global-extends-merging
  • fix/32307-global-extends-repositories
  • gh-readonly-queue/next/pr-35009-046ebf7cb84ab859f7fefceb5fa53a54ce9736f8
  • gh-readonly-queue/next/pr-35009-9d5e583b7d7251148ab0d11ee8dd38149618d162
  • 41.43.5
  • 41.43.4
  • 41.43.3
  • 41.43.2
  • 41.43.1
  • 41.43.0
  • 41.42.12
  • 41.42.11
  • 41.42.10
  • 41.42.9
  • 41.42.8
  • 41.42.7
  • 41.42.6
  • 41.42.5
  • 41.42.4
  • 41.42.3
  • 41.42.2
  • 41.42.1
  • 41.42.0
  • 41.41.0
41 results

execute-post-upgrade-commands.ts

Blame
  • exec-util.ts 2.36 KiB
    import { exec as _exec } from 'child_process';
    import is from '@sindresorhus/is';
    import traverse from 'traverse';
    import { toUnix } from 'upath';
    import { ExecOptions } from '../lib/util/exec';
    
    type CallOptions = ExecOptions | null | undefined;
    
    export type ExecResult = { stdout: string; stderr: string } | Error;
    
    export type ExecMock = jest.Mock<typeof _exec>;
    export const exec: ExecMock = _exec as any;
    
    interface ExecSnapshot {
      cmd: string;
      options?: ExecOptions | null | undefined;
    }
    
    export type ExecSnapshots = ExecSnapshot[];
    
    export function execSnapshot(cmd: string, options?: CallOptions): ExecSnapshot {
      const snapshot = {
        cmd,
        options,
      };
    
      const cwd = toUnix(process.cwd());
    
      // eslint-disable-next-line array-callback-return
      return traverse(snapshot).map(function fixup(v) {
        if (is.string(v)) {
          const val = v.replace(/\\(\w)/g, '/$1').replace(cwd, '/root/project');
          this.update(val);
        }
      });
    }
    
    const defaultExecResult = { stdout: '', stderr: '' };
    
    export function mockExecAll(
      execFn: ExecMock,
      execResult: ExecResult = defaultExecResult
    ): ExecSnapshots {
      const snapshots: ExecSnapshots = [];
      execFn.mockImplementation((cmd, options, callback) => {
        snapshots.push(execSnapshot(cmd, options));
        if (execResult instanceof Error) {
          throw execResult;
        }
        callback(null, execResult);
        return undefined;
      });
      return snapshots;
    }
    
    export function mockExecSequence(
      execFn: ExecMock,
      execResults: ExecResult[]
    ): ExecSnapshots {
      const snapshots: ExecSnapshots = [];
      execResults.forEach((execResult) => {
        execFn.mockImplementationOnce((cmd, options, callback) => {
          snapshots.push(execSnapshot(cmd, options));
          if (execResult instanceof Error) {
            throw execResult;
          }
          callback(null, execResult);
          return undefined;
        });
      });
      return snapshots;
    }
    
    const basicEnvMock = {
      HTTP_PROXY: 'http://example.com',
      HTTPS_PROXY: 'https://example.com',
      NO_PROXY: 'localhost',
      HOME: '/home/user',
      PATH: '/tmp/path',
      LANG: 'en_US.UTF-8',
      LC_ALL: 'en_US',
    };
    
    const fullEnvMock = {
      ...basicEnvMock,
      SELECTED_ENV_VAR: 'Can be selected',
      FILTERED_ENV_VAR: 'Should be filtered',
    };
    
    const filteredEnvMock = {
      ...basicEnvMock,
      SELECTED_ENV_VAR: fullEnvMock.SELECTED_ENV_VAR,
    };
    
    export const envMock = {
      basic: basicEnvMock,
      full: fullEnvMock,
      filtered: filteredEnvMock,
    };