Skip to content

[Duplicate Code] Extract shared default dependency scaffold from identity managers #8892

Description

@github-actions

Duplicate Code Opportunity

Summary

  • Pattern: The defaultDependencies / dependency-injection scaffold is repeated across the Cloud Hypervisor and NVX VMM identity managers.
  • Locations: src/cloud-hypervisor/vmm-identity.ts:57-84 and src/nvx/runtime-lifecycle.ts:103-130.
  • Impact: ~24 duplicated lines; reduces maintenance burden for shared fs/process helper wiring and keeps the two identity managers aligned.

Evidence

// src/cloud-hypervisor/vmm-identity.ts:57-84
const defaultDependencies: CloudHypervisorVmmIdentityDependencies = {
  mkdir: fs.mkdir,
  writeFile: fs.writeFile,
  readFile: fs.readFile,
  rm: fs.rm,
  rmdir: fs.rmdir,
  lstat: fs.lstat,
  run: async (command, args) => {
    const result = await execa(command, [...args], {
      reject: false,
      stdio: ['ignore', 'pipe', 'pipe'],
      env: { PATH: '/usr/sbin:/usr/bin:/sbin:/bin' },
      extendEnv: false,
    });
    if (result.exitCode !== 0) {
      throw new Error(
        `${command} ${args.join(' ')} exited with code ${result.exitCode}: ` +
        `${result.stderr.trim() || result.stdout.trim()}`,
      );
    }
    return { stdout: result.stdout, stderr: result.stderr };
  },
  sleep: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)),
  pid: process.pid,
  processStartTime: readProcessStartTime,
};
// src/nvx/runtime-lifecycle.ts:103-130
const defaultDependencies: NvxRuntimeLifecycleDependencies = {
  mkdir: fs.mkdir,
  writeFile: fs.writeFile,
  readFile: fs.readFile,
  rm: fs.rm,
  rename: fs.rename,
  rmdir: fs.rmdir,
  lstat: fs.lstat,
  run: async (command, args) => {
    const result = await execa(command, [...args], {
      reject: false,
      stdio: ['ignore', 'pipe', 'pipe'],
      env: { PATH: '/usr/sbin:/usr/bin:/sbin:/bin' },
      extendEnv: false,
    });
    if (result.exitCode !== 0) {
      throw new Error(
        `${command} ${args.join(' ')} exited with code ${result.exitCode}: ` +
        `${result.stderr.trim() || result.stdout.trim()}`,
      );
    }
    return { stdout: result.stdout, stderr: result.stderr };
  },
  sleep: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)),
  pid: process.pid,
  processStartTime: readProcessStartTime,
};

Suggested Refactoring

  • Extract a shared helper such as createDefaultIdentityDependencies() in a common module.
  • Keep the small per-manager differences explicit by layering only the extra rename dependency for NVX on top of the shared base object.

Affected Files

  • src/cloud-hypervisor/vmm-identity.ts — lines 57-84
  • src/nvx/runtime-lifecycle.ts — lines 103-130

Effort Estimate

Low


Detected by Duplicate Code Detector workflow. Run date: 2026-09-22

Generated by Duplicate Code Detector · copilot · gpt50mini · 5.91 AIC · ⊞ 21K · ◷

  • expires on Oct 22, 2026, 9:44 PM UTC

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions