Skip to content

Commit

Permalink
Add Azure Developer CLI Template and GitHub Actions Workflow (#4)
Browse files Browse the repository at this point in the history
* feat: use azd template

* chore: add current branch to github action

* chore: add environment

* chore: remove environment

* chore: remove template references

* fix: resolve merge conflict

* fix: remove IDEA settings
  • Loading branch information
hollannikas authored Oct 19, 2024
1 parent 5c9b998 commit d0e3022
Show file tree
Hide file tree
Showing 130 changed files with 34,617 additions and 24 deletions.
57 changes: 57 additions & 0 deletions .azdo/pipelines/azure-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
trigger:
- main
- master

# Azure Pipelines workflow to deploy to Azure using azd
# To configure required secrets and service connection for connecting to Azure, simply run `azd pipeline config --provider azdo`
# Task "Install azd" needs to install setup-azd extension for azdo - https://marketplace.visualstudio.com/items?itemName=ms-azuretools.azd
# See below for alternative task to install azd if you can't install above task in your organization

pool:
vmImage: ubuntu-latest

steps:
- task: setup-azd@0
displayName: Install azd

# If you can't install above task in your organization, you can comment it and uncomment below task to install azd
# - task: Bash@3
# displayName: Install azd
# inputs:
# targetType: 'inline'
# script: |
# curl -fsSL https://aka.ms/install-azd.sh | bash

# azd delegate auth to az to use service connection with AzureCLI@2
- pwsh: |
azd config set auth.useAzCliAuth "true"
displayName: Configure AZD to Use AZ CLI Authentication.
- task: AzureCLI@2
displayName: Provision Infrastructure
inputs:
azureSubscription: azconnection
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
azd provision --no-prompt
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
AZURE_ENV_NAME: $(AZURE_ENV_NAME)
AZURE_LOCATION: $(AZURE_LOCATION)
AZD_INITIAL_ENVIRONMENT_CONFIG: $(secrets.AZD_INITIAL_ENVIRONMENT_CONFIG)

- task: AzureCLI@2
displayName: Deploy Application
inputs:
azureSubscription: azconnection
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
azd deploy --no-prompt
env:
AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
AZURE_ENV_NAME: $(AZURE_ENV_NAME)
AZURE_LOCATION: $(AZURE_LOCATION)
36 changes: 36 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "Azure Developer CLI",
"image": "mcr.microsoft.com/devcontainers/dotnet:8.0-bookworm",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
},
"ghcr.io/devcontainers/features/node:1": {
"version": "18",
"nodeGypDependencies": false
},
"ghcr.io/azure/azure-dev/azd:latest": {}
},
"customizations": {
"vscode": {
"extensions": [
"GitHub.vscode-github-actions",
"ms-azuretools.azure-dev",
"ms-azuretools.vscode-azurefunctions",
"ms-azuretools.vscode-bicep",
"ms-azuretools.vscode-docker",
"ms-dotnettools.csharp",
"ms-dotnettools.vscode-dotnet-runtime",
"ms-vscode.vscode-node-azure-pack"
]
}
},
"forwardPorts": [
3000,
3100
],
"postCreateCommand": "",
"remoteUser": "vscode",
"hostRequirements": {
"memory": "8gb"
}
}
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
64 changes: 64 additions & 0 deletions .github/workflows/azure-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
on:
workflow_dispatch:
push:
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
branches:
- main
- feat/azd-template

# GitHub Actions workflow to deploy to Azure using azd
# To configure required secrets for connecting to Azure, simply run `azd pipeline config`

# Set up permissions for deploying with secretless Azure federated credentials
# https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure?tabs=azure-portal%2Clinux#set-up-azure-login-with-openid-connect-authentication
permissions:
id-token: write
contents: read

jobs:
build:
runs-on: ubuntu-latest
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install azd
uses: Azure/[email protected]

- name: Log in with Azure (Federated Credentials)
if: ${{ env.AZURE_CLIENT_ID != '' }}
run: |
azd auth login `
--client-id "$Env:AZURE_CLIENT_ID" `
--federated-credential-provider "github" `
--tenant-id "$Env:AZURE_TENANT_ID"
shell: pwsh

- name: Log in with Azure (Client Credentials)
if: ${{ env.AZURE_CREDENTIALS != '' }}
run: |
$info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
Write-Host "::add-mask::$($info.clientSecret)"
azd auth login `
--client-id "$($info.clientId)" `
--client-secret "$($info.clientSecret)" `
--tenant-id "$($info.tenantId)"
shell: pwsh
env:
AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}

- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}

- name: Deploy Application
run: azd deploy --no-prompt
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.azure
/node_modules
/.idea/
5 changes: 5 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"recommendations": [
"ms-azuretools.azure-dev"
]
}
48 changes: 48 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Web",
"request": "launch",
"type": "msedge",
"webRoot": "${workspaceFolder}/src/web/src",
"url": "http://localhost:3000",
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/*"
},
},

{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": "Debug API",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build API",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/src/api/bin/Debug/net8.0/Todo.Api.dll",
"args": [],
"cwd": "${workspaceFolder}/src/api",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"envFile": "${input:dotEnvFilePath}"
},

{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
],

"inputs": [
{
"id": "dotEnvFilePath",
"type": "command",
"command": "azure-dev.commands.getDotEnvFilePath"
}
]
}
101 changes: 101 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Start API",
"type": "dotenv",
"targetTasks": "API dotnet run",
"file": "${input:dotEnvFilePath}"
},
{
"label": "API dotnet run",
"detail": "Helper task--use 'Start API' task to ensure environment is set up correctly",
"type": "shell",
"command": "dotnet run",
"options": {
"cwd": "${workspaceFolder}/src/api/"
},
"presentation": {
"panel": "dedicated",
},
"problemMatcher": []
},
{
"label": "Build API",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/api/Todo.Api.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "Watch API",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/src/api/Todo.Api.csproj"
],
"problemMatcher": "$msCompile"
},

{
"label": "Start Web",
"type": "dotenv",
"targetTasks": [
"Restore Web",
"Web npm start"
],
"file": "${input:dotEnvFilePath}"
},
{
"label": "Restore Web",
"type": "shell",
"command": "azd restore web",
"presentation": {
"reveal": "silent"
},
"problemMatcher": []
},
{
"label": "Web npm start",
"detail": "Helper task--use 'Start Web' task to ensure environment is set up correctly",
"type": "shell",
"command": "VITE_APPLICATIONINSIGHTS_CONNECTION_STRING=\"$APPLICATIONINSIGHTS_CONNECTION_STRING\" npm run dev",
"options": {
"cwd": "${workspaceFolder}/src/web/",
"env": {
"VITE_API_BASE_URL": "http://localhost:3100",
"BROWSER": "none"
}
},
"presentation": {
"panel": "dedicated",
},
"problemMatcher": []
},

{
"label": "Start API and Web",
"dependsOn":[
"Start API",
"Start Web"
],
"problemMatcher": []
}
],

"inputs": [
{
"id": "dotEnvFilePath",
"type": "command",
"command": "azure-dev.commands.getDotEnvFilePath"
}
]
}
Loading

0 comments on commit d0e3022

Please sign in to comment.