-
Notifications
You must be signed in to change notification settings - Fork 1
205 lines (193 loc) · 8.45 KB
/
workflow.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
name: CI/CD
on:
push:
branches: [main]
pull_request:
jobs:
build:
runs-on: windows-latest
outputs:
Version: ${{ steps.gitversion.outputs.SemVer }}
CommitsSinceVersionSource: ${{ steps.gitversion.outputs.CommitsSinceVersionSource }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup GitVersion
uses: gittools/actions/gitversion/setup@v1.2.0
with:
versionSpec: 5.x
- name: Determine Version
id: gitversion
uses: gittools/actions/gitversion/execute@v1.2.0
- name: Display GitVersion outputs
run: |
echo "Version: ${{ steps.gitversion.outputs.SemVer }}"
echo "CommitsSinceVersionSource: ${{ steps.gitversion.outputs.CommitsSinceVersionSource }}"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: .NET publish
run: dotnet publish src/RepoGovernance.Core/RepoGovernance.Core.csproj -c Release -p:Version='${{ steps.gitversion.outputs.SemVer }}'
- name: Upload package back to GitHub
uses: actions/upload-artifact@v4
with:
name: drop
path: src/RepoGovernance.Core/bin/Release
- name: .NET publish service
run: dotnet publish src/RepoGovernance.Web/RepoGovernance.Web.csproj -c Release -p:Version='${{ steps.gitversion.outputs.SemVer }}' --output ${{ github.workspace }}/web
- name: Upload package back to GitHub
uses: actions/upload-artifact@v4
with:
name: web
path: ${{ github.workspace }}/web
- name: .NET publish website
run: dotnet publish src/RepoGovernance.Service/RepoGovernance.Service.csproj -c Release -p:Version='${{ steps.gitversion.outputs.SemVer }}' --output ${{ github.workspace }}/service
- name: Upload package back to GitHub
uses: actions/upload-artifact@v4
with:
name: service
path: ${{ github.workspace }}/service
- name: .NET publish function
run: dotnet publish src/RepoGovernance.Function/RepoGovernance.Function.csproj -c Release -p:Version='${{ steps.gitversion.outputs.SemVer }}' --output ${{ github.workspace }}/function
- name: Upload package back to GitHub
uses: actions/upload-artifact@v4
with:
name: function
path: ${{ github.workspace }}/function
test:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Variable Substitution appsettings file for tests
uses: microsoft/variable-substitution@v1
with:
files: 'src/RepoGovernance.Tests/appsettings.json'
env:
AppSettings.GitHubClientId: "${{ secrets.GitHubClientId }}"
AppSettings.GitHubClientSecret: "${{ secrets.GitHubClientSecret }}"
AppSettings.StorageConnectionString: "${{ secrets.StorageConnectionString }}"
AppSettings.CosmosDBConnectionString: "${{ secrets.CosmosDBConnectionString }}"
AppSettings.AzureTenantId: "${{ secrets.AzureTenantId }}"
AppSettings.AzureClientId: "${{ secrets.AzureClientId }}"
AppSettings.AzureClientSecret: "${{ secrets.AzureClientSecret }}"
#- run: echo "Tenant Id: $(env.AppSettings.AzureTenantId)"
- name: .NET test
run: dotnet test src/RepoGovernance.Tests/RepoGovernance.Tests.csproj --configuration Debug --logger trx -e:CollectCoverage=true -e:CoverletOutput=TestResults/ -e:CoverletOutputFormat=lcov -l "console;verbosity=detailed"
- name: Publish coverage report to coveralls.io
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-lcov: src/RepoGovernance.Tests/TestResults/coverage.info
continue-on-error: true
- name: Show test results
if: false
uses: samsmithnz/DotNetTestResults@0.1.10
with:
fileName: ${{ github.workspace }}/TestOutput.xml
sonarCloud:
name: Run SonarCloud analysis
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Run Sonarcloud test
uses: samsmithnz/SamsDotNetSonarCloudAction@v2.1
with:
projects: 'src/RepoGovernance.Core/RepoGovernance.Core.csproj,src/RepoGovernance.Tests/RepoGovernance.Tests.csproj,src/RepoGovernance.Service/RepoGovernance.Service.csproj,src/RepoGovernance.Web/RepoGovernance.Web.csproj,src/RepoGovernance.Function/RepoGovernance.Function.csproj'
dotnet-version: '8.0.x'
sonarcloud-organization: samsmithnz-github
sonarcloud-project: samsmithnz_RepoGovernance
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
deploy:
runs-on: windows-latest
needs:
- build
- test
- sonarCloud
if: github.ref == 'refs/heads/main'
environment:
name: 'production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: service
path: service
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: web
path: web
- name: Log into Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_SP }}
- name: Set service secrets
run: az webapp config appsettings set --name "repogovernance-prod-eu-service" --resource-group "RepoGovernance" --settings "AppSettings:GitHubClientId=${{ secrets.GitHubClientId }}" "AppSettings:GitHubClientSecret=${{ secrets.GitHubClientSecret }}" "AppSettings:StorageConnectionString=${{ secrets.StorageConnectionString }}" "AppSettings:CosmosDBConnectionString=${{ secrets.CosmosDBConnectionString }}" "AppSettings:AzureTenantId=${{ secrets.AzureTenantId }}" "AppSettings:AzureClientId=${{ secrets.AzureClientId }}" "AppSettings:AzureClientSecret=${{ secrets.AzureClientSecret }}" #--slot staging
- name: Deploy to Azure Web App Service
id: deploy-to-servicesapp
uses: azure/webapps-deploy@v3
with:
app-name: repogovernance-prod-eu-service
package: service
- name: Deploy to Azure Web App Website
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: repogovernance-prod-eu-web
package: web
- name: Set website configuration
run: az webapp config appsettings set --name "repogovernance-prod-eu-web" --resource-group "RepoGovernance" --settings "WEBSITE_TIME_ZONE=Eastern Standard Time"
deployFunction:
runs-on: windows-latest
needs:
- build
- test
- sonarCloud
if: github.ref == 'refs/heads/main' && 0 == 1
environment:
name: 'production'
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: function
path: function
- name: Log into Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_SP }}
- name: Set function secrets
run: az functionapp config appsettings set --name "repogovernance-prod-eu-schedulefunction" --resource-group "RepoGovernance" --settings "GitHubClientId=${{ secrets.GitHubClientId }}" "GitHubClientSecret=${{ secrets.GitHubClientSecret }}" "StorageConnectionString=${{ secrets.StorageConnectionString }}" "CosmosDBConnectionString=${{ secrets.CosmosDBConnectionString }}" "SummaryQueueConnection=${{ secrets.SummaryQueueConnection }}" "DevOpsServiceURL=https://devops-prod-eu-service.azurewebsites.net"
- name: Deploy Azure Function
uses: Azure/functions-action@v1
with:
app-name: repogovernance-prod-eu-schedulefunction
package: function
release:
runs-on: ubuntu-latest
needs:
- build
- deploy
#- deployFunction
if: github.ref == 'refs/heads/main'
environment:
name: 'production'
steps:
- name: Display GitVersion outputs
run: |
echo "Version: ${{ needs.build.outputs.Version }}"
echo "CommitsSinceVersionSource: ${{ needs.build.outputs.CommitsSinceVersionSource }}"
- name: Create Release
uses: ncipollo/release-action@v1
if: needs.build.outputs.CommitsSinceVersionSource > 0 #Only create a release if there has been a commit/version change
with:
tag: "v${{ needs.build.outputs.Version }}"
name: "v${{ needs.build.outputs.Version }}"
token: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token