[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-azure-cloud-deployment-and-testing":3,"mdc--v0w8dc-key":38,"related-repo-azure-cloud-deployment-and-testing":3712,"related-org-azure-cloud-deployment-and-testing":3814},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":33,"sourceUrl":36,"mdContent":37},"cloud-deployment-and-testing","deploy and test Azure Logic Apps","Rules for optional cloud deployment and testing of Logic Apps Standard projects. Covers ARM\u002FBicep generation, deployment method, app settings management, cloud test execution, and reporting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"azure","Azure (Microsoft)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fazure.png","Azure",[13,15,18,21,24],{"name":11,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Reporting","reporting",{"name":19,"slug":20,"type":14},"Deployment","deployment",{"name":22,"slug":23,"type":14},"Bicep","bicep",{"name":25,"slug":26,"type":14},"Testing","testing",6,"https:\u002F\u002Fgithub.com\u002FAzure\u002Flogicapps-migration-agent","2026-07-12T08:20:12.210407",null,7,[],{"repoUrl":28,"stars":27,"forks":31,"topics":34,"description":35},[],"VS Code Extension for migrating BizTalk, MuleSoft, and other integration platforms to Azure Logic Apps Standard","https:\u002F\u002Fgithub.com\u002FAzure\u002Flogicapps-migration-agent\u002Ftree\u002FHEAD\u002Fresources\u002Fskills\u002Fcloud-deployment-and-testing\u002Fbiztalk","---\nname: cloud-deployment-and-testing\ndescription: Rules for optional cloud deployment and testing of Logic Apps Standard projects. Covers ARM\u002FBicep generation, deployment method, app settings management, cloud test execution, and reporting.\n---\n\n# Skill: Cloud Deployment and Testing\n\n> **Purpose**: Authoritative rules for the optional cloud deployment and testing task. Follow exactly.\n\n---\n\n## 1. Task Nature\n\nThis task is OPTIONAL. The user decides whether to execute or skip it via the UI. It is excluded from \"Execute All\" and handled separately.\n\n---\n\n## 2. Deployment Steps\n\n1. **Generate ARM\u002FBicep template** that deploys the Logic App Standard resource with all required dependencies.\n2. **Deploy using `az deployment group create`** — do NOT use zip deploy for infrastructure.\n3. **ALL app settings MUST be in the Bicep template** — do NOT use `az webapp config appsettings set` as a separate step. Bicep redeploys REPLACE all settings. Any setting not in the template will be wiped on the next deploy.\n4. For File System scenarios, add the cloud-specific app settings and connection values required by Azure. Do NOT assume the local file-system mount setup is enough for cloud testing.\n5. For File System connections in Azure using the **built-in service provider** (`\u002FserviceProviders\u002FFileSystem`), use Azure Files mounts — no username\u002Fpassword needed in `connections.json`. The `mountPath` app setting and `azureStorageAccounts` site config handle authentication.\n6. For File System mount paths in Azure, do NOT use `\u002Fhome`, `\u002Fhome\u002Fsite`, or `\u002Fhome\u002Fsite\u002Fwwwroot`. On Windows Logic Apps, mount paths must be under `\u002Fmounts\u002F` (e.g., `\u002Fmounts\u002Fedi-files`).\n\n### 2.1 Critical App Settings Rules\n\nThese rules prevent the most common deployment failures:\n\n- **`FUNCTIONS_WORKER_RUNTIME` MUST be `dotnet`** — Logic Apps Standard uses `dotnet` for in-process .NET custom code. Use the same value as `local.settings.json`. Do NOT use `dotnet-isolated` or `node`.\n- **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** are REQUIRED for WS1 (WorkflowStandard) plans. Without them, the runtime won't start.\n- **`WEBSITE_CONTENTSHARE`** should be set to the Logic App name (e.g., `la-my-app`). Azure auto-creates this file share for runtime content.\n- **`FUNCTIONS_EXTENSION_VERSION`** MUST be `~4`.\n- **`APP_KIND`** MUST be `workflowapp`.\n- **Never set `ProjectDirectoryPath`** in cloud — it's for local `func start` only.\n- **`@secure()` parameters with `&` characters** (like Integration Account callback URLs) must be placed in the Bicep parameters file, NOT passed inline via shell arguments. The `&` is interpreted as a shell operator and truncates the value.\n\n### 2.2 Content Deployment (Workflow Files)\n\nAfter Bicep deploys infrastructure, deploy workflow content to the `WEBSITE_CONTENTSHARE` Azure Files share under `site\u002Fwwwroot\u002F`:\n\n- **Use `az storage file upload`** to the content share — NOT `az webapp deploy` or zip deploy. This gives atomic control over each file.\n- Upload: `host.json`, `connections.json`, `{workflow-name}\u002Fworkflow.json`, `lib\u002Fcustom\u002F**`\n- Do NOT upload: `local.settings.json`, `.vscode\u002F`, `workflow-designtime\u002F`, `.azurite\u002F`\n- Do NOT create nested `site\u002Fwwwroot\u002Fsite\u002Fwwwroot\u002F` paths.\n- After upload, restart with `az logicapp restart` (NOT `az webapp restart`).\n\n### 2.3 Deployment Script Safety\n\n- App settings with SAS URLs are applied from a JSON file or Bicep parameters, not inline shell arguments.\n- Exclude the `.azurite\u002F` folder from any content upload or publish step.\n- Runtime mount path in app settings matches `connections.json`.\n- File System mount path must not overlap with `site\u002Fwwwroot` or any parent `\u002Fhome` content path.\n- The deployment path does not depend on portal-only manual steps.\n\n---\n\n## 2.5 Reference Bicep Template\n\nUse this as the starting point for every Logic App Standard cloud deployment. Adapt parameters as needed.\n\n```bicep\n@description('Name of the Logic App Standard resource')\nparam logicAppName string\n\n@description('Name of the App Service Plan')\nparam appServicePlanName string\n\n@description('Name of the Storage Account (3-24 chars, lowercase, no hyphens)')\nparam storageAccountName string\n\n@description('Location for all resources')\nparam location string = resourceGroup().location\n\n\u002F\u002F ─── OPTIONAL: Integration Account (only if EDI\u002FB2B actions are used) ───\n@description('Integration Account resource ID (empty string if not used)')\nparam integrationAccountId string = ''\n\n@description('Integration Account callback URL (empty string if not used)')\n@secure()\nparam integrationAccountCallbackUrl string = ''\n\n\u002F\u002F ─── OPTIONAL: File System mount (only if FileSystem service provider is used) ───\n@description('File system mount path — MUST be under \u002Fmounts\u002F for Windows')\nparam fileSystemMountPath string = '\u002Fmounts\u002Ffilesystem'\n\n@description('Azure Files share name for file system connector')\nparam fileShareName string = 'app-files'\n\n\u002F\u002F ─── Storage Account ───\nresource storageAccount 'Microsoft.Storage\u002FstorageAccounts@2023-01-01' = {\n  name: storageAccountName\n  location: location\n  sku: { name: 'Standard_LRS' }\n  kind: 'StorageV2'\n  properties: {\n    supportsHttpsTrafficOnly: true\n    minimumTlsVersion: 'TLS1_2'\n  }\n}\n\n\u002F\u002F ─── Azure Files share (for FileSystem connector — omit if not needed) ───\nresource fileService 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices@2023-01-01' = {\n  parent: storageAccount\n  name: 'default'\n}\n\nresource fileShare 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices\u002Fshares@2023-01-01' = {\n  parent: fileService\n  name: fileShareName\n  properties: { shareQuota: 5 }\n}\n\n\u002F\u002F ─── App Service Plan (WS1) ───\nresource appServicePlan 'Microsoft.Web\u002Fserverfarms@2023-01-01' = {\n  name: appServicePlanName\n  location: location\n  sku: {\n    tier: 'WorkflowStandard'\n    name: 'WS1'\n  }\n  kind: 'elastic'\n  properties: { elasticScaleEnabled: false }\n}\n\n\u002F\u002F ─── Logic App Standard ───\nresource logicApp 'Microsoft.Web\u002Fsites@2023-01-01' = {\n  name: logicAppName\n  location: location\n  kind: 'functionapp,workflowapp'\n  identity: { type: 'SystemAssigned' }\n  properties: {\n    serverFarmId: appServicePlan.id\n    httpsOnly: true\n    siteConfig: {\n      netFrameworkVersion: 'v8.0'\n      use32BitWorkerProcess: false\n      appSettings: [\n        \u002F\u002F ── Required runtime settings ──\n        { name: 'AzureWebJobsStorage', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n        { name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n        { name: 'WEBSITE_CONTENTSHARE', value: logicAppName }\n        { name: 'FUNCTIONS_WORKER_RUNTIME', value: 'dotnet' }         \u002F\u002F Same as local.settings.json\n        { name: 'FUNCTIONS_INPROC_NET8_ENABLED', value: '1' }        \u002F\u002F Required for .NET 8 custom code\n        { name: 'APP_KIND', value: 'workflowapp' }                    \u002F\u002F MUST be 'workflowapp'\n        { name: 'AzureWebJobsFeatureFlags', value: 'EnableMultiLanguageWorker' }\n        { name: 'WEBSITE_NODE_DEFAULT_VERSION', value: '~18' }\n        { name: 'FUNCTIONS_EXTENSION_VERSION', value: '~4' }         \u002F\u002F MUST be '~4'\n        \u002F\u002F ── Workflow management settings ──\n        { name: 'WORKFLOWS_SUBSCRIPTION_ID', value: subscription().subscriptionId }\n        { name: 'WORKFLOWS_TENANT_ID', value: subscription().tenantId }\n        { name: 'WORKFLOWS_RESOURCE_GROUP_NAME', value: resourceGroup().name }\n        { name: 'WORKFLOWS_LOCATION_NAME', value: location }\n        { name: 'WORKFLOWS_MANAGEMENT_BASE_URI', value: environment().resourceManager }\n        \u002F\u002F ── Integration Account (omit both if not used) ──\n        { name: 'WORKFLOWS_INTEGRATION_ACCOUNT_ID', value: integrationAccountId }\n        { name: 'WORKFLOW_INTEGRATION_ACCOUNT_CALLBACK_URL', value: integrationAccountCallbackUrl }\n        \u002F\u002F ── FileSystem connector (omit if not used) ──\n        { name: 'FileSystem_mountPath', value: fileSystemMountPath }\n      ]\n      \u002F\u002F ── Azure Files mount (omit entire block if FileSystem connector not used) ──\n      azureStorageAccounts: {\n        appfiles: {\n          type: 'AzureFiles'\n          accountName: storageAccount.name\n          shareName: fileShareName\n          mountPath: fileSystemMountPath          \u002F\u002F MUST match FileSystem_mountPath\n          accessKey: storageAccount.listKeys().keys[0].value\n        }\n      }\n    }\n  }\n}\n\noutput logicAppName string = logicApp.name\noutput logicAppDefaultHostName string = logicApp.properties.defaultHostName\noutput storageAccountName string = storageAccount.name\noutput logicAppResourceId string = logicApp.id\n```\n\n### 2.6 Reference Parameters File\n\nPut the callback URL here — NOT in shell arguments — because it contains `&` characters.\n\n```json\n{\n    \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentParameters.json#\",\n    \"contentVersion\": \"1.0.0.0\",\n    \"parameters\": {\n        \"logicAppName\": { \"value\": \"la-my-app\" },\n        \"appServicePlanName\": { \"value\": \"asp-my-app\" },\n        \"storageAccountName\": { \"value\": \"stmyapp\" },\n        \"location\": { \"value\": \"eastus\" },\n        \"integrationAccountId\": {\n            \"value\": \"\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Logic\u002FintegrationAccounts\u002F{name}\"\n        },\n        \"integrationAccountCallbackUrl\": {\n            \"value\": \"https:\u002F\u002Fprod-XX.eastus.logic.azure.com:443\u002FintegrationAccounts\u002F...?api-version=2015-08-01-preview&sp=%2F%2F%2A&sv=1.0&sig=...\"\n        },\n        \"fileSystemMountPath\": { \"value\": \"\u002Fmounts\u002Fedi-files\" },\n        \"fileShareName\": { \"value\": \"edi-files\" }\n    }\n}\n```\n\n### 2.7 Reference Content Deployment Script (PowerShell)\n\nUpload workflow content to the WEBSITE_CONTENTSHARE Azure Files share after Bicep deployment.\n\n```powershell\nparam(\n    [string]$ResourceGroup,\n    [string]$StorageAccountName,\n    [string]$LogicAppName,          # Also the content share name\n    [string]$SourceDir              # Path to the logic app project folder\n)\n\n# Get storage key\n$key = az storage account keys list --account-name $StorageAccountName `\n    --resource-group $ResourceGroup --query \"[0].value\" -o tsv\n\n$share = $LogicAppName  # WEBSITE_CONTENTSHARE = logic app name\n\n# Create directories\n$dirs = @(\n    \"site\u002Fwwwroot\"\n    # Add workflow and lib dirs as needed:\n    # \"site\u002Fwwwroot\u002Fmy-workflow\"\n    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002Fnet8\"\n    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002FMyFunction\"\n)\nforeach ($d in $dirs) {\n    az storage directory create --share-name $share --name $d `\n        --account-name $StorageAccountName --account-key $key 2>$null\n}\n\n# Upload files (recursive helper)\nfunction Upload-File($localPath, $sharePath) {\n    az storage file upload --share-name $share --source $localPath `\n        --path $sharePath --account-name $StorageAccountName `\n        --account-key $key --no-progress 2>$null\n}\n\n# Upload core files\nUpload-File \"$SourceDir\\host.json\"        \"site\u002Fwwwroot\u002Fhost.json\"\nUpload-File \"$SourceDir\\connections.json\" \"site\u002Fwwwroot\u002Fconnections.json\"\n\n# Upload workflow(s)\nGet-ChildItem \"$SourceDir\" -Directory | Where-Object {\n    Test-Path \"$($_.FullName)\\workflow.json\"\n} | ForEach-Object {\n    $wfName = $_.Name\n    az storage directory create --share-name $share `\n        --name \"site\u002Fwwwroot\u002F$wfName\" `\n        --account-name $StorageAccountName --account-key $key 2>$null\n    Upload-File \"$($_.FullName)\\workflow.json\" \"site\u002Fwwwroot\u002F$wfName\u002Fworkflow.json\"\n}\n\n# Upload lib\u002Fcustom (function DLLs + function.json)\nif (Test-Path \"$SourceDir\\lib\\custom\") {\n    Get-ChildItem \"$SourceDir\\lib\\custom\" -Recurse -File | ForEach-Object {\n        $rel = $_.FullName.Substring(\"$SourceDir\\\".Length).Replace('\\', '\u002F')\n        $parentDir = \"site\u002Fwwwroot\u002F\" + ($rel -replace '\u002F[^\u002F]+$', '')\n        az storage directory create --share-name $share --name $parentDir `\n            --account-name $StorageAccountName --account-key $key 2>$null\n        Upload-File $_.FullName \"site\u002Fwwwroot\u002F$rel\"\n    }\n}\n\n# Restart\naz logicapp restart --name $LogicAppName --resource-group $ResourceGroup\nWrite-Host \"Deployment complete. Wait ~60s for warmup.\"\n```\n\n> **Do NOT upload**: `local.settings.json`, `.vscode\u002F`, `workflow-designtime\u002F`, `.azurite\u002F`, `.gitignore`, `.funcignore`\n\n---\n\n## 3. Cloud Testing\n\n1. Read `TEST-REPORT.md` and run EVERY test scenario from it against the deployed Azure Logic App — happy path, error path, cross-workflow chain, timeout, resubmission — all of them, not a subset.\n2. If `BLACKBOX-TEST-REPORT.md` exists in the project root (generated by the local black box testing task), read it and re-execute ALL test cases from that report against the deployed Azure Logic App as well. Include those results in `CLOUD-TEST-REPORT.md`.\n3. Fix any cloud-specific issues via `az webapp config appsettings set` — NEVER edit `local.settings.json`.\n4. If the workflow uses File System triggers or actions, verify the Azure-side File System connection\u002Fauthentication works in cloud execution, not just local mounted execution.\n5. After all tests pass, UPDATE the ARM\u002FBicep template to include ALL changes made during testing so the template alone can reproduce the working deployment from scratch.\n\n### 3.1 Querying Workflow Run History\n\nUse API version `2024-11-01` (NOT `2024-02-02` which is unsupported for the hostruntime API):\n\n```\nGET https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns?api-version=2024-11-01\n```\n\nWith `az rest`:\n\n```bash\naz rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns?api-version=2024-11-01\" \\\n  --resource \"https:\u002F\u002Fmanagement.azure.com\"\n```\n\nTo get action details for a specific run:\n\n```bash\naz rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns\u002F{runId}\u002Factions?api-version=2024-11-01\" \\\n  --resource \"https:\u002F\u002Fmanagement.azure.com\"\n```\n\n> **Note**: The `--resource` flag is required when using `az rest` against the hostruntime path.\n\n### 3.2 Uploading Test Files (File System Trigger)\n\nFor workflows with File System triggers, upload test files to the **separate Azure Files share** (NOT the content share):\n\n```bash\n# Upload to the FileSystem connector share (e.g., 'edi-files'), NOT the content share\naz storage file upload --share-name edi-files \\\n  --source .\u002Ftest-input.edi --path \"In\u002Ftest-input.edi\" \\\n  --account-name $STORAGE_ACCOUNT --account-key $KEY\n```\n\n### 3.3 Cold Start and Warmup\n\nAfter deployment or restart, Logic Apps Standard on WS1 takes **60–180 seconds** to fully initialize. The hostruntime API returns `ServiceUnavailable` during this period. Wait before querying run history.\n\n---\n\n## 4. Cloud Test Report\n\nGenerate `CLOUD-TEST-REPORT.md` with:\n\n- This report is MANDATORY. Do NOT consider the cloud deployment\u002Ftesting task complete until `CLOUD-TEST-REPORT.md` has been created and populated.\n\n- Deployment details (resource names, regions, SKUs).\n- Cloud test results per scenario.\n- Final Bicep template summary.\n- Full step-by-step cloud deployment guide (reproducible from scratch).\n\n---\n\n## 5. Common Pitfalls (Lessons Learned)\n\n| Pitfall                                                                     | Symptom                                                         | Fix                                                                  |\n| --------------------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------- |\n| Missing `WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` + `WEBSITE_CONTENTSHARE` | Runtime crashes, ServiceUnavailable forever                     | Add both to Bicep appSettings (most common cause of startup failure) |\n| Callback URL passed via shell `--parameters \"url=$var\"`                     | URL truncated at first `&`                                      | Put in parameters JSON file                                          |\n| Empty callback URL in parameters file                                       | Next Bicep deploy wipes the setting                             | Always populate before deploy                                        |\n| Windows mount path `\u002Fmnt\u002F...`                                               | DeploymentFailed: \"MountPath must be sub-directory of \\\\mounts\" | Use `\u002Fmounts\u002F...`                                                    |\n| `az webapp deploy --type zip`                                               | Content share diverges from wwwroot                             | Use `az storage file upload` to content share                        |\n| `az webapp restart` for Logic Apps                                          | May not restart workflow runtime                                | Use `az logicapp restart`                                            |\n| Query runs with `api-version=2024-02-02`                                    | NoRegisteredProviderFound error                                 | Use `2024-11-01`                                                     |\n| `az rest` without `--resource` flag                                         | 401 Unauthorized on hostruntime URLs                            | Add `--resource \"https:\u002F\u002Fmanagement.azure.com\"`                      |\n| Settings set via `az webapp config appsettings set`                         | Wiped on next Bicep redeploy                                    | Put ALL settings in Bicep template                                   |\n\n```\n\n```\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,52,68,72,79,84,87,93,237,244,249,447,453,473,595,601,657,660,666,671,1705,1711,1723,2336,2342,2347,2837,2887,2890,2896,2960,2966,2986,2996,3008,3092,3097,3170,3198,3204,3216,3326,3332,3352,3355,3361,3373,3408,3411,3417,3698,3706],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"skill-cloud-deployment-and-testing",[49],{"type":50,"value":51},"text","Skill: Cloud Deployment and Testing",{"type":44,"tag":53,"props":54,"children":55},"blockquote",{},[56],{"type":44,"tag":57,"props":58,"children":59},"p",{},[60,66],{"type":44,"tag":61,"props":62,"children":63},"strong",{},[64],{"type":50,"value":65},"Purpose",{"type":50,"value":67},": Authoritative rules for the optional cloud deployment and testing task. Follow exactly.",{"type":44,"tag":69,"props":70,"children":71},"hr",{},[],{"type":44,"tag":73,"props":74,"children":76},"h2",{"id":75},"_1-task-nature",[77],{"type":50,"value":78},"1. Task Nature",{"type":44,"tag":57,"props":80,"children":81},{},[82],{"type":50,"value":83},"This task is OPTIONAL. The user decides whether to execute or skip it via the UI. It is excluded from \"Execute All\" and handled separately.",{"type":44,"tag":69,"props":85,"children":86},{},[],{"type":44,"tag":73,"props":88,"children":90},{"id":89},"_2-deployment-steps",[91],{"type":50,"value":92},"2. Deployment Steps",{"type":44,"tag":94,"props":95,"children":96},"ol",{},[97,108,125,143,148,192],{"type":44,"tag":98,"props":99,"children":100},"li",{},[101,106],{"type":44,"tag":61,"props":102,"children":103},{},[104],{"type":50,"value":105},"Generate ARM\u002FBicep template",{"type":50,"value":107}," that deploys the Logic App Standard resource with all required dependencies.",{"type":44,"tag":98,"props":109,"children":110},{},[111,123],{"type":44,"tag":61,"props":112,"children":113},{},[114,116],{"type":50,"value":115},"Deploy using ",{"type":44,"tag":117,"props":118,"children":120},"code",{"className":119},[],[121],{"type":50,"value":122},"az deployment group create",{"type":50,"value":124}," — do NOT use zip deploy for infrastructure.",{"type":44,"tag":98,"props":126,"children":127},{},[128,133,135,141],{"type":44,"tag":61,"props":129,"children":130},{},[131],{"type":50,"value":132},"ALL app settings MUST be in the Bicep template",{"type":50,"value":134}," — do NOT use ",{"type":44,"tag":117,"props":136,"children":138},{"className":137},[],[139],{"type":50,"value":140},"az webapp config appsettings set",{"type":50,"value":142}," as a separate step. Bicep redeploys REPLACE all settings. Any setting not in the template will be wiped on the next deploy.",{"type":44,"tag":98,"props":144,"children":145},{},[146],{"type":50,"value":147},"For File System scenarios, add the cloud-specific app settings and connection values required by Azure. Do NOT assume the local file-system mount setup is enough for cloud testing.",{"type":44,"tag":98,"props":149,"children":150},{},[151,153,158,160,166,168,174,176,182,184,190],{"type":50,"value":152},"For File System connections in Azure using the ",{"type":44,"tag":61,"props":154,"children":155},{},[156],{"type":50,"value":157},"built-in service provider",{"type":50,"value":159}," (",{"type":44,"tag":117,"props":161,"children":163},{"className":162},[],[164],{"type":50,"value":165},"\u002FserviceProviders\u002FFileSystem",{"type":50,"value":167},"), use Azure Files mounts — no username\u002Fpassword needed in ",{"type":44,"tag":117,"props":169,"children":171},{"className":170},[],[172],{"type":50,"value":173},"connections.json",{"type":50,"value":175},". The ",{"type":44,"tag":117,"props":177,"children":179},{"className":178},[],[180],{"type":50,"value":181},"mountPath",{"type":50,"value":183}," app setting and ",{"type":44,"tag":117,"props":185,"children":187},{"className":186},[],[188],{"type":50,"value":189},"azureStorageAccounts",{"type":50,"value":191}," site config handle authentication.",{"type":44,"tag":98,"props":193,"children":194},{},[195,197,203,205,211,213,219,221,227,229,235],{"type":50,"value":196},"For File System mount paths in Azure, do NOT use ",{"type":44,"tag":117,"props":198,"children":200},{"className":199},[],[201],{"type":50,"value":202},"\u002Fhome",{"type":50,"value":204},", ",{"type":44,"tag":117,"props":206,"children":208},{"className":207},[],[209],{"type":50,"value":210},"\u002Fhome\u002Fsite",{"type":50,"value":212},", or ",{"type":44,"tag":117,"props":214,"children":216},{"className":215},[],[217],{"type":50,"value":218},"\u002Fhome\u002Fsite\u002Fwwwroot",{"type":50,"value":220},". On Windows Logic Apps, mount paths must be under ",{"type":44,"tag":117,"props":222,"children":224},{"className":223},[],[225],{"type":50,"value":226},"\u002Fmounts\u002F",{"type":50,"value":228}," (e.g., ",{"type":44,"tag":117,"props":230,"children":232},{"className":231},[],[233],{"type":50,"value":234},"\u002Fmounts\u002Fedi-files",{"type":50,"value":236},").",{"type":44,"tag":238,"props":239,"children":241},"h3",{"id":240},"_21-critical-app-settings-rules",[242],{"type":50,"value":243},"2.1 Critical App Settings Rules",{"type":44,"tag":57,"props":245,"children":246},{},[247],{"type":50,"value":248},"These rules prevent the most common deployment failures:",{"type":44,"tag":250,"props":251,"children":252},"ul",{},[253,306,331,352,372,392,416],{"type":44,"tag":98,"props":254,"children":255},{},[256,273,275,280,282,288,290,296,298,304],{"type":44,"tag":61,"props":257,"children":258},{},[259,265,267],{"type":44,"tag":117,"props":260,"children":262},{"className":261},[],[263],{"type":50,"value":264},"FUNCTIONS_WORKER_RUNTIME",{"type":50,"value":266}," MUST be ",{"type":44,"tag":117,"props":268,"children":270},{"className":269},[],[271],{"type":50,"value":272},"dotnet",{"type":50,"value":274}," — Logic Apps Standard uses ",{"type":44,"tag":117,"props":276,"children":278},{"className":277},[],[279],{"type":50,"value":272},{"type":50,"value":281}," for in-process .NET custom code. Use the same value as ",{"type":44,"tag":117,"props":283,"children":285},{"className":284},[],[286],{"type":50,"value":287},"local.settings.json",{"type":50,"value":289},". Do NOT use ",{"type":44,"tag":117,"props":291,"children":293},{"className":292},[],[294],{"type":50,"value":295},"dotnet-isolated",{"type":50,"value":297}," or ",{"type":44,"tag":117,"props":299,"children":301},{"className":300},[],[302],{"type":50,"value":303},"node",{"type":50,"value":305},".",{"type":44,"tag":98,"props":307,"children":308},{},[309,318,320,329],{"type":44,"tag":61,"props":310,"children":311},{},[312],{"type":44,"tag":117,"props":313,"children":315},{"className":314},[],[316],{"type":50,"value":317},"WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",{"type":50,"value":319}," and ",{"type":44,"tag":61,"props":321,"children":322},{},[323],{"type":44,"tag":117,"props":324,"children":326},{"className":325},[],[327],{"type":50,"value":328},"WEBSITE_CONTENTSHARE",{"type":50,"value":330}," are REQUIRED for WS1 (WorkflowStandard) plans. Without them, the runtime won't start.",{"type":44,"tag":98,"props":332,"children":333},{},[334,342,344,350],{"type":44,"tag":61,"props":335,"children":336},{},[337],{"type":44,"tag":117,"props":338,"children":340},{"className":339},[],[341],{"type":50,"value":328},{"type":50,"value":343}," should be set to the Logic App name (e.g., ",{"type":44,"tag":117,"props":345,"children":347},{"className":346},[],[348],{"type":50,"value":349},"la-my-app",{"type":50,"value":351},"). Azure auto-creates this file share for runtime content.",{"type":44,"tag":98,"props":353,"children":354},{},[355,364,365,371],{"type":44,"tag":61,"props":356,"children":357},{},[358],{"type":44,"tag":117,"props":359,"children":361},{"className":360},[],[362],{"type":50,"value":363},"FUNCTIONS_EXTENSION_VERSION",{"type":50,"value":266},{"type":44,"tag":117,"props":366,"children":368},{"className":367},[],[369],{"type":50,"value":370},"~4",{"type":50,"value":305},{"type":44,"tag":98,"props":373,"children":374},{},[375,384,385,391],{"type":44,"tag":61,"props":376,"children":377},{},[378],{"type":44,"tag":117,"props":379,"children":381},{"className":380},[],[382],{"type":50,"value":383},"APP_KIND",{"type":50,"value":266},{"type":44,"tag":117,"props":386,"children":388},{"className":387},[],[389],{"type":50,"value":390},"workflowapp",{"type":50,"value":305},{"type":44,"tag":98,"props":393,"children":394},{},[395,406,408,414],{"type":44,"tag":61,"props":396,"children":397},{},[398,400],{"type":50,"value":399},"Never set ",{"type":44,"tag":117,"props":401,"children":403},{"className":402},[],[404],{"type":50,"value":405},"ProjectDirectoryPath",{"type":50,"value":407}," in cloud — it's for local ",{"type":44,"tag":117,"props":409,"children":411},{"className":410},[],[412],{"type":50,"value":413},"func start",{"type":50,"value":415}," only.",{"type":44,"tag":98,"props":417,"children":418},{},[419,438,440,445],{"type":44,"tag":61,"props":420,"children":421},{},[422,428,430,436],{"type":44,"tag":117,"props":423,"children":425},{"className":424},[],[426],{"type":50,"value":427},"@secure()",{"type":50,"value":429}," parameters with ",{"type":44,"tag":117,"props":431,"children":433},{"className":432},[],[434],{"type":50,"value":435},"&",{"type":50,"value":437}," characters",{"type":50,"value":439}," (like Integration Account callback URLs) must be placed in the Bicep parameters file, NOT passed inline via shell arguments. The ",{"type":44,"tag":117,"props":441,"children":443},{"className":442},[],[444],{"type":50,"value":435},{"type":50,"value":446}," is interpreted as a shell operator and truncates the value.",{"type":44,"tag":238,"props":448,"children":450},{"id":449},"_22-content-deployment-workflow-files",[451],{"type":50,"value":452},"2.2 Content Deployment (Workflow Files)",{"type":44,"tag":57,"props":454,"children":455},{},[456,458,463,465,471],{"type":50,"value":457},"After Bicep deploys infrastructure, deploy workflow content to the ",{"type":44,"tag":117,"props":459,"children":461},{"className":460},[],[462],{"type":50,"value":328},{"type":50,"value":464}," Azure Files share under ",{"type":44,"tag":117,"props":466,"children":468},{"className":467},[],[469],{"type":50,"value":470},"site\u002Fwwwroot\u002F",{"type":50,"value":472},":",{"type":44,"tag":250,"props":474,"children":475},{},[476,500,531,562,575],{"type":44,"tag":98,"props":477,"children":478},{},[479,490,492,498],{"type":44,"tag":61,"props":480,"children":481},{},[482,484],{"type":50,"value":483},"Use ",{"type":44,"tag":117,"props":485,"children":487},{"className":486},[],[488],{"type":50,"value":489},"az storage file upload",{"type":50,"value":491}," to the content share — NOT ",{"type":44,"tag":117,"props":493,"children":495},{"className":494},[],[496],{"type":50,"value":497},"az webapp deploy",{"type":50,"value":499}," or zip deploy. This gives atomic control over each file.",{"type":44,"tag":98,"props":501,"children":502},{},[503,505,511,512,517,518,524,525],{"type":50,"value":504},"Upload: ",{"type":44,"tag":117,"props":506,"children":508},{"className":507},[],[509],{"type":50,"value":510},"host.json",{"type":50,"value":204},{"type":44,"tag":117,"props":513,"children":515},{"className":514},[],[516],{"type":50,"value":173},{"type":50,"value":204},{"type":44,"tag":117,"props":519,"children":521},{"className":520},[],[522],{"type":50,"value":523},"{workflow-name}\u002Fworkflow.json",{"type":50,"value":204},{"type":44,"tag":117,"props":526,"children":528},{"className":527},[],[529],{"type":50,"value":530},"lib\u002Fcustom\u002F**",{"type":44,"tag":98,"props":532,"children":533},{},[534,536,541,542,548,549,555,556],{"type":50,"value":535},"Do NOT upload: ",{"type":44,"tag":117,"props":537,"children":539},{"className":538},[],[540],{"type":50,"value":287},{"type":50,"value":204},{"type":44,"tag":117,"props":543,"children":545},{"className":544},[],[546],{"type":50,"value":547},".vscode\u002F",{"type":50,"value":204},{"type":44,"tag":117,"props":550,"children":552},{"className":551},[],[553],{"type":50,"value":554},"workflow-designtime\u002F",{"type":50,"value":204},{"type":44,"tag":117,"props":557,"children":559},{"className":558},[],[560],{"type":50,"value":561},".azurite\u002F",{"type":44,"tag":98,"props":563,"children":564},{},[565,567,573],{"type":50,"value":566},"Do NOT create nested ",{"type":44,"tag":117,"props":568,"children":570},{"className":569},[],[571],{"type":50,"value":572},"site\u002Fwwwroot\u002Fsite\u002Fwwwroot\u002F",{"type":50,"value":574}," paths.",{"type":44,"tag":98,"props":576,"children":577},{},[578,580,586,588,594],{"type":50,"value":579},"After upload, restart with ",{"type":44,"tag":117,"props":581,"children":583},{"className":582},[],[584],{"type":50,"value":585},"az logicapp restart",{"type":50,"value":587}," (NOT ",{"type":44,"tag":117,"props":589,"children":591},{"className":590},[],[592],{"type":50,"value":593},"az webapp restart",{"type":50,"value":236},{"type":44,"tag":238,"props":596,"children":598},{"id":597},"_23-deployment-script-safety",[599],{"type":50,"value":600},"2.3 Deployment Script Safety",{"type":44,"tag":250,"props":602,"children":603},{},[604,609,621,632,652],{"type":44,"tag":98,"props":605,"children":606},{},[607],{"type":50,"value":608},"App settings with SAS URLs are applied from a JSON file or Bicep parameters, not inline shell arguments.",{"type":44,"tag":98,"props":610,"children":611},{},[612,614,619],{"type":50,"value":613},"Exclude the ",{"type":44,"tag":117,"props":615,"children":617},{"className":616},[],[618],{"type":50,"value":561},{"type":50,"value":620}," folder from any content upload or publish step.",{"type":44,"tag":98,"props":622,"children":623},{},[624,626,631],{"type":50,"value":625},"Runtime mount path in app settings matches ",{"type":44,"tag":117,"props":627,"children":629},{"className":628},[],[630],{"type":50,"value":173},{"type":50,"value":305},{"type":44,"tag":98,"props":633,"children":634},{},[635,637,643,645,650],{"type":50,"value":636},"File System mount path must not overlap with ",{"type":44,"tag":117,"props":638,"children":640},{"className":639},[],[641],{"type":50,"value":642},"site\u002Fwwwroot",{"type":50,"value":644}," or any parent ",{"type":44,"tag":117,"props":646,"children":648},{"className":647},[],[649],{"type":50,"value":202},{"type":50,"value":651}," content path.",{"type":44,"tag":98,"props":653,"children":654},{},[655],{"type":50,"value":656},"The deployment path does not depend on portal-only manual steps.",{"type":44,"tag":69,"props":658,"children":659},{},[],{"type":44,"tag":73,"props":661,"children":663},{"id":662},"_25-reference-bicep-template",[664],{"type":50,"value":665},"2.5 Reference Bicep Template",{"type":44,"tag":57,"props":667,"children":668},{},[669],{"type":50,"value":670},"Use this as the starting point for every Logic App Standard cloud deployment. Adapt parameters as needed.",{"type":44,"tag":672,"props":673,"children":677},"pre",{"className":674,"code":675,"language":23,"meta":676,"style":676},"language-bicep shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@description('Name of the Logic App Standard resource')\nparam logicAppName string\n\n@description('Name of the App Service Plan')\nparam appServicePlanName string\n\n@description('Name of the Storage Account (3-24 chars, lowercase, no hyphens)')\nparam storageAccountName string\n\n@description('Location for all resources')\nparam location string = resourceGroup().location\n\n\u002F\u002F ─── OPTIONAL: Integration Account (only if EDI\u002FB2B actions are used) ───\n@description('Integration Account resource ID (empty string if not used)')\nparam integrationAccountId string = ''\n\n@description('Integration Account callback URL (empty string if not used)')\n@secure()\nparam integrationAccountCallbackUrl string = ''\n\n\u002F\u002F ─── OPTIONAL: File System mount (only if FileSystem service provider is used) ───\n@description('File system mount path — MUST be under \u002Fmounts\u002F for Windows')\nparam fileSystemMountPath string = '\u002Fmounts\u002Ffilesystem'\n\n@description('Azure Files share name for file system connector')\nparam fileShareName string = 'app-files'\n\n\u002F\u002F ─── Storage Account ───\nresource storageAccount 'Microsoft.Storage\u002FstorageAccounts@2023-01-01' = {\n  name: storageAccountName\n  location: location\n  sku: { name: 'Standard_LRS' }\n  kind: 'StorageV2'\n  properties: {\n    supportsHttpsTrafficOnly: true\n    minimumTlsVersion: 'TLS1_2'\n  }\n}\n\n\u002F\u002F ─── Azure Files share (for FileSystem connector — omit if not needed) ───\nresource fileService 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices@2023-01-01' = {\n  parent: storageAccount\n  name: 'default'\n}\n\nresource fileShare 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices\u002Fshares@2023-01-01' = {\n  parent: fileService\n  name: fileShareName\n  properties: { shareQuota: 5 }\n}\n\n\u002F\u002F ─── App Service Plan (WS1) ───\nresource appServicePlan 'Microsoft.Web\u002Fserverfarms@2023-01-01' = {\n  name: appServicePlanName\n  location: location\n  sku: {\n    tier: 'WorkflowStandard'\n    name: 'WS1'\n  }\n  kind: 'elastic'\n  properties: { elasticScaleEnabled: false }\n}\n\n\u002F\u002F ─── Logic App Standard ───\nresource logicApp 'Microsoft.Web\u002Fsites@2023-01-01' = {\n  name: logicAppName\n  location: location\n  kind: 'functionapp,workflowapp'\n  identity: { type: 'SystemAssigned' }\n  properties: {\n    serverFarmId: appServicePlan.id\n    httpsOnly: true\n    siteConfig: {\n      netFrameworkVersion: 'v8.0'\n      use32BitWorkerProcess: false\n      appSettings: [\n        \u002F\u002F ── Required runtime settings ──\n        { name: 'AzureWebJobsStorage', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n        { name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n        { name: 'WEBSITE_CONTENTSHARE', value: logicAppName }\n        { name: 'FUNCTIONS_WORKER_RUNTIME', value: 'dotnet' }         \u002F\u002F Same as local.settings.json\n        { name: 'FUNCTIONS_INPROC_NET8_ENABLED', value: '1' }        \u002F\u002F Required for .NET 8 custom code\n        { name: 'APP_KIND', value: 'workflowapp' }                    \u002F\u002F MUST be 'workflowapp'\n        { name: 'AzureWebJobsFeatureFlags', value: 'EnableMultiLanguageWorker' }\n        { name: 'WEBSITE_NODE_DEFAULT_VERSION', value: '~18' }\n        { name: 'FUNCTIONS_EXTENSION_VERSION', value: '~4' }         \u002F\u002F MUST be '~4'\n        \u002F\u002F ── Workflow management settings ──\n        { name: 'WORKFLOWS_SUBSCRIPTION_ID', value: subscription().subscriptionId }\n        { name: 'WORKFLOWS_TENANT_ID', value: subscription().tenantId }\n        { name: 'WORKFLOWS_RESOURCE_GROUP_NAME', value: resourceGroup().name }\n        { name: 'WORKFLOWS_LOCATION_NAME', value: location }\n        { name: 'WORKFLOWS_MANAGEMENT_BASE_URI', value: environment().resourceManager }\n        \u002F\u002F ── Integration Account (omit both if not used) ──\n        { name: 'WORKFLOWS_INTEGRATION_ACCOUNT_ID', value: integrationAccountId }\n        { name: 'WORKFLOW_INTEGRATION_ACCOUNT_CALLBACK_URL', value: integrationAccountCallbackUrl }\n        \u002F\u002F ── FileSystem connector (omit if not used) ──\n        { name: 'FileSystem_mountPath', value: fileSystemMountPath }\n      ]\n      \u002F\u002F ── Azure Files mount (omit entire block if FileSystem connector not used) ──\n      azureStorageAccounts: {\n        appfiles: {\n          type: 'AzureFiles'\n          accountName: storageAccount.name\n          shareName: fileShareName\n          mountPath: fileSystemMountPath          \u002F\u002F MUST match FileSystem_mountPath\n          accessKey: storageAccount.listKeys().keys[0].value\n        }\n      }\n    }\n  }\n}\n\noutput logicAppName string = logicApp.name\noutput logicAppDefaultHostName string = logicApp.properties.defaultHostName\noutput storageAccountName string = storageAccount.name\noutput logicAppResourceId string = logicApp.id\n","",[678],{"type":44,"tag":117,"props":679,"children":680},{"__ignoreMap":676},[681,692,701,711,720,729,736,744,753,761,770,779,787,796,805,814,822,831,840,849,857,866,875,884,892,901,910,918,927,936,945,954,963,972,981,990,999,1008,1017,1025,1034,1043,1052,1061,1069,1077,1086,1095,1104,1113,1121,1129,1138,1147,1156,1164,1173,1182,1191,1199,1208,1217,1225,1233,1242,1251,1260,1268,1277,1286,1294,1303,1312,1321,1330,1339,1348,1357,1366,1375,1384,1393,1402,1411,1420,1429,1438,1447,1456,1465,1474,1483,1492,1501,1510,1519,1528,1537,1546,1555,1564,1573,1582,1591,1600,1609,1618,1627,1636,1645,1653,1661,1669,1678,1687,1696],{"type":44,"tag":682,"props":683,"children":686},"span",{"class":684,"line":685},"line",1,[687],{"type":44,"tag":682,"props":688,"children":689},{},[690],{"type":50,"value":691},"@description('Name of the Logic App Standard resource')\n",{"type":44,"tag":682,"props":693,"children":695},{"class":684,"line":694},2,[696],{"type":44,"tag":682,"props":697,"children":698},{},[699],{"type":50,"value":700},"param logicAppName string\n",{"type":44,"tag":682,"props":702,"children":704},{"class":684,"line":703},3,[705],{"type":44,"tag":682,"props":706,"children":708},{"emptyLinePlaceholder":707},true,[709],{"type":50,"value":710},"\n",{"type":44,"tag":682,"props":712,"children":714},{"class":684,"line":713},4,[715],{"type":44,"tag":682,"props":716,"children":717},{},[718],{"type":50,"value":719},"@description('Name of the App Service Plan')\n",{"type":44,"tag":682,"props":721,"children":723},{"class":684,"line":722},5,[724],{"type":44,"tag":682,"props":725,"children":726},{},[727],{"type":50,"value":728},"param appServicePlanName string\n",{"type":44,"tag":682,"props":730,"children":731},{"class":684,"line":27},[732],{"type":44,"tag":682,"props":733,"children":734},{"emptyLinePlaceholder":707},[735],{"type":50,"value":710},{"type":44,"tag":682,"props":737,"children":738},{"class":684,"line":31},[739],{"type":44,"tag":682,"props":740,"children":741},{},[742],{"type":50,"value":743},"@description('Name of the Storage Account (3-24 chars, lowercase, no hyphens)')\n",{"type":44,"tag":682,"props":745,"children":747},{"class":684,"line":746},8,[748],{"type":44,"tag":682,"props":749,"children":750},{},[751],{"type":50,"value":752},"param storageAccountName string\n",{"type":44,"tag":682,"props":754,"children":756},{"class":684,"line":755},9,[757],{"type":44,"tag":682,"props":758,"children":759},{"emptyLinePlaceholder":707},[760],{"type":50,"value":710},{"type":44,"tag":682,"props":762,"children":764},{"class":684,"line":763},10,[765],{"type":44,"tag":682,"props":766,"children":767},{},[768],{"type":50,"value":769},"@description('Location for all resources')\n",{"type":44,"tag":682,"props":771,"children":773},{"class":684,"line":772},11,[774],{"type":44,"tag":682,"props":775,"children":776},{},[777],{"type":50,"value":778},"param location string = resourceGroup().location\n",{"type":44,"tag":682,"props":780,"children":782},{"class":684,"line":781},12,[783],{"type":44,"tag":682,"props":784,"children":785},{"emptyLinePlaceholder":707},[786],{"type":50,"value":710},{"type":44,"tag":682,"props":788,"children":790},{"class":684,"line":789},13,[791],{"type":44,"tag":682,"props":792,"children":793},{},[794],{"type":50,"value":795},"\u002F\u002F ─── OPTIONAL: Integration Account (only if EDI\u002FB2B actions are used) ───\n",{"type":44,"tag":682,"props":797,"children":799},{"class":684,"line":798},14,[800],{"type":44,"tag":682,"props":801,"children":802},{},[803],{"type":50,"value":804},"@description('Integration Account resource ID (empty string if not used)')\n",{"type":44,"tag":682,"props":806,"children":808},{"class":684,"line":807},15,[809],{"type":44,"tag":682,"props":810,"children":811},{},[812],{"type":50,"value":813},"param integrationAccountId string = ''\n",{"type":44,"tag":682,"props":815,"children":817},{"class":684,"line":816},16,[818],{"type":44,"tag":682,"props":819,"children":820},{"emptyLinePlaceholder":707},[821],{"type":50,"value":710},{"type":44,"tag":682,"props":823,"children":825},{"class":684,"line":824},17,[826],{"type":44,"tag":682,"props":827,"children":828},{},[829],{"type":50,"value":830},"@description('Integration Account callback URL (empty string if not used)')\n",{"type":44,"tag":682,"props":832,"children":834},{"class":684,"line":833},18,[835],{"type":44,"tag":682,"props":836,"children":837},{},[838],{"type":50,"value":839},"@secure()\n",{"type":44,"tag":682,"props":841,"children":843},{"class":684,"line":842},19,[844],{"type":44,"tag":682,"props":845,"children":846},{},[847],{"type":50,"value":848},"param integrationAccountCallbackUrl string = ''\n",{"type":44,"tag":682,"props":850,"children":852},{"class":684,"line":851},20,[853],{"type":44,"tag":682,"props":854,"children":855},{"emptyLinePlaceholder":707},[856],{"type":50,"value":710},{"type":44,"tag":682,"props":858,"children":860},{"class":684,"line":859},21,[861],{"type":44,"tag":682,"props":862,"children":863},{},[864],{"type":50,"value":865},"\u002F\u002F ─── OPTIONAL: File System mount (only if FileSystem service provider is used) ───\n",{"type":44,"tag":682,"props":867,"children":869},{"class":684,"line":868},22,[870],{"type":44,"tag":682,"props":871,"children":872},{},[873],{"type":50,"value":874},"@description('File system mount path — MUST be under \u002Fmounts\u002F for Windows')\n",{"type":44,"tag":682,"props":876,"children":878},{"class":684,"line":877},23,[879],{"type":44,"tag":682,"props":880,"children":881},{},[882],{"type":50,"value":883},"param fileSystemMountPath string = '\u002Fmounts\u002Ffilesystem'\n",{"type":44,"tag":682,"props":885,"children":887},{"class":684,"line":886},24,[888],{"type":44,"tag":682,"props":889,"children":890},{"emptyLinePlaceholder":707},[891],{"type":50,"value":710},{"type":44,"tag":682,"props":893,"children":895},{"class":684,"line":894},25,[896],{"type":44,"tag":682,"props":897,"children":898},{},[899],{"type":50,"value":900},"@description('Azure Files share name for file system connector')\n",{"type":44,"tag":682,"props":902,"children":904},{"class":684,"line":903},26,[905],{"type":44,"tag":682,"props":906,"children":907},{},[908],{"type":50,"value":909},"param fileShareName string = 'app-files'\n",{"type":44,"tag":682,"props":911,"children":913},{"class":684,"line":912},27,[914],{"type":44,"tag":682,"props":915,"children":916},{"emptyLinePlaceholder":707},[917],{"type":50,"value":710},{"type":44,"tag":682,"props":919,"children":921},{"class":684,"line":920},28,[922],{"type":44,"tag":682,"props":923,"children":924},{},[925],{"type":50,"value":926},"\u002F\u002F ─── Storage Account ───\n",{"type":44,"tag":682,"props":928,"children":930},{"class":684,"line":929},29,[931],{"type":44,"tag":682,"props":932,"children":933},{},[934],{"type":50,"value":935},"resource storageAccount 'Microsoft.Storage\u002FstorageAccounts@2023-01-01' = {\n",{"type":44,"tag":682,"props":937,"children":939},{"class":684,"line":938},30,[940],{"type":44,"tag":682,"props":941,"children":942},{},[943],{"type":50,"value":944},"  name: storageAccountName\n",{"type":44,"tag":682,"props":946,"children":948},{"class":684,"line":947},31,[949],{"type":44,"tag":682,"props":950,"children":951},{},[952],{"type":50,"value":953},"  location: location\n",{"type":44,"tag":682,"props":955,"children":957},{"class":684,"line":956},32,[958],{"type":44,"tag":682,"props":959,"children":960},{},[961],{"type":50,"value":962},"  sku: { name: 'Standard_LRS' }\n",{"type":44,"tag":682,"props":964,"children":966},{"class":684,"line":965},33,[967],{"type":44,"tag":682,"props":968,"children":969},{},[970],{"type":50,"value":971},"  kind: 'StorageV2'\n",{"type":44,"tag":682,"props":973,"children":975},{"class":684,"line":974},34,[976],{"type":44,"tag":682,"props":977,"children":978},{},[979],{"type":50,"value":980},"  properties: {\n",{"type":44,"tag":682,"props":982,"children":984},{"class":684,"line":983},35,[985],{"type":44,"tag":682,"props":986,"children":987},{},[988],{"type":50,"value":989},"    supportsHttpsTrafficOnly: true\n",{"type":44,"tag":682,"props":991,"children":993},{"class":684,"line":992},36,[994],{"type":44,"tag":682,"props":995,"children":996},{},[997],{"type":50,"value":998},"    minimumTlsVersion: 'TLS1_2'\n",{"type":44,"tag":682,"props":1000,"children":1002},{"class":684,"line":1001},37,[1003],{"type":44,"tag":682,"props":1004,"children":1005},{},[1006],{"type":50,"value":1007},"  }\n",{"type":44,"tag":682,"props":1009,"children":1011},{"class":684,"line":1010},38,[1012],{"type":44,"tag":682,"props":1013,"children":1014},{},[1015],{"type":50,"value":1016},"}\n",{"type":44,"tag":682,"props":1018,"children":1020},{"class":684,"line":1019},39,[1021],{"type":44,"tag":682,"props":1022,"children":1023},{"emptyLinePlaceholder":707},[1024],{"type":50,"value":710},{"type":44,"tag":682,"props":1026,"children":1028},{"class":684,"line":1027},40,[1029],{"type":44,"tag":682,"props":1030,"children":1031},{},[1032],{"type":50,"value":1033},"\u002F\u002F ─── Azure Files share (for FileSystem connector — omit if not needed) ───\n",{"type":44,"tag":682,"props":1035,"children":1037},{"class":684,"line":1036},41,[1038],{"type":44,"tag":682,"props":1039,"children":1040},{},[1041],{"type":50,"value":1042},"resource fileService 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices@2023-01-01' = {\n",{"type":44,"tag":682,"props":1044,"children":1046},{"class":684,"line":1045},42,[1047],{"type":44,"tag":682,"props":1048,"children":1049},{},[1050],{"type":50,"value":1051},"  parent: storageAccount\n",{"type":44,"tag":682,"props":1053,"children":1055},{"class":684,"line":1054},43,[1056],{"type":44,"tag":682,"props":1057,"children":1058},{},[1059],{"type":50,"value":1060},"  name: 'default'\n",{"type":44,"tag":682,"props":1062,"children":1064},{"class":684,"line":1063},44,[1065],{"type":44,"tag":682,"props":1066,"children":1067},{},[1068],{"type":50,"value":1016},{"type":44,"tag":682,"props":1070,"children":1072},{"class":684,"line":1071},45,[1073],{"type":44,"tag":682,"props":1074,"children":1075},{"emptyLinePlaceholder":707},[1076],{"type":50,"value":710},{"type":44,"tag":682,"props":1078,"children":1080},{"class":684,"line":1079},46,[1081],{"type":44,"tag":682,"props":1082,"children":1083},{},[1084],{"type":50,"value":1085},"resource fileShare 'Microsoft.Storage\u002FstorageAccounts\u002FfileServices\u002Fshares@2023-01-01' = {\n",{"type":44,"tag":682,"props":1087,"children":1089},{"class":684,"line":1088},47,[1090],{"type":44,"tag":682,"props":1091,"children":1092},{},[1093],{"type":50,"value":1094},"  parent: fileService\n",{"type":44,"tag":682,"props":1096,"children":1098},{"class":684,"line":1097},48,[1099],{"type":44,"tag":682,"props":1100,"children":1101},{},[1102],{"type":50,"value":1103},"  name: fileShareName\n",{"type":44,"tag":682,"props":1105,"children":1107},{"class":684,"line":1106},49,[1108],{"type":44,"tag":682,"props":1109,"children":1110},{},[1111],{"type":50,"value":1112},"  properties: { shareQuota: 5 }\n",{"type":44,"tag":682,"props":1114,"children":1116},{"class":684,"line":1115},50,[1117],{"type":44,"tag":682,"props":1118,"children":1119},{},[1120],{"type":50,"value":1016},{"type":44,"tag":682,"props":1122,"children":1124},{"class":684,"line":1123},51,[1125],{"type":44,"tag":682,"props":1126,"children":1127},{"emptyLinePlaceholder":707},[1128],{"type":50,"value":710},{"type":44,"tag":682,"props":1130,"children":1132},{"class":684,"line":1131},52,[1133],{"type":44,"tag":682,"props":1134,"children":1135},{},[1136],{"type":50,"value":1137},"\u002F\u002F ─── App Service Plan (WS1) ───\n",{"type":44,"tag":682,"props":1139,"children":1141},{"class":684,"line":1140},53,[1142],{"type":44,"tag":682,"props":1143,"children":1144},{},[1145],{"type":50,"value":1146},"resource appServicePlan 'Microsoft.Web\u002Fserverfarms@2023-01-01' = {\n",{"type":44,"tag":682,"props":1148,"children":1150},{"class":684,"line":1149},54,[1151],{"type":44,"tag":682,"props":1152,"children":1153},{},[1154],{"type":50,"value":1155},"  name: appServicePlanName\n",{"type":44,"tag":682,"props":1157,"children":1159},{"class":684,"line":1158},55,[1160],{"type":44,"tag":682,"props":1161,"children":1162},{},[1163],{"type":50,"value":953},{"type":44,"tag":682,"props":1165,"children":1167},{"class":684,"line":1166},56,[1168],{"type":44,"tag":682,"props":1169,"children":1170},{},[1171],{"type":50,"value":1172},"  sku: {\n",{"type":44,"tag":682,"props":1174,"children":1176},{"class":684,"line":1175},57,[1177],{"type":44,"tag":682,"props":1178,"children":1179},{},[1180],{"type":50,"value":1181},"    tier: 'WorkflowStandard'\n",{"type":44,"tag":682,"props":1183,"children":1185},{"class":684,"line":1184},58,[1186],{"type":44,"tag":682,"props":1187,"children":1188},{},[1189],{"type":50,"value":1190},"    name: 'WS1'\n",{"type":44,"tag":682,"props":1192,"children":1194},{"class":684,"line":1193},59,[1195],{"type":44,"tag":682,"props":1196,"children":1197},{},[1198],{"type":50,"value":1007},{"type":44,"tag":682,"props":1200,"children":1202},{"class":684,"line":1201},60,[1203],{"type":44,"tag":682,"props":1204,"children":1205},{},[1206],{"type":50,"value":1207},"  kind: 'elastic'\n",{"type":44,"tag":682,"props":1209,"children":1211},{"class":684,"line":1210},61,[1212],{"type":44,"tag":682,"props":1213,"children":1214},{},[1215],{"type":50,"value":1216},"  properties: { elasticScaleEnabled: false }\n",{"type":44,"tag":682,"props":1218,"children":1220},{"class":684,"line":1219},62,[1221],{"type":44,"tag":682,"props":1222,"children":1223},{},[1224],{"type":50,"value":1016},{"type":44,"tag":682,"props":1226,"children":1228},{"class":684,"line":1227},63,[1229],{"type":44,"tag":682,"props":1230,"children":1231},{"emptyLinePlaceholder":707},[1232],{"type":50,"value":710},{"type":44,"tag":682,"props":1234,"children":1236},{"class":684,"line":1235},64,[1237],{"type":44,"tag":682,"props":1238,"children":1239},{},[1240],{"type":50,"value":1241},"\u002F\u002F ─── Logic App Standard ───\n",{"type":44,"tag":682,"props":1243,"children":1245},{"class":684,"line":1244},65,[1246],{"type":44,"tag":682,"props":1247,"children":1248},{},[1249],{"type":50,"value":1250},"resource logicApp 'Microsoft.Web\u002Fsites@2023-01-01' = {\n",{"type":44,"tag":682,"props":1252,"children":1254},{"class":684,"line":1253},66,[1255],{"type":44,"tag":682,"props":1256,"children":1257},{},[1258],{"type":50,"value":1259},"  name: logicAppName\n",{"type":44,"tag":682,"props":1261,"children":1263},{"class":684,"line":1262},67,[1264],{"type":44,"tag":682,"props":1265,"children":1266},{},[1267],{"type":50,"value":953},{"type":44,"tag":682,"props":1269,"children":1271},{"class":684,"line":1270},68,[1272],{"type":44,"tag":682,"props":1273,"children":1274},{},[1275],{"type":50,"value":1276},"  kind: 'functionapp,workflowapp'\n",{"type":44,"tag":682,"props":1278,"children":1280},{"class":684,"line":1279},69,[1281],{"type":44,"tag":682,"props":1282,"children":1283},{},[1284],{"type":50,"value":1285},"  identity: { type: 'SystemAssigned' }\n",{"type":44,"tag":682,"props":1287,"children":1289},{"class":684,"line":1288},70,[1290],{"type":44,"tag":682,"props":1291,"children":1292},{},[1293],{"type":50,"value":980},{"type":44,"tag":682,"props":1295,"children":1297},{"class":684,"line":1296},71,[1298],{"type":44,"tag":682,"props":1299,"children":1300},{},[1301],{"type":50,"value":1302},"    serverFarmId: appServicePlan.id\n",{"type":44,"tag":682,"props":1304,"children":1306},{"class":684,"line":1305},72,[1307],{"type":44,"tag":682,"props":1308,"children":1309},{},[1310],{"type":50,"value":1311},"    httpsOnly: true\n",{"type":44,"tag":682,"props":1313,"children":1315},{"class":684,"line":1314},73,[1316],{"type":44,"tag":682,"props":1317,"children":1318},{},[1319],{"type":50,"value":1320},"    siteConfig: {\n",{"type":44,"tag":682,"props":1322,"children":1324},{"class":684,"line":1323},74,[1325],{"type":44,"tag":682,"props":1326,"children":1327},{},[1328],{"type":50,"value":1329},"      netFrameworkVersion: 'v8.0'\n",{"type":44,"tag":682,"props":1331,"children":1333},{"class":684,"line":1332},75,[1334],{"type":44,"tag":682,"props":1335,"children":1336},{},[1337],{"type":50,"value":1338},"      use32BitWorkerProcess: false\n",{"type":44,"tag":682,"props":1340,"children":1342},{"class":684,"line":1341},76,[1343],{"type":44,"tag":682,"props":1344,"children":1345},{},[1346],{"type":50,"value":1347},"      appSettings: [\n",{"type":44,"tag":682,"props":1349,"children":1351},{"class":684,"line":1350},77,[1352],{"type":44,"tag":682,"props":1353,"children":1354},{},[1355],{"type":50,"value":1356},"        \u002F\u002F ── Required runtime settings ──\n",{"type":44,"tag":682,"props":1358,"children":1360},{"class":684,"line":1359},78,[1361],{"type":44,"tag":682,"props":1362,"children":1363},{},[1364],{"type":50,"value":1365},"        { name: 'AzureWebJobsStorage', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n",{"type":44,"tag":682,"props":1367,"children":1369},{"class":684,"line":1368},79,[1370],{"type":44,"tag":682,"props":1371,"children":1372},{},[1373],{"type":50,"value":1374},"        { name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING', value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${storageAccount.listKeys().keys[0].value};EndpointSuffix=core.windows.net' }\n",{"type":44,"tag":682,"props":1376,"children":1378},{"class":684,"line":1377},80,[1379],{"type":44,"tag":682,"props":1380,"children":1381},{},[1382],{"type":50,"value":1383},"        { name: 'WEBSITE_CONTENTSHARE', value: logicAppName }\n",{"type":44,"tag":682,"props":1385,"children":1387},{"class":684,"line":1386},81,[1388],{"type":44,"tag":682,"props":1389,"children":1390},{},[1391],{"type":50,"value":1392},"        { name: 'FUNCTIONS_WORKER_RUNTIME', value: 'dotnet' }         \u002F\u002F Same as local.settings.json\n",{"type":44,"tag":682,"props":1394,"children":1396},{"class":684,"line":1395},82,[1397],{"type":44,"tag":682,"props":1398,"children":1399},{},[1400],{"type":50,"value":1401},"        { name: 'FUNCTIONS_INPROC_NET8_ENABLED', value: '1' }        \u002F\u002F Required for .NET 8 custom code\n",{"type":44,"tag":682,"props":1403,"children":1405},{"class":684,"line":1404},83,[1406],{"type":44,"tag":682,"props":1407,"children":1408},{},[1409],{"type":50,"value":1410},"        { name: 'APP_KIND', value: 'workflowapp' }                    \u002F\u002F MUST be 'workflowapp'\n",{"type":44,"tag":682,"props":1412,"children":1414},{"class":684,"line":1413},84,[1415],{"type":44,"tag":682,"props":1416,"children":1417},{},[1418],{"type":50,"value":1419},"        { name: 'AzureWebJobsFeatureFlags', value: 'EnableMultiLanguageWorker' }\n",{"type":44,"tag":682,"props":1421,"children":1423},{"class":684,"line":1422},85,[1424],{"type":44,"tag":682,"props":1425,"children":1426},{},[1427],{"type":50,"value":1428},"        { name: 'WEBSITE_NODE_DEFAULT_VERSION', value: '~18' }\n",{"type":44,"tag":682,"props":1430,"children":1432},{"class":684,"line":1431},86,[1433],{"type":44,"tag":682,"props":1434,"children":1435},{},[1436],{"type":50,"value":1437},"        { name: 'FUNCTIONS_EXTENSION_VERSION', value: '~4' }         \u002F\u002F MUST be '~4'\n",{"type":44,"tag":682,"props":1439,"children":1441},{"class":684,"line":1440},87,[1442],{"type":44,"tag":682,"props":1443,"children":1444},{},[1445],{"type":50,"value":1446},"        \u002F\u002F ── Workflow management settings ──\n",{"type":44,"tag":682,"props":1448,"children":1450},{"class":684,"line":1449},88,[1451],{"type":44,"tag":682,"props":1452,"children":1453},{},[1454],{"type":50,"value":1455},"        { name: 'WORKFLOWS_SUBSCRIPTION_ID', value: subscription().subscriptionId }\n",{"type":44,"tag":682,"props":1457,"children":1459},{"class":684,"line":1458},89,[1460],{"type":44,"tag":682,"props":1461,"children":1462},{},[1463],{"type":50,"value":1464},"        { name: 'WORKFLOWS_TENANT_ID', value: subscription().tenantId }\n",{"type":44,"tag":682,"props":1466,"children":1468},{"class":684,"line":1467},90,[1469],{"type":44,"tag":682,"props":1470,"children":1471},{},[1472],{"type":50,"value":1473},"        { name: 'WORKFLOWS_RESOURCE_GROUP_NAME', value: resourceGroup().name }\n",{"type":44,"tag":682,"props":1475,"children":1477},{"class":684,"line":1476},91,[1478],{"type":44,"tag":682,"props":1479,"children":1480},{},[1481],{"type":50,"value":1482},"        { name: 'WORKFLOWS_LOCATION_NAME', value: location }\n",{"type":44,"tag":682,"props":1484,"children":1486},{"class":684,"line":1485},92,[1487],{"type":44,"tag":682,"props":1488,"children":1489},{},[1490],{"type":50,"value":1491},"        { name: 'WORKFLOWS_MANAGEMENT_BASE_URI', value: environment().resourceManager }\n",{"type":44,"tag":682,"props":1493,"children":1495},{"class":684,"line":1494},93,[1496],{"type":44,"tag":682,"props":1497,"children":1498},{},[1499],{"type":50,"value":1500},"        \u002F\u002F ── Integration Account (omit both if not used) ──\n",{"type":44,"tag":682,"props":1502,"children":1504},{"class":684,"line":1503},94,[1505],{"type":44,"tag":682,"props":1506,"children":1507},{},[1508],{"type":50,"value":1509},"        { name: 'WORKFLOWS_INTEGRATION_ACCOUNT_ID', value: integrationAccountId }\n",{"type":44,"tag":682,"props":1511,"children":1513},{"class":684,"line":1512},95,[1514],{"type":44,"tag":682,"props":1515,"children":1516},{},[1517],{"type":50,"value":1518},"        { name: 'WORKFLOW_INTEGRATION_ACCOUNT_CALLBACK_URL', value: integrationAccountCallbackUrl }\n",{"type":44,"tag":682,"props":1520,"children":1522},{"class":684,"line":1521},96,[1523],{"type":44,"tag":682,"props":1524,"children":1525},{},[1526],{"type":50,"value":1527},"        \u002F\u002F ── FileSystem connector (omit if not used) ──\n",{"type":44,"tag":682,"props":1529,"children":1531},{"class":684,"line":1530},97,[1532],{"type":44,"tag":682,"props":1533,"children":1534},{},[1535],{"type":50,"value":1536},"        { name: 'FileSystem_mountPath', value: fileSystemMountPath }\n",{"type":44,"tag":682,"props":1538,"children":1540},{"class":684,"line":1539},98,[1541],{"type":44,"tag":682,"props":1542,"children":1543},{},[1544],{"type":50,"value":1545},"      ]\n",{"type":44,"tag":682,"props":1547,"children":1549},{"class":684,"line":1548},99,[1550],{"type":44,"tag":682,"props":1551,"children":1552},{},[1553],{"type":50,"value":1554},"      \u002F\u002F ── Azure Files mount (omit entire block if FileSystem connector not used) ──\n",{"type":44,"tag":682,"props":1556,"children":1558},{"class":684,"line":1557},100,[1559],{"type":44,"tag":682,"props":1560,"children":1561},{},[1562],{"type":50,"value":1563},"      azureStorageAccounts: {\n",{"type":44,"tag":682,"props":1565,"children":1567},{"class":684,"line":1566},101,[1568],{"type":44,"tag":682,"props":1569,"children":1570},{},[1571],{"type":50,"value":1572},"        appfiles: {\n",{"type":44,"tag":682,"props":1574,"children":1576},{"class":684,"line":1575},102,[1577],{"type":44,"tag":682,"props":1578,"children":1579},{},[1580],{"type":50,"value":1581},"          type: 'AzureFiles'\n",{"type":44,"tag":682,"props":1583,"children":1585},{"class":684,"line":1584},103,[1586],{"type":44,"tag":682,"props":1587,"children":1588},{},[1589],{"type":50,"value":1590},"          accountName: storageAccount.name\n",{"type":44,"tag":682,"props":1592,"children":1594},{"class":684,"line":1593},104,[1595],{"type":44,"tag":682,"props":1596,"children":1597},{},[1598],{"type":50,"value":1599},"          shareName: fileShareName\n",{"type":44,"tag":682,"props":1601,"children":1603},{"class":684,"line":1602},105,[1604],{"type":44,"tag":682,"props":1605,"children":1606},{},[1607],{"type":50,"value":1608},"          mountPath: fileSystemMountPath          \u002F\u002F MUST match FileSystem_mountPath\n",{"type":44,"tag":682,"props":1610,"children":1612},{"class":684,"line":1611},106,[1613],{"type":44,"tag":682,"props":1614,"children":1615},{},[1616],{"type":50,"value":1617},"          accessKey: storageAccount.listKeys().keys[0].value\n",{"type":44,"tag":682,"props":1619,"children":1621},{"class":684,"line":1620},107,[1622],{"type":44,"tag":682,"props":1623,"children":1624},{},[1625],{"type":50,"value":1626},"        }\n",{"type":44,"tag":682,"props":1628,"children":1630},{"class":684,"line":1629},108,[1631],{"type":44,"tag":682,"props":1632,"children":1633},{},[1634],{"type":50,"value":1635},"      }\n",{"type":44,"tag":682,"props":1637,"children":1639},{"class":684,"line":1638},109,[1640],{"type":44,"tag":682,"props":1641,"children":1642},{},[1643],{"type":50,"value":1644},"    }\n",{"type":44,"tag":682,"props":1646,"children":1648},{"class":684,"line":1647},110,[1649],{"type":44,"tag":682,"props":1650,"children":1651},{},[1652],{"type":50,"value":1007},{"type":44,"tag":682,"props":1654,"children":1656},{"class":684,"line":1655},111,[1657],{"type":44,"tag":682,"props":1658,"children":1659},{},[1660],{"type":50,"value":1016},{"type":44,"tag":682,"props":1662,"children":1664},{"class":684,"line":1663},112,[1665],{"type":44,"tag":682,"props":1666,"children":1667},{"emptyLinePlaceholder":707},[1668],{"type":50,"value":710},{"type":44,"tag":682,"props":1670,"children":1672},{"class":684,"line":1671},113,[1673],{"type":44,"tag":682,"props":1674,"children":1675},{},[1676],{"type":50,"value":1677},"output logicAppName string = logicApp.name\n",{"type":44,"tag":682,"props":1679,"children":1681},{"class":684,"line":1680},114,[1682],{"type":44,"tag":682,"props":1683,"children":1684},{},[1685],{"type":50,"value":1686},"output logicAppDefaultHostName string = logicApp.properties.defaultHostName\n",{"type":44,"tag":682,"props":1688,"children":1690},{"class":684,"line":1689},115,[1691],{"type":44,"tag":682,"props":1692,"children":1693},{},[1694],{"type":50,"value":1695},"output storageAccountName string = storageAccount.name\n",{"type":44,"tag":682,"props":1697,"children":1699},{"class":684,"line":1698},116,[1700],{"type":44,"tag":682,"props":1701,"children":1702},{},[1703],{"type":50,"value":1704},"output logicAppResourceId string = logicApp.id\n",{"type":44,"tag":238,"props":1706,"children":1708},{"id":1707},"_26-reference-parameters-file",[1709],{"type":50,"value":1710},"2.6 Reference Parameters File",{"type":44,"tag":57,"props":1712,"children":1713},{},[1714,1716,1721],{"type":50,"value":1715},"Put the callback URL here — NOT in shell arguments — because it contains ",{"type":44,"tag":117,"props":1717,"children":1719},{"className":1718},[],[1720],{"type":50,"value":435},{"type":50,"value":1722}," characters.",{"type":44,"tag":672,"props":1724,"children":1728},{"className":1725,"code":1726,"language":1727,"meta":676,"style":676},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentParameters.json#\",\n    \"contentVersion\": \"1.0.0.0\",\n    \"parameters\": {\n        \"logicAppName\": { \"value\": \"la-my-app\" },\n        \"appServicePlanName\": { \"value\": \"asp-my-app\" },\n        \"storageAccountName\": { \"value\": \"stmyapp\" },\n        \"location\": { \"value\": \"eastus\" },\n        \"integrationAccountId\": {\n            \"value\": \"\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Logic\u002FintegrationAccounts\u002F{name}\"\n        },\n        \"integrationAccountCallbackUrl\": {\n            \"value\": \"https:\u002F\u002Fprod-XX.eastus.logic.azure.com:443\u002FintegrationAccounts\u002F...?api-version=2015-08-01-preview&sp=%2F%2F%2A&sv=1.0&sig=...\"\n        },\n        \"fileSystemMountPath\": { \"value\": \"\u002Fmounts\u002Fedi-files\" },\n        \"fileShareName\": { \"value\": \"edi-files\" }\n    }\n}\n","json",[1729],{"type":44,"tag":117,"props":1730,"children":1731},{"__ignoreMap":676},[1732,1741,1784,1821,1846,1908,1965,2022,2079,2103,2137,2145,2169,2201,2208,2264,2322,2329],{"type":44,"tag":682,"props":1733,"children":1734},{"class":684,"line":685},[1735],{"type":44,"tag":682,"props":1736,"children":1738},{"style":1737},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1739],{"type":50,"value":1740},"{\n",{"type":44,"tag":682,"props":1742,"children":1743},{"class":684,"line":694},[1744,1749,1755,1760,1764,1769,1775,1779],{"type":44,"tag":682,"props":1745,"children":1746},{"style":1737},[1747],{"type":50,"value":1748},"    \"",{"type":44,"tag":682,"props":1750,"children":1752},{"style":1751},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1753],{"type":50,"value":1754},"$schema",{"type":44,"tag":682,"props":1756,"children":1757},{"style":1737},[1758],{"type":50,"value":1759},"\"",{"type":44,"tag":682,"props":1761,"children":1762},{"style":1737},[1763],{"type":50,"value":472},{"type":44,"tag":682,"props":1765,"children":1766},{"style":1737},[1767],{"type":50,"value":1768}," \"",{"type":44,"tag":682,"props":1770,"children":1772},{"style":1771},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1773],{"type":50,"value":1774},"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentParameters.json#",{"type":44,"tag":682,"props":1776,"children":1777},{"style":1737},[1778],{"type":50,"value":1759},{"type":44,"tag":682,"props":1780,"children":1781},{"style":1737},[1782],{"type":50,"value":1783},",\n",{"type":44,"tag":682,"props":1785,"children":1786},{"class":684,"line":703},[1787,1791,1796,1800,1804,1808,1813,1817],{"type":44,"tag":682,"props":1788,"children":1789},{"style":1737},[1790],{"type":50,"value":1748},{"type":44,"tag":682,"props":1792,"children":1793},{"style":1751},[1794],{"type":50,"value":1795},"contentVersion",{"type":44,"tag":682,"props":1797,"children":1798},{"style":1737},[1799],{"type":50,"value":1759},{"type":44,"tag":682,"props":1801,"children":1802},{"style":1737},[1803],{"type":50,"value":472},{"type":44,"tag":682,"props":1805,"children":1806},{"style":1737},[1807],{"type":50,"value":1768},{"type":44,"tag":682,"props":1809,"children":1810},{"style":1771},[1811],{"type":50,"value":1812},"1.0.0.0",{"type":44,"tag":682,"props":1814,"children":1815},{"style":1737},[1816],{"type":50,"value":1759},{"type":44,"tag":682,"props":1818,"children":1819},{"style":1737},[1820],{"type":50,"value":1783},{"type":44,"tag":682,"props":1822,"children":1823},{"class":684,"line":713},[1824,1828,1833,1837,1841],{"type":44,"tag":682,"props":1825,"children":1826},{"style":1737},[1827],{"type":50,"value":1748},{"type":44,"tag":682,"props":1829,"children":1830},{"style":1751},[1831],{"type":50,"value":1832},"parameters",{"type":44,"tag":682,"props":1834,"children":1835},{"style":1737},[1836],{"type":50,"value":1759},{"type":44,"tag":682,"props":1838,"children":1839},{"style":1737},[1840],{"type":50,"value":472},{"type":44,"tag":682,"props":1842,"children":1843},{"style":1737},[1844],{"type":50,"value":1845}," {\n",{"type":44,"tag":682,"props":1847,"children":1848},{"class":684,"line":722},[1849,1854,1860,1864,1868,1873,1877,1883,1887,1891,1895,1899,1903],{"type":44,"tag":682,"props":1850,"children":1851},{"style":1737},[1852],{"type":50,"value":1853},"        \"",{"type":44,"tag":682,"props":1855,"children":1857},{"style":1856},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1858],{"type":50,"value":1859},"logicAppName",{"type":44,"tag":682,"props":1861,"children":1862},{"style":1737},[1863],{"type":50,"value":1759},{"type":44,"tag":682,"props":1865,"children":1866},{"style":1737},[1867],{"type":50,"value":472},{"type":44,"tag":682,"props":1869,"children":1870},{"style":1737},[1871],{"type":50,"value":1872}," {",{"type":44,"tag":682,"props":1874,"children":1875},{"style":1737},[1876],{"type":50,"value":1768},{"type":44,"tag":682,"props":1878,"children":1880},{"style":1879},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1881],{"type":50,"value":1882},"value",{"type":44,"tag":682,"props":1884,"children":1885},{"style":1737},[1886],{"type":50,"value":1759},{"type":44,"tag":682,"props":1888,"children":1889},{"style":1737},[1890],{"type":50,"value":472},{"type":44,"tag":682,"props":1892,"children":1893},{"style":1737},[1894],{"type":50,"value":1768},{"type":44,"tag":682,"props":1896,"children":1897},{"style":1771},[1898],{"type":50,"value":349},{"type":44,"tag":682,"props":1900,"children":1901},{"style":1737},[1902],{"type":50,"value":1759},{"type":44,"tag":682,"props":1904,"children":1905},{"style":1737},[1906],{"type":50,"value":1907}," },\n",{"type":44,"tag":682,"props":1909,"children":1910},{"class":684,"line":27},[1911,1915,1920,1924,1928,1932,1936,1940,1944,1948,1952,1957,1961],{"type":44,"tag":682,"props":1912,"children":1913},{"style":1737},[1914],{"type":50,"value":1853},{"type":44,"tag":682,"props":1916,"children":1917},{"style":1856},[1918],{"type":50,"value":1919},"appServicePlanName",{"type":44,"tag":682,"props":1921,"children":1922},{"style":1737},[1923],{"type":50,"value":1759},{"type":44,"tag":682,"props":1925,"children":1926},{"style":1737},[1927],{"type":50,"value":472},{"type":44,"tag":682,"props":1929,"children":1930},{"style":1737},[1931],{"type":50,"value":1872},{"type":44,"tag":682,"props":1933,"children":1934},{"style":1737},[1935],{"type":50,"value":1768},{"type":44,"tag":682,"props":1937,"children":1938},{"style":1879},[1939],{"type":50,"value":1882},{"type":44,"tag":682,"props":1941,"children":1942},{"style":1737},[1943],{"type":50,"value":1759},{"type":44,"tag":682,"props":1945,"children":1946},{"style":1737},[1947],{"type":50,"value":472},{"type":44,"tag":682,"props":1949,"children":1950},{"style":1737},[1951],{"type":50,"value":1768},{"type":44,"tag":682,"props":1953,"children":1954},{"style":1771},[1955],{"type":50,"value":1956},"asp-my-app",{"type":44,"tag":682,"props":1958,"children":1959},{"style":1737},[1960],{"type":50,"value":1759},{"type":44,"tag":682,"props":1962,"children":1963},{"style":1737},[1964],{"type":50,"value":1907},{"type":44,"tag":682,"props":1966,"children":1967},{"class":684,"line":31},[1968,1972,1977,1981,1985,1989,1993,1997,2001,2005,2009,2014,2018],{"type":44,"tag":682,"props":1969,"children":1970},{"style":1737},[1971],{"type":50,"value":1853},{"type":44,"tag":682,"props":1973,"children":1974},{"style":1856},[1975],{"type":50,"value":1976},"storageAccountName",{"type":44,"tag":682,"props":1978,"children":1979},{"style":1737},[1980],{"type":50,"value":1759},{"type":44,"tag":682,"props":1982,"children":1983},{"style":1737},[1984],{"type":50,"value":472},{"type":44,"tag":682,"props":1986,"children":1987},{"style":1737},[1988],{"type":50,"value":1872},{"type":44,"tag":682,"props":1990,"children":1991},{"style":1737},[1992],{"type":50,"value":1768},{"type":44,"tag":682,"props":1994,"children":1995},{"style":1879},[1996],{"type":50,"value":1882},{"type":44,"tag":682,"props":1998,"children":1999},{"style":1737},[2000],{"type":50,"value":1759},{"type":44,"tag":682,"props":2002,"children":2003},{"style":1737},[2004],{"type":50,"value":472},{"type":44,"tag":682,"props":2006,"children":2007},{"style":1737},[2008],{"type":50,"value":1768},{"type":44,"tag":682,"props":2010,"children":2011},{"style":1771},[2012],{"type":50,"value":2013},"stmyapp",{"type":44,"tag":682,"props":2015,"children":2016},{"style":1737},[2017],{"type":50,"value":1759},{"type":44,"tag":682,"props":2019,"children":2020},{"style":1737},[2021],{"type":50,"value":1907},{"type":44,"tag":682,"props":2023,"children":2024},{"class":684,"line":746},[2025,2029,2034,2038,2042,2046,2050,2054,2058,2062,2066,2071,2075],{"type":44,"tag":682,"props":2026,"children":2027},{"style":1737},[2028],{"type":50,"value":1853},{"type":44,"tag":682,"props":2030,"children":2031},{"style":1856},[2032],{"type":50,"value":2033},"location",{"type":44,"tag":682,"props":2035,"children":2036},{"style":1737},[2037],{"type":50,"value":1759},{"type":44,"tag":682,"props":2039,"children":2040},{"style":1737},[2041],{"type":50,"value":472},{"type":44,"tag":682,"props":2043,"children":2044},{"style":1737},[2045],{"type":50,"value":1872},{"type":44,"tag":682,"props":2047,"children":2048},{"style":1737},[2049],{"type":50,"value":1768},{"type":44,"tag":682,"props":2051,"children":2052},{"style":1879},[2053],{"type":50,"value":1882},{"type":44,"tag":682,"props":2055,"children":2056},{"style":1737},[2057],{"type":50,"value":1759},{"type":44,"tag":682,"props":2059,"children":2060},{"style":1737},[2061],{"type":50,"value":472},{"type":44,"tag":682,"props":2063,"children":2064},{"style":1737},[2065],{"type":50,"value":1768},{"type":44,"tag":682,"props":2067,"children":2068},{"style":1771},[2069],{"type":50,"value":2070},"eastus",{"type":44,"tag":682,"props":2072,"children":2073},{"style":1737},[2074],{"type":50,"value":1759},{"type":44,"tag":682,"props":2076,"children":2077},{"style":1737},[2078],{"type":50,"value":1907},{"type":44,"tag":682,"props":2080,"children":2081},{"class":684,"line":755},[2082,2086,2091,2095,2099],{"type":44,"tag":682,"props":2083,"children":2084},{"style":1737},[2085],{"type":50,"value":1853},{"type":44,"tag":682,"props":2087,"children":2088},{"style":1856},[2089],{"type":50,"value":2090},"integrationAccountId",{"type":44,"tag":682,"props":2092,"children":2093},{"style":1737},[2094],{"type":50,"value":1759},{"type":44,"tag":682,"props":2096,"children":2097},{"style":1737},[2098],{"type":50,"value":472},{"type":44,"tag":682,"props":2100,"children":2101},{"style":1737},[2102],{"type":50,"value":1845},{"type":44,"tag":682,"props":2104,"children":2105},{"class":684,"line":763},[2106,2111,2115,2119,2123,2127,2132],{"type":44,"tag":682,"props":2107,"children":2108},{"style":1737},[2109],{"type":50,"value":2110},"            \"",{"type":44,"tag":682,"props":2112,"children":2113},{"style":1879},[2114],{"type":50,"value":1882},{"type":44,"tag":682,"props":2116,"children":2117},{"style":1737},[2118],{"type":50,"value":1759},{"type":44,"tag":682,"props":2120,"children":2121},{"style":1737},[2122],{"type":50,"value":472},{"type":44,"tag":682,"props":2124,"children":2125},{"style":1737},[2126],{"type":50,"value":1768},{"type":44,"tag":682,"props":2128,"children":2129},{"style":1771},[2130],{"type":50,"value":2131},"\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Logic\u002FintegrationAccounts\u002F{name}",{"type":44,"tag":682,"props":2133,"children":2134},{"style":1737},[2135],{"type":50,"value":2136},"\"\n",{"type":44,"tag":682,"props":2138,"children":2139},{"class":684,"line":772},[2140],{"type":44,"tag":682,"props":2141,"children":2142},{"style":1737},[2143],{"type":50,"value":2144},"        },\n",{"type":44,"tag":682,"props":2146,"children":2147},{"class":684,"line":781},[2148,2152,2157,2161,2165],{"type":44,"tag":682,"props":2149,"children":2150},{"style":1737},[2151],{"type":50,"value":1853},{"type":44,"tag":682,"props":2153,"children":2154},{"style":1856},[2155],{"type":50,"value":2156},"integrationAccountCallbackUrl",{"type":44,"tag":682,"props":2158,"children":2159},{"style":1737},[2160],{"type":50,"value":1759},{"type":44,"tag":682,"props":2162,"children":2163},{"style":1737},[2164],{"type":50,"value":472},{"type":44,"tag":682,"props":2166,"children":2167},{"style":1737},[2168],{"type":50,"value":1845},{"type":44,"tag":682,"props":2170,"children":2171},{"class":684,"line":789},[2172,2176,2180,2184,2188,2192,2197],{"type":44,"tag":682,"props":2173,"children":2174},{"style":1737},[2175],{"type":50,"value":2110},{"type":44,"tag":682,"props":2177,"children":2178},{"style":1879},[2179],{"type":50,"value":1882},{"type":44,"tag":682,"props":2181,"children":2182},{"style":1737},[2183],{"type":50,"value":1759},{"type":44,"tag":682,"props":2185,"children":2186},{"style":1737},[2187],{"type":50,"value":472},{"type":44,"tag":682,"props":2189,"children":2190},{"style":1737},[2191],{"type":50,"value":1768},{"type":44,"tag":682,"props":2193,"children":2194},{"style":1771},[2195],{"type":50,"value":2196},"https:\u002F\u002Fprod-XX.eastus.logic.azure.com:443\u002FintegrationAccounts\u002F...?api-version=2015-08-01-preview&sp=%2F%2F%2A&sv=1.0&sig=...",{"type":44,"tag":682,"props":2198,"children":2199},{"style":1737},[2200],{"type":50,"value":2136},{"type":44,"tag":682,"props":2202,"children":2203},{"class":684,"line":798},[2204],{"type":44,"tag":682,"props":2205,"children":2206},{"style":1737},[2207],{"type":50,"value":2144},{"type":44,"tag":682,"props":2209,"children":2210},{"class":684,"line":807},[2211,2215,2220,2224,2228,2232,2236,2240,2244,2248,2252,2256,2260],{"type":44,"tag":682,"props":2212,"children":2213},{"style":1737},[2214],{"type":50,"value":1853},{"type":44,"tag":682,"props":2216,"children":2217},{"style":1856},[2218],{"type":50,"value":2219},"fileSystemMountPath",{"type":44,"tag":682,"props":2221,"children":2222},{"style":1737},[2223],{"type":50,"value":1759},{"type":44,"tag":682,"props":2225,"children":2226},{"style":1737},[2227],{"type":50,"value":472},{"type":44,"tag":682,"props":2229,"children":2230},{"style":1737},[2231],{"type":50,"value":1872},{"type":44,"tag":682,"props":2233,"children":2234},{"style":1737},[2235],{"type":50,"value":1768},{"type":44,"tag":682,"props":2237,"children":2238},{"style":1879},[2239],{"type":50,"value":1882},{"type":44,"tag":682,"props":2241,"children":2242},{"style":1737},[2243],{"type":50,"value":1759},{"type":44,"tag":682,"props":2245,"children":2246},{"style":1737},[2247],{"type":50,"value":472},{"type":44,"tag":682,"props":2249,"children":2250},{"style":1737},[2251],{"type":50,"value":1768},{"type":44,"tag":682,"props":2253,"children":2254},{"style":1771},[2255],{"type":50,"value":234},{"type":44,"tag":682,"props":2257,"children":2258},{"style":1737},[2259],{"type":50,"value":1759},{"type":44,"tag":682,"props":2261,"children":2262},{"style":1737},[2263],{"type":50,"value":1907},{"type":44,"tag":682,"props":2265,"children":2266},{"class":684,"line":816},[2267,2271,2276,2280,2284,2288,2292,2296,2300,2304,2308,2313,2317],{"type":44,"tag":682,"props":2268,"children":2269},{"style":1737},[2270],{"type":50,"value":1853},{"type":44,"tag":682,"props":2272,"children":2273},{"style":1856},[2274],{"type":50,"value":2275},"fileShareName",{"type":44,"tag":682,"props":2277,"children":2278},{"style":1737},[2279],{"type":50,"value":1759},{"type":44,"tag":682,"props":2281,"children":2282},{"style":1737},[2283],{"type":50,"value":472},{"type":44,"tag":682,"props":2285,"children":2286},{"style":1737},[2287],{"type":50,"value":1872},{"type":44,"tag":682,"props":2289,"children":2290},{"style":1737},[2291],{"type":50,"value":1768},{"type":44,"tag":682,"props":2293,"children":2294},{"style":1879},[2295],{"type":50,"value":1882},{"type":44,"tag":682,"props":2297,"children":2298},{"style":1737},[2299],{"type":50,"value":1759},{"type":44,"tag":682,"props":2301,"children":2302},{"style":1737},[2303],{"type":50,"value":472},{"type":44,"tag":682,"props":2305,"children":2306},{"style":1737},[2307],{"type":50,"value":1768},{"type":44,"tag":682,"props":2309,"children":2310},{"style":1771},[2311],{"type":50,"value":2312},"edi-files",{"type":44,"tag":682,"props":2314,"children":2315},{"style":1737},[2316],{"type":50,"value":1759},{"type":44,"tag":682,"props":2318,"children":2319},{"style":1737},[2320],{"type":50,"value":2321}," }\n",{"type":44,"tag":682,"props":2323,"children":2324},{"class":684,"line":824},[2325],{"type":44,"tag":682,"props":2326,"children":2327},{"style":1737},[2328],{"type":50,"value":1644},{"type":44,"tag":682,"props":2330,"children":2331},{"class":684,"line":833},[2332],{"type":44,"tag":682,"props":2333,"children":2334},{"style":1737},[2335],{"type":50,"value":1016},{"type":44,"tag":238,"props":2337,"children":2339},{"id":2338},"_27-reference-content-deployment-script-powershell",[2340],{"type":50,"value":2341},"2.7 Reference Content Deployment Script (PowerShell)",{"type":44,"tag":57,"props":2343,"children":2344},{},[2345],{"type":50,"value":2346},"Upload workflow content to the WEBSITE_CONTENTSHARE Azure Files share after Bicep deployment.",{"type":44,"tag":672,"props":2348,"children":2352},{"className":2349,"code":2350,"language":2351,"meta":676,"style":676},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","param(\n    [string]$ResourceGroup,\n    [string]$StorageAccountName,\n    [string]$LogicAppName,          # Also the content share name\n    [string]$SourceDir              # Path to the logic app project folder\n)\n\n# Get storage key\n$key = az storage account keys list --account-name $StorageAccountName `\n    --resource-group $ResourceGroup --query \"[0].value\" -o tsv\n\n$share = $LogicAppName  # WEBSITE_CONTENTSHARE = logic app name\n\n# Create directories\n$dirs = @(\n    \"site\u002Fwwwroot\"\n    # Add workflow and lib dirs as needed:\n    # \"site\u002Fwwwroot\u002Fmy-workflow\"\n    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002Fnet8\"\n    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002FMyFunction\"\n)\nforeach ($d in $dirs) {\n    az storage directory create --share-name $share --name $d `\n        --account-name $StorageAccountName --account-key $key 2>$null\n}\n\n# Upload files (recursive helper)\nfunction Upload-File($localPath, $sharePath) {\n    az storage file upload --share-name $share --source $localPath `\n        --path $sharePath --account-name $StorageAccountName `\n        --account-key $key --no-progress 2>$null\n}\n\n# Upload core files\nUpload-File \"$SourceDir\\host.json\"        \"site\u002Fwwwroot\u002Fhost.json\"\nUpload-File \"$SourceDir\\connections.json\" \"site\u002Fwwwroot\u002Fconnections.json\"\n\n# Upload workflow(s)\nGet-ChildItem \"$SourceDir\" -Directory | Where-Object {\n    Test-Path \"$($_.FullName)\\workflow.json\"\n} | ForEach-Object {\n    $wfName = $_.Name\n    az storage directory create --share-name $share `\n        --name \"site\u002Fwwwroot\u002F$wfName\" `\n        --account-name $StorageAccountName --account-key $key 2>$null\n    Upload-File \"$($_.FullName)\\workflow.json\" \"site\u002Fwwwroot\u002F$wfName\u002Fworkflow.json\"\n}\n\n# Upload lib\u002Fcustom (function DLLs + function.json)\nif (Test-Path \"$SourceDir\\lib\\custom\") {\n    Get-ChildItem \"$SourceDir\\lib\\custom\" -Recurse -File | ForEach-Object {\n        $rel = $_.FullName.Substring(\"$SourceDir\\\".Length).Replace('\\', '\u002F')\n        $parentDir = \"site\u002Fwwwroot\u002F\" + ($rel -replace '\u002F[^\u002F]+$', '')\n        az storage directory create --share-name $share --name $parentDir `\n            --account-name $StorageAccountName --account-key $key 2>$null\n        Upload-File $_.FullName \"site\u002Fwwwroot\u002F$rel\"\n    }\n}\n\n# Restart\naz logicapp restart --name $LogicAppName --resource-group $ResourceGroup\nWrite-Host \"Deployment complete. Wait ~60s for warmup.\"\n","powershell",[2353],{"type":44,"tag":117,"props":2354,"children":2355},{"__ignoreMap":676},[2356,2364,2372,2380,2388,2396,2404,2411,2419,2427,2435,2442,2450,2457,2465,2473,2481,2489,2497,2505,2513,2520,2528,2536,2544,2551,2558,2566,2574,2582,2590,2598,2605,2612,2620,2628,2636,2643,2651,2659,2667,2675,2683,2691,2699,2706,2714,2721,2728,2736,2744,2752,2760,2768,2776,2784,2792,2799,2806,2813,2821,2829],{"type":44,"tag":682,"props":2357,"children":2358},{"class":684,"line":685},[2359],{"type":44,"tag":682,"props":2360,"children":2361},{},[2362],{"type":50,"value":2363},"param(\n",{"type":44,"tag":682,"props":2365,"children":2366},{"class":684,"line":694},[2367],{"type":44,"tag":682,"props":2368,"children":2369},{},[2370],{"type":50,"value":2371},"    [string]$ResourceGroup,\n",{"type":44,"tag":682,"props":2373,"children":2374},{"class":684,"line":703},[2375],{"type":44,"tag":682,"props":2376,"children":2377},{},[2378],{"type":50,"value":2379},"    [string]$StorageAccountName,\n",{"type":44,"tag":682,"props":2381,"children":2382},{"class":684,"line":713},[2383],{"type":44,"tag":682,"props":2384,"children":2385},{},[2386],{"type":50,"value":2387},"    [string]$LogicAppName,          # Also the content share name\n",{"type":44,"tag":682,"props":2389,"children":2390},{"class":684,"line":722},[2391],{"type":44,"tag":682,"props":2392,"children":2393},{},[2394],{"type":50,"value":2395},"    [string]$SourceDir              # Path to the logic app project folder\n",{"type":44,"tag":682,"props":2397,"children":2398},{"class":684,"line":27},[2399],{"type":44,"tag":682,"props":2400,"children":2401},{},[2402],{"type":50,"value":2403},")\n",{"type":44,"tag":682,"props":2405,"children":2406},{"class":684,"line":31},[2407],{"type":44,"tag":682,"props":2408,"children":2409},{"emptyLinePlaceholder":707},[2410],{"type":50,"value":710},{"type":44,"tag":682,"props":2412,"children":2413},{"class":684,"line":746},[2414],{"type":44,"tag":682,"props":2415,"children":2416},{},[2417],{"type":50,"value":2418},"# Get storage key\n",{"type":44,"tag":682,"props":2420,"children":2421},{"class":684,"line":755},[2422],{"type":44,"tag":682,"props":2423,"children":2424},{},[2425],{"type":50,"value":2426},"$key = az storage account keys list --account-name $StorageAccountName `\n",{"type":44,"tag":682,"props":2428,"children":2429},{"class":684,"line":763},[2430],{"type":44,"tag":682,"props":2431,"children":2432},{},[2433],{"type":50,"value":2434},"    --resource-group $ResourceGroup --query \"[0].value\" -o tsv\n",{"type":44,"tag":682,"props":2436,"children":2437},{"class":684,"line":772},[2438],{"type":44,"tag":682,"props":2439,"children":2440},{"emptyLinePlaceholder":707},[2441],{"type":50,"value":710},{"type":44,"tag":682,"props":2443,"children":2444},{"class":684,"line":781},[2445],{"type":44,"tag":682,"props":2446,"children":2447},{},[2448],{"type":50,"value":2449},"$share = $LogicAppName  # WEBSITE_CONTENTSHARE = logic app name\n",{"type":44,"tag":682,"props":2451,"children":2452},{"class":684,"line":789},[2453],{"type":44,"tag":682,"props":2454,"children":2455},{"emptyLinePlaceholder":707},[2456],{"type":50,"value":710},{"type":44,"tag":682,"props":2458,"children":2459},{"class":684,"line":798},[2460],{"type":44,"tag":682,"props":2461,"children":2462},{},[2463],{"type":50,"value":2464},"# Create directories\n",{"type":44,"tag":682,"props":2466,"children":2467},{"class":684,"line":807},[2468],{"type":44,"tag":682,"props":2469,"children":2470},{},[2471],{"type":50,"value":2472},"$dirs = @(\n",{"type":44,"tag":682,"props":2474,"children":2475},{"class":684,"line":816},[2476],{"type":44,"tag":682,"props":2477,"children":2478},{},[2479],{"type":50,"value":2480},"    \"site\u002Fwwwroot\"\n",{"type":44,"tag":682,"props":2482,"children":2483},{"class":684,"line":824},[2484],{"type":44,"tag":682,"props":2485,"children":2486},{},[2487],{"type":50,"value":2488},"    # Add workflow and lib dirs as needed:\n",{"type":44,"tag":682,"props":2490,"children":2491},{"class":684,"line":833},[2492],{"type":44,"tag":682,"props":2493,"children":2494},{},[2495],{"type":50,"value":2496},"    # \"site\u002Fwwwroot\u002Fmy-workflow\"\n",{"type":44,"tag":682,"props":2498,"children":2499},{"class":684,"line":842},[2500],{"type":44,"tag":682,"props":2501,"children":2502},{},[2503],{"type":50,"value":2504},"    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002Fnet8\"\n",{"type":44,"tag":682,"props":2506,"children":2507},{"class":684,"line":851},[2508],{"type":44,"tag":682,"props":2509,"children":2510},{},[2511],{"type":50,"value":2512},"    # \"site\u002Fwwwroot\u002Flib\u002Fcustom\u002FMyFunction\"\n",{"type":44,"tag":682,"props":2514,"children":2515},{"class":684,"line":859},[2516],{"type":44,"tag":682,"props":2517,"children":2518},{},[2519],{"type":50,"value":2403},{"type":44,"tag":682,"props":2521,"children":2522},{"class":684,"line":868},[2523],{"type":44,"tag":682,"props":2524,"children":2525},{},[2526],{"type":50,"value":2527},"foreach ($d in $dirs) {\n",{"type":44,"tag":682,"props":2529,"children":2530},{"class":684,"line":877},[2531],{"type":44,"tag":682,"props":2532,"children":2533},{},[2534],{"type":50,"value":2535},"    az storage directory create --share-name $share --name $d `\n",{"type":44,"tag":682,"props":2537,"children":2538},{"class":684,"line":886},[2539],{"type":44,"tag":682,"props":2540,"children":2541},{},[2542],{"type":50,"value":2543},"        --account-name $StorageAccountName --account-key $key 2>$null\n",{"type":44,"tag":682,"props":2545,"children":2546},{"class":684,"line":894},[2547],{"type":44,"tag":682,"props":2548,"children":2549},{},[2550],{"type":50,"value":1016},{"type":44,"tag":682,"props":2552,"children":2553},{"class":684,"line":903},[2554],{"type":44,"tag":682,"props":2555,"children":2556},{"emptyLinePlaceholder":707},[2557],{"type":50,"value":710},{"type":44,"tag":682,"props":2559,"children":2560},{"class":684,"line":912},[2561],{"type":44,"tag":682,"props":2562,"children":2563},{},[2564],{"type":50,"value":2565},"# Upload files (recursive helper)\n",{"type":44,"tag":682,"props":2567,"children":2568},{"class":684,"line":920},[2569],{"type":44,"tag":682,"props":2570,"children":2571},{},[2572],{"type":50,"value":2573},"function Upload-File($localPath, $sharePath) {\n",{"type":44,"tag":682,"props":2575,"children":2576},{"class":684,"line":929},[2577],{"type":44,"tag":682,"props":2578,"children":2579},{},[2580],{"type":50,"value":2581},"    az storage file upload --share-name $share --source $localPath `\n",{"type":44,"tag":682,"props":2583,"children":2584},{"class":684,"line":938},[2585],{"type":44,"tag":682,"props":2586,"children":2587},{},[2588],{"type":50,"value":2589},"        --path $sharePath --account-name $StorageAccountName `\n",{"type":44,"tag":682,"props":2591,"children":2592},{"class":684,"line":947},[2593],{"type":44,"tag":682,"props":2594,"children":2595},{},[2596],{"type":50,"value":2597},"        --account-key $key --no-progress 2>$null\n",{"type":44,"tag":682,"props":2599,"children":2600},{"class":684,"line":956},[2601],{"type":44,"tag":682,"props":2602,"children":2603},{},[2604],{"type":50,"value":1016},{"type":44,"tag":682,"props":2606,"children":2607},{"class":684,"line":965},[2608],{"type":44,"tag":682,"props":2609,"children":2610},{"emptyLinePlaceholder":707},[2611],{"type":50,"value":710},{"type":44,"tag":682,"props":2613,"children":2614},{"class":684,"line":974},[2615],{"type":44,"tag":682,"props":2616,"children":2617},{},[2618],{"type":50,"value":2619},"# Upload core files\n",{"type":44,"tag":682,"props":2621,"children":2622},{"class":684,"line":983},[2623],{"type":44,"tag":682,"props":2624,"children":2625},{},[2626],{"type":50,"value":2627},"Upload-File \"$SourceDir\\host.json\"        \"site\u002Fwwwroot\u002Fhost.json\"\n",{"type":44,"tag":682,"props":2629,"children":2630},{"class":684,"line":992},[2631],{"type":44,"tag":682,"props":2632,"children":2633},{},[2634],{"type":50,"value":2635},"Upload-File \"$SourceDir\\connections.json\" \"site\u002Fwwwroot\u002Fconnections.json\"\n",{"type":44,"tag":682,"props":2637,"children":2638},{"class":684,"line":1001},[2639],{"type":44,"tag":682,"props":2640,"children":2641},{"emptyLinePlaceholder":707},[2642],{"type":50,"value":710},{"type":44,"tag":682,"props":2644,"children":2645},{"class":684,"line":1010},[2646],{"type":44,"tag":682,"props":2647,"children":2648},{},[2649],{"type":50,"value":2650},"# Upload workflow(s)\n",{"type":44,"tag":682,"props":2652,"children":2653},{"class":684,"line":1019},[2654],{"type":44,"tag":682,"props":2655,"children":2656},{},[2657],{"type":50,"value":2658},"Get-ChildItem \"$SourceDir\" -Directory | Where-Object {\n",{"type":44,"tag":682,"props":2660,"children":2661},{"class":684,"line":1027},[2662],{"type":44,"tag":682,"props":2663,"children":2664},{},[2665],{"type":50,"value":2666},"    Test-Path \"$($_.FullName)\\workflow.json\"\n",{"type":44,"tag":682,"props":2668,"children":2669},{"class":684,"line":1036},[2670],{"type":44,"tag":682,"props":2671,"children":2672},{},[2673],{"type":50,"value":2674},"} | ForEach-Object {\n",{"type":44,"tag":682,"props":2676,"children":2677},{"class":684,"line":1045},[2678],{"type":44,"tag":682,"props":2679,"children":2680},{},[2681],{"type":50,"value":2682},"    $wfName = $_.Name\n",{"type":44,"tag":682,"props":2684,"children":2685},{"class":684,"line":1054},[2686],{"type":44,"tag":682,"props":2687,"children":2688},{},[2689],{"type":50,"value":2690},"    az storage directory create --share-name $share `\n",{"type":44,"tag":682,"props":2692,"children":2693},{"class":684,"line":1063},[2694],{"type":44,"tag":682,"props":2695,"children":2696},{},[2697],{"type":50,"value":2698},"        --name \"site\u002Fwwwroot\u002F$wfName\" `\n",{"type":44,"tag":682,"props":2700,"children":2701},{"class":684,"line":1071},[2702],{"type":44,"tag":682,"props":2703,"children":2704},{},[2705],{"type":50,"value":2543},{"type":44,"tag":682,"props":2707,"children":2708},{"class":684,"line":1079},[2709],{"type":44,"tag":682,"props":2710,"children":2711},{},[2712],{"type":50,"value":2713},"    Upload-File \"$($_.FullName)\\workflow.json\" \"site\u002Fwwwroot\u002F$wfName\u002Fworkflow.json\"\n",{"type":44,"tag":682,"props":2715,"children":2716},{"class":684,"line":1088},[2717],{"type":44,"tag":682,"props":2718,"children":2719},{},[2720],{"type":50,"value":1016},{"type":44,"tag":682,"props":2722,"children":2723},{"class":684,"line":1097},[2724],{"type":44,"tag":682,"props":2725,"children":2726},{"emptyLinePlaceholder":707},[2727],{"type":50,"value":710},{"type":44,"tag":682,"props":2729,"children":2730},{"class":684,"line":1106},[2731],{"type":44,"tag":682,"props":2732,"children":2733},{},[2734],{"type":50,"value":2735},"# Upload lib\u002Fcustom (function DLLs + function.json)\n",{"type":44,"tag":682,"props":2737,"children":2738},{"class":684,"line":1115},[2739],{"type":44,"tag":682,"props":2740,"children":2741},{},[2742],{"type":50,"value":2743},"if (Test-Path \"$SourceDir\\lib\\custom\") {\n",{"type":44,"tag":682,"props":2745,"children":2746},{"class":684,"line":1123},[2747],{"type":44,"tag":682,"props":2748,"children":2749},{},[2750],{"type":50,"value":2751},"    Get-ChildItem \"$SourceDir\\lib\\custom\" -Recurse -File | ForEach-Object {\n",{"type":44,"tag":682,"props":2753,"children":2754},{"class":684,"line":1131},[2755],{"type":44,"tag":682,"props":2756,"children":2757},{},[2758],{"type":50,"value":2759},"        $rel = $_.FullName.Substring(\"$SourceDir\\\".Length).Replace('\\', '\u002F')\n",{"type":44,"tag":682,"props":2761,"children":2762},{"class":684,"line":1140},[2763],{"type":44,"tag":682,"props":2764,"children":2765},{},[2766],{"type":50,"value":2767},"        $parentDir = \"site\u002Fwwwroot\u002F\" + ($rel -replace '\u002F[^\u002F]+$', '')\n",{"type":44,"tag":682,"props":2769,"children":2770},{"class":684,"line":1149},[2771],{"type":44,"tag":682,"props":2772,"children":2773},{},[2774],{"type":50,"value":2775},"        az storage directory create --share-name $share --name $parentDir `\n",{"type":44,"tag":682,"props":2777,"children":2778},{"class":684,"line":1158},[2779],{"type":44,"tag":682,"props":2780,"children":2781},{},[2782],{"type":50,"value":2783},"            --account-name $StorageAccountName --account-key $key 2>$null\n",{"type":44,"tag":682,"props":2785,"children":2786},{"class":684,"line":1166},[2787],{"type":44,"tag":682,"props":2788,"children":2789},{},[2790],{"type":50,"value":2791},"        Upload-File $_.FullName \"site\u002Fwwwroot\u002F$rel\"\n",{"type":44,"tag":682,"props":2793,"children":2794},{"class":684,"line":1175},[2795],{"type":44,"tag":682,"props":2796,"children":2797},{},[2798],{"type":50,"value":1644},{"type":44,"tag":682,"props":2800,"children":2801},{"class":684,"line":1184},[2802],{"type":44,"tag":682,"props":2803,"children":2804},{},[2805],{"type":50,"value":1016},{"type":44,"tag":682,"props":2807,"children":2808},{"class":684,"line":1193},[2809],{"type":44,"tag":682,"props":2810,"children":2811},{"emptyLinePlaceholder":707},[2812],{"type":50,"value":710},{"type":44,"tag":682,"props":2814,"children":2815},{"class":684,"line":1201},[2816],{"type":44,"tag":682,"props":2817,"children":2818},{},[2819],{"type":50,"value":2820},"# Restart\n",{"type":44,"tag":682,"props":2822,"children":2823},{"class":684,"line":1210},[2824],{"type":44,"tag":682,"props":2825,"children":2826},{},[2827],{"type":50,"value":2828},"az logicapp restart --name $LogicAppName --resource-group $ResourceGroup\n",{"type":44,"tag":682,"props":2830,"children":2831},{"class":684,"line":1219},[2832],{"type":44,"tag":682,"props":2833,"children":2834},{},[2835],{"type":50,"value":2836},"Write-Host \"Deployment complete. Wait ~60s for warmup.\"\n",{"type":44,"tag":53,"props":2838,"children":2839},{},[2840],{"type":44,"tag":57,"props":2841,"children":2842},{},[2843,2848,2850,2855,2856,2861,2862,2867,2868,2873,2874,2880,2881],{"type":44,"tag":61,"props":2844,"children":2845},{},[2846],{"type":50,"value":2847},"Do NOT upload",{"type":50,"value":2849},": ",{"type":44,"tag":117,"props":2851,"children":2853},{"className":2852},[],[2854],{"type":50,"value":287},{"type":50,"value":204},{"type":44,"tag":117,"props":2857,"children":2859},{"className":2858},[],[2860],{"type":50,"value":547},{"type":50,"value":204},{"type":44,"tag":117,"props":2863,"children":2865},{"className":2864},[],[2866],{"type":50,"value":554},{"type":50,"value":204},{"type":44,"tag":117,"props":2869,"children":2871},{"className":2870},[],[2872],{"type":50,"value":561},{"type":50,"value":204},{"type":44,"tag":117,"props":2875,"children":2877},{"className":2876},[],[2878],{"type":50,"value":2879},".gitignore",{"type":50,"value":204},{"type":44,"tag":117,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":50,"value":2886},".funcignore",{"type":44,"tag":69,"props":2888,"children":2889},{},[],{"type":44,"tag":73,"props":2891,"children":2893},{"id":2892},"_3-cloud-testing",[2894],{"type":50,"value":2895},"3. Cloud Testing",{"type":44,"tag":94,"props":2897,"children":2898},{},[2899,2912,2932,2950,2955],{"type":44,"tag":98,"props":2900,"children":2901},{},[2902,2904,2910],{"type":50,"value":2903},"Read ",{"type":44,"tag":117,"props":2905,"children":2907},{"className":2906},[],[2908],{"type":50,"value":2909},"TEST-REPORT.md",{"type":50,"value":2911}," and run EVERY test scenario from it against the deployed Azure Logic App — happy path, error path, cross-workflow chain, timeout, resubmission — all of them, not a subset.",{"type":44,"tag":98,"props":2913,"children":2914},{},[2915,2917,2923,2925,2931],{"type":50,"value":2916},"If ",{"type":44,"tag":117,"props":2918,"children":2920},{"className":2919},[],[2921],{"type":50,"value":2922},"BLACKBOX-TEST-REPORT.md",{"type":50,"value":2924}," exists in the project root (generated by the local black box testing task), read it and re-execute ALL test cases from that report against the deployed Azure Logic App as well. Include those results in ",{"type":44,"tag":117,"props":2926,"children":2928},{"className":2927},[],[2929],{"type":50,"value":2930},"CLOUD-TEST-REPORT.md",{"type":50,"value":305},{"type":44,"tag":98,"props":2933,"children":2934},{},[2935,2937,2942,2944,2949],{"type":50,"value":2936},"Fix any cloud-specific issues via ",{"type":44,"tag":117,"props":2938,"children":2940},{"className":2939},[],[2941],{"type":50,"value":140},{"type":50,"value":2943}," — NEVER edit ",{"type":44,"tag":117,"props":2945,"children":2947},{"className":2946},[],[2948],{"type":50,"value":287},{"type":50,"value":305},{"type":44,"tag":98,"props":2951,"children":2952},{},[2953],{"type":50,"value":2954},"If the workflow uses File System triggers or actions, verify the Azure-side File System connection\u002Fauthentication works in cloud execution, not just local mounted execution.",{"type":44,"tag":98,"props":2956,"children":2957},{},[2958],{"type":50,"value":2959},"After all tests pass, UPDATE the ARM\u002FBicep template to include ALL changes made during testing so the template alone can reproduce the working deployment from scratch.",{"type":44,"tag":238,"props":2961,"children":2963},{"id":2962},"_31-querying-workflow-run-history",[2964],{"type":50,"value":2965},"3.1 Querying Workflow Run History",{"type":44,"tag":57,"props":2967,"children":2968},{},[2969,2971,2977,2978,2984],{"type":50,"value":2970},"Use API version ",{"type":44,"tag":117,"props":2972,"children":2974},{"className":2973},[],[2975],{"type":50,"value":2976},"2024-11-01",{"type":50,"value":587},{"type":44,"tag":117,"props":2979,"children":2981},{"className":2980},[],[2982],{"type":50,"value":2983},"2024-02-02",{"type":50,"value":2985}," which is unsupported for the hostruntime API):",{"type":44,"tag":672,"props":2987,"children":2991},{"className":2988,"code":2990,"language":50},[2989],"language-text","GET https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns?api-version=2024-11-01\n",[2992],{"type":44,"tag":117,"props":2993,"children":2994},{"__ignoreMap":676},[2995],{"type":50,"value":2990},{"type":44,"tag":57,"props":2997,"children":2998},{},[2999,3001,3007],{"type":50,"value":3000},"With ",{"type":44,"tag":117,"props":3002,"children":3004},{"className":3003},[],[3005],{"type":50,"value":3006},"az rest",{"type":50,"value":472},{"type":44,"tag":672,"props":3009,"children":3013},{"className":3010,"code":3011,"language":3012,"meta":676,"style":676},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","az rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns?api-version=2024-11-01\" \\\n  --resource \"https:\u002F\u002Fmanagement.azure.com\"\n","bash",[3014],{"type":44,"tag":117,"props":3015,"children":3016},{"__ignoreMap":676},[3017,3046,3071],{"type":44,"tag":682,"props":3018,"children":3019},{"class":684,"line":685},[3020,3025,3030,3035,3040],{"type":44,"tag":682,"props":3021,"children":3022},{"style":1856},[3023],{"type":50,"value":3024},"az",{"type":44,"tag":682,"props":3026,"children":3027},{"style":1771},[3028],{"type":50,"value":3029}," rest",{"type":44,"tag":682,"props":3031,"children":3032},{"style":1771},[3033],{"type":50,"value":3034}," --method",{"type":44,"tag":682,"props":3036,"children":3037},{"style":1771},[3038],{"type":50,"value":3039}," GET",{"type":44,"tag":682,"props":3041,"children":3043},{"style":3042},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[3044],{"type":50,"value":3045}," \\\n",{"type":44,"tag":682,"props":3047,"children":3048},{"class":684,"line":694},[3049,3054,3058,3063,3067],{"type":44,"tag":682,"props":3050,"children":3051},{"style":1771},[3052],{"type":50,"value":3053},"  --url",{"type":44,"tag":682,"props":3055,"children":3056},{"style":1737},[3057],{"type":50,"value":1768},{"type":44,"tag":682,"props":3059,"children":3060},{"style":1771},[3061],{"type":50,"value":3062},"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns?api-version=2024-11-01",{"type":44,"tag":682,"props":3064,"children":3065},{"style":1737},[3066],{"type":50,"value":1759},{"type":44,"tag":682,"props":3068,"children":3069},{"style":3042},[3070],{"type":50,"value":3045},{"type":44,"tag":682,"props":3072,"children":3073},{"class":684,"line":703},[3074,3079,3083,3088],{"type":44,"tag":682,"props":3075,"children":3076},{"style":1771},[3077],{"type":50,"value":3078},"  --resource",{"type":44,"tag":682,"props":3080,"children":3081},{"style":1737},[3082],{"type":50,"value":1768},{"type":44,"tag":682,"props":3084,"children":3085},{"style":1771},[3086],{"type":50,"value":3087},"https:\u002F\u002Fmanagement.azure.com",{"type":44,"tag":682,"props":3089,"children":3090},{"style":1737},[3091],{"type":50,"value":2136},{"type":44,"tag":57,"props":3093,"children":3094},{},[3095],{"type":50,"value":3096},"To get action details for a specific run:",{"type":44,"tag":672,"props":3098,"children":3100},{"className":3010,"code":3099,"language":3012,"meta":676,"style":676},"az rest --method GET \\\n  --url \"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns\u002F{runId}\u002Factions?api-version=2024-11-01\" \\\n  --resource \"https:\u002F\u002Fmanagement.azure.com\"\n",[3101],{"type":44,"tag":117,"props":3102,"children":3103},{"__ignoreMap":676},[3104,3127,3151],{"type":44,"tag":682,"props":3105,"children":3106},{"class":684,"line":685},[3107,3111,3115,3119,3123],{"type":44,"tag":682,"props":3108,"children":3109},{"style":1856},[3110],{"type":50,"value":3024},{"type":44,"tag":682,"props":3112,"children":3113},{"style":1771},[3114],{"type":50,"value":3029},{"type":44,"tag":682,"props":3116,"children":3117},{"style":1771},[3118],{"type":50,"value":3034},{"type":44,"tag":682,"props":3120,"children":3121},{"style":1771},[3122],{"type":50,"value":3039},{"type":44,"tag":682,"props":3124,"children":3125},{"style":3042},[3126],{"type":50,"value":3045},{"type":44,"tag":682,"props":3128,"children":3129},{"class":684,"line":694},[3130,3134,3138,3143,3147],{"type":44,"tag":682,"props":3131,"children":3132},{"style":1771},[3133],{"type":50,"value":3053},{"type":44,"tag":682,"props":3135,"children":3136},{"style":1737},[3137],{"type":50,"value":1768},{"type":44,"tag":682,"props":3139,"children":3140},{"style":1771},[3141],{"type":50,"value":3142},"https:\u002F\u002Fmanagement.azure.com\u002Fsubscriptions\u002F{sub}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.Web\u002Fsites\u002F{app}\u002Fhostruntime\u002Fruntime\u002Fwebhooks\u002Fworkflow\u002Fapi\u002Fmanagement\u002Fworkflows\u002F{workflow}\u002Fruns\u002F{runId}\u002Factions?api-version=2024-11-01",{"type":44,"tag":682,"props":3144,"children":3145},{"style":1737},[3146],{"type":50,"value":1759},{"type":44,"tag":682,"props":3148,"children":3149},{"style":3042},[3150],{"type":50,"value":3045},{"type":44,"tag":682,"props":3152,"children":3153},{"class":684,"line":703},[3154,3158,3162,3166],{"type":44,"tag":682,"props":3155,"children":3156},{"style":1771},[3157],{"type":50,"value":3078},{"type":44,"tag":682,"props":3159,"children":3160},{"style":1737},[3161],{"type":50,"value":1768},{"type":44,"tag":682,"props":3163,"children":3164},{"style":1771},[3165],{"type":50,"value":3087},{"type":44,"tag":682,"props":3167,"children":3168},{"style":1737},[3169],{"type":50,"value":2136},{"type":44,"tag":53,"props":3171,"children":3172},{},[3173],{"type":44,"tag":57,"props":3174,"children":3175},{},[3176,3181,3183,3189,3191,3196],{"type":44,"tag":61,"props":3177,"children":3178},{},[3179],{"type":50,"value":3180},"Note",{"type":50,"value":3182},": The ",{"type":44,"tag":117,"props":3184,"children":3186},{"className":3185},[],[3187],{"type":50,"value":3188},"--resource",{"type":50,"value":3190}," flag is required when using ",{"type":44,"tag":117,"props":3192,"children":3194},{"className":3193},[],[3195],{"type":50,"value":3006},{"type":50,"value":3197}," against the hostruntime path.",{"type":44,"tag":238,"props":3199,"children":3201},{"id":3200},"_32-uploading-test-files-file-system-trigger",[3202],{"type":50,"value":3203},"3.2 Uploading Test Files (File System Trigger)",{"type":44,"tag":57,"props":3205,"children":3206},{},[3207,3209,3214],{"type":50,"value":3208},"For workflows with File System triggers, upload test files to the ",{"type":44,"tag":61,"props":3210,"children":3211},{},[3212],{"type":50,"value":3213},"separate Azure Files share",{"type":50,"value":3215}," (NOT the content share):",{"type":44,"tag":672,"props":3217,"children":3219},{"className":3010,"code":3218,"language":3012,"meta":676,"style":676},"# Upload to the FileSystem connector share (e.g., 'edi-files'), NOT the content share\naz storage file upload --share-name edi-files \\\n  --source .\u002Ftest-input.edi --path \"In\u002Ftest-input.edi\" \\\n  --account-name $STORAGE_ACCOUNT --account-key $KEY\n",[3220],{"type":44,"tag":117,"props":3221,"children":3222},{"__ignoreMap":676},[3223,3232,3268,3303],{"type":44,"tag":682,"props":3224,"children":3225},{"class":684,"line":685},[3226],{"type":44,"tag":682,"props":3227,"children":3229},{"style":3228},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[3230],{"type":50,"value":3231},"# Upload to the FileSystem connector share (e.g., 'edi-files'), NOT the content share\n",{"type":44,"tag":682,"props":3233,"children":3234},{"class":684,"line":694},[3235,3239,3244,3249,3254,3259,3264],{"type":44,"tag":682,"props":3236,"children":3237},{"style":1856},[3238],{"type":50,"value":3024},{"type":44,"tag":682,"props":3240,"children":3241},{"style":1771},[3242],{"type":50,"value":3243}," storage",{"type":44,"tag":682,"props":3245,"children":3246},{"style":1771},[3247],{"type":50,"value":3248}," file",{"type":44,"tag":682,"props":3250,"children":3251},{"style":1771},[3252],{"type":50,"value":3253}," upload",{"type":44,"tag":682,"props":3255,"children":3256},{"style":1771},[3257],{"type":50,"value":3258}," --share-name",{"type":44,"tag":682,"props":3260,"children":3261},{"style":1771},[3262],{"type":50,"value":3263}," edi-files",{"type":44,"tag":682,"props":3265,"children":3266},{"style":3042},[3267],{"type":50,"value":3045},{"type":44,"tag":682,"props":3269,"children":3270},{"class":684,"line":703},[3271,3276,3281,3286,3290,3295,3299],{"type":44,"tag":682,"props":3272,"children":3273},{"style":1771},[3274],{"type":50,"value":3275},"  --source",{"type":44,"tag":682,"props":3277,"children":3278},{"style":1771},[3279],{"type":50,"value":3280}," .\u002Ftest-input.edi",{"type":44,"tag":682,"props":3282,"children":3283},{"style":1771},[3284],{"type":50,"value":3285}," --path",{"type":44,"tag":682,"props":3287,"children":3288},{"style":1737},[3289],{"type":50,"value":1768},{"type":44,"tag":682,"props":3291,"children":3292},{"style":1771},[3293],{"type":50,"value":3294},"In\u002Ftest-input.edi",{"type":44,"tag":682,"props":3296,"children":3297},{"style":1737},[3298],{"type":50,"value":1759},{"type":44,"tag":682,"props":3300,"children":3301},{"style":3042},[3302],{"type":50,"value":3045},{"type":44,"tag":682,"props":3304,"children":3305},{"class":684,"line":713},[3306,3311,3316,3321],{"type":44,"tag":682,"props":3307,"children":3308},{"style":1771},[3309],{"type":50,"value":3310},"  --account-name",{"type":44,"tag":682,"props":3312,"children":3313},{"style":3042},[3314],{"type":50,"value":3315}," $STORAGE_ACCOUNT ",{"type":44,"tag":682,"props":3317,"children":3318},{"style":1771},[3319],{"type":50,"value":3320},"--account-key",{"type":44,"tag":682,"props":3322,"children":3323},{"style":3042},[3324],{"type":50,"value":3325}," $KEY\n",{"type":44,"tag":238,"props":3327,"children":3329},{"id":3328},"_33-cold-start-and-warmup",[3330],{"type":50,"value":3331},"3.3 Cold Start and Warmup",{"type":44,"tag":57,"props":3333,"children":3334},{},[3335,3337,3342,3344,3350],{"type":50,"value":3336},"After deployment or restart, Logic Apps Standard on WS1 takes ",{"type":44,"tag":61,"props":3338,"children":3339},{},[3340],{"type":50,"value":3341},"60–180 seconds",{"type":50,"value":3343}," to fully initialize. The hostruntime API returns ",{"type":44,"tag":117,"props":3345,"children":3347},{"className":3346},[],[3348],{"type":50,"value":3349},"ServiceUnavailable",{"type":50,"value":3351}," during this period. Wait before querying run history.",{"type":44,"tag":69,"props":3353,"children":3354},{},[],{"type":44,"tag":73,"props":3356,"children":3358},{"id":3357},"_4-cloud-test-report",[3359],{"type":50,"value":3360},"4. Cloud Test Report",{"type":44,"tag":57,"props":3362,"children":3363},{},[3364,3366,3371],{"type":50,"value":3365},"Generate ",{"type":44,"tag":117,"props":3367,"children":3369},{"className":3368},[],[3370],{"type":50,"value":2930},{"type":50,"value":3372}," with:",{"type":44,"tag":250,"props":3374,"children":3375},{},[3376,3388,3393,3398,3403],{"type":44,"tag":98,"props":3377,"children":3378},{},[3379,3381,3386],{"type":50,"value":3380},"This report is MANDATORY. Do NOT consider the cloud deployment\u002Ftesting task complete until ",{"type":44,"tag":117,"props":3382,"children":3384},{"className":3383},[],[3385],{"type":50,"value":2930},{"type":50,"value":3387}," has been created and populated.",{"type":44,"tag":98,"props":3389,"children":3390},{},[3391],{"type":50,"value":3392},"Deployment details (resource names, regions, SKUs).",{"type":44,"tag":98,"props":3394,"children":3395},{},[3396],{"type":50,"value":3397},"Cloud test results per scenario.",{"type":44,"tag":98,"props":3399,"children":3400},{},[3401],{"type":50,"value":3402},"Final Bicep template summary.",{"type":44,"tag":98,"props":3404,"children":3405},{},[3406],{"type":50,"value":3407},"Full step-by-step cloud deployment guide (reproducible from scratch).",{"type":44,"tag":69,"props":3409,"children":3410},{},[],{"type":44,"tag":73,"props":3412,"children":3414},{"id":3413},"_5-common-pitfalls-lessons-learned",[3415],{"type":50,"value":3416},"5. Common Pitfalls (Lessons Learned)",{"type":44,"tag":3418,"props":3419,"children":3420},"table",{},[3421,3445],{"type":44,"tag":3422,"props":3423,"children":3424},"thead",{},[3425],{"type":44,"tag":3426,"props":3427,"children":3428},"tr",{},[3429,3435,3440],{"type":44,"tag":3430,"props":3431,"children":3432},"th",{},[3433],{"type":50,"value":3434},"Pitfall",{"type":44,"tag":3430,"props":3436,"children":3437},{},[3438],{"type":50,"value":3439},"Symptom",{"type":44,"tag":3430,"props":3441,"children":3442},{},[3443],{"type":50,"value":3444},"Fix",{"type":44,"tag":3446,"props":3447,"children":3448},"tbody",{},[3449,3480,3509,3527,3556,3584,3611,3639,3675],{"type":44,"tag":3426,"props":3450,"children":3451},{},[3452,3470,3475],{"type":44,"tag":3453,"props":3454,"children":3455},"td",{},[3456,3458,3463,3465],{"type":50,"value":3457},"Missing ",{"type":44,"tag":117,"props":3459,"children":3461},{"className":3460},[],[3462],{"type":50,"value":317},{"type":50,"value":3464}," + ",{"type":44,"tag":117,"props":3466,"children":3468},{"className":3467},[],[3469],{"type":50,"value":328},{"type":44,"tag":3453,"props":3471,"children":3472},{},[3473],{"type":50,"value":3474},"Runtime crashes, ServiceUnavailable forever",{"type":44,"tag":3453,"props":3476,"children":3477},{},[3478],{"type":50,"value":3479},"Add both to Bicep appSettings (most common cause of startup failure)",{"type":44,"tag":3426,"props":3481,"children":3482},{},[3483,3494,3504],{"type":44,"tag":3453,"props":3484,"children":3485},{},[3486,3488],{"type":50,"value":3487},"Callback URL passed via shell ",{"type":44,"tag":117,"props":3489,"children":3491},{"className":3490},[],[3492],{"type":50,"value":3493},"--parameters \"url=$var\"",{"type":44,"tag":3453,"props":3495,"children":3496},{},[3497,3499],{"type":50,"value":3498},"URL truncated at first ",{"type":44,"tag":117,"props":3500,"children":3502},{"className":3501},[],[3503],{"type":50,"value":435},{"type":44,"tag":3453,"props":3505,"children":3506},{},[3507],{"type":50,"value":3508},"Put in parameters JSON file",{"type":44,"tag":3426,"props":3510,"children":3511},{},[3512,3517,3522],{"type":44,"tag":3453,"props":3513,"children":3514},{},[3515],{"type":50,"value":3516},"Empty callback URL in parameters file",{"type":44,"tag":3453,"props":3518,"children":3519},{},[3520],{"type":50,"value":3521},"Next Bicep deploy wipes the setting",{"type":44,"tag":3453,"props":3523,"children":3524},{},[3525],{"type":50,"value":3526},"Always populate before deploy",{"type":44,"tag":3426,"props":3528,"children":3529},{},[3530,3541,3546],{"type":44,"tag":3453,"props":3531,"children":3532},{},[3533,3535],{"type":50,"value":3534},"Windows mount path ",{"type":44,"tag":117,"props":3536,"children":3538},{"className":3537},[],[3539],{"type":50,"value":3540},"\u002Fmnt\u002F...",{"type":44,"tag":3453,"props":3542,"children":3543},{},[3544],{"type":50,"value":3545},"DeploymentFailed: \"MountPath must be sub-directory of \\mounts\"",{"type":44,"tag":3453,"props":3547,"children":3548},{},[3549,3550],{"type":50,"value":483},{"type":44,"tag":117,"props":3551,"children":3553},{"className":3552},[],[3554],{"type":50,"value":3555},"\u002Fmounts\u002F...",{"type":44,"tag":3426,"props":3557,"children":3558},{},[3559,3568,3573],{"type":44,"tag":3453,"props":3560,"children":3561},{},[3562],{"type":44,"tag":117,"props":3563,"children":3565},{"className":3564},[],[3566],{"type":50,"value":3567},"az webapp deploy --type zip",{"type":44,"tag":3453,"props":3569,"children":3570},{},[3571],{"type":50,"value":3572},"Content share diverges from wwwroot",{"type":44,"tag":3453,"props":3574,"children":3575},{},[3576,3577,3582],{"type":50,"value":483},{"type":44,"tag":117,"props":3578,"children":3580},{"className":3579},[],[3581],{"type":50,"value":489},{"type":50,"value":3583}," to content share",{"type":44,"tag":3426,"props":3585,"children":3586},{},[3587,3597,3602],{"type":44,"tag":3453,"props":3588,"children":3589},{},[3590,3595],{"type":44,"tag":117,"props":3591,"children":3593},{"className":3592},[],[3594],{"type":50,"value":593},{"type":50,"value":3596}," for Logic Apps",{"type":44,"tag":3453,"props":3598,"children":3599},{},[3600],{"type":50,"value":3601},"May not restart workflow runtime",{"type":44,"tag":3453,"props":3603,"children":3604},{},[3605,3606],{"type":50,"value":483},{"type":44,"tag":117,"props":3607,"children":3609},{"className":3608},[],[3610],{"type":50,"value":585},{"type":44,"tag":3426,"props":3612,"children":3613},{},[3614,3625,3630],{"type":44,"tag":3453,"props":3615,"children":3616},{},[3617,3619],{"type":50,"value":3618},"Query runs with ",{"type":44,"tag":117,"props":3620,"children":3622},{"className":3621},[],[3623],{"type":50,"value":3624},"api-version=2024-02-02",{"type":44,"tag":3453,"props":3626,"children":3627},{},[3628],{"type":50,"value":3629},"NoRegisteredProviderFound error",{"type":44,"tag":3453,"props":3631,"children":3632},{},[3633,3634],{"type":50,"value":483},{"type":44,"tag":117,"props":3635,"children":3637},{"className":3636},[],[3638],{"type":50,"value":2976},{"type":44,"tag":3426,"props":3640,"children":3641},{},[3642,3659,3664],{"type":44,"tag":3453,"props":3643,"children":3644},{},[3645,3650,3652,3657],{"type":44,"tag":117,"props":3646,"children":3648},{"className":3647},[],[3649],{"type":50,"value":3006},{"type":50,"value":3651}," without ",{"type":44,"tag":117,"props":3653,"children":3655},{"className":3654},[],[3656],{"type":50,"value":3188},{"type":50,"value":3658}," flag",{"type":44,"tag":3453,"props":3660,"children":3661},{},[3662],{"type":50,"value":3663},"401 Unauthorized on hostruntime URLs",{"type":44,"tag":3453,"props":3665,"children":3666},{},[3667,3669],{"type":50,"value":3668},"Add ",{"type":44,"tag":117,"props":3670,"children":3672},{"className":3671},[],[3673],{"type":50,"value":3674},"--resource \"https:\u002F\u002Fmanagement.azure.com\"",{"type":44,"tag":3426,"props":3676,"children":3677},{},[3678,3688,3693],{"type":44,"tag":3453,"props":3679,"children":3680},{},[3681,3683],{"type":50,"value":3682},"Settings set via ",{"type":44,"tag":117,"props":3684,"children":3686},{"className":3685},[],[3687],{"type":50,"value":140},{"type":44,"tag":3453,"props":3689,"children":3690},{},[3691],{"type":50,"value":3692},"Wiped on next Bicep redeploy",{"type":44,"tag":3453,"props":3694,"children":3695},{},[3696],{"type":50,"value":3697},"Put ALL settings in Bicep template",{"type":44,"tag":672,"props":3699,"children":3701},{"className":3700,"code":676,"language":50},[2989],[3702],{"type":44,"tag":117,"props":3703,"children":3704},{"__ignoreMap":676},[3705],{"type":50,"value":676},{"type":44,"tag":3707,"props":3708,"children":3709},"style",{},[3710],{"type":50,"value":3711},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3713,"total":781},[3714,3731,3739,3756,3773,3789,3799],{"slug":3715,"name":3715,"fn":3716,"description":3717,"org":3718,"tags":3719,"stars":27,"repoUrl":28,"updatedAt":3730},"analyse-source-design","analyze TIBCO flow architecture","Rules for analysing a single TIBCO flow group's architecture. Covers source file reading depth, Mermaid diagram rules, flow\u002Fsub-process rendering, processor mapping priority ladder, and the required multi-step store tool sequence.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3720,3723,3724,3727],{"name":3721,"slug":3722,"type":14},"Architecture","architecture",{"name":11,"slug":8,"type":14},{"name":3725,"slug":3726,"type":14},"Code Analysis","code-analysis",{"name":3728,"slug":3729,"type":14},"Diagrams","diagrams","2026-07-12T08:19:15.81605",{"slug":4,"name":4,"fn":5,"description":6,"org":3732,"tags":3733,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3734,3735,3736,3737,3738],{"name":11,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":19,"slug":20,"type":14},{"name":16,"slug":17,"type":14},{"name":25,"slug":26,"type":14},{"slug":3740,"name":3740,"fn":3741,"description":3742,"org":3743,"tags":3744,"stars":27,"repoUrl":28,"updatedAt":3755},"connections-json-generation-rules","generate connections.json files for Logic Apps","Rules for generating connections.json files for Logic Apps Standard. Covers serviceProviderConnections format, mandatory reference lookup, FileSystem mountPath rule, and connector parameter constraints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3745,3748,3749,3752],{"name":3746,"slug":3747,"type":14},"Automation","automation",{"name":11,"slug":8,"type":14},{"name":3750,"slug":3751,"type":14},"Configuration","configuration",{"name":3753,"slug":3754,"type":14},"Workflow Automation","workflow-automation","2026-07-12T08:20:28.730402",{"slug":3757,"name":3757,"fn":3758,"description":3759,"org":3760,"tags":3761,"stars":27,"repoUrl":28,"updatedAt":3772},"conversion-task-plan-rules","generate ordered conversion task plans","Rules for generating ordered conversion task plans. Covers mandatory task ordering, required task types, descriptive task ID rules, optional vs non-optional tasks, output path conventions, and what each task must contain.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3762,3763,3766,3769],{"name":11,"slug":8,"type":14},{"name":3764,"slug":3765,"type":14},"Migration","migration",{"name":3767,"slug":3768,"type":14},"Operations","operations",{"name":3770,"slug":3771,"type":14},"Planning","planning","2026-07-12T08:20:17.194993",{"slug":3774,"name":3774,"fn":3775,"description":3776,"org":3777,"tags":3778,"stars":27,"repoUrl":28,"updatedAt":3788},"dependency-and-decompilation-analysis","analyze MuleSoft dependencies and decompiled Java code","Rules for discovering, analysing, and classifying missing dependencies during MuleSoft flow analysis. Covers JAR\u002FJava decompilation, Maven dependency analysis, custom module classification, and what blocks migration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3779,3780,3781,3784,3787],{"name":11,"slug":8,"type":14},{"name":3725,"slug":3726,"type":14},{"name":3782,"slug":3783,"type":14},"Java","java",{"name":3785,"slug":3786,"type":14},"Maven","maven",{"name":3764,"slug":3765,"type":14},"2026-07-12T08:20:04.462447",{"slug":3790,"name":3790,"fn":3791,"description":3792,"org":3793,"tags":3794,"stars":27,"repoUrl":28,"updatedAt":3798},"detect-logical-groups","group MuleSoft integration artifacts","Rules for detecting and grouping MuleSoft integration artifacts into logical flow groups using flow-reference strategy. Covers flow-ref call-chain rules, fallback grouping when no sources exist, and required output fields.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3795,3796,3797],{"name":3721,"slug":3722,"type":14},{"name":11,"slug":8,"type":14},{"name":3764,"slug":3765,"type":14},"2026-07-12T08:20:08.228065",{"slug":3800,"name":3800,"fn":3801,"description":3802,"org":3803,"tags":3804,"stars":27,"repoUrl":28,"updatedAt":3813},"dotnet-local-functions-logic-apps","create .NET local functions for Logic Apps","Creates .NET local functions (custom code) for Azure Logic Apps Standard. Covers exact NuGet packages, namespaces, csproj, MSBuild targets, VS Code config, function.json, and workflow InvokeFunction patterns for both .NET 8 and .NET Framework 4.7.2.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3805,3808,3811,3812],{"name":3806,"slug":3807,"type":14},".NET","net",{"name":3809,"slug":3810,"type":14},"API Development","api-development",{"name":3746,"slug":3747,"type":14},{"name":11,"slug":8,"type":14},"2026-07-12T08:19:23.722956",{"items":3815,"total":1638},[3816,3835,3850,3867,3880,3895,3908,3923,3934,3948,3961,3974],{"slug":3817,"name":3817,"fn":3818,"description":3819,"org":3820,"tags":3821,"stars":3832,"repoUrl":3833,"updatedAt":3834},"azure-arg-external-evaluation-policy-author","author and test Azure Resource Graph policies","Use when the user wants to author, design, or test an Azure Policy that queries Azure Resource Graph (ARG) at request-time — i.e. a policy whose deny\u002Faudit decision depends on data from elsewhere in the subscription (sibling\u002Fparent resource state, RG-wide invariants, multi-hop relationships, etc.). Formally called Azure Policy External Evaluation; sometimes referred to colloquially as \"Invoke\". Drives an iterative KQL co-design loop against the user's real subscription via `az graph query`, then emits a policy definition, assignment, `.http` test flow, and an `EXPLANATION.md` companion. Read-only; never provisions anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3822,3823,3826,3829],{"name":11,"slug":8,"type":14},{"name":3824,"slug":3825,"type":14},"Compliance","compliance",{"name":3827,"slug":3828,"type":14},"Governance","governance",{"name":3830,"slug":3831,"type":14},"Policy","policy",1686,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-policy","2026-07-12T08:17:48.378432",{"slug":3836,"name":3836,"fn":3837,"description":3838,"org":3839,"tags":3840,"stars":3847,"repoUrl":3848,"updatedAt":3849},"azure-blueprints-migration","migrate Azure Blueprints to Template Specs","Use when a user needs to migrate off Azure Blueprints (definitions and\u002For assignments) to Template Specs and Deployment Stacks before the January 31, 2027 retirement. Covers inventory, export, conversion to Bicep, policy decoupling, Template Spec publishing, Deployment Stack deployment with deny-settings, validation, and cutover.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3841,3842,3843,3846],{"name":11,"slug":8,"type":14},{"name":19,"slug":20,"type":14},{"name":3844,"slug":3845,"type":14},"Infrastructure as Code","infrastructure-as-code",{"name":3764,"slug":3765,"type":14},260,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-blueprints","2026-07-12T08:17:49.646405",{"slug":3851,"name":3851,"fn":3852,"description":3853,"org":3854,"tags":3855,"stars":3864,"repoUrl":3865,"updatedAt":3866},"apiview-feedback-resolution","resolve APIView feedback on Azure SDKs","Analyze and resolve APIView review feedback on Azure SDK PRs. **UTILITY SKILL**. USE FOR: APIView comments, API review feedback, SDK API surface changes. DO NOT USE FOR: general code review, non-APIView feedback. INVOKES: azure-sdk-mcp:azsdk_apiview_get_comments, azure-sdk-mcp:azsdk_typespec_customized_code_update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3856,3857,3858,3861],{"name":3809,"slug":3810,"type":14},{"name":11,"slug":8,"type":14},{"name":3859,"slug":3860,"type":14},"Code Review","code-review",{"name":3862,"slug":3863,"type":14},"Documentation","documentation",133,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-tools","2026-07-12T08:17:43.350876",{"slug":3868,"name":3868,"fn":3869,"description":3870,"org":3871,"tags":3872,"stars":3864,"repoUrl":3865,"updatedAt":3879},"azsdk-common-live-and-recorded-tests","deploy resources and run Azure SDK tests","Deploy test resources and run Azure SDK tests in live, record, or playback mode. WHEN: \"run live tests\", \"run recorded tests\", \"deploy test resources\", \"record tests\", \"run tests in record mode\", \"clean up test resources\", \"run tests against live resources\". DO NOT USE FOR: writing new tests, authoring Bicep templates, playback-only test runs without resource deployment. INVOKES: azure-sdk-mcp:azsdk_package_run_tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3873,3874,3875,3878],{"name":11,"slug":8,"type":14},{"name":19,"slug":20,"type":14},{"name":3876,"slug":3877,"type":14},"SDK","sdk",{"name":25,"slug":26,"type":14},"2026-07-12T08:17:44.718943",{"slug":3881,"name":3881,"fn":3882,"description":3883,"org":3884,"tags":3885,"stars":3864,"repoUrl":3865,"updatedAt":3894},"azsdk-common-prepare-release-plan","manage Azure SDK release plan work items","Create, get, update, abandon, and link SDK PRs to release plan work items for Azure SDK releases. **UTILITY SKILL**. USE FOR: \"create release plan\", \"get release plan\", \"update release plan\", \"update API spec in release plan\", \"update SDK details in release plan\", \"abandon release plan\", \"link SDK PR to plan\", \"namespace approval\", \"check release plan status\". DO NOT USE FOR: SDK code generation, pipeline troubleshooting, API review feedback. INVOKES: azure-sdk-mcp:azsdk_create_release_plan, azure-sdk-mcp:azsdk_get_release_plan, azure-sdk-mcp:azsdk_get_release_plan_for_spec_pr, azure-sdk-mcp:azsdk_update_release_plan, azure-sdk-mcp:azsdk_update_api_spec_pull_request_in_release_plan, azure-sdk-mcp:azsdk_update_sdk_details_in_release_plan, azure-sdk-mcp:azsdk_abandon_release_plan, azure-sdk-mcp:azsdk_link_sdk_pull_request_to_release_plan, azure-sdk-mcp:azsdk_link_namespace_approval_issue.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3886,3887,3890,3893],{"name":11,"slug":8,"type":14},{"name":3888,"slug":3889,"type":14},"GitHub","github",{"name":3891,"slug":3892,"type":14},"Project Management","project-management",{"name":3876,"slug":3877,"type":14},"2026-07-12T08:17:38.345387",{"slug":3896,"name":3896,"fn":3897,"description":3898,"org":3899,"tags":3900,"stars":3864,"repoUrl":3865,"updatedAt":3907},"azsdk-common-sdk-release","release Azure SDK packages","Check release readiness and trigger the release pipeline for Azure SDK packages. **UTILITY SKILL**. USE FOR: \"release SDK\", \"trigger release\", \"check release readiness\", \"release pipeline\", \"publish package\", \"ship SDK\". DO NOT USE FOR: SDK development, code generation, pipeline debugging, release plan creation. INVOKES: azure-sdk-mcp:azsdk_release_sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3901,3902,3905,3906],{"name":11,"slug":8,"type":14},{"name":3903,"slug":3904,"type":14},"CI\u002FCD","ci-cd",{"name":19,"slug":20,"type":14},{"name":3876,"slug":3877,"type":14},"2026-07-12T08:17:34.27607",{"slug":3909,"name":3909,"fn":3910,"description":3911,"org":3912,"tags":3913,"stars":3864,"repoUrl":3865,"updatedAt":3922},"azure-typespec-author","author and modify Azure TypeSpec API specifications","Authors and modifies Azure TypeSpec (.tsp) API specifications. USE FOR: any TypeSpec\u002Ftsp change — api versions (add, bump, preview, stable, promote), resources, operations, models, properties, decorators, visibility, constraints, breaking changes, LRO, suppressions, operationId, spread model. Covers ARM resource-manager and data-plane services. DO NOT USE FOR: SDK generation, releasing SDK packages, or single MCP tool calls. INVOKES: azure-sdk-mcp:azsdk_typespec_generate_authoring_plan, azure-sdk-mcp:azsdk_run_typespec_validation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3914,3915,3916,3919],{"name":3809,"slug":3810,"type":14},{"name":11,"slug":8,"type":14},{"name":3917,"slug":3918,"type":14},"OpenAPI","openapi",{"name":3920,"slug":3921,"type":14},"Technical Writing","technical-writing","2026-07-12T08:17:39.603232",{"slug":3924,"name":3924,"fn":3925,"description":3926,"org":3927,"tags":3928,"stars":3864,"repoUrl":3865,"updatedAt":3933},"generate-sdk-locally","generate and test Azure SDKs locally","Generate, build, and test Azure SDKs locally from TypeSpec with automatic customization. WHEN: \"generate SDK locally\", \"build SDK\", \"run SDK tests\", \"run CI checks\", \"validate package\", \"run checks\", \"update changelog\", \"fix SDK build errors\", \"fix breaking changes\", \"resolve SDK generation errors\", \"customize TypeSpec\", \"rename SDK client\", \"rename SDK model\", \"hide operation from SDK\", \"fix analyzer errors\", \"resolve customization drift\", \"create subclient\", \"update metadata\", \"update version\". DO NOT USE FOR: publishing to package registries, CI pipeline configuration, API design review. INVOKES: azsdk_verify_setup, azsdk_package_generate_code, azsdk_package_build_code, azsdk_package_run_check, azsdk_package_run_tests, azsdk_customized_code_update, azsdk_package_update_changelog_content, azsdk_package_update_metadata, azsdk_package_update_version.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3929,3930,3931,3932],{"name":11,"slug":8,"type":14},{"name":3903,"slug":3904,"type":14},{"name":3876,"slug":3877,"type":14},{"name":25,"slug":26,"type":14},"2026-07-12T08:17:37.08523",{"slug":3935,"name":3935,"fn":3936,"description":3937,"org":3938,"tags":3939,"stars":3864,"repoUrl":3865,"updatedAt":3947},"markdown-token-optimizer","optimize markdown files for token efficiency","Analyze markdown files for token efficiency and reduce context-window bloat. **UTILITY SKILL**. DO NOT USE FOR: code optimization, general file editing, non-markdown files. TRIGGERS: optimize markdown, reduce tokens, token count, token bloat, too many tokens, make concise, shrink file, file too large, optimize for AI, token efficiency, verbose markdown, reduce file size. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3940,3943,3946],{"name":3941,"slug":3942,"type":14},"LLM","llm",{"name":3944,"slug":3945,"type":14},"Performance","performance",{"name":3920,"slug":3921,"type":14},"2026-07-12T08:17:42.080413",{"slug":3949,"name":3949,"fn":3950,"description":3951,"org":3952,"tags":3953,"stars":3864,"repoUrl":3865,"updatedAt":3960},"pipeline-troubleshooting","troubleshoot Azure SDK CI pipelines","Diagnose and resolve failures in Azure SDK CI and generation pipelines. **UTILITY SKILL**. USE FOR: \"pipeline failed\", \"build failure\", \"CI check failing\", \"SDK generation error\", \"reproduce pipeline locally\", \"debug SDK pipeline\". DO NOT USE FOR: local build issues without pipeline context, API design review, SDK publishing. INVOKES: azure-sdk-mcp:azsdk_analyze_pipeline, azure-sdk-mcp:azsdk_package_build_code, azure-sdk-mcp:azsdk_package_run_check.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3954,3955,3956,3959],{"name":11,"slug":8,"type":14},{"name":3903,"slug":3904,"type":14},{"name":3957,"slug":3958,"type":14},"Debugging","debugging",{"name":3876,"slug":3877,"type":14},"2026-07-12T08:17:40.821512",{"slug":3962,"name":3962,"fn":3963,"description":3964,"org":3965,"tags":3966,"stars":3864,"repoUrl":3865,"updatedAt":3973},"sensei","improve skill frontmatter compliance","**WORKFLOW SKILL** — Iteratively improve skill frontmatter compliance using the Ralph loop pattern. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"skill compliance\", \"frontmatter audit\", \"score skill\", \"check skill tokens\". INVOKES: token counting tools, test runners, git commands. FOR SINGLE OPERATIONS: use token CLI directly for counts\u002Fchecks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3967,3968,3969,3972],{"name":11,"slug":8,"type":14},{"name":3824,"slug":3825,"type":14},{"name":3970,"slug":3971,"type":14},"Process Optimization","process-optimization",{"name":3920,"slug":3921,"type":14},"2026-07-12T08:17:32.970921",{"slug":3975,"name":3975,"fn":3976,"description":3977,"org":3978,"tags":3979,"stars":3864,"repoUrl":3865,"updatedAt":3985},"skill-authoring","author agent skills for agentskills.io","Write Agent Skills that comply with the agentskills.io specification. WHEN: \"create a skill\", \"new skill\", \"write a skill\", \"skill template\", \"skill structure\", \"review skill\", \"skill PR\", \"skill compliance\", \"SKILL.md format\", \"skill frontmatter\", \"skill best practices\". DO NOT USE FOR: improving existing skills (use sensei), general documentation. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3980,3981,3984],{"name":3862,"slug":3863,"type":14},{"name":3982,"slug":3983,"type":14},"Plugin Development","plugin-development",{"name":3920,"slug":3921,"type":14},"2026-07-12T08:17:35.873862"]