| name: Deploy to Azure | |
| permissions: | |
| contents: read | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Validate Secrets | |
| run: | | |
| echo "Validating required secrets..." | |
| [ -n "${{ secrets.AZURE_CLIENT_ID }}" ] || (echo "β Missing: AZURE_CLIENT_ID"; exit 1) | |
| [ -n "${{ secrets.AZURE_CLIENT_SECRET }}" ] || (echo "β Missing: AZURE_CLIENT_SECRET"; exit 1) | |
| [ -n "${{ secrets.AZURE_TENANT_ID }}" ] || (echo "β Missing: AZURE_TENANT_ID"; exit 1) | |
| [ -n "${{ secrets.AZURE_SUBSCRIPTION_ID }}" ] || (echo "β Missing: AZURE_SUBSCRIPTION_ID"; exit 1) | |
| [ -n "${{ secrets.AZURE_OPENAI_ENDPOINT }}" ] || (echo "β Missing: AZURE_OPENAI_ENDPOINT"; exit 1) | |
| [ -n "${{ secrets.AZURE_OPENAI_API_KEY }}" ] || (echo "β Missing: AZURE_OPENAI_API_KEY"; exit 1) | |
| echo "β All required secrets are present" | |
| - name: Azure CLI Login | |
| run: | | |
| echo "Logging in to Azure..." | |
| az login \ | |
| --service-principal \ | |
| -u "${{ secrets.AZURE_CLIENT_ID }}" \ | |
| -p "${{ secrets.AZURE_CLIENT_SECRET }}" \ | |
| --tenant "${{ secrets.AZURE_TENANT_ID }}" | |
| az account set --subscription "${{ secrets.AZURE_SUBSCRIPTION_ID }}" | |
| echo "β Azure login successful" | |
| - name: Build Docker Image | |
| run: | | |
| echo "Building Docker image in Azure Container Registry..." | |
| az acr build \ | |
| --registry nursingvalidatoracr \ | |
| --image nursing-validator:latest \ | |
| --image nursing-validator:${{ github.sha }} \ | |
| --file Dockerfile . | |
| - name: Deploy Container | |
| run: | | |
| echo "Getting Azure Container Registry credentials..." | |
| REGISTRY_USERNAME=$(az acr credential show --name nursingvalidatoracr --query username --output tsv) | |
| REGISTRY_PASSWORD=$(az acr credential show --name nursingvalidatoracr --query 'passwords[0].value' --output tsv) | |
| echo "Removing existing container if present..." | |
| az container delete \ | |
| --resource-group nursing-validator-prod \ | |
| --name nursing-validator \ | |
| --yes 2>/dev/null || true | |
| sleep 5 | |
| echo "Creating new container instance..." | |
| az container create \ | |
| --resource-group nursing-validator-prod \ | |
| --name nursing-validator \ | |
| --image nursingvalidatoracr.azurecr.io/nursing-validator:latest \ | |
| --registry-login-server nursingvalidatoracr.azurecr.io \ | |
| --registry-username "$REGISTRY_USERNAME" \ | |
| --registry-password "$REGISTRY_PASSWORD" \ | |
| --os-type Linux \ | |
| --cpu 2 \ | |
| --memory 4 \ | |
| --ports 8501 \ | |
| --ip-address Public \ | |
| --environment-variables \ | |
| APP_ENV=production \ | |
| LOG_LEVEL=info \ | |
| --secure-environment-variables \ | |
| AZURE_OPENAI_ENDPOINT="${{ secrets.AZURE_OPENAI_ENDPOINT }}" \ | |
| AZURE_OPENAI_API_KEY="${{ secrets.AZURE_OPENAI_API_KEY }}" \ | |
| AZURE_OPENAI_DEPLOYMENT="gpt-4o" \ | |
| AZURE_OPENAI_API_VERSION="2024-08-01-preview" \ | |
| --restart-policy OnFailure | |
| - name: Get Deployment URL | |
| run: | | |
| echo "Waiting for container to be assigned a public IP..." | |
| sleep 15 | |
| FQDN=$(az container show \ | |
| --resource-group nursing-validator-prod \ | |
| --name nursing-validator \ | |
| --query ipAddress.fqdn \ | |
| --output tsv 2>/dev/null || echo "") | |
| if [ -z "$FQDN" ]; then | |
| echo "β οΈ IP not yet assigned. Check status with:" | |
| echo " az container show --resource-group nursing-validator-prod --name nursing-validator" | |
| else | |
| echo "" | |
| echo "β DEPLOYMENT SUCCESSFUL!" | |
| echo "" | |
| echo "π Access your application at:" | |
| echo " http://$FQDN:8501" | |
| echo "" | |
| echo "π Login credentials:" | |
| echo " Username: admin" | |
| echo " Password: admin2025" | |
| echo "" | |
| echo "π Features:" | |
| echo " β’ Predictions Dashboard" | |
| echo " β’ Recommendations Dashboard" | |
| echo " β’ Anomaly Detection" | |
| echo " β’ Explainability (SHAP)" | |
| echo "" | |
| echo "π View logs:" | |
| echo " az container logs --resource-group nursing-validator-prod --name nursing-validator" | |
| fi | |