Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
244 changes: 244 additions & 0 deletions .github/workflows/job-deploy-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
name: Deploy Steps - Linux

on:
workflow_call:
inputs:
ENV_NAME:
required: true
type: string
AZURE_ENV_OPENAI_LOCATION:
required: true
type: string
AZURE_LOCATION:
required: true
type: string
RESOURCE_GROUP_NAME:
required: true
type: string
IMAGE_TAG:
required: true
type: string
BUILD_DOCKER_IMAGE:
required: true
type: string
EXP:
required: true
type: string
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID:
required: false
type: string
AZURE_EXISTING_AI_PROJECT_RESOURCE_ID:
required: false
type: string
secrets:
AZURE_CLIENT_ID:
required: true
AZURE_CLIENT_SECRET:
required: true
AZURE_TENANT_ID:
required: true
AZURE_SUBSCRIPTION_ID:
required: true
ACR_TEST_LOGIN_SERVER:
required: true
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID:
required: false
AZURE_ENV_FOUNDRY_PROJECT_ID:
required: false
outputs:
CONTAINER_WEB_APPURL:
description: "Container Web App URL"
value: ${{ jobs.deploy-linux.outputs.CONTAINER_WEB_APPURL }}
invoice_schema_id:
description: "Invoice Schema ID"
value: ${{ jobs.deploy-linux.outputs.invoice_schema_id }}
propertydamageclaimform_schema_id:
description: "Property Damage Claim Form Schema ID"
value: ${{ jobs.deploy-linux.outputs.propertydamageclaimform_schema_id }}

jobs:
deploy-linux:
runs-on: ubuntu-latest
outputs:
CONTAINER_WEB_APPURL: ${{ steps.get_output_linux.outputs.CONTAINER_WEB_APPURL }}
invoice_schema_id: ${{ steps.register_linux.outputs.invoice_schema_id }}
propertydamageclaimform_schema_id: ${{ steps.register_linux.outputs.propertylossdamageclaimform_schema_id }}
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Setup Azure CLI
shell: bash
run: |
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

- name: Setup Azure Developer CLI (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
curl -fsSL https://aka.ms/install-azd.sh | sudo bash
azd version

- name: Login to AZD
id: login-azure
shell: bash
run: |
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 }}
azd auth login --client-id ${{ secrets.AZURE_CLIENT_ID }} --client-secret ${{ secrets.AZURE_CLIENT_SECRET }} --tenant-id ${{ secrets.AZURE_TENANT_ID }}

- name: Deploy using azd up and extract values (Linux)
id: get_output_linux
shell: bash
run: |
set -e
echo "Starting azd deployment..."
echo "EXP: ${{ inputs.EXP }}"
echo "Using Docker Image Tag: ${{ inputs.IMAGE_TAG }}"

# Install azd (Azure Developer CLI)
curl -fsSL https://aka.ms/install-azd.sh | bash

# Generate current timestamp in desired format: YYYY-MM-DDTHH:MM:SS.SSSSSSSZ
current_date=$(date -u +"%Y-%m-%dT%H:%M:%S.%7NZ")

echo "Creating environment..."
azd env new ${{ inputs.ENV_NAME }} --no-prompt
echo "Environment created: ${{ inputs.ENV_NAME }}"

echo "Setting default subscription..."
azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }}

# Set additional parameters
azd env set AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}"
azd env set AZURE_ENV_AI_DEPLOYMENTS_LOCATION="${{ inputs.AZURE_ENV_OPENAI_LOCATION }}"
azd env set AZURE_LOCATION="${{ inputs.AZURE_LOCATION }}"
azd env set AZURE_RESOURCE_GROUP="${{ inputs.RESOURCE_GROUP_NAME }}"
azd env set AZURE_ENV_CONTAINER_IMAGE_TAG="${{ inputs.IMAGE_TAG }}"

if [[ "${{ inputs.BUILD_DOCKER_IMAGE }}" == "true" ]]; then
ACR_NAME=$(echo "${{ secrets.ACR_TEST_LOGIN_SERVER }}")
azd env set AZURE_ENV_CONTAINER_REGISTRY_ENDPOINT="$ACR_NAME"
echo "Set ACR name to: $ACR_NAME"
else
echo "Skipping ACR name configuration (using existing image)"
fi

if [[ "${{ inputs.EXP }}" == "true" ]]; then
echo "✅ EXP ENABLED - Setting EXP parameters..."

if [[ -n "${{ inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}" ]]; then
EXP_LOG_ANALYTICS_ID="${{ inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
else
EXP_LOG_ANALYTICS_ID="${{ secrets.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}"
fi

if [[ -n "${{ inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}" ]]; then
EXP_AI_PROJECT_ID="${{ inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}"
else
EXP_AI_PROJECT_ID="${{ secrets.AZURE_ENV_FOUNDRY_PROJECT_ID }}"
fi

echo "AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: $EXP_LOG_ANALYTICS_ID"
echo "AZURE_ENV_FOUNDRY_PROJECT_ID: $EXP_AI_PROJECT_ID"
azd env set AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID="$EXP_LOG_ANALYTICS_ID"
azd env set AZURE_ENV_FOUNDRY_PROJECT_ID="$EXP_AI_PROJECT_ID"
else
echo "❌ EXP DISABLED - Skipping EXP parameters"
fi

azd up --no-prompt

echo "✅ Deployment succeeded."
echo "$DEPLOY_OUTPUT"

echo "Extracting deployment outputs..."
DEPLOY_OUTPUT=$(azd env get-values --output json)
echo "Deployment output: $DEPLOY_OUTPUT"

if [[ -z "$DEPLOY_OUTPUT" ]]; then
echo "Error: Deployment output is empty. Please check the deployment logs."
exit 1
fi

export CONTAINER_API_APPURL="https://$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_API_APP_FQDN // empty')"
echo "CONTAINER_API_APPURL=$CONTAINER_API_APPURL" >> $GITHUB_ENV

export CONTAINER_API_APPNAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_API_APP_NAME // empty')
echo "CONTAINER_API_APPNAME=$CONTAINER_API_APPNAME" >> $GITHUB_ENV

export CONTAINER_WEB_APPURL="https://$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_WEB_APP_FQDN // empty')"
echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $GITHUB_ENV
echo "CONTAINER_WEB_APPURL=$CONTAINER_WEB_APPURL" >> $GITHUB_OUTPUT

export CONTAINER_WEB_APPNAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.CONTAINER_WEB_APP_NAME // empty')
echo "CONTAINER_WEB_APPNAME=$CONTAINER_WEB_APPNAME" >> $GITHUB_ENV

- name: Register schemas (Linux)
id: register_linux
shell: bash
run: |
echo "Registering schemas..."
sleep 40

cd src/ContentProcessorAPI/samples/schemas
chmod +x ./register_schema.sh
./register_schema.sh ${{ env.CONTAINER_API_APPURL }}/schemavault/ schema_info_sh.json

- name: Upload sample invoice and claim data (Linux)
shell: bash
run: |
echo "Uploading sample data..."
cd src/ContentProcessorAPI/samples
chmod +x ./upload_files.sh
./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./invoices '${{ steps.register_linux.outputs.invoice_schema_id }}'
./upload_files.sh ${{ env.CONTAINER_API_APPURL }}/contentprocessor/submit ./propertyclaims '${{ steps.register_linux.outputs.propertylossdamageclaimform_schema_id }}'

- name: Disable Auth in Web App
shell: bash
run: |
az containerapp update --name ${{ env.CONTAINER_WEB_APPNAME }} \
--resource-group ${{ inputs.RESOURCE_GROUP_NAME }} \
--set-env-vars APP_AUTH_ENABLED=false

- name: Disable Auth in API App
shell: bash
run: |
sleep 30
az containerapp update --name ${{ env.CONTAINER_API_APPNAME }} \
--resource-group ${{ inputs.RESOURCE_GROUP_NAME }} \
--set-env-vars APP_AUTH_ENABLED=false

- name: Generate Deployment Summary
if: always()
shell: bash
run: |
echo "## 🚀 Deploy Job Summary (Linux)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| **Job Status** | ${{ job.status == 'success' && '✅ Success' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| **Resource Group** | \`${{ inputs.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY
echo "| **Azure Region (Infrastructure)** | \`${{ inputs.AZURE_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY
echo "| **Azure OpenAI Region** | \`${{ inputs.AZURE_ENV_OPENAI_LOCATION }}\` |" >> $GITHUB_STEP_SUMMARY
echo "| **Docker Image Tag** | \`${{ inputs.IMAGE_TAG }}\` |" >> $GITHUB_STEP_SUMMARY
echo "| **Environment Name** | \`${{ inputs.ENV_NAME }}\` |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [[ "${{ job.status }}" == "success" ]]; then
echo "### ✅ Deployment Details" >> $GITHUB_STEP_SUMMARY
echo "- **Container Web App URL**: [${{ env.CONTAINER_WEB_APPURL }}](${{ env.CONTAINER_WEB_APPURL }})" >> $GITHUB_STEP_SUMMARY
echo "- **Container API App URL**: [${{ env.CONTAINER_API_APPURL }}](${{ env.CONTAINER_API_APPURL }})" >> $GITHUB_STEP_SUMMARY
echo "- Successfully deployed to Azure with all resources configured" >> $GITHUB_STEP_SUMMARY
echo "- Schemas registered and sample data uploaded successfully" >> $GITHUB_STEP_SUMMARY
else
echo "### ❌ Deployment Failed" >> $GITHUB_STEP_SUMMARY
echo "- Deployment process encountered an error" >> $GITHUB_STEP_SUMMARY
echo "- Check the deployment steps above for detailed error information" >> $GITHUB_STEP_SUMMARY
fi

- name: Logout from Azure
if: always()
shell: bash
run: |
az logout || true
echo "Logged out from Azure."
Loading
Loading