Add regen test to csharp stages (#3208)

Fixes https://github.com/microsoft/typespec/issues/3206
This commit is contained in:
m-nash 2024-04-24 08:04:47 -07:00 коммит произвёл GitHub
Родитель 4c63c99292
Коммит dff8131f68
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
6 изменённых файлов: 86 добавлений и 10 удалений

Просмотреть файл

@ -8,13 +8,20 @@ parameters:
- name: PackagePath - name: PackagePath
type: string type: string
# Arguments needed to run unit tests # Arguments needed to run tests
- name: UnitTestArgs - name: TestArgs
type: string type: string
default: ""
# Indicates the build matrix to use for post-build autorest validation
- name: TestMatrix
type: object
default: {}
# Node version # Node version
- name: NodeVersion - name: NodeVersion
type: string type: string
default: "20.x"
# Operation system to use # Operation system to use
- name: Os - name: Os
@ -37,13 +44,19 @@ jobs:
name: $(WINDOWSPOOL) name: $(WINDOWSPOOL)
image: $(WINDOWSVMIMAGE) image: $(WINDOWSVMIMAGE)
os: windows os: windows
${{ if ne(length(parameters.TestMatrix), 0) }}:
strategy:
matrix: ${{ parameters.TestMatrix }}
steps: steps:
- template: /eng/emitters/pipelines/templates/steps/test-step.yml - template: /eng/emitters/pipelines/templates/steps/test-step.yml
parameters: parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }} AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }} PackagePath: ${{ parameters.PackagePath }}
NodeVersion: $(nodeVersion) NodeVersion: $(nodeVersion)
UnitTestArgs: ${{ parameters.UnitTestArgs }} ${{ if ne(length(parameters.TestMatrix), 0) }}:
TestArgs: $(TestArguments)
${{ else }}:
TestArgs: ${{ parameters.TestArgs }}
${{ if parameters.EmitArtifacts }}: ${{ if parameters.EmitArtifacts }}:
templateContext: templateContext:
outputs: outputs:

Просмотреть файл

@ -196,7 +196,7 @@ stages:
parameters: parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }} AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }} PackagePath: ${{ parameters.PackagePath }}
UnitTestArgs: ${{ parameters.UnitTestArgs }} TestArgs: ${{ parameters.UnitTestArgs }}
NodeVersion: 20.x NodeVersion: 20.x
Os: linux Os: linux
EmitArtifacts: true # Emit artifacts only for the first job EmitArtifacts: true # Emit artifacts only for the first job
@ -204,20 +204,41 @@ stages:
parameters: parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }} AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }} PackagePath: ${{ parameters.PackagePath }}
UnitTestArgs: ${{ parameters.UnitTestArgs }} TestArgs: ${{ parameters.UnitTestArgs }}
NodeVersion: 18.x NodeVersion: 18.x
Os: linux Os: linux
- template: /eng/emitters/pipelines/templates/jobs/test-job.yml - template: /eng/emitters/pipelines/templates/jobs/test-job.yml
parameters: parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }} AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }} PackagePath: ${{ parameters.PackagePath }}
UnitTestArgs: ${{ parameters.UnitTestArgs }} TestArgs: ${{ parameters.UnitTestArgs }}
NodeVersion: 20.x NodeVersion: 20.x
Os: windows Os: windows
- template: /eng/emitters/pipelines/templates/jobs/test-job.yml - template: /eng/emitters/pipelines/templates/jobs/test-job.yml
parameters: parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }} AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }} PackagePath: ${{ parameters.PackagePath }}
UnitTestArgs: ${{ parameters.UnitTestArgs }} TestArgs: ${{ parameters.UnitTestArgs }}
NodeVersion: 18.x NodeVersion: 18.x
Os: windows Os: windows
# Regen Test stage
# Responsible for running any regen tests needed to validate no manual changes were done.
# The contents of the artifact `build_artifacts` are available under the path `$(buildArtifactsPath)`.
- ${{ if ne(length(parameters.TestMatrix), 0) }}:
- stage: ${{ parameters.StagePrefix }}_Regen_Test
displayName: ${{ parameters.StagePrefix }} - Regen - Test
condition: and(succeeded(), ${{ parameters.Condition }})
dependsOn:
- ${{ parameters.DependsOn }}
- ${{ parameters.StagePrefix }}_Build
variables:
selfRepositoryPath: $(Build.SourcesDirectory)
buildArtifactsPath: $(Pipeline.Workspace)/build_artifacts
jobs:
- template: /eng/emitters/pipelines/templates/jobs/test-job.yml
parameters:
AdditionalInitializeSteps: ${{ parameters.AdditionalInitializeSteps }}
PackagePath: ${{ parameters.PackagePath }}
Os: windows
TestMatrix: ${{ parameters.TestMatrix }}

Просмотреть файл

@ -12,9 +12,10 @@ parameters:
# Currently not installing node in this template, but keeping this parameter for future use # Currently not installing node in this template, but keeping this parameter for future use
- name: NodeVersion - name: NodeVersion
type: string type: string
default: "20.x"
# Arguments needed to run unit tests # Arguments needed to run tests
- name: UnitTestArgs - name: TestArgs
type: string type: string
steps: steps:
@ -39,5 +40,5 @@ steps:
inputs: inputs:
pwsh: true pwsh: true
filePath: $(selfRepositoryPath)${{ parameters.PackagePath }}/eng/scripts/Test-Packages.ps1 filePath: $(selfRepositoryPath)${{ parameters.PackagePath }}/eng/scripts/Test-Packages.ps1
arguments: ${{ parameters.UnitTestArgs }} arguments: ${{ parameters.TestArgs }}
workingDirectory: $(selfRepositoryPath) workingDirectory: $(selfRepositoryPath)

Просмотреть файл

@ -20,5 +20,8 @@ stages:
file: typespec-http-client-csharp-*.tgz file: typespec-http-client-csharp-*.tgz
type: npm type: npm
UnitTestArgs: -UnitTests UnitTestArgs: -UnitTests
TestMatrix:
RegenCheck:
TestArguments: -GenerationChecks
Condition: ${{ parameters.Condition }} Condition: ${{ parameters.Condition }}
DependsOn: ${{ parameters.DependsOn }} DependsOn: ${{ parameters.DependsOn }}

Просмотреть файл

@ -0,0 +1,22 @@
#Requires -Version 7.0
param(
[string] $Exceptions
)
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version 3.0
$packageRoot = (Resolve-Path "$PSScriptRoot/../..").Path.Replace('\', '/')
. "$packageRoot/../../eng/emitters/scripts/CommandInvocation-Helpers.ps1"
Set-ConsoleEncoding
$diffExcludes = @(
"$packageRoot/package.json"
"$packageRoot/package-lock.json"
) | ForEach-Object { "`":(exclude)$_`"" } | Join-String -Separator ' '
Invoke-LoggedCommand "git -c core.safecrlf=false diff --ignore-space-at-eol --exit-code -- $diffExcludes" -IgnoreExitCode
if($LastExitCode -ne 0) {
throw "Changes detected"
}

Просмотреть файл

@ -28,6 +28,22 @@ try {
Pop-Location Pop-Location
} }
} }
if ($GenerationChecks) {
Set-StrictMode -Version 1
# run E2E Test for TypeSpec emitter
Write-Host "Generating test projects ..."
& "$packageRoot/eng/scripts/Generate.ps1"
Write-Host 'Code generation is completed.'
try {
Write-Host 'Checking for differences in generated code...'
& "$packageRoot/eng/scripts/Check-GitChanges.ps1"
Write-Host 'Done. No code generation differences detected.'
}
catch {
Write-Error 'Generated code is not up to date. Please run: eng/Generate.ps1'
}
}
} }
finally { finally {
Pop-Location Pop-Location