5757 ui_changed : ${{ steps.detect.outputs.ui_changed }}
5858 agents_changed : ${{ steps.detect.outputs.agents_changed }}
5959 changed_agents_matrix : ${{ steps.detect.outputs.changed_agents_matrix }}
60+ changed_agent_services_csv : ${{ steps.detect.outputs.changed_agent_services_csv }}
61+ changed_aks_services_csv : ${{ steps.detect.outputs.changed_aks_services_csv }}
6062 steps :
6163 - uses : actions/checkout@v4
6264 with :
@@ -115,12 +117,13 @@ jobs:
115117
116118 AGENTS_CHANGED=false
117119 MATRIX='[]'
120+ CHANGED_AGENTS=()
118121
119122 if [ "$SHARED_CHANGED" = true ]; then
120123 AGENTS_CHANGED=true
124+ CHANGED_AGENTS=("${AGENT_SERVICES[@]}")
121125 MATRIX=$(printf '%s\n' "${AGENT_SERVICES[@]}" | jq -R . | jq -s 'map({service: .})')
122126 else
123- CHANGED_AGENTS=()
124127 for service in "${AGENT_SERVICES[@]}"; do
125128 if echo "$CHANGED_FILES" | grep -Eq "^apps/$service/"; then
126129 CHANGED_AGENTS+=("$service")
@@ -133,10 +136,26 @@ jobs:
133136 fi
134137 fi
135138
139+ CHANGED_AGENT_SERVICES_CSV=""
140+ if [ ${#CHANGED_AGENTS[@]} -gt 0 ]; then
141+ CHANGED_AGENT_SERVICES_CSV=$(IFS=,; echo "${CHANGED_AGENTS[*]}")
142+ fi
143+
144+ CHANGED_AKS_SERVICES_CSV="$CHANGED_AGENT_SERVICES_CSV"
145+ if [ "$CRUD_CHANGED" = true ]; then
146+ if [ -n "$CHANGED_AKS_SERVICES_CSV" ]; then
147+ CHANGED_AKS_SERVICES_CSV="crud-service,$CHANGED_AKS_SERVICES_CSV"
148+ else
149+ CHANGED_AKS_SERVICES_CSV="crud-service"
150+ fi
151+ fi
152+
136153 echo "crud_changed=$CRUD_CHANGED" >> "$GITHUB_OUTPUT"
137154 echo "ui_changed=$UI_CHANGED" >> "$GITHUB_OUTPUT"
138155 echo "agents_changed=$AGENTS_CHANGED" >> "$GITHUB_OUTPUT"
139156 echo "changed_agents_matrix=$MATRIX" >> "$GITHUB_OUTPUT"
157+ echo "changed_agent_services_csv=$CHANGED_AGENT_SERVICES_CSV" >> "$GITHUB_OUTPUT"
158+ echo "changed_aks_services_csv=$CHANGED_AKS_SERVICES_CSV" >> "$GITHUB_OUTPUT"
140159
141160 provision :
142161 if : ${{ !inputs.uiOnly }}
@@ -347,7 +366,9 @@ jobs:
347366
348367 deploy-crud :
349368 runs-on : ubuntu-latest
350- needs : provision
369+ needs :
370+ - provision
371+ - detect-changes
351372 if : ${{ !inputs.uiOnly && (!inputs.deployChangedOnly || needs.detect-changes.outputs.crud_changed == 'true') }}
352373 environment : ${{ inputs.environment }}
353374 env :
@@ -454,7 +475,9 @@ jobs:
454475 deploy-ui :
455476 runs-on : ubuntu-latest
456477 if : ${{ inputs.deployStatic && !inputs.uiOnly && (!inputs.deployChangedOnly || needs.detect-changes.outputs.ui_changed == 'true') }}
457- needs : provision
478+ needs :
479+ - provision
480+ - detect-changes
458481 environment : ${{ inputs.environment }}
459482 env :
460483 AZURE_CLIENT_ID : ${{ secrets.AZURE_CLIENT_ID }}
@@ -574,6 +597,7 @@ jobs:
574597 runs-on : ubuntu-latest
575598 if : ${{ !inputs.uiOnly && (!inputs.deployChangedOnly || needs.detect-changes.outputs.agents_changed == 'true') }}
576599 needs :
600+ - provision
577601 - deploy-crud
578602 - deploy-foundry-models
579603 - detect-changes
@@ -645,12 +669,17 @@ jobs:
645669
646670 sync-apim :
647671 runs-on : ubuntu-latest
648- needs : deploy-agents
672+ if : ${{ !inputs.uiOnly && (!inputs.deployChangedOnly || needs.detect-changes.outputs.agents_changed == 'true' || needs.detect-changes.outputs.crud_changed == 'true') && (needs.deploy-crud.result == 'success' || needs.deploy-crud.result == 'skipped') && (needs.deploy-agents.result == 'success' || needs.deploy-agents.result == 'skipped') }}
673+ needs :
674+ - deploy-crud
675+ - deploy-agents
676+ - detect-changes
649677 environment : ${{ inputs.environment }}
650678 env :
651679 AZURE_CLIENT_ID : ${{ secrets.AZURE_CLIENT_ID }}
652680 AZURE_TENANT_ID : ${{ secrets.AZURE_TENANT_ID }}
653681 AZURE_SUBSCRIPTION_ID : ${{ secrets.AZURE_SUBSCRIPTION_ID }}
682+ CHANGED_SERVICES : ${{ inputs.deployChangedOnly && needs.detect-changes.outputs.changed_aks_services_csv || '' }}
654683 steps :
655684 - uses : actions/checkout@v4
656685
@@ -677,12 +706,16 @@ jobs:
677706
678707 ensure-foundry-agents :
679708 runs-on : ubuntu-latest
680- needs : deploy-agents
709+ if : ${{ !inputs.uiOnly && (!inputs.deployChangedOnly || needs.detect-changes.outputs.agents_changed == 'true') && (needs.deploy-agents.result == 'success' || needs.deploy-agents.result == 'skipped') }}
710+ needs :
711+ - deploy-agents
712+ - detect-changes
681713 environment : ${{ inputs.environment }}
682714 env :
683715 AZURE_CLIENT_ID : ${{ secrets.AZURE_CLIENT_ID }}
684716 AZURE_TENANT_ID : ${{ secrets.AZURE_TENANT_ID }}
685717 AZURE_SUBSCRIPTION_ID : ${{ secrets.AZURE_SUBSCRIPTION_ID }}
718+ CHANGED_SERVICES : ${{ inputs.deployChangedOnly && needs.detect-changes.outputs.changed_agent_services_csv || '' }}
686719 steps :
687720 - uses : actions/checkout@v4
688721
@@ -713,27 +746,31 @@ jobs:
713746
714747 - name : Verify Foundry readiness across services
715748 run : |
716- SERVICES=$(python3 -c "
717- import re
718- with open('azure.yaml') as f: lines = f.readlines()
719- s, cs, ch = False, None, None
720- svcs = []
721- for l in lines:
722- l = l.rstrip()
723- if not s:
724- if re.match(r'^services:\s*$', l): s = True
725- continue
726- if re.match(r'^[^\s]', l): break
727- m = re.match(r'^ ([a-z0-9\-]+):\s*$', l)
728- if m:
729- if cs and ch == 'aks' and cs != 'crud-service': svcs.append(cs)
730- cs, ch = m.group(1), None
731- continue
732- h = re.match(r'^ host:\s*(\S+)', l)
733- if h: ch = h.group(1)
734- if cs and ch == 'aks' and cs != 'crud-service': svcs.append(cs)
735- print('\n'.join(svcs))
736- ")
749+ if [ -n "${CHANGED_SERVICES}" ]; then
750+ SERVICES=$(printf '%s' "${CHANGED_SERVICES}" | tr ',' '\n' | sed '/^crud-service$/d' | sed '/^$/d')
751+ else
752+ SERVICES=$(python3 -c "
753+ import re
754+ with open('azure.yaml') as f: lines = f.readlines()
755+ s, cs, ch = False, None, None
756+ svcs = []
757+ for l in lines:
758+ l = l.rstrip()
759+ if not s:
760+ if re.match(r'^services:\s*$', l): s = True
761+ continue
762+ if re.match(r'^[^\s]', l): break
763+ m = re.match(r'^ ([a-z0-9\-]+):\s*$', l)
764+ if m:
765+ if cs and ch == 'aks' and cs != 'crud-service': svcs.append(cs)
766+ cs, ch = m.group(1), None
767+ continue
768+ h = re.match(r'^ host:\s*(\S+)', l)
769+ if h: ch = h.group(1)
770+ if cs and ch == 'aks' and cs != 'crud-service': svcs.append(cs)
771+ print('\\n'.join(svcs))
772+ ")
773+ fi
737774
738775 FAILED=0
739776 echo "$SERVICES" | while IFS= read -r SVC; do
0 commit comments