Skip to content

Commit b5693b3

Browse files
Add GitHub workflows for build, deployment, and PR verification
1 parent e1580d9 commit b5693b3

6 files changed

Lines changed: 336 additions & 1 deletion

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Build and Test
2+
3+
on:
4+
push:
5+
branches:
6+
- "feature/**"
7+
- "bugfix/**"
8+
- "hotfix/**"
9+
- "dependabot/**"
10+
- "copilot/**"
11+
pull_request:
12+
branches:
13+
- main
14+
15+
permissions:
16+
contents: read
17+
18+
jobs:
19+
build-and-test:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: frasermolyneux/actions/dotnet-web-ci@main
23+
with:
24+
dotnet-project: "XtremeIdiots.Portal.Web"
25+
dotnet-version: 9.0.x
26+
src-folder: "src"

.github/workflows/codequality.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ on:
55
branches:
66
- main
77
pull_request:
8-
types: [opened, synchronize, reopened]
8+
branches:
9+
- main
10+
types: [opened, synchronize, reopened, ready_for_review]
911

1012
permissions:
1113
contents: read
@@ -14,6 +16,7 @@ permissions:
1416

1517
jobs:
1618
quality:
19+
if: github.actor != 'dependabot[bot]'
1720
uses: frasermolyneux/actions/.github/workflows/codequality.yml@main
1821
with:
1922
sonar-project-key: frasermolyneux_portal-web
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Copilot PR Verify
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
types: [opened, synchronize, reopened, ready_for_review]
8+
9+
permissions:
10+
contents: read
11+
id-token: write
12+
13+
jobs:
14+
build-and-test:
15+
if: github.event.pull_request.draft == false && startsWith(github.head_ref, 'copilot/')
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: frasermolyneux/actions/dotnet-web-ci@main
19+
with:
20+
dotnet-project: "XtremeIdiots.Portal.Web"
21+
dotnet-version: 9.0.x
22+
src-folder: "src"
23+
24+
terraform-plan-dev:
25+
if: github.event.pull_request.draft == false && startsWith(github.head_ref, 'copilot/') && github.actor != 'dependabot[bot]' && contains(github.event.pull_request.labels.*.name, 'run-dev-plan')
26+
needs: build-and-test
27+
environment: Development
28+
runs-on: ubuntu-latest
29+
concurrency:
30+
group: ${{ github.repository }}-dev
31+
steps:
32+
- uses: frasermolyneux/actions/terraform-plan@main
33+
with:
34+
terraform-folder: "terraform"
35+
terraform-var-file: "tfvars/dev.tfvars"
36+
terraform-backend-file: "backends/dev.backend.hcl"
37+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
38+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
39+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
40+
41+
terraform-plan-prd:
42+
if: github.event.pull_request.draft == false && startsWith(github.head_ref, 'copilot/') && github.actor != 'dependabot[bot]' && contains(github.event.pull_request.labels.*.name, 'run-prd-plan')
43+
needs: terraform-plan-dev
44+
environment: Production
45+
runs-on: ubuntu-latest
46+
concurrency:
47+
group: ${{ github.repository }}-prd
48+
steps:
49+
- uses: frasermolyneux/actions/terraform-plan@main
50+
with:
51+
terraform-folder: "terraform"
52+
terraform-var-file: "tfvars/prd.tfvars"
53+
terraform-backend-file: "backends/prd.backend.hcl"
54+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
55+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
56+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}

.github/workflows/deploy-dev.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Deploy Dev
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
id-token: write
12+
13+
jobs:
14+
build-and-test:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: frasermolyneux/actions/dotnet-web-ci@main
18+
with:
19+
dotnet-project: "XtremeIdiots.Portal.Web"
20+
dotnet-version: 9.0.x
21+
src-folder: "src"
22+
23+
terraform-plan-and-apply-dev:
24+
environment: Development
25+
needs: build-and-test
26+
runs-on: ubuntu-latest
27+
concurrency:
28+
group: ${{ github.repository }}-dev
29+
steps:
30+
- uses: frasermolyneux/actions/terraform-plan-and-apply@main
31+
with:
32+
terraform-folder: "terraform"
33+
terraform-var-file: "tfvars/dev.tfvars"
34+
terraform-backend-file: "backends/dev.backend.hcl"
35+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
36+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
37+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
38+
39+
- id: terraform-output
40+
shell: bash
41+
run: |
42+
cd terraform
43+
echo "web_app_name=$(terraform output -raw web_app_name)" >> $GITHUB_OUTPUT
44+
echo "web_app_resource_group=$(terraform output -raw web_app_resource_group)" >> $GITHUB_OUTPUT
45+
env:
46+
ARM_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
47+
ARM_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
48+
ARM_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
49+
ARM_USE_AZUREAD: true
50+
ARM_USE_OIDC: true
51+
52+
outputs:
53+
web_app_name: ${{ steps.terraform-output.outputs.web_app_name }}
54+
web_app_resource_group: ${{ steps.terraform-output.outputs.web_app_resource_group }}
55+
56+
app-service-deploy-dev:
57+
environment: Development
58+
needs: [build-and-test, terraform-plan-and-apply-dev]
59+
runs-on: ubuntu-latest
60+
concurrency:
61+
group: ${{ github.repository }}-dev
62+
steps:
63+
- uses: frasermolyneux/actions/deploy-app-service@main
64+
with:
65+
web-artifact-name: "XtremeIdiots.Portal.Web"
66+
web-app-name: ${{ needs.terraform-plan-and-apply-dev.outputs.web_app_name }}
67+
resource-group-name: ${{ needs.terraform-plan-and-apply-dev.outputs.web_app_resource_group }}
68+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
69+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
70+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}

.github/workflows/pr-verify.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: PR Verify
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
types: [opened, synchronize, reopened, ready_for_review]
8+
9+
permissions:
10+
contents: read
11+
id-token: write
12+
13+
jobs:
14+
build-and-test:
15+
if: github.event.pull_request.draft == false && !startsWith(github.head_ref, 'copilot/')
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: frasermolyneux/actions/dotnet-web-ci@main
19+
with:
20+
dotnet-project: "XtremeIdiots.Portal.Web"
21+
dotnet-version: 9.0.x
22+
src-folder: "src"
23+
24+
terraform-plan-dev:
25+
if: github.event.pull_request.draft == false && !startsWith(github.head_ref, 'copilot/') && github.actor != 'dependabot[bot]'
26+
needs: build-and-test
27+
environment: Development
28+
runs-on: ubuntu-latest
29+
concurrency:
30+
group: ${{ github.repository }}-dev
31+
steps:
32+
- uses: frasermolyneux/actions/terraform-plan@main
33+
with:
34+
terraform-folder: "terraform"
35+
terraform-var-file: "tfvars/dev.tfvars"
36+
terraform-backend-file: "backends/dev.backend.hcl"
37+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
38+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
39+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
40+
41+
terraform-plan-prd:
42+
if: github.event.pull_request.draft == false && !startsWith(github.head_ref, 'copilot/') && github.actor != 'dependabot[bot]' && contains(github.event.pull_request.labels.*.name, 'run-prd-plan')
43+
needs: terraform-plan-dev
44+
environment: Production
45+
runs-on: ubuntu-latest
46+
concurrency:
47+
group: ${{ github.repository }}-prd
48+
steps:
49+
- uses: frasermolyneux/actions/terraform-plan@main
50+
with:
51+
terraform-folder: "terraform"
52+
terraform-var-file: "tfvars/prd.tfvars"
53+
terraform-backend-file: "backends/prd.backend.hcl"
54+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
55+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
56+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}

.github/workflows/release-prd.yml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
name: Release PRD
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
schedule:
9+
- cron: "0 3 * * 4"
10+
11+
permissions:
12+
contents: read
13+
id-token: write
14+
15+
concurrency:
16+
group: ${{ github.workflow }}
17+
18+
jobs:
19+
build-and-test:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: frasermolyneux/actions/dotnet-web-ci@main
23+
with:
24+
dotnet-project: "XtremeIdiots.Portal.Web"
25+
dotnet-version: 9.0.x
26+
src-folder: "src"
27+
28+
terraform-plan-and-apply-dev:
29+
environment: Development
30+
needs: build-and-test
31+
runs-on: ubuntu-latest
32+
concurrency:
33+
group: ${{ github.repository }}-dev
34+
steps:
35+
- uses: frasermolyneux/actions/terraform-plan-and-apply@main
36+
with:
37+
terraform-folder: "terraform"
38+
terraform-var-file: "tfvars/dev.tfvars"
39+
terraform-backend-file: "backends/dev.backend.hcl"
40+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
41+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
42+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
43+
44+
- id: terraform-output-dev
45+
shell: bash
46+
run: |
47+
cd terraform
48+
echo "web_app_name=$(terraform output -raw web_app_name)" >> $GITHUB_OUTPUT
49+
echo "web_app_resource_group=$(terraform output -raw web_app_resource_group)" >> $GITHUB_OUTPUT
50+
env:
51+
ARM_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
52+
ARM_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
53+
ARM_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
54+
ARM_USE_AZUREAD: true
55+
ARM_USE_OIDC: true
56+
57+
outputs:
58+
web_app_name: ${{ steps.terraform-output-dev.outputs.web_app_name }}
59+
web_app_resource_group: ${{ steps.terraform-output-dev.outputs.web_app_resource_group }}
60+
61+
app-service-deploy-dev:
62+
environment: Development
63+
needs: [build-and-test, terraform-plan-and-apply-dev]
64+
runs-on: ubuntu-latest
65+
concurrency:
66+
group: ${{ github.repository }}-dev
67+
steps:
68+
- uses: frasermolyneux/actions/deploy-app-service@main
69+
with:
70+
web-artifact-name: "XtremeIdiots.Portal.Web"
71+
web-app-name: ${{ needs.terraform-plan-and-apply-dev.outputs.web_app_name }}
72+
resource-group-name: ${{ needs.terraform-plan-and-apply-dev.outputs.web_app_resource_group }}
73+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
74+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
75+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
76+
77+
terraform-plan-and-apply-prd:
78+
environment: Production
79+
needs: app-service-deploy-dev
80+
runs-on: ubuntu-latest
81+
concurrency:
82+
group: ${{ github.repository }}-prd
83+
steps:
84+
- uses: frasermolyneux/actions/terraform-plan-and-apply@main
85+
with:
86+
terraform-folder: "terraform"
87+
terraform-var-file: "tfvars/prd.tfvars"
88+
terraform-backend-file: "backends/prd.backend.hcl"
89+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
90+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
91+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
92+
93+
- id: terraform-output-prd
94+
shell: bash
95+
run: |
96+
cd terraform
97+
echo "web_app_name=$(terraform output -raw web_app_name)" >> $GITHUB_OUTPUT
98+
echo "web_app_resource_group=$(terraform output -raw web_app_resource_group)" >> $GITHUB_OUTPUT
99+
env:
100+
ARM_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
101+
ARM_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
102+
ARM_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
103+
ARM_USE_AZUREAD: true
104+
ARM_USE_OIDC: true
105+
106+
outputs:
107+
web_app_name: ${{ steps.terraform-output-prd.outputs.web_app_name }}
108+
web_app_resource_group: ${{ steps.terraform-output-prd.outputs.web_app_resource_group }}
109+
110+
app-service-deploy-prd:
111+
environment: Production
112+
needs: [build-and-test, terraform-plan-and-apply-prd]
113+
runs-on: ubuntu-latest
114+
concurrency:
115+
group: ${{ github.repository }}-prd
116+
steps:
117+
- uses: frasermolyneux/actions/deploy-app-service@main
118+
with:
119+
web-artifact-name: "XtremeIdiots.Portal.Web"
120+
web-app-name: ${{ needs.terraform-plan-and-apply-prd.outputs.web_app_name }}
121+
resource-group-name: ${{ needs.terraform-plan-and-apply-prd.outputs.web_app_resource_group }}
122+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
123+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
124+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}

0 commit comments

Comments
 (0)