NurseCitizenDeveloper's picture
Deploy Open Nursing Validator (Docker)
6d12932 verified
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