-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathIncrementVersionNumber.ps1
124 lines (110 loc) · 6.68 KB
/
IncrementVersionNumber.ps1
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
Param(
[Parameter(HelpMessage = "The GitHub actor running the action", Mandatory = $false)]
[string] $actor,
[Parameter(HelpMessage = "The GitHub token running the action", Mandatory = $false)]
[string] $token,
[Parameter(HelpMessage = "List of project names if the repository is setup for multiple projects (* for all projects)", Mandatory = $false)]
[string] $projects = '*',
[Parameter(HelpMessage = "The version to update to. Use Major.Minor[.Build] for absolute change, use +1 to bump to the next major version, use +0.1 to bump to the next minor version or +0.0.1 to bump to the next build version", Mandatory = $true)]
[string] $versionNumber,
[Parameter(HelpMessage = "Skip updating dependency version numbers in all apps", Mandatory = $false)]
[bool] $skipUpdatingDependencies,
[Parameter(HelpMessage = "Set the branch to update", Mandatory = $false)]
[string] $updateBranch,
[Parameter(HelpMessage = "Direct commit?", Mandatory = $false)]
[bool] $directCommit
)
. (Join-Path -Path $PSScriptRoot -ChildPath "..\AL-Go-Helper.ps1" -Resolve)
Import-Module (Join-Path -path $PSScriptRoot -ChildPath "IncrementVersionNumber.psm1" -Resolve)
$serverUrl, $branch = CloneIntoNewFolder -actor $actor -token $token -updateBranch $updateBranch -DirectCommit $directCommit -newBranchPrefix 'increment-version-number'
$baseFolder = (Get-Location).path
DownloadAndImportBcContainerHelper -baseFolder $baseFolder
$settings = $env:Settings | ConvertFrom-Json
if ($versionNumber.StartsWith('+')) {
# Handle incremental version number
$allowedIncrementalVersionNumbers = @('+1', '+0.1')
if ($settings.versioningStrategy -eq 3) {
# Allow increment build
$allowedIncrementalVersionNumbers += '+0.0.1'
}
if (-not $allowedIncrementalVersionNumbers.Contains($versionNumber)) {
throw "Incremental version number $versionNumber is not allowed. Allowed incremental version numbers are: $($allowedIncrementalVersionNumbers -join ', ')"
}
}
else {
# Handle absolute version number
$versionNumberFormat = '^\d+\.\d+$' # Major.Minor
$correctFormatMsg = 'Major.Minor (e.g. 1.0 or 1.2)'
if ($settings.versioningStrategy -eq 3) {
$versionNumberFormat = '^\d+\.\d+\.\d+$' # Major.Minor.Build
$correctFormatMsg = 'Major.Minor.Build (e.g. 1.0, 1.2 or 1.2.3)'
}
if (-not ($versionNumber -match $versionNumberFormat)) {
throw "Version number $versionNumber is not in the correct format. The version number must be in the format $correctFormatMsg"
}
}
# Collect all projects (AL and PowerPlatform Solution)
$projectList = @(GetProjectsFromRepository -baseFolder $baseFolder -projectsFromSettings $settings.projects -selectProjects $projects)
$PPprojects = @(GetMatchingProjects -projects @($settings.powerPlatformSolutionFolder) -selectProjects $projects)
if ($projectList.Count -eq 0 -and $PPprojects.Count -eq 0) {
throw "No projects matches '$projects'"
}
$repositorySettingsPath = Join-Path $baseFolder $RepoSettingsFile # $RepoSettingsFile is defined in AL-Go-Helper.ps1
# Increment version number in AL Projects
if ($projectList.Count -gt 0) {
$allAppFolders = @()
$repoVersionExistsInRepoSettings = Test-SettingExists -settingsFilePath $repositorySettingsPath -settingName 'repoVersion'
$repoVersionInRepoSettingsWasUpdated = $false
foreach ($project in $projectList) {
$projectPath = Join-Path $baseFolder $project
$projectSettingsPath = Join-Path $projectPath $ALGoSettingsFile # $ALGoSettingsFile is defined in AL-Go-Helper.ps1
if (Test-SettingExists -settingsFilePath $projectSettingsPath -settingName 'repoVersion') {
# If 'repoVersion' exists in the project settings, update it there
Set-VersionInSettingsFile -settingsFilePath $projectSettingsPath -settingName 'repoVersion' -newValue $versionNumber
}
elseif ($repoVersionExistsInRepoSettings) {
# If 'repoVersion' is not found in project settings but it exists in repo settings, update it there instead
if (-not $repoVersionInRepoSettingsWasUpdated) {
Write-Host "Setting 'repoVersion' not found in $projectSettingsPath. Updating it on repo level instead"
Set-VersionInSettingsFile -settingsFilePath $repositorySettingsPath -settingName 'repoVersion' -newValue $versionNumber
$repoVersionInRepoSettingsWasUpdated = $true
}
}
else {
# If 'repoVersion' is neither found in project settings nor in repo settings, force create it in project settings
# Ensure the repoVersion setting exists in the project settings. Defaults to 1.0 if it doesn't exist.
$settings = ReadSettings -baseFolder $baseFolder -project $project
Set-VersionInSettingsFile -settingsFilePath $projectSettingsPath -settingName 'repoVersion' -newValue $settings.repoVersion -Force
Set-VersionInSettingsFile -settingsFilePath $projectSettingsPath -settingName 'repoVersion' -newValue $versionNumber
}
# Resolve project folders to get all app folders that contain an app.json file
$projectSettings = ReadSettings -baseFolder $baseFolder -project $project
ResolveProjectFolders -baseFolder $baseFolder -project $project -projectSettings ([ref] $projectSettings)
# Set version in app manifests (app.json files)
Set-VersionInAppManifests -projectPath $projectPath -projectSettings $projectSettings -newValue $versionNumber
# Collect all project's app folders
$allAppFolders += $projectSettings.appFolders | ForEach-Object { Join-Path $projectPath $_ -Resolve }
$allAppFolders += $projectSettings.testFolders | ForEach-Object { Join-Path $projectPath $_ -Resolve }
$allAppFolders += $projectSettings.bcptTestFolders | ForEach-Object { Join-Path $projectPath $_ -Resolve }
}
if (-not $skipUpdatingDependencies) {
# Set dependencies in app manifests
if ($allAppFolders.Count -eq 0) {
Write-Host "No App folders found for projects $projects"
}
else {
# Set dependencies in app manifests
Set-DependenciesVersionInAppManifests -appFolders $allAppFolders
}
}
}
# Increment version number in PowerPlatform Solution
foreach ($PPproject in $PPprojects) {
$projectPath = Join-Path $baseFolder $PPproject
Set-PowerPlatformSolutionVersion -powerPlatformSolutionPath $projectPath -newValue $versionNumber
}
$commitMessage = "New Version number $versionNumber"
if ($versionNumber.StartsWith('+')) {
$commitMessage = "Incremented Version number by $versionNumber"
}
CommitFromNewFolder -serverUrl $serverUrl -commitMessage $commitMessage -branch $branch | Out-Null