Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions azure-pipelines/Get-GitHubAppToken.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string] $KeyVaultName,

[Parameter(Mandatory = $true)]
[string] $KeyName,

[Parameter(Mandatory = $true)]
[string] $AppClientId,

[Parameter(Mandatory = $true)]
[string] $InstallationOwner,

[Parameter(Mandatory = $true)]
[string] $OutputVariableName
)

$ErrorActionPreference = 'Stop'
$PSNativeCommandUseErrorActionPreference = $true

function ConvertTo-Base64Url([byte[]] $bytes) {
return [Convert]::ToBase64String($bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_')
}

$jwtHeader = [ordered]@{
alg = 'RS256'
typ = 'JWT'
}
$now = [System.DateTimeOffset]::UtcNow
$jwtPayload = [ordered]@{
iat = $now.AddMinutes(-1).ToUnixTimeSeconds()
exp = $now.AddMinutes(5).ToUnixTimeSeconds()
iss = $AppClientId
}

$headerEncoded = ConvertTo-Base64Url ([System.Text.Encoding]::UTF8.GetBytes(($jwtHeader | ConvertTo-Json -Compress)))
$payloadEncoded = ConvertTo-Base64Url ([System.Text.Encoding]::UTF8.GetBytes(($jwtPayload | ConvertTo-Json -Compress)))
$signingInput = "$headerEncoded.$payloadEncoded"

$sha256 = [System.Security.Cryptography.SHA256]::Create()
$digestBytes = $sha256.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($signingInput))
$digestBase64 = [Convert]::ToBase64String($digestBytes)

Write-Host "Signing GitHub App JWT with key '$KeyName' in vault '$KeyVaultName'..."
$signResponseJson = az keyvault key sign `
--vault-name $KeyVaultName `
--name $KeyName `
--algorithm RS256 `
--digest $digestBase64 `
--output json
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($signResponseJson)) {
throw "'az keyvault key sign' failed with exit code $LASTEXITCODE for key '$KeyName' in vault '$KeyVaultName'."
}

$signResponse = $signResponseJson | ConvertFrom-Json
if ([string]::IsNullOrWhiteSpace($signResponse.signature)) {
throw "Key Vault returned an empty signature for key '$KeyName' in vault '$KeyVaultName'."
}

$signatureEncoded = $signResponse.signature.TrimEnd('=').Replace('+', '-').Replace('/', '_')
$jwt = "$signingInput.$signatureEncoded"
$headers = @{
Authorization = "Bearer $jwt"
'X-GitHub-Api-Version' = '2022-11-28'
Accept = 'application/vnd.github+json'
'User-Agent' = 'vscode-csharp-onelocbuild'
}

Write-Host "Looking up the GitHub App installation for '$InstallationOwner'..."
$installations = Invoke-RestMethod -Uri 'https://api.github.com/app/installations' -Headers $headers -Method Get
$installation = $installations | Where-Object { $_.account.login -eq $InstallationOwner } | Select-Object -First 1
if (-not $installation) {
throw "No GitHub App installation found for '$InstallationOwner'."
}

$tokenResponse = Invoke-RestMethod `
-Uri "https://api.github.com/app/installations/$($installation.id)/access_tokens" `
-Headers $headers `
-Method Post `
-ContentType 'application/json'
if ([string]::IsNullOrWhiteSpace($tokenResponse.token)) {
throw "GitHub returned an empty installation token for '$InstallationOwner'."
}

Write-Host "Got an installation token for '$InstallationOwner' that expires at $($tokenResponse.expires_at)."
Write-Host "##vso[task.setvariable variable=$OutputVariableName;issecret=true]$($tokenResponse.token)"
19 changes: 16 additions & 3 deletions azure-pipelines/loc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ resources:
ref: refs/tags/release

variables:
# Variable group contains the PAT to LOC
# Variable group contains the credential for the localization package source.
- group: OneLocBuildVariables

extends:
Expand All @@ -42,7 +42,7 @@ extends:
networkIsolationPolicy: Permissive,CFSClean
stages:
- stage: LocalizationStage
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
#condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
jobs:
- job: Localization
templateContext:
Expand Down Expand Up @@ -86,7 +86,20 @@ extends:
LclPackageId: 'LCL-JUNO-PROD-VSCODECS'
- pwsh: npm run l10nDevImportXlf
displayName: 'Import xlf to json.'
- task: AzureCLI@2
displayName: 'Get GitHub App installation token'
inputs:
azureSubscription: 'dnceng-oneloc-githubapp'
scriptType: pscore
scriptLocation: inlineScript
inlineScript: |
& "$(Build.SourcesDirectory)/azure-pipelines/Get-GitHubAppToken.ps1" `
-KeyVaultName 'EngKeyVault' `
-KeyName 'oneloc-localization-app-key' `
-AppClientId 'Iv23lijBU8x3gc9lDOc9' `
-InstallationOwner 'dotnet' `
-OutputVariableName 'GitHubAppInstallationToken'
- pwsh: npm run publishLocalizationContent -- --userName dotnet-bot --email dotnet-bot@dotnetfoundation.org --commitSha $(Build.SourceVersion) --targetRemoteRepo vscode-csharp --baseBranch 'main'
displayName: 'Create PR in GitHub.'
env:
GitHubPAT: $(BotAccount-dotnet-bot-repo-PAT)
GitHubToken: $(GitHubAppInstallationToken)
4 changes: 2 additions & 2 deletions package.nls.cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"command.csharp.rerunSourceGenerators": "Znovu spustit zdrojové generátory",
"command.csharp.showDecompilationTerms": "Zobrazit smlouvu o podmínkách dekompilátoru",
"command.dotnet.generateAssets.currentProject": "Generovat prostředky pro sestavení a ladění",
"command.dotnet.openSolution": "Otevřít řešení",
"command.dotnet.openSolution": "Open Solution blah",
"command.dotnet.restartServer": "Restartovat jazykový server",
"command.dotnet.restore.all": "Obnovit všechny projekty",
"command.dotnet.restore.project": "Obnovit projekt",
Expand Down Expand Up @@ -129,7 +129,7 @@
"configuration.omnisharp.sdkIncludePrereleases": "Určuje, jestli se mají při určování verze, která se má použít pro načtení projektu, zahrnout verze Preview sady .NET SDK. Použije se, pokud je parametr useModernNet nastavený na hodnotu true.",
"configuration.omnisharp.sdkPath": "Určuje cestu k instalaci sady .NET SDK, která se použije pro načítání projektu místo nejvyšší nainstalované verze. Použije se, pokud je parametr useModernNet nastavený na hodnotu true. Příklad: /home/username/dotnet/sdks/6.0.300.",
"configuration.omnisharp.sdkVersion": "Určuje verzi sady .NET SDK, která se použije pro načtení projektu namísto nejvyšší nainstalované verze. Použije se, pokud je parametr useModernNet nastavený na hodnotu true. Příklad: 6.0.300",
"configuration.omnisharp.useEditorFormattingSettings": "Určuje, jestli má server OmniSharp používat nastavení editoru VS Code pro formátování kódu C# (použití tabulátorů, velikost odsazení).",
"configuration.omnisharp.useEditorFormattingSettings": "Specifies whether OmniSharp should use VS Code editor settings for C# code formatting (use of tabs, indentation size).",
"configuration.omnisharp.useModernNet.description": "Použijte build serveru OmniSharp pro .NET 6. Tato verze _nepodporuje_ projekty .NET Framework, které nejsou ve stylu sady SDK, včetně Unity. U projektů Framework, .NET Core a .NET 5+, které jsou ve stylu sady SDK, byste měli zaznamenat výrazné zlepšení výkonu.",
"configuration.omnisharp.useModernNet.title": "Použít build serveru OmniSharp pro .NET 6",
"configuration.razor.razor.advanced.showAllCSharpCodeActions": "Zobrazit všechny akce kódu C# v souborech Razor. Tyto akce nejsou v Razoru otestované a po použití můžou způsobit syntaktické chyby. Pokud k tomu dojde, nahlaste prosím chybu.",
Expand Down
4 changes: 2 additions & 2 deletions package.nls.de.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"command.csharp.rerunSourceGenerators": "Quellgeneratoren erneut ausführen",
"command.csharp.showDecompilationTerms": "Vereinbarung zu den Decompilerbedingungen anzeigen",
"command.dotnet.generateAssets.currentProject": "Ressourcen für Build und Debuggen generieren",
"command.dotnet.openSolution": "Projektmappe öffnen",
"command.dotnet.openSolution": "Open Solution blah",
"command.dotnet.restartServer": "Sprachserver neu starten",
"command.dotnet.restore.all": "Alle Projekte wiederherstellen",
"command.dotnet.restore.project": "Projekt wiederherstellen",
Expand Down Expand Up @@ -129,7 +129,7 @@
"configuration.omnisharp.sdkIncludePrereleases": "Gibt an, ob Vorschauversionen des .NET SDK einbezogen werden sollen, wenn bestimmt wird, welche Version zum Laden des Projekts verwendet werden soll. Gilt, wenn „useModernNet“ auf TRUE festgelegt ist.",
"configuration.omnisharp.sdkPath": "Gibt den Pfad zu einer .NET SDK-Installation an, die für das Laden von Projekten anstelle der höchsten installierten Version verwendet werden soll. Gilt, wenn „useModernNet“ auf TRUE festgelegt ist. Beispiel: /home/username/dotnet/sdks/6.0.300.",
"configuration.omnisharp.sdkVersion": "Gibt die Version des .NET SDK an, die für das Laden von Projekten anstelle der höchsten installierten Version verwendet werden soll. Gilt, wenn „useModernNet“ auf TRUE festgelegt ist. Beispiel: 6.0.300.",
"configuration.omnisharp.useEditorFormattingSettings": "Gibt an, ob OmniSharp VS Code-Editoreinstellungen für C#-Codeformatierung verwenden soll (Verwendung von Registerkarten, Einzugsgröße).",
"configuration.omnisharp.useEditorFormattingSettings": "Specifies whether OmniSharp should use VS Code editor settings for C# code formatting (use of tabs, indentation size).",
"configuration.omnisharp.useModernNet.description": "Verwenden Sie den OmniSharp-Build für .NET 6. Diese Version unterstützt _keine_ .NET Framework-Projekte, die nicht im SDK-Stil vorliegen, einschließlich Unity. Framework-Projekte im SDK-Stil, .NET Core- und .NET 5+-Projekte sollten erhebliche Leistungsverbesserungen aufweisen.",
"configuration.omnisharp.useModernNet.title": ".NET 6-Build von OmniSharp verwenden",
"configuration.razor.razor.advanced.showAllCSharpCodeActions": "Alle C#-Codeaktionen in Razor-Dateien anzeigen. Diese Aktionen werden in Razor nicht getestet und können beim Anwenden Syntaxfehler verursachen. Melden Sie in diesem Fall einen Fehler.",
Expand Down
4 changes: 2 additions & 2 deletions package.nls.es.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"command.csharp.rerunSourceGenerators": "Volver a ejecutar los generadores de origen",
"command.csharp.showDecompilationTerms": "Mostrar el contrato de términos del descompilador",
"command.dotnet.generateAssets.currentProject": "Generar recursos para compilar y depurar",
"command.dotnet.openSolution": "Abrir solución",
"command.dotnet.openSolution": "Open Solution blah",
"command.dotnet.restartServer": "Reiniciar servidor de lenguaje",
"command.dotnet.restore.all": "Restaurar todos los proyectos",
"command.dotnet.restore.project": "Restaurar proyecto",
Expand Down Expand Up @@ -129,7 +129,7 @@
"configuration.omnisharp.sdkIncludePrereleases": "Especifica si se deben incluir versiones preliminares del SDK de .NET al determinar la versión que se va a usar para la carga del proyecto. Se aplica cuando \"useModernNet\" se establece en true.",
"configuration.omnisharp.sdkPath": "Especifica la ruta de acceso a una instalación de SDK de .NET que se va a usar para la carga de proyectos en lugar de la versión más reciente instalada. Se aplica cuando \"useModernNet\" se establece en true. Ejemplo: /home/username/dotnet/sdks/6.0.300.",
"configuration.omnisharp.sdkVersion": "Especifica la versión del SDK de .NET que se va a usar para la carga de proyectos en lugar de la versión más reciente instalada. Se aplica cuando \"useModernNet\" se establece en true. Ejemplo: 6.0.300.",
"configuration.omnisharp.useEditorFormattingSettings": "Especifica si OmniSharp debe usar la configuración VS Code del editor para el formato de código de C# (uso de tabulaciones, tamaño de sangría).",
"configuration.omnisharp.useEditorFormattingSettings": "Specifies whether OmniSharp should use VS Code editor settings for C# code formatting (use of tabs, indentation size).",
"configuration.omnisharp.useModernNet.description": "Use la compilación de OmniSharp para .NET 6. Esta versión no admite proyectos de .NET Framework que no sean de tipo SDK, incluido Unity. Los proyectos framework de estilo SDK, .NET Core y .NET 5+ deben ver mejoras significativas en el rendimiento.",
"configuration.omnisharp.useModernNet.title": "Usar la compilación de .NET 6 de OmniSharp",
"configuration.razor.razor.advanced.showAllCSharpCodeActions": "Mostrar todas las acciones de código de C# en archivos de Razor. Estas acciones no se prueban en Razor y pueden introducir errores de sintaxis cuando se aplican. Si esto ocurre, notifique un error.",
Expand Down
4 changes: 2 additions & 2 deletions package.nls.fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"command.csharp.rerunSourceGenerators": "Réexécuter les générateurs sources",
"command.csharp.showDecompilationTerms": "Afficher l'accord sur les termes du décompilateur",
"command.dotnet.generateAssets.currentProject": "Générer des actifs pour la construction et le débogage",
"command.dotnet.openSolution": "Solution ouverte",
"command.dotnet.openSolution": "Open Solution blah",
"command.dotnet.restartServer": "Redémarrer le serveur de langue",
"command.dotnet.restore.all": "Restaurer tous les projets",
"command.dotnet.restore.project": "Restaurer le projet",
Expand Down Expand Up @@ -129,7 +129,7 @@
"configuration.omnisharp.sdkIncludePrereleases": "Spécifie s’il faut inclure des versions préliminaires du Kit de développement logiciel (SDK) .NET lors de la détermination de la version à utiliser pour le chargement de projet. S'applique lorsque « useModernNet » est défini sur true.",
"configuration.omnisharp.sdkPath": "Spécifie le chemin d’accès à une installation du Kit de développement logiciel (SDK) .NET à utiliser pour le chargement de projet au lieu de la version la plus élevée installée. S'applique lorsque « useModernNet » est défini sur true. Exemple : /home/username/dotnet/sdks/6.0.300.",
"configuration.omnisharp.sdkVersion": "Spécifie la version du Kit de développement logiciel (SDK) .NET à utiliser pour le chargement de projet au lieu de la version la plus élevée installée. S'applique lorsque « useModernNet » est défini sur true. Exemple : 6.0.300.",
"configuration.omnisharp.useEditorFormattingSettings": "Spécifie si OmniSharp doit utiliser VS Code paramètres de l’éditeur pour la mise en forme du code C# (utilisation d’onglets, taille de retrait).",
"configuration.omnisharp.useEditorFormattingSettings": "Specifies whether OmniSharp should use VS Code editor settings for C# code formatting (use of tabs, indentation size).",
"configuration.omnisharp.useModernNet.description": "Utilisez la version OmniSharp pour .NET 6. Cette version _ne prend pas_ en charge les projets .NET Framework non de style SDK, y compris Unity. Les projets framework de style SDK, .NET Core et .NET 5+ doivent voir des améliorations significatives des performances.",
"configuration.omnisharp.useModernNet.title": "Utiliser la version .NET 6 d'OmniSharp",
"configuration.razor.razor.advanced.showAllCSharpCodeActions": "Afficher toutes les actions de code C# dans les fichiers Razor. Ces actions ne sont pas testées dans Razor et peuvent introduire des erreurs de syntaxe lorsqu’elles sont appliquées. Si cela se produit, veuillez signaler un bogue.",
Expand Down
4 changes: 2 additions & 2 deletions package.nls.it.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"command.csharp.rerunSourceGenerators": "Esegui di nuovo generatori di codice sorgente",
"command.csharp.showDecompilationTerms": "Mostra il contratto per i termini del decompilatore",
"command.dotnet.generateAssets.currentProject": "Genera gli asset per la compilazione e il debug",
"command.dotnet.openSolution": "Apri soluzione",
"command.dotnet.openSolution": "Open Solution blah",
"command.dotnet.restartServer": "Riavvia il server di linguaggio",
"command.dotnet.restore.all": "Ripristina tutti i progetti",
"command.dotnet.restore.project": "Ripristina progetto",
Expand Down Expand Up @@ -129,7 +129,7 @@
"configuration.omnisharp.sdkIncludePrereleases": "Specifica se includere le versioni di anteprima di .NET SDK quando si determina quale versione usare per il caricamento del progetto. Si applica quando \"useModernNet\" è impostato su true.",
"configuration.omnisharp.sdkPath": "Specifica il percorso per l'installazione di .NET SDK da usare per il caricamento del progetto anziché la versione più recente installata. Si applica quando \"useModernNet\" è impostato su true. Esempio: /home/username/dotnet/sdks/6.0.300.",
"configuration.omnisharp.sdkVersion": "Specifica la versione di .NET SDK da usare per il caricamento del progetto anziché la versione più recente installata. Si applica quando \"useModernNet\" è impostato su true. Esempio: 6.0.300",
"configuration.omnisharp.useEditorFormattingSettings": "Specifica se OmniSharp deve usare le impostazioni dell'editor VS Code per la formattazione del codice C# (uso di tabulazioni, dimensioni rientro).",
"configuration.omnisharp.useEditorFormattingSettings": "Specifies whether OmniSharp should use VS Code editor settings for C# code formatting (use of tabs, indentation size).",
"configuration.omnisharp.useModernNet.description": "Usare la build OmniSharp per .NET 6. Questa versione _non_ supporta i progetti .NET Framework non di tipo SDK, tra cui Unity. I progetti Framework, .NET Core e .NET 5+ di tipo SDK devono vedere miglioramenti significativi delle prestazioni.",
"configuration.omnisharp.useModernNet.title": "Usare la build .NET 6 di OmniSharp",
"configuration.razor.razor.advanced.showAllCSharpCodeActions": "Mostra tutte le azioni del codice C# nei file Razor. Queste azioni non sono testate in Razor e possono presentare errori di sintassi quando vengono applicate. Se ciò accade, segnala un bug.",
Expand Down
Loading