diff --git a/.github/workflows/IaC.yml b/.github/workflows/IaC.yml
new file mode 100644
index 00000000..bcdddf1a
--- /dev/null
+++ b/.github/workflows/IaC.yml
@@ -0,0 +1,68 @@
+ name: Provision Azure Resources
+ # We only want to run this script manually.
+ on:
+ workflow_dispatch:
+ inputs:
+ # We can add inputs to the workflow_dispatch event. This allows us to
+ # accept user input when running the workflow manually. In this case, we
+ # have a dropdown that allows us to select the target environment.
+
+ targetEnv:
+ description: 'Target environment'
+ type: 'choice'
+ required: true
+ default: 'dev'
+ options:
+ - 'dev'
+ - 'test'
+ - 'prod'
+
+ # Environment variables are defined in an "env" section.
+ # We set the target environment to dev.
+ # Open the deploy-advanced.yml file to see how we can accept user input
+ # instead of needing to change this file to switch environments.
+ env:
+ targetEnv2: dev
+
+
+ jobs:
+ # This script has one job: build and deploy the IaC resources
+ build-and-deploy:
+ # We run this on an Ubuntu-based GitHub hosted runner. This hosted runner
+ # has certain software already installed, including az cli
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+ steps:
+ # Check out the code. This grabs code from the repository and
+ # makes it available to the GitHub hosted runner. It will usually be the
+ # first task for any workflow
+ - uses: actions/checkout@main
+
+ # Log into Azure using a federated credential. We have already set up the
+ # federation process in a prior step, so we need to pass in the following:
+ # Client ID = Application registration ID
+ # Tenant ID = Application owner organization ID (previously called Tenant ID in Azure)
+ # Subscription ID
+ # https://github.com/azure/login
+ - uses: azure/login@v2.1.1
+ with:
+ client-id: ${{ secrets.AZURE_CLIENT_ID }}
+ tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+ subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ # We also need to ensure that enable-AzPSSession is true. This is important for
+ # using OIDC in Azure. If we were to pass in a client secret instead, we would not need
+ # this setting enabled
+ enable-AzPSSession: true
+
+ # Deploy ARM template
+ - name: Run ARM deploy
+ # https://github.com/azure/arm-deploy
+ uses: azure/arm-deploy@v1
+ with:
+ subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ resourceGroupName: ${{ secrets.AZURE_RG }}
+ template: ./src/InfrastructureAsCode/main.bicep
+ parameters: environment=${{ github.event.inputs.targetenv }}
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
new file mode 100644
index 00000000..063627f1
--- /dev/null
+++ b/.github/workflows/ci-cd.yml
@@ -0,0 +1,123 @@
+name: .NET CI-CD
+
+env:
+ registryName: ${{ secrets.CONTAINER_REGISTRY_NAME }}.azurecr.io
+ repositoryName: techexcel/dotnetcoreapp
+ dockerFolderPath: ./src/Application/src/RazorPagesTestSample
+ tag: ${{github.run_number}}
+
+on:
+ push:
+ branches: [ main ]
+ paths: src/Application/**
+ pull_request:
+ branches: [ main ]
+ paths: src/Application/**
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: 8.0
+
+ - name: Restore dependencies
+ run: dotnet restore ./src/Application/src/RazorPagesTestSample/RazorPagesTestSample.csproj
+ - name: Build
+ run: dotnet build --no-restore ./src/Application/src/RazorPagesTestSample/RazorPagesTestSample.csproj
+ - name: Test
+ run: dotnet test --no-build --verbosity normal ./src/Application/tests/RazorPagesTestSample.Tests/RazorPagesTestSample.Tests.csproj
+ - uses: actions/github-script@v6
+ if: failure()
+ with:
+ github-token: ${{secrets.GITHUB_TOKEN}}
+ script: |
+ let body = "${{ env.build_name }} Workflow Failure \n Build Number: ${{ github.run_number }} \n Build Log: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} \n SHA: [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) \n";
+ github.issues.create({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ title: "${{ env.build_name }} Workflow ${{ github.run_number }} Failed! ",
+ body: body
+ });
+
+ dockerBuildPush:
+ runs-on: ubuntu-latest
+ needs: build
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Docker Login
+ # You may pin to the exact commit or the version.
+ # uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
+ uses: docker/login-action@v1.9.0
+ with:
+ # Server address of Docker registry. If not set then will default to Docker Hub
+ registry: ${{ secrets.ACR_LOGIN_SERVER }}
+ # Username used to log against the Docker registry
+ username: ${{ secrets.ACR_USERNAME }}
+ # Password or personal access token used to log against the Docker registry
+ password: ${{ secrets.ACR_PASSWORD }}
+ # Log out from the Docker registry at the end of a job
+ logout: true
+
+ - name: Docker Build
+ run: docker build -t $registryName/$repositoryName:$tag --build-arg build_version=$tag $dockerFolderPath
+
+ - name: Docker Push
+ run: docker push $registryName/$repositoryName:$tag
+
+ deploy:
+ needs: dockerBuildPush
+ uses: ./.github/workflows/reusable-cd.yml
+ with:
+ environment: dev
+ secrets: inherit
+
+# deploy-to-test:
+
+# runs-on: ubuntu-latest
+# needs: deploy-to-dev
+# environment:
+# name: test
+# url: https://{your_prefix}-test.azurewebsites.net/
+
+# steps:
+# - uses: actions/checkout@v3
+
+# - name: 'Login via Azure CLI'
+# uses: azure/login@v2.1.1
+# with:
+# creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+# - uses: azure/webapps-deploy@v2
+# with:
+# app-name: '{your_prefix}-test'
+# images: {your_registry_name}.azurecr.io/techexcel/dotnetcoreapp:${{github.run_number}}
+
+# deploy-to-prod:
+
+# runs-on: ubuntu-latest
+# needs: deploy-to-test
+# environment:
+# name: prod
+# url: https://{your_prefix}-prod.azurewebsites.net/
+
+# steps:
+# - uses: actions/checkout@v3
+
+# - name: 'Login via Azure CLI'
+# uses: azure/login@v2.1.1
+# with:
+# creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+# - uses: azure/webapps-deploy@v2
+# with:
+# app-name: '{your_prefix}-prod'
+# images: {your_registry_name}.azurecr.io/techexcel/dotnetcoreapp:${{github.run_number}}
diff --git a/.github/workflows/first-worklow.yml b/.github/workflows/first-worklow.yml
new file mode 100644
index 00000000..26850bf4
--- /dev/null
+++ b/.github/workflows/first-worklow.yml
@@ -0,0 +1,58 @@
+# The name of the job is what will display on the GitHub repository in the Actions tab.
+name: First Workflow
+
+# The 'on' section tells GitHub under what conditions we want to run this workflow.
+# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
+# Common scenarios include:
+ # workflow-dispatch (manual execution)
+ # issues
+ # push
+ # pull_request
+ # schedule
+on:
+ workflow_dispatch:
+ issues:
+ types: [opened]
+env:
+ VARIABLE_NAME: 'test123'
+# This section covers the work to perform.
+# We include one or more jobs in this section.
+jobs:
+ # Each individual job will include details like execution order,
+ # pre-requisite jobs, and execution platform.
+ job1:
+ # We can run jobs on GitHub hosted VM runners in Windows, Ubuntu, and Mac OS.
+ # We can also run jobs on self-hosted hardware.
+ runs-on: ubuntu-latest
+
+ # Each job contains one or more steps. A step needs to have at least a name and a command.
+ steps:
+ - name: Step one
+ # The 'run' command executes a shell or command script. Because this is Ubuntu, the
+ # default run command will be /bin/bash
+ run: |
+ echo "Log from step one"
+ echo "env variable: $VARIABLE_NAME"
+ # This section does not appear in the solution file but demonstrates how to set
+ # custom variables that will be available in the run script.
+
+ - name: Step two
+ run: echo "Log from step two"
+
+ job2:
+ # Job 2 will only run after job 1 completes.
+ # Removing this 'needs' section would make the jobs run simultaneously.
+ needs: job1
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Cowsays
+ # The 'uses' command executes a remote GitHub action.
+ # A command like mscoutermarsh/cowsays-action means you can
+ # find this code at https://github.com/mscoutermarsh/cowsays-action
+ uses: mscoutermarsh/cowsays-action@master
+ # The 'with' block includes parameters that the workflow will pass
+ # to this action. Parameters are all in key-value format.
+ with:
+ text: 'Ready for prod--ship it! and use env var: ${{ env.VARIABLE_NAME }}'
+ color: 'magenta'
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
index cedae546..c8d8bcab 100644
--- a/.github/workflows/pages.yml
+++ b/.github/workflows/pages.yml
@@ -8,7 +8,7 @@ name: Deploy Jekyll site to Pages
on:
push:
- branches: ["main"]
+ branches: ["feature"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
diff --git a/.github/workflows/reusable-cd.yml b/.github/workflows/reusable-cd.yml
new file mode 100644
index 00000000..142b8d3e
--- /dev/null
+++ b/.github/workflows/reusable-cd.yml
@@ -0,0 +1,40 @@
+name: .NET CD Workflow
+
+on:
+ workflow_call:
+ inputs:
+ environment:
+ description: 'Environment'
+ required: true
+ default: 'dev'
+ type: string
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+ environment:
+ name: ${{ inputs.environment }}
+ url: "https://techexcel-${{ inputs.environment }}.azurewebsites.net/"
+ steps:
+ - uses: azure/login@v2.1.1
+ with:
+ client-id: ${{ secrets.AZURE_CLIENT_ID }}
+ tenant-id: ${{ secrets.AZURE_TENANT_ID }}
+ subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ # We also need to ensure that enable-AzPSSession is true. This is important for
+ # using OIDC in Azure. If we were to pass in a client secret instead, we would not need
+ # this setting enabled
+ enable-AzPSSession: true
+
+ - uses: azure/webapps-deploy@v2
+ with:
+ app-name: 'ghwxvgb4jngfa-${{ inputs.environment }}'
+ images: ${{ secrets.ACR_LOGIN_SERVER }}/techexcel/dotnetcoreapp:${{ github.run_number }}
+
+
+
+
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 00000000..90185b87
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1 @@
+* puneet-minhas
diff --git a/src/Application/src/RazorPagesTestSample/Data/Message.cs b/src/Application/src/RazorPagesTestSample/Data/Message.cs
index ea99cbd6..7ff1dbd8 100644
--- a/src/Application/src/RazorPagesTestSample/Data/Message.cs
+++ b/src/Application/src/RazorPagesTestSample/Data/Message.cs
@@ -7,9 +7,16 @@ public class Message
{
public int Id { get; set; }
+ ///