Skip to content

fix: replace let _ with explicit drop for Command output #17

fix: replace let _ with explicit drop for Command output

fix: replace let _ with explicit drop for Command output #17

name: Test Multipass VM Provisioning
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
workflow_dispatch: # Allow manual triggering
jobs:
test-provision:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install and configure Multipass
run: |
sudo snap install multipass
# Wait for multipass to fully initialize
echo "Waiting for multipass daemon to start..."
sleep 15
# Check if multipass daemon is running
sudo systemctl status snap.multipass.multipassd.service || true
# Try to start the daemon explicitly if needed
sudo systemctl start snap.multipass.multipassd.service || true
# Wait a bit more for daemon to be ready
sleep 10
# Check multipass status
sudo multipass version
# Create multipass group if it doesn't exist
sudo groupadd multipass || true
# Set up permissions - add runner to multipass group
sudo usermod -a -G multipass runner || true
# Fix socket permissions directly
sudo chmod 666 /var/snap/multipass/common/multipass_socket || true
# Try to configure multipass for virtualization
sudo multipass set local.driver=qemu || echo "Could not set driver, continuing..."
# Test basic multipass functionality with timeout
timeout 30 sudo multipass list || echo "Direct multipass list failed, trying with socket fix..."
# Alternative: try to connect as root to test socket
sudo -u root multipass list || echo "Root access also failed, socket may need more time"
- name: Install OpenTofu
run: |
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh
chmod +x install-opentofu.sh
./install-opentofu.sh --install-method deb
- name: Verify installations
run: |
sudo multipass version
tofu version
- name: Initialize OpenTofu
working-directory: config/tofu/multipass
run: tofu init
- name: Validate OpenTofu configuration
working-directory: config/tofu/multipass
run: tofu validate
- name: Plan deployment
working-directory: config/tofu/multipass
run: tofu plan
- name: Apply configuration
working-directory: config/tofu/multipass
run: |
# Run with sudo to ensure multipass access
sudo -E tofu apply -auto-approve
- name: Wait for VM to be ready
run: |
echo "Waiting for VM to be fully initialized..."
sleep 30
# Wait up to 5 minutes for cloud-init to complete
timeout=300
elapsed=0
while [ $elapsed -lt $timeout ]; do
if sudo multipass exec torrust-vm -- test -f /tmp/provision_complete 2>/dev/null; then
echo "VM provisioning completed successfully!"
break
fi
echo "Waiting for VM provisioning to complete... ($elapsed/$timeout seconds)"
sleep 10
elapsed=$((elapsed + 10))
done
if [ $elapsed -ge $timeout ]; then
echo "Timeout waiting for VM provisioning to complete"
exit 1
fi
- name: Test VM functionality
run: |
# Test basic connectivity
sudo multipass list
sudo multipass info torrust-vm
# Test SSH access
sudo multipass exec torrust-vm -- whoami
# Test system information with error handling
echo "Getting system information..."
sudo multipass exec torrust-vm -- lsb_release -a || echo "lsb_release failed"
sleep 1
sudo multipass exec torrust-vm -- df -h || echo "df failed"
sleep 1
sudo multipass exec torrust-vm -- free -h || echo "free failed"
- name: Get VM outputs
working-directory: config/tofu/multipass
run: sudo -E tofu output
- name: Cleanup
if: always()
working-directory: config/tofu/multipass
run: |
echo "Cleaning up VM..."
sudo -E tofu destroy -auto-approve || true
sudo multipass delete torrust-vm --purge || true
- name: Final verification
if: always()
run: |
echo "Verifying cleanup..."
sudo multipass list