# PSProxmoxVE development and integration testing container # # Two targets: # dev - .NET SDK + PowerShell + Pester (build & test, works on ARM/x86) # dev-infra - Adds Terraform + PVE provisioning tools (x86 only) # # Usage: # # For build + test (works on Mac M-series): # docker compose -f tests/docker-compose.test.yml up -d # # # For full CI flow including provisioning (x86 only): # docker compose -f tests/docker-compose.test.yml --profile infra up -d # ── Base: .NET SDK + PowerShell + Pester ──────────────────────────── FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS dev ENV DEBIAN_FRONTEND=noninteractive # Install base packages RUN apt-get update && apt-get install -y --no-install-recommends \ curl jq openssh-client ca-certificates apt-transport-https gnupg \ && rm -rf /var/lib/apt/lists/* # Install PowerShell: APT package on amd64, dotnet global tool on arm64. # The Microsoft APT repo does not publish arm64 packages for PowerShell. RUN if [ "$(dpkg --print-architecture)" = "amd64" ]; then \ curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \ | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg \ && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] \ https://packages.microsoft.com/ubuntu/24.04/prod noble main" \ > /etc/apt/sources.list.d/microsoft-prod.list \ && apt-get update && apt-get install -y --no-install-recommends powershell \ && rm -rf /var/lib/apt/lists/*; \ else \ dotnet tool install --global PowerShell \ && ln -s /root/.dotnet/tools/pwsh /usr/local/bin/pwsh; \ fi # Install Pester and prepare module directory RUN pwsh -NoProfile -Command \ 'Set-PSRepository -Name PSGallery -InstallationPolicy Trusted; \ Install-Module -Name Pester -MinimumVersion 5.0 -Scope AllUsers -Force' \ && mkdir -p /usr/local/share/powershell/Modules/PSProxmoxVE WORKDIR /repo CMD ["pwsh", "-NoProfile"] # ── Full: adds Terraform + PVE provisioning tools (x86 only) ─────── FROM dev AS dev-infra RUN apt-get update && apt-get install -y --no-install-recommends \ dosfstools mtools sshpass python3 xorriso gnupg \ && curl -fsSL https://apt.releases.hashicorp.com/gpg \ | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg \ && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \ https://apt.releases.hashicorp.com noble main" \ > /etc/apt/sources.list.d/hashicorp.list \ && curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg \ -o /usr/share/keyrings/proxmox-release-bookworm.gpg \ && echo "deb [signed-by=/usr/share/keyrings/proxmox-release-bookworm.gpg] \ http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \ > /etc/apt/sources.list.d/proxmox-pve.list \ && apt-get update && apt-get install -y --no-install-recommends \ terraform proxmox-auto-install-assistant qemu-utils \ && rm -rf /var/lib/apt/lists/* # Install Docker CLI (for managing storage containers on the host via mounted socket) RUN install -m 0755 -d /etc/apt/keyrings \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \ && chmod a+r /etc/apt/keyrings/docker.gpg \ && echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" \ > /etc/apt/sources.list.d/docker.list \ && apt-get update \ && apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \ && rm -rf /var/lib/apt/lists/*