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
64 changes: 64 additions & 0 deletions azure-pipelines-PR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,70 @@ stages:
continueOnError: true
condition: failed()

# Windows Apex VS integration tests (non-gating — published for signal only)
- job: WindowsApexIntegration
variables:
- name: _configuration
value: Release
- name: __VSNeverShowWhatsNew
value: 1
pool:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals $(_WindowsMachineQueueName)
timeoutInMinutes: 90
steps:
- checkout: self
clean: true

- powershell: eng\SetupVSHive.ps1
displayName: Setup VS Hive

# Detect the installed VS's Roslyn version and set FSHARP_APEX_ROSLYN_VERSION so the VSIX below
# is built against it (the repo's forward Roslyn pin is newer than any CI/scout VS, so a VSIX
# built against the pin cannot load its Roslyn assemblies in the installed VS). Non-fatal.
- powershell: eng\SetApexRoslynVersion.ps1
displayName: Detect CI VS Roslyn version for Apex VSIX build

# Build + deploy the F# VSIX into the RoslynDev hive, then run the Apex tests. The Apex host
# resolves the installed VS via LocateVisualStudio (set as VisualStudio.InstallationUnderTest.Path
# by the -testApex path), so it does not depend on the local-only 'Canary' milestone.
# continueOnError keeps this leg non-gating: failures surface as signal but do not fail the PR.
- script: eng\CIBuildNoPublish.cmd -configuration $(_configuration) -deployExtensions -testApex
env:
NativeToolsOnMachine: true
displayName: Build, deploy extension and run Apex integration tests
continueOnError: true

- task: PublishTestResults@2
displayName: Publish Apex Test Results
inputs:
testResultsFormat: 'VSTest'
testRunTitle: WindowsApexIntegration
mergeTestResults: true
testResultsFiles: '*.trx'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_configuration)'
continueOnError: true
condition: succeededOrFailed()

- task: PublishBuildArtifacts@1
displayName: Publish Apex Test Logs
inputs:
PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults\$(_configuration)'
ArtifactName: Windows $(_configuration) Apex test logs
publishLocation: Container
continueOnError: true
condition: always()

- task: PublishBuildArtifacts@1
displayName: Publish Apex Build Logs
condition: always()
continueOnError: true
inputs:
PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)'
ArtifactName: Windows $(_configuration) Apex build logs
ArtifactType: Container
parallel: true

# Windows With Compressed Metadata Desktop (split into 3 batches)
- job: WindowsCompressedMetadata_Desktop
strategy:
Expand Down
78 changes: 78 additions & 0 deletions azure-pipelines-integration-dartlab.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# F# VS integration (Apex) test gate — runs against a Visual Studio installed via the VS
# bootstrapper on internal DartLab test machines, so the VS matches what this repo targets.
#
# SCAFFOLD — modeled on dotnet/roslyn's azure-pipelines-integration-dartlab.yml.
# This pipeline is INTERNAL-only and requires DevDiv/DartLab access that is not part of this
# repo. See eng/pipelines/apex-integration/README.md for the P0 prerequisites and every
# `# TODO(P0):` below for the real values that must be supplied before it can run.

trigger: none
pr: none

resources:
repositories:
- repository: DartLabTemplates
type: git
name: DevDiv/DartLab.Templates
ref: refs/heads/main
- repository: VSTemplates
type: git
name: DevDiv/VS.Templates
ref: refs/heads/main
# TODO(P0): provision an internal mirror of dotnet/fsharp and a matching service connection.
# Roslyn uses `internal/dotnet-roslyn` via the `dnceng-internal-code-access` endpoint.
- repository: FSharpMirror
endpoint: dnceng-internal-code-access
type: git
name: internal/dotnet-fsharp
ref: $(Build.SourceBranch)
# TODO(P0): the VS build under test supplies the bootstrapper to install. Interim: omit this and
# hard-code `visualStudioBootstrapperURI` in stage.yml to a pinned int.main Products drop. End
# state: reference the VS build pipeline so this runs as a gate on the consuming VS build.
# - pipeline: VisualStudioBuildUnderTest
# source: '<VS build pipeline name>'

parameters:
- name: prNumber
type: string
default: 'None'
- name: sha
type: string
default: 'None'
- name: EnforceLatestCommit
type: boolean
default: true
# '(default)' => stage.yml resolves the bootstrapper from the VS-build-under-test drop.
- name: visualStudioBootstrapperURI
type: string
default: '(default)'
- name: testCaseFilter
type: string
default: '(all)'
# Set to 'stop' to keep the test machine around for investigation after the run.
- name: testMachineCleanUpStrategy
displayName: Test Machine Clean Up Strategy
type: string
default: delete
values:
- delete
- stop
# Retention period for the test machine (format "D:H:M:S").
- name: testMachineRetention
displayName: Test Machine Retention (format "D:H:M:S")
type: string
default: 1:0:0:0

extends:
template: /DartLab/1ES/pipelines/ci/real-sign.yml@VSTemplates
parameters:
testStages:
- template: /eng/pipelines/apex-integration/stage.yml@self
parameters:
prNumber: ${{ parameters.prNumber }}
sha: ${{ parameters.sha }}
EnforceLatestCommit: ${{ parameters.EnforceLatestCommit }}
visualStudioBootstrapperURI: ${{ parameters.visualStudioBootstrapperURI }}
testCaseFilter: ${{ parameters.testCaseFilter }}
testMachineCleanUpStrategy: ${{ parameters.testMachineCleanUpStrategy }}
testMachineRetention: ${{ parameters.testMachineRetention }}
Loading
Loading