import { afterEach, describe, expect, test, vi } from 'vitest'; const loadVolumeSpec = async () => { vi.resetModules(); process.env.SPOON_WORKER_TOKEN = 'test-worker-token'; process.env.GITHUB_APP_ID = '123'; process.env.GITHUB_APP_PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----\\ntest\\n-----END PRIVATE KEY-----'; return await import('../../src/runtime/docker'); }; describe('Docker runtime', () => { afterEach(() => { delete process.env.SPOON_AGENT_CONTAINER_RUNTIME; delete process.env.SPOON_AGENT_CONTAINER_VOLUME_OPTIONS; vi.resetModules(); }); test('adds SELinux relabel option for Podman workspace mounts by default', async () => { process.env.SPOON_AGENT_CONTAINER_RUNTIME = 'podman'; const { jobWorkspaceVolumeSpec } = await loadVolumeSpec(); expect(jobWorkspaceVolumeSpec('/tmp/spoon-job')).toBe( '/tmp/spoon-job:/workspace:Z', ); }); test('does not add Podman volume options for Docker by default', async () => { process.env.SPOON_AGENT_CONTAINER_RUNTIME = 'docker'; const { jobWorkspaceVolumeSpec } = await loadVolumeSpec(); expect(jobWorkspaceVolumeSpec('/tmp/spoon-job')).toBe( '/tmp/spoon-job:/workspace', ); }); test('allows explicit workspace mount options', async () => { process.env.SPOON_AGENT_CONTAINER_RUNTIME = 'podman'; process.env.SPOON_AGENT_CONTAINER_VOLUME_OPTIONS = 'z'; const { jobWorkspaceVolumeSpec } = await loadVolumeSpec(); expect(jobWorkspaceVolumeSpec('/tmp/spoon-job')).toBe( '/tmp/spoon-job:/workspace:z', ); }); });