Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e30bf46
docs: Udpated extending-with-code doc (#1073)
tracyboehrer May 4, 2021
366eae3
fix: .NET Functions .csproj template fixes (#1065)
peterinnesmsft May 4, 2021
89ec8b8
fix: Fixing closing tag for local.settings.json Content element in .N…
peterinnesmsft May 4, 2021
4a4bfe4
fix: Install .NET Core SDK for '.NET: Version, Sign & Pack' CI/CD pip…
peterinnesmsft May 5, 2021
c3bf22e
docs: R13 fit and finish for template README.md files (#1079)
May 5, 2021
83a7779
Convert switch case condition to stringexpression, per schema definit…
ryanisgrig May 7, 2021
2a422a6
chore: bump js sdk version to 4.13.2-preview (#1096)
joshgummersall May 10, 2021
d85030e
convert svg icons to PNG to fix broken images in Teams (#1100)
lauren-mills May 11, 2021
87bf90c
Corrected Skills Trigger to use correct route (#1102)
tracyboehrer May 11, 2021
8d640e1
fix: skill interrupting itself (#1107)
lauren-mills May 11, 2021
512ae8f
Update sln to point to correct path for package (#1093)
thomas-chung May 12, 2021
42f18d0
fix: Update .NET Functions to use wwwroot dir for static files (#1113)
peterinnesmsft May 13, 2021
7f90822
add rewrite rule for manifest files for js webapps (#1116)
benbrown May 17, 2021
437f96f
bump: js to 4.13.4 (#1120)
joshgummersall May 18, 2021
49f622a
fix: Updated SDK dependencies (#1119)
tracyboehrer May 18, 2021
9de3d82
chore: Add tags to Teams component project file (#1115)
EricDahlvang May 19, 2021
7dff24e
fix: orphaned schemas (#1068)
joshgummersall May 19, 2021
e16397c
PR labeler corrections (#1125)
tracyboehrer May 20, 2021
354d19e
cleanup (#1127)
clearab May 26, 2021
3547fbd
feat: generator-bot-adaptive: Added command line option to specify SD…
tracyboehrer Jun 4, 2021
c27784a
chore: Update issue templates to reflect Components repository (#1141)
ryanisgrig Jun 5, 2021
17dec7e
chore: Added FunctionalTests to repo (#1144)
tracyboehrer Jun 7, 2021
afb76d8
generator-bot-adaptive: Include *.model (#1140)
tracyboehrer Jun 8, 2021
ae4e7e8
generator-bot-adaptive: Updated default speak voice (#1147)
tracyboehrer Jun 9, 2021
639e25a
chore: Update package metadata (#1148)
peterinnesmsft Jun 9, 2021
c5bb422
feat: Azure resource deployment for Components Functional Tests pipel…
ryanisgrig Jun 11, 2021
2ca9d41
chore: @microsoft/generator-bot-adaptive happy path unit tests (#1091)
peterinnesmsft Jun 14, 2021
e65cf7e
chore: Wire up yeoman unit tests in CI/CD pipelines (#1152)
peterinnesmsft Jun 14, 2021
0f8c042
feat: functional tests generate empty bots in dotnet (#1156)
ryanisgrig Jun 17, 2021
74236b3
fix: GetManager issue with name entity not set (#1163)
thomas-chung Jun 22, 2021
06b888c
Add Teams package unit tests (#1171)
ryanisgrig Jun 29, 2021
a992a47
fix: Stevenic/ac fix (#1164)
Stevenic Jun 29, 2021
bc3507e
feat: functional tests generate empty bots in js (#1186)
ryanisgrig Jul 1, 2021
205d6e0
fix: R14 template issues (#1188)
lauren-mills Jul 1, 2021
1ef640b
chore: clarify yarn usage in pipelines & package with version name to…
ryanisgrig Jul 9, 2021
10e5880
Fixed broken links that open url in Composer modal (#1204)
lauren-mills Jul 9, 2021
11998f6
build: Add Components functional test scenarios to daily pipelines (#…
ryanisgrig Jul 12, 2021
b373b0d
chore: Merge 4.14 To Main (#1201)
thomas-chung Jul 12, 2021
1d51db8
build: add functions app deployment/testing to functional tests (#1218)
ryanisgrig Jul 14, 2021
fa2e140
Merge branch 'main' into user/p-nagpal/main_to_telephony_7_19_2021
Jul 19, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,9 @@ experimental/generator-dotnet-yeoman/node_modules
# Allow the packages directory under tests
!/tests/unit/[Pp]ackages/*

# Allow the packages directory under tests
!/tests/unit/[Pp]ackages/*

# Ignore correct yarn files (no zero install support)
.yarn/*
!.yarn/patches
Expand Down
115 changes: 115 additions & 0 deletions build/templates/template-function-dotnet-bot-resources.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appId": {
"type": "string",
"metadata": {
"description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings."
}
},
"appSecret": {
"type": "string",
"metadata": {
"description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings."
}
},
"botName": {
"type": "string"
},
"botLocation": {
"type": "string"
},
"appInsightsName": {
"type": "string",
"defaultValue": ""
},
"appServicePlanName": {
"type": "string"
},
"appServicePlanResourceGroup": {
"type": "string"
},
"botSku": {
"type": "string",
"defaultValue": "F0",
"metadata": {
"description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1."
}
}
},
"variables": {
"siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]",
"botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]",
"publishingUsername": "[concat('$', parameters('botName'))]"
},
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2015-08-01",
"location": "[parameters('botLocation')]",
"kind": "functionapp",
"name": "[parameters('botName')]",
"properties": {
"name": "[parameters('botName')]",
"kind": "functionapp",
"httpsOnly": true,
"alwaysOn": true,
"webSocketsEnabled": true
},
"resources": [
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/Sites/', parameters('botName'))]"
],
"properties": {
"FUNCTIONS_EXTENSION_VERSION": "~3",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"APPINSIGHTS_INSTRUMENTATIONKEY": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey)]",
"MicrosoftAppId": "[parameters('appId')]",
"MicrosoftAppPassword": "[parameters('appSecret')]"
}
}
]
},
{
"type": "Microsoft.Web/sites/hostNameBindings",
"apiVersion": "2020-09-01",
"name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]",
"location": "[parameters('botLocation')]",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('botName'))]"
],
"properties": {
"siteName": "[parameters('botName')]",
"hostNameType": "Verified"
}
},
{
"type": "Microsoft.BotService/botServices",
"apiVersion": "2020-06-02",
"name": "[parameters('botName')]",
"location": "global",
"kind": "bot",
"sku": {
"name": "[parameters('botSku')]"
},
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('botName'))]"
],
"properties": {
"name": "[parameters('botName')]",
"displayName": "[parameters('botName')]",
"endpoint": "[variables('botEndpoint')]",
"msaAppId": "[parameters('appId')]",
"developerAppInsightsApplicationId": "",
"developerAppInsightKey": "",
"publishingCredentials": null,
"storageResourceId": null
}
}
]
}
116 changes: 116 additions & 0 deletions build/templates/template-function-js-bot-resources.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appId": {
"type": "string",
"metadata": {
"description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings."
}
},
"appSecret": {
"type": "string",
"metadata": {
"description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings."
}
},
"botName": {
"type": "string"
},
"botLocation": {
"type": "string"
},
"appInsightsName": {
"type": "string",
"defaultValue": ""
},
"appServicePlanName": {
"type": "string"
},
"appServicePlanResourceGroup": {
"type": "string"
},
"botSku": {
"type": "string",
"defaultValue": "F0",
"metadata": {
"description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1."
}
}
},
"variables": {
"siteHost": "[concat(parameters('botName'), '.azurewebsites.net')]",
"botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]",
"publishingUsername": "[concat('$', parameters('botName'))]"
},
"resources": [
{
"type": "Microsoft.Web/sites",
"apiVersion": "2015-08-01",
"location": "[parameters('botLocation')]",
"kind": "functionapp",
"name": "[parameters('botName')]",
"properties": {
"name": "[parameters('botName')]",
"kind": "functionapp",
"httpsOnly": true,
"alwaysOn": true,
"webSocketsEnabled": true
},
"resources": [
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/Sites/', parameters('botName'))]"
],
"properties": {
"FUNCTIONS_EXTENSION_VERSION": "~3",
"FUNCTIONS_WORKER_RUNTIME": "node",
"WEBSITE_NODE_DEFAULT_VERSION": "~14",
"APPINSIGHTS_INSTRUMENTATIONKEY": "[if(empty(parameters('appInsightsName')), '', reference(resourceId(parameters('appServicePlanResourceGroup'),'Microsoft.Insights/components', parameters('appInsightsName')), '2015-05-01', 'Full').properties.InstrumentationKey)]",
"MicrosoftAppId": "[parameters('appId')]",
"MicrosoftAppPassword": "[parameters('appSecret')]"
}
}
]
},
{
"type": "Microsoft.Web/sites/hostNameBindings",
"apiVersion": "2020-09-01",
"name": "[concat(parameters('botName'), '/', parameters('botName'), '.azurewebsites.net')]",
"location": "[parameters('botLocation')]",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('botName'))]"
],
"properties": {
"siteName": "[parameters('botName')]",
"hostNameType": "Verified"
}
},
{
"type": "Microsoft.BotService/botServices",
"apiVersion": "2020-06-02",
"name": "[parameters('botName')]",
"location": "global",
"kind": "bot",
"sku": {
"name": "[parameters('botSku')]"
},
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('botName'))]"
],
"properties": {
"name": "[parameters('botName')]",
"displayName": "[parameters('botName')]",
"endpoint": "[variables('botEndpoint')]",
"msaAppId": "[parameters('appId')]",
"developerAppInsightsApplicationId": "",
"developerAppInsightKey": "",
"publishingCredentials": null,
"storageResourceId": null
}
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,19 @@ public enum HostBot
/// </summary>
EmptyBotDotNetWebApp,

/// <summary>
/// Empty bot implemented using DotNet and Functions.
/// </summary>
EmptyBotDotNetFunctions,

/// <summary>
/// Empty bot implemented using JS and Web App.
/// </summary>
EmptyBotJSWebApp
EmptyBotJSWebApp,

/// <summary>
/// Empty bot implemented using JS and Functions.
/// </summary>
EmptyBotJSFunctions
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ public static IEnumerable<object[]> TestCases()
var hostBots = new List<HostBot>
{
HostBot.EmptyBotDotNetWebApp,
HostBot.EmptyBotJSWebApp
HostBot.EmptyBotDotNetFunctions,
HostBot.EmptyBotJSWebApp,
HostBot.EmptyBotJSFunctions
};

var scripts = new List<string> { "EmptyBot.json" };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,17 @@
"BotId": "bfcfnemptybotdotnetwebapp",
"DirectLineSecret": ""
},
"EmptyBotDotNetFunctions": {
"BotId": "bfcfnemptybotdotnetfunctions",
"DirectLineSecret": ""
},
"EmptyBotJSWebApp": {
"BotId": "bfcfnemptybotjswebapp",
"DirectLineSecret": ""
},
"EmptyBotJSFunctions": {
"BotId": "bfcfnemptybotjsfunctions",
"DirectLineSecret": ""
}
}
}
71 changes: 49 additions & 22 deletions tests/functional/build/yaml/deployBotResources/dotnet/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,30 +154,57 @@ stages:
pathToPublish: "$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip"
artifactName: dotnet-$(BUILD.BUILDID)

- ${{ if eq(bot.project.integration, 'webapp') }}:
# Create App Service and Bot Channel Registration
- template: ../common/createAppService.yml
parameters:
appId: $(APPID)
appInsight: "${{ parameters.appInsight }}"
appSecret: $(APPSECRET)
appServicePlan: "${{ parameters.appServicePlan }}"
appServicePlanRG: "${{ parameters.appServicePlanRG }}"
azureSubscription: "${{ parameters.azureSubscription }}"
botGroup: "${{ parameters.resourceGroup }}"
botName: "${{ bot.name }}"
botPricingTier: "${{ parameters.botPricingTier }}"
resourceSuffix: "${{ parameters.resourceSuffix }}"
templateFile: "build/templates/template-bot-resources.json"
- template: ../common/createAppService.yml
parameters:
appId: $(APPID)
appInsight: "${{ parameters.appInsight }}"
appSecret: $(APPSECRET)
appServicePlan: "${{ parameters.appServicePlan }}"
appServicePlanRG: "${{ parameters.appServicePlanRG }}"
azureSubscription: "${{ parameters.azureSubscription }}"
botGroup: "${{ parameters.resourceGroup }}"
botName: "${{ bot.name }}"
botPricingTier: "${{ parameters.botPricingTier }}"
resourceSuffix: "${{ parameters.resourceSuffix }}"
templateFile: "build/templates/template-bot-resources.json"

# Deploy bot
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)'
inputs:
azureSubscription: "${{ parameters.azureSubscription }}"
appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)'
resourceGroupName: '${{ parameters.resourceGroup }}'
package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip'
deploymentMethod: runFromPackage
# Deploy bot to Azure Web App
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : ${{ bot.name }}-$(BUILD.BUILDID)'
inputs:
azureSubscription: "${{ parameters.azureSubscription }}"
appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)'
resourceGroupName: '${{ parameters.resourceGroup }}'
package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip'
deploymentMethod: runFromPackage

- ${{ if eq(bot.project.integration, 'functions') }}:
# Create Functions App and Bot Channel Registration
- template: ../common/createAppService.yml
parameters:
appId: $(APPID)
appInsight: "${{ parameters.appInsight }}"
appSecret: $(APPSECRET)
appServicePlan: "${{ parameters.appServicePlan }}"
appServicePlanRG: "${{ parameters.appServicePlanRG }}"
azureSubscription: "${{ parameters.azureSubscription }}"
botGroup: "${{ parameters.resourceGroup }}"
botName: "${{ bot.name }}"
botPricingTier: "${{ parameters.botPricingTier }}"
resourceSuffix: "${{ parameters.resourceSuffix }}"
templateFile: "build/templates/template-function-dotnet-bot-resources.json"

# Deploy bot to Azure Functions
- task: AzureFunctionApp@1
displayName: 'Deploy Functions App : ${{ bot.name }}-$(BUILD.BUILDID)'
inputs:
azureSubscription: "${{ parameters.azureSubscription }}"
appType: 'functionApp'
appName: '${{ bot.name }}${{ parameters.resourceSuffix }}-$(BUILD.BUILDID)'
package: '$(SYSTEM.DEFAULTWORKINGDIRECTORY)/${{ parameters.buildFolder }}/${{ bot.name }}/${{ bot.name }}.zip'
deploymentMethod: runFromPackage

# Configure OAuth
- ${{ if eq(bot.type, 'Skill') }}:
Expand Down
Loading