Skip to content

Commit e1ade38

Browse files
authored
Update to use PSRule v0.15.0 (#44)
- Update to use latest PSRule version - Update CI pipeline to use PS 7.0 #45 - Add culture option for build - Update variable used by code coverage
1 parent bc8248c commit e1ade38

7 files changed

Lines changed: 246 additions & 65 deletions

File tree

.azure-pipelines/azure-pipelines.yaml

Lines changed: 85 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ variables:
55
version: '0.2.0'
66
buildConfiguration: 'Release'
77
disable.coverage.autogenerate: 'true'
8+
imageName: 'ubuntu-18.04'
89

9-
# Use build number format, i.e. 0.2.0-B1811001
10+
# Use build number format, i.e. 0.2.0-B2002001
1011
name: $(version)-B$(date:yyMM)$(rev:rrr)
1112

1213
trigger:
@@ -27,25 +28,12 @@ stages:
2728
# Build pipeline
2829
- stage: Build
2930
displayName: Build
31+
dependsOn: []
3032
jobs:
3133
- job:
32-
strategy:
33-
matrix:
34-
Linux:
35-
displayName: 'Linux'
36-
imageName: 'ubuntu-latest'
37-
MacOS:
38-
displayName: 'MacOS'
39-
imageName: 'macOS-latest'
40-
Windows:
41-
displayName: 'Windows'
42-
imageName: 'vs2017-win2016'
43-
publish: 'true'
44-
analysis: 'true'
45-
coverage: 'true'
4634
pool:
4735
vmImage: $(imageName)
48-
displayName: 'PowerShell'
36+
displayName: 'Module'
4937
steps:
5038

5139
# Install pipeline dependencies
@@ -56,19 +44,6 @@ stages:
5644
- powershell: Invoke-Build -Configuration $(buildConfiguration) -Build $(Build.BuildNumber)
5745
displayName: 'Build module'
5846

59-
# Pester test results
60-
- task: PublishTestResults@2
61-
displayName: 'Publish Pester results'
62-
inputs:
63-
testRunTitle: 'Pester on $(imageName)'
64-
testRunner: NUnit
65-
testResultsFiles: 'reports/pester-unit.xml'
66-
mergeTestResults: true
67-
platform: $(imageName)
68-
configuration: $(buildConfiguration)
69-
publishRunAttachments: true
70-
condition: succeededOrFailed()
71-
7247
# PSRule results
7348
- task: PublishTestResults@2
7449
displayName: 'Publish PSRule results'
@@ -82,52 +57,104 @@ stages:
8257
publishRunAttachments: true
8358
condition: succeededOrFailed()
8459

85-
# Generate Code Coverage report
86-
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
87-
displayName: 'Code coverage report generator'
88-
inputs:
89-
reports: 'reports\pester-coverage.xml'
90-
targetdir: 'reports\coverage'
91-
sourcedirs: 'src\PSRule.Rules.Kubernetes'
92-
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
93-
tag: $(Build.BuildNumber)
94-
condition: eq(variables['coverage'], 'true')
95-
96-
# Publish Code Coverage report
97-
- task: PublishCodeCoverageResults@1
98-
displayName: 'Publish Pester code coverage'
99-
inputs:
100-
codeCoverageTool: 'Cobertura'
101-
summaryFileLocation: 'reports/coverage/Cobertura.xml'
102-
reportDirectory: 'reports/coverage'
103-
condition: eq(variables['coverage'], 'true')
104-
10560
# Generate artifacts
10661
- publish: out/modules/PSRule.Rules.Kubernetes
10762
displayName: 'Publish module'
10863
artifact: PSRule.Rules.Kubernetes
109-
condition: and(succeeded(), eq(variables['publish'], 'true'))
64+
65+
# Analysis pipeline
66+
- stage: Analysis
67+
displayName: Analysis
68+
dependsOn: []
69+
jobs:
70+
- job: Secret_Scan
71+
pool: 'Hosted VS2017'
72+
displayName: Secret scan
73+
74+
steps:
75+
- task: securedevelopmentteam.vss-secure-development-tools.build-task-credscan.CredScan@2
76+
displayName: 'Scan for secrets'
77+
inputs:
78+
debugMode: false
79+
toolMajorVersion: V2
80+
81+
- task: securedevelopmentteam.vss-secure-development-tools.build-task-publishsecurityanalysislogs.PublishSecurityAnalysisLogs@2
82+
displayName: 'Publish scan logs'
83+
continueOnError: true
84+
85+
- task: securedevelopmentteam.vss-secure-development-tools.build-task-postanalysis.PostAnalysis@1
86+
displayName: 'Check for failures'
87+
inputs:
88+
CredScan: true
89+
ToolLogsNotFoundAction: Error
90+
91+
# Test pipeline
92+
- stage: Test
93+
dependsOn: Build
94+
jobs:
95+
96+
- template: jobs/test.yaml
97+
parameters:
98+
name: ubuntu_18_04_coverage
99+
imageName: 'ubuntu-18.04'
100+
displayName: 'PowerShell coverage'
101+
coverage: 'true'
102+
publishResults: 'false'
103+
104+
- template: jobs/test.yaml
105+
parameters:
106+
name: macOS_10_15
107+
displayName: 'PowerShell 6.2.4 - macOS-10.15'
108+
imageName: 'macOS-10.15'
109+
110+
- template: jobs/test.yaml
111+
parameters:
112+
name: windows
113+
displayName: 'PowerShell 5.1 - win2016'
114+
imageName: 'vs2017-win2016'
115+
116+
# Currently can't use alpine because addtional tools for Azure DevOps are required
117+
# - template: jobs/testContainer.yaml
118+
# parameters:
119+
# name: alpine_3_10
120+
# displayName: 'PowerShell 7.0 - alpine-3.10'
121+
# imageName: mcr.microsoft.com/powershell
122+
# imageTag: 7.0.0-alpine-3.10
123+
124+
- template: jobs/testContainer.yaml
125+
parameters:
126+
name: ps_7_ubuntu_18_04
127+
displayName: 'PowerShell 7.0 - ubuntu-18.04'
128+
imageName: mcr.microsoft.com/powershell
129+
imageTag: 7.0.0-ubuntu-18.04
130+
131+
- template: jobs/testContainer.yaml
132+
parameters:
133+
name: ps_6_ubuntu_18_04
134+
displayName: 'PowerShell 6.2.4 - ubuntu-18.04'
135+
imageName: mcr.microsoft.com/powershell
136+
imageTag: 6.2.4-ubuntu-18.04
110137

111138
# Release pipeline
112139
- stage: Release
113140
displayName: Release
114-
dependsOn: Build
141+
dependsOn: [ 'Test', 'Analysis' ]
115142
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/v0.'))
116143
jobs:
117144
- job:
118145
displayName: Live
119146
pool:
120-
vmImage: 'ubuntu-latest'
147+
vmImage: $(imageName)
121148
variables:
122149
isPreRelease: $[contains(variables['Build.SourceBranchName'], '-B')]
123150
steps:
124151

125152
# Download module from build
126-
- task: DownloadPipelineArtifact@1
153+
- task: DownloadPipelineArtifact@2
127154
displayName: 'Download module'
128155
inputs:
129-
artifactName: PSRule.Rules.Kubernetes
130-
downloadPath: $(Build.SourcesDirectory)/out/modules/PSRule.Rules.Kubernetes
156+
artifact: PSRule.Rules.Kubernetes
157+
path: $(Build.SourcesDirectory)/out/modules/PSRule.Rules.Kubernetes
131158

132159
# Install pipeline dependencies
133160
- powershell: ./.azure-pipelines/pipeline-deps.ps1
@@ -138,15 +165,15 @@ stages:
138165
displayName: 'Publish module'
139166

140167
# Update GitHub release
141-
- task: GitHubRelease@0
168+
- task: GitHubRelease@1
142169
displayName: 'GitHub release'
143170
inputs:
144171
gitHubConnection: 'AzureDevOps-PSRule.Rules.Kubernetes'
145172
repositoryName: '$(Build.Repository.Name)'
146173
action: edit
147174
tag: '$(Build.SourceBranchName)'
148-
releaseNotesSource: input
149-
releaseNotes: 'See [change log](https://github.com/Microsoft/PSRule.Rules.Kubernetes/blob/master/CHANGELOG.md)'
175+
releaseNotesSource: inline
176+
releaseNotesInline: 'See [change log](https://github.com/Microsoft/PSRule.Rules.Kubernetes/blob/master/CHANGELOG.md)'
150177
assetUploadMode: replace
151178
addChangeLog: false
152179
isPreRelease: $(isPreRelease)

.azure-pipelines/jobs/test.yaml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Azure DevOps
2+
# CI job for running VM pipelines
3+
4+
parameters:
5+
name: ''
6+
displayName: ''
7+
buildConfiguration: 'Release'
8+
imageName: ''
9+
coverage: 'false'
10+
publishResults: 'true'
11+
12+
jobs:
13+
- job: ${{ parameters.name }}
14+
displayName: ${{ parameters.displayName }}
15+
pool:
16+
vmImage: ${{ parameters.imageName }}
17+
variables:
18+
COVERAGE: ${{ parameters.coverage }}
19+
PUBLISHRESULTS: ${{ parameters.publishResults }}
20+
skipComponentGovernanceDetection: true
21+
steps:
22+
23+
# Install pipeline dependencies
24+
- powershell: ./.azure-pipelines/pipeline-deps.ps1
25+
displayName: 'Install dependencies'
26+
27+
# Download module
28+
- task: DownloadPipelineArtifact@2
29+
displayName: 'Download module'
30+
inputs:
31+
artifact: PSRule.Rules.Kubernetes
32+
path: $(Build.SourcesDirectory)/out/modules/PSRule.Rules.Kubernetes
33+
34+
# Build module
35+
- powershell: Invoke-Build TestModule -Configuration ${{ parameters.buildConfiguration }} -Build $(Build.BuildNumber)
36+
env:
37+
COVERAGE: ${{ parameters.coverage }}
38+
displayName: 'Test module'
39+
40+
# Pester test results
41+
- task: PublishTestResults@2
42+
displayName: 'Publish Pester results'
43+
inputs:
44+
testRunTitle: 'Pester on ${{ parameters.imageName }}'
45+
testRunner: NUnit
46+
testResultsFiles: 'reports/pester-unit.xml'
47+
mergeTestResults: true
48+
platform: ${{ parameters.name }}
49+
configuration: ${{ parameters.buildConfiguration }}
50+
publishRunAttachments: true
51+
condition: and(succeededOrFailed(), eq(variables['PUBLISHRESULTS'], 'true'))
52+
53+
# Generate Code Coverage report
54+
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
55+
displayName: 'Code coverage report generator'
56+
inputs:
57+
reports: 'reports/pester-coverage.xml'
58+
targetdir: 'reports/coverage'
59+
sourcedirs: 'src/PSRule.Rules.Kubernetes'
60+
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;SonarQube;Badges'
61+
tag: $(Build.BuildNumber)
62+
condition: eq(variables['COVERAGE'], 'true')
63+
64+
# Publish Code Coverage report
65+
- task: PublishCodeCoverageResults@1
66+
displayName: 'Publish Pester code coverage'
67+
inputs:
68+
codeCoverageTool: 'Cobertura'
69+
summaryFileLocation: 'reports/coverage/Cobertura.xml'
70+
reportDirectory: 'reports/coverage'
71+
condition: eq(variables['COVERAGE'], 'true')
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Azure DevOps
2+
# CI job for running container pipelines
3+
4+
parameters:
5+
name: ''
6+
displayName: ''
7+
buildConfiguration: 'Release'
8+
vmImage: 'ubuntu-16.04'
9+
imageName: ''
10+
imageTag: ''
11+
coverage: 'false'
12+
publishResults: 'true'
13+
14+
jobs:
15+
- job: ${{ parameters.name }}
16+
displayName: ${{ parameters.displayName }}
17+
pool:
18+
vmImage: ${{ parameters.vmImage }}
19+
container:
20+
image: '${{ parameters.imageName }}:${{ parameters.imageTag }}'
21+
env:
22+
COVERAGE: ${{ parameters.coverage }}
23+
PUBLISHRESULTS: ${{ parameters.publishResults }}
24+
variables:
25+
COVERAGE: ${{ parameters.coverage }}
26+
PUBLISHRESULTS: ${{ parameters.publishResults }}
27+
skipComponentGovernanceDetection: true
28+
steps:
29+
30+
# Install pipeline dependencies
31+
- powershell: ./.azure-pipelines/pipeline-deps.ps1
32+
displayName: 'Install dependencies'
33+
34+
# Download module
35+
- task: DownloadPipelineArtifact@2
36+
displayName: 'Download module'
37+
inputs:
38+
artifact: PSRule.Rules.Kubernetes
39+
path: $(Build.SourcesDirectory)/out/modules/PSRule.Rules.Kubernetes
40+
41+
# Build module
42+
- powershell: Invoke-Build TestModule -Configuration ${{ parameters.buildConfiguration }} -Build $(Build.BuildNumber)
43+
displayName: 'Test module'
44+
45+
# Pester test results
46+
- task: PublishTestResults@2
47+
displayName: 'Publish Pester results'
48+
inputs:
49+
testRunTitle: 'Pester on ${{ parameters.imageTag }}'
50+
testRunner: NUnit
51+
testResultsFiles: 'reports/pester-unit.xml'
52+
mergeTestResults: true
53+
platform: ${{ parameters.imageTag }}
54+
configuration: ${{ parameters.buildConfiguration }}
55+
publishRunAttachments: true
56+
condition: and(succeededOrFailed(), eq(variables['PUBLISHRESULTS'], 'true'))
57+
58+
# Generate Code Coverage report
59+
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
60+
displayName: 'Code coverage report generator'
61+
inputs:
62+
reports: 'reports\pester-coverage.xml'
63+
targetdir: 'reports\coverage'
64+
sourcedirs: 'src\PSRule.Rules.Kubernetes'
65+
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;SonarQube;Badges'
66+
tag: $(Build.BuildNumber)
67+
condition: eq(variables['COVERAGE'], 'true')
68+
69+
# Publish Code Coverage report
70+
- task: PublishCodeCoverageResults@1
71+
displayName: 'Publish Pester code coverage'
72+
inputs:
73+
codeCoverageTool: 'Cobertura'
74+
summaryFileLocation: 'reports/coverage/Cobertura.xml'
75+
reportDirectory: 'reports/coverage'
76+
condition: eq(variables['COVERAGE'], 'true')

.vscode/extensions.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
22
"recommendations": [
3+
"ms-vscode.powershell",
4+
"ms-azure-devops.azure-pipelines",
35
"redhat.vscode-yaml",
4-
"bewhite.psrule-vscode-preview"
6+
"bewhite.psrule-vscode-preview",
7+
"streetsidesoftware.code-spell-checker"
58
]
69
}

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"editor.tabSize": 2
1616
},
1717
"files.associations": {
18-
"**/.azure-pipelines/*.yaml": "azure-pipelines"
18+
"**/.azure-pipelines/*.yaml": "azure-pipelines",
19+
"**/.azure-pipelines/jobs/*.yaml": "azure-pipelines"
1920
},
2021
"cSpell.words": [
2122
"Kubernetes",

0 commit comments

Comments
 (0)