This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is an Azure Functions solution demonstrating deployment of multiple independent function apps to separate Azure Function App services. The solution contains three function apps (Liquid, Solid, and Solidus), each deployed as a separate Azure resource.
- Runtime: .NET 8.0
- Azure Functions: v4 runtime
- Infrastructure: Azure Bicep (Infrastructure as Code)
- Deployment: GitHub Actions
- API Documentation: OpenAPI/Swagger via Microsoft.Azure.WebJobs.Extensions.OpenApi
The repository contains three independent function app projects:
LiquidFunctions/- HTTP-triggered function with OpenAPI supportSolidFunctions/- HTTP-triggered function with OpenAPI supportSolidusFunctions/- HTTP-triggered function with OpenAPI support
Each function app is a separate .NET project with its own .csproj file and can be built, run, and deployed independently.
Build individual function apps:
dotnet build SolidFunctions/SolidFunctions.csproj
dotnet build LiquidFunctions/LiquidFunctions.csproj
dotnet build SolidusFunctions/SolidusFunctions.csprojBuild all function apps using VS Code task:
# Use VS Code Command Palette -> Run Build Task -> "build all"Start individual function apps with Azure Functions Core Tools:
# SolidFunctions (default port 7071)
cd SolidFunctions/bin/Debug/net8.0
func host start
# LiquidFunctions (port 7072)
cd LiquidFunctions/bin/Debug/net8.0
func host start --port 7072
# SolidusFunctions (port 7073)
cd SolidusFunctions/bin/Debug/net8.0
func host start --port 7073Or use VS Code task "start all functions" to run all three simultaneously on different ports.
Each function app requires a local.settings.json file with:
FUNCTIONS_WORKER_RUNTIME: Set to "dotnet-isolated"AzureWebJobsStorage: For local development, use "UseDevelopmentStorage=true" (requires Azurite or Azure Storage Emulator)
Azure resources are defined in Infrastructure/main.bicep and include:
- 3 Azure Function Apps (one for each function project)
- 1 App Service Plan (shared across function apps)
- 1 Storage Account (shared)
- 1 API Management service (optional, for OpenAPI endpoints)
Deploy infrastructure using Azure CLI:
cd Infrastructure
az deployment group create \
--resource-group <ResourceGroupName> \
--template-file main.bicep \
--parameters environment=dev location=eastusThe repository includes automated deployment workflows in .github/workflows/:
deploy_all_functions.yml- Deploys all three function apps in paralleldeploy_liquid_functions.yml- Deploys only LiquidFunctionsdeploy_solid_functions.yml- Deploys only SolidFunctionsdeploy_solidus_functions.yml- Deploys only SolidusFunctionscreate_azure_resources.yml- Creates Azure infrastructure using Bicep
All deployment workflows:
- Build the function app(s) using
dotnet build --configuration Release --output ./output - Deploy to Azure using the Azure Functions Action
- Optionally update API Management with OpenAPI definitions from
/api/openapi/v3.jsonendpoint
This solution demonstrates deploying multiple function apps from a single repository. Each function app:
- Has its own Azure Function App resource in Azure
- Can be deployed independently via separate GitHub Actions workflows
- Shares the same App Service Plan and Storage Account (defined in Bicep)
- Exposes its own OpenAPI specification endpoint
- Can be optionally fronted by Azure API Management with different paths
Each function app project is completely independent:
- Separate namespaces (LiquidFunctions, DeployMultipleFunctions for Solid, SolidusFunctions)
- Own set of dependencies in
.csproj - Own host.json and local.settings.json configurations
- Can be developed and tested in isolation
When modifying one function app, there's no need to rebuild or redeploy the others unless you're using the "deploy all" workflow.
The .vscode/settings.json has azureFunctions.projectSubpath set to "SolidFunctions" - this means Azure Functions extension commands default to that project. When working with LiquidFunctions or SolidusFunctions, you may need to adjust this setting or use the tasks in tasks.json that target specific projects.