vsts/generate_javadocs_branch.ps1 (140 lines of code) (raw):
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
# This script generates javadocs for the currently checked out branch and creates a new git branch based off of the current
# gh-pages branch. This new branch will contain the generated javadocs. After running this script, you will manually
# need to create a pull request from the new branch ("gh-pages-<current date>") to "gh-pages".
# This script is designed to be used only by an Azure Devops release pipeline. Running it locally will not work
# due to some assumptions this script makes about working directory.
function TestLastExitCode {
if ($LASTEXITCODE -ne 0) {
throw "Last exit code is ($LASTEXITCODE)"
}
}
function CreateJavadocReleaseBranch(
$GitHubName,
$GitHubEmail,
$Sources,
$FolderName,
$UpdateDeviceClientDocs,
$UpdateProvisioningDeviceClientDocs,
$UpdateProvisioningServiceClientDocs,
$UpdateTpmProviderEmulatorDocs,
$UpdateTpmProviderDocs,
$UpdateDiceProviderEmulatorDocs,
$UpdateDiceProviderDocs,
$UpdateSecurityProviderDocs,
$UpdateX509ProviderDocs) {
if ($([string]::IsNullOrWhiteSpace($GitHubName) -eq $true)) {
throw "GitHubName is null or empty"
}
if ($([string]::IsNullOrWhiteSpace($GitHubEmail) -eq $true)) {
throw "GitHubEmail is null or empty"
}
if ($UpdateDeviceClientDocs -eq "false" -and
$UpdateDeviceClientDocs -eq "false" -and
$UpdateProvisioningDeviceClientDocs -eq "false" -and
$UpdateProvisioningServiceClientDocs -eq "false" -and
$UpdateTpmProviderEmulatorDocs -eq "false" -and
$UpdateTpmProviderDocs -eq "false" -and
$UpdateDiceProviderEmulatorDocs -eq "false" -and
$UpdateDiceProviderDocs -eq "false" -and
$UpdateSecurityProviderDocs -eq "false" -and
$UpdateX509ProviderDocs -eq "false") {
throw "Must specify at least one package to update the javadocs for"
}
Set-Location $Sources -ErrorAction Stop
#Some local samples rely on packages we don't publish publicly, so install everything locally before generating javadocs
Write-Host "Installing jars locally"
mvn `-Dmaven.javadoc.skip=true install `-DskipTests -T 2C
Write-Host "Generating javadocs, placing them in apidocs folder at the root of the repository"
mvn javadoc:javadoc -T 2C
$date = Get-Date -UFormat '%Y-%m-%d'
$newBranchName = "gh-pages-" + $date
git.exe config user.email $GitHubEmail
git.exe config user.name $GitHubName
Write-Output "Create new branch '$newBranchName' based on gh-pages branch"
git.exe checkout gh-pages
# Create a new gh-pages merge branch based off of the original gh-pages branch
git.exe checkout -b $newBranchName gh-pages
TestLastExitCode # stop if we can't create the branch
Write-Host "Copying generated javadocs to replace current javadocs"
Set-Location apidocs
if ($UpdateDeviceClientDocs -eq "True")
{
Remove-Item ..\$FolderName\device -Force -Recurse
New-item -Path ..\$FolderName\device -ItemType Directory
Copy-Item -Force -Path .\device\* -Destination ..\$FolderName\device
Copy-Item -Recurse -Force -Path .\device\com -Destination ..\$FolderName\device
}
if ($UpdateProvisioningDeviceClientDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\provisioning-device-client -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\provisioning-device-client -ItemType Directory
Copy-Item -Force -Path .\provisioning\provisioning-device-client\* -Destination ..\$FolderName\provisioning\provisioning-device-client
Copy-Item -Recurse -Force -Path .\provisioning\provisioning-device-client\com -Destination ..\$FolderName\provisioning\provisioning-device-client
}
if ($UpdateProvisioningServiceClientDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\provisioning-service-client -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\provisioning-service-client -ItemType Directory
Copy-Item -Force -Path .\provisioning\provisioning-service-client\* -Destination ..\$FolderName\provisioning\provisioning-service-client
Copy-Item -Recurse -Force -Path .\provisioning\provisioning-service-client\com -Destination ..\$FolderName\provisioning\provisioning-service-client
}
if ($UpdateTpmProviderEmulatorDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\tpm-provider-emulator -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\tpm-provider-emulator -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\tpm-provider-emulator\* -Destination ..\$FolderName\provisioning\security\tpm-provider-emulator
Copy-Item -Recurse -Force -Path .\provisioning\security\tpm-provider-emulator\com -Destination ..\$FolderName\provisioning\security\tpm-provider-emulator
}
if ($UpdateTpmProviderDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\tpm-provider -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\tpm-provider -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\tpm-provider\* -Destination ..\$FolderName\provisioning\security\tpm-provider
Copy-Item -Recurse -Force -Path .\provisioning\security\tpm-provider\com -Destination ..\$FolderName\provisioning\security\tpm-provider
}
if ($UpdateDiceProviderEmulatorDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\dice-provider-emulator -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\dice-provider-emulator -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\dice-provider-emulator\* -Destination ..\$FolderName\provisioning\security\dice-provider-emulator
Copy-Item -Recurse -Force -Path .\provisioning\security\dice-provider-emulator\com -Destination ..\$FolderName\provisioning\security\dice-provider-emulator
}
if ($UpdateDiceProviderDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\dice-provider -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\dice-provider -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\dice-provider\* -Destination ..\$FolderName\provisioning\security\dice-provider
Copy-Item -Recurse -Force -Path .\provisioning\security\dice-provider\com -Destination ..\$FolderName\provisioning\security\dice-provider
}
if ($UpdateSecurityProviderDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\security-provider -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\security-provider -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\security-provider\* -Destination ..\$FolderName\provisioning\security\security-provider
Copy-Item -Recurse -Force -Path .\provisioning\security\security-provider\com -Destination ..\$FolderName\provisioning\security\security-provider
}
if ($UpdateX509ProviderDocs -eq "True")
{
Remove-Item ..\$FolderName\provisioning\security\x509-provider -Force -Recurse
New-Item -Path ..\$FolderName\provisioning\security\x509-provider -ItemType Directory
Copy-Item -Force -Path .\provisioning\security\x509-provider\* -Destination ..\$FolderName\provisioning\security\x509-provider
Copy-Item -Recurse -Force -Path .\provisioning\security\x509-provider\com -Destination ..\$FolderName\provisioning\security\x509-provider
}
Remove-Item ..\device -Force -Recurse
Remove-Item ..\service -Force -Recurse
Remove-Item ..\provisioning -Force -Recurse
Set-Location ..
Write-Host "Removing temporary apidocs folder"
Remove-Item ./apidocs -Recurse
git.exe add .
TestLastExitCode # stop if we can't add the changes
$commitMessage = "release($date): Update javadocs to latest"
Write-Host "Committing to new javadocs release branch"
git.exe commit -m $commitMessage
TestLastExitCode # stop if we can't commit the changes
Write-Output "Push changes to origin"
git.exe push --tags -u origin $newBranchName
TestLastExitCode # stop if push to remote fails
}