-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathSet-AzDOProjectSetting.ps1
More file actions
197 lines (171 loc) · 9.14 KB
/
Set-AzDOProjectSetting.ps1
File metadata and controls
197 lines (171 loc) · 9.14 KB
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
function Set-AzDoProjectSetting {
<#
.SYNOPSIS
Sets the project settings for the given project.
.DESCRIPTION
Sets the project settings for the given project.
.EXAMPLE
$params = @{
CollectionUri = "https://dev.azure.com/contoso"
ProjectName = "Project01"
EnforceJobAuthScope = $true
EnforceJobAuthScopeForReleases = $true
EnforceReferencedRepoScopedToken = $true
EnforceSettableVar = $true
PublishPipelineMetadata = $true
StatusBadgesArePrivate = $true
}
Set-AzDOProjectSettings
This example sets all the settings available to true.
.OUTPUTS
PSobject
.NOTES
#>
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
[OutputType([System.Collections.Hashtable])]
param (
# Collection uri of the organization. Can be set with the predefined variable from Azure DevOps.
[Parameter(Mandatory)]
[ValidateScript({ Validate-CollectionUri -CollectionUri $_ })]
[string]
$CollectionUri,
# Name of the project
[Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
[string]
$ProjectName,
# If enabled, enables forked repositories to build pull requests.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$BuildsEnabledForForks,
# If enabled, disables classic build pipelines creation.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$DisableClassicBuildPipelineCreation,
# If enabled, disables classic pipelines creation.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$DisableClassicPipelineCreation,
# If enabled, disables classic release pipelines creation.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$DisableClassicReleasePipelineCreation,
# If enabled, disables implied pipeline CI triggers if the trigger section in YAML is missing.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$DisableImpliedYAMLCiTrigger,
# Enable shell tasks args sanitizing.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnableShellTasksArgsSanitizing,
# Enable shell tasks args sanitizing preview.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnableShellTasksArgsSanitizingAudit,
# Limit job authorization scope to current project for for all non-release pipelines reduces to the current project.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceJobAuthScope,
# Limit job authorization scope to current project for builds of forked repositories.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceJobAuthScopeForForks,
# Limit job authorization scope to current project for release pipelines.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceJobAuthScopeForReleases,
# Enforce no access to secrets for builds of forked repositories.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceNoAccessToSecretsFromForks,
# Restricts the scope of access for all pipelines to only repositories explicitly referenced by the pipeline.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceReferencedRepoScopedToken,
# If enabled, only those variables that are explicitly marked as "Settable at queue time" can be set at queue time.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$EnforceSettableVar,
# Enable settings that enforce certain levels of protection for building pull requests from forks globally.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$ForkProtectionEnabled,
# Make comments required to have builds in all pull requests.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$IsCommentRequiredForPullRequest,
# Allows pipelines to record metadata.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$PublishPipelineMetadata,
# Make comments required to have builds in pull requests from non-team members and non-contributors.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$RequireCommentsForNonTeamMemberAndNonContributors,
# Make comments required to have builds in pull requests from non-team members and non-contributors.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$RequireCommentsForNonTeamMembersOnly,
# Anonymous users can access the status badge API for all pipelines unless this option is enabled.
[Parameter(ValueFromPipelineByPropertyName)]
[switch]
$StatusBadgesArePrivate
)
process {
Write-Verbose "Starting function: Set-AzDOProjectSetting"
$body = @{
buildsEnabledForForks = [bool]$BuildsEnabledForForks
disableClassicBuildPipelineCreation = [bool]$DisableClassicBuildPipelineCreation
disableClassicPipelineCreation = [bool]$DisableClassicPipelineCreation
disableClassicReleasePipelineCreation = [bool]$DisableClassicReleasePipelineCreation
disableImpliedYAMLCiTrigger = [bool]$DisableImpliedYAMLCiTrigger
enableShellTasksArgsSanitizing = [bool]$EnableShellTasksArgsSanitizing
enableShellTasksArgsSanitizingAudit = [bool]$EnableShellTasksArgsSanitizingAudit
enforceJobAuthScope = [bool]$EnforceJobAuthScope
enforceJobAuthScopeForForks = [bool]$EnforceJobAuthScopeForForks
enforceJobAuthScopeForReleases = [bool]$EnforceJobAuthScopeForReleases
enforceNoAccessToSecretsFromForks = [bool]$EnforceNoAccessToSecretsFromForks
enforceReferencedRepoScopedToken = [bool]$EnforceReferencedRepoScopedToken
enforceSettableVar = [bool]$EnforceSettableVar
forkProtectionEnabled = [bool]$ForkProtectionEnabled
isCommentRequiredForPullRequest = [bool]$IsCommentRequiredForPullRequest
publishPipelineMetadata = [bool]$PublishPipelineMetadata
requireCommentsForNonTeamMemberAndNonContributors = [bool]$RequireCommentsForNonTeamMemberAndNonContributors
requireCommentsForNonTeamMembersOnly = [bool]$RequireCommentsForNonTeamMembersOnly
statusBadgesArePrivate = [bool]$StatusBadgesArePrivate
}
$params = @{
uri = "$CollectionUri/$ProjectName/_apis/build/generalsettings?api-version=7.2-preview.1"
Method = 'PATCH'
Headers = $script:header
body = $body
ContentType = 'application/json'
}
if ($PSCmdlet.ShouldProcess($CollectionUri, "Set provided settings at the project named: $($PSStyle.Bold)$Projectname$($PSStyle.Reset)")) {
$response = Invoke-RestMethod @params
[PSCustomObject]@{
ProjectName = $ProjectName
BuildsEnabledForForks = $response.buildsEnabledForForks
DisableClassicBuildPipelineCreation = $response.disableClassicBuildPipelineCreation
DisableClassicPipelineCreation = $response.disableClassicPipelineCreation
DisableClassicReleasePipelineCreation = $response.disableClassicReleasePipelineCreation
DisableImpliedYAMLCiTrigger = $response.disableImpliedYAMLCiTrigger
EnableShellTasksArgsSanitizing = $response.enableShellTasksArgsSanitizing
EnableShellTasksArgsSanitizingAudit = $response.enableShellTasksArgsSanitizingAudit
EnforceJobAuthScope = $response.enforceJobAuthScope
EnforceJobAuthScopeForForks = $response.enforceJobAuthScopeForForks
EnforceJobAuthScopeForReleases = $response.enforceJobAuthScopeForReleases
EnforceNoAccessToSecretsFromForks = $response.enforceNoAccessToSecretsFromForks
EnforceReferencedRepoScopedToken = $response.enforceReferencedRepoScopedToken
EnforceSettableVar = $response.enforceSettableVar
ForkProtectionEnabled = $response.forkProtectionEnabled
IsCommentRequiredForPullRequest = $response.isCommentRequiredForPullRequest
PublishPipelineMetadata = $response.publishPipelineMetadata
RequireCommentsForNonTeamMemberAndNonContributors = $response.requireCommentsForNonTeamMemberAndNonContributors
RequireCommentsForNonTeamMembersOnly = $response.requireCommentsForNonTeamMembersOnly
StatusBadgesArePrivate = $response.statusBadgesArePrivate
}
} else {
Write-Verbose "Calling Invoke-AzDoRestMethod with $($params| ConvertTo-Json -Depth 10)"
}
}
}