diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 00000000..4df4b838
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,34 @@
+name: Azure Bicep
+
+on: workflow_dispatch
+
+env:
+ targetEnv: prod
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+ steps:
+ # Checkout code
+ - uses: actions/checkout@main
+
+ # Log into Azure
+ - 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 }}
+ enable-AzPSSession: true
+
+ # Deploy ARM template
+ - name: Run ARM deploy
+ uses: azure/arm-deploy@v1
+ with:
+ subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
+ resourceGroupName: ${{ secrets.AZURE_RG }}
+ template: ./src/InfrastructureAsCode/main.bicep
+ parameters: environment=${{ env.targetEnv }}
diff --git a/.github/workflows/dotnet-deployment.yml b/.github/workflows/dotnet-deployment.yml
new file mode 100644
index 00000000..a4d2dbcc
--- /dev/null
+++ b/.github/workflows/dotnet-deployment.yml
@@ -0,0 +1,134 @@
+# This workflow will build a .NET project
+# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
+
+name: .NET
+
+env:
+ registryName: kqrfo3r42nm3umpnpreg.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@v4
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+ - 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-to-dev:
+ runs-on: ubuntu-latest
+ needs: dockerBuildPush
+ environment:
+ name: dev
+ url: https://kqrfo3r42nm3u-dev.azurewebsites.net/
+
+ steps:
+ - name: "Login via Azure CLI"
+ uses: azure/login@v2.1.1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ - uses: azure/webapps-deploy@v2
+ with:
+ app-name: "kqrfo3r42nm3u-dev"
+ images: kqrfo3r42nm3umpnpreg.azurecr.io/techexcel/dotnetcoreapp:${{github.run_number}}
+
+ deploy-to-test:
+ runs-on: ubuntu-latest
+ needs: deploy-to-dev
+ environment:
+ name: test
+ url: https://kqrfo3r42nm3u-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: "kqrfo3r42nm3u-test"
+ images: kqrfo3r42nm3umpnpreg.azurecr.io/techexcel/dotnetcoreapp:${{github.run_number}}
+
+ deploy-to-prod:
+ runs-on: ubuntu-latest
+ needs: deploy-to-test
+ environment:
+ name: prod
+ url: https://kqrfo3r42nm3u-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: "kqrfo3r42nm3u-prod"
+ images: kqrfo3r42nm3umpnpreg.azurecr.io/techexcel/dotnetcoreapp:${{github.run_number}}
diff --git a/.github/workflows/first-workflow.yml b/.github/workflows/first-workflow.yml
new file mode 100644
index 00000000..62e09a19
--- /dev/null
+++ b/.github/workflows/first-workflow.yml
@@ -0,0 +1,56 @@
+# 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]
+
+# 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"
+ # This section does not appear in the solution file but demonstrates how to set
+ # custom variables that will be available in the run script.
+ env:
+ VARIABLE_NAME: value
+ - 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!"
+ color: "magenta"
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
deleted file mode 100644
index cedae546..00000000
--- a/.github/workflows/pages.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
-# Sample workflow for building and deploying a Jekyll site to GitHub Pages
-name: Deploy Jekyll site to Pages
-
-on:
- push:
- branches: ["main"]
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
-permissions:
- contents: read
- pages: write
- id-token: write
-
-# Allow one concurrent deployment
-concurrency:
- group: "pages"
- cancel-in-progress: true
-
-jobs:
- # Build job
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Setup Ruby
- uses: ruby/setup-ruby@v1
- with:
- ruby-version: '3.1' # Not needed with a .ruby-version file
- bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- cache-version: 0 # Increment this number if you need to re-download cached gems
- - name: Setup Pages
- id: pages
- uses: actions/configure-pages@v2
- - name: Build with Jekyll
- # Outputs to the './_site' directory by default
- run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
- env:
- JEKYLL_ENV: production
- - name: Upload artifact
- # Automatically uploads an artifact from the './_site' directory by default
- uses: actions/upload-pages-artifact@v1
-
- # Deployment job
- deploy:
- environment:
- name: github-pages
- url: "${{ steps.deployment.outputs.page_url }}"
- runs-on: ubuntu-latest
- needs: build
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v1
diff --git a/src/Application/src/RazorPagesTestSample/Data/Message.cs b/src/Application/src/RazorPagesTestSample/Data/Message.cs
index ea99cbd6..9f331807 100644
--- a/src/Application/src/RazorPagesTestSample/Data/Message.cs
+++ b/src/Application/src/RazorPagesTestSample/Data/Message.cs
@@ -7,9 +7,21 @@ public class Message
{
public int Id { get; set; }
- [Required]
+ ///