-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
12 changed files
with
315 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
Param( | ||
[Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a Localize directory it should live in here | ||
[string] $LanguageSet = 'VS_Main_Languages', # Language set to be used in the LocProject.json | ||
[switch] $UseCheckedInLocProjectJson, # When set, generates a LocProject.json and compares it to one that already exists in the repo; otherwise just generates one | ||
[switch] $CreateNeutralXlfs # Creates neutral xlf files. Only set to false when running locally | ||
) | ||
|
||
# Generates LocProject.json files for the OneLocBuild task. OneLocBuildTask is described here: | ||
# https://ceapex.visualstudio.com/CEINTL/_wiki/wikis/CEINTL.wiki/107/Localization-with-OneLocBuild-Task | ||
|
||
Set-StrictMode -Version 2.0 | ||
$ErrorActionPreference = "Stop" | ||
. $PSScriptRoot\tools.ps1 | ||
|
||
Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1') | ||
|
||
$exclusionsFilePath = "$SourcesDirectory\eng\Localize\LocExclusions.json" | ||
$exclusions = @{ Exclusions = @() } | ||
if (Test-Path -Path $exclusionsFilePath) | ||
{ | ||
$exclusions = Get-Content "$exclusionsFilePath" | ConvertFrom-Json | ||
} | ||
|
||
Push-Location "$SourcesDirectory" # push location for Resolve-Path -Relative to work | ||
|
||
# Template files | ||
$jsonFiles = @() | ||
$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\en\..+\.json" } # .NET templating pattern | ||
$jsonFiles += Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern | ||
|
||
$xlfFiles = @() | ||
|
||
$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf" | ||
$langXlfFiles = @() | ||
if ($allXlfFiles) { | ||
$null = $allXlfFiles[0].FullName -Match "\.([\w-]+)\.xlf" # matches '[langcode].xlf' | ||
$firstLangCode = $Matches.1 | ||
$langXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.$firstLangCode.xlf" | ||
} | ||
$langXlfFiles | ForEach-Object { | ||
$null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf | ||
|
||
$destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf" | ||
$xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru | ||
} | ||
|
||
$locFiles = $jsonFiles + $xlfFiles | ||
|
||
$locJson = @{ | ||
Projects = @( | ||
@{ | ||
LanguageSet = $LanguageSet | ||
LocItems = @( | ||
$locFiles | ForEach-Object { | ||
$outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")" | ||
$continue = $true | ||
foreach ($exclusion in $exclusions.Exclusions) { | ||
if ($outputPath.Contains($exclusion)) | ||
{ | ||
$continue = $false | ||
} | ||
} | ||
$sourceFile = ($_.FullName | Resolve-Path -Relative) | ||
if (!$CreateNeutralXlfs -and $_.Extension -eq '.xlf') { | ||
Remove-Item -Path $sourceFile | ||
} | ||
if ($continue) | ||
{ | ||
if ($_.Directory.Name -eq 'en' -and $_.Extension -eq '.json') { | ||
return @{ | ||
SourceFile = $sourceFile | ||
CopyOption = "LangIDOnPath" | ||
OutputPath = "$($_.Directory.Parent.FullName | Resolve-Path -Relative)\" | ||
} | ||
} | ||
else { | ||
return @{ | ||
SourceFile = $sourceFile | ||
CopyOption = "LangIDOnName" | ||
OutputPath = $outputPath | ||
} | ||
} | ||
} | ||
} | ||
) | ||
} | ||
) | ||
} | ||
|
||
$json = ConvertTo-Json $locJson -Depth 5 | ||
Write-Host "LocProject.json generated:`n`n$json`n`n" | ||
Pop-Location | ||
|
||
if (!$UseCheckedInLocProjectJson) { | ||
New-Item "$SourcesDirectory\eng\Localize\LocProject.json" -Force # Need this to make sure the Localize directory is created | ||
Set-Content "$SourcesDirectory\eng\Localize\LocProject.json" $json | ||
} | ||
else { | ||
New-Item "$SourcesDirectory\eng\Localize\LocProject-generated.json" -Force # Need this to make sure the Localize directory is created | ||
Set-Content "$SourcesDirectory\eng\Localize\LocProject-generated.json" $json | ||
|
||
if ((Get-FileHash "$SourcesDirectory\eng\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\eng\Localize\LocProject.json").Hash) { | ||
Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them." | ||
|
||
exit 1 | ||
} | ||
else { | ||
Write-Host "Generated LocProject.json and current LocProject.json are identical." | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
parameters: | ||
# Optional: dependencies of the job | ||
dependsOn: '' | ||
|
||
# Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool | ||
pool: | ||
vmImage: vs2017-win2016 | ||
|
||
CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex | ||
GithubPat: $(BotAccount-dotnet-bot-repo-PAT) | ||
|
||
SourcesDirectory: $(Build.SourcesDirectory) | ||
CreatePr: true | ||
AutoCompletePr: false | ||
UseLfLineEndings: true | ||
UseCheckedInLocProjectJson: false | ||
LanguageSet: VS_Main_Languages | ||
LclSource: lclFilesInRepo | ||
LclPackageId: '' | ||
RepoType: gitHub | ||
GitHubOrg: dotnet | ||
MirrorRepo: '' | ||
MirrorBranch: main | ||
condition: '' | ||
|
||
jobs: | ||
- job: OneLocBuild | ||
|
||
dependsOn: ${{ parameters.dependsOn }} | ||
|
||
displayName: OneLocBuild | ||
|
||
pool: ${{ parameters.pool }} | ||
|
||
variables: | ||
- group: OneLocBuildVariables # Contains the CeapexPat and GithubPat | ||
- name: _GenerateLocProjectArguments | ||
value: -SourcesDirectory ${{ parameters.SourcesDirectory }} | ||
-LanguageSet "${{ parameters.LanguageSet }}" | ||
-CreateNeutralXlfs | ||
- ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}: | ||
- name: _GenerateLocProjectArguments | ||
value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson | ||
|
||
|
||
steps: | ||
- task: Powershell@2 | ||
inputs: | ||
filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 | ||
arguments: $(_GenerateLocProjectArguments) | ||
displayName: Generate LocProject.json | ||
condition: ${{ parameters.condition }} | ||
|
||
- task: OneLocBuild@2 | ||
displayName: OneLocBuild | ||
env: | ||
SYSTEM_ACCESSTOKEN: $(System.AccessToken) | ||
inputs: | ||
locProj: eng/Localize/LocProject.json | ||
outDir: $(Build.ArtifactStagingDirectory) | ||
lclSource: ${{ parameters.LclSource }} | ||
lclPackageId: ${{ parameters.LclPackageId }} | ||
isCreatePrSelected: ${{ parameters.CreatePr }} | ||
${{ if eq(parameters.CreatePr, true) }}: | ||
isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} | ||
isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} | ||
packageSourceAuth: patAuth | ||
patVariable: ${{ parameters.CeapexPat }} | ||
${{ if eq(parameters.RepoType, 'gitHub') }}: | ||
repoType: ${{ parameters.RepoType }} | ||
gitHubPatVariable: "${{ parameters.GithubPat }}" | ||
${{ if ne(parameters.MirrorRepo, '') }}: | ||
isMirrorRepoSelected: true | ||
gitHubOrganization: ${{ parameters.GitHubOrg }} | ||
mirrorRepo: ${{ parameters.MirrorRepo }} | ||
mirrorBranch: ${{ parameters.MirrorBranch }} | ||
condition: ${{ parameters.condition }} | ||
|
||
- task: PublishBuildArtifacts@1 | ||
displayName: Publish Localization Files | ||
inputs: | ||
PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc' | ||
PublishLocation: Container | ||
ArtifactName: Loc | ||
condition: ${{ parameters.condition }} | ||
|
||
- task: PublishBuildArtifacts@1 | ||
displayName: Publish LocProject.json | ||
inputs: | ||
PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/' | ||
PublishLocation: Container | ||
ArtifactName: Loc | ||
condition: ${{ parameters.condition }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.