fix: replace let _ with explicit drop for Command output #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |